Playerid Bug

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
  • Ich habe ein neues Script gemacht und habe nun so ein paar Sachen schon drin.
    Wollte das mit einem Freund testen bei mir hat es zu 100 % funktioniert bei ihm zu 50%.


    Was ich meine ist das hier:
    forward Toilette(playerid);


    ocmd:pee(playerid,params[])
    {
    if(IsPlayerInRangeOfPoint(playerid,2,488.2566,-82.8220,998.7578))//Imbiss Toilette
    {
    SetTimerEx("Toilette",5000,false,"i",playerid);
    SetPlayerPos(playerid,488.2566,-62.8220,998.7578);
    SetPlayerCameraPos(playerid,488.3401,-80.7271,998.7578);
    SetPlayerCameraLookAt(playerid,488.4022,-83.0613,998.7578);
    PlayerPlaySound(playerid,100001,488.2566,-82.8220,998.7578);
    }
    else
    {
    }
    return 1;
    }



    public Toilette(playerid)
    {
    SetPlayerPos(playerid,488.2566,-82.8220,998.7578);
    SetCameraBehindPlayer(playerid);
    return 1;
    }


    Er soll also für 5 Sekunden die Interior Toiletten Tür sehen, ein Spruch hören und wieder davor gesetzt werden.
    Es geht alles nur er wird nicht davor gesetzt er stirbt dann weil er irgendwie von der Map fällt und ist tot.


    Das selbe ist auch bei dem Register.



    Skin//steht oben im Enum vom Spieler
    new Spieler[MAX_PLAYERS][SInfo];//Enum halt.....
    SetPlayerSkin(playerid,Spieler[playerid][Skin]);//Das ist bei OnPlayerSpawn
    dini_IntSet(Spielerdatei,"Skin",79);//Das ist im Stock Register
    dini_IntSet(Spielerdatei,"Skin",GetPlayerSkin(playerid));//Das ist im Stock SpielerSpeichern
    Spieler[playerid][Skin]=dini_Int(Spielerdatei,"Skin");//Das ist im Stock SpielerLaden


    Bei mir geht es nur manchmal ist es so das alles zurück gesetzt wird vom Enum...
    Woran kann es liegen?

  • Er soll also für 5 Sekunden die Interior Toiletten Tür sagen, ein Spruch hören und wieder davor gesetzt werden.
    Es geht alles nur er wird nicht davor gesetzt er stirbt dann weil er irgendwie von der Map fällt und ist tot.

    Ist der Boden, auf dem Spieler währenddessen steht selbst gemappt? Falls ja, würde ich den Spieler einfach per TogglePlayerControllable() freezen und beim Zurücksetzen entfreezen. Sofern erste Frage bejaht wird, ist das (vermutlich) die Lösung zu diesem Fehler.

    Bei mir geht es nur manchmal ist es so das alles zurück gesetzt wird vom Enum...
    Woran kann es liegen?

    Ich empfehle dir GetPlayerSkin() nicht unter OnPlayerDisconnect zu verwenden, da dies unter manchen Umständen zu Fehlern führen kann (gibt ID 0 zurück). Wo liegt denn der genau der Fehler? Wird dem Spieler SkinID 0 gesetzt oder erhält der eine völlig falsche ID?

  • Erst mal danke,



    zu punkt 1. nein das ist ein Standard Interior hinter der wand sprich eigentlich ist der nicht mehr im Interior.




    zu punkt 2. das Problem liegt darin das enum einfach alles wieder auf 0 setzt.



    ich regestrier mich neu trotzdem ist alles auf 0 obwohl ich halt folgendes eingegeben habe:
    stock Register(playerid,key[])
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts3/%s.txt",name);
    dini_Create(Spielerdatei);
    dini_Set(Spielerdatei,"Passwort",key);
    dini_IntSet(Spielerdatei,"Fraktion",0);
    dini_IntSet(Spielerdatei,"Level",1);
    dini_IntSet(Spielerdatei,"Skin",79);
    dini_IntSet(Spielerdatei,"Geld",6);
    dini_IntSet(Spielerdatei,"Geld2",50);
    dini_IntSet(Spielerdatei,"Kontokarte",0);
    SendClientMessage(playerid,GRUEN,"Du hast dich erfolgreich regestriert.");
    return 1;
    }





    public OnPlayerDisconnect(playerid, reason)
    {
    new Spielerdatei[64],string1[80];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts3/%s.txt",name);
    format(string1,sizeof(string1),"On/Off: Spieler %s hat den Server verlassen.",name);
    SendClientMessageToAll(ORANGE,string1);
    Spielerspeichern(playerid);
    return 1;
    }



    Habe kein GetPlayerSkin bei OnPlayerDisconnect

  • Punkt 1: Ich habe mich mal an die Position teleportiert in jedem Interior und bin jedesmal runtergefallen. Ich würde einfach mal meinen oben genannten Vorschlag umsetzen.


    Punkt 2: Du setzt lediglich die .ini Werte, aber nicht die spielerbezogenden Variabeln. Sofern die Accountinformation nach dem Registrieren nicht geladen werden, ist das deine Fehlerquelle. Entweder du rufst deine Account-laden-Funktion nach deiner Register-Funktion auf, oder du setzt die einzelnen Variablen in der Registerfunktion entsprechend (z.B. Spieler[playerid][Skin] = 97).


    Du rufst aber die Funktion Spielerspeichern() in OnPlayerDisconnect() auf.

  • Habe es doch nicht verstanden....:(
    Habe jetzt mal alles in Expander gesetzt damit du nur das nötigste lesen musst war mir nicht sicher was du brauchst.
    Bitte sag mir mal genau was dran falsch ist bin noch Anfänger :(




    Login Register Dialoge:

    Spoiler anzeigen

    if(dialogid==DIALOG_REGISTER)
    {
    if(response==0)
    {
    SendClientMessage(playerid,ROT,"Um hier zu spielen musst du dich regestrieren.");
    Kick(playerid);
    }
    if(response==1)
    {
    if(!strlen(inputtext))
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"{FAFAFA}Register","{FAFAFA}Willkommen auf {FFFF00}[LBR]Las Barrancas Reallife.\n{FAFAFA}Wähle dir ein passendes Passwort aus um dich zu regestrieren.","O.K..","Abbrechen");
    SendClientMessage(playerid,ROT,"Du hast das falsche Passwort angegeben. Versuch es erneut.");
    }
    else
    {
    Register(playerid,inputtext);
    }
    }
    }
    if(dialogid==DIALOG_LOGIN)
    {
    if(response==0)
    {
    SendClientMessage(playerid,ROT,"Um hier zu spielen musst du dich einloggen.");
    Kick(playerid);
    }
    if(response==1)
    {
    if(!strlen(inputtext))
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"{FAFAFA}Login","{FAFAFA}Dein Account wurde in der Daten Bank von {FFFF00}[LBR]Las Barrancas Reallife {FAFAFA}gefunden.\nLogge dich nun mit {FFFF00}deinem Passwort {FAFAFA}ein.","Login","Abbrechen");
    SendClientMessage(playerid,ROT,"Du hast das falsche Passwort angegeben. Versuch es erneut.");
    }
    else
    {
    Login(playerid,inputtext);
    }
    }
    }


    Register Login Stocks

    Spoiler anzeigen
    stock Register(playerid,key[])
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts3/%s.txt",name);
    dini_Create(Spielerdatei);
    dini_Set(Spielerdatei,"Passwort",key);
    dini_IntSet(Spielerdatei,"Fraktion",0);
    dini_IntSet(Spielerdatei,"Level",1);
    dini_IntSet(Spielerdatei,"Skin",79);
    dini_IntSet(Spielerdatei,"Geld",6);
    dini_IntSet(Spielerdatei,"Geld2",50);
    dini_IntSet(Spielerdatei,"Kontokarte",0);
    SendClientMessage(playerid,GRUEN,"Du hast dich erfolgreich regestriert.");
    return 1;
    }
    stock Login(playerid,key[])
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts3/%s.txt",name);
    if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),false))
    {
    Spielerladen(playerid);
    SendClientMessage(playerid,GRUEN,"Du hast dich erfolgreich eingeloggt.");
    }
    else
    {
    SendClientMessage(playerid,ROT,"Dein angegebenes Passwort ist falsch. Versuch es erneut.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"{FAFAFA}Login","{FAFAFA}Dein Account wurde in der Daten Bank von {FFFF00}[LBR]Las Barrancas Reallife {FAFAFA}gefunden.\nLogge dich nun mit {FFFF00}deinem Passwort {FAFAFA}ein.","Login","Abbrechen");
    }
    return 1;
    }


    Spielerspeichern Spielerladen Stock

    Spoiler anzeigen
    stock Spielerspeichern(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts3/%s.txt",name);
    dini_IntSet(Spielerdatei,"Fraktion",Spieler[playerid][Fraktion]);
    dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Skin",GetPlayerSkin(playerid));
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Geld2",Spieler[playerid][Geld2]);
    dini_IntSet(Spielerdatei,"Kontokarte",Spieler[playerid][Kontokarte]);
    return 1;
    }
    stock Spielerladen(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts3/%s.txt",name);
    Spieler[playerid][Fraktion]=dini_Int(Spielerdatei,"Fraktion");
    Spieler[playerid][Skin]=dini_Int(Spielerdatei,"Skin");
    Spieler[playerid][Geld]=dini_Int(Spielerdatei,"Geld");
    Spieler[playerid][Geld2]=dini_Int(Spielerdatei,"Geld2");
    Spieler[playerid][Level]=dini_Int(Spielerdatei,"Level");
    Spieler[playerid][Kontokarte]=dini_Int(Spielerdatei,"Kontokarte");
    return 1;
    }



    OnPlayerConnect / Disconnect

    Spoiler anzeigen
    public OnPlayerConnect(playerid)
    {
    new Spielerdatei[64],string1[80];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts3/%s.txt",name);
    format(string1,sizeof(string1),"On/Off: Spieler %s ist dem Server beigetreten.",name);
    SendClientMessageToAll(ORANGE,string1);
    SetPlayerColor(playerid,WEISS);
    if(dini_Exists(Spielerdatei))
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"{FAFAFA}Login","{FAFAFA}Dein Account wurde in der Daten Bank von {FFFF00}[LBR]Las Barrancas Reallife {FAFAFA}gefunden.\nLogge dich nun mit {FFFF00}deinem Passwort {FAFAFA}ein.","Login","Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"{FAFAFA}Register","{FAFAFA}Willkommen auf {FFFF00}[LBR]Las Barrancas Reallife.\n{FAFAFA}Wähle dir ein passendes Passwort aus um dich zu regestrieren.","O.K..","Abbrechen");
    }
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerDisconnect(playerid, reason)
    {
    new Spielerdatei[64],string1[80];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts3/%s.txt",name);
    format(string1,sizeof(string1),"On/Off: Spieler %s hat den Server verlassen.",name);
    SendClientMessageToAll(ORANGE,string1);
    Spielerspeichern(playerid);
    return 1;
    }




    Spieler Enum

    Spoiler anzeigen
    enum SInfo
    {
    Level,
    Skin,
    Geld,
    Geld2,
    Fraktion,
    Kontokarte
    }

  • Okay siehst schon mal gut aus danke,


    nur jetzt habe ich folgendes Problem.
    Ich sehe die ganzen Daten bei /stats aber es wird nicht über mein Spieler übertragen.
    Ich habe 6 $ laut /stats aber nicht laut Geldanzeige, das selbe ist wie beim Skin und Level.


    Bild:




    Aso hatte bei SPielerLaden nicht

    SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
    SetPlayerSkin(playerid,dini_Int(Spielerdatei,"Skin"));
    GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));


    Sondern
    Spieler[playerid][Geld]=dini_Int(Spielerdatei,"Geld");
    Spieler[playerid][Skin]=dini_Int(Spielerdatei,"Skin");
    Spieler[playerid][Level]=dini_Int(Spielerdatei,"Level");



    Daran muss es liegen oder?