Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 26.09.2011, 08:54   #1 (permalink)
Newbie
 
Registriert seit: 16.09.2011
Beiträge: 15
Standard 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:
[] execVM "createNewGroup.sqf"
Soweit klappt das auch ganz gut ...

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).
GELight ist offline   Mit Zitat antworten
Alt 26.09.2011, 09:06   #2 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 31
Beiträge: 1.724
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

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!
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 26.09.2011, 09:39   #3 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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.
Vienna ist offline   Mit Zitat antworten
Alt 26.09.2011, 09:41   #4 (permalink)
Newbie
 
Registriert seit: 16.09.2011
Beiträge: 15
Standard 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:
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"
Das waitUntil kenne ich noch nicht.
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:
waitUntil {!alive eastGP}; 
Gruß Mario
GELight ist offline   Mit Zitat antworten
Alt 26.09.2011, 10:23   #5 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

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:
waitUntil{{alive _xcount (units eastGP) == 0
Mit diesem Befehl wird jede Einheit der Gruppe durchlaufen und auf den Status überprüft. Ist die Einheit noch am Leben, dann wird der Zähler um 1 erhöht, die neue Gruppe spawnt also erst, wenn kein Soldat mehr lebt.

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:
waitUntil{{alive _xcount (units eastGP) <= 2
Cyborg11 ist offline   Mit Zitat antworten
Alt 26.09.2011, 10:49   #6 (permalink)
Newbie
 
Registriert seit: 16.09.2011
Beiträge: 15
Standard Respawn

Hi,

Danke für die Code-Schnipsel.
Und wie kombiniere ich das mit meinem erneuten Aufruf vom Script?

So in etwa???
PHP-Code:
waitUntil{{alive _xcount (units eastGP) <= 2then { ... } 
Gruß Mario
GELight ist offline   Mit Zitat antworten
Alt 26.09.2011, 10:58   #7 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

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:
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 _xcount (units eastGP) <= 2};
// Eventuelle Löschung der alten verbleibenden Gruppe
[] execVM "createNewGroup.sqf"
Eine Löschung der letzten zwei Soldaten, sowie der Gruppe wäre auch nicht unbedingt schlecht.
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.
Cyborg11 ist offline   Mit Zitat antworten
Alt 26.09.2011, 11:15   #8 (permalink)
Newbie
 
Registriert seit: 16.09.2011
Beiträge: 15
Standard Respawn

Ach sooo.... das gesamte Script wird solange angehalten.

Jetzt verstehe ich. Das das aber auch keiner in den Hilfen dazu schreibt.
Dank dir für den Hinweis.

Werd ich auf jeden Fall testen....

Gruß Mario
GELight ist offline   Mit Zitat antworten
Alt 26.09.2011, 12:48   #9 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 31
Beiträge: 1.724
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

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 {};
2. die gruppe als lokale variable zur vermeidung von überschneidungen

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";
mfg
__________________
Niemand hat die Absicht eine Tüte zu bauen!
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 26.09.2011, 14:05   #10 (permalink)
Newbie
 
Registriert seit: 16.09.2011
Beiträge: 15
Standard Respawn

Wow.... vielen Dank für die Hinweise/Hilfe.
Werd es gern mit einbauen.


Gruß Mario
GELight ist offline   Mit Zitat antworten
Alt 27.09.2011, 14:51   #11 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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";
Im Anhang eine Testmission. Dafür wurden im Skript der Mission für den Test zwei als solche markierte Blöcke eingefügt. Die sind bei sonstiger Verwendung zu entfernen. Auch ist in der Testmission ein Skript für die Anzeige der Soldaten auf der Karte vorhanden. (Obiges Skript ist ohne diese Testblöcke.)
Angehängte Dateien
Dateityp: zip Gruppe_erstellen-utes.zip (4,6 KB, 47x aufgerufen)
Vienna ist offline   Mit Zitat antworten
Alt 27.09.2011, 20:37   #12 (permalink)
Newbie
 
Registriert seit: 16.09.2011
Beiträge: 15
Standard Respawn

Leute ihr seid ja zu krass drauf...
Danke danke danke...

Lasst mich erstmal im kleinen Rahmen anfangen zu testen hehehe
Ich werd mir das aber ganz ganau alles anschauen hier. Auf jeden Fall...

Gruß Mario
GELight ist offline   Mit Zitat antworten
Alt 27.09.2011, 21:41   #13 (permalink)
Newbie
 
Registriert seit: 16.09.2011
Beiträge: 15
Standard 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:
_SoldatenDerGruppe = [];
{
    
_temp _Gruppe createUnit [_x_Erstellungsort, [], 0"FORM"];
    
_temp setSkill _Fertigkeit;  
    
_SoldatenDerGruppe _SoldatenDerGruppe + [_temp];
} forEach 
_SoldatenListe
Ich habe mir ein paar Testausgaben gemacht.
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:
// 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 !isServerexitWith {};



hint "Weitere Gegner gesichtet!";


// Lokale Variablen
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.7;

//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 "RED";
//Formation: "COLUMN","STAG COLUMN","WEDGE","ECH LEFT","ECH RIGHT","VEE","LINE","FILE","DIAMOND"
_Formation  "DIAMOND";
//Fluchtverhalten: 0 = 0%, 1 = 100%
_Flucht     0.3;         

//Gruppe erstellen
_Gruppe =  CreateGroup EAST;

Sleep 1;

//Liste der Soldaten
_SoldatenListe = [
  
"RU_Soldier_SL",    
  
"RU_Soldier",    
  
"RU_Soldier_MG",    
  
"RU_Soldier_AT",    
  
"RU_Soldier_LAT",    
  
"RU_Soldier_GL",    
  
"RU_Soldier_Marksman"
];

_SoldatenDerGruppe = [];
{
    
_temp _Gruppe createUnit [_x_Erstellungsort, [], 0"FORM"];
    
_temp setSkill _Fertigkeit;  
    
_SoldatenDerGruppe _SoldatenDerGruppe + [_temp];
} forEach 
_SoldatenListe;

//Gruppe auflösen wenn diese auf 2 oder weniger Soldaten dezimiert ist, bzw. die Gruppe flieht
waitUntil{{alive _xcount _SoldatenDerGruppe <= OR {fleeing _xcount units _Gruppe == count units _Gruppe};

//Unterprogramm: Alle Soldaten der Gruppe nach 2 Minuten entfernen
[_Gruppe,_SoldatenDerGruppespawn
{
    (
_this select 0allowFleeing 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_EinsatzortexecVM "nwo\lib\nwo_createGroup.sqf"
Aufrufen tue ich es in meiner PlayerInit mit:
temp = [getMarkerPos "GrpM", getMarkerPos "nwoBase"] execVM "nwo\lib\nwo_createGroup.sqf";


Gruß Mario
GELight ist offline   Mit Zitat antworten
Alt 27.09.2011, 22:02   #14 (permalink)
Newbie
 
Registriert seit: 16.09.2011
Beiträge: 15
Standard Fehler

Hier ist noch mal mein aktuelles Script:

PHP-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 !isServerexitWith {};



hint "Weitere Gegner gesichtet!";


// Lokale Variablen
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.8;

//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  "FULL";   
//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  "DIAMOND";
//Fluchtverhalten: 0 = 0%, 1 = 100%
_Flucht     0.3;         

//Gruppe erstellen
_Gruppe =  CreateGroup EAST;

Sleep 1;

//Liste der Soldaten
_SoldatenListe = [
  
"RU_Soldier_SL",    
  
"RU_Soldier",    
  
"RU_Soldier_MG",    
  
"RU_Soldier_AT",    
  
"RU_Soldier_LAT",    
  
"RU_Soldier_GL",    
  
"RU_Soldier_Marksman"
];

_SoldatenDerGruppe = [];
{
    
_temp _Gruppe createUnit [_x_Erstellungsort, [], 0"FORM"];
    
_temp setSkill _Fertigkeit;  
    
_temp setBehaviour _Verhalten;
    
_temp setSpeedMode _SpeedMode;
    
_temp setCombatMode _CombatMode;  
    
_temp setFormation _Formation;  
    
_SoldatenDerGruppe _SoldatenDerGruppe + [_temp];
} forEach 
_SoldatenListe;

_SoldatenDerGruppe move getMarkerPos "nwoBase";

//Gruppe auflösen wenn diese auf 2 oder weniger Soldaten dezimiert ist, bzw. die Gruppe flieht
waitUntil{{alive _xcount _SoldatenDerGruppe <= OR {fleeing _xcount units _Gruppe == count units _Gruppe};

//Unterprogramm: Alle Soldaten der Gruppe nach 2 Minuten entfernen
[_Gruppe,_SoldatenDerGruppespawn
{
    (
_this select 0allowFleeing 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_EinsatzortexecVM "nwo\lib\nwo_createGroup.sqf"
Aufrufen tue ich es in meiner PlayerInit mit:
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
GELight ist offline   Mit Zitat antworten
Alt 27.09.2011, 23:04   #15 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 29.07.2008
Ort: Wien
Alter: 42
Beiträge: 189
Ghost_Aut eine Nachricht über MSN schicken
Standard

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;
Wenn du die Groupe neu erstellen möchtest, wenn alle Einheiten tot sind
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};
Um die Schleife zu stoppen, ist es besser einen Auslöser auf der Map zu
Platzieren mit einer Bedingung meiner Meinung!

Code:
if (bedingungs_name_einfügen) exitwith {};
//Ober dieser Link
[_Erstellungsort, _Einsatzort] execVM "createNewGroup.sqf";
Dies Script läuft am Server und nicht am Clint dadurch sollte es nicht
über die Playerinit.sqf aufgerufen werden!
__________________
Ghost_AUT

Geändert von Ghost_Aut (27.09.2011 um 23:10 Uhr).
Ghost_Aut ist offline   Mit Zitat antworten
Alt 28.09.2011, 10:40   #16 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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.
Angehängte Dateien
Dateityp: zip Gruppe_erstellen_OA-Desert_E.zip (4,8 KB, 49x aufgerufen)
Vienna ist offline   Mit Zitat antworten
Alt 28.09.2011, 21:08   #17 (permalink)
Newbie
 
Registriert seit: 16.09.2011
Beiträge: 15
Standard Fehler

Also... das hier ist mein derzeitiges Script.

PHP-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 !isServerexitWith {};



hint "Weitere Gegner gesichtet!";


// Lokale Variablen
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.8;

//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  "FULL";   
//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  "DIAMOND";
//Fluchtverhalten: 0 = 0%, 1 = 100%
_Flucht     0.3;         

//Gruppe erstellen
_Gruppe =  CreateGroup EAST;

Sleep 1;

//Liste der Soldaten
_SoldatenListe = [
  
"RU_Soldier_SL",    
  
"RU_Soldier",    
  
"RU_Soldier_MG",    
  
"RU_Soldier_AT",    
  
"RU_Soldier_LAT",    
  
"RU_Soldier_GL",    
  
"RU_Soldier_Marksman"
];

_SoldatenDerGruppe = [];
{
    
_temp _Gruppe createUnit [_x_Erstellungsort, [], 0"FORM"];
    
_temp setSkill _Fertigkeit;  
    
_SoldatenDerGruppe _SoldatenDerGruppe + [_temp];
} forEach 
_SoldatenListe;


//nur zum Testen ====================================================================================================================================
player groupChat format["Neue Gruppe: %1",_SoldatenDerGruppe]; 
[
_SoldatenDerGruppe_Gruppespawn 
{while {NOT({alive _xcount (_this select 0) <= OR {fleeing _xcount units (_this select 1) == count units (_this select 1))} do
    {
        
hintsilent format["Lebende Soldaten: %1\n\nFliehende Soldaten: %2",{alive _xcount (_this select 0),{fleeing _xcount units (_this select 1)];
        
sleep 0.2
    
};
    
hintsilent format["Lebende Soldaten: %1\n\nFliehende Soldaten: %2",{alive _xcount (_this select 0),{fleeing _xcount units (_this select 1)];
};
//bis hier her entfernen=============================================================================================================================


//Wegpunkt zum Einsatzort erstellen
_temp _Gruppe addWaypoint [_Einsatzort0];
[
_Gruppe0SetWaypointType "MOVE";
_Gruppe setCurrentWaypoint [_Gruppe1];

//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 _xcount _SoldatenDerGruppe == OR {fleeing _xcount units _Gruppe == count units _Gruppe};


//nur zum Testen ====================================================================================================================================
 
player groupChat format["Alte Gruppe: Count Flucht? %1 Count Units? %2",{fleeing _xcount units _Gruppe, {alive _xcount _SoldatenDerGruppe];
 
sleep 10;
//bis hier her entfernen=============================================================================================================================


//Unterprogramm: Alle Soldaten der Gruppe nach 2 Minuten entfernen
[_Gruppe,_SoldatenDerGruppespawn
{
  (
_this select 0allowFleeing 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_EinsatzortexecVM "nwo\lib\nwo_createGroup.sqf";
 




// Createcenter EAST;
// Createcenter WEST;
// WEST setFriend [EAST,0];
// EAST setFriend [WEST,0]; 
Ob das Script mehrfach aufgerufen wird, kann ich nicht sagen aber es entstehen immer noch Fehler. Bzw... ein Fehler, der sich wiederholt.
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:
2c381e00# 1055159: wf_field_hospital_west.p3d is not soldier nor transport.
No transport
Error in expression 
<ldatenDerGruppe = [];
{
_temp _Gruppe createUnit [_x_Erstellungsort, [], 0, >
  
Error position: <createUnit [_x_Erstellungsort, [], 0, >
  
Error 0 Elemente angegeben3 erwartet
File C
:\Users\GELight\Documents\ArmA 2\missions\Teufelsschlo%c3%9f%20Defensive.Chernarus\nwo\lib\nwo_createGroup.sqfline 55
Error in expression 
<ldatenDerGruppe = [];
{
_temp _Gruppe createUnit [_x_Erstellungsort, [], 0, >
  
Error position: <createUnit [_x_Erstellungsort, [], 0, >
  
Error 0 Elemente angegeben3 erwartet
File C
:\Users\GELight\Documents\ArmA 2\missions\Teufelsschlo%c3%9f%20Defensive.Chernarus\nwo\lib\nwo_createGroup.sqfline 55
Error in expression 
<ldatenDerGruppe = [];
{
_temp _Gruppe createUnit [_x_Erstellungsort, [], 0, >
  
Error position: <createUnit [_x_Erstellungsort, [], 0, >
  
Error 0 Elemente angegeben3 erwartet
File C
:\Users\GELight\Documents\ArmA 2\missions\Teufelsschlo%c3%9f%20Defensive.Chernarus\nwo\lib\nwo_createGroup.sqfline 55
Error in expression 
<ldatenDerGruppe = [];
{
_temp _Gruppe createUnit [_x_Erstellungsort, [], 0, >
  
Error position: <createUnit [_x_Erstellungsort, [], 0, >
  
Error 0 Elemente angegeben3 erwartet
File C
:\Users\GELight\Documents\ArmA 2\missions\Teufelsschlo%c3%9f%20Defensive.Chernarus\nwo\lib\nwo_createGroup.sqfline 55
Error in expression 
<ldatenDerGruppe = [];
{
_temp _Gruppe createUnit [_x_Erstellungsort, [], 0, >
  
Error position: <createUnit [_x_Erstellungsort, [], 0, >
  
Error 0 Elemente angegeben3 erwartet
File C
:\Users\GELight\Documents\ArmA 2\missions\Teufelsschlo%c3%9f%20Defensive.Chernarus\nwo\lib\nwo_createGroup.sqfline 55
Error in expression 
<ldatenDerGruppe = [];
{
_temp _Gruppe createUnit [_x_Erstellungsort, [], 0, >
  
Error position: <createUnit [_x_Erstellungsort, [], 0, >
  
Error 0 Elemente angegeben3 erwartet
File C
:\Users\GELight\Documents\ArmA 2\missions\Teufelsschlo%c3%9f%20Defensive.Chernarus\nwo\lib\nwo_createGroup.sqfline 55
Error in expression 
<ldatenDerGruppe = [];
{
_temp _Gruppe createUnit [_x_Erstellungsort, [], 0, >
  
Error position: <createUnit [_x_Erstellungsort, [], 0, >
  
Error 0 Elemente angegeben3 erwartet
File C
:\Users\GELight\Documents\ArmA 2\missions\Teufelsschlo%c3%9f%20Defensive.Chernarus\nwo\lib\nwo_createGroup.sqfline 55
Error in expression 
<this select 1)];
};




_temp _Gruppe addWaypoint [_Einsatzort0];
[
_Gruppe, >
  
Error position: <addWaypoint [_Einsatzort0];
[
_Gruppe, >
  
Error 0 Elemente angegeben3 erwartet
File C
:\Users\GELight\Documents\ArmA 2\missions\Teufelsschlo%c3%9f%20Defensive.Chernarus\nwo\lib\nwo_createGroup.sqfline 75 
Ich wüsste nicht an welcher Stelle ich vergessen habe 3 Werte anzugeben.... oder verstehe ich die Fehlermeldung falsch?

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).
GELight ist offline   Mit Zitat antworten
Alt 28.09.2011, 21:43   #18 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Hast du auch den einen erforderlichen Ost-Soldaten irgendwo im Editor aufgestellt?
Vienna ist offline   Mit Zitat antworten
Alt 28.09.2011, 22:02   #19 (permalink)
Newbie
 
Registriert seit: 16.09.2011
Beiträge: 15
Standard 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
GELight ist offline   Mit Zitat antworten
Alt 28.09.2011, 22:43   #20 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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?
Vienna ist offline   Mit Zitat antworten
Antwort


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
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


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