23.09.2011, 18:33 | #1 (permalink) |
Registriert seit: 22.05.2008
Beiträge: 552
|
bestimmte einheiten feindlich machen
hi, ich bastel gerade eine MP mission, es soll ne PVP missi werden und die civs, sobald sie ne waffe in der hand haben von West KI's als feind erkannt werden. ich weiß das man dabei jede waffe abfragen muss was etwas umständlich is, aber mein gott so ist es halt.
mein problem ist, wie mache ich einzelne bestimmte einheiten feindlich?? ich will ja nicht die ganzen civ KI's feindlich machen^^ achja und da ich keine ahnung vom scripten habe mache ich das ganze mit auslösern^^ dabei kann ich so wie's aussieht aber nur ganze seiten miteinander verfeinden. is wohl ziemlich umständlich so oder? aber ich kanns eben nich anderst ... zu der mission, es soll eine sehr dynamische terroristen vs US armee werden, wobei ich das zivilisten modul benutze und ein paar spielbare civs die dann den terroristen part übernehmen. auf der ganzen map sind 5 ammo caches verteilt die mit einer gewissen warscheinlichkeit spawnen. dort bekommen die terrors ihre waffen her (ja sie spawnen unbewaffnet). als map habe ich zargabad gewählt. schöne große map, aber nicht allzu groß, und eine relativ große stadt^^ habe schon in arma 1 versucht sowas auf die beine zu stellen (mit der avgani map) aber leider erfolglos wegen zeitmangel... und vor allem zu wenig ahnung MFG |
23.09.2011, 19:12 | #2 (permalink) |
Registriert seit: 20.05.2009
Beiträge: 605
|
das mit den feindlichen Civs wurde hier schonmal behandelt .... vielleicht hift es ja weiter ...
Zivilisten schießen auf Soldaten (und umgekehrt) |
23.09.2011, 19:30 | #3 (permalink) |
Registriert seit: 22.05.2008
Beiträge: 552
|
ohhh ok... also wenn ich das richtig verstanden habe gibt es die möglichkeit die spielbaren civs in meiner mission mit einer opfor einheit (mit anwesenheit 0) in die gruppe zu setzen, dann setcaptive true und sobald einheit0815 waffe xy in die hand nimmt wird setcaptive false gesetzt richtig? =)
ohje das gibt dann wieder einige auslöser auf die map^^ |
23.09.2011, 19:41 | #4 (permalink) |
Registriert seit: 22.05.2008
Beiträge: 552
|
juhuuu es funzt!! hab in den auslöser bei aktivierung: Name1 setcaptive false; und bei deaktivierung: Name1 setcaptive true; reingeschrieben.
das heißt sobald der civ die waffe weglegt ist er auch wieder freundlich. so jetzt muss ich nur noch die ganzen anderen civs und die ganzen waffenmöglichkeiten hinzufügen^^ //edit: ich glaub ich frage nicht mehr die waffe ab, sondern einfach nur allgemeint nach munition, weil wer ne waffe hat hat auch muni, im normalfall^^ bei der waffe müsste ich jede einzelne waffe abfragen. //edit2: ok die möglichkeit ist schlecht, da die civs schon als feind erkannt werden wenn sie nur n medipack mit sich rumtragen^^ //edit3: hab jetzt eine sehr gute lösung gefunden, auslöser platzieren, bedingung: (primaryweapon NAME != ""); bei akt.: NAME setcaptive false; (optional) bei deakt.: NAME setcaptive true; Geändert von Virility92 (23.09.2011 um 21:15 Uhr). |
25.09.2011, 12:57 | #5 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Du solltest aber auch die secondaryWeapon abfragen, denn sonst kann ein Zivilist eine Pistole oder Raketenwerfer tragen ohne als Feind erkannt zu werden.
Rucksäcke müsstest du dann aber bei dieser Abfrage ausschließen, da diese auch als secondaryWeapon gehandhabt werden. ^^
__________________
|
25.09.2011, 14:04 | #6 (permalink) |
Registriert seit: 01.06.2009
Beiträge: 103
|
Der Befehl Code:
secondaryWeapon unit Pistolen wären quasi die dritte potenzielle Waffe, welche aber nicht ganz so einfach wie die primäre und sekundäre Waffe abgefragt werden können. Am sinnvollsten ist es dafür die Waffen in der cfgWeapons nach dem passenden "type" (= 2 für Waffen auf dem "Pistolen- Slot") abzufragen. Ruchsäcke müssten mit Code:
unitBackPack unit |
26.09.2011, 00:11 | #7 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Na dann hab ich mich vertan, mein Fehler.
Habe schon lange nichts mehr für ArmA gemacht und hatte es falsch in Erinnerung. Trotzdem sollte Virility92 den Befehl benutzen, um auf Raketenwerfer zu überprüfen.
__________________
|
29.09.2011, 20:53 | #8 (permalink) |
Registriert seit: 22.05.2008
Beiträge: 552
|
naja ok, das mit den rucksäcken ist erstmal egal wenn die als feindlich erkannt werden.
um primaryweapon auch noch abzufragen muss ich noch einmal für jeden spielbaren civ nen auslöser machen oder was?? und wie genau muss ich das für die pistolen schreiben? blick da nich so ganz durch... kannst du mir vielleicht ein beispiel mit der M9 schreiben? |
29.09.2011, 23:13 | #9 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Wenn du wissen willst ob eine Einheit bewaffnet ist, dann frage die Magazine oder Waffen ab:
Für Magazine: count magazines Einheit > 0 Zum Testen der gesamten Ausrüstung erstelle einen Auslöser mit folgender Ausgabe: Code:
hint format["Waffen-Anzahl: %1:\n%2\n\nMagazine-Anzahl: %3\n%4",count weapons player, weapons player, count magazines player, magazines player] Magazinabfrage sollte aber reichen, weil ein Zivilist oder Gefangener braucht z.B. keine Rauchgranate. Eine Einheit entwaffnen geht mit: removeAllWeapons Einheit Ausrüstung wie die Uhr ist davon nicht betroffen. |
30.09.2011, 18:00 | #10 (permalink) |
Registriert seit: 22.05.2008
Beiträge: 552
|
das blöde ist, wenn ich die magazine abfrage zählen auch die verbandpäckchen dazu, die jeder von ACE standartmäßig hat.
dann mach ich es besser per script... aber ich hab echt kein plan vom scripten habe mal im editing guide nachgeschaut um mal einen ansatz zu bekommen. Code:
#Start; If(count weapons T1 > 0 \NVGoogles, ItemGPS, ItemMap, ItemCompass, ItemWatch, Binocular)Then{T1 setcaptive false} Else{T1 setcaptive true;exit}; goto “Start”; T1 ist dabei einer der spielbaren civs (insgesamt 21 davon). |
30.09.2011, 20:11 | #11 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Dafür ist eine eigene Funktion eine gute Lösung. Diese wird in einem Skript einmalig in eine globale Variable "initialisiert", um sie dann mit call aufzurufen. Die Funktion steht dann im Editor und in anderen Skripts zur Verfügung. Das "Funktions-Skript" muss natürlich vor anderen Skripts einmalig aufgerufen werden.
Die Funktion selbst wird dann so aufgerufen: Unitname call WaffeVorhanden Die Rückgabe der Funktion ist logisch: true oder false Funktion_WaffeVorhanden.sqf Code:
// Funktion für Abfrage ob eine Einheit Waffen hat [Vienna 30.09.2011] // // Aufruf der Funktion : Unit call WaffeVorhanden; // // Rückgabe der Funktion: true/false // // In Variable _a sind erlaubte Gegenstände gelistet. // // Die Auflistung der Gegenstände kann erweitert werden. // Achtung! Trennung durch Beistrich! // Beim letzten Gegenstand kein Beistrich! WaffeVorhanden = { private ["_a","_w"]; _a= [ "ItemGPS", "ItemMap", "ItemCompass", "ItemWatch", "NVGoogles", "ItemRadio", "Binocular" ]; _w=false; {if (NOT(_x in _a)) then {_w=true}} forEach weapons _this; _w } |
01.10.2011, 19:43 | #12 (permalink) |
Registriert seit: 22.05.2008
Beiträge: 552
|
cool danke für die hilfe!
aber irgendwie bin ich echt zu blöd um das gebacken zu kriegen wie soll ich das in einen auslöser reinschreiben?? bei bedingung: zivilist1 waffevorhanden = true und dann kommt: bei akt.: zivilist1 setcaptive false bei deakt.: zivilist1 setcaptive true |
01.10.2011, 21:51 | #13 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Eigene Befehle (Funktionen) sind mit call aufzurufen. Die Gleich-Abfrage besteht in Arma aus zwei ==
Bedingung: zivilist1 call waffevorhanden == true Logische Abfragen gehen auch ohne == true Also nur: Bedingung: zivilist1 call waffevorhanden |
02.10.2011, 12:33 | #14 (permalink) |
Registriert seit: 22.05.2008
Beiträge: 552
|
wenn ich das so eingebe und enter drücke kommt eine fehlermeldung dann hab ich anstatt true einfach 1 eingegeben, dann gings, aber im spiel kam dann der gleiche error^^ ich kann das ja nicht ohne true/false machen, weil die einheit soll ja nur bei true auf setcaptive false gesetzt werden. der auslöser muss ja wissen ob er bei true oder bei false aktiviert werden soll. |
18.04.2012, 22:10 | #17 (permalink) |
Registriert seit: 21.10.2008
Beiträge: 54
|
Hoffe mir kann man helfen.
Ich möchte "waffevorhanden" (---> Panzerfaust) als Bedingung für einen Trigger haben der erst bei Betreten des Triggers ausgelöst wird und mir dann meine Aktion freigibt PHP-Code:
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Einheiten in Gruppe löschen | Brubaker | Editing | 6 | 26.05.2011 17:44 |
Einheiten aus den alternativen Schützenplätzen werfen! | GER_CJ-187 | Editing & Scripting | 7 | 17.11.2010 15:29 |
Einheiten springen gleichzeitig aus Helikopter bei Bodenberührung | ca$hflow | Editing & Scripting | 24 | 25.09.2010 18:41 |
Heal/Repair Script / Einheiten in einem Radius zufällig generieren lassen | Noobfire | Editing & Scripting | 8 | 06.08.2010 15:22 |
Script-Problem: Einheiten löschen | Kampfmöhre | Editing & Scripting | 5 | 31.05.2010 12:37 |