Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 28.11.2013, 00:36   #1 (permalink)
Newbie
 
Registriert seit: 28.11.2013
Alter: 49
Beiträge: 10
Standard Script funktioniert nicht auf Dedicated Server.

Moin,

ich bin noch recht frisch, was Editing/Scripting angeht und komme derzeit bei folgendem Problem einfach nicht weiter:

In einer COOP-Mission sollen die Spieler (maximal 5) am Ende durch einen Heli ausgeflogen werden. Jeder Spieler hat einen Eventhandler (Fired) erhalten, welcher das Script für die Heli-Abholung startet.

Initzeile der Spieler:
Code:
this addEventHandler ["fired",{_this execvm "chemlight_extraction.sqf"}];
Die Variable task4 wird über einen Trigger auf true gesetzt, sobald alle Spieler die Abholzone erreicht haben. Bei Aktivierung:
Code:
task4=true; publicVariable "task4";
Hier nun der Einstieg in das Script: chemlight_extraction.sqf
Code:
private ["_shooter", "_ammotype"];
_shooter = _this Select 0;
_ammotype = _this Select 4;

if (isServer) then
{
    if (task4) then
    {
        sleep 2;

        switch (_ammotype) do
        { 
            case "Chemlight_green":
            { 
            _wp0 = group heli1 addWaypoint [ getpos player, 50];
            _wp0 setWaypointType "MOVE";
            _wp0 setWaypointStatements ["true", "heli1 land 'GET IN'"];

            ... Rest des Scripts ...

        };
    };
};
Wenn ich die Mission selbst hoste, oder ein anderer Spieler die Mission hosted, funktioniert alles wunderbar. Abholzone erreichen, Trigger löst aus, Grünes Licht werfen, Heli kommt...

Auf einem Dedicated Server klappt das leider nicht (Trigger löst aus, aber nach dem Werfen des Lichts passiert nichts). Da das Script ansonsten funktioniert ist es vermutlich ein Lokalitätsproblem. Ich steige aber leider, trotz intensiver Lektüre des BIS Wikis nicht dahinter.

Vielleicht mag mir hier ja jemand die Richtung weisen. Danke!
Grollig ist offline  
Alt 28.11.2013, 10:15   #2 (permalink)
50 Beiträge
 
Benutzerbild von JeeperCreeper
 
Registriert seit: 18.10.2013
Alter: 41
Beiträge: 64
Standard

Schau mal hier rein, das sollte Dir helfen.
JeeperCreeper ist offline  
Alt 28.11.2013, 23:41   #3 (permalink)
Newbie
 
Registriert seit: 28.11.2013
Alter: 49
Beiträge: 10
Standard

In dem Thema ist die Erklärung der Lokalitäten sehr gut zusammengefasst. Nach mehrfachem Lesen hat es dann irgendwann Klick gemacht. Problem gelöst - Vielen Dank!



Hier noch die Auflösung, falls jemand mit einem ähnlichen Problem hier landen sollte:

Das Script "chemlight_extraction.sqf" wurde direkt über den Eventhandler einer Spielereinheit aus deren Init Zeile gestartet:
Code:
this addEventHandler ["fired",{_this execvm  "chemlight_extraction.sqf"}];
Dadurch lief das Script aber nur lokal auf dem Client des Spielers. Die Abfrage "if (isServer)" zu beginn des Scriptes gab demnach "false" zurück und das Script wurde nie ausgeführt - zudem sollte es ja ohnehin auf dem Server ausgeführt werden und nicht auf einem Client.


Meine Lösung (vielleicht nicht die beste, aber sie funktioniert):

Ich habe den Eventhandler ein gesondertes Script ausführen lassen:
Code:
this addEventHandler ["fired",{_this execvm "lichtgeworfen.sqf"}];
Darin werden drei Variablen definiert:
Code:
//Script lichtgeworfen.sqf
lightshooter = _this Select 0; publicVariable "lightshooter";
lightammotype = _this Select 4; publicVariable "lightammotype";
lightthrown = true; publicVariable "lightthrown";
"lightshooter" ist somit die Einheit des Spielers, der "geschossen" und somit das Script ausgelöst hat.
"lightammotype" ist der Classname der dabei vom Spieler verwendeten "Munition"
"lightthrown" ist eine boolesche Variable, die für "wahr" erklärt wird.
Alle drei Variablen werden mit publicVariable für den Server bekannt gemacht (und auch für die anderen Clients, wobei das in diesem Fall egal ist).

Das eigentliche Heli Script hat einen neuen Namen bekommen (extractcheck.sqf) und wurde bereits zu Missionsbeginn über die init.sqf gestartet:
Code:
if (isServer) then {execVM "extractcheck.sqf";};
Das Heli Script Script wird dadurch nur auf dem Server ausgeführt (was hier Sinn macht, da der Transportheli in diesem Fall von einem KI Piloten geflogen wird und seine Lokalität somit beim Server liegt).

Das Resultat sieht bei mir so aus:
Code:
waitUntil {sleep 2; (task4 && lightthrown)};

while {true} do
{
     sleep 0.1;

     switch (lightammotype) do
     { 
         case "Chemlight_green":
         { 
         _wp0 = group heli1 addWaypoint [ getpos lightshooter, 50];
         _wp0 setWaypointType "MOVE";
         _wp0 setWaypointStatements ["true", "heli1 land 'GET IN'"];

         ... Hier weiterer Code für den Heli ...

          };
         default {}; 
      };
};
Entscheidend ist dabei, dass das Heli Script nicht komplett abläuft, sondern durch den Befehl waitUntil in der ersten Zeile wartet, bis die Voraussetzungen (gobale Variablen) für die Abholung per Heli erfüllt sind. Anschließend wird eine While/Do Schleife gestartet, die per Switch/Case darauf achtet, welche "Munition" vom Spieler abgefeuert wird. Im Fall eines grünen Knicklichtes (case "Chemlight_green": ) wird der Teil abgearbeitet, der den Heli in Bewegung setzt.

Danke nochmal an JeeperCreeper für den Verweis auf den anderen Thread!

Die fertige Missi gibt es übrigens über den Steam Workshop, bei interesse:

Steam Workshop :: [COOP-5] STARS Midnight Flash (German)

Wer mag, darf dort auch gern konstruktives Feedback geben. Ich lerne ja noch...


P.S.: Ergänzend möchte ich noch hinzufügen, dass ich den Eventhandler inzwischen aus der Init der Spielereinheiten entfernt habe, da er sonst die ganze Zeit über mit jedem Schuss (egal welche Munition) das "lichtgeworfen.sqf" Script auslöst, was unnötige Rechenlast bedeutet. Stattdessen bekommen die Spieler den Eventhandler nun erst zugewiesen, wenn sie in den Trigger für die Abholzone laufen:
Code:
Bei Aktivierung:
player addEventHandler ["fired",{_this execvm "lichtgeworfen.sqf"}];

Geändert von Grollig (29.11.2013 um 01:32 Uhr).
Grollig ist offline  
 


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Beta-Patch für OpA erschienen det99 Community 1429 18.07.2014 17:51
[LINUX] Server probleme Gonzo1690 Technische Fragen & Probleme 1 23.09.2013 23:00
Script wirklich nur auf Server ausgeführt? Sol.LrMartyn Editing & Scripting 1 02.08.2013 15:11
Patch 1.59 Buccs Community 83 10.06.2011 06:34
Arma 2 Server Problem S@ndviper Multiplayer 14 15.11.2010 19:45


Kontakt - HX3.de - Archiv - Nach oben

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias



SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119