Leader-Fraktion beim Befehl speichern

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
  • Hallo liebe Brotfische, und einen guten Nachmittag!


    Erstmal eine Entschuldigung falsch die Überschrift mein Thema nicht gut umschreibt/zusammenfasst. Mir viel irgendwie nichts dazu ein... ^^
    Ich habe derzeit eine Frage. Und zwar, wie kann ich nachdem der Leader "/invite [ID]" gemacht hat seine Fraktion abspeichern?
    Also ich habe das ganze mit einem dcmd Befehl gemacht, der wie folgt aussieht:

    dcmd_invite(playerid,params[])
    {
    new pID;
    if(IstSpielerFrakRang(playerid, 6))
    {
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,Orange,"VERWENDUNG: /invite [ID]");
    if(pID == INVALID_PLAYER_ID) return SendClientMessage(playerid,Rot,"Ungültiger Spieler!");
    new frakid = sInfo[playerid][Fraktion];
    if(IstSpielerInFraktion(pID,frakid) == frakid)
    {
    SendClientMessage(playerid, Rot, "Der angegebene Spieler ist bereits in deiner Fraktion!");
    }
    else
    {
    new str[128];
    new ftext[20];
    new level = sInfo[playerid][Fraktion];
    if(level == 0) { ftext= "Zivilist"; }
    else if(level == 1) { ftext= "LSPD"; }
    else if(level == 2) { ftext= "SFPD"; }
    else if(level == 3) { ftext= "LVPD"; }
    else if(level == 4) { ftext= "FBI"; }
    else if(level == 5) { ftext= "Army"; }
    else if(level == 6) { ftext= "Ambulanz"; }
    else if(level == 7) { ftext= "O-Amt"; }
    else if(level == 8) { ftext= "Taxi"; }
    else if(level == 9) { ftext= "CNN"; }
    else if(level == 10) { ftext= "Ballas"; }
    else if(level == 11) { ftext= "Groove Street"; }
    else if(level == 12) { ftext= "Triaden"; }
    else if(level == 13) { ftext= "La Cosa Nostra"; }
    format(str, sizeof(str), "Du wurdest von %s in die Fraktion %s eingeladen.\nSchreibe '/accept invite' um die Einladung anzunehmen!", SpielerName(playerid), ftext);
    SendClientMessage(pID, Hell_Blau, str);
    new str2[128];
    format(str2, sizeof(str2), "Du hast %s in deine Fraktion eingeladen.", SpielerName(pID));
    SendClientMessage(playerid, Hell_Blau, str2);
    InviteStatus[playerid] = 1;
    }
    }
    return 1;
    }

    So... unten steht ja jetzt, dass er "/accept invite" eingeben soll, um die Einladung anzunehmen. Dass muss ich ja in einem anderen Befehl machen. Da, dachte ich mir, reicht ein normaler Befehl bei OnPlayerCommandText... Jedoch muss ich ja auch abfragen, in welcher Fraktion sich der Leader befindet, der den Invite gesendet hat. Wie mache ich das jetzt? Denn dort ist ja nicht mehr der Leader abgespeichert oder verstehe ich das falsch?


    Ich hoffe ich habe mein Problem einigermaßen gut formuliert... falsch jemand etwas nicht versteht >> keine Scheu, einfach die Frage stellen!
    Wenn möglich schreibt doch bitte im PWN-Code eine kleine MusterLösung.



    Danke im Vorraus! :love:


    Mit freundlichen Grüßen,
    Bosei

  • Du könntest eine variable für den Spieler erstellen, der eingeladen wird.
    In dieser Variable speicherst du dann die ID von dem Leader, der eingeladen hat.


    Bsp:
    new ID[MAX_PLAYERS];
    dcmd_invite(playerid,params[])
    {
    new pID;
    if(IstSpielerFrakRang(playerid, 6))
    {
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,Orange,"VERWENDUNG: /invite [ID]");
    if(pID == INVALID_PLAYER_ID) return SendClientMessage(playerid,Rot,"Ungültiger Spieler!");
    new frakid = sInfo[playerid][Fraktion];
    if(IstSpielerInFraktion(pID,frakid) == frakid)
    {
    SendClientMessage(playerid, Rot, "Der angegebene Spieler ist bereits in deiner Fraktion!");
    }
    else
    {
    new str[128];
    new ftext[20];
    new level = sInfo[playerid][Fraktion];
    if(level == 0) { ftext= "Zivilist"; }
    else if(level == 1) { ftext= "LSPD"; }
    else if(level == 2) { ftext= "SFPD"; }
    else if(level == 3) { ftext= "LVPD"; }
    else if(level == 4) { ftext= "FBI"; }
    else if(level == 5) { ftext= "Army"; }
    else if(level == 6) { ftext= "Ambulanz"; }
    else if(level == 7) { ftext= "O-Amt"; }
    else if(level == 8) { ftext= "Taxi"; }
    else if(level == 9) { ftext= "CNN"; }
    else if(level == 10) { ftext= "Ballas"; }
    else if(level == 11) { ftext= "Groove Street"; }
    else if(level == 12) { ftext= "Triaden"; }
    else if(level == 13) { ftext= "La Cosa Nostra"; }
    format(str, sizeof(str), "Du wurdest von %s in die Fraktion %s eingeladen.\nSchreibe '/accept invite' um die Einladung anzunehmen!", SpielerName(playerid), ftext);
    SendClientMessage(pID, Hell_Blau, str);
    new str2[128];
    format(str2, sizeof(str2), "Du hast %s in deine Fraktion eingeladen.", SpielerName(pID));
    SendClientMessage(playerid, Hell_Blau, str2);
    ID[pID] = playerid; //Hier wird die variable auf die playerid gesetzt.
    InviteStatus[playerid] = 1;
    }
    }
    return 1;
    }


    und später dann z.b. so in die Fraktion setzen:
    PlayerInfo(playerid,Fraktion) = PlayerInfo(ID[playerid], Fraktion);


  • Okey erstmal danke! Soweit so gut, könntest du aber das mit der Variable ein bisschen näher erklären?
    Also den Bereich:

    ID[pID] = playerid; //Hier wird die variable auf die playerid gesetzt.

    Will ja nicht nur Copy&Paste machen sondern dazu lernen um das später nochmal anzuwenden, bei Bedarf...

  • Du möchtest die ID des Leaders später aus der variable auslesen.
    In deinem befehl ist "playerid" der Leader und "pID" der Member.
    Also setzt du die variable von pID (dem Member) auf playerid (die ID vom Leader)
    So kannst du diese variable später wieder auslesen und du hast die ID vom Leader.