Probem mit Frak system

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 Leute,
    wenn ich mit meinem Frak System eingebe /invite ID wird dieser sofort invitet ohner vorher gefragt zuwerden ob man das überhaupt will.
    Und der Rank wird jeweils auf der Fraktions ID gesetzt also sprich: Bundeswehr ist Frakid 2 wird der Rank auf 2 gesetzt
    Bei News Reporter auf 3.
    Unteranderem geht der /f Chat nicht.
    Und beim Makeleader befehlt sollte man(Wenn man /makeleader ID 0 eingibt (FRAKID 0 ist Zivil) der Rank in den Stats auch auf 0 gesetzt werden)
    Unteranderem speichert er den Namen der Fraktion in meinem Stats befehl nicht und nach einem Relogg steht da nur noch die Frak ID..



    Pastebin:
    http://pastebin.com/F7tVjrTh


    Danke im voraus :)


    Jeffry

  • Ich würde sagen wir gehen das Schritt für Schritt, eins nach dem anderen, durch, damit du es auch verstehst, und vielleicht nach der Hälfte schon selbst weitermachen kannst.


    Zitat

    Und der Rank wird jeweils auf der Fraktions ID gesetzt also sprich: Bundeswehr ist Frakid 2 wird der Rank auf 2 gesetzt


    Beim Invite:
    SpielerInfo[pID][pRang] = frak;
    zu:
    SpielerInfo[pID][pRang] = 0;



    Zitat

    Und beim Makeleader befehlt sollte man(Wenn man /makeleader ID 0 eingibt (FRAKID 0 ist Zivil) der Rank in den Stats auch auf 0 gesetzt werden)


    Hast du eine Variable für den Leader, oder wie wird der Leader definiert? Hier ist er doch Rank 6, warum Rank 0? Das macht keinen Sinn.


    Zitat

    Unteranderem geht der /f Chat nicht.


    Was geht da nicht?

  • Ich meine beim makeleader Befehl sollte ,wenn man den User Zivilist macht, auf Rank 0 gestellt werden. Weil dann in den /stats steht Fraktion: Zivilist Rang: 6.


    Beim /f chat gebe ich ein /f test und dann kommt:
    INFO: /f [nachricht]

  • Zitat

    Ich meine beim makeleader Befehl sollte ,wenn man den User Zivilist macht, auf Rank 0 gestellt werden. Weil dann in den /stats steht Fraktion: Zivilist Rang: 6.


    Ah, so meinst du das.
    SpielerInfo[pID][pRang] = 6;
    zu:
    if(fID != 0) SpielerInfo[pID][pRang] = 6;
    else SpielerInfo[pID][pRang] = 0;


    Zitat

    Beim /f chat gebe ich ein /f test und dann kommt:


    Nutzt du das Plugin oder den stock? Ich tippe auch den stock, also:
    if(sscanf(params, "s[128]", string))
    zu:
    if(sscanf(params, "s", string))

  • Jetzt funktioniert alles,außer das der Spieler bei einem invite vorher abgefragt wird ob er rein möchte oder nicht mit /accept invite
    So sieht jetzt meine Befehle aus:


    ocmd:invite(playerid,params[])
    {
    new pID;
    new fID = SpielerInfo[playerid][pFraktion];
    if(SpielerInfo[playerid][pRang] < 6) return SendClientMessage(playerid,Rot,""COLO"[4YR]Du bist kein Leader");
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/invite [playerid] ");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,Rot,"Keiner ist Verbunden mit dieser ID!");
    new frak = SpielerInfo[playerid][pFraktion];
    SpielerInfo[pID][pFraktion] = frak;
    SpielerInfo[pID][pRang] = 1;
    SendClientMessage(pID, Rot,"Zum akzeptieren /accept invite eingeben.");
    SetPVarInt(pID, "inv_fraktid", fID);
    SetPVarInt(pID, "inv_inviter", playerid);
    return 1;
    }
    ocmd:accept(playerid, params[])
    {
    new item[64];
    if(sscanf(params,"s[64]",item))return SendClientMessage(playerid, Rot, "INFO: /accept [invite]");
    if(!strcmp(item, "invite", false))
    {
    if(GetPVarInt(playerid, "inv_fraktid") == 0)return SendClientMessage(playerid, Rot, "Du wurdest in keine Fraktion eingeladen.");
    new fID = GetPVarInt(playerid, "inv_fraktid");
    SpielerInfo[playerid][pFraktion] = fID;
    SpielerInfo[playerid][pRang] = 1;
    new string[128];
    format(string,sizeof(string), "Du bist der Fraktion %s beigetreten.",fInfo[fID][f_name]);
    SendClientMessage(playerid, Rot, string);
    format(string,sizeof(string), "%s ist der Fraktion beigetreten.",GetName(playerid));
    new frak = SpielerInfo[playerid][pFraktion];
    SetPlayerPos(playerid,fInfo[frak][f_x],fInfo[frak][f_y],fInfo[frak][f_z]);
    SetPlayerInterior(playerid,fInfo[frak][f_inter]);
    SetPlayerVirtualWorld(playerid,fInfo[frak][f_world]);
    SendClientMessage(GetPVarInt(playerid, "inv_inviter"), Rot,string);
    SetPVarInt(playerid, "inv_fraktid", 0);
    return 1;
    }
    return 1;
    }

    Einmal editiert, zuletzt von [PeL]Smiley ()

  • ocmd:invite(playerid,params[])
    {
    new pID;
    if(SpielerInfo[playerid][pRang] < 6) return SendClientMessage(playerid,Rot,""COLO"[4YR]Du bist kein Leader");
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/invite [playerid] ");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,Rot,"Keiner ist Verbunden mit dieser ID!");
    SendClientMessage(pID, Rot,"Zum akzeptieren /accept invite eingeben.");
    SetPVarInt(pID, "inv_fraktid", SpielerInfo[playerid][pFraktion]);
    SetPVarInt(pID, "inv_inviter", playerid);
    return 1;
    }


    ocmd:accept(playerid, params[])
    {
    new item[64];
    if(sscanf(params,"s",item)) return SendClientMessage(playerid, Rot, "INFO: /accept [invite]");
    if(!strcmp(item, "invite", false))
    {
    if(GetPVarInt(playerid, "inv_fraktid") == 0)return SendClientMessage(playerid, Rot, "Du wurdest in keine Fraktion eingeladen.");
    new fID = GetPVarInt(playerid, "inv_fraktid");
    SpielerInfo[playerid][pFraktion] = fID;
    SpielerInfo[playerid][pRang] = 1;
    new string[128];
    format(string,sizeof(string), "Du bist der Fraktion %s beigetreten.",fInfo[fID][f_name]);
    SendClientMessage(playerid, Rot, string);
    format(string,sizeof(string), "%s ist der Fraktion beigetreten.",GetName(playerid));
    new frak = SpielerInfo[playerid][pFraktion];
    SetPlayerPos(playerid,fInfo[frak][f_x],fInfo[frak][f_y],fInfo[frak][f_z]);
    SetPlayerInterior(playerid,fInfo[frak][f_inter]);
    SetPlayerVirtualWorld(playerid,fInfo[frak][f_world]);
    SendClientMessage(GetPVarInt(playerid, "inv_inviter"), Rot,string);
    SetPVarInt(playerid, "inv_fraktid", 0);
    return 1;
    }
    return 1;
    }


    Achte darauf, etwas sparsam mit deinen Variablen umzugehen. fID und frak ist das gleiche in deinem /accept Befehl, da reicht eins von beidem. ;)

  • Ok,jetzt funktioniert das schonmal,allerdings wenn ich mich relogge
    und in den /stats gucke steht bei Fraktion die Frak ID obwohl da der Name stehen soll:


    ocmd:stats(playerid,params[])
    {
    new string[512];
    format(string, sizeof(string),""COLB"|===============Allgemeine Informationen===============|\n"COLO"Name: "COLW"%s\n"COLO"Level: "COLW"%d\n"COLO"Geld: "COLW"%d\n"COLO"Adminlevel:"COLW"%d\n"COLO"Fraktion:"COLW"%s\n"COLO"Rang:"COLW"%d\n"COLO"Perso:"COLW"%s",
    GetName(playerid), SpielerInfo[playerid][pLevel],SpielerInfo[playerid][pGeld],SpielerInfo[playerid][pAdminlevel],GetFrakName(SpielerInfo[playerid][pFraktion]),SpielerInfo[playerid][pRang],(SpielerInfo[playerid][pPerso]==1) ? ("Ja") : ("Nein") );
    ShowPlayerDialog(playerid,DIALOG_STATS,DIALOG_STYLE_MSGBOX,""COLO"[4YR]Statistiken",string,"Ok","");
    return 1;
    }


    stock GetFrakName(fID)
    {
    new name[256];
    switch(fID)
    {
    case 0: name = "Zivilist";
    case 1: name = "Los Santos Police Department";
    case 2: name = "Bundeswehr";
    case 3: name = "Los Santos News Children's";
    default: name = "Zivilist";
    }
    return name;
    }

  • Entschuldigung ich habe mich vertan, es ist nicht beim Ausloggen und einlogge,sondern beim Restart des Servers:


    Bilder :
    Vor dem Restart

    Nach dem Restart:


    Restartbefehl:
    ocmd:rserver(playerid,params[]){
    new reason[128],string[128];
    if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"Möglich ab: 'COLG' Adminrank 6");
    if(sscanf(params,"s",reason)) return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/rserver [Grund]");
    format(string,sizeof(string),""COLO"[%s] %s "COLR" hat den Server neugestartet"COLO" Grund: "COLR"%s.",adminrang(playerid),GetName(playerid),reason);
    SendClientMessageToAll(Rot,string);
    for(new i;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i))SavePlayer(i);
    }
    SendRconCommand("gmx");
    return 1;
    }
    Und das ist SavePlayer:
    stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid))
    {
    SpielerInfo[playerid][ pGeld ] = GetPlayerMoney(playerid);
    SpielerInfo[playerid][ pLevel ] = GetPlayerScore(playerid);
    SpielerInfo[playerid][ pSkin ] = GetPlayerSkin(playerid);
    mysql_SetInt(Tabelle_Spieler,"Level",SpielerInfo[playerid][pLevel],"Name",GetName(playerid));
    mysql_SetInt(Tabelle_Spieler,"Adminlevel",SpielerInfo[playerid][pAdminlevel],"Name",GetName(playerid));
    mysql_SetInt(Tabelle_Spieler,"Skin",SpielerInfo[playerid][pSkin],"Name",GetName(playerid));
    mysql_SetInt(Tabelle_Spieler,"Geld",SpielerInfo[playerid][pGeld],"Name",GetName(playerid));
    mysql_SetString(Tabelle_Spieler,"Registrierungsdatum",SpielerInfo[playerid][ pRegDate], "Name", GetName(playerid));
    mysql_SetInt(Tabelle_Spieler,"Leader",SpielerInfo[playerid][pLeader],"Name",GetName(playerid));
    mysql_SetInt(Tabelle_Spieler,"Fraktion",SpielerInfo[playerid][pFraktion],"Name",GetName(playerid));
    mysql_SetInt(Tabelle_Spieler,"Rang",SpielerInfo[playerid][pRang],"Name",GetName(playerid));
    mysql_SetInt(Tabelle_Spieler,"Perso",SpielerInfo[playerid][pPerso],"Name",GetName(playerid));
    mysql_SetInt(Tabelle_Spieler,"Ban",SpielerInfo[playerid][pBan],"Name",GetName(playerid));
    }
    return 1;
    }

    Einmal editiert, zuletzt von [PeL]Smiley ()

  • Füge nur mal zum Testen das SavePlayer in dem accept Befehl nach SetPlayerVirtualWorld ein. Geht es dann?
    Wenn ja, dann wird SavePlayer beim Restart nicht mehr durchgeführt, sprich die MySQL Verbindung ist schon weg.


    Dann solltest du mit einem ein Sekunden Timer den gmx erst dann ausführen.