Spieler stirbt nach Login, Brauche Lösung beim Selfmade Script

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 Leute brauche ma wieder Rat.


    Und zwar hab ich alles rumprobiert aber habs entweder kaputt gemacht oder noch schlimmer gemacht.


    Folgendes...


    Der Spieler soll nach beim Connecten halt entweder sich registrieren oder einloggen falls acc vohanden.
    das sieht dann so aus



    public OnPlayerConnect(playerid)
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.datei",pname);
    if(fexist(accFormat))
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Account vorhanden! Bitte gib dein Passwort ein.","Weiter","Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Account nicht vorhanden! Bitte gib ein Passwort an um dich zu registrieren.","Weiter","Abbrechen");
    }
    return 1;
    }



    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    new pname[MAX_PLAYERS],accFormat[128],string11[256];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.datei",pname);
    if(response)
    {
    switch(dialogid)
    {
    case DIALOG_LOGIN:
    {
    if(!strlen(inputtext))
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Account vorhanden! Bitte gib dein Passwort ein.","Weiter","Abbrechen");
    return SendClientMessage(playerid,0xFFFFFFFF,"Kein Passwort angegeben!");
    }
    if(FirstSpawn[playerid] == false)
    {
    if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0)
    {
    Spieler[playerid][wanted] = dini_Int(accFormat,"wanted");
    Spieler[playerid][skin] = dini_Int(accFormat,"skin");
    Spieler[playerid][eingeloggt] = 1;
    GivePlayerMoney(playerid,dini_Int(accFormat,"Geld"));
    SetPlayerHealth(playerid,dini_Int(accFormat,"Gesundheit"));
    PlayerPos[playerid][posX] = dini_Float(accFormat,"X");
    PlayerPos[playerid][posY] = dini_Float(accFormat,"Y");
    PlayerPos[playerid][posZ] = dini_Float(accFormat,"Z");
    Spieler[playerid][level] = dini_Int(accFormat,"Level");
    SetPlayerScore(playerid,dini_Int(accFormat,"Level"));
    SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Account vorhanden! Bitte gib dein Passwort ein.","Weiter","Abbrechen");
    SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort war Falsch!");
    }
    }
    else
    {
    if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0)
    {
    Spieler[playerid][wanted] = dini_Int(accFormat,"wanted");
    Spieler[playerid][skin] = dini_Int(accFormat,"skin");
    Spieler[playerid][eingeloggt] = 1;
    GivePlayerMoney(playerid,dini_Int(accFormat,"Geld"));
    SetPlayerHealth(playerid,dini_Int(accFormat,"Gesundheit"));
    PlayerPos[playerid][posX] = dini_Float(accFormat,"X");
    PlayerPos[playerid][posY] = dini_Float(accFormat,"Y");
    PlayerPos[playerid][posZ] = dini_Float(accFormat,"Z");
    Spieler[playerid][level] = dini_Int(accFormat,"Level");
    SetPlayerScore(playerid,dini_Int(accFormat,"Level"));
    FirstSpawn[playerid] = true;
    SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Account vorhanden! Bitte gib dein Passwort ein.","Weiter","Abbrechen");
    SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort war Falsch!");
    }
    }
    }
    case DIALOG_REG: // ID Registrieren
    {
    if(!strlen(inputtext))
    {
    ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Account nicht vorhanden! Bitte gib ein Passwort an um dich zu registrieren.","Weiter","Abbrechen");
    return SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort ist zu kurz!");
    }
    dini_Create(accFormat);
    dini_Set(accFormat,"Passwort",inputtext);
    SetTimer("SaveAcc",5000,0);
    SetPlayerScore(playerid,dini_Int(accFormat,"Level"));
    dini_FloatSet(accFormat,"Gesundheit",100.0);
    GivePlayerMoney(playerid,STARTGELD);
    FirstSpawn[playerid] = false;
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Account erfolgreich erstellt! Bitte gib dein Passwort ein um dich einzuloggen.","Weiter","Abbrechen");
    }
    }
    }
    return 1;
    }


    Danach spawnt der Spieler... allerdings sehe ich in den Logs das der Spieler, quasi zweimal spawnt... also spawn->sterben->erneut spawn... und das Startgeld wird zweimal ausgegeben.


    public OnPlayerSpawn(playerid)
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.datei",pname);
    if(FirstSpawn[playerid] == true)
    {
    SetPlayerPos(playerid,PlayerPos[playerid][posX],PlayerPos[playerid][posY],PlayerPos[playerid][posZ]);
    SetPlayerHealth(playerid,dini_Int(accFormat,"Gesundheit"));
    FirstSpawn[playerid] = false;
    }
    else
    {
    SetPlayerPos(playerid, 2002.0732, -1965.3894, 16.6941);
    SetPlayerHealth(playerid,100.0);
    }
    if (Spieler[playerid][tod] == 1)
    {
    SetPlayerPos(playerid, 1178.8776,-1323.7036,14.1418);
    SendClientMessage(playerid,0xFFFFFFFF,"Du bist weggetreten und erst im Krankenhaus wieder aufgewacht.");
    SendClientMessage(playerid,0xFFFFFFFF,"Du konntest gerade noch ins Leben zurückgerufen werden.");
    SendClientMessage(playerid,0xFFFFFFFF,"Der Krankenhausaufenthalt kostet dich 3000$!");
    GivePlayerMoney(playerid,-3000);
    SetPlayerHealth(playerid,100.0);
    Spieler[playerid][tod] = 0;
    }
    return 1;
    }


    Kann mir jemand folgen und evtl jemand helfen?

  • Ich tippe mal darauf dass das mit dem SetPlayerHealth zu tun hat ;) Hast du irgendwo Errors / Warnings ?

  • ist bei mir gleich so ^^ wenn ich mich einlogge sterbe ich xd :|

  • ja 100


    EDIT:// VLLT noch was wichtiges... ich hab noch sowas hier drin...


    public CheckState() // Wird im OnGamemodeInit als Timer gestartet
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
    GetPlayerHealth(i,hstate[i]);
    SetPlayerHealth(i, hstate[i]LEBENSABZUG);
    if(hstate[i] < (KOLEBEN) && colapse[i] != 1)
    {
    colapse[i] = 1;
    ApplyAnimation(i, "PED", "KO_shot_stom", 4.1, 0, 0, 0, 1, 0);
    if (Spieler[i][turnament] == 0)
    {
    SetTimer("Tod", ZEITTODNORMAL, 0);
    Spieler[i][tod] = 1;
    }
    if (Spieler[i][turnament] == 1)
    {
    SetTimer("Tod", ZEITTODTNM, 0);
    Spieler[i][tod] = 1;
    }
    }
    second++;
    if(second == 30)
    {
    colapse[i] = 0;
    second = 0;
    }


    }
    return 1;
    }


    public Tod(playerid)
    {
    new Float:playerHealth;
    GetPlayerHealth(playerid, playerHealth);
    SetPlayerHealth(playerid, playerHealth -= 5.0);
    Spieler[playerid][tod] = 1;
    return 1;
    }


    EDIT2// Vllt noch wichtig... bei der Skinauswahl also nachdem sich der Spieler eingeloggt hat, wird die Animation abgespielt die unter public CheckState zu finden ist.

    Einmal editiert, zuletzt von Virus ()

  • Zitat

    ja 100


    -.-
    hab ich doch schon gesagt... in der ini steht der Wert 100

  • SetPlayerHealth(playerid, playerHealth -= 5.0);
    Was soll die Zeile denn bedeuten?? -= !? [MSIE_newline_end ]

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Sie soll 5% hp von der derzeitigen Gesundheit abziehen... ist da was falsch dran?


    EDIT:// Habs einfach komplett neu und anders gemacht und alles funzt... Hat sich also erledigt. Danke trotzdem ;)

    Einmal editiert, zuletzt von Virus ()