TDM Rundentimer

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
  • Warum funktioniert das nicht so wie ich es will?


    forward rundentimer(playerid); // wenn dieser timer abgelaufen ist, sollen alle neu Spawnen
    new KillerID[MAX_PLAYERS];
    new bool: PlayerDied[MAX_PLAYERS];


    public OnPlayerConnect(playerid)
    {
    SetTimerEx("rundentimer", 120000, 1, "d", playerid); // 2 Minuten
    }


    public OnPlayerSpawn(playerid)
    {
    if(PlayerDied[playerid] == true)
    {
    PlayerDied[playerid] = false;
    if(KillerID[playerid] != INVALID_PLAYER_ID)
    {
    if(IsPlayerInAnyVehicle(KillerID[playerid]))
    {
    SetPlayerInterior(playerid,GetPlayerInterior(KillerID[playerid]));
    TogglePlayerSpectating(playerid, 1);
    PlayerSpectateVehicle(playerid, GetPlayerVehicleID(KillerID[playerid]));
    }
    else
    {
    SetPlayerInterior(playerid,GetPlayerInterior(KillerID[playerid]));
    TogglePlayerSpectating(playerid, 1);
    PlayerSpectatePlayer(playerid, KillerID[playerid]);
    }
    TogglePlayerSpectating(playerid, 1);
    }
    else
    {
    SetPlayerCameraPos(playerid, 2767.2854,-2417.8667,13.6326);
    SetPlayerCameraLookAt(playerid, 2775.5989,-2417.9575,13.6366);
    TogglePlayerControllable(playerid, 0);
    SetPlayerPos(playerid, 2775.5989,-2417.9575,13.6366);
    }
    }
    else if(PlayerDied[playerid] == false)
    {
    //soll er ganz normal wieder spawnen
    }
    }


    public OnPlayerDeath(playerid, killerid, reason)
    {
    KillerID[playerid] = killerid;
    PlayerDied[playerid] = true;
    }


    So nun kommt der Timer:
    public rundentimer(playerid)
    {
    PlayerDied[playerid] = false;
    SetPlayerHealth(playerid, 0.0);
    print("Neue Runde gestartet");
    }


    Doch irgendwie wird das PlayerDied[playerid] = false; völlig ignoriert und er führt was ganz anderes aus. Was kann ich machen ;(


    //EDIT: wo ich mir jez im nachhinein OnPlayerDeath und rundentimer(playerid) angucke, is ja eigtl klar warums net geht xD Wenn ich SetPlayerHealth(playerid, 0.0); mache is er ja wieder tot und alles beginnt von vorne..... Habt ihr vielleicht ne andere Lösung?

    Einmal editiert, zuletzt von bootboy ()

  • ehm ? soll der dafür sein das alle players neu spawnen?

  • meine erste frage hat sich erledigt, ich werde einfach SpawnPlayer(playerid); nehmen :P


    was mir aufgefallen ist, dass der Timer nicht für alle spieler gleich läuft. D.h. wenn ich connecte geht der Timer los, doch wenn jetzt noch ein Spieler connectet starten ein neuer Timer. Also spawnen am Ende doch nicht alle zum gleichen Zeitpunkt. was kann ich denn da machen oO

  • Machs ohne SetTimerEx, einfach nur einen normalen Timer per SetTimer.

  • eine kleine Frage quält mich noch :P


    da ich ja bei Public rundentimer(playerid)
    SpawnPlayer(playerid);habe
    spawnt ja nur der eine spieler neu. ich möchte aber dass alle nue spawnen, also meine frage.
    gibt es statt player zB auch sowas wie all ID oder sowas xD
    also damit alle ID's (spieler) neu spawnen


    oder muss ich es so machen?
    SpawnPlayer(0);
    SpawnPlayer(1);
    SpawnPlayer(2);
    SpawnPlayer(3); und so weiter

  • sry dass ich den Thread nochmal ausgrabe. Hab aber ein ähnliches Problem wie mein Vorredner.


    Ich hab eine Telemaut (Automatisch Geld abziehende Maut) mithilfe eines Timers und PlayerToPoint gemacht. Nur leider Funktioniert die Maut nur mit ID0.
    Woran liegt das?


    public Maut(playerid)
    {
    new stringziel[256];
    new playrname[MAX_PLAYER_NAME];


    if(PlayerToPoint(5.0, playerid, 144.2668,-1374.6394,49.6506) || PlayerToPoint(5.0, playerid, 1181.9232,-677.2064,62.3592))
    {
    GetPlayerName(playerid, playrname, sizeof(playrname));
    format(stringziel, sizeof(stringziel), "%s Setting.ini", playrname);
    new number = dini_Int(stringziel, "Maut");
    if(number == 1)
    {
    }
    else if(number == 0)
    {
    SendClientMessage(playerid, COLOR_GREY, "TELEMAUT: Du hast die Mautstation passiert. Kosten: 25$ . Bitte fahre weiter zur Entwerungsstation!");

    GivePlayerMoney(playerid, -25);
    new schondrin = dini_Int("Maut.ini", "Kasse");
    dini_IntSet("Maut.ini", "Kasse", schondrin+25);
    dini_IntSet(stringziel, "Maut", 1);
    }
    }
    return 1;
    }

  • ok mach das so:


    dein forward umändern zu
    forward Maut();
    und deine funktion zu:



    public Maut()
    {
    for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
    {
    new stringziel[256];
    new playrname[MAX_PLAYER_NAME];


    if(PlayerToPoint(5.0, playerid, 144.2668,-1374.6394,49.6506) || PlayerToPoint(5.0, playerid, 1181.9232,-677.2064,62.3592))
    {
    GetPlayerName(playerid, playrname, sizeof(playrname));
    format(stringziel, sizeof(stringziel), "%s Setting.ini", playrname);
    new number = dini_Int(stringziel, "Maut");
    if(number == 1)
    {
    }
    else if(number == 0)
    {
    SendClientMessage(playerid, COLOR_GREY, "TELEMAUT: Du hast die Mautstation passiert. Kosten: 25$ . Bitte fahre weiter zur Entwerungsstation!");
    GivePlayerMoney(playerid, -25);
    new schondrin = dini_Int("Maut.ini", "Kasse");
    dini_IntSet("Maut.ini", "Kasse", schondrin+25);
    dini_IntSet(stringziel, "Maut", 1);
    }
    }
    }
    return 1;
    }