Auto: Türen zu [Help]

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
  • Gute Nacht liebe Community, :D


    Da ich von meinem Handy Online bin, werde ich mich kurz halten.


    Ich habe eine variable
    new bool: Lock[MAX_VEHICLES]


    Erstellt.


    Diese speichert nun, ob ein bestimmtes auto abgeschlossen ist.
    Doch wie kann ich das Auto nun abschließen lassen, wenn man neu auf dem Server Connected?


    Sprich:
    Ich bin auf dem Server, schließe ein Auto ab und dann kommt ein neuer Spieler auf dem Server.
    Bei ihm ist das Auto ja noch offen.
    Wie kann ich das nun direkt automatisch auch bei ihm abschließen?


    Habs schon unter onplayerenterve...
    Usw. Probiert.
    Habt ihr möglichkeiten für mich?


    Bin auf eure Hilfe angewiesen :)



    Mit freundlichen grüßen,
    Scripter4.0

    Scripter im Ruhestand.

  • Versuchs mal so:

    // Unter
    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)


    // Abfragen ob das Fahrzeug abgeschlossen ist und anschließend verriegeln
    if(Lock[vehicleid] == true)
    {
    SetVehicleParamsForPlayer(vehicleid, playerid, 0, 1);
    }

    Sollte so funktionieren ;)


    maddin: Hatte meinen ersten Beitrag grade bearbeitet...


    //Edit by maddin: Sorry, mein Fehler. Kommt davon wenn man mehrere Tabs nacheinander anschaut :/

    Windows ist wie ein U-Boot, öffnest du ein Fenster hast du ein Problem.

    Einmal editiert, zuletzt von maddin ()

  • Das dürfte sich so von selbst erklären?
    COMMAND:lock(playerid,params[])
    {
    if(Lock[vehicleid] == true)
    {
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    if(i == playerid) continue;
    SetVehicleParamsForPlayer(vehicleid,i,0,0);
    }
    GameTextForPlayer(playerid, "Fahrzeug: Aufgeschlossen", 5000, 6);
    Lock[vehicleid] = false;
    }
    else
    {
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    if(i == playerid) continue;
    SetVehicleParamsForPlayer(vehicleid,i,0,1);
    }
    GameTextForPlayer(playerid, "Fahrzeug: Abgeschlossen", 5000, 6);
    Lock[vehicleid] = true;
    }
    return 1;
    }

  • Hey,
    @Scripter4.0:
    Ja,es geht ja mit der schleife for(new i;i<MAX_PLAYERS;i++) alle Spieler IDs durch ob Online oder nicht.
    Und solange dies nicht wieder aufgeschlossen wird bleibt es zu
    Ich weiß nicht also wenn du meinen Befehl nutzt da ist ja auch if(i == playerid) continue; das musst du entfernen
    Wenn du auch möchtest das das Auto auch für den besitzer abgeschlossen ist


    Ich hoffe das ich dir Helfen konnte

  • Hey,
    du musst den befehl gewiss umscripten
    also
    OnGameModeInt
    dann eine Schleife durch alle Spieler
    eine durch alle Autos
    Dann Abschließen


    //Edit
    OnGameModeInt()
    {
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    for(new v;v<78;v++)
    {
    SetVehicleParamsForPlayer(sfpdcar[v],i,0,0);
    Lock[vehicleid] = true; // Abgeschlossen wenn du False hast = abgeschlossen ändern
    }
    }
    return 1;
    }
    Da es gewiss schwieriger ist, scripte ich dir das einmal vor

  • ok es hat nun funktioniert das er die Variable auf True setzt.
    nun habe ich einfach überprüft, wenn ein spieler in ein auto steigt, ob es zu oder offen ist..
    wenn zu: ...
    wenn offen: macht er nichts






    Nun noch eine Frage:
    Wie kann ich überprüfen, ob ein Spieler in der Nähe von einem Auto ist?
    Wenn ich nun den Befehl /lock mache?
    Wenn jemand zum Beispiel neben einem zugeschlossenem Auto steht, wie kann ich abfragen, ob das Auto in der Nähe vom Spieler ist und ob es ein SFPD Car ist?


    Mfg
    Danke nochmal ;)

    Scripter im Ruhestand.

    Einmal editiert, zuletzt von Scripter4.0 ()

  • ist glaube ich noch besser. danke


    nun habe ich noch ein problem:

    if(newkeys == 16384)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new vID = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(vID) == 509 || GetVehicleModel(vID) == 481 || GetVehicleModel(vID) == 510)return 1;//Überprüft ob das Fahrzeug ein Fahrrad ist (wie im Command oben)
    if(GetPlayerVehicleSeat(playerid) == 0)
    {
    if(Motor[vID] == false)
    {
    for(new i=0; i<sizeof(sfpdcar); i++)
    {
    if(vID == sfpdcar[i])
    {
    if(SFPDCard[playerid] == 0)
    {
    SendClientMessage(playerid, GRAU, "Du hast keine SFPD Card um den Motor zu starten.");
    }
    else
    {
    SendClientMessage(playerid, LILA, "Der Motor wird gestartet...");
    if(Tank[vID] < 1)return SetTimerEx("Motortankleer",2000, 0, "i", playerid);
    if(Batterie[vID] < 1)return SetTimerEx("Motorbatterieleer",2000, 0, "i", playerid);
    SetTimerEx("Motorstarten", 2000, 0, "i", vID);
    }
    }
    else
    {
    SendClientMessage(playerid, LILA, "Der Motor wird gestartet...");
    if(Tank[vID] < 1)return SetTimerEx("Motortankleer",2000, 0, "i", playerid);
    if(Batterie[vID] < 1)return SetTimerEx("Motorbatterieleer",2000, 0, "i", playerid);
    SetTimerEx("Motorstarten", 2000, 0, "i", vID);
    }
    }
    }


    Warum wird die ganzen Message gespammt, wenn sie die for(new Schleife nur auf die SFPD Cars bezieht?


    Denn es sieht dann so aus:



    Bitte um Hilfe. Danke


    Mfg

    Scripter im Ruhestand.

  • if(newkeys == 16384)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new vID = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(vID) == 509 || GetVehicleModel(vID) == 481 || GetVehicleModel(vID) == 510)return 1;//Überprüft ob das Fahrzeug ein Fahrrad ist (wie im Command oben)
    if(GetPlayerVehicleSeat(playerid) == 0)
    {
    if(Motor[vID] == false)
    {
    for(new i=0; i<sizeof(sfpdcar); i++)
    {
    if(vID == sfpdcar[i])
    {
    if(SFPDCard[playerid] == 0)
    {
    SendClientMessage(playerid, GRAU, "Du hast keine SFPD Card um den Motor zu starten.");
    }
    else
    {
    SendClientMessage(playerid, LILA, "Der Motor wird gestartet...");
    if(Tank[vID] < 1)return SetTimerEx("Motortankleer",2000, 0, "i", playerid);
    if(Batterie[vID] < 1)return SetTimerEx("Motorbatterieleer",2000, 0, "i", playerid);
    SetTimerEx("Motorstarten", 2000, false, "i", vID);
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid, LILA, "Der Motor wird gestartet...");
    if(Tank[vID] < 1)return SetTimerEx("Motortankleer",2000, 0, "i", playerid);
    if(Batterie[vID] < 1)return SetTimerEx("Motorbatterieleer",2000, false, "i", playerid);
    SetTimerEx("Motorstarten", 2000, 0, "i", vID);
    return 1;
    }
    }
    }
    }
    }
    }
    Kannst du uns den motor an Stock zeigen?
    Du musst dann Return's rein packen
    Da es eine Schleife ist und so dies das
    Aber normal dürfte das nicht passieren. außer du hast irgendwo gefailt

  • Hier ist der Motor Stock:
    War gerade essen, darum hat's etwas länger gedauert..




    public Motorstarten(vID)
    {
    GetVehicleParamsEx(vID,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vID,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    Motor[vID] = true;
    return 1;
    }

    Scripter im Ruhestand.