skin wird nicht gespeichert

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 (=


    Habe folgendes Problem, (ich Speichere mit dini)
    bei meinen /makeleader befehl wird der skin nicht gespeichert )=


    if(!strcmp(strget(cmdtext,0),"/makeleader"))
    {
    if(Spieler[playerid][Admin] >= 4 )
    {
    if(!strlen(strget(cmdtext,1)))
    return
    SendClientMessage(playerid,COLOR_GREY,"Benutze: /makeleader [Spielerid] [FraktionsID]");
    //new string[128];
    new id3 = strval(strget(cmdtext,1));
    new admin3[MAX_PLAYER_NAME];
    new gang = strval(strget(cmdtext,2));
    GetPlayerName(id3,admin3,sizeof(admin3));
    format(string, sizeof(string), "*** Du wurdest von Admin %s zum Leader der Fraktionsnummer %d gemacht.", admin3, gang);
    SendClientMessage(id3, COLOR_LIGHTRED, string);
    format(string, sizeof(string), "*** Du hast %s zum Leader der Fraktionsnummer %d gemacht.", id3, gang);
    SendClientMessage(playerid, COLOR_LIGHTRED, string);
    if(gang==0) { SetPlayerSkin(id3,0);Spieler[playerid][leader] = 0; }
    if(gang==1) { SetPlayerSkin(id3,116);Spieler[playerid][leader]= 1; }
    if(gang==2) { SetPlayerSkin(id3,288);Spieler[playerid][leader]= 2; }
    if(gang==3) { SetPlayerSkin(id3,126);Spieler[playerid][leader]= 3; }
    if(gang==4) { SetPlayerSkin(id3,70);Spieler[playerid][leader]= 4;}
    if(gang==5) { SetPlayerSkin(id3,255);Spieler[playerid][leader]= 5;}
    if(gang==6) { SetPlayerSkin(id3,217);Spieler[playerid][leader]= 6;}
    Spieler[id3][leader] = gang;
    Spieler[id3][team] = gang;
    }
    else
    {
    SendClientMessage(playerid, COLOR_LIGHTRED,"Du darfst diesen Befehl nicht benutzen !");
    }
    return 1;
    }


    Ich bekomme ingame zwar den skin, aber wenn ich das spiel dann runterlege und in den scriptfiles schaue steht bei skin trozdem noch Skin=0 und deshalb wird bei einen restart der skin nicht wiederaufgenommen

  • Es wäre vieleicht sinnvoll zu zeigen wie du den Skin speicherst, ob du fürs speichern GetPlayerSkin(playerid); benutzt oder eine Varriable hast (z.B. Spieler[playerid][skin])


    Desweiteren is mir aufgefallen das du bei deinem Befehl auch nen kleinen fehler hast.. so wie ich sehe ist id3 = Der Player der Leader sein soll.. deswegen muss
    Spieler[playerid][leader] doch = Spieler[id3][leader] sein oder nicht? :D



    Mit freundlichen Grüßen,
    Zunno

  • So wie ich das sehe, speicherst du den Skin gar nicht.


    Er muss ja auch nicht bei jedem Befehl den Skin in die User Datei schreiben,
    sondern es reicht wenn der Account unter OnPlayerDisconnect gespeichert wird und vieleicht alle 10 minuten per Timer falls es mal zu einem Server absturz kommt oder so ;)

  • enum spieler_daten
    {
    skin,
    // usw...


    public OnPlayerConnect(playerid)
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    SetPlayerSkin(playerid, dini_Int(accFormat,"skin"));


    public OnPlayerDisconnect(playerid, reason)
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.datei",pname);
    dini_IntSet(accFormat, "skin", GetPlayerSkin(playerid));
    if(fexist(accFormat) && Spieler[playerid][eingeloggt])
    {
    dini_IntSet(accFormat,"wanted",Spieler[playerid][wanted]);
    dini_IntSet(accFormat,"jail",Spieler[playerid][jail]);
    dini_IntSet(accFormat,"jailtime",Spieler[playerid][jailtime]);
    dini_IntSet(accFormat,"pduty",Spieler[playerid][pduty]);
    dini_IntSet(accFormat,"leader",Spieler[playerid][leader]);
    dini_IntSet(accFormat,"team",Spieler[playerid][team]);
    dini_IntSet(accFormat,"skin",Spieler[playerid][skin]);
    dini_IntSet(accFormat,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(accFormat,"Score",GetPlayerScore(playerid));
    dini_IntSet(accFormat,"Admin",Spieler[playerid][Admin]);
    }
    Spieler[playerid][eingeloggt] = 0;
    Spieler[playerid][wanted] = 0;
    Spieler[playerid][jail] = 0;
    Spieler[playerid][jailtime] = 0;
    Spieler[playerid][pduty] = 0;
    Spieler[playerid][leader] = 0;
    Spieler[playerid][team] = 0;
    Spieler[playerid][skin] = 0;
    Spieler[playerid][Admin] = 0;
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.datei",pname);
    SetPlayerSkin(playerid, dini_Int(accFormat,"skin"));
    {
    if(Spieler[playerid][team] == 0) //team zivi
    {
    SetPlayerPos(playerid, 1219.0143,-1812.4454,16.5938);
    SetPlayerColor(playerid, COLOR_WHITE);
    }
    if(Spieler[playerid][team] == 1) //team ninjas
    {
    SetPlayerPos(playerid, 864.0807,-1642.5531,13.8480 );
    GivePlayerWeapon(playerid, 4, 1); GivePlayerWeapon(playerid, 24, 50);
    SetPlayerColor(playerid, COLOR_LIGHTBLUE);
    }
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.datei",pname);
    if(response)
    {
    switch(dialogid) // dialogid auswählen
    {
    case DIALOG_LOGIN: // ID Login
    {
    if(!strlen(inputtext))
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Weiter","Abbrechen");
    return SendClientMessage(playerid,0xFFFFFFFF,"Kein Passwort angegeben!");
    }
    if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0) // Passwort Direkt aus der Datei Laden
    {
    Spieler[playerid][wanted] = dini_Int(accFormat,"wanted");
    Spieler[playerid][jail] = dini_Int(accFormat,"jail");
    Spieler[playerid][jailtime] = dini_Int(accFormat,"jailtime");
    Spieler[playerid][pduty] = dini_Int(accFormat,"pduty");
    Spieler[playerid][leader] = dini_Int(accFormat,"leader");
    Spieler[playerid][team] = dini_Int(accFormat,"team");
    Spieler[playerid][skin] = dini_Int(accFormat,"skin");
    GivePlayerMoney(playerid,dini_Int(accFormat,"Geld"));
    SetPlayerScore(playerid,dini_Int(accFormat,"Score"));
    Spieler[playerid][Admin] = dini_Int(accFormat,"Admin");
    Spieler[playerid][eingeloggt] = 1; // Spieler ist nun erfolgreich eingeloggt
    SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
    SpawnPlayer(playerid);
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Weiter","Abbrechen");
    SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort war Falsch!");
    }
    }
    case DIALOG_REG: // ID Registrieren
    {
    if(!strlen(inputtext)) // Text darf nicht = Null sein Null im Sinne von nichts
    {
    ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Weiter","Abbrechen");
    return SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort ist zu kurz!");
    }
    dini_Create(accFormat);
    dini_Set(accFormat,"Passwort",inputtext);
    Spieler[playerid][eingeloggt] = 1;
    SetPlayerSkin(playerid, dini_Int(accFormat,"skin"));
    SendClientMessage(playerid,0xFFFFFFFF,"Account wurde angelegt und du wurdest eingeloggt.");
    }
    }
    }
    else
    {
    switch(dialogid)
    {
    case DIALOG_LOGIN:ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Weiter","Abbrechen");
    case DIALOG_REG:ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Weiter","Abbrechen");
    }
    }
    return 1;
    }


    so speichere ich ;)

  • accFormat,"skin"

    soweit ich weiß, ist eine Skin ID immer eine Zahl, und ich denke nicht, dass sie mit string gespeichert werden soll.
    Erstell eine Variable, Frag doch ganz einfach den jetzigen Skin ab, speicher die Variable, lad sie wieder.


    edit:



    new cskin;
    cskin = GetPlayerSkin(playerid)
    dini_IntSet(accFormat, cskin);


    //EDIT: Fail, warte mal
    new cskin;
    cskin = GetPlayerSkin(playerid)
    new cstring[64];
    format(string,sizeof(string),"%d",cskin);
    dini_IntSet(accFormat, cstring);



    glaube so, hab mich aber nicht mehr soviel mit dinis beschäftigt


    edit: ist mit hand gemacht, weiß nicht, ob das so geht.


    edit3 oder 4: das ist die lang version, kannst es natürlich auch in eine oder 2 zeilen fassen.


    mfg

    526C4Hj.png Mit freundlichen Grüßen,
    Noneatme

  • Versuch es mal so:


    if(!strcmp(strget(cmdtext,0),"/makeleader"))
    {
    if(Spieler[playerid][Admin] >= 4 )
    {
    if(!strlen(strget(cmdtext,1))) return SendClientMessage(playerid,COLOR_GREY,"Benutze: /makeleader [Spielerid] [FraktionsID]");
    //new string[128];
    new id3 = strval(strget(cmdtext,1));
    new admin3[MAX_PLAYER_NAME];
    new gang = strval(strget(cmdtext,2));
    GetPlayerName(id3,admin3,sizeof(admin3));
    format(string, sizeof(string), "*** Du wurdest von Admin %s zum Leader der Fraktionsnummer %d gemacht.", admin3, gang);
    SendClientMessage(id3, COLOR_LIGHTRED, string);
    format(string, sizeof(string), "*** Du hast %s zum Leader der Fraktionsnummer %d gemacht.", id3, gang);
    SendClientMessage(playerid, COLOR_LIGHTRED, string);
    if(gang==0) { SetPlayerSkin(id3,0); Spieler[playerid][leader] = 0; Spieler[playerid][skin] = 0; }
    if(gang==1) { SetPlayerSkin(id3,116); Spieler[playerid][leader] = 1; Spieler[playerid][skin] = 116; }
    if(gang==2) { SetPlayerSkin(id3,288); Spieler[playerid][leader] = 2; Spieler[playerid][skin] = 288; }
    if(gang==3) { SetPlayerSkin(id3,126); Spieler[playerid][leader] = 3; Spieler[playerid][skin] = 126; }
    if(gang==4) { SetPlayerSkin(id3,70); Spieler[playerid][leader] = 4; Spieler[playerid][skin] = 70; }
    if(gang==5) { SetPlayerSkin(id3,255); Spieler[playerid][leader] = 5; Spieler[playerid][skin] = 255; }
    if(gang==6) { SetPlayerSkin(id3,217); Spieler[playerid][leader] = 6; Spieler[playerid][skin] = 217; }
    Spieler[id3][leader] = gang;
    Spieler[id3][team] = gang;
    }
    else
    {
    SendClientMessage(playerid, COLOR_LIGHTRED,"Du darfst diesen Befehl nicht benutzen !");
    }
    return 1;
    }


    //Speichern


    public OnPlayerDisconnect(playerid, reason)
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.datei",pname);
    //dini_IntSet(accFormat, "skin", GetPlayerSkin(playerid)); //Unnötig?^^
    if(fexist(accFormat) && Spieler[playerid][eingeloggt])
    {
    dini_IntSet(accFormat,"wanted",Spieler[playerid][wanted]);
    dini_IntSet(accFormat,"jail",Spieler[playerid][jail]);
    dini_IntSet(accFormat,"jailtime",Spieler[playerid][jailtime]);
    dini_IntSet(accFormat,"pduty",Spieler[playerid][pduty]);
    dini_IntSet(accFormat,"leader",Spieler[playerid][leader]);
    dini_IntSet(accFormat,"team",Spieler[playerid][team]);
    dini_IntSet(accFormat,"skin",Spieler[playerid][skin]);
    dini_IntSet(accFormat,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(accFormat,"Score",GetPlayerScore(playerid));
    dini_IntSet(accFormat,"Admin",Spieler[playerid][Admin]);
    }
    Spieler[playerid][eingeloggt] = 0;
    Spieler[playerid][wanted] = 0;
    Spieler[playerid][jail] = 0;
    Spieler[playerid][jailtime] = 0;
    Spieler[playerid][pduty] = 0;
    Spieler[playerid][leader] = 0;
    Spieler[playerid][team] = 0;
    Spieler[playerid][skin] = 0;
    Spieler[playerid][Admin] = 0;
    return 1;
    }