-
Ü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;
}
-
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 ( && ).
-
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?
-
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.
}
}
-
Í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)
{
...
}
...
-
Í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]
-
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...
-
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.
-
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!\"); }
-
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;
}
-
if(BlokkoltSkinek(skinid))
helyett:
if(!BlokkoltSkinek(skinid))
mert most csak \"blokkolt skint\" tudsz varrni!
-
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;
}
-
TiltottSkinek tömböt másold be
-
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;
}
-
Nem lenne egyszerûbb simán if-et, és ést használni...?
-
úgy akartam de úgy legalább 3 if sor kellene mert egybe nem fér ki minden.
-
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)
{
}
}
}
-
Nagyon Szépen Köszönöm Mindnenkinek A Sok Segítséget Sokat Tanultam Belõle!