HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-187/)
-   -   Einheiten und objekte an zufalls Position (https://hx3.de/editing-scripting-187/einheiten-objekte-zufalls-position-23821/)

[ate]minimal 12.05.2014 20:57

Einheiten und objekte an zufalls Position
 
Hallo erstmal
Hab mich heut hier mal angemeldet weil mir das ewige gegoogle und doch nix find aufn sack geht☺ und bin voller Hoffnung das ihr mir weiter helfen könnt.

Ich komm gleich mal zum punkt.

In meiner mission sollen 2 luftabwehr stellungen, zufällig in einem bestimmten bereich über ein script spawnen.
Schon mal eins vorab meine Script Kenntnisse this=null☺.
Das ganze dann fürn multiplayer.

Hab schon gegooglet und bei euch im Forum geschaut aber nix gefunden.

ja ich hab auch die editing bibel schon durch geschaut.
Bin bei dem kapitel zufalls Position hängen geblieben, bin aber noch nicht durch gestiegen wie ich das auf objekte und einheiten anwenden soll.

Danke schon mal im vorraus.

Nokman 12.05.2014 22:40

Du kanst entweder

Code:

_objekt = "Rabbit_F";
_plus = (round random 300) - (round random 300);
_plus2 = (round random 300) - (round random 300);
_pos2 = [((getPos player)select 0) + _plus, ((getPos player)select 1) + _plus2,0.2];
_hase = createVehicle [_objekt, _pos2, [], 0, "NONE"];

Dies würde einen Hasen im zufall von 300 meterradius um dich erstellen

alternativ kannst du auch vorgebene Zufallspositionen sagen :D

Drunken Officer 13.05.2014 01:57

Oder du schreibst
Code:

if (!isServer) exitWith {};
for "_i" from 1 to 2 do
{
createVehicle ["namederEinheit", getPos .... , [], 300, "NONE"];
};

Wenn du die AA-Stellung im Editor platzierst, dann siehst du im Dialog rechts oben den Namen.
bei getPos musst du einfach etwas platzieren und benennen. Nimm ein "unsichtbares H" und alles ist chick. Das bildet den Mittelpunkt um die, die 300er Zone aufgebaut wird

[ate]minimal 13.05.2014 07:15

danke für die schnelle antwort.

aber damit kann ich ja jetzt immer nur eine einheit an irgend einer posi spawn oder seh ich des falsch???..

sorry wenn die fragestellung falsch war.

mein gedanke war dieser...das ich die stellungen im editor bastle, aus der sqm die daten nehm in ein script reinpack über die zeilen dann ein random setz...so das der komplette block dann zufällig gespwant wird. so wie bei den side missions der domination.

Vienna 13.05.2014 08:37

Zitat:

Zitat von Nokman (Beitrag 472627)
Du kanst entweder

Code:

_objekt = "Rabbit_F";
_plus = (round random 300) - (round random 300);
_plus2 = (round random 300) - (round random 300);
_pos2 = [((getPos player)select 0) + _plus, ((getPos player)select 1) + _plus2,0.2];
_hase = createVehicle [_objekt, _pos2, [], 0, "NONE"];

Dies würde einen Hasen im zufall von 300 meterradius um dich erstellen

alternativ kannst du auch vorgebene Zufallspositionen sagen :D

createVehicle bietet die Eingabe einer solchen Zufallsposition:

_hase = createVehicle [_objekt, position Player, [], 300, "NONE"];

[ate]minimal 13.05.2014 09:13

ich hab hier mal was versucht, hab im editor 1 infantrie und 1 fahrzeug gesetzt, das ganze dann in ein script kopiert.

this = createCenter west;
_center_0 = _this;

_group_1 = createGroup _center_0;

_unit_1 = objNull;
if (true) then
{
_this = _group_1 createUnit ["B_recon_exp_F", [1877.4304, 5822.5098, -1.9073486e-006], [], 0, "CAN_COLLIDE"];
_unit_1 = _this;
_this setPos getpos marker1;
_this setDir -168.9375;
_this setVehicleVarName "S1";
S1 = _this;
_this setUnitAbility 0.60000002;
if (true) then {_group_1 selectLeader _this;};
};

_group_2 = createGroup _center_0;

_vehicle_0 = objNull;
if (true) then
{
_this = createVehicle ["B_MBT_01_mlrs_F", [1874.3511, 5825.3145, -2.9563904e-005], [], 0, "CAN_COLLIDE"];
_vehicle_0 = _this;
_this setPos getpos marker2;
_this setDir -167.09911;
_this setVehicleVarName "F1";
F1 = _this;
_this setUnitAbility 0.60000002;
if (true) then {_group_2 selectLeader _this;};
};

wenn der auslöser aktiv spawnen die einheiten am zielpunkt.

jetzt will ich das die beiden zusammen an 3 verschieden zufalls postionen spawnen. und das ganze später dann mit mehreren einheiten und objekten.

habs so mal versucht. funkt aber net:

_this = createCenter west;
_center_0 = _this;
_start = random 3;
? _start < 1 : goto "p1";
? _start < 2 : goto "p2";
? _start < 3 : goto "p3";

#p1
_group_1 = createGroup _center_0;

_unit_1 = objNull;
if (true) then
{
_this = _group_1 createUnit ["B_recon_exp_F", [1877.4304, 5822.5098, -1.9073486e-006], [], 0, "CAN_COLLIDE"];
_unit_1 = _this;
_this setPos getpos marker1;
_this setDir -168.9375;
_this setVehicleVarName "S1";
S1 = _this;
_this setUnitAbility 0.60000002;
if (true) then {_group_1 selectLeader _this;};
};

_group_2 = createGroup _center_0;

_vehicle_0 = objNull;
if (true) then
{
_this = createVehicle ["B_MBT_01_mlrs_F", [1874.3511, 5825.3145, -2.9563904e-005], [], 0, "CAN_COLLIDE"];
_vehicle_0 = _this;
_this setPos getpos marker2;
_this setDir -167.09911;
_this setVehicleVarName "F1";
F1 = _this;
_this setUnitAbility 0.60000002;
if (true) then {_group_2 selectLeader _this;};
};
exit;

#p2
_group_1 = createGroup _center_0;

_unit_1 = objNull;
if (true) then
{
_this = _group_1 createUnit ["B_recon_exp_F", [1877.4304, 5822.5098, -1.9073486e-006], [], 0, "CAN_COLLIDE"];
_unit_1 = _this;
_this setPos getpos marker3;
_this setDir -168.9375;
_this setVehicleVarName "S1";
S1 = _this;
_this setUnitAbility 0.60000002;
if (true) then {_group_1 selectLeader _this;};
};

_group_2 = createGroup _center_0;

_vehicle_0 = objNull;
if (true) then
{
_this = createVehicle ["B_MBT_01_mlrs_F", [1874.3511, 5825.3145, -2.9563904e-005], [], 0, "CAN_COLLIDE"];
_vehicle_0 = _this;
_this setPos getpos marker4;
_this setDir -167.09911;
_this setVehicleVarName "F1";
F1 = _this;
_this setUnitAbility 0.60000002;
if (true) then {_group_2 selectLeader _this;};
};
exit;

#p3
_group_1 = createGroup _center_0;

_unit_1 = objNull;
if (true) then
{
_this = _group_1 createUnit ["B_recon_exp_F", [1877.4304, 5822.5098, -1.9073486e-006], [], 0, "CAN_COLLIDE"];
_unit_1 = _this;
_this setPos getpos marker5;
_this setDir -168.9375;
_this setVehicleVarName "S1";
S1 = _this;
_this setUnitAbility 0.60000002;
if (true) then {_group_1 selectLeader _this;};
};

_group_2 = createGroup _center_0;

_vehicle_0 = objNull;
if (true) then
{
_this = createVehicle ["B_MBT_01_mlrs_F", [1874.3511, 5825.3145, -2.9563904e-005], [], 0, "CAN_COLLIDE"];
_vehicle_0 = _this;
_this setPos getpos marker6;
_this setDir -167.09911;
_this setVehicleVarName "F1";
F1 = _this;
_this setUnitAbility 0.60000002;
if (true) then {_group_2 selectLeader _this;};
};
exit;

[ate]minimal 13.05.2014 09:54

hab bei euch was im forum gefunden aber dat will auch nicht so wirklich.

Code:

pos1 = [marker1, marker2];
pos2 = [marker3, marker4];
pos3 = [marker5, marker6];

_pos = [pos1, pos2, pos3];
_posstart = _pos select floor random count _pos;

sleep 2;

_this = createCenter west;
_center_0 = _this;

_group_1 = createGroup _center_0;

_unit_1 = objNull;
if (true) then
{
    _this = _group_1 createUnit ["B_recon_exp_F", [1877.4304, 5822.5098, -1.9073486e-006], [], 0, "CAN_COLLIDE"];
    _unit_1 = _this;
    _this setPos [_posstart];
    _this setDir -168.9375;
    _this setVehicleVarName "S1";
    S1 = _this;
    _this setUnitAbility 0.60000002;
    if (true) then {_group_1 selectLeader _this;};
};

_group_2 = createGroup _center_0;

_vehicle_0 = objNull;
if (true) then
{
    _this = createVehicle ["B_MBT_01_mlrs_F", [1874.3511, 5825.3145, -2.9563904e-005], [], 0, "CAN_COLLIDE"];
    _vehicle_0 = _this;
    _this setPos  [_posstart];
    _this setDir -167.09911;
    _this setVehicleVarName "F1";
    F1 = _this;
    _this setUnitAbility 0.60000002;
    if (true) then {_group_2 selectLeader _this;};
};

hab mal das makiert, wo ich denk das es falsch aufgerufen wird:confused:

Nokman 13.05.2014 10:15

Zitat:

Zitat von Vienna (Beitrag 472633)
createVehicle bietet die Eingabe einer solchen Zufallsposition:

_hase = createVehicle [_objekt, position Player, [], 300, "NONE"];

Habe ich auch gerade dadurch gelernt ;) Danke

[ate]minimal 13.05.2014 11:19

ja soweit hab ich das schon kapiert.....

aber nochmal zu meinem prob.....
es soll zb:

1x AA fahrzeug
5x INf
2x mg nest
1x fahrzeug

...wenn ich das mit dem creatvehicle mach spawnt ja jedes wilkürlich.

ich will eine komplette AA-Stellung basteln und die dann zufällig an einer von 3 positionen spawnen lassen.

steh ich grad sowas von aufm schlauch???????? oder reichen meine script kenntnisse dafür doch net :D

Nokman 13.05.2014 11:52

Dazu gibt es einen script von Vienna hier im Forum finde ihn nur gerade nicht sorry.

Der bewegt ganze Base
Code:

_array = [getmarkerPos "b1",getmarkerPos "b2",getmarkerPos "b3"];
_random = _array select floor random count _array;
OBJEKT setpos _random;

damit setzt du ein Objekt an denn marker b1 oder b2 oder b3 duzu erstellst du unsichtbare marker da wo die base sein soll.

in Kombination mit Viennas script zum kompletten base verschieben sollte es das erfüllen was du suchst.
Das ist der Script ich habe ihn abgeändert so das du noch marker b1 b2 b3 erstellen musst und es auslösen
Code:

//==================== Szene Versetzen ======================

// ***********************************************************
// Versetzt eine Gruppe von Objekten an eine andere Position,
//  unter Beibehaltung der Stellung der Objekte zueinander.
//
// Aufruf: [[Objektname1, Objektname2, usw...]] execVM "scripts\versetzen.sqf"
//          [x,y] = neue Position des 1. Objekts!
//
////////////////////////////////////
// Script erstellt von Vienna! :) //
////////////////////////////////////
//
// ***********************************************************

private ["_posX","_posY","_obj","_posRx","_posRy","_array","_random"];

//Parameter

  //neue Position
_array = [getmarkerPos "b1",getmarkerPos "b2",getmarkerPos "b3"];
_random = _array select floor random count _array;
      _posX = _random  select 0;
      _posY = _random  select 1;
 
  //Liste (Array) mit den Objekt-Namen aller Objekte
      _obj  = _this select 0;

//Position des 1. Objekts als Referenz
  _posRx = getpos(_obj select 0)select 0;
  _posRy = getpos(_obj select 0)select 1;

//Schleife durch alle Objekte der Liste
  {
      //Objekte auf neue Position in Relation zum 1. Objekt
      _x setpos [_posX+((getpos _x select 0)-_posRx),_posY+((getpos _x select 1)-_posRy)]
  } forEach _obj


[ate]minimal 13.05.2014 12:22

Wenn de mir jetzt noch en komplettes beispiel machst wie ich das genau anwende bin ich glücklich☺. Und so wie ichs vorhin schon mal gepostet hab kann man es nicht realisieren? ???

Nokman 13.05.2014 12:49

Du hast ja mehere objekte und die sollen alle so stehenbleiben wie sie sind nur wo anders hin? anbei eine mission

File-Upload.net - base.Stratis.zip

mit funk alpha verschiebst du die objekte

[ate]minimal 13.05.2014 13:09

Cool danke....werds morgen früh mal testen.

Drunken Officer 13.05.2014 15:15

Zitat:

Zitat von NOKMAN
Zitat von Vienna http://hx3.de/images/buttons/viewpost.gif
createVehicle bietet die Eingabe einer solchen Zufallsposition:

_hase = createVehicle [_objekt, position Player, [], 300, "NONE"];
Habe ich auch gerade dadurch gelernt ;) Danke

Zitat:

Code:

Oder du schreibst
    Code:
    if (!isServer) exitWith {};
 for "_i" from 1 to 2 do
{
createVehicle ["namederEinheit", getPos .... , [], 300, "NONE"];
};

Wenn du die AA-Stellung im Editor platzierst, dann siehst du im Dialog rechts oben den Namen.
bei getPos musst du einfach etwas platzieren und benennen. Nimm ein "unsichtbares H" und alles ist chick. Das bildet den Mittelpunkt um die, die 300er Zone aufgebaut wird
Nokman und TE, ihr müßt euch auch mal mit den Befehlen auseinadersetzen und die Beschreibung lesen.

@TE
Wo man die Beschreibung der Einheit herbekommt, hatte ich geschrieben. Das mit der mission.sqm ist in deinem Fall ein sehr umständlicher weg.
Das Script von Vienna funktioniert. Da kannst du z.B. auch ganze Camps mit umsetzen.
ABER:
Einheiten die platziert werden, und mit diesem Script versetzt werden, haben hinterher keine Wegpunkte mehr. Sprich, wenn da Patrollieren laufen sollen, mußt du das per Script lösen.

Ansonsten empfehle ich auch mal die Guides von Murry und Pscho zu lesen

[ate]minimal 13.05.2014 16:09

Naja ich find die Variante vom vienna auch nicht grad einfach😊. Ich versuch morgen mal mein Glück mit dem script.

Drunken Officer 13.05.2014 16:14

Wenn du willst, dass mehrere Objekte syncron versetzt werden können, ist dass auch nicht mal eben 0815....

[ate]minimal 13.05.2014 17:06

Ja dat stimmt wohl....gabs bei arma nicht mal ne Möglichkeit, basen als xml oder so abzuspeichern und dann zu laden???


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:24 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