GTA Közösség - A magyar GTA fórum
San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: dexi - 2011. december 14. - 11:45:56
-
[pawn]if(strcmp(cmd, \"/kirabol\", true) == 0)
{
new Float:xpos,Float:ypos,Float:zpos;
new aesd, aesde;
if(IsPlayerInRangeOfPoint(playerid,3, xpos,ypos,zpos))
for(new p = 0; p < MAX_PLAYERS; p++)
{
GetPlayerPos(p,xpos,ypos,zpos);
aesd = GetPlayerMoney(p);
aesde = GetPlayerMoney(playerid);
SetPlayerMoney(p,aesd - aesd);
SetPlayerMoney(playerid, aesd+aesde);
SendClientMessage(playerid, -1,\"Kiraboltad a csókát.\");
SendClientMessage(p,-1,\"Nézd csak meg a pénztárcád;)\");
return 1;
}
else SendClientMessage(playerid,red,\"Nincs a közeledben senki.\");
return 1;
}[/pawn]
Gyors összedobtam ezt a parancsot.. csak nincs kivel tesztelnem. Szerintetek mûködne?
-
röviden a válasz: NEM :D
de azért kiváncsi lennék a gondolat menetedre :)
[pawn]
new Float:xpos,Float:ypos,Float:zpos;
if(IsPlayerInRangeOfPoint(playerid,3, xpos,ypos,zpos))
[/pawn]
ez röviden annyit takar számomra hogy 0.0,0.0,0.0-tól mérten 3.0 Range távolságban kell álljon az ember a parancs használatához
[pawn]GetPlayerPos(p,xpos,ypos,zpos);[/pawn]
Lekérdezed a játékos pozícióját de késõbb nem is kezdesz semmit az adatokkal :O
[pawn]
aesd = GetPlayerMoney(p);
aesde = GetPlayerMoney(playerid);
SetPlayerMoney(p,aesd - aesd);
SetPlayerMoney(playerid, aesd+aesde);
[/pawn]
Minden pénzét elveszi a tolvaj nem? akkor nem kell számolni semmit :) \"aesd - aesd\"
[pawn]SetPlayerMoney(p,0);[/pawn]
Gondolom kezdõ vagy még scriptelés terén :) kezdésnek nem rossz azért :P
Próbáld meg talán ezzel menni fog :)
[pawn]
if(strcmp(cmd, \"/kirabol\", true) == 0)
{
new Float:xpos,Float:ypos,Float:zpos;
new spenz,lpenz; // Saját Pénz , Lopott Pénz
new bool:lopas; // Lopott e a játékos
for(new p = 0; p < MAX_PLAYERS; p++)
{
if(!IsPlayerConnected(p) || p == playerid) { continue; }
GetPlayerPos(p,xpos,ypos,zpos);
if(IsPlayerInRangeOfPoint(playerid,3.0, xpos,ypos,zpos))
{
lpenz = GetPlayerMoney(p); spenz = GetPlayerMoney(playerid);
SetPlayerMoney(p,0); SetPlayerMoney(playerid, spenz+lpenz);
lopas = true;
//
SendClientMessage(playerid, -1,\"Kiraboltál egy csókát.\"); // Azért módosítottam mert az összes közelben levõt kirabolja nem csak egyet
SendClientMessage(p,-1,\"Nézd csak meg a pénztárcád;)\");
}
}
if(lopas == false ) { SendClientMessage(playerid,red,\"Nincs a közeledben senki.\"); } // Ha nem lopott senkitõl
return 1;
}
[/pawn]
-
Nem szeretném csak úgy kimásolni, úgy szerintem nem fogok többet tudni : D.
[pawn]if(strcmp(cmd, \"/kirabol\", true) == 0)
{
new Float:xpos,Float:ypos,Float:zpos;
new aesd, aesde;
for(new p = 0; p < MAX_PLAYERS; p++)
{
GetPlayerPos(p,xpos,ypos,zpos);
if(IsPlayerInRangeOfPoint(playerid,3, xpos,ypos,zpos))
{
aesd = GetPlayerMoney(p);
aesde = GetPlayerMoney(playerid);
SetPlayerMoney(p,aesd - aesd);
SetPlayerMoney(playerid, aesd+aesde);
SendClientMessage(playerid, -1,\"Kiraboltad a csókát.\");
SendClientMessage(p,-1,\"Nézd csak meg a pénztárcád;)\");
return 1;
}
else SendClientMessage(playerid,red,\"Nincs a közeledben senki.\");
return 1;
}
}[/pawn]
Most változtattam rajta valami lényegeset? :D
-
hát most a Range ellenõrzést jó helyre raktad :)
[pawn]SetPlayerMoney(p,aesd - aesd);[/pawn]
ez még mindig felesleges matematikai mûvelet :D ha kivonod a számból önmagát akkor 0-t fogsz kapni :D
[pawn]SetPlayerMoney(p,0);[/pawn]
ha az 1. \"return 1;\"-et bent hagyod akkor a kód 1 közeli játékosnál fut le, tehát az 1. közeli ID-t kirabolod és megáll a kód futása.
Te vagy mondjuk a 0-s ID:
1-es ID távolsága mondjuk: 4.0
2-es ID távolsága mondjuk: 2.8
3-as ID távolsága mondjuk: 2.2
...
És te a 2-es ID-t rabolod ki, aztán a return 1 miatt nem fut tovább a kód
[pawn]else SendClientMessage(playerid,red,\"Nincs a közeledben senki.\");[/pawn]
ez a kód jelen helyzetben semmit nem ér, és szerintem felesleges az IF után tenni mint ELSE ág, mivel akkor minden egyes ID-nál kiirja aki nincs a közeledben, hogy \"Nincs a közeledben senki.\"
[pawn]if(!IsPlayerConnected(p) || p == playerid) { continue; }[/pawn]
ezt a részt rakd be az általam írt kódból, ez arra jó, hogy saját magát ne rabolja ki az ember :D és az offline ID-kat átugorja
-
[pawn] if(strcmp(cmd, \"/kirabol\", true) == 0)
{
new Float:xpos,Float:ypos,Float:zpos;
new aesd, aesde;
for(new p = 0; p < MAX_PLAYERS; p++)
{
if(!IsPlayerConnected(p) || p == playerid) { continue; }
GetPlayerPos(p,xpos,ypos,zpos);
if(IsPlayerInRangeOfPoint(playerid,3, xpos,ypos,zpos))
{
aesd = GetPlayerMoney(p);
aesde = GetPlayerMoney(playerid);
SetPlayerMoney(p,aesd - aesd);
SetPlayerMoney(playerid, aesd+aesde);
SendClientMessage(playerid, -1,\"Kiraboltad a csókát.\");
SendClientMessage(p,-1,\"Nézd csak meg a pénztárcád;)\");
return 1;
}
else SendClientMessage(playerid,red,\"Nincs a közeledben senki.\");
return 1;
}
}[/pawn]
Így ha beírom a parancsot ki írja hogy ninsc ilyen parancs.
-
Minek két return?
Elég csak a végére
-
ezt a kódot próbáld meg, a tied kicsit szerkesztve
[pawn]
if(strcmp(cmd, \"/kirabol\", true) == 0)
{
new Float:xpos,Float:ypos,Float:zpos;
new aesd, aesde;
for(new p = 0; p < MAX_PLAYERS; p++)
{
if(!IsPlayerConnected(p) || p == playerid) { continue; }
GetPlayerPos(p,xpos,ypos,zpos);
if(IsPlayerInRangeOfPoint(playerid,3, xpos,ypos,zpos))
{
aesd = GetPlayerMoney(p);
aesde = GetPlayerMoney(playerid);
SetPlayerMoney(p,0);
SetPlayerMoney(playerid, aesd+aesde);
SendClientMessage(playerid, -1,\"Kiraboltad a csókát.\");
SendClientMessage(p,-1,\"Nézd csak meg a pénztárcád;)\");
return 1;
}
}
}
[/pawn]
[pawn]
else SendClientMessage(playerid,red,\"Nincs a közeledben senki.\");
return 1;
[/pawn]
ezt a részt vágtam ki :)
-
ezt a kódot próbáld meg, a tied kicsit szerkesztve
[pawn]
if(strcmp(cmd, \"/kirabol\", true) == 0)
{
new Float:xpos,Float:ypos,Float:zpos;
new aesd, aesde;
for(new p = 0; p < MAX_PLAYERS; p++)
{
if(!IsPlayerConnected(p) || p == playerid) { continue; }
GetPlayerPos(p,xpos,ypos,zpos);
if(IsPlayerInRangeOfPoint(playerid,3, xpos,ypos,zpos))
{
aesd = GetPlayerMoney(p);
aesde = GetPlayerMoney(playerid);
SetPlayerMoney(p,0);
SetPlayerMoney(playerid, aesd+aesde);
SendClientMessage(playerid, -1,\"Kiraboltad a csókát.\");
SendClientMessage(p,-1,\"Nézd csak meg a pénztárcád;)\");
return 1;
}
}
}
[/pawn]
[pawn]
else SendClientMessage(playerid,red,\"Nincs a közeledben senki.\");
return 1;
[/pawn]
ezt a részt vágtam ki :)
az strcmp-nek kell visszaadni értéket.
én így csinálnám:
[pawn]if(strcmp(cmd, \"/kirabol\", true) == 0)
{
new Float:xpos,Float:ypos,Float:zpos;
new aesd, aesde;
for(new p = 0; p < MAX_PLAYERS; p++)
{
if(!IsPlayerConnected(p) || p == playerid) { continue; }
GetPlayerPos(p,xpos,ypos,zpos);
if(IsPlayerInRangeOfPoint(playerid,3, xpos,ypos,zpos))
{
aesd = GetPlayerMoney(p);
aesde = GetPlayerMoney(playerid);
SetPlayerMoney(p,0);
SetPlayerMoney(playerid, aesd+aesde);
SendClientMessage(playerid, -1,\"Kiraboltad a csókát.\");
SendClientMessage(p,-1,\"Nézd csak meg a pénztárcád;)\");
}
}
return 1;
}[/pawn]