PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Skript läuft über Server nicht korrekt ab


Rettich
20.05.2009, 13:05
Moin zusammen!

Kann mir jemand sagen, warum das folgende Skript (sqf) nicht richtig funktioniert?
Es wir durch einen Action- Menü Eintrag gestartet.

IM removeAction ID;
player playmove "AinvPknlMstpSlayWrflDnon_medic";
sleep 6;
hint "Die Minister werden gleich in den Hum1 gebeamt";
sleep 12;
IM moveInCargo Hum1;
PM moveInCargo Hum1;
sleep 6;
"2" ObjStatus "Done";
sleep 6;
hint "Bringe die beiden in den Knast in der Base und warte davor, bis sie drin sind";

Das Skript wird zwar gestartet, aber die beiden Personen werden nicht in den „Hum1“ gebeamt, wenn ich das Spiel über einen Server starte. Im Editor klappt alles problemlos.

Über den Server werden alle anderen Befehle abgearbeitet, nur das „moveInCargo“ nicht.

Gruß Rettich

Vienna
20.05.2009, 13:49
Vermutlich hat der Server über IM und PM nicht die Kontrolle. Wenn das z.B. Spieler sind oder der Gruppe eines Spielers angehören.

Infors darüber hier: Locality in Multiplayer - Bohemia Interactive Community (http://community.bistudio.com/wiki/Locality_in_Multiplayer)

Rettich
20.05.2009, 14:08
Ne, sie sind gruppenlos, aber genau das ist das Problem.
Nach einigem hin- und herprobieren habe ich herausgefunden, das die Soldaten die gebeamt werden sollen, in der Gruppe des Spielers sein müssen und dann klappt es auch nur mit dem Soldaten, der den Action- Menüeintrag hat. Also müssen beide einen Eintrag bekommen und einzeln gebeamt werden.

z.B. so:

s2 removeAction ID;
player playmove "AinvPknlMstpSlayWrflDnon_medic";
sleep 6;
hint "Pilot wird gleich in den Hum1 gebeamt";
sleep 2;
[s2] join s1;
sleep 2;
s2 moveInCargo Hum1;

Aber Danke Vienna!

Vienna
20.05.2009, 18:34
Dann war es kein Server-, sondern ein Clientproblem. Jedenfalls war es ein Problem der "Lokalität". Der Client wollte KIs, über die der Server die Kontrolle hatte, steuern. Durch das Aufnehmen der KIs in die Gruppe des Clients hat der jetzt die Kontrolle über die KIs. Da kannst du ihnen aber auch dirket die Befehle zum Einsteigen geben.

Wenn du gar nicht willst, dass die KIs unter der Kontrolle des Clients sind, dann musst du den moveInCargo Befehl vom Server ausführen lassen. z.B. das Skript über eine publice Variable beim Server starten, oder über einen "addPublicVariableEventHandler".

z.B.

In die Init.sqs oder Init.sqf folgende Zeilen einschreiben.

IM_PM_in_Hum1 = false;
"IM_PM_in_Hum1" addPublicVariableEventHandler {IM moveInCargo Hum1;PM moveInCargo Hum1;IM_PM_in_Hum1 = false};


In dein auszulösendes Skript schreibst du dann die Zeilen:

IM_PM_in_Hum1 = true;
publicVariable "IM_PM_in_Hum1";
sleep 0.1;
IM moveInCargo Hum1;
PM moveInCargo Hum1;
IM_PM_in_Hum1 = false;

Dann werden die beiden Units in den Hum1 gesetzt, egal wer die Kontrolle über sie hat. Die drei letzten Zeilen sind notwendig, falls der Client, der das Skript startet, selbst die Kontrolle hätte.

Dadurch, dass die Variable IM_PM_in_Hum1 gleich wieder zurückgesetzt wird, ist der Befehl zum Reinsetzen bliebig wiederholbar.