Einzelnen Beitrag anzeigen
Alt 14.09.2014, 00:16   #1 (permalink)
Grollig
Newbie
 
Registriert seit: 28.11.2013
Alter: 49
Beiträge: 10
Standard Nehmbares Objekt an Spieler heften und für andere Spieler nehmbar machen

Moin,

in meiner Coop-Mission (für dedicated Server) sollen die Spieler einen Laptop finden und diesen in die eigene Basis verbringen. Dabei wird der Laptop per addAction über ein Script an den aufhebenden Spieler geheftet (attachTo) und kann durch eine neue addAction von diesem auch wieder abgelegt werden. So ist für die anderen Mitspieler tatsächlich sichtbar, wer den Laptop trägt. Zuletzt fragt ein Trigger ab, ob der Laptop sich in der Basis befindet und ob er dort abgelegt wurde.

Problem:
Der Laptop lässt sich zwar nehmen und beliebig oft wieder ablegen und erneut aufheben, jedoch nur von dem Spieler, der ihn ursprünglich an sich genommen hat. Andere Spieler können den Laptop nicht aufheben oder dem ersten Spieler abnehmen (z.B. wenn der tragende Spieler gefallen ist). Genau das soll aber jederzeit möglich sein.


Mein Aufbau :

1. Objekt im Editor (laptop)

Initzeile:
Code:
this addAction["<t color='#ff1111'>Laptop nehmen</t>",  "scripts\laptop_nehmen.sqf", nil, 6, true, true, "", "alive _target  && ((getPos _target) distance (getPos _this)) <=  2"];
2. laptop_nehmen.sqf:
Code:
private ["_laptop","_activatingPlayer"];

_laptop = _this select 0;
_activatingPlayer = _this select 1;

//Laptop beim Wegnehmen löschen
deleteVehicle _laptop;

//Variable für Triggerabfrage setzen
abgelegt = false; 
publicVariable "abgelegt";

//Neuen Laptop zur Darstellung am Körper des nehmenden Spielers erzeugen
laptop = "Land_Laptop_F" createVehicle (getPos _activatingPlayer);

//Addaction für den neuen Laptop erzeugen
laptop  addAction["<t color='#ff1111'>Laptop nehmen</t>",  "scripts\laptop_nehmen.sqf", nil, 6, true, true, "", "alive _target  && ((getPos _target) distance (getPos _this)) <= 2"];

//Neuen Laptop an den aufhebenden Spieler heften
laptop attachTo [Player, [-0.25, -0.04, 0], "pelvis"];
laptop setVectorDirAndUp [[0.1,1,0],[-1,0,0.2]];

//Aktion 'Laptop ablegen' für aufhebenden Spieler im Actionmenü erzeugen
NewAct  = _activatingPlayer addAction [("<t color=""#CC2900"">" +  ("Laptop ablegen") + "</t>"), "scripts\laptop_ablegen.sqf",  "radio", -1, false, true,"", "_this == _target"];
3. laptop_ablegen.sqf
Code:
_activatingPlayer = _this select 1;
detach laptop;
abgelegt = true; 
publicVariable "abgelegt";
_activatingPlayer removeAction NewAct;
Die Ursache für das Problem scheint ja ganz offensichtlich darin zu liegen, dass der neue addAction Befehl, bzw. dessen Effekt für den Laptop nicht global verfügbar ist. Darum habe ich versucht, dass Problem mit einem Trigger zu lösen:

Trigger Typ: Keine
Aktivierung: Keine - Mehrfach
Bedingung: !abgelegt
Bei Akt.:
Code:
laptop addAction["<t color='#ff1111'>Laptop nehmen</t>", "scripts\laptop_nehmen.sqf", nil, 6, true, true, "", "alive _target && ((getPos _target) distance (getPos _this)) <= 2"];
Das hat aber leider nicht funktioniert. Nun bin ich mit meinem Latein am Ende. Wäre super, wenn da mal jemand von Euch Cracks draufschauen könnte!

Beispielmission im Anhang
Angehängte Dateien
Dateityp: zip FAS-Laptop-Test.Altis.zip (3,3 KB, 40x aufgerufen)
Grollig ist offline