GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => Szkript kérések => SA-MP: Szerverfejlesztés => RP/RPG kérések => A témát indította: Chris_Antonio - 2014. január 30. - 13:01:00

Cím: /varr Parancs Probléma
Írta: Chris_Antonio - 2014. január 30. - 13:01:00
Üdvözlök Mindenkit!
Hoztam egy parancsot amivel igen csak meggyûlt a bajom sajnos nem bírok rájönni mi okozza a hibát. Ez egy /varr parancs. Próbáltam keresgélni a google-n de, sehol nem találtam megoldást rá. Nos elmondom a problémám. Szeretnék egy pár skin-t tiltani a /varr parancs alatt hogy, ne mûködjön mikor magamon használom a /varr parancsot de mikor más játékoson használom a parancsot akkor se mûködjön. Tehát ne engedje meg hogy az adott skin id-t megvarrja egyáltalán! Sajnos ez az egyetlen egy parancs aminél eddig elakadtam és tanácstalan is vagyok. Mellesleg még egy problémám van egy if parancsot hogy lehett több sorba folytatni. Aki eltudná magyarázni egy példával megköszönném! Elõre elnézést ha rossz helyre nyitottam a témát régen fórumoztam már!
 
   if(strcmp(cmd, \"/varr\", true) == 0)
{
    tmp = strtok(cmdtext, idx);
       giveplayerid = ReturnUser(tmp);
       tmp = strtok(cmdtext, idx);
new skine = strval(tmp);
//tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
   SendClientMessage(playerid,COLOR_LIGHTBLUE, \"BloueWard RPG: /varr [JátékosID/NévRészlet] [skinID]\");
   return 1;
}
        if(GetDistanceBetweenPlayers(playerid, giveplayerid) < 5)
       {
            if(PlayerInfo[playerid][pJob] == 24)
            {
            if(PlayerInfo[playerid][Penz] >= 25000)
              {
           if(skine != 211 || skine != 217 || skine != 29 || skine != 293 || skine != 285 || skine != 267 || skine != 266 || skine != 265 || skine != 280 || skine != 281 || skine != 282 || skine != 228 || skine != 59 || skine != 186 || skine != 165 || skine != 294 || skine != 147 || skine != 187 || skine != 163 || skine != 171 || skine != 117 || skine != 118 || skine != 121)
         {
            PlayerInfo[giveplayerid][Civilruha2] = skine;
            PlayerInfo[playerid][Penz] -= 25000;
            SafeGivePlayerMoney(playerid, -25000);
            SetPlayerSkin(giveplayerid, skine);
            PlayerInfo[playerid][XP] += 100;
            SendClientMessage(playerid,COLOR_WHITE, \"Sikeres megvarrtad a ruhát! 25.000FT volt az anyagköltség! Kaptál 100XP-t!\");
            SendClientMessage(giveplayerid,COLOR_WHITE, \"Sikeresen varrtak neked egy új ruhát.\");
            new nev[32];
            new nev2[32];
            GetPlayerName(playerid, nev, sizeof(nev));
            GetPlayerName(giveplayerid, nev2, sizeof(nev2));
            new h,mi,s,y,m,d;
            getdate(y,m,d);
            gettime(h,mi,s);
            format(stringx,sizeof(stringx), \"[%d/%d/%d][%d:%d:%d][Ruha] %s varrt egy ruhát %s. SkinID: %d\",y,m,d,h,mi,s,nev,rag(nev2,2),skine);
            LoOoG(stringx);
            format(string, sizeof(string), \"* %s megvarrta a ruhát %s.\", nev, rag(nev2,2));
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
            return 1;
          } else  SendClientMessage(playerid,COLOR_GRAD2, \"Ezt nem varrhatod!\");
      } else SendClientMessage(playerid,COLOR_GRAD2, \"Nincs elég pénzed az alapanyagra! (25.000Ft)\");
   } else SendClientMessage(playerid,COLOR_GRAD2,\"Nem vagy szabó!\");
        }
else
{
   SendClientMessage(playerid, COLOR_GRAD2,\"Nincs a közeledben az illetõ!\");
}
return 1;
}
Cím: /varr Parancs Probléma
Írta: Dfoglalo - 2014. január 30. - 13:08:12
Az if nem parancs. De szerintem ez kell neked:
 
if(skine != 19 && skine != 93) // Amennyiben a skine nem 19, és nem is 93
{
    // Ide jön a ruha megvarrása
}

 
Amit te használtál, az az OR, azaz a VAGY ( || ), de neked az AND, azaz az ÉS kell ( && ).
Cím: /varr Parancs Probléma
Írta: Chris_Antonio - 2014. január 30. - 13:43:54
Igaz az if tényleg nem parancs csak elírtam köszönöm a helyesbítést. Viszont általába mindig keverni szoktam az && és az || jeleket  és amúgy több sorba egy if sort mégis hogy, lehett folytatni ha, szabad kérdezni?
mert nekem olyan hosszú a listám hogy egy sorba nem fér ki esetleg ezt egy példába be tudnád mutatni kérlek szépen?
Cím: /varr Parancs Probléma
Írta: Dfoglalo - 2014. január 30. - 14:14:27
Ha az a problémád, hogy túl hosszú a sor, válassz rövidebb változókat. Na meg valahogy sort is lehet törni, de most hirtelen nem tudom hogyan. :(
Vagy oszd két részre:
 
if(valami == 0) // Ha ezeknek megfelel, akkor...
{
    if(valami == 9) // ...megnézi, hogy ezeknek is meg felel e, és ha igen, akkor...
    {
        // ...ez történik.
    }
}
Cím: /varr Parancs Probléma
Írta: Erik3333 - 2014. január 30. - 14:19:26
Így próbáld meg:
 
...
if(skine != 211 && skine != 217 && skine != 29 && skine != 293 && skine != 285 && skine != 267 && skine != 266 && skine != 265 && skine != 280 && skine != 281 && skine != 282 && skine != 228 && skine != 59 && skine != 186 && skine != 165 && skine != 294 && skine != 147 && skine != 187 && skine != 163 && skine != 171 && skine != 117 && skine != 118 && skine != 121)
{
...
}
...
Cím: /varr Parancs Probléma
Írta: Dfoglalo - 2014. január 30. - 14:43:45
Idézetet írta: Gun22 date=1391087966\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"46156\" data-ipsquote-contentclass=\"forums_Topic
Így próbáld meg:
 
...
if(skine != 211 && skine != 217 && skine != 29 && skine != 293 && skine != 285 && skine != 267 && skine != 266 && skine != 265 && skine != 280 && skine != 281 && skine != 282 && skine != 228 && skine != 59 && skine != 186 && skine != 165 && skine != 294 && skine != 147 && skine != 187 && skine != 163 && skine != 171 && skine != 117 && skine != 118 && skine != 121)
{
...
}
...

 

Nem ez a problémája, mint kiderült. Amúgy meg ugyanezt írtam le neki én is... Legközelebb figyelj rá, hogy ne írj olyat, amelyet már más leírt neki!
 

Az if nem parancs. De szerintem ez kell neked:
 
if(skine != 19 && skine != 93) // Amennyiben a skine nem 19, és nem is 93
{
    // Ide jön a ruha megvarrása
}

 
Amit te használtál, az az OR, azaz a VAGY ( || ), de neked az AND, azaz az ÉS kell ( && ).
 
[/quote]
Cím: /varr Parancs Probléma
Írta: Kovacs_Richard - 2014. január 30. - 14:46:05
skine != 211 || skine != 217

 
HA skine NEM 211 VAGY NEM 217
a VAGY-nál az elsõ IGAZ feltételnél lefut a kód...
beírja a 211-et a játékos:
211 != 211 ez FALSE mivel 211 = 211-el ugye
aztán jön a következõ...
211 != 217 ez TRUE mivel 217 nem = 211-el szóval megtudja varrni a ruhát!
vagy beírod egyesével
 
v != 1 && v!= 2 && v!= 2  && v!= 3 && v!= 4 && v!= 5

 
vagy berakod 1 tömbbe és ciklussal (akár saját függvényben) végig mész az ID-kon és leellenõrzöd...
Cím: /varr Parancs Probléma
Írta: Chris_Antonio - 2014. január 30. - 15:19:31
Az elsõ részét értettem de, a ciklus és tömb példa alatt nem tudom mire gondolsz bemutatnád kérlek?:) elõre is nagyon köszönöm.
Cím: /varr Parancs Probléma
Írta: Kovacs_Richard - 2014. január 31. - 08:01:24
new BlockedSkins[10] = {0,1,2,3,4,5,6,7,8,9};
stock IsSkinBlocked(skinid)
{
    for(new i = 0; i < sizeof(BlockedSkins); i++)
    {
        if(skinid == BlockedSkins) { return true; }
    }
    return false;
}

 

if(IsSkinBlocked(skinid)) { return SendClientMessage(playerid,COLOR,\"Ezt nem varrhatod!\"); }
Cím: /varr Parancs Probléma
Írta: Chris_Antonio - 2014. január 31. - 12:39:28
Most Viszont minden skinre azt írja amikor leütöm a parancsot hogy, \"Ezt nem varrhatod!\". Aki tudna segíteni elõre is köszönöm!
Kódrészletek:
 
   if(strcmp(cmd, \"/varr\", true) == 0)
{
    tmp = strtok(cmdtext, idx);
       giveplayerid = ReturnUser(tmp);
       tmp = strtok(cmdtext, idx);
new skine = strval(tmp);
new skinid;
//tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
   SendClientMessage(playerid,COLOR_LIGHTBLUE, \"BloueWard RPG: /varr [JátékosID/NévRészlet] [skinID]\");
   return 1;
}
        if(GetDistanceBetweenPlayers(playerid, giveplayerid) < 5)
       {
            if(PlayerInfo[playerid][pJob] == 24)
            {
            if(PlayerInfo[playerid][Penz] >= 25000)
              {
         if(BlokkoltSkinek(skinid))
         {
            PlayerInfo[giveplayerid][Civilruha2] = skine;
            PlayerInfo[playerid][Penz] -= 25000;
            SafeGivePlayerMoney(playerid, -25000);
            SetPlayerSkin(giveplayerid, skine);
            PlayerInfo[playerid][XP] += 100;
            SendClientMessage(playerid,COLOR_WHITE, \"Sikeres megvarrtad a ruhát! 25.000FT volt az anyagköltség! Kaptál 100XP-t!\");
            SendClientMessage(giveplayerid,COLOR_WHITE, \"Sikeresen varrtak neked egy új ruhát.\");
            new nev[32];
            new nev2[32];
            GetPlayerName(playerid, nev, sizeof(nev));
            GetPlayerName(giveplayerid, nev2, sizeof(nev2));
            new h,mi,s,y,m,d;
            getdate(y,m,d);
            gettime(h,mi,s);
            format(stringx,sizeof(stringx), \"[%d/%d/%d][%d:%d:%d][Ruha] %s varrt egy ruhát %s. SkinID: %d\",y,m,d,h,mi,s,nev,rag(nev2,2),skine);
            LoOoG(stringx);
            format(string, sizeof(string), \"* %s megvarrta a ruhát %s.\", nev, rag(nev2,2));
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
         } else SendClientMessage(playerid,COLOR_GRAD2, \"Ezt nem varrhatod!\");
      } else SendClientMessage(playerid,COLOR_GRAD2, \"Nincs elég pénzed az alapanyagra! (25.000Ft)\");
   } else SendClientMessage(playerid,COLOR_GRAD2,\"Nem vagy szabó!\");
        }
else
{
   SendClientMessage(playerid, COLOR_GRAD2,\"Nincs a közeledben az illetõ!\");
}
return 1;
}

 

stock BlokkoltSkinek(skinid)
{
for(new i = 0; i < sizeof(TiltottSkinek); i++)
{
    if(skinid == TiltottSkinek)
{
   return true;
}
}
return false;
}
Cím: /varr Parancs Probléma
Írta: Kovacs_Richard - 2014. február 01. - 23:34:37
if(BlokkoltSkinek(skinid))

 
helyett:
 
if(!BlokkoltSkinek(skinid))

 
mert most csak \"blokkolt skint\" tudsz varrni!
Cím: /varr Parancs Probléma
Írta: Chris_Antonio - 2014. február 02. - 12:44:20
Most viszont tudok minden skinid-t varrni még a tiltottakat is.
Kódrészlet:
 
   if(strcmp(cmd, \"/varr\", true) == 0)
{
    tmp = strtok(cmdtext, idx);
       giveplayerid = ReturnUser(tmp);
       tmp = strtok(cmdtext, idx);
new skine = strval(tmp);
new skinid;
//tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
   SendClientMessage(playerid,COLOR_LIGHTBLUE, \"BloueWard RPG: /varr [JátékosID/NévRészlet] [skinID]\");
   return 1;
}
        if(GetDistanceBetweenPlayers(playerid, giveplayerid) < 5)
       {
            if(PlayerInfo[playerid][pJob] == 24)
            {
            if(PlayerInfo[playerid][Penz] >= 25000)
              {
         if(!BlokkoltSkinek(skinid))
         {
            PlayerInfo[giveplayerid][Civilruha2] = skine;
            PlayerInfo[playerid][Penz] -= 25000;
            SafeGivePlayerMoney(playerid, -25000);
            SetPlayerSkin(giveplayerid, skine);
            PlayerInfo[playerid][XP] += 100;
            SendClientMessage(playerid,COLOR_WHITE, \"Sikeres megvarrtad a ruhát! 25.000FT volt az anyagköltség! Kaptál 100XP-t!\");
            SendClientMessage(giveplayerid,COLOR_WHITE, \"Sikeresen varrtak neked egy új ruhát.\");
            new nev[32];
            new nev2[32];
            GetPlayerName(playerid, nev, sizeof(nev));
            GetPlayerName(giveplayerid, nev2, sizeof(nev2));
            new h,mi,s,y,m,d;
            getdate(y,m,d);
            gettime(h,mi,s);
            format(stringx,sizeof(stringx), \"[%d/%d/%d][%d:%d:%d][Ruha] %s varrt egy ruhát %s. SkinID: %d\",y,m,d,h,mi,s,nev,rag(nev2,2),skine);
            LoOoG(stringx);
            format(string, sizeof(string), \"* %s megvarrta a ruhát %s.\", nev, rag(nev2,2));
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
         } else SendClientMessage(playerid,COLOR_GRAD2, \"Ezt nem varrhatod!\");
      } else SendClientMessage(playerid,COLOR_GRAD2, \"Nincs elég pénzed az alapanyagra! (25.000Ft)\");
   } else SendClientMessage(playerid,COLOR_GRAD2,\"Nem vagy szabó!\");
        }
else
{
   SendClientMessage(playerid, COLOR_GRAD2,\"Nincs a közeledben az illetõ!\");
}
return 1;
}
Cím: /varr Parancs Probléma
Írta: Kovacs_Richard - 2014. február 02. - 14:28:00
TiltottSkinek tömböt másold be
Cím: /varr Parancs Probléma
Írta: Chris_Antonio - 2014. február 02. - 14:30:35
new TiltottSkinek[57] =   { 211, 217, 29 ,293, 285, 267, 266, 265, 280, 281, 282, 228, 59, 186, 165, 294, 147, 187, 163, 171, 117 ,118, 112, 122, 123, 294, 224, 169, 241, 242, 247, 100, 181, 248, 122, 123, 294, 224, 241, 247, 181, 248, 194, 172, 91, 169, 298, 105, 269, 271, 270, 171, 124, 126, 120, 113, 242 };

 

stock BlokkoltSkinek(skinid)
{
for(new i = 0; i < sizeof(TiltottSkinek); i++)
{
    if(skinid == TiltottSkinek)
{
   return true;
}
}
return false;
}
Cím: /varr Parancs Probléma
Írta: Dfoglalo - 2014. február 02. - 14:35:27
Nem lenne egyszerûbb simán if-et, és ést használni...?
Cím: /varr Parancs Probléma
Írta: Chris_Antonio - 2014. február 02. - 16:37:19
úgy akartam de úgy legalább 3 if sor kellene mert egybe nem fér ki minden.
Cím: /varr Parancs Probléma
Írta: Dfoglalo - 2014. február 02. - 16:41:11
Akkor megírod 3 if sorba, mi a probléma?
 
if(skin != 83 && skin != 93)
{
    if(skin != 183 && skin != 293)
    {
        if(skin != 84 && skin != 12)
        {
        }
    }
}
Cím: /varr Parancs Probléma
Írta: Chris_Antonio - 2014. február 02. - 22:32:01
Nagyon Szépen Köszönöm Mindnenkinek A Sok Segítséget Sokat Tanultam Belõle!