Hi, Ich habe alles so weit fertig außer die beiden Wichtigen Sachen
Also der Spieler gibt /service medic ein. Daraufhin wird eine Nachricht an alle Medics gesendet. Und wenn der Medic dann mit /accept medic angenommen hat, soll er die Koordinaten des Verletzen bekommen. Wie mache ich das? Und ich möchte noch das der Verletze die Nachricht bekommt: NAME hat deinen Notruf angenommen. Warte an deiner jetzigen Position bis dir geholfen wurde. Natürluch das NAME durch den Medicnamen ersetzen. Und der Medic soll die Nachricht bekommen: Du hast den Notruf von NAME angenommen. Die Koordinaten sind auf deiner Karte gespeichert. Natürlich auch hier das Name durch den Spielernamen ersetzen. Aber ich weis nicht wie ich den Namen des Verletzen und seine Koordinaten heraus finden soll da es ja in einen 2. Befehl übergehen soll. Also mit GetPlayerPos usw. ist mir klar. Aber wie gebe ich die Positionen weiter an den 2. Befehl?
Wie erstelle ich einen /accept medic?
- Acrio
- Geschlossen
- Erledigt
-
-
Benutzt du ocmd oder strcmp ?
mfg.
-
Eigentlich lieber ocmd aber diese Abfrage noch dazu. if(!strcmp(params, "medic", true))
-
Okay hier mal die Grundstruktur:
//oben im Script
new Float:zX, Float:zY, Float:zZ, zID = -1;//bei deinem Sevrice Befehl
GetPlayerPos(playerid, zX, zY, zZ);
zID = playerid;//Der accept Befehl
ocmd:accept(playerid, params[])
{
new ops[128];
if(sscanf(params,"s",ops)) return SendClientMessage(playerid,rot,"Verwendung: /accept z.B.[medic]");
//
if(!strcmp(ops, "medic", true))
{
if(zID == -1) return SendClientMessage(playerid,rot,"Es hat niemand einen Medic gerufen !");
SetPlayerCheckpoint(playerid, zX, zY, zZ, 5.0);
new string[128], name[24];
GetPlayerName(zID, name, 24);
format(string, sizeof string,"Du hast die Hilfe von %s aktzeptiert !",name);
SendClientMessage(playerid,rot,string);
zID = -1;
}
return 1;
}mfg.
-
Danke wofür steht denn das "ops" bei if(!strcmp?
-
Danke wofür steht denn das "ops" bei if(!strcmp?
Das ist einfach nur irgendein string, die Variable kannst du nennen wie du willst, aber dieser string liest aus, was der Spieler eingegeben hat (macht das ganze etwas dynamischer), dann kannst du auch z.B. sowas machen:ocmd:accept(playerid, params[])
{
new ops[128];
if(sscanf(params,"s",ops)) return SendClientMessage(playerid,rot,"Verwendung: /accept z.B.[medic]");
//
if(!strcmp(ops, "medic", true))
{
//wenn man /accept medic eingegeben hat
}
else if(!strcmp(ops, "Drogen", true))
{
//wenn man /accept Drogen eingegeben hat
}
return 1;
}mfg.
-
Jemand hatte mir mal gesagt ich muss noch ein if(params[0]) davor einfügen. Brauche ich das garnicht?
-
Jemand hatte mir mal gesagt ich muss noch ein if(params[0]) davor einfügen. Brauche ich das garnicht?
Das ist nur eine andere Schreibweise, die man natürlich auch verwenden kannmfg.
-
Ok Danke Aber hier wird immer gesagt: Tag mismatch.
GetPlayerPos(playerid, zX, zY, zZ);
-
Kannst du mal die 3 Zeilen drüber und die 3 Zeilen drunter posten und hast du oben die news so eingefügt wie ich es gemacht habe ?
mfg.
-
-
if(BereitsNotruf[playerid] == 0)
{
if(zID == -1)return SendClientMessage(playerid, COLOR_GRAU, "Niemand benötigt Hilfe.");
SetPlayerCheckpoint(playerid, zX, zY, zZ, 5);
new zName[MAX_PLAYER_NAME],
zstr[125];
Hier.Aber mir fällt gerade auf. Was wenn 2 oder 3 Leute gleichzeitig /service medic machen? Dann wird die Variable doch überschrieben und nur der letze kann Hilfe bkommen oder sehe ich das falsch?
-
Aber mir fällt gerade auf. Was wenn 2 oder 3 Leute gleichzeitig /service medic machen? Dann wird die Variable doch überschrieben und nur der letze kann Hilfe bkommen oder sehe ich das falsch?
Jap, das ist aber absicht, damit du nicht nur C&P machstMusst nur paar Sachen abändern und den Code den du mir geschickt hast, damit kann ich nichts anfangen, tut mir leid
mfg.
-
Ok. Habe mir schon sowas gedacht :). Ich muss doch nur ne Ich glaube Variable hinzufügen das es funktioniert oder? Und wegen dem Code:
SetPlayerCheckpoint(playerid, zX, zY, zZ, 5);
Das ist die Errorzeile.//edi\\ Sry habe vergessen Float: Davor zu schreiben
-
Ok. Habe mir schon sowas gedacht :). Ich muss doch nur ne Ich glaube Variable hinzufügen das es funktioniert oder? Und wegen dem Code:
SetPlayerCheckpoint(playerid, zX, zY, zZ, 5);
Das ist die Errorzeile.
Also der Code da ist absolut richtigNein, im Prinzip brauchst du keine weitere Variable aber einen Array *hust*[MAX_PLAYERS]*hust*
mfg.
-
Naja Aray und Variablen vertausche ich immer. Aber wie soll das Funktionieren wenn ich hinter zX noch ein [MAX_PLAYERS] mache? WIe soll man sowas abfragen?
-
Naja so:
//beispiel
GetPlayerPos(playerid, zX[playerid], zY[playerid], zZ[playerid]);mfg.
-
Ok Sry wenn es jetzt langsam nervt, aber wie muss ich zID = -1; noch verändern? Sonst wird ja nach einem Heilen, also annehmen die zID auf -1 gesetzt und somit kann keiner mehr Notrufe annehmen oder die betroffenen müssten nochmal /service medic eingeben.
-
Da nutzt du auch einfach den Array, also so: zID[playerid]
Brauchst halt noch eine for-Schleife in dem Accept Befehl, aber wenn ich mich nicht täusche, konntest du doch mal besser scripten oder
mfg.
-
Ja konnte ich. Dann ahbe ich mich nur noch mit PHP HTML usw beschäftig (Was ich immer noch nicht kann ) Und jetzt habe ich Pawn sozusagen verlernt.
Und die for-schleife soll dann MAX_PLAYERS oder zID durchlaufen? -
Na, so:
for(new i; i<MAX_PLAYERS; i++)
{
if(zID[i] != -1)
{
//Dieser Spieler (zID[i]) benötigt einen Medic
break;
}
}mfg.