HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   zufälliges Spawnen von Einheiten (https://hx3.de/editing-scripting-167/zufaelliges-spawnen-einheiten-21948/)

sandmanGER 17.10.2012 15:32

zufälliges Spawnen von Einheiten
 
Hallo, zuallererst möchte ich darauf aufmerksam machen, dass ich schon seid einigen Tagen versuche, das alleine hinzukriegen. Hab aber kein einsteigerfreundliches Tutorial gefunden.

Nun zu meinem Script:

Spieler betritt ein Gebiet(zb. Cherno)

(Auslöser wird betätigt und löst Script aus)
->daraufhin spawnen in der näheren Umgebung Civilisten
(max 50 Einheiten/ zufälliger Spawnpunkt Entfernung max. 150 meter)

Spieler bewegt sich, also sollen alle Einheiten, die sich dann außerhalb der 100 m befinden gelöscht werden (Wie das löschen geht, weiß ich mittlerweile dank Moerderhoschi::)

-----------------------------------------------------------------------


man bäuchte also drei Zonen: eine Globale (Städte, Dörfer, Flugfelder)
und zwei lokale(halt innerhalb dieser globalen Zonen[damit nicht zuviele Einheiten gespawnt werden])

1. lokale Zone: Kreis mit 150m Radius
2. lokale Zone: Kreis mit 100m Radius

Dann bräuchte man ja verschiedene Gruppen der Einheitentypen
grp1 = Zivilisten
grp2 = Soldaten
grp3
...

diese sollten dann entlang des Kreisrandes der 2. lokalen Zone spawnen
(Platzierungsradius = 10, möglichst nacheinander, damit ArmA nicht abstürzt :D)

alle Einheiten die sich außerhalb der 1. lokalen Zone befinden, werden dann gelöscht.


Ich hab das ganze mal skizziert:

http://www.bulletrun-hq.com/imagehos...annt7O7TMD.jpg

Ich hoffe mal das ihr mir hier helfen könnt:)

PS: das ähnelt halt ziemlich DayZ was das mit den Spawns angeht

Vienna 17.10.2012 16:59

Folgend ein Skript mit dem du ringförmig Objekte um eine Position aufstellen kannst.

Zum Testen in einem Mehrfach-Funkauslöser rufe das Skript in "Bei Akt." folgend auf:

temp = [player, position Fahne1,10,5] execVM "RingPlazierung.sqf"

Für die Referenzposition erstelle eine Fahne mit Namen Fahne1


Zur genauen Funktionsweise lies die Kommentare im Skript.


Skript: RingPlazierung.sqf
Code:

//Stellt ein Objekt in zufälliger Himmelsrichtung um eine Referenzposition auf
//
// [Aufstellobjekt, Referenzposition, Distanz zur Position, Abweichung] execVM "RingPlazierung.sqf"

_objekt  = _this select 0; //aufzustellendes Objekt
_refPos  = _this select 1; //Referenzposition für die Distanz
_distanz = _this select 2; //Distanz zur Referenzposition
_abweich = _this select 3; //Abweichung

//Abweichung zur Distanz berechnen
_distanz = _distanz - _abweich/2 + (Random _abweich);

//Position der Aufstellung um den Referenzpunkt von 0-360 Grad
_dir = (Random 360)+1;
_objekt setPos [(_refPos select 0)+_distanz*sin(_dir),(_refPos select 1)+_distanz*cos(_dir)];

//Objekt in Richtung Referenzposition ausrichten
_objekt SetDir (_dir+180);


sandmanGER 17.10.2012 18:01

erstmal danke für deine Unterstützung,

Ich habe "player" mit "Fahne1" vertauscht, damit die Flagge bei mir spawnt
Wie muss ich das ändern damit die Fahne gespawnt wird und ich die nicht erst erstellen muss?
Also mind. 1 Fahne bis 20 Fahnen.

Wie kann ich daraus ne Schleife machen, dass es alle 5 sek eine Fahne gespawnt wird?

Vienna 17.10.2012 18:28

Das Skript versetzt nur bestehende Objekte. Im Spiel sind diese zuvor zu erstellen mit diesen Befehlen:

http://community.bistudio.com/wiki/createVehicle (für Objekte wie Fahrzeuge Fahnen usw.)

http://community.bistudio.com/wiki/createUnit (für Soldaten)

Hast du die Objekte schon im Editor erstellt, dann musst du ihnen einen Namen geben und den Namen dem Skript zum Verstellen übergeben.

sandmanGER 17.10.2012 18:53

alles klar, danach soll die Einheit entfernt werden,
wenn sie mehr als 150m von dem Spieler entfern ist (da der spieler sich ja auch bewegt).

_entfern = player Distance Fahne1;
IF _entfern >= 150;
THEN deleteVehicle Fahne1;

Mir ist klar das das so nicht funktionieren wird, aber dadurch weißt du wie ich mir das vorstelle.

Vienna 17.10.2012 19:10

Zum Entfernen kann man http://community.bistudio.com/wiki/nearestObjects verwenden. Da ist der ClassName der Fahne und der Radius für den Entfernungsbereich als Parameter anzuführen. Die dabei gefundenen Fahnen werden in einem Array ausgegeben und können so einfach entfernt werden.

sandmanGER 17.10.2012 21:05

tut mir leid bin aber n Neuling,

was ich bisher hab:

temp = [Fahne1, position player,10,5] execVM "RingPlazierung.sqf" // spawnt

jetzt sollen ja alle einheiten, die sich in einem Radius zwischen 70 - 150(!) befinden, gelöscht werden. ich versteh nicht wie ich das "nearestObjects [player, ["Fahne"], 200]"
einbauen soll, und ob du das überhaupt gemeint hast.

Vienna 17.10.2012 21:56

Hier ist eine Auflistung von Befehlen mit denen man Programmroutinen für Arma schreiben kann: http://community.bistudio.com/wiki/C...Commands_ArmA2

Das von mir erstellte Skript kann nur ein Objekt an eine Position auf der Karte versetzen. Für das Löschen von Objekten ist eine andere Programmroutine erforderlich.

Bevor du dich mit Befehlen befasst, solltest du dich mit den Grundlagen der Programmierung vertraut machen. Das kannst du hier nachlesen: http://community.bistudio.com/wiki/Syntax


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr.

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