Jump to content
  • 0

pomoc Error Undefined


Paulee

Dotaz

Zdravím,

Dneska jsem se dokopal k tomu abych si už předělal GM, ve kterém jsem měl místo háčků a čárek " ? ". Už to mám předělané, ale vyskatla se tu další chyba.

Když chci GM zkompilovat, tak to vyhodí tyto chyby:

 

 

error 017: undefined symbol "EventEnd"
error 017: undefined symbol "EventEnd"
error 017: undefined symbol "IsVehicleDodavka"
error 017: undefined symbol "GetEventMember"
error 017: undefined symbol "ZrusEvent"
error 017: undefined symbol "GetEventMember"
error 017: undefined symbol "GetEventWinner"
error 017: undefined symbol "EventDruhName"
error 017: undefined symbol "ZrusEvent"
error 017: undefined symbol "GetEventMember"
error 017: undefined symbol "GetEventWinner"
error 017: undefined symbol "EventDruhName"
error 017: undefined symbol "ZrusEvent"
error 017: undefined symbol "GetEventMember"
error 017: undefined symbol "EventDruhName"
error 017: undefined symbol "ZrusEvent"
error 017: undefined symbol "PlayerItems"
error 017: undefined symbol "CHECK_COmponent"

 

 

Zde mám stock EventEnd.

 

 

forward EventEnd(playerid);
public EventEnd(playerid)
{
    if(PlayerEvent[playerid] == 1)
	{
        SetPlayerVirtualWorldEx(playerid, 0);
    	BackToport(playerid, 1);
        PlayerEvent[playerid] = 0;
        PlayerEventTeam[playerid] = 0;

		switch(Event[EventDruh])
		{
		    case EVENT_DERBY:
			{
				TogglePlayerControllable(playerid, 1);
	            new ranExx = PlayerEventCar[playerid];
	   			DestroyVehicleExX(DerbyVeh[ranExx]);
			}
			case EVENT_DM, EVENT_TEAM_DM: RemovePlayerWeapon(playerid, Event[EventZbran1]);
        }
        
        TogglePlayerControllable(playerid, 1);
	}
	return 1;
}

 

 

 

A zde je užití tohoto stocku:

 

 

                                        if(PlayerEvent[playerid] == 1)
					{
					    if(Player_Pos[2][playerid] >= FALL_OUT_Z - 15)
					    {
                                                SetPlayerArmedWeapon(playerid, Event[EventZbran1]);
						}else{
						    if(Event[EventDruh] == EVENT_FALLOUT || Event[EventDruh] == EVENT_PLOSINY || Event[EventDruh] == EVENT_DERBY)
						    {
						        EventEnd(playerid);
							}
						}
						if(Event[EventVytvoren] == 1 && Event[EventPortON] == 0)
						{
							if(Event[EventDruh] == EVENT_DM || Event[EventDruh] == EVENT_TEAM_DM)
							{
							    if(Hrac[AFKAway][playerid] > 30)
							    {
                                                          EventEnd(playerid); //Zde to hází chybu undefined
							    }
							}
						}
					}

 

 

 

A takhle to mám podobně u všech stocků. Hází to pouze undefined i když ten stock v tom GM je. EventEnd jsem použil jako příklad. Podobné je to i u ostatních.

 

Poradíte prosím? Vůbec nevím, proč to tuto chybu vyhazuje. Za každou radu budu rád.

 

Přeji pěkný den,

S pozdravem Petr.

Link to comment
Share on other sites

17 odpovědí na tuto otázku

Recommended Posts

  • 0

Co jsem si četl o funkci public, tudíž i froward, tak se používá pouze když jí voláš časovačem, nebo CallLocalFunction a CallRemoteFunction. Myslím že by ti to takhle házet chyby nemělo.
Ale pokud tu metodu nevoláš časovačem nebo těma dvěma, přijde mi zbytečný tam dávat public a forward. Použij jednoduše stock EndEvent(playerid){}

Nevím jestli tohle pomůže vyřešit errory, ale myslím si, že to je zlepšení

Link to comment
Share on other sites

  • 0
  • Hlavní moderátor

Co jsem si četl o funkci public, tudíž i froward, tak se používá pouze když jí voláš časovačem, nebo CallLocalFunction a CallRemoteFunction. Myslím že by ti to takhle házet chyby nemělo.

Ale pokud tu metodu nevoláš časovačem nebo těma dvěma, přijde mi zbytečný tam dávat public a forward. Použij jednoduše stock EndEvent(playerid){}

Nevím jestli tohle pomůže vyřešit errory, ale myslím si, že to je zlepšení

Máš pravdu v tom, že se to používá pro časovače a pro volání pomocí CLF/CRF, ale to neznamená, že to nejde používat i tak, jak to dělá on. Jde.

 

A ohledně toho stocku, ani ten stock tam být nemusí. Viz tento návod, kde jsem o public, stock a dalších psal.

 

Paulee: K tvému problému, určitě to máš vše ve stejném souboru?

Link to comment
Share on other sites

  • 0

Máš pravdu v tom, že se to používá pro časovače a pro volání pomocí CLF/CRF, ale to neznamená, že to nejde používat i tak, jak to dělá on. Jde.

 

A ohledně toho stocku, ani ten stock tam být nemusí. Viz tento návod, kde jsem o public, stock a dalších psal.

 

Paulee: K tvému problému, určitě to máš vše ve stejném souboru?

Určitě :d Ten public se používá i v timerech.

 

Ono je nejhorší, že ani Poliš si stím nevěděl rady. :d

Edited by Paulee
Link to comment
Share on other sites

  • 0

chyba je medzi klávesnicou a stoličkou = keď ti kompilátor hlási, že tú funkciu nepozná, tak ju nepozná = buď ju tam nemáš(napr. zle nalinkovaný skript) alebo ti ju mohlo niekde prepísať/nezaradiť makro atď..

Link to comment
Share on other sites

  • 0

Public EventEnd:

 

 

forward EventEnd(playerid);
public EventEnd(playerid)
{
    if(PlayerEvent[playerid] == 1)
	{
        SetPlayerVirtualWorldEx(playerid, 0);
    	BackToport(playerid, 1);
        PlayerEvent[playerid] = 0;
        PlayerEventTeam[playerid] = 0;

		switch(Event[EventDruh])
		{
		    case EVENT_DERBY:
			{
				TogglePlayerControllable(playerid, 1);
	            new ranExx = PlayerEventCar[playerid];
	   			DestroyVehicleExX(DerbyVeh[ranExx]);
			}
			case EVENT_DM, EVENT_TEAM_DM: RemovePlayerWeapon(playerid, Event[EventZbran1]);
        }
        
        TogglePlayerControllable(playerid, 1);
	}
	return 1;
}

 

 

IsVehicledodavka

 

 

stock IsVehicleDodavka(VehicleID)
{
    for(new i; i < DodavkyCount; i ++)
	{
		if(Dodavky[i][DodavkaID] == VehicleID)
		{
		    return i;
		}
 	}
	return -1;
}

 

 

GetEventMember:

 

 

stock GetEventMember()
{
	new Member;
    ForMaxPlayer(i)
    {
        if(PlayerEvent[i] == 1) Member ++;
    }
	return Member;
}

 

 

ZrusEvent

 

 

stock ZrusEvent()
{
	if(Event[EventVytvoren] == 1)
	{
		if(Event[EventDruh] == EVENT_FALLOUT || Event[EventDruh] == EVENT_PLOSINY)
		{
		    for(new x; x < MAX_FALL; x ++)
			{
			    DestroyObject(FallObjectID[x]);
			}
		}

		if(Event[EventDruh] == EVENT_PLOSINY) DestroyPickup(Event[EventPickup]);

        if(Event[EventDruh] == EVENT_DERBY)
		{
			for(new i; i < MAX_DERBY_CAR; i ++)
			{
	            DestroyVehicleExX(DerbyVeh[i]);
	            DerbyVehUsed[i] = 0;
			}
			DestroyObject(FallObjectID[0]);
			DestroyObject(FallObjectID[1]);
		}

        if(Event[EventDruh] == EVENT_BLUDISTE)
		{
		    for(new x; x < 8; x ++)
			{
			    DestroyObject(FallObjectID[x]);
			}
	        for(new i; i < MAX_BLUDISTE; i ++)
		    {
				DestroyObject(BludisteObj[i]);
			}
			DestroyPickup(Event[EventPickup]);
		}

	    ForMaxPlayer(i)
	    {
	    	if(PlayerEvent[i] == 1)
			{
			    EventEnd(i);
			}
		}

	    format(Event[EventName], MAX_EVEN_NAME, "");
	    Event[EventVytvoren] = 0;
	    Event[EventDruh] = 0;
	    Event[EventPortON] = 0;
	    Event[EventZbran1] = 0;
	    Event[EventVyhra] = 0;
	    Event[EventTimeKonec] = 0;

	    for(new i; i < MAX_EVENT_SPAWN; i ++)
	    {
			Event[EventSpawnDM_X][i] = 0.0000;
			Event[EventSpawnDM_Y][i] = 0.0000;
			Event[EventSpawnDM_Z][i] = 0.0000;
		}
	}
	Event[EventDruh] = 0;
	return 1;
}

 

 

 

Celý GM se mi sem dávat moc nechce, jelikož je to dost dlouhé a je v tom i pár mých věcí.

Za každou radu budu moc rád, jelikož si stím už opravdu nevím rady.

Link to comment
Share on other sites

  • 0
  • Administrátor

Tady je ten problém že já si myslím že někde není uzavřená funkce tudíž to všechno pod tím bere jako neexistující. JE to asi 60k řádků takže se to v tom hodně blbě hledá. 

Link to comment
Share on other sites

  • 0

Tady je ten problém že já si myslím že někde není uzavřená funkce tudíž to všechno pod tím bere jako neexistující. JE to asi 60k řádků takže se to v tom hodně blbě hledá. 

No právě.

Dostal jsem nápad. Napadlo mě rozdělit tento GM na několik souborů. Ze začátku bych jel třeba po 10k. Tím pádem 6 souborů. A pak bych viděl, v jakém úseku to je. A pak to rozdělil po 5k apod. Co vy na to? :d

Link to comment
Share on other sites

  • 0

Public EventEnd:

 

 

forward EventEnd(playerid);
public EventEnd(playerid)
{
    if(PlayerEvent[playerid] == 1)
	{
        SetPlayerVirtualWorldEx(playerid, 0);
    	BackToport(playerid, 1);
        PlayerEvent[playerid] = 0;
        PlayerEventTeam[playerid] = 0;

		switch(Event[EventDruh])
		{
		    case EVENT_DERBY:
			{
				TogglePlayerControllable(playerid, 1);
	            new ranExx = PlayerEventCar[playerid];
	   			DestroyVehicleExX(DerbyVeh[ranExx]);
			}
			case EVENT_DM, EVENT_TEAM_DM: RemovePlayerWeapon(playerid, Event[EventZbran1]);
        }
        
        TogglePlayerControllable(playerid, 1);
	}
	return 1;
}

 

 

IsVehicledodavka

 

 

stock IsVehicleDodavka(VehicleID)
{
    for(new i; i < DodavkyCount; i ++)
	{
		if(Dodavky[i][DodavkaID] == VehicleID)
		{
		    return i;
		}
 	}
	return -1;
}

 

 

GetEventMember:

 

 

stock GetEventMember()
{
	new Member;
    ForMaxPlayer(i)
    {
        if(PlayerEvent[i] == 1) Member ++;
    }
	return Member;
}

 

 

ZrusEvent

 

 

stock ZrusEvent()
{
	if(Event[EventVytvoren] == 1)
	{
		if(Event[EventDruh] == EVENT_FALLOUT || Event[EventDruh] == EVENT_PLOSINY)
		{
		    for(new x; x < MAX_FALL; x ++)
			{
			    DestroyObject(FallObjectID[x]);
			}
		}

		if(Event[EventDruh] == EVENT_PLOSINY) DestroyPickup(Event[EventPickup]);

        if(Event[EventDruh] == EVENT_DERBY)
		{
			for(new i; i < MAX_DERBY_CAR; i ++)
			{
	            DestroyVehicleExX(DerbyVeh[i]);
	            DerbyVehUsed[i] = 0;
			}
			DestroyObject(FallObjectID[0]);
			DestroyObject(FallObjectID[1]);
		}

        if(Event[EventDruh] == EVENT_BLUDISTE)
		{
		    for(new x; x < 8; x ++)
			{
			    DestroyObject(FallObjectID[x]);
			}
	        for(new i; i < MAX_BLUDISTE; i ++)
		    {
				DestroyObject(BludisteObj[i]);
			}
			DestroyPickup(Event[EventPickup]);
		}

	    ForMaxPlayer(i)
	    {
	    	if(PlayerEvent[i] == 1)
			{
			    EventEnd(i);
			}
		}

	    format(Event[EventName], MAX_EVEN_NAME, "");
	    Event[EventVytvoren] = 0;
	    Event[EventDruh] = 0;
	    Event[EventPortON] = 0;
	    Event[EventZbran1] = 0;
	    Event[EventVyhra] = 0;
	    Event[EventTimeKonec] = 0;

	    for(new i; i < MAX_EVENT_SPAWN; i ++)
	    {
			Event[EventSpawnDM_X][i] = 0.0000;
			Event[EventSpawnDM_Y][i] = 0.0000;
			Event[EventSpawnDM_Z][i] = 0.0000;
		}
	}
	Event[EventDruh] = 0;
	return 1;
}

 

 

 

Celý GM se mi sem dávat moc nechce, jelikož je to dost dlouhé a je v tom i pár mých věcí.

Za každou radu budu moc rád, jelikož si stím už opravdu nevím rady.

Asi těžko sem budu dávat 60k řádků ...

Link to comment
Share on other sites

  • 0

Co jsem si četl o funkci public, tudíž i froward, tak se používá pouze když jí voláš časovačem, nebo CallLocalFunction a CallRemoteFunction. Myslím že by ti to takhle házet chyby nemělo.

Ale pokud tu metodu nevoláš časovačem nebo těma dvěma, přijde mi zbytečný tam dávat public a forward. Použij jednoduše stock EndEvent(playerid){}

Nevím jestli tohle pomůže vyřešit errory, ale myslím si, že to je zlepšení

 

stock znamena, ze fce se pouziva jenom v tom danom AMXku, je to stejne co private fce u C++.

public zase znamena, ze fce muze byt volana i z jineho mista, treba pluginy nebo filterscripty ji muzou volat. to same co public fce u C++.

forward je zase deklarace fce, tj. nato, abys mohl zavolat nejakou fci, tak musis znat jeji deklaraci, treba jestli bere playerid nebo neco jineho. to same, co treba extern fce u C/C++.

fci muzes napsat treba v GM a forwardovat ji ve filterscriptu a pak ji nasledne pouzit.

Link to comment
Share on other sites

  • 0
  • Globální moderátor

doporučuju projíždět kód od prvního řádku kde to vyhazuje undefine symbol a postupně nahoru... ;)

Link to comment
Share on other sites

  • 0

(Paulee mi poslal zdrojáky)
takže:
1. je to jeden hnusný, pekelne veľký chlp
2. hneď na riadku 18 je prvá chyba

#pragma warning disable 017

3. na riadku 27256 ti chýba zátvorka }
4. na riadku 51008 máš cyklus strčený v switchi (wtf)
5. a pod ním (51016) ti zase chýba ďalšia zátvorka }
6. na riadkoch 55182 a 56329 máš funkciu s rovnakým názvom


ako som to v tom chlpe našiel?
keďže kompilátor vracia len 26 errorových správ (a nenašiel som možnosť ako ich získať viac) ktoré sú zoradené podľa čísla riadku, tak vďaka chýbajúcim zátvorkám sa nevytvárali ďalšie funkcie a preto ich vyvolanie (ktoré bolo omnoho skôr) zaspamovali error list a znemožnili vidieť tie podstatné errory...
riešenie?
hneď na začiatku súboru som si začal umelo vytvárať tie "akože" problémové funkcie, aby sa error zmenil na warrning (tie nie sú počtom obmedzené) a takto som sa "prelistoval" až k tým podstatným errorom
 
ukážkový kód problému:

main()
{
	f_01();
	f_02();
	f_03();
	f_04();
	f_05();
	f_06();
	f_07();
	f_08();
	f_09();
	f_10();
	f_11();
	f_12();
	f_13();
	f_14();
	f_15();
	f_16();
	f_17();
	f_18();
	f_19();
	f_20();
	f_21();
	f_22();
	f_23();
	f_24();
	f_25();
	f_26();
	f_27();

	{ // zámerná chyba
}

f_01(){} f_02(){} f_03(){} f_04(){} f_05(){} f_06(){} f_07(){} f_08(){} f_09(){} f_10(){}
f_11(){} f_12(){} f_13(){} f_14(){} f_15(){} f_16(){} f_17(){} f_18(){} f_19(){} f_20(){}
f_21(){} f_22(){} f_23(){} f_24(){} f_25(){} f_26(){} f_27(){}

výpis z kompilátora:

test(112) : error 017: undefined symbol "f_01"
test(113) : error 017: undefined symbol "f_02"
test(114) : error 017: undefined symbol "f_03"
test(115) : error 017: undefined symbol "f_04"
test(116) : error 017: undefined symbol "f_05"
test(117) : error 017: undefined symbol "f_06"
test(118) : error 017: undefined symbol "f_07"
test(119) : error 017: undefined symbol "f_08"
test(120) : error 017: undefined symbol "f_09"
test(121) : error 017: undefined symbol "f_10"
test(122) : error 017: undefined symbol "f_11"
test(123) : error 017: undefined symbol "f_12"
test(124) : error 017: undefined symbol "f_13"
test(125) : error 017: undefined symbol "f_14"
test(126) : error 017: undefined symbol "f_15"
test(127) : error 017: undefined symbol "f_16"
test(128) : error 017: undefined symbol "f_17"
test(129) : error 017: undefined symbol "f_18"
test(130) : error 017: undefined symbol "f_19"
test(131) : error 017: undefined symbol "f_20"
test(132) : error 017: undefined symbol "f_21"
test(133) : error 017: undefined symbol "f_22"
test(134) : error 017: undefined symbol "f_23"
test(135) : error 017: undefined symbol "f_24"
test(136) : error 017: undefined symbol "f_25"
test(137) : error 017: undefined symbol "f_26"

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


26 Errors.

Edited by milous22
  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...