-
Csõ all!
Én egy versenyzõs rendõrös szervert fogok csinálni, és azt nem tudom megcsinálni hogy amikor a rendõr a versenyzõ közelében van akkor nem használhat semmilyen parancsot és ha használ akkor ezt írja ki:
Nem használhatsz parancsokat addig amíg üldöznek a rendõrök!
Elõre is köszi ;)
-
Ezzel tudod ellenõrizni, hogy van-e a megadott játékos közeléebn valaki.
stock IsPlayerInRangeOfPlayer(playerid, targetid, Float:radi = 5.0)
{
if(IsPlayerConnected(playerid) && IsPlayerConnected(targetid))
{
new Float: posx,
Float: posy,
Float: posz;
new Float: oldposx,
Float: oldposy,
Float: oldposz;
new Float: tempposx,
Float: tempposy,
Float: tempposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
GetPlayerPos(targetid, posx, posy, posz);
tempposx = (oldposx -posx);
tempposy = (oldposy -posy);
tempposz = (oldposz -posz);
if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
{
return 1;
}
}
return 0;
}
http://forum.sa-mp.com/showthread.php?t=92679&highlight=foreach
foreach
if(!strcmp(cmdtext, \"/mycmd\"))
{
new
bool:IsTrue;
foreach(Player, i)
{
if(IsPlayerInRangeOfPlayer(playerid, i)
{
IsTrue = true;
break;
}
}
if(IsTrue)
{
Közelibe van
}
else
{
Nincs
}
}
-
kösz, és ezt hogy oldjam meg?
-
E:\\[HUNDriftstuntWorld [0.3c]\\gamemodes\\DriftstuntWorld.pwn(4785) : error 001: expected token: \")\", but found \"{\"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Error.
1 error
-
Keresd meg és javítsd ki.
-
Nem tudom,hogy oldodtad meg a csapatokat,én most ezt gTeam-el teszem.
Kurta a tied több szempontból is hibás.
if(!strcmp(cmdtext, \"/mycmd\"))
{
new
bool:IsTrue;
foreach(Player, i)
{
if(IsPlayerInRangeOfPlayer(playerid, i) && gTeam[playerid] == TEAM_ZSARU)
{
IsTrue = true;
break;
}
}
if(IsTrue)
{
Közelibe van
}
else
{
Nincs
}
}
Vagy,ha semmilyen parancsot ne tudjon használni:
public OnPlayerCommandText(playerid, cmdtext[])
{
foreach(Player, i)
{
if(IsPlayerInRangeOfPlayer(playerid, i) && gTeam[playerid] == TEAM_ZSARU)
return SendClientMessage(playerid, 0xFFFFFFFF, \"Nem használhatsz parancsot rendõr közelében.\");
}
//Inentõl jönnek a parancsaid,ez a help csak egy példa,vedd ki
if(!strcmp(cmdtext, \"/help\", true))
{
SendClientMessage(playerid, 0xFFFFFFFF, \"blabla\");
return 1;
}
return 0;
}
-
Ezt raktam be:
public OnPlayerCommandText(playerid, cmdtext[])
{
foreach(Player, i)
{
if(IsPlayerInRangeOfPlayer(playerid, i) && gTeam[playerid] == TEAM_ZSARU)
return SendClientMessage(playerid, 0xFFFFFFFF, \"Nem használhatsz parancsot rendõr közelében.\");
}
//Inentõl jönnek a parancsaid,ez a help csak egy példa,vedd ki
if(!strcmp(cmdtext, \"/help\", true))
{
SendClientMessage(playerid, 0xFFFFFFFF, \"blabla\");
return 1;
}
return 0;
}
1 error van benne:
C:\\Documents and Settings\\Rendszergazda\\Asztal\\RaC\\gamemodes\\RaC.pwn(251) : error 017: undefined symbol \"IsPlayerInRangeOfPlayer\"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Error.
Mi lehet a hiba?
-
error 017: undefined symbol \"IsPlayerInRangeOfPlayer\"
Azt jelenti, hogy az \"IsPlayerInRangeOfPlayer\" Nincs definiálva.
Menj a mod elejére, és csinálj egy new-t.
-
error 017: undefined symbol \"IsPlayerInRangeOfPlayer\"
Azt jelenti, hogy az \"IsPlayerInRangeOfPlayer\" Nincs definiálva.
Menj a mod elejére, és csinálj egy new-t.
Ha nem értesz a scripteléshez hülyeségeket ne írj :)
Ezt rakd be a módodba vhova:
stock IsPlayerInRangeOfPlayer(playerid, targetid, Float:radi = 5.0)
{
if(IsPlayerConnected(playerid) && IsPlayerConnected(targetid))
{
new Float: posx,
Float: posy,
Float: posz;
new Float: oldposx,
Float: oldposy,
Float: oldposz;
new Float: tempposx,
Float: tempposy,
Float: tempposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
GetPlayerPos(targetid, posx, posy, posz);
tempposx = (oldposx -posx);
tempposy = (oldposy -posy);
tempposz = (oldposz -posz);
if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
{
return 1;
}
}
return 0;
}
-
Kritika megengedett. :amazed:
Látom születnek az átgondolatlan kódok.
foreach(Player, i)
{
if(IsPlayerInRangeOfPlayer(playerid, i) && gTeam[playerid] == TEAM_ZSARU)
return SendClientMessage(playerid, 0xFFFFFFFF, \"Nem használhatsz parancsot rendõr közelében.\");
}
Átfutási folyamat:
for ciklus a szerveren lévõ online playerid értékekkel.
foreach(Player, i)
Én kis naiv játékos beírok egy parancsot, most rendõr team tagjaként.
Hah.
Leellenõrzõm hogy más játékos közelében vagyok-e, sõt még azt is hogy saját magamhoz képest is.
if(IsPlayerInRangeOfPlayer(playerid, i)
Na igen elég közel vagyok saját magamhoz.
Akkor megnézem rendõr vagyok-e?
gTeam[playerid] == TEAM_ZSARU
Teszem mind ezt rendõrként aztán erre az jön ki, elég közel vagyok magamhoz sõt rendõr team tagja is vagyok és erre kapom ezt az üzenetet:
Nem használhatsz parancsot rendõr közelében.[/quote]
Írtam egy változatot tesztelni nem teszteltem, ha nem jól mûködik jelezd javítani fogom.
Mivel én se tudom milyen változót használsz ezért én is gTeam[MAX_PLAYERS] deklarációval írtam meg.
stock
kozelembenvanerendor(const playerid, Float:korsugar = 6.0)
{
new
Float:px,
Float:py,
Float:pz;
GetPlayerPos(playerid, px, py, pz); // Játékos pozició lekérdezés
foreach(Player, i)
{
if(i == playerid) continue;
if(gTeam == TEAM_RENDOR) // Az online játékosok közül megkeressük a rendõr teamhez tartozókat
{
if(IsPlayerInRangeOfPoint(i, korsugar, px, py, pz)) // a versenyzõ koordináta pontjához képest (adott gömb alakú tér melynek radiusza a korsugar deklaráció) tartózkódik-e rendõr játékos
{
return true; // Oh igen van egy a közeledben
}
}
}
return false;
}
COMMAND:mycmd(playerid, params[])
{
if(gTeam[playerid] == TEAM_RENDOR) return SendClientMessage(playerid, -1, \"Rendõr vagy.\");
if(kozelembenvanerendor(playerid)) return SendClientMessage(playerid, -1, \"Van rendõr a közeledben\");
// használni kívánt parancs többi kódja..
return 1;
}
-
kösz mindenkinek. Tökéletesen mûködik!:D
Témát zárom.