Multiplayer RepairPad - allgemeine Frage

  • Hallo,



    ich möchte eine bestehende Multiplayer-Mission um eine Service-Station erweitern, an der ein Spieler sein Fahrzeug aufmunitionieren und reparieren kann.
    Hierzu habe ich einen Trigger von 5x5x5 gesetzt, der wiederholt durch BLUFOR aktiviert werden darf.
    In der Bedingung steht nur this.
    Bei Aktivierung wird folgendes ausgeführt.

    Code
    1. [] call fn_helipad;


    init.sqf

    Code
    1. fn_helipad = compile preprocessFileLineNumbers "scripts\fn_helipad.sqf";


    scripts\fn_helipad.sqf

    Code
    1. vehicle player setdamage 0;
    2. vehicle player setfuel 1;
    3. vehicle player setvehicleammo 1;
    4. hint "Your vehicle has been repaired and refueled";


    Leider bekommen so alle Spieler die Meldung, dass deren Fahrzeug erfolgreich behandelt wurde.
    Schlimmer noch, alle Fahrzeuge im Spiel werden behandelt wenn ein Spieler in einem sitzt.




    Um alle Spieler (?) an die Funktion zu übergenen, die aktuell den Trigger auslösen, nutze ich jetzt folgendes bei Aktivierung des Triggers.

    Code
    1. [thisList] call fn_helipad;


    scripts\fn_helipad.sqf


    Ab jetzt muss ich raten!
    Wird somit das Fahrzeug nur beim ersten Spieler repariert, der in einem Fahrzeug auf dem Helipad steht?
    Oder passiert das global für alle im selben Fahrzeug sitzenden Spieler?
    Alternativ, wie löst du eine solche Aufgabe? ;-)

  • Eine Lösung aus meiner Sammlung:

    Code
    1. [thisList] call fn_helipad;


    Vorteil hier wird nur einmal das Fahrzeug bearbeitet und die Nachricht an die Fahrzeug Crew ausgegeben.

  • Aubacke! Ja klar, danke ;-)


    Nachtrag:
    So geht es, aber nicht optimal!


    Creedcoder, diese Zeile wirft bei mir eine Fehlermeldung.

    Code
    1. if{!isServer} exitWith {};


    Mit dieser Zeile gibt es keine Fehlermeldungen, allerdings bekomme ich nur die HINTS.
    Die Fahrzeuge werden aber nicht repariert!

    Code
    1. if(!isServer) exitWith {};
  • Thx Fabi.

    Code
    1. if(_x isKindOf "LandVehicle" || {_x isKindOf "Helicopter"} || {_x isKindOf "Plane"} || {_x isKindOf "Ship"}) then {

    Damit werden auch Helikopter, Boote und Flugzeuge repariert!


    Es schaut so aus, als könne der Server die Fahrzeuge gar nicht so reparieren/aufmunitionieren, dass das alle Spieler mitbekommen.
    Ist das so?

  • Macht es doch nicht komplizierter als es notwenig ist.


    Wenn der Trigger normal auf der Karte steht, kennt diesen jeder Client und der Server. Deine Commandos werden bis auf Hint eh über den Server veteilt. Deswegen den Trigger lokal ausführen lass.


    Mit u.a. Beispiel wird jedes Fahrzeug, in welchem der Spieler sich befindet, repariert.


    Auslösereinstellung:
    Radius: wie benötigt
    Aktivierung: West
    Aktivierungstyp: Vorhanden
    mehrfach


    Bedingung: (vehilce player) in thislist && local player


    Bei Aktivierung:

  • Ein Trigger prüft die Bedingung 2x in der Sekunde. Ich kenne deine Mission nicht und weiß nicht, wie die Leistung so ist.
    Alternativ kann man so etwas auch ein einen Addaction-Eintrag binden. Der prüft nicht, sonder löst aus, wenn er aktiviert wird


    Ich habe dafür eine Figur hingestellt ( Siumalation ausgestellt) und dieser einen Eintrag angehangen. Quasi eine Art "Werkstattmeister".


    Mal etwas zum Thema, was aber "Eye Candy" ist.
    Es dauert ja, bis so ein Fahrzeug repariert und aufmunitioniert ist. Denke mal über ein Sleep nach. Ich finde es komisch, wenn man irgendwo hinfährt und klack, alles ist wieder tutti.



    @Pat-O
    Ich will dir kurz dein Eingangproblem erklären.
    Jeder kennt den Auslöser, da er verbaut wurde. Clienten und Server. Du hattest eingestellt, das er auslösen soll wenn blau drin ist.
    Du sagtest dem Spiel: Wenn aktiviert, setze das Fahrzeug des Spielers instand.
    JEDER kennt den Trigger! Also hat JEDER Spieler sein Fahrzeug repariert bekommen, da du keine Begrenzung eingebaut hattest.


    Es kommt nun auf die Befehle an, die du einsetzt. Deine benutzten Befehle werden über das Netzwerk verteilt. Das erkennst du an dem EG-Icon auf der Wiki-Seite.
    Also mußt du dem Spiel erklären, dass nur der Trigger auf dem Rechner auslösen soll, der da reinläuft.
    Local player und Spieler in dem Trigger. Der Setdammage, setfuel usw. wirken global, bis auf den hint. Das wolltest du ja auch so haben.
    Die Chats und Hints laufen nur auf dem Clienten.


    Willst du z.B. einen Funkspruch im MP rüberbringen, wenn eine Stellung zerstört wurde, wäre deine Version gegangen.
    Im Trigger, welcher prüft ob das Geschütz zerstört ist würde stehen hint "Luftabwehr ausgeschaltet. Die Truppen können eingeflogen werden".
    JEDER bekommt den Hint, weil JEDER den Trigger kennt.