Wie erstelle ich einen /accept medic?

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • 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?

  • 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. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

    Einmal editiert, zuletzt von Kaliber ()

  • 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. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • 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 kann ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • 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. :huh:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • 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 machst :)


    Musst nur paar Sachen abändern und den Code den du mir geschickt hast, damit kann ich nichts anfangen, tut mir leid :whistling:


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • 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 richtig :D


    Nein, im Prinzip brauchst du keine weitere Variable aber einen Array *hust*[MAX_PLAYERS]*hust* ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • 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. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Na, so:


    for(new i; i<MAX_PLAYERS; i++)
    {
    if(zID[i] != -1)
    {
    //Dieser Spieler (zID[i]) benötigt einen Medic
    break;
    }
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S