motorschaden (<300 leben wird gefreezt)

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 liebe Brot-Fische.
    Ein Freund und ich sind gerade dabei einen Reallife server zu basteln.
    Wir versuchen alles bei Selfmade zu halten, wenn es nicht anders geht auch edits von codeschnipseln...
    Wir haben nun eingefügt, dass wenn die Lebensanzahl von dem Auto unter 300 ist, dass man gefreezt wird.
    Mit dem Befehl /exitcar kann man das Auto anschließend verlassen.
    Um das mit dem 300 Leben abzufragen haben wir einen Stock gemacht der folgender maßen aussieht:
    stock Motorschaden(playerid)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new Float:health;
    carid = GetPlayerVehicleID(playerid);
    GetVehicleHealth(carid,health);
    if(health <300)
    {

    TogglePlayerControllable(playerid, 0);
    SendClientMessage(playerid,COLOR_RED,"Motorschaden, du solltes das O-Amt rufen!");
    }
    }
    return 0;
    }
    Soweit so gut.
    Der Stock wird bei uns über OnPlayerUpdate "gestartet":
    public OnPlayerUpdate(playerid)
    {
    Motorschaden(playerid);
    return 1;
    }
    Dadurch, dass der Stock über OnPlayerUpdate gestartet wird, soll verhindert werden, dass man /exitcar macht und dann wieder einsteigt und los fahren kann.
    Es klappt auch einiger maßen.
    Allerdings kann man noch entweder eine bestimmte Zeit fahren oder man kriegt nochmal etwas damage und man ist erst dann wieder gefreezt.


    Vielleicht kann mir jemand erläutern warum man eine bestimmte Zeit noch fahren kann bzw. so lange bis man weiteren damage kriegt.
    Wäre euch sehr verbunden!


    Mit freundlichen Grüßen
    joshi2122

  • Mach doch einfach:


    Damit wird bei jedem Einsteigen in ein Fahrzeug wieder geprüft.


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER && oldstate == PLAYER_STATE_ONFOOT)
    {
    Motorschaden(playerid);
    }
    return 1;
    }

    mfg RedDragon 8)


    Was ist GFKD?


    Ein revolutionärer Clan, dessen Eröffnung kurz bevorsteht.
    Mehr Informationen folgen bald.

  • Danke für die Hilfe, aber es geht immer noch nicht....^^

  • ich würd dir noch empfehelen die hp des fahrzeugs danach auf 300 zu setzen weil sonst kann man explodieren ;) und das das etwas später freezt liegt daran onplayerupdate nur alle 0,4sec aufgerufen wird (glaub ich)


    //edit: Du könntest ja mal bei on playerupdate eine message machen(dann siehste wie oft es aufgerufen wird):


    public OnPlayerUpdate(playerid)
    {
    SendClientMessage(playerid,farbe,"Onplayerupdate wurde aufgerufen);
    Motorschaden(playerid);
    return 1;
    }

  • Zitat

    Der Client (Spieler) kommuniziert mit dem Server, vereinfacht, indem er kleine Datenpakete verschickt, die Informationen wie seine Position, Bewegung oder aktuell ausgerüstete Waffe enthalten. Der Server verschickt die Daten dann weiter an alle anderen Clients, so entsteht die Synchronisation --> Alle sehen dasselbe.


    Jedesmal wenn der Server eines dieser Datenpakete empfängt, wird OnPlayerUpdate ausgeführt, also jedesmal wenn der Client den Server über seinen aktuellen Status informiert. Dies passiert sehr (!) oft, daher solltest du, wie KornChief schon gesagt hat, nicht viel Code in diesem Callback ausführen lassen.


    Was lernen wir daraus? OnPlayerUpdate wird sehr oft in kurzer Zeit ausgeführt!!! Diese public ist nur mit Vorsicht zu benutzen.

    mfg RedDragon 8)


    Was ist GFKD?


    Ein revolutionärer Clan, dessen Eröffnung kurz bevorsteht.
    Mehr Informationen folgen bald.