Jump to content
  • 0

pomoc [HELP] Příkazy se nevykonají


Meric

Dotaz

Ahojte. Mám poměrně zásadní problém. Původně jsem myslel, že je to bordelem v pawnu, ale omyl, ani po znovusepsání módu se problém nevyřešil. Abych svůj problém tedy popsal.. 

 

/svetla a /paska dělají scény. Stalo se mi už párkrát, že ty příkazy šly jen některým lidem. Zbytku ten příkaz zkrátka nefungoval, nevykonal se. U /paska se to dokonalo jen po podmínce if(sscanf(params, "i", targetid)) tuším, že to je takhle.

 

Světla samozřejmě vůbec. Jak je možné, že některým random hráčům příkaz funguje a jiným zase ne? A ne, není to fixovaný na ID 0, to je naprosto na náhodné ID. Teď jsem to teda testoval ve dvou a měli jsme problém oba, ale i tak. Přijde mi to dost nelogický.

 

Pro případ, že by byla chyba v příkazech a já byl jenom blbý, tak přikládám kód. Pomůžete mi, prosím?

 

 http://pastebin.com/DannVKd7

Link to comment
Share on other sites

8 odpovědí na tuto otázku

Recommended Posts

  • 0
  • Hlavní moderátor

Pokud se kód vykonal jen po nějakou část a pak se náhle zastavil, tak zřejmě došlo k přetečení pole. Ukaž nám, jak máš deklarované pole Lights, PlayerInfo.

 

Edit: Můžeš mi prozradit, k čemu zde:

CMD:svetla(playerid, params[], vehicleid)

Máš parametr vehicleid, když jej nepoužíváš?

Edited by vEnd
Link to comment
Share on other sites

  • 0

http://pastebin.com/6JHdknY9

 

Nemám to udělaný jako pole, ale tohle je vše co mám ke světlu. Předtím to bohatě stačilo. Vůbec nechápu, proč se v poslední době ty příkazy jako světlo a paska tak pobláznily. Jelikož to fungovalo jen náhodně někomu, tak jsem nechápal, v čem je potíž a z hledání problému v příkazu jsem ho hledal i v includech. A jsem si fakt bezradný.

Edit: Můžeš mi prozradit, k čemu zde: CMD:svetla(playerid, params[], vehicleid) Máš parametr vehicleid, když jej nepoužíváš?

Vlastně ani nevím, já ten příkaz nedělal, abych se přiznal. Já a úpravy týkající se vozidel v pawnu, to je pro mě španělská vesnice. Jedinou obměnu, co jsem tam kdysi dávno dělal byla, že jsem to rozdělil na pohlaví postavy.

Edited by Meric
Link to comment
Share on other sites

  • 0

Pohlaví postav využíváš i zde a ovlivňuje to hodně kód. Je možné, že někteří hráči mají nastavené pSex na jinou hodnotu než je 1 a 2?

 

//EDIT:

Zkus tedy podle pohlaví vypisovat zprávy a ostatní řešit nezávisle na něm...

Například

if(PlayerInfo[playerid][pSex] == 1)
{
    format(string, sizeof(string), "* %s stiskl tlačítko na palubní desce a zapl světla.", JmenoHrace(playerid));
    ProxDetector2(20, playerid, string, RP);
}
else if(PlayerInfo[playerid][pSex] == 2)
{
    format(string, sizeof(string), "* %s stiskla tlačítko na palubní desce a zapla světla.", JmenoHrace(playerid));
    ProxDetector2(20, playerid, string, RP);
}
// Tento kód máš v obouch blocích - jak pro pSex == 1, tak i pro pSex == 2. Můžeme ho tedy napsat jen jednou
// mimo bloky podmínky
Lights[vehicle] = 1;
new engine, lights, alarm, doors, bonnet, boot, objective;
GetVehicleParamsEx(vehicle, engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(vehicle, engine, 1, alarm, doors, bonnet, boot, 0);
return 1;
Edited by Lukasz
Link to comment
Share on other sites

  • 0

To tam je samozřejmě naschvál v obou blocích, protože to, co je pod tím se má stát, ať už jsi jakéhokoliv z těch dvou pohlaví. A ne, pSex 3 mít nemůže, to jsem si tam ohlídal a ošetřil. Vždy jen 1 nebo 2. On ten příkaz normálně fungoval, ale pak si začal fungovat tak, jak se mu zachtělo prostě. A nebo u koho se mu zachtělo. Já byl ID 2 a kámoš ID 6. On si mohl zapnout světla a vypnout, ale já třeba vůbec. To samý to v tu samou dobu bylo i s páskou a vůbec tomu nerozumím. Kdyby to bylo fixovaný na ID 0, tak by mi bylo jasný, že tam někde je chyba v determinaci hráče, ale to se nestalo.

Link to comment
Share on other sites

  • 0

No .. Nemyslím si, že by se nastavoval pSex na 3, nebo 0 nebo tak. Můžu ale zkusit kontrolní příkaz třeba hned zítra. Kdyby to nepomohlo, tak už fakt nevím, kde by mohl být problém. Snad jedině v nějakým includu, kterej by to nějak kazil, ale to mi taky nezní moc jako reálná možnost.

Edited by Meric
Link to comment
Share on other sites

  • 0

Asi jsme se nepochopili.. zkus toto

CMD:svetla(playerid, params[], vehicleid)
{
    if(GetPlayerState(playerid) == 2)
    {
        new vehicle = GetPlayerVehicleID(playerid);
        new string[123];
	
        if(PlayerInfo[playerid][pSex] == 1)
        {
             format(string, sizeof(string), "* %s stiskl tlačítko na palubní desce a %s světla.", JmenoHrace(playerid), Lights[vehicle] ? ("vypl") : ("zapl"));
	     ProxDetector2(20, playerid, string, RP);
        }
        else if(PlayerInfo[playerid][pSex] == 2)
        {
            format(string, sizeof(string), "* %s stiskla tlačítko na palubní desce a %s světla.", JmenoHrace(playerid), Lights[vehicle] ? ("vypl") : ("zapl"));
	    ProxDetector2(20, playerid, string, RP);
	}

        Lights[vehicle] = !Lights[vehicle];
	new engine, lights, alarm, doors, bonnet, boot, objective;
	GetVehicleParamsEx(vehicle, engine, lights, alarm, doors, bonnet, boot, objective);
	SetVehicleParamsEx(vehicle, engine, Lights[vehicle], alarm, doors, bonnet, boot, 0);
        return 1;
    }
    return SendClientMessage(playerid, -1, "Nejste řidič.");
}


///////////////////////////////// Páska ////////////////////////////////////////

CMD:paska(playerid, params[])
{
    new targetid, str[128];
    if(sscanf(params, "u", targetid)) return SendClientMessage(playerid, -1, "Použití: /paska [ID]");
    if(IsPlayerConnected(targetid))
    {
        new Float:x, Float:y, Float:z;
	GetPlayerPos(playerid, x, y, z);
        if(IsPlayerInRangeOfPoint(targetid, 3.0, x, y, z))
 	{
	    if(GetPVarInt(targetid, "Paska"))
	    {
	        if(PlayerInfo[playerid][pSex] == 1)
         	{
		    format(str, sizeof(str), "* %s přiložil ruku k lepící pásce, kterou má %s nalepenou přes ústa, poté jí strhl. *", JmenoHrace(playerid), JmenoHrace(targetid));
	            ProxDetector2(20, playerid, str, RP);
		}
		else if(PlayerInfo[playerid][pSex] == 2)
		{
		    format(str, sizeof(str), "* %s přiložila ruku k lepící pásce, kterou má %s nalepenou přes ústa, poté jí strhla. *", JmenoHrace(playerid), JmenoHrace(targetid));
		    ProxDetector2(20, playerid, str, RP);
		}
		SetPVarInt(targetid, "Paska", 0);
	    } else {
                if(PlayerInfo[playerid][pSex] == 1)
	        {
	            format(str, sizeof(str), "* %s přiložil k %s lepící pásku, poté pomocí ní zalepil osobě ústa. *", JmenoHrace(playerid), JmenoHrace(targetid));
		    ProxDetector2(20, playerid, str, RP);
	        } else if(PlayerInfo[playerid][pSex] == 2) {
	            format(str, sizeof(str), "* %s přiložila k %s lepící pásku, poté pomocí ní zalepila osobě ústa. *", JmenoHrace(playerid), JmenoHrace(targetid));
	 	    ProxDetector2(20, playerid, str, RP);
	        }
	        SetPVarInt(targetid, "Paska", 1);
	     }
        }
    }
    return 1;
}
Edited by Lukasz
Link to comment
Share on other sites

  • 0

Právě jsem to testoval. Kopla mě ta teorie s hodnotou proměnné na pohlaví 3, za což děkuju, protože by mě to fakt nenapadlo. :d Nějak to budu muset fixnout, ale myslím si, že zakopanej pes je právě v ukládání INFO o postavě. Protože jsem se znova jakoby registroval a vybral si pohlaví a tak dále a fungovalo to, jak má. Neukládalo se to. Tím pádem po odloginu v texťáku zůstala hodnota 0. Za předpokladu tedy, že má úvaha je správná. Díky moc za pomoc, zítra to zkusím a dám i vědět, jestli mám pravdu a zda je vyřešeno. Zatím neuzavírám téma, protože jak znám pawno, tak tam obzvlášť platí pravidlo "Neříkej hop, dokud jsi nepřeskočil.".

Edited by Meric
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...