Probleme mit dem Leben 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,


    wollte das Leben speichern von den Usern habe es so gemacht, aber es speichert nicht!


    Im Enum
    Float: SHealthh


    Unter OnPlayerConnect
    PlayerInfo[playerid][SHealthh] = 100.0;


    Unter OnPlayerDisconnect
    new Float:Leben;
    PlayerInfo[playerid][SHealthh] = GetPlayerHealth(playerid, Leben);


    OnPlayerSpawn
    SetPlayerHealth(playerid, PlayerInfo[playerid][SHealthh]);


    OnPlayerRegister
    format(var, 32, "SHealthh=%d\n",PlayerInfo[playerid][SHealthh]);fwrite(hFile, var);


    OnPlayerUpdate
    format(var, 32, "SHealthh=%d\n",PlayerInfo[playerid][SHealthh]);fwrite(hFile, var);


    OnPlayerLogin
    if( strcmp( key , "SHealthh", true ) == 0 ) { val = ini_GetValue ( Data ); PlayerInfo[playerid][SHealthh] = strval ( val ); }


    Wieso speichert der mein Leben nicht??


    Bitte um Hilfe!!

  • OnPlayerDisconnect:

    PlayerInfo[playerid][SHealthh] = GetPlayerHealth(playerid, Leben);


    ändern in:


    GetPlayerHealth(playerid,PlayerInfo[playerid][SHealthhh]);


    da GetPlayerHealth nicht das Leben als Rückgabewert hat sondern den Wert an den 2.Parameter zurückgibt.


    Und bitte speicher das Leben nicht unter OnPlayerUpdate das ist schwachsinn und ressourcenfressend. Wenn reicht ein Timer oder OnPlayerTakeDamage

  • GetPlayerHealth(playerid,PlayerInfo[playerid][SHealthhh]);


    Okay so würde es gehen, allerdings habe ich ja SetPlayerHealth unter OnPlayerSpawn und der Spawnt dann wenn er Tot ist wieder mit 0 Hp... Wo soll ich diesen Befehl einfügen damit er nur mit der Gespeicherten HP Spawnt wenn er sich einloggt?

  • du hast in OnPlayerUpdate ernsthaft folgenden code ?
    format(var, 32, "SHealthh=%d\n",PlayerInfo[playerid][SHealthh]);fwrite(hFile, var);


    der Server wird massiv CPU/Festplatten-geschwingikeit verbrauchen sobald mehr wie 5 Spieler auf dem Server spielen


    zum Problem:
    OnPlayerLogin musst du nicht strval sondern floatstr verwenden... da es sich wie oben schon erwähnt um eine Kommazahl(Float) handelt ;)

  • du hast in OnPlayerUpdate ernsthaft folgenden code ?
    format(var, 32, "SHealthh=%d\n",PlayerInfo[playerid][SHealthh]);fwrite(hFile, var);


    der Server wird massiv CPU/Festplatten-geschwingikeit verbrauchen sobald mehr wie 5 Spieler auf dem Server spielen


    zum Problem:
    OnPlayerLogin musst du nicht strval sondern floatstr verwenden... da es sich wie oben schon erwähnt um eine Kommazahl(Float) handelt ;)


    Ja das ist mir auch schon aufgefallen, allerdings wenn ich Spawne spawn ich immer mit 0 HP also wenn ich Sterbe und ich spawne spawne ich wieder mit 0 Hp..


  • SetPlayerHealth(playerid,dini_FloatGet("HP"))


    Ich hatte es ja so und es ging ja auch allerdings wenn ich gestorben bin, hatte ich wieder 0 HP..

    Beispiel:


    Ich logg mich mit 1 Hp aus, logge mich somit wieder mit 1 Hp ein, Sterbe und Spawne direkt wieder mit 1 Hp. Und immer wieder dieser Kreislauf, da das ja unter OnPlayerSpawn steht.. Kann man dieses SetPlayerHealth nicht irgendwo anders rein scripten, wo der nur nach dem Login abfragt??

    2 Mal editiert, zuletzt von Shoxx () aus folgendem Grund: Beispiel eingefügt.

  • Du könntest Abfragen, ob er nach dem Login gespawnt ist.
    Sprich, du setzt nach dem Login eine Variable auf 1 diese fragst du bei onplayerspawn ab und setzt danach die variable wieder auf 0 :)
    So kriegt er nur die alten hp, nach dem er sich eingeloggt hat , und danach nicht mehr

    KleineHilfe 2.0

  • Du könntest Abfragen, ob er nach dem Login gespawnt ist.
    Sprich, du setzt nach dem Login eine Variable auf 1 diese fragst du bei onplayerspawn ab und setzt danach die variable wieder auf 0 :)
    So kriegt er nur die alten hp, nach dem er sich eingeloggt hat , und danach nicht mehr


    Habe es so gemacht:
    if(NachSpawn[playerid] == 0)
    {
    SetPlayerHealth(playerid, PlayerInfo[playerid][SHealth]);
    NachSpawn[playerid] = 1;
    }
    else
    {
    SetPlayerHealth(playerid, 50);
    }


    Das Problem ist aber, das es ab und zu passiert, das er beim Login mehrmals Spawnt..


    Also wird die Variabel direkt auf 1 Gesetzt beim richtigen Spawnen


    Kann mir keiner dabei helfen?

    2 Mal editiert, zuletzt von Shoxx ()

  • Nein, aber wenn du stirbst, setz die Variable und beim nächsten Spawn ist sie bereits gesetzt.


    Hä?


    Also soll ich das hier unter SetPlayerSpawn
    if(NachSpawn[playerid] == 1)
    {
    SetPlayerHealth(playerid, PlayerInfo[playerid][SHealth]);
    NachSpawn[playerid] = 1;
    }
    else
    {
    SetPlayerHealth(playerid, 50);
    }


    Und unter OnPlayerDeath das:
    NachSpawn[playerid] = 1;


    ??