![]() |
#1 (permalink) |
![]() Registriert seit: 25.04.2013
Beiträge: 27
|
![]()
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? |
![]() |
![]() |
#2 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
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" } |
![]() |
![]() |
#4 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
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; |
![]() |
![]() |
#7 (permalink) |
![]() Registriert seit: 25.04.2013
Beiträge: 27
|
![]()
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 ![]() |
![]() |
![]() |
#8 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
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 |
![]() |
![]() |
#10 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
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; Hier ist die "fortlaufende Nummer" 1 und fett hervorgehoben. |
![]() |
![]() |
#11 (permalink) |
![]() ![]() ![]() Registriert seit: 16.07.2010
Beiträge: 305
|
![]()
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"; }; }; 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). |
![]() |
![]() |
#12 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
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" } //******************************************************************************** |
![]() |
![]() |
#13 (permalink) |
![]() ![]() ![]() Registriert seit: 16.07.2010
Beiträge: 305
|
![]() 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. |
![]() |
![]() |
#14 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
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. |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|