Bankfreeze funktioniert nicht richtig // Position ständig 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
  • Undzwar, habe die GF Bank von InternetInk.
    Ich habe es so eingestellt das der Spieler gefreezt werden soll wenn er diese betritt ( für 1,5 Sekunden )
    Ich gehe in die Bank, werde gefreezt..
    Dann laufe ich 1-2 Sekunden weiter, und zack bin wieder gefreezt aber für unendlich!
    Hier der Code:
    if(IsPlayerInRangeOfPoint(playerid,4.0,-2649.6599,376.1172,6.1563))//SF Bank /enter
    {
    FreezePlayer(playerid);
    SetTimer("SFFreeze", 1500, 0);
    SetPlayerPos(playerid,1415.951171,-988.971191,1639.980224); //
    SetPlayerInterior(playerid,3);
    SetPlayerFacingAngle(playerid,358.0127);
    SetPlayerVirtualWorld(playerid,0);
    }


    Hier der Timer (bzw die Funktion die ihn entfreezt! )
    Function SFFreeze()
    {
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    UnfreezePlayer(i);
    }
    return 1;
    }


    ----------------------------------------------------------------------------------------------------------------------------------


    So 2te Frage, habe es so eingstellt das man da spawnt wo man ausloggt!
    Nun habe ich aber ein kleines Problem, wenn z.B der Server neugestartet wird also die Konsole an sich dann speichert er die Koordinaten nicht & setzt den Spieler da wo er sich das letzte mal eingeloggt hat!


    Ich möchte das er die Position alle 1-2 Sekunden oder so speichert, um zu vermeiden das er woanders spawnt!
    Im OnPlayerDisconnect steht folgendes:

    GetPlayerPos(playerid, PlayerInfo[playerid][SpawnX], PlayerInfo[playerid][SpawnY], PlayerInfo[playerid][SpawnZ]);
    GetPlayerFacingAngle(playerid, PlayerInfo[playerid][SpawnR]);
    PlayerInfo[playerid][SInterior] = GetPlayerInterior(playerid);
    PlayerInfo[playerid][SVirtualWorld] = GetPlayerVirtualWorld(playerid);


    Wäre nett wenn ihr mir helft, da ich gerade nicht richtig durchblicke!

  • mit deiner schleife in dem public lässt du alle spieler auf dem server entfreezen was eigtl keinen sinn macht.


    1. mit settimerex arbeiten um den timer nur für den spieler zu starten der in der bank ist
    2. im public mit playerid arbeiten damit du nicht alle spieler auf dem server entfreezt sondern nur playerid


    SetTimerEx("SFFreeze",1500,0,"i",playerid);
    http://wiki.sa-mp.com/wiki/SetTimerEx


    Function SFFreeze(playerid)
    {
    UnfreezePlayer(playerid);
    return 1;
    }


    zu deinem 2ten problem:
    mir ist es schon des öfteren aufgefallen das bei einem gmx viele variablen auf 0 gestellt werden bevor diese abgespeichert werden.
    dies ist mir aufgefallen bei GetPlayerSkin und GetPlayerPos .. diese können bei einem gmx irgendwie nicht rechtzeitig ausgelesen werden.
    bei GetPlayerMoney und GetPlayerScore hingegen klappt das ganze.


    meine lösung:
    ingame einen admin befehl zum neustarten erstellen und alle spieler abspeichern. danach SendRconCommand("gmx");

    Einmal editiert, zuletzt von Tround ()

  • 2te Problem:
    Aber was nützt mir den das wenn der Server abstürzt?
    Stell dir vor ein Spieler spielt seid 2 Stunden auf dem Server, und hat sich in LV eingloggt, dann sitzt er in SF/LS und der Server geht down?


    Dann ist er wieder in LV ..
    Das würde viele Spieler aufregen.

  • OnPlayerConnect:
    Ist nix davon drine.


    OnPlayerSpawn:

    SetPlayerPos(playerid, PlayerInfo[playerid][SpawnX], PlayerInfo[playerid][SpawnY], PlayerInfo[playerid][SpawnZ]);
    SetPlayerFacingAngle(playerid, PlayerInfo[playerid][SpawnR]);
    SetPlayerInterior(playerid, PlayerInfo[playerid][SInterior]);
    SetPlayerVirtualWorld(playerid, PlayerInfo[playerid][SVirtualWorld]);


    OnPlayerDisconnect:

    GetPlayerPos(playerid, PlayerInfo[playerid][SpawnX], PlayerInfo[playerid][SpawnY], PlayerInfo[playerid][SpawnZ]);
    GetPlayerFacingAngle(playerid, PlayerInfo[playerid][SpawnR]);
    PlayerInfo[playerid][SInterior] = GetPlayerInterior(playerid);
    PlayerInfo[playerid][SVirtualWorld] = GetPlayerVirtualWorld(playerid);