Machen, das man Fahrzeug nur verlassen kann wenn es nicht im Wasser ist?

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,
    ich hab gescriptet, dass man ein Fahrzeug nur verlassen kann wenn es nicht unter Wasser ist, aber das funkt net. Ich hab es so gemacht: es geht die ganze zeit mit OnPlayerUpdate durch, ob man in einem fahrzeug ist und wenn ja ob es unter Wasser ist. Wenn es unter Wasser ist wird eine Variable auf 0 gestellt und dann soll bei OnPlayerExitVehicle abgefragt werden, ob die Variable auf 0 ist. Wenn ja soll man das Auto nciht verlassen können, aber ich kann das Auto dann verlassen, wenn cih es ausprobier.
    Code:

    new FahrzeugO[MAX_VEHICLES];
    public SpawnVehicle(vehicleid)
    {
    FahrzeugO[vehicleid] = 1;
    return 1;
    }
    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    if(FahrzeugO[vehicleid] != 1)
    {
    SendClientMessage(playerid, COLOR_RED, "Du kannst das Fahrzeug im Wasser nicht verlassen!");
    PutPlayerInVehicle(playerid, vehicleid, GetPlayerVehicleSeat(playerid));
    }
    return 1;
    }


    public OnPlayerUpdate(playerid)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    if(IsVehicleInWater(GetPlayerVehicleID(playerid)) == 1)
    {
    FahrzeugO[GetPlayerVehicleID(playerid)] = 0;
    }
    }
    return 1;
    }


    Woran kann es liegen, dass ich trozdem aussteigen kann?


    Edit: Wenn man vor das PutPlayerInVehicle ein return tut kommt man trozdem raus aber dann bugts leicht

    Einmal editiert, zuletzt von Tom Sunder ()

  • Du kannst auch einfach bei OnPlayerExitVehicle abfragen, ob das Fahrzeug im Wasser ist, ohne die Variable bei OnPlayerUpdate zu nutzen.


    Den Spieler direkt wieder in das Fahrzeug zu setzen klappt nicht wirklich, aber du kannst versuchen, bei OnPlayerExitVehicle den Spieler zu freezen, dann einen kurzen Timer zu setzen, 50ms zum Beispiel, und ihn dann wieder zu entfreezen.
    Du kannst es auch ohne Timer versuchen, also einfach freeze und entfreeze direkt hintereinander, bei OnPlayerEnterVehicle klappt das auch.

  • Du kannst auch einfach bei OnPlayerExitVehicle abfragen, ob das Fahrzeug im Wasser ist, ohne die Variable bei OnPlayerUpdate zu nutzen.


    Den Spieler direkt wieder in das Fahrzeug zu setzen klappt nicht wirklich, aber du kannst versuchen, bei OnPlayerExitVehicle den Spieler zu freezen, dann einen kurzen Timer zu setzen, 50ms zum Beispiel, und ihn dann wieder zu entfreezen.
    Du kannst es auch ohne Timer versuchen, also einfach freeze und entfreeze direkt hintereinander, bei OnPlayerEnterVehicle klappt das auch.


    ich kann immer noch raus hab das mit dem Timer gemacht und sogar 100 ms eingestellt funkt aber trzdm net

  • Versuch das mal so...


    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    if(IsVehicleInWater(vehicleid) == 1)
    {
    SendClientMessage(playerid, COLOR_RED, "Du kannst das Fahrzeug im Wasser nicht verlassen!");
    return PutPlayerInVehicle(playerid, vehicleid, GetPlayerVehicleSeat(playerid));
    }
    return 1;
    }


    Wenn das nicht geht, dann schick mal deine function IsVehicleInWater


  • geht net

  • Versuchs mal so xd



    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    if(IsVehicleInWater(vehicleid) == 1)
    {
    SendClientMessage(playerid, COLOR_RED, "Du kannst das Fahrzeug im Wasser nicht verlassen!");
    ClearAnimations(playerid);
    PutPlayerInVehicle(playerid, vehicleid, GetPlayerVehicleSeat(playerid));
    return 1;
    }
    return 1;
    }

    ik bin der vito c:


  • die sendclientmessage Nachricht kommt ja man bleibt nur net im auto sondern kann dann trozdem raus...


    Probier mal so:


    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    if(IsVehicleInWater(vehicleid) == 1)
    {
    SendClientMessage(playerid, COLOR_RED, "Du kannst das Fahrzeug im Wasser nicht verlassen!");
    TogglePlayerControllable(playerid,0);
    return SetTimerEx("FreezeUnfreeze", 50, false, "i", playerid);
    }
    return 1;
    }


    forward FreezeUnfreeze(playerid);
    public FreezeUnfreeze(playerid)
    {
    TogglePlayerControllable(playerid,1);
    return 1;
    }


  • Das hat mir Jeffry schon vorgeschlagen, aber wie ich oben geschrieben hab funkt das net.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • Das hat mir Jeffry schon vorgeschlagen, aber wie ich oben geschrieben hab funkt das net.

    dann würde ich mal sagen:


    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    if(IsVehicleInWater(vehicleid) == 1)
    {
    SendClientMessage(playerid, COLOR_RED, "Du kannst das Fahrzeug im Wasser nicht verlassen!");
    SetPVarInt(playerid,"ExitCar",vehicleid);
    return SetTimerEx("InCarPortenTimer", 50, false, "i", playerid);
    }
    return 1;
    }


    forward InCarPortenTimer(playerid);
    public InCarPortenTimer(playerid)
    {
    return PutPlayerInVehicle(playerid, GetPVarInt(playerid,"ExitCar"), 0);
    }

  • sorry hab vergessen den Fehler bei deinem zu posten: Da kommt dann dreimal die Message


    Bei meiner Variante (die von Wolf-Vito sollte auch klappen) ist es ab und zu auch so, dass die Nachricht mehrfach kommt, dann mach es einfach so:


    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    if(IsVehicleInWater(vehicleid) == 1)
    {
    static lastMessage[MAX_PLAYERS];
    new Float:x, Float:y, Float:z, seat;
    GetPlayerPos(playerid, x, y, z);
    seat = GetPlayerVehicleSeat(playerid);
    SetPlayerPos(playerid, x, y, z);
    PutPlayerInVehicle(playerid, vehicleid, seat);
    if(lastMessage[playerid] != gettime()) SendClientMessage(playerid, 0xFF0000FF, "Du kannst das Fahrzeug im Wasser nicht verlassen!");
    lastMessage[playerid] = gettime();
    }
    return 1;
    }


  • ok