Thema: KI Kontrolle
Einzelnen Beitrag anzeigen
Alt 07.06.2013, 19:50   #12 (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

Bei Aufruf: temp = [Player, [KI1, KI2, KI3]] execVM "Gefangen.sqf"; steht der Pfad in temp.

So schwer wollte ich es mir eigentlich nicht machen. Das Skript mit der Doppelfunktion und dem EventHandler ist natürlich eine bessere Lösung. Allerdings ohne Kommentare nicht leicht zu verstehen.

Ich habe versucht das übersichtlicher zu gestalten:

Code:
//KIs an den Spieler binden. Skript mit Doppelfunktion!! 
//
// 1. Erstellen einer Aktion bei KIs und eines Eventhändlers bei den Spielern
// 2. Wird von der erstellten Aktion verwendet um KI an den Spieler zu binden
//    und die Aktion nach der Anbindung zu entfernen
// 
//Einmaliger Aufruf bei allen Spielern: temp = [[Ki1,Ki2,Ki3]] execVM "Gefangen.sqf";

if (count _this == 1) then //*******Initialisieren von Aktion und EventHandler**** 
 {
  if (isDedicated) exitWith {};
  //Aktion bei den übergebenen KIs hinzufügen 
  for "_i" from 0 to count(_this select 0) do
   {
    (_this select 0)select _i addAction [format["%1 gefangen nehmen!",name((_this select 0)select _i)],"Gefangen.sqf",[],5,true,true]
   };
  //EventHandler erstellen der bei den anderen PCs die Aktion löscht
  // Variable KIGefangen enthält Array mit [KI-Name,AktionID] 
  "KIGefangen" addPublicVariableEventHandler
   {
    (_this select 1) select 0 removeAction ((_this select 1) select 1)
   }
 }
else //*****************************wenn Aufruf durch die Aktion****************** 
 {
  //KI unter Kontrolle des Spielers stellen
  [_this select 0] join group player;
  //Aktion beim Spieler löschen
  _this select 0 removeAction (_this select 2);
  //Aktion über den EventHandler bei den anderen Spielern löschen
  KIGefangen = [_this select 0,_this select 2];
  publicVariable "KIGefangen"
 }
//********************************************************************************
Jetzt sind die Aktionen nicht mehr in die KI direkt einzutragen, das erledigt das Skript. Das Skript ist bei allen Spielern aufzurufen. Entweder in der init.sqf oder über einen Auslöser.
Vienna ist offline