Surrender/Kapitulieren - Script / Modul
Hallo zusammen,
ich würde für eine Mission gerne die möglichkeit haben das sich die Feinde ergeben, das ganze funktioniert soweit auch mit dem Surrender Modul, allerdings ist es noch nicht so ganz das was ich mir da vorgestellt habe und die BIS seite spuckt nicht gerade viel infos aus : Surrender - Bohemia Interactive Community und auch die sachen die ich im BIS forum gefunden habe beschreiben nur Hostage situationen und führen nicht wirklich dazu das sich feinde ergeben. Also muss wohl was eigenes her..... Was ich bisher habe ist noch nicht viel aber funktioniert.... surrender.sqf Code:
// ----------------------------------------------- Derzeit wird die surrender.sqf über ein addaction eintrag in dem jeweiligen Gegner ausgelößt. Code:
this addAction ["go in jail", "surrender\surrender.sqf"] Ich würde gerne in einem Bereich um den Spieler prüfen (ca. 30 m) ob feindliche Einheiten vorhanden sind, wenn ja dann soll diesen der addaction eintrag automatisch angehängt werden. checkenemy.sqf Code:
// ----------------------------------------------- Code:
_suspect_ring setTriggerStatements["this", "this addAction ['go in jail', 'surrender\surrender.sqf' forEach list _suspect_ring]", "hint 'no enemy near'"]; Ziel soll es sein das alle Feindlichen einheiten auf der Karte nachher "verhaftet" werden können nachdem sie sich ergeben haben. Bin für jede hilfe dankbar ! außerdem währen auch noch andere features super , zu dennen ich aber noch nicht gekommen bin. Vielleicht hat aber der ein oder andere neen guten vorschlag wie man da was bewerkstelligen kann... Weitere Ideen: Kapitulieren bei Gruppen dezimierung , wenn also die Gruppe mit 6 man startet und von diesen erledigt man 4, sollten sich die anderen 2 ergeben..evtl. Prozentual , wenn 70 % der gruppe ausgelöscht sind ergiebt sich der rest der gruppe.... mir schwirren auch noch weitere ideen im kopf rum , aber das soll erstmal reichen.... denke mal man kann da noch eine menge machen :rolleyes: |
Ich glaube Dein Problem liegt darin, dass Du eine lokale Variable (_suspect_ring) für den Trigger nutzt, den Du später mit list _suspect_ring abfragst. Da verlangt ArmA normalerweise nach einer globalen Variable...
Ich kann mich aber irren... :komisch: |
Zitat:
Irgend eine idee wie ich das Problem dann lösen kann ?! Irgendwie verstehe ich nicht so ganz was du meinst , wenn arma da eine globale variable will ?!? sie hat doch eine ... ;) die _suspect_ring ?!?! ich bin verwirrt , vielleicht hab ich auch heut schon zu lange auf den code geschaut :oh: |
Schau Dir HIER mal den Unterschied einer lokalen und einer globalen Variable an... ;)
Ich denke dann kommst Du drauf... ob das allerdings Dein Problem behebt, vermag ich nicht zu beurteilen... |
Zitat:
Ich sag doch ich bin heute schon ein wenig verwirrt .... habs verstanden :komisch: dennoch , ich habe es mit globalen variablen probiert ..... aber wie du schon vermutet hast ändert das nichts an meinem problem. :sauer: Code:
// ----------------------------------------------- Ist das zuweisen des addaction eintrags überhaupt richtig ?! :oh: EDIT: Mal nee andere frage , wie erfasse ich alle feindlichen gruppen auf der karte , erfasse die jeweilige gruppengröße und erfasse die dann um sie weiter zu verwenden ? |
Zitat:
Code:
suspect_ring setTriggerStatements["this", "_x addAction ['go in jail', 'surrender\surrender.sqf' forEach list suspect_ring]", "hint 'no enemys near'"]; Das könnte erstmal helfen: allGroups count |
ein bisschen viel "erfassen" in dem satz ....
Ahh selbst der deutschen sprache bin ich nicht mehr mächtig. Ich wollte halt wissen wie ich alle feindlichen gruppen erfassen kann, um dann die gruppengröße der einzelnen gruppen weiter zu verwenden. Wie in meiner idee oben , wenn 70% einer gruppe ausgelöscht sind soll sich der rest der Gruppe ergeben. Aber ich glaube du hast mich schon verstanden , die links führen aufjedenfall zu nützlichen inhalten :ugly: Danke schonmal für die geleistete Hilfe, werd meine arbeit für heute aber niederlegen ... Weitere Tipps sind natürlich erwünscht ! :oh: |
Mit dieser Abfrage solltest du automatisch "Zugriff" auf alle fliehenden Feinde im Umkreis von 30m zum Spieler haben.
Code:
while {true} do |
Zitat:
Klasse danke .... ich glaube das bringt mich schon ein ganzes stück weiter , werds morgen gleich mal austesten ..... |
Zitat:
Wie dem auch sei , es scheint irgendwie nicht zu funktionieren. Habe das script in einen addaction eintrag an den spieler gekoppelt, damit ich es zu testzwecken von dort starten kann. Um zu überprüfen ob es geht habe ich dann ein hint text eingetragen.... leider tut sich aber nichts. Code:
hint "start surr"; |
Dann flieht der 3. vermutlich noch nicht, oder du bist zu weit von ihm entfernt. 30 Meter sind sehr gering, auch schießt er wahrscheinlich noch auf dich.
Zum Ende darfst du nicht kommen, weil es sich um eine "Endlosschleife" handelt, die erst mit Missionsende beendet wird. Zum Testen erhöhe die Reichweite auf 1000 und lasse dir mit der Abfrage einmal alle Fliehenden anzeigen: Code:
hint "start surr"; Zum Testen kannst du die Feinde gleich auf "Fliehend" setzen. Gib in die Initzeile der Soldaten ein: removeAllWeapons this; this allowFleeing 1 Edit: Zwischen ... _x und Player ... muss ein Beistrich stehen,kein Strichpunkt! player groupChat format["%1 Feind? %2",_x , player countEnemy[_x]==1]; |
Klasse funktioniert soweit alles !
Danke ! Weißt du evtl. auch wie ich die Feinde erfassen kann die sich ergeben habe ?! also nicht gerade weglaufen, sondern schon die arme über den kopf nehmen. Man bräuchte dann ja nur "fleeing" mit ... ?! ersetzen um diese zu erfassen. |
So erhältst du die Kontrolle über die feindliche KI und kannst sie mit einer Funktionstaste ansprechen und wie üblich Befehle geben.
Code:
while {true} do ArmA 2: Actions - Bohemia Interactive Community Sonstige Befehle findest du hier: Category:Scripting Commands ArmA2 - Bohemia Interactive Community |
super , danke .... :D made my day
nee idee warum ich kein addaction eintrag an x hängen kann ?! Code:
while {true} do |
Lass halt die eckigen Klammern weg... wo ihr euch sowas auch immer herholt?!
:confused: |
Zitat:
Danke das hat aufjedenfall dazu geführt das die animation ausgeführt wird. allerdings leider kein erfolg bei dem Addaction eintrag. Bin mir auch nicht sicher ob das überhaupt so geht, müssten sich dann nicht die addaction einträge dupplizieren ?! Mit der Animation ansich gibt es auch noch probleme..... sie nehmen die hände hoch, allerdings dann auch gleich wieder runter .... und dann wieder hoch, da sie die animation ja immerwieder ausführen. habe also versucht per animationState die animation von _x aus zu lesen und das in eine if schleife zu legen , aber ich hab bestimmt wieder irgendwelche formatierungsfehler verbaut.Habs irgendwie nicht zum laufen bekommen. Code:
die derzeit funktionierende varriante .... leider ohne addaction... Code:
while {true} do |
also die formatierungsfehler sind mal behoben worden aber testen darfst du alleine. :)
Code:
while {true} do { |
Wenn der Spieler die KI unter seiner Kontrolle hat, dann lässt die KI die Hände nicht oben. Gibt man den Befehl in eine Dauerschleife, dann ist die KI blockiert.
Blockieren kann man die KI einfacher mit: KI Hände über den Kopf und bewegungslos: Name switchMove "AmovPercMstpSsurWnonDnon"; Name disableAI "ANIM" Wenn man der KI wieder Befehle geben will, dann muss die Blockade aufgehoben werden: Name enableAI "ANIM" Manche Befehle verlangen, dass auch bei nur einem Parameter das in einem Array erfolgt. Wie z.B. bei [_x] joinSilent group player. Die richtige Syntax muss man sich immer in der Beschreibung ansehen. |
@Psycho
Dank dir , es funktioniert. Ich musste die wiederholungszeit der schleife noch runtersetzen, da er sonst einige zeit braucht um die animation im richtigen moment zu erfassen. Auch der addaction eintrag taucht unterdessen auf,allerdings nur bei toten einheiten ??? :komisch:. Code:
while {true} do { Hatte nun auch schon bisschen gelesen und man kann ja scheinbar irgendwie die id des actioneintrags erfassen und dann wenn diese schon vorhanden ist den eintrag nicht nochmal eintragen lassen. Allerdings sind meine versuche kläglich gescheitert. lt. Wiki : Zitat:
Sollte das script jemals funktionieren ..... werdet ihr aufjedenfall in den credits erwähnt :angel: |
Mit der ID wirst Du nicht weit kommen, weil jeder neuer AddAction-Eintrag auch eine neue ID bekommt.
Vielmehr könntest Du mit zB _x setVariable ["ARRESTED", true, true]; einen Gefangenen markieren und Deine Bedingung erweitern, in dem Du if (_animi == "AmovPercMstpSsurWnonDnon" AND not (_x getVariable "ARRESTED")) then { hinzufügst. :rolleyes: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 Uhr. |
Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias