Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 09.08.2013, 22:49   #1 (permalink)
50 Beiträge100 Beiträge
 
Benutzerbild von MagicStyle
 
Registriert seit: 26.09.2012
Beiträge: 120
Icon5 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";
...anstatt player als Objekt angeben damit mein Vorhaben entlich erfolgreich sein wird? Vielleicht kann mir ja jemand helfen

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 23:18 Uhr). Grund: Bild wird nicht angezeigt
MagicStyle ist offline  
Alt 10.08.2013, 01:47   #2 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 02.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
Standard

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
gruß
hoschi
__________________


Moerderhoschi ist offline  
Alt 10.08.2013, 12:20   #3 (permalink)
50 Beiträge100 Beiträge
 
Benutzerbild von MagicStyle
 
Registriert seit: 26.09.2012
Beiträge: 120
Standard

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 habe nicht verstanden weshalb am Ende der ersten Codezeile _b steht? Wozu wird es dort benötigt?

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.
MagicStyle ist offline  
Alt 10.08.2013, 14:56   #4 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 02.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
Standard

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
__________________


Moerderhoschi ist offline  
Alt 10.08.2013, 16:35   #5 (permalink)
50 Beiträge100 Beiträge
 
Benutzerbild von MagicStyle
 
Registriert seit: 26.09.2012
Beiträge: 120
Standard

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;
Leider erscheint nur eine einzige Ausgabe, es wird immernur der Klassenname der Einheit angezeigt die als erstes durch den Auslöser läuft, die anderen aktivieren den Auslöser scheinbar garnicht mehr?
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 16:41 Uhr).
MagicStyle ist offline  
Alt 10.08.2013, 16:59   #6 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 02.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
Standard

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}
somit aendert sich die condition wenn einheiten im trigge sind jede sekunde und der on act part wird immer wieder ausgefuehrt

gruß
hoschi
__________________


Moerderhoschi ist offline  
Alt 10.08.2013, 17:34   #7 (permalink)
50 Beiträge100 Beiträge
 
Benutzerbild von MagicStyle
 
Registriert seit: 26.09.2012
Beiträge: 120
Standard

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 17:39 Uhr).
MagicStyle ist offline  
Alt 10.08.2013, 17:50   #8 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 02.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
Standard

Ah ja, ArmA II alone kennt kein lazy eval. Schreibe statdessen folgendes

Code:
this && (ceil time % 2 != 0)
gruß
hoschi
__________________


Moerderhoschi ist offline  
Alt 10.08.2013, 17:54   #9 (permalink)
50 Beiträge100 Beiträge
 
Benutzerbild von MagicStyle
 
Registriert seit: 26.09.2012
Beiträge: 120
Standard

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.
MagicStyle ist offline  
Alt 10.08.2013, 18:00   #10 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 02.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
Standard

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
__________________


Moerderhoschi ist offline  
Alt 10.08.2013, 18:04   #11 (permalink)
50 Beiträge100 Beiträge
 
Benutzerbild von MagicStyle
 
Registriert seit: 26.09.2012
Beiträge: 120
Icon14 Gelöst

Sehr gut, dann sind nun alle Fragen geklärt. Ich bedanke mich erneut für deine Hilfe!! THX ! ! !

Gruß
M.S.

Geändert von MagicStyle (10.08.2013 um 18:11 Uhr).
MagicStyle ist offline  
 

Stichworte
auslöser, bedingung, class, klasse, object


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
Jeder Fahrzeugklasse eine bestimmte Aktion hinzufügen Eden Editing & Scripting 2 17.03.2013 16:53
Klasse erstellen MagicStyle Editing & Scripting 4 29.09.2012 22:48
Bestimmte Einheit Funk auslösen tigerforce001 Editing 6 20.09.2012 14:39
bestimmte einheiten feindlich machen Virility92 Editing & Scripting 17 19.04.2012 09:10
Fahrzeuge nur bestimmte Personen zuweisen Bowi Editing & Scripting 7 17.10.2010 10:38


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 117 118 119