09.08.2013, 21:49 | #1 (permalink) |
Registriert seit: 26.09.2012
Beiträge: 120
|
Bedingung - Nur bestimmte Klasse
Nabend Community,
Ich sitze hier schon seit ner Stunde am selbem Problem und komme keinen Meter weiter. Vielleicht hat der ein oder andere hier Lust mir zu helfen. Wie der Titel schon sagt, versuche ich eine Bedingung zu erstellen, die nur dann wahr wird, wenn eine bestimmte Klasse den Auslöser betritt z.B. "USMC_SOLDIER". Ich habe es auch schon teilweise geschafft, jedoch nur soweit, das die Bedingung nur für mich als Spieler zutrifft. Die KI wird leider nicht berücksichtigt... ich möchte das eine Aktion ausgeführt wird, sobald irgendeine Einheit der Klasse "USMC_SOLDIER" den Auslöser betritt, egal ob KI oder Spieler. Frage: Was muss ich im Code ... Code:
this and typeOf player isKindOf "USMC_SOLDIER"; Danke im Vorraus für jede Hilfe! Gruß M.S. PS: Die KI ist natürlich ebenfalls vom Typ "USMC_SOLDIER". Vielleicht ist jemanden schon aufgefallen das ich im Bild einen Offizier verwendet habe, nur um vorzugreifen, mir ist bewusst das dieser eine andere Klasse hat Vielleicht ist euch auch aufgefallen das im Auslöser rechts im Bild "Obj Nul" steht, das war eine experiment, wurde anscheinend nicht rechtzeitig aktualisiert, sorry. Geändert von MagicStyle (09.08.2013 um 22:18 Uhr). Grund: Bild wird nicht angezeigt |
10.08.2013, 00:47 | #2 (permalink) |
Registriert seit: 01.07.2006
Ort: Kabul
Alter: 39
Beiträge: 2.666
|
Probier mal ob folgendes fuer dich hinhaut.
Code:
Condition: call {_b = false; {if (typeof _x == "USMC_SOLDIER") then {_b = true}} foreach thislist; _b } On Act: {if (typeof _x == "USMC_SOLDIER") then {_x setdamage 1}} foreach thislist hoschi |
10.08.2013, 11:20 | #3 (permalink) |
Registriert seit: 26.09.2012
Beiträge: 120
|
Morgen! Es funktioniert bestens , danke sehr für deine Hilfe
Ich habe aber leider noch einige Fragen zum Quellcode, vielleicht kann mir jemand helfen. Code:
call {_b = false; {if (typeof _x == "USMC_SOLDIER") then {_b = true}} foreach thislist; _b } Ich würde außerdem gerne verstehen was es mit dem "thislist" bei der ForEach Schleife auf sich hat. Anscheinend ist dies eine Liste mit allen Einheiten auf der gesamten Map wenn ich richtig liege? Hoffe das wir diese beiden Fragen auch noch geklärt bekommen. Danke im Vorraus Gruß M.S. |
10.08.2013, 13:56 | #4 (permalink) |
Registriert seit: 01.07.2006
Ort: Kabul
Alter: 39
Beiträge: 2.666
|
call {_b = false; {if (typeof _x == "USMC_SOLDIER") then {_b = true}} foreach thislist; _b }
_b ist eine lokale Variable innherhalb der Funktion {} der am Anfang der boolsche Wert false zugewiesen wird. Ist die Bedingung (typeof _x == "USMC_SOLDIER") wahr so wird die lokale Variable _b auf true gesetzt und am ende der Funktion true zurueckgegeben da die Condition des Trigger einen boolschen Wert erwartet. Thislist ist ein Array der alle zutreffenden Einheiten die sich im Triggerbereich befinden und der eingestellten Seite entsprechen enthaelt. foreach arbeitet einen Array ab der ja durch thislist im Trigger bereitgestellt wird. Mit call {_b = false; {if (typeof _x == "USMC_SOLDIER") then {_b = true}} foreach thislist; _b } wird also zuerst die lokale Variable, nur gueltig in den {}, auf false gesetzt. Dannach wird eine Abfrage aller Einheiten im Triggerbereich, bedingt durch {} foreach thislist, durchgefuehrt. Diese Abfrage die ja also nun fuer jede Einheit im Triggerbereich mit der eingestellten Seite entsprechend durchgefuehrt wird ist also if (typeof _x == "USMC_SOLDIER") then {_b = true} wobei _x hier der Platzhalter fuer das jeweilige Element/Einheit im Array ist. Sollte also mindestens eine Einheit oder mehrere Einheiten im Array Thislist den Typ "USMC_Soldier" haben so wird die lokale Variable _b auf true gesetzt und der Trigger fuehrt anschließend das aus was in On act: steht. {if (typeof _x == "USMC_SOLDIER") then {_x setdamage 1}} foreach thislist Dort wird der Array der durch thislist nocheinmal erstellt wird wieder abgearbeitet und diesmal wird eben nicht eine lokale variable _b auf true gesetzt sondern die Einheiten die dem Typ "USMC_SOLDIER" entsprechen einen Damagewert von 1 gegeben. Dies gilt fuer alle Einheiten im Array mit dem Typ "USMC_SOLDIER" Das ist das was in dem Trigger passiert. Hoffe meine Darstellung der Vorgaenge war fuer dich nachvollziebar. gruß hoschi |
10.08.2013, 15:35 | #5 (permalink) |
Registriert seit: 26.09.2012
Beiträge: 120
|
Hat mir sehr geholfen !! Es freut mich wirklich sehr das du dir die Zeit genommen hast mir zu helfen den Quellcode zu verstehen, vielen Dank
Ich habe gleich mal ein neues kleines Beispiel erstellt um herauszufinden ob ich es jetzt wirklich zu 100% kapiert habe. Für das Beispiel lasse ich eine gesamte Truppe (20 Mann) durch einen Auslöser laufen und möchte das mir bei jedem einzelnem der Klassenname ausgegeben wird. Der Auslöser ist wie folgt konfiguriert: Auslöseart: Mehrfach Aktivierung: Jeder Bedinung: this Bei Aktivierung: Code:
{ player globalChat format["Soldat ist von der Klasse : %1", typeOf _x] } forEach thislist; Liegt es an der Bedinung, oder daran das der Soldat zu diesem Zeitpunkt der einzige in der Liste (bzw. im Array) ist, da er ja der erste ist der den Auslöser betritt ? Tut mir leid dass ich schon wieder damit nerven muss :/ Gruß M.S. Geändert von MagicStyle (10.08.2013 um 15:41 Uhr). |
10.08.2013, 15:59 | #6 (permalink) |
Registriert seit: 01.07.2006
Ort: Kabul
Alter: 39
Beiträge: 2.666
|
Das liegt daran das der Ausloeser nur beim ersten Soldaten der den Trigger betritt ausgeloest wird. Die Bedingung ist this, das bedeutet soblad eine einheit egal von welcher Seite den Trigger betritt ist die Bedingung true und das was in On act: steht wird ausgefuehrt. Erst wenn die Bedingung auf false geht d.h. keine einheiten mehr im trigger sind wird das was in On deact: steht ausgefuehrt. Wenn dann wieder eine Einheit in den Trigger laeuft faengt es wieder von vorne an.
Um dein ziel zu erreichen musst du die condtition abaendern. Probier es mal mit folgendem: Code:
this && {ceil time % 2 != 0} gruß hoschi |
10.08.2013, 16:34 | #7 (permalink) |
Registriert seit: 26.09.2012
Beiträge: 120
|
Ahh, verstehe ! Klingt logisch!
Habe den Code in die Bedinung eingefügt, leider wird jedoch folgendes in einem Pop-Up Fenster ausgegeben: " &&: Typ Jede, erwartet Bool" gruß M.S. Geändert von MagicStyle (10.08.2013 um 16:39 Uhr). |
10.08.2013, 16:54 | #9 (permalink) |
Registriert seit: 26.09.2012
Beiträge: 120
|
Super, jetzt funktioniert es einwandfrei THX
Habe noch eine Frage zum ceil, kannst du mir sagen wozu das %2 ist, wo kann ich mich da informieren? Hat es was mit Moduloberechnung zu tun? PS: Im Bild auf das ich im letzten Post verlinkt habe muss man noch auf "Mehrfach" stellen, hatte ich beim neu erstellen vergessen. |
10.08.2013, 17:00 | #10 (permalink) |
Registriert seit: 01.07.2006
Ort: Kabul
Alter: 39
Beiträge: 2.666
|
Ceil und Floor sind ab und aufrundungsfunktionen. % ist wie Du schon richtig erkannt hast Modulo Arithmetic Operators - Klick auf das ArmA Wiki Bild in meiner Signatur um ins ArmA Wiki zu gelangen oder hier ein direktlink zu allen gueltigen ArmA II befehlen: http://community.bistudio.com/wiki/C...Commands_ArmA2
gruß hoschi |
Stichworte |
auslöser, bedingung, class, klasse, object |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Jeder Fahrzeugklasse eine bestimmte Aktion hinzufügen | Eden | Editing & Scripting | 2 | 17.03.2013 15:53 |
Klasse erstellen | MagicStyle | Editing & Scripting | 4 | 29.09.2012 21:48 |
Bestimmte Einheit Funk auslösen | tigerforce001 | Editing | 6 | 20.09.2012 13:39 |
bestimmte einheiten feindlich machen | Virility92 | Editing & Scripting | 17 | 19.04.2012 08:10 |
Fahrzeuge nur bestimmte Personen zuweisen | Bowi | Editing & Scripting | 7 | 17.10.2010 09:38 |