Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 06.07.2016, 10:09   #1 (permalink)
Newbie
 
Benutzerbild von Doke
 
Registriert seit: 31.10.2015
Beiträge: 9
Icon5 KI Einheiten Feuerkampf simulieren

Hi,
wie kann ich KI Einheiten einen Feuerkampf simulieren lassen? Will die Position als Spieler mit einem Jet angreifen, aber will es cooler aussehen lassen. Am Boden sind 1 Ind Squad und 1 Blu Squad die sich gegenseitig bekämpfen sollen, aber ohne zu sterben. Sodass man aus der Luft sieht, das ein Feuerkampf stattfindet.

Wie mach ich das?
Doke ist offline   Mit Zitat antworten
Alt 06.07.2016, 15:27   #2 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Wolkenbeisser
 
Registriert seit: 05.11.2010
Ort: Schweiz
Beiträge: 297
Standard

EINE Möglichkeit bestünde darin, in die Init-Zeile jedes Bodensoldaten "this allowDamage false" einzufügen (ohne die Gänsefüsschen).
Wolkenbeisser ist offline   Mit Zitat antworten
Alt 07.07.2016, 20:59   #3 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Oder mit doFire, dann schießen die einfach
__________________
Bewegende Momente bei ArmA 3
Drunken Officer ist offline   Mit Zitat antworten
Alt 07.07.2016, 22:59   #4 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

SetDamage False bedeutet, dass der Player auch nicht die KI töten kann.

Das kann man aber trotzdem mit Event Handlern abfangen.

Hier, habe ich dir mit Kommentaren für jeden einzelnen Schritt gebastelt, bei Fragen hier einfach wieder was posten:

Code:
_aiUnits = []; /// Define a list (Array) 
{
    if (!isPlayer _x) then { /// If _x (counter, part of foreach loop) is not player

          _aiUnits pushback _x; /// add _x to _aiUnits list. We need this array later.
          
      };
} forEach allUnits;  /// For each units which has been placed on the map

{
       _x addEventHandler ["HandleDamage",  /// Add HandleDamage Event Handler to all AI units which we have assigned in _aiUnits
        { 
            _unit = _this select 0;    /// _unit is the same as _this select 0 (_this select 0 = unit: Object - Object the event handler is assigned to. Source = https://community.bistudio.com/wiki/Arma_3:_Event_Handlers#HandleDamage)
            _shooter = _this select 3, /// this select 3 is the source which caused the damage, so we call it _shooter
            
            if (_shooter isEqualTo player) then {        /// here we check if the shooter is equal to the actual player
        
                                                        /// I did it this way, so you can assign a command to what should happen when player hit an AI 
            }
            else {

                _unit setDamage 0;                        /// If AI hits another AI we set the damage to 0 which means the unit is fully "repaired"
                
            }
        }
    ];
} forEach _aiUnits;                                        /// Here we have a forEach loop. Foreach _aiUnits do this.

Jetzt bist du in der Lage die KI zutöten, diese aber sich selbst nicht.

Möchtest du das alle Einheiten sich nicht killen können, einfach { _x allowDamage false;} foreach allUnits eingeben und fertig. So brauchst du es nicht in jeder einzelnen Zeile angeben, falls du Gruppen platziert hast.

PS:
Falls nötig die Beschreibung.

Das Script wird folgendermaßen deployed:


In deinem Missionsordner legst du eine SQF Datei an (neues Textdokument -> speichern unter -> alle Dateitypen auswählen -> script.sqf

Dann, irgendwo im Spiel (Init einer Einheit, Auslöser oder in der Console (ingame Esc drücken)), und
"_nul = [] execVM "script.sqf " eingeben / einfügen. Somit wird das Script, welches in deinem Missionsordner ist, ausgeführt!

Geändert von JSR (07.07.2016 um 23:35 Uhr).
JSR ist offline   Mit Zitat antworten
Alt 08.07.2016, 07:57   #5 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 32
Beiträge: 1.732
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Es gibt unter Effekten ein Modul was einen Feuerkampf simuliert. Erzeugt einfach ein paar Tracer die durch die Luft rauschen.
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 08.07.2016, 08:48   #6 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

So wie ich es verstanden habe, will er aber die KI auch angreifen können. Zitat: "Will die Position mit einem Jet angreifen".
Deswegen bringt es nichts, wenn ein paar Tracer durch die Luft fliegen, geschweige denn, dass man in der Init der KI "AllowDamage false" eingibt, da sie dann unsterblich ist, egal wer sie trifft.
JSR ist offline   Mit Zitat antworten
Alt 08.07.2016, 11:17   #7 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Doch, er kann die KI + das Modul setzen. Dann hat er Tracer und eine angreifbare Einheit
__________________
Bewegende Momente bei ArmA 3
Drunken Officer ist offline   Mit Zitat antworten
Alt 08.07.2016, 12:16   #8 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 32
Beiträge: 1.732
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Jop. Und das Modul kann er löschen wenn seine Gegner tot sind oder wann auch immer. Geht alles mit nem Trigger bzw. Modulen - nix scripten.
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 08.07.2016, 12:38   #9 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

Laut Pfandgiraffe erzeugt es aber nur künstlich Tracer in der Luft und simuliert somit auch keinen Firefight, sondern nur den Effekt. Bedeutet, er kann die KI placen, das Module auch aber die KI wird sich immer noch gegenseitig angreifen und sich töten.
Mit AllowDamage false kann sie sich nicht dabei töten, richtig, aber der Spieler die KI auch nicht.
PS: Und es geht ja grade dadrum, dass der Spieler die KI töten kann.

Mit dem Script kann er einfach die beiden Gruppen platzieren, diese bekämpfen sich auf ewig, bis der Spieler eingreift und sie killt. Das Module kann, muss aber nicht platziert werden.
Außerdem schiesst der Effekt die Tracer auch einfach nur wahllos durch die Luft (richtung oben) aber kann mich nicht mehr an die Parameter erinnern. Muss später mal gucken. Vielleicht gibt es noch ein Parameter, welches die Richtung von West nach Ost oder so optionalisiert.

Aber wieder, ohne disableAI wird das so oder so nichts.

Geändert von JSR (08.07.2016 um 12:50 Uhr).
JSR ist offline   Mit Zitat antworten
Alt 08.07.2016, 18:27   #10 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 32
Beiträge: 1.732
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Naja wenn du schon auf dem Script bestehst dann habe ich es aber mal so umgeschrieben das es auch funktioniert. Der damage EH wird nur dort gefeuert wo die KI's lokal sind. Also i.d.r. auf dem Server. Der Server wird der Abfrage "blabla isEqualTo player" aber nicht so viel anfangen können.
Außerdem gibt dein EH nichts zurück. Das bedeutet die Einheit bleibt immer unverwundbar.

Code:
if (!isServer) exitWith {};

private _aiUnits = [];
   {
	if (!isPlayer _x) then {
        _aiUnits pushback _x;
    };
    true
} count allUnits;

{
    _x addEventHandler ["HandleDamage",
        {
            _unit = _this select 0;
	    _damage = _this select 2;
            _shooter = _this select 3;
            
            _return = if (isPlayer _shooter) then {
		0
            } else {
                _damage
            };
	   _return
        }
    ];
    true
} count _aiUnits;

Und noch mehrere Syntaxfehler behoben.


Grüße
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___

Geändert von Pfandgiraffe (08.07.2016 um 18:30 Uhr).
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 08.07.2016, 19:34   #11 (permalink)
Newbie
 
Registriert seit: 08.09.2010
Beiträge: 40
Standard

{_x setSkill ["aimingAccuracy",0.01];nil} count allUnits;
wäre auch ne Möglichkeit...
lucullus ist offline   Mit Zitat antworten
Alt 08.07.2016, 20:01   #12 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 32
Beiträge: 1.732
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Dann schießen sie bestimmt so derbe in die Luft das man wieder das Tracer Modul verwenden kann.
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 08.07.2016, 20:41   #13 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

Also dein Script funktioniert bei mir zum Beispiel gar nicht. Die Einheiten beschiessen sich und fallen tot um.

Mein Script funktioniert bei mir wiederrum schon.

Hast du meinen Script überhaupt ausgetestet?

PS: Kann nur nichts zum Multiplayer sagen, da ich noch nie in Arma etwas für Multiplayer gescriptet habe. Weiß also nicht wirklich, worauf es da ankommt. Klang mir aber auch eher nach einem Singleplayer versuch und dort lässt sich der Script bei mir problemlos ausführen und erfüllt seinen Zweck.

Syntaxfehler?

Geändert von JSR (08.07.2016 um 20:47 Uhr).
JSR ist offline   Mit Zitat antworten
Alt 08.07.2016, 20:47   #14 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 32
Beiträge: 1.732
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Dein Script funktioniert weil du es bei dir lokal testest.
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 08.07.2016, 20:50   #15 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

Wie findet man denn überhaupt heraus, ob es auch online funktionieren würde?

http://killzonekid.com/arma-scriptin...player-coding/


So gesehen muss man doch bei meinem Script nur if (!isServer) exitWith {}; eingeben und fertig. Dann erfüllt es den selben Zweck.

Geändert von JSR (08.07.2016 um 23:00 Uhr).
JSR ist offline   Mit Zitat antworten
Alt 09.07.2016, 09:23   #16 (permalink)
Newbie
 
Registriert seit: 08.09.2010
Beiträge: 40
Standard

!(isServer) und !(isDedicated) sind zwei Paar Schuhe.
Bei !(isServer) ist auch der ServerClient raus.

Du kannst auf deinen Rechner den Arma3Server starten und dich mit dem Arma3 Spiel über LAN als Client einwählen.
lucullus ist offline   Mit Zitat antworten
Alt 09.07.2016, 16:56   #17 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

Ist glaube ich das gleiche, als wenn ich das Spiel normal starte und dann unter Multiplayer ne LAN Session aufmache, oder?
JSR ist offline   Mit Zitat antworten
Alt 09.07.2016, 17:39   #18 (permalink)
Newbie
 
Registriert seit: 08.09.2010
Beiträge: 40
Standard

Nein, natürlich nicht, dann bist du der ServerClient.
Bedeutet Server und Client gleichzeitig, oder besser gesagt (player && server).
Da kannste keine Lokalitäten austesten, da funktioniert immer alles.
lucullus ist offline   Mit Zitat antworten
Alt 09.07.2016, 18:07   #19 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

Ok verstehe. Werde dann mal demnächst mehr damit rum testen!
JSR ist offline   Mit Zitat antworten
Alt 13.07.2016, 16:56   #20 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

Pfandgiraffe, du hast gesagt, mein EventHandler hat kein Return.
Laut Wiki:
https://community.bistudio.com/wiki/...s#HandleDamage

ist auch der Code der eigentliche Return. Das, was als Code dort steht, wird also ausgeführt, wenn der EventHandler getriggered wurde. Wofür sollte ich dann noch ein _return brauchen?

Syntax: object addEventHandler [type, command]

Auch das true macht für mich noch keinen Sinn. Bezogen auf setVariable? Dann fehlt aber das Command, setVariable.

Geändert von JSR (13.07.2016 um 17:00 Uhr).
JSR ist offline   Mit Zitat antworten
Antwort


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Einheiten aus dem Editor fehlen im Dedi.-Modus Drunken Officer Editing & Scripting 0 23.08.2014 00:07
T8 Units - Einheiten Spawn Script T-800a Editing & Scripting 2 07.03.2014 20:46
Einheiten nach Tod/Zerstörung löschen Togo Editing & Scripting 15 27.11.2012 07:28
Einheiten in Gruppe löschen Brubaker Editing 6 26.05.2011 17:44
Heal/Repair Script / Einheiten in einem Radius zufällig generieren lassen Noobfire Editing & Scripting 8 06.08.2010 15:22


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