Szerző Téma: Parancsok  (Megtekintve 930 alkalommal)

Parancsok
« Dátum: 2013. július 18. - 22:28:53 »
0 Show voters
Sziasztok!
Most kezdtem el tanulni pawno-t és arra gondoltam hogy lehet-e ugy parancsot létrehozni hogy ha elötte nem irsz be egy másikat nem menne végbe.
Példa:
Beirom hogy /rablás nem állna neki kirabolni a bankot mert elötte nem irtad be hogy /táskafel és ki irná hogy elöször vedd fel a táskát. Miután felvetted és utána irnád be hogy /rablás már müködne és utána /táskale lettenéd és ha utána elmennél még 1-ser akkor megint nem müködne.
Ezt lehetséges valahogy megcsinálni?

Nem elérhető SnooP

  • 1798
  • SnooP
    • Profil megtekintése
Parancsok
« Válasz #1 Dátum: 2013. július 18. - 22:38:13 »
0 Show voters
Elõször a script legelejére:
 

#include <a_samp>
#include <zcmd> // A parancsfeldolgozó amit használunk (hatékonyabb mint az strcmp több parancsnál, bõvebben róla : http://sampforum.hu/index.php?topic=32497.0 )
new bool:ellenoriz;/* Globális változó (a különbség a sima és e közt, hogy míg a sima az adott
kódnál fut, ez müködik többnél is, ez lehet enum is akár, ha több adatot akarunk kezelni egyszerübben */

 
Másodjára, mindegy hová csak ne eljárásba rakd :D :
 
CMD:taskafel(playerid, params[])
{
ellenoriz = true;
SendClientMessage(playerid, -1, \"A játékos beírta a parancsot így beálítottuk a bool értékét igazra\");
return 1;
}
CMD:rabol(playerid, params[])
{
  if(ellenoriz == true) // Ha a bool értéke igaz ( Mivel igaz csak úgy lehet ha beírta a parancsunkat, ha nem igaz ergo nem írta be az adott parancsot
{
SendClientMessage(playerid, -1, \"Te rabolhatsz mert beírtad a parancsot\");
}
else
{
SendClientMessage(playerid, -1, \"Te nem rabolhatsz. Rabláshoz elõször /tarskafel\");
}
return 1;
}

 
E: Két dolog csak:
1. Elnézést az ékezetek miatt de valamiért a pawno-ba írt ékezeteket a fórum nem kezeli :/
2. Az strcmp a leggyorsabb parancsfeldolgozó, DE! csak kevés parancs esetén. Erre az strcmp is tökéletes , de több parancs esetén a ZCMD gyorsabban kezeli az adatokat/parancsokat és egyszerûbb is a használata.
« Utoljára szerkesztve: 2013. július 18. - 22:42:05 írta SnooP »

Parancsok
« Válasz #2 Dátum: 2013. július 18. - 23:11:13 »
0 Show voters
Beraktam de szerintem rossz helyre mert erroros lett
 
if(strcmp(cmd, \"/kisbolt-raboleq\", true) == 0 )
{
    if(IsPlayerConnected(playerid))
{
   if(kisboltrabol2 == 0)
   {
       if(PlayerToPoint(20.0, playerid, -24.8997,-55.5550,1003.5469) )
      {
          if(PlayerInfo[playerid][szervTag] == 1 || PlayerInfo[playerid][szervLeader] == 1 || PlayerInfo[playerid][szervTag] == 2 || PlayerInfo[playerid][szervLeader] == 2)
          {
             if(PlayerInfo[playerid][szervTag] == 1 || PlayerInfo[playerid][szervLeader] == 1)
            {
            SzervUzi(1, COLOR_LIGHTRED, \"[bANDAÜZENET]: Elkezdtétek pakolni a pénzt!\");
            }
            else if(PlayerInfo[playerid][szervTag] == 2 || PlayerInfo[playerid][szervLeader] == 2)
            {
            SzervUzi(2, COLOR_LIGHTRED, \"[bANDAÜZENET]: Elkezdtétek pakolni a pénzt!\");
            }
            SendClientMessage(playerid,COLOR_LIGHTRED,\"Elkezdted pakolni a pénzt...\");
            RobTimer[playerid] = SetTimerEx(\"elegvolt3\", 300*60*2, false, \"i\", playerid);
            TogglePlayerControllable(playerid, 0);
            ApplyAnimation(playerid, \"SHOP\", \"ROB_Loop_Threat\", 4.0, 1, 0, 0, 0, 0);
            ApplyAnimation(playerid, \"SHOP\", \"ROB_Loop_Threat\", 4.0, 1, 0, 0, 0, 0);
            ApplyAnimation(playerid, \"SHOP\", \"ROB_Loop_Threat\", 4.0, 1, 0, 0, 0, 0);
            ApplyAnimation(playerid, \"SHOP\", \"ROB_Loop_Threat\", 4.0, 1, 0, 0, 0, 0);
            ApplyAnimation(playerid, \"SHOP\", \"ROB_Loop_Threat\", 4.0, 1, 0, 0, 0, 0);
            ApplyAnimation(playerid, \"SHOP\", \"ROB_Loop_Threat\", 4.0, 1, 0, 0, 0, 0);
            ApplyAnimation(playerid, \"SHOP\", \"ROB_Loop_Threat\", 4.0, 1, 0, 0, 0, 0);
            SendRadioMessage(1, 0x33AA33AA,\"Központ:Minden egységnek figyelem!!!\");
            SendRadioMessage(1, 0x33AA33AA,\"Központ:Kirabolták A kisboltot EQ ban!\");
            SendRadioMessage(1, 0x33AA33AA,\"Központ:Minden szabad egység menjen oda!\");
            SendRadioMessage(9, 0x33AA33AA,\"Központ:Minden egységnek figyelem!!!\");
            SendRadioMessage(9, 0x33AA33AA,\"Központ:Kirabolták A kisboltot EQ ban!\");
            SendRadioMessage(9, 0x33AA33AA,\"Központ:Minden szabad egység menjen oda!\");
            new nev[32];
            GetPlayerName(playerid, nev, sizeof(nev));
            format(string, sizeof(string), \"* %s elkezdte pakolni a pénzt a táskába\", nev);
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
            SetPlayerChatBubble(playerid, \"elkezdte pakolni a pénzt a táskába\", COLOR_PURPLE, 80.0, 10000);
         }else SendClientMessage(playerid,0x165AC0FF,\"Nem vagy bandatag.\");
      }else SendClientMessage(playerid,0x165AC0FF,\"Nem vagy kisboltban, vagy nem rég rabolták ki.\");
   }else SendClientMessage(playerid,0x165AC0FF,\"Nem vagy kisboltban, vagy nem rég rabolták ki.\");
}
}

 
Hova illeszem?

Nem elérhető SnooP

  • 1798
  • SnooP
    • Profil megtekintése
Parancsok
« Válasz #3 Dátum: 2013. július 18. - 23:23:21 »
0 Show voters
Szerintem még maga a parancs sem fog lefutni, mivel:
 
if(strcmp(cmd, \"/kisbolt-raboleq\", true) == 0 )

 
OnPlayerCommandText-nél cmdtext és nem cmd : http://wiki.sa-mp.com/wiki/OnPlayerCommandText
Ezen kívül milyen hibáid vannak? Másold be ide.

Parancsok
« Válasz #4 Dátum: 2013. július 18. - 23:39:50 »
0 Show voters
Táska:
 
    if(strcmp(cmd, \"/táskafel\", true) == 0 || strcmp(cmd, \"/tf\", true) == 0)
{
ellenoriz = true;
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
    if(PlayerInfo[playerid][szervTag] == 1 || PlayerInfo[playerid][szervLeader] == 1 || PlayerInfo[playerid][szervLeader] == 3 || PlayerInfo[playerid][szervTag] == 3)
    {
   if(IsPlayerInRangeOfPoint(playerid, 6, 2495.9277,-1696.8187,1014.7422))
   {
       SetPlayerAttachedObject(playerid, 6, 1550, 1, 0.1, -0.3, 0, 0, 40, 0, 1, 1, 1);
                SendClientMessage(playerid,COLOR_GREEN,\"Táska felvéve\");
   }
   else SendClientMessage(playerid,COLOR_GRAD2,\"Csak a táskáknál tudod felvenni!\");
}
else SendClientMessage(playerid,COLOR_GRAD2, \"Nem vagy egy banda tagja sem.\");
return 1;
}

 
itt beirtam amit mondtál és itt jo minden semmi error sincs csak a rablás résznél nem tudom hova kéne beirni.
egyépként a /kisbolt-raboleq parancs müködik teszteltem.

Parancsok
« Válasz #5 Dátum: 2013. július 19. - 07:09:47 »
0 Show voters
de mit ír amikor errorozik,másold be

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
Parancsok
« Válasz #6 Dátum: 2013. július 19. - 10:14:27 »
0 Show voters
Snoop, én sima változó helyett tömböt hoznék létre a játékosok ID-je szerint, tehát:
 
new bool:ellenoriz[MAX_PLAYERS];

Parancsok
« Válasz #7 Dátum: 2013. július 19. - 14:59:20 »
0 Show voters
Sikerült beillesztenem error nélküld de még se müködik.
elmegyek rabolni a táska nélkül és ki is irja hogy elöször vegyem fel, de közbe még is kirabolja

Nem elérhető Rexii

  • 471
    • Profil megtekintése
Parancsok
« Válasz #8 Dátum: 2013. július 19. - 19:36:48 »
0 Show voters
Igen, mert a rablás funkcióit meg kell szüntetni. Úgy kell megoldanod, hogy ha az if igaz, akkor raboljon, és ha else van akkor ne legyenek a rablásnak funkciói. Tehát ott SendClientMessage legyen egyedül. (Goudlyne módból van azt látom, de nekem eq-ban nem mûködik a kisbolt rablás, azt írja nem vagyok bandatag, pedig vla leader vagyok, de ez csak mellékes :D )

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal