06.07.2016, 10:09 | #1 (permalink) |
Registriert seit: 31.10.2015
Beiträge: 9
|
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? |
07.07.2016, 20:59 | #3 (permalink) |
Registriert seit: 15.05.2011
Beiträge: 1.109
|
Oder mit doFire, dann schießen die einfach
__________________
Bewegende Momente bei ArmA 3 |
07.07.2016, 22:59 | #4 (permalink) |
Registriert seit: 29.10.2008
Beiträge: 1.192
|
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). |
08.07.2016, 07:57 | #5 (permalink) |
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>>>___ |
|
08.07.2016, 08:48 | #6 (permalink) |
Registriert seit: 29.10.2008
Beiträge: 1.192
|
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. |
08.07.2016, 11:17 | #7 (permalink) |
Registriert seit: 15.05.2011
Beiträge: 1.109
|
Doch, er kann die KI + das Modul setzen. Dann hat er Tracer und eine angreifbare Einheit
__________________
Bewegende Momente bei ArmA 3 |
08.07.2016, 12:16 | #8 (permalink) |
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>>>___ |
|
08.07.2016, 12:38 | #9 (permalink) |
Registriert seit: 29.10.2008
Beiträge: 1.192
|
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). |
08.07.2016, 18:27 | #10 (permalink) |
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). |
|
08.07.2016, 20:01 | #12 (permalink) |
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>>>___ |
|
08.07.2016, 20:41 | #13 (permalink) |
Registriert seit: 29.10.2008
Beiträge: 1.192
|
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). |
08.07.2016, 20:47 | #14 (permalink) |
Dein Script funktioniert weil du es bei dir lokal testest.
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
08.07.2016, 20:50 | #15 (permalink) |
Registriert seit: 29.10.2008
Beiträge: 1.192
|
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). |
13.07.2016, 16:56 | #20 (permalink) |
Registriert seit: 29.10.2008
Beiträge: 1.192
|
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). |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ä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 |