Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 16.05.2013, 12:21   #1 (permalink)
Newbie
 
Registriert seit: 25.04.2013
Beiträge: 27
Icon10 KI Kontrolle

Hi,

in einer Mission möchte ich eine bestimmte KI festnehmen. Ich möchte an diese KI rangehen mit dem Mausrad ein "AddAction" befehl ausführen und diese KI soll dann bei mir, oder einem anderen spieler der den befehl ausgeführt hat, gebunden also in mit ihm in einer Gruppe sein.

Kennt da jemand etwas oder hat eine Idee?
VidosQ ist offline  
Alt 16.05.2013, 20:11   #2 (permalink)
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

Auslöser
Code:
Achse A und B: 0
Aktivierung  : Keiner | Einmal
Bedingung    : player distance NameKI < 5
Bei Akt.     : den folgenden Code reinkopieren

if(isNil "GefangeneKI") then
 {
  [NameKI] join player;
  GefangeneKI = true;
  publicVariable "GefangeneKI"
 }
Der Spieler, welcher sich als erster der KI unter 5 Meter nähert, erhält die Kontrolle über die KI. Die Zuordnung erfolgt durch den Befehl [NameKI] join player;
Vienna ist offline  
Alt 16.05.2013, 20:18   #3 (permalink)
Newbie
 
Registriert seit: 25.04.2013
Beiträge: 27
Standard

gibt es auch sowas mit Addaction befehl, also das ich mit dem mausrad jemanden in die gruppe holen kann?
VidosQ ist offline  
Alt 16.05.2013, 21:07   #4 (permalink)
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

Das erfordert aber ein Skript, mit Namen und Code wie unten angeführt.

In die Initialisierungszeile der zu fangenden KI kopieren:
this addAction["KI gefangen nehmen","Gefangen.sqf",[],1,true,true]

Skript Gefangen.sqf
Code:
if(isNil "GefangeneKI") then
 {
  [_this select 0] join player;
  GefangeneKI = true;
  publicVariable "GefangeneKI"
 }
else
 {
   player GroupChat "Gefangennahme bereits erfolgt!"  
 };
_this select 0 removeAction 0;
Nähert sich ein Spieler der KI, dann wird die Aktion eingeblendet. Die Aktion ist nur beim ersten Aufrufer wirksam. Sie wird nach dem Aufruf beim jeweils aufrufenden Spieler entfernt.
Vienna ist offline  
Alt 16.05.2013, 22:35   #5 (permalink)
Newbie
 
Registriert seit: 25.04.2013
Beiträge: 27
Standard

gott ist das geil, vielen dank!
VidosQ ist offline  
Alt 03.06.2013, 19:49   #6 (permalink)
Newbie
 
Registriert seit: 16.04.2013
Beiträge: 40
Standard

Man könnte es auch so einstellen, dass der Gefangene ab einer bestimmten Reichweite <5,<10 oder was auch immer automatisch der Gruppe joint ohne angesprochen zu werden.
Avatar-X ist offline  
Alt 05.06.2013, 02:20   #7 (permalink)
Newbie
 
Registriert seit: 25.04.2013
Beiträge: 27
Standard

Ja ich bin es wieder

Und wieder komme ich mit einer frage:

Ich habe nun diese zivilperson gefangengebenden. ( wie oben beschrieben mit dem addaction Befehl + Script) aber wie werde ich den wieder los? Ich will ja nicht die ganze zeit mit einem Zivilisten/ gefangen rumlaufen ich will ihn irgendwo hinbringen und da loswerden entweder mit Auslöser oder wieder mit einem extra Script hat da jemand eine Lösung für?

Ja ich weiß wieder so eine dumme frage
VidosQ ist offline  
Alt 05.06.2013, 09:51   #8 (permalink)
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

So wirst du ihn wieder los: [NameGefangener] join grpNull; Diesen Befehl kannst du z.B. in einen Auslöser, der mit dem Gefangenen verbunden ist, eingeben. Beim Betreten durch den Gefangenen wird der Befehl dann ausgeführt.

Informationen zu den Befehlen findest du hier: http://community.bistudio.com/wiki/C...Commands_ArmA2
Vienna ist offline  
Alt 06.06.2013, 00:00   #9 (permalink)
Newbie
 
Registriert seit: 25.04.2013
Beiträge: 27
Standard

Frage, kann ich mit dem Script auch mehrere Personen "Einfangen"? Wie müsste ich das Script verändern. Leider hab ich keine ahnung davon =(
VidosQ ist offline  
Alt 06.06.2013, 09:30   #10 (permalink)
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

Für jede weitere KI kopierst du das Skript. Dabei vergibst du eine "fortlaufende Nummer":

im Skriptnamen,
dreimal im jeweiligen Skript und
einmal im Aktionsaufruf.

Skriptname: Gefangen1.sqf
Code:
if(isNil "GefangeneKI1") then
 {
  [_this select 0] join player;
  GefangeneKI1 = true;
  publicVariable "GefangeneKI1"
 }
else
 {
   player GroupChat "Gefangennahme bereits erfolgt!"  
 };
_this select 0 removeAction 0;
this addAction["KI gefangen nehmen","Gefangen1.sqf",[],1,true,true]

Hier ist die "fortlaufende Nummer" 1 und fett hervorgehoben.
Vienna ist offline  
Alt 07.06.2013, 09:41   #11 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 16.07.2010
Beiträge: 305
Standard

Das geht aber auch mit nur einem Aufruf und ohne 100 Script Dateien:
Code:
/*
Made by Rockhount v1.0
Aufruf: temp = [Player, [KI1, KI2, KI3]] execVM "Gefangen.sqf";
*/
if (!isDedicated) then
{
	_Modus = _this select 0;
	if (_Modus == Player) then
	{
		"KIGefangen" addPublicVariableEventHandler
		{
			_KI = (_this select 1) select 0;
			_ActionID = (_this select 1) select 1;
			_KI removeAction _ActionID;
		};
		_KIs = _this select 1;
		for [{_Index = 0},{_Index < count _KIs},{_Index = _Index + 1}] do
		{
			_Dialog = format["%1 gefangen nehmen", name (_KIs select _Index)];
			(_KIs select _Index) addAction [_Dialog, "Gefangen.sqf"];
		};
	}
	else
	{
		_KI = _Modus;
		_Player = _this select 1;
		_ActionID = _this select 2;
		[_KI] join (group _Player);
		_KI removeAction _ActionID;
		KIGefangen = [_KI, _ActionID];
		publicVariable "KIGefangen";
	};
};
Dieser Code wurde nicht von mir getestet.

Gibt es eine Möglichkeit, womit man den Pfad oder zumindest den Dateinamen des Scripts herausfinden kann?
__________________

Geändert von Rockhount (07.06.2013 um 09:55 Uhr).
Rockhount ist offline  
Alt 07.06.2013, 20:50   #12 (permalink)
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  
Alt 08.06.2013, 16:21   #13 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 16.07.2010
Beiträge: 305
Standard

Zitat von Vienna Beitrag anzeigen

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

Ich bräuchte den Pfad innerhalb des Scripts, nicht außerhalb. Außerdem wäre ich mit exitWith vorsichtig. Laut Doku soll es für das Beenden eines Scripts nicht immer funktionieren.
__________________
Rockhount ist offline  
Alt 09.06.2013, 01:14   #14 (permalink)
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

Du willst in einem Skript nach einer Datei suchen? Da muss dir ja zumindest der Dateiname bekannt sein. So einen Suchen-Befehl habe ich noch nicht gesehen.

Wenn das Dateien aus der eigenen Mission sind, dann nicht in einem Unterordner speichern. So benötigt man kein Pfad-Angabe.
Vienna 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


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