Also es sieht ihn als näheste Person an deswegen tazed er sich wie kann ich es machen das er sich nicht selber "wahrnimmt" ??
Befehl:
dcmd_tazer(playerid,params[])
{
#pragma unused params
if(pInfo[playerid][team] == 1)
{
if(IsPlayerInAnyVehicle(playerid))
{
return SendClientMessage(playerid, COLOR_GREY, "Du kannst in einem Fahrzeug nicht tazern!");
}
if(IsPlayerConnected(pplayerid))
{
if(tazed[pplayerid] == 1)
{
return SendClientMessage(playerid, COLOR_GREY, "Dieser Spieler ist schon getazert!");
}
if(GetDistanceBetweenPlayers(playerid,pplayerid) < 5)
{
if(pInfo[pplayerid][team] == 1)
{
return SendClientMessage(playerid, COLOR_GREY, "Du kannst keinen Polizisten tazern!");
}
if(IsPlayerInAnyVehicle(pplayerid))
{
return SendClientMessage(playerid, COLOR_GREY, "Dieser Spieler ist in einem Fahrzeug!");
}
format(strink, sizeof(strink), "*Du wurdest von %s mit seinem Elektroschocker für 10 Sekunden geschockt.", name[playerid]);
SendClientMessage(pplayerid, COLOR_LIGHTBLUE, strink);
format(strink, sizeof(strink), "*Du hast %s für 8 Sekunden niedergestreckt.", name[pplayerid]);
SendClientMessage(playerid, COLOR_LIGHTBLUE, strink);
format(strink, sizeof(strink), "*%s nimmt seinen Elektroschocker raus und tazert %s.", name[playerid] ,name[pplayerid]);
GameTextForPlayer(pplayerid, "~r~Tazed!", 2500, 3);
TogglePlayerControllable(pplayerid, 0);
tazed[pplayerid] = 1;
SetTimerEx("untazed",10000,0,"i",pplayerid);
}
else
{
return SendClientMessage(playerid, COLOR_GREY, "Niemand ist in deiner Nähe!");
}
}
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Du bist kein Polizist!");
}
return 1;
}
Hilfe bei /tazer (tazed sich selbst)
- bad_company
- Geschlossen
- Erledigt
-
-
getazert.
Mir ist nicht ganz klar woher die Person mit der kürzesten Distanz kommen soll (pplayerid?) - um jedoch zu verhindern dass es playerid selbst ist, machst eine If-Bedingung (playerid!=pplayerid).
Dennoch erschließt sich mir nicht wie dein Code funktionieren soll - die eigene playerid sollte aber in der Funktion die den player mit der kürzesten Distanz zurückgibt (welche auch immer das sein mag) schon ausgeschlossen werden.
-
werde es testen
wundert mich nicht das man das nicht versteht
pplayerid ist bei mir eine globale variable die in jeden puplic aufgerufen werden kann wollte nich überall "new pplayerid;" hinschreiben...
(bis jetz auch immer funktionstüchtig ^^)strink ebenfalls global festgelegt wie groß er ist...
name[playerid/pplayerid]
einfach beim connecten den namen nehmen und speichern um nich so viel schreiben zu müssen ...wie gesagt werde es testen :D..
-
pplayerid ist bei mir eine globale variable die in jeden puplic aufgerufen werden kann :D wollte nich überall "new pplayerid;" hinschreiben...
Und genau da liegt mein Verständnisproblem. Denn wie das funktionieren soll dass in eben dieser Variablen die ID des Players mit der kürzesten Distanz zu playerid sein soll entbart mir jeder Grundlage. Passiert das in OnPlayerCommandText bevor zu irgend einem Commandvgl. weitergegangen wird oder wie?
Desweiteren verwirrt mich, warum nennst du einen String strink?
Warum globale Variablen (bis auf name - die ist die einzig sinvolle gesetzte)?
Aber das sind weitergehende Fragen die den Codestil betreffen, nicht deine ursprüngliche Frage.
-
wieso sollte ich überall "new string/strink[64(oder so)];" anstatt gleich festzulegen (oben) "new strink[64];" er heist strink weil ich ihn strink genannt hab fertig kann ihn auch lol nennen wen ich wöllte macht das ein unterschied außerdem gabs mal ein Prob. mit string da es immer sagte das es doppelt definiert sei also hab ich den einfach strink genannt (Fehler ist inzwischen behoben strink ist trd. geblieben)... ich weiß ja nicht wieso ich in jeden befehl strnk definieren soll wen er immer gleich ist
-
Verwendest du strink in mehreren Befehlen? Wenn ja, würde das ganze nicht funktionieren, wenn gleichzeitig ein anderer Befehl ausgeführt wird, der Strink verwendet...
-
wieso sollte ich überall "new string/strink[64(oder so)];" anstatt gleich festzulegen (oben) "new strink[64];"
Du redest von globalen Variablen. Sollte es der Fall sein dass strink eine globale Variable ist, dann aufgrund dessen dass es keinen Sinn macht diese Variable global anzulegen (Laufzeit Nachteil, Größe der AMX etc.). Hast Du sie (wie Du nun meinst) lokal in OnPlayerCommandText angelegt dann ist das schon in Ordnung. Ich persönlich mache das zwar nicht weil meine Output Strings immer untersch. Größe haben und ich nur soviele Zellen anlegen möchte wie ich auch brauche - aber das ist Geschmackssache denn daran wird die Performance im Normalfall kaum scheitern.
ZitatVerwendest du strink in mehreren Befehlen? Wenn ja, würde das ganze nicht funktionieren, wenn gleichzeitig ein anderer Befehl ausgeführt wird, der Strink verwendet...
Das stimmt nicht, dein Script führt Block für Block aus, es kann nicht passieren dass zwei Spieler gleichzeitig auf die selbe Variable zugreifen.
OnTopic:
Ich bin mir ziemlich sicher, dass dein Code nicht funktioniert, denn es erschließt sich mir immer noch nicht wie pplayerid belegt wird.
-
breadfish.de
Hat das Thema geschlossen.