Einzelnen Beitrag anzeigen
Alt 16.09.2014, 12:33   #8 (permalink)
Vienna
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Ich weiß nicht wie du deine Version testest. Wenn du dabei nur die Spielfigur wechselst, dann wird beim Übernehmen des Laptops vermutlich die Ablegen-Aktion nicht gelöscht. Das müsste mit einem zweiten Spieler getestet werden. Vielleicht klappt es, falls du es allein testest, wenn bei waitUntil das sleep 0.5 entfernt wird.


Eine neue Version meines Skripts. Bei dieser sollte das Objekt dem tragenden Spieler abgenommen werden können.

Es wird dabei auch der Befehl attachedObjects verwendet. Mit diesem Befehl kann festgestellt werden ob der Spieler einen Laptop trägt.

Es werden dabei ein offener und ein geschlossener Laptop im Editor erstellt. Der geschlossene Laptop ist beim Spielstart im Abseits aufzustellen. Angebunden wird nur der geschlossene Laptop. Der offene wird dann im Spiel ins Abseits gestellt. Die Übergabe der Laptop-Namen an das Skript steuert diesen Vorgang.

Die Namen der Laptops und die Einträge der Aktionen in deren Initzeile sind im Kopf des Skripts ersichtlich.

"Laptop1Attach_v2.sqf"
Code:
// Skript: "Laptop1Attach_v2.sqf", zum Aufnehmen und Ablegen eines eines Laptops. [Vienna 16.08.2014]
// Verwendet wird dabei ein offener Laptop mit Namen: Laptop_offen
//            und ein geschlossener Laptop mit Namen: Laptop_zu
// MP-tauglich. Läuft erst auf Arma3 ab V1.14, wegen Befehl attachedTo und attachedObjects! 
//
// Laptops im Editor erstellen und folgende Aktion die Initzeile
// a) des offenen Laptops kopieren:
// this addAction["---> Laptop aufnehmen","Laptop1Attach_v2.sqf",[Laptop_zu,Laptop_offen,true], 1,true,false];
// b) des geschlossenen Laptops kopieren:
// this addAction["---> Laptop aufnehmen","Laptop1Attach_v2.sqf",[Laptop_zu,Laptop_zu,   true], 1,true,false];

private ["_laptop","_laptop_x","_aufnehmen","_aktionID"];

_laptop    = (_this select 3)select 0;//geschlossener Laptop (nur dieser wird aufgenommen)
_laptop_x  = (_this select 3)select 1;//offener Laptop
_aufnehmen = (_this select 3)select 2;//true = aufnehmen, false = ablegen 

//Globale Variable erstellen. Status: Laptop aufgenommen = true, sonst false
if (isNil "Laptop1attached") then {Laptop1attached = false};

if (_aufnehmen) then //Aktionswahl aufnehmen
 {
  //Skript beenden wenn Spieler einen Laptop bereits aufgenommen hat!
  if (count attachedObjects player > 0) exitwith {player groupChat "---> Ich trage bereits einen Laptop!"};
  //offenen Laptop ins Abseits stellen.(Aufgenommen wird nur der geschlossene Laptop!)
  If (_laptop != _laptop_x) then {_laptop_x setPos [0,0]};
  //Laptop aufnehmen
  _laptop attachTo [Player, [-0.25, -0.04, 0], "pelvis"];
  _laptop setVectorDirAndUp [[0.1,1,0],[-1,0,0.2]];
  player groupChat "---> Der Laptop wurde aufgenommen!";
  Laptop1attached = true;
  //Aktion zum Ablegen des Laptop dem Spieler hinzufügen
  _aktionID = player addAction["---> Laptop ablegen",  "Laptop1Attach_v2.sqf",[_laptop,_laptop,false],1,false,true];
  //Skript wartet bis Spieler tot oder er kein Objekt mehr angeheftet hat
  waitUntil {sleep 0.5; !alive player or !Laptop1attached or count attachedObjects player == 0};
  //Laptop ablegen
  if (count attachedObjects player > 0) then {detach _laptop};
  Laptop1attached = false;
  player removeAction _aktionID;
  player groupChat "---> Der Laptop wurde abgelegt!"
 }
else  //Aktionswahl ablegen
 {
  if (Laptop1attached)
  then {Laptop1attached = false}
  else {player groupChat "---> Ich habe keinen Laptop zum Ablegen!"}
 }
//Skript Ende
Beim Aufrufen den neuen Skriptnamen beachten! Mangels Arma3 konnte ich das Skript nicht testen.
Vienna ist offline