26.09.2011, 08:54 | #1 (permalink) |
Registriert seit: 16.09.2011
Beiträge: 15
|
Respawn einer Gruppe
Hallo alle zusammen,
Ich habe mir eine kleine SQF geschrieben, in der ich eine Gruppe EAST erzeue. In diese Gruppe lasse ich ein paar Gegnerische Einheiten erzeugen die sich immer an eine bestimmte Stelle auf der Karte bewegen. Ich rufe das Script in meiner init.sqf das erste mal so auf: PHP-Code:
Mein Problem ist nun: Ich möchte gern irgendwie sagen, dass das Script wieder aufgerufen wird und eine neue Gruppe erzeugt werden soll, sobald die Gruppe tot ist.... oder sobald der Leader der Gruppe tot ist. Ich weiß gerade nicht, wo und wie ich das einbauen muss. Gruß Mario Geändert von GELight (26.09.2011 um 09:06 Uhr). |
26.09.2011, 09:06 | #2 (permalink) |
hallo,
könntest du mal dein komplettes script hier posten? einfach einfügen und url hier hinterlegen. Pastebin.com - #1 paste tool since 2002! grundsätzlich recht einfach. frage den leader der gruppe in deinem script ab und warte bis er tot ist. (waitUntil {!alive _yourLeader}. anschließend kannst du das script wieder aus sich selbst heraus starten. wäre aber besser du zeigst hier das gesamte script. mfg
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
26.09.2011, 09:39 | #3 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Es wird notwendig sein nicht nur die Größe der Gruppe zu überwachen, sondern auch ihr Verhalten. Wenn z.B. eine Gruppe stark dezimiert ist, dann werden die Soldaten ein Fluchtverhalten zeigen. Überhaupt ist das Verhalten der Gruppe einzustellen. Dazu gibt es verschiedene Befehle.
|
26.09.2011, 09:41 | #4 (permalink) |
Registriert seit: 16.09.2011
Beiträge: 15
|
Respawn
Hi,
Also mein Script habe ich mehr oder weniger aus diesem Post übernommen: Creating Group With Trigger + Add Urban Patrol Script - Armed Assault Info Forums In meiner Datei steht bisher eigentlich nur sowas: PHP-Code:
Wenn ich das richtig verstehe, dann ist das wie ne Art "Listener", der in meinem Fall auf waitUntil {!alive eastGP}; horcht? Ich hatte erst eine if Anweisung im Script aber dann ist mir eingefallen, dass das Script ja grundlegend nur 1x durchlaufen wird und es so nicht gehen kann. Daher war mir nicht klar, wie ich solch einen Listener einbauen kann, der immer wieder gleich nach dem erzeugen der neuen Gruppe auf irgendetwas hört und dann etwas darauf hin wieder auslöst/ausführt. Wie müsste ich das in meinem Fall denn schreiben? Weil diese Zeile hier tut ja noch nichts außer auf etwas warten oder? PHP-Code:
|
26.09.2011, 10:23 | #5 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Wenn du willst, dass die neue Gruppe erst erstellt wird, wenn die komplette alte Gruppe getötet wurde, dann schaut der Befehl so aus:
PHP-Code:
Bedenke aber, dass die Einheiten auch fliehen und sich verstecken können, wodurch es besser wäre, wenn man nicht die komplette Gruppe auslöschen muss, sondern nur die Gruppe auf 2 Soldaten reduzieren muss. Das geht mit diesem Befehl: PHP-Code:
__________________
|
26.09.2011, 10:58 | #7 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Ein waitUntil ist keine if Abfrage, da gibt es keinen then Teil.
Das Skript wird solange pausiert bis die waitUntil Bedingung zutrifft. Also musst du alles weitere einfach unter das waitUntil schreiben. PHP-Code:
Ansonsten könntest du auch deine globale Gruppenvariable (eastGP) zu einer lokalen machen (_eastGP), wenn du nicht auf diese von einem anderen Skript zugreifen musst.
__________________
|
26.09.2011, 12:48 | #9 (permalink) |
hier noch eine kleine ergänzung für den Multiplayer:
1. es wird verhindert dass das script im mp von anderen außer dem server ausgeführt wird mit: Code:
if (isMultiplayer and !isServer) exitWith {}; 3. die übrigen gruppenmitglieder die sich im wald verstecken oder fliehen werden nach 120 sekunden gelöscht Code:
private ["_eastGP"]; if (isMultiplayer and !isServer) exitWith {}; _eastGP = Creategroup EAST; _eastGP createUnit ["SquadLeaderE", getMarkerPos "GrpM", ["GrpM"], 5, "FORM"]; _eastGP createUnit ["SoldierEB", getMarkerPos "GrpM", ["GrpM"], 2, "FORM"]; _eastGP createUnit ["SoldierEB", getMarkerPos "GrpM", ["GrpM"], 2, "FORM"]; _eastGP createUnit ["SoldierEG", getMarkerPos "GrpM", ["GrpM"], 2, "FORM"]; _eastGP createUnit ["SoldierEMG", getMarkerPos "GrpM", ["GrpM"], 2, "FORM"]; _eastGP createUnit ["SoldierEAT", getMarkerPos "GrpM", ["GrpM"], 2, "FORM"]; _eastGP createUnit ["SoldierESniper", getMarkerPos "GrpM", ["GrpM"], 2, "FORM"]; _eastGP move getMarkerPos "zielMarker"; waitUntil{{alive _x} count (units _eastGP) <= 2}; {[] spawn {sleep 120; _x setDammage 1; deleteVehicle _x;}} forEach (units _eastGP); [] execVM "createNewGroup.sqf";
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
27.09.2011, 14:51 | #11 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Wichtig ist auch die Berücksichtigung des Flucht- und Kampfverhaltens der Gruppe. Sowohl beim Start als auch für die Auflösung der Gruppe.
Ich habe das im folgenden Skript zusammen gefasst, wo auch diese Eigenschaften einstellbar sind. Aufgerufen wird das Skript mit zwei Parametern. Dem Aufstellungsort und dem Einsatzort. An der Position des Einsatzortes wird über das Skript ein Wegpunkt erstellt. Nach dem Auflösen der Gruppe werden alle deren Soldaten nach 2 Minuten entfernt, auch die getöteten. Aufrufbeispiel zum Testen in einem Auslöser (Start und Ziel kennzeichnen zwei Marker): temp = [getMarkerPos "GrpM", getMarkerPos "zielMarker"] execVM "createNewGroup.sqf"; createNewGroup.sqf Code:
// Erstellen einer Gruppe mit Verhalten und Wegpunkt // // Parameter: [<Position der Aufstellung>, <Position des Einsatzzieles>] // // Aufrufbeispiel: [getMarkerPos "GrpM", getMarkerPos "zielMarker"] execVM "createNewGroup.sqf"; //Im Mehrspielermodus nur beim Server/Host starten if (isMultiplayer and !isServer) exitWith {}; // Lokale Variable private ["_Position","_Einsatzort","_Fertigkeit","_Verhalten","_SpeedMode","_Formation","_CombatMode","_Flucht","_Gruppe","_SoldatenListe","_temp","_SoldatenDerGruppe"]; //Parameter übernehmen _Erstellungsort = _this select 0; //Position Erstellungsort _Einsatzort = _this select 1; //Position Einsatzort //Fertigkeit eines Soldaten: Novice < 0.25, Rookie >= 0.25 and <= 0.45, Recruit > 0.45 and <= 0.65, Veteran > 0.65 and <= 0.85, Expert > 0.85 _Fertigkeit = 0.5; //Verhalten: sorglos/deckungslos --> "CARELESS","SAFE","AWARE","COMBAT","STEALTH" <-- vorsichtig/Ausnützung jeder Deckung _Verhalten = "AWARE"; //SpeedMode: "LIMITED"(half speed),"NORMAL"(full speed, maintain formation),"FULL"(do not wait for any other units in formation) _SpeedMode = "NORMAL"; //CombatMode: "BLUE"(Never fire),"GREEN"(Hold fire-defend only),"WHITE"(Hold fire,engage at will),"YELLOW"(Fire at will),"RED"(Fire at will,engage at will), _CombatMode = "WHITE"; //Formation: "COLUMN","STAG COLUMN","WEDGE","ECH LEFT","ECH RIGHT","VEE","LINE","FILE","DIAMOND" _Formation = "LINE"; //Fluchtverhalten: 0 = 0%, 1 = 100% _Flucht = 0.5; //Gruppe erstellen _Gruppe = CreateGroup EAST; //Liste der Soldaten _SoldatenListe = [ "RU_Soldier_SL", "RU_Soldier", "RU_Soldier_MG", "RU_Soldier_AT", "RU_Soldier_LAT", "RU_Soldier_GL", "RU_Soldier_Marksman" ]; //Der Gruppe die Soldaten zuweisen und in _SoldatenDerGruppe speichern _SoldatenDerGruppe = []; { _temp = _Gruppe createUnit [_x, _Erstellungsort, [], 0, "FORM"]; _temp setSkill _Fertigkeit; _SoldatenDerGruppe = _SoldatenDerGruppe + [_temp] } forEach _SoldatenListe; //Wegpunkt zum Einsatzort erstellen _temp = _Gruppe addWaypoint [_Einsatzort,0]; [_Gruppe, 0] SetWaypointType "MOVE"; _Gruppe setCurrentWaypoint [_Gruppe, 1]; //Das Verhalten der Gruppe übertragen _Gruppe setBehaviour _Verhalten; _Gruppe setSpeedMode _SpeedMode; _Gruppe setCombatMode _CombatMode; _Gruppe setFormation _Formation; _Gruppe allowFleeing _Flucht; //Gruppe auflösen wenn diese auf 2 oder weniger Soldaten dezimiert ist, bzw. die Gruppe flieht waitUntil{{alive _x} count _SoldatenDerGruppe <= 2 OR {fleeing _x} count units _Gruppe == count units _Gruppe}; //Unterprogramm: Alle Soldaten der Gruppe nach 2 Minuten entfernen [_Gruppe,_SoldatenDerGruppe] spawn { (_this select 0) allowFleeing 1; sleep 120; {deleteVehicle _x} forEach (_this select 1) }; //Gruppe löschen deleteGroup _Gruppe; //Neue Gruppe am selben Ort mit gleichem Ziel erstellen. Wenn so nicht gewünscht, dann die folgende Zeile löschen. [_Erstellungsort, _Einsatzort] execVM "createNewGroup.sqf"; |
27.09.2011, 21:41 | #13 (permalink) |
Registriert seit: 16.09.2011
Beiträge: 15
|
Fehler
Hi Vienna,
Das script erzeugt eine endlosschleife ... er erzeugt zwar ein paar Units aber rasselt das Script hoch und runter ohne zu warten, ob wirklich alle Tot sind etc..... Und es kommt ein Fehler: _temp = _Gruppe createUnit [_x, _Erstellungsort, [], 0, > Error position: <createUnit [_x, _Erstellungsort, [], 0, > Error 0 Elemente angegeben, 3 erwartet File C:\Users\GELight\Documents\ArmA 2\missions\Teufelsschlo%c3%9f%20Defensive.Chernaru s\nwo\lib\nwo_createGroup.sqf, line 55 Zeile 55 ist bei mir das hier: PHP-Code:
Der wartet nicht bei waitUntil..... Ach hier ist mal mein gesamtes Script. So kann man besser drüber sprechen denke ich und du siehst, dass es eigentlich 1:1 deins ist. PHP-Code:
temp = [getMarkerPos "GrpM", getMarkerPos "nwoBase"] execVM "nwo\lib\nwo_createGroup.sqf"; Gruß Mario |
27.09.2011, 22:02 | #14 (permalink) |
Registriert seit: 16.09.2011
Beiträge: 15
|
Fehler
Hier ist noch mal mein aktuelles Script:
PHP-Code:
temp = [getMarkerPos "GrpM", getMarkerPos "nwoBase"] execVM "nwo\lib\nwo_createGroup.sqf"; Und irgendwie machen die Gegner auch nichts. Stehen nur dumm rum und wehren sich nicht. Obwohl ich mittlerweile alles mögliche an Fertigkeiten und Modes zugewiesen habe. Gruß Mario |
27.09.2011, 23:04 | #15 (permalink) |
Hello na ich habe gerade das Script von Vienna getestet also ich muss sagen es läuft problem los!
Du Könnest zum testen mal auch in die Init der US Einheit diesen Code eingeben um sie zu Beowachten! Code:
this setCaptive true; müsstest du die Zeile ändern! Code:
// In dieser Zeile waitUntil{{alive _x} count _SoldatenDerGruppe <= 2 OR {fleeing _x} count units _Gruppe == count units _Gruppe}; // Auf diese Zeile waitUntil{{alive _x} count _SoldatenDerGruppe == 0 OR {fleeing _x} count units _Gruppe == count units _Gruppe}; Platzieren mit einer Bedingung meiner Meinung! Code:
if (bedingungs_name_einfügen) exitwith {}; //Ober dieser Link [_Erstellungsort, _Einsatzort] execVM "createNewGroup.sqf"; über die Playerinit.sqf aufgerufen werden!
__________________
Ghost_AUT Geändert von Ghost_Aut (27.09.2011 um 23:10 Uhr). |
|
28.09.2011, 10:40 | #16 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Wie man in meinem vorherigen Beispiel sieht, steht ein einsamter Ost-Soldat im Hangar. Der ist notwendig, wenn sonst nur West-Einheiten vorhanden sind! Sonst spinnt das Skript.
Das zeigt, dass eine Einheit der Seite im Editor irgendwo vorhanden sein muss, die man mit Skript zu erstellen beabsichtigt. Das gilt auch für manche Flugobjekte usw. In deinem zweiten Skript hast du die Erstellung der Soldaten raus genommen. Das erste Skript habe ich mir nicht angesehen. Hier ein Beispiel für deine verwendeten Ordner und Arma OA. Es sind noch die "Testblöcke" im Skript. Diese bei Bedarf löschen oder deren Code-Zeilen mit // deaktivieren. Auch ist das Skript für die Beobachtung der Einheiten auf der Karte vorhanden. Der einsame Ost-Soldat ist natürlich auch in diesem Beispiel erforderlich. Entferne nicht den Wegpunkt. Ein Wegpunkt funktioniert sicherer als der "move" Befehl. |
28.09.2011, 21:08 | #17 (permalink) |
Registriert seit: 16.09.2011
Beiträge: 15
|
Fehler
Also... das hier ist mein derzeitiges Script.
PHP-Code:
Habe eben einfach die Map sofort beendet, als der Fehler das erste Mal auftrat. Darauf hin stand dann in der arma2OA.rpt Datei das hier: PHP-Code:
EDIT:: Berichtigung...... mein script ruft sich immernoch jede Sekunde immer wieder auf... Gruß Mario Geändert von GELight (28.09.2011 um 21:25 Uhr). |
28.09.2011, 22:02 | #19 (permalink) |
Registriert seit: 16.09.2011
Beiträge: 15
|
Fehler
Ja, der OST Soldat steht in der Map weit weg.
Durch das benutzen der Waypoints statt move scheinen die Brüder auch ihr Ziel in Beschlag zu nehmen. 1. Nur das Script rasselt jede Sekunde wieder durch. Das wäre der noch bestehende Fehler. 2. Ich dachte eigentlich, dass immer, wenn ich dieses Script aufrufe, er mir eine neue Gruppe erzeugt, die wieder auf Ihr ziel zurennt? Ich vermute durch den noch vorhandenen Fehler wird auch das beeinträchtigt, so das er eben nicht immer wieder neue Gruppen erzeugt. Gruß Mario |
28.09.2011, 22:43 | #20 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Du rufst anscheinend das Skript falsch auf. Du übergibst keine korrekte Position.
Gib nach dieser Zeile: hint "Weitere Gegner gesichtet!"; folgende Zeile ein: player groupChat format["Parameter: %1",_this]; sleep 10; Damit machst du die Parameter sichtbar. Die Ausgabezeile sollte dann so aussehen: (name): "Parameter: [[xx,xx,xx],[xx,xx,xx]]" xx steht für Zahlen. Funktionieren die Beispielmissionen bei dir? |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Soldaten in einem Trigger von einer anderen Gruppe eliminieren | M4X1 | Editing & Scripting | 2 | 15.06.2011 15:35 |
Einheiten in Gruppe löschen | Brubaker | Editing | 6 | 26.05.2011 17:44 |
Gruppe per Auslöser bewegen | Deep Five-9te | Editing & Scripting | 2 | 07.01.2011 07:46 |
Respawn mit besitmmten Namen | burns | Editing & Scripting | 6 | 12.10.2010 20:45 |
Probleme bei Norrin Revive Script 0.49b | Jekko | Editing & Scripting | 24 | 21.09.2010 19:39 |