HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing (https://hx3.de/editing-139/)
-   -   waituntil oder warten bis einheit marker erreicht? (https://hx3.de/editing-139/waituntil-warten-einheit-marker-erreicht-14865/)

Mr.g-c 22.06.2008 01:57

waituntil oder warten bis einheit marker erreicht?
 
Hallo ich mache grad für meine Brüder und mich eine simple mission mit etwas sqf-scripting.

Jedenfalls habe ich einen Kleinen UAZ von SLA gesteuert der ein paar punkte auf der Karte abklappern soll.

Ok also ich habe das ganze bisher ganz simpel mit "einheit doMove maker1" usw. was ja auch funktioniert...
Nun möchte ich das nachdem der UAZ am entsprechenden marker angekommen ist, dass er dort für eine bestimmte zeit (random 20 minuten aber mindestens 5 minuten) stehen bleibt und dann weiter zu marker 2 fährt.
Dort angekommen macht er dann das selbe(warten) und fährt weiter zu marker3, usw...
Insgesamt sind es 15 marker an der zahl. Natürlich sollte der UAZ nachdem er am letzten marker war, wieder zum ersten fahren.

Also muss ich das wohl in eine while-true-do schleife packen damit es immer wiederholt wird?

Nach besser wäre wenn der UAZ sich random-positionen aus dem 15 markern aussucht, so dass es nicht vorraussehbar ist zu welchem der 15 marker er gerade fährt. Dazu einfach ein marker-array über den code schreiben und dann mit random select???

Hoffe mir kann da jemand helfen....

Xeno 22.06.2008 08:26

Eine Lösung:

Code:

private ["_einheit","_old_random_val"];

_einheit = _this select 0; // die zu bewegende Einheit als Parameter

// ich gehe davon aus, dass Du die Marker marker1 - marker15 genannt hast

_old_random_val = -1;
while {alive _einheit} do {
    _random_val = ceil random 15;
    while {_random_val == _old_random_val} do {
        _random_val = ceil random 15;
    };
    _old_random_val = _random_val;
    call compile format ["
        _einheit doMove markerPos 'marker%1';
        while {_einheit distance markerPos 'marker%1' > 20 && alive _einheit} do {
            sleep 5;
        };
    ", _random_val];
   
    if (!alive _einheit) exitWith {};
    sleep 300 + random 900;
};

Zweite Lösung:

Code:

private ["_einheit","_old_random_val","_markers"];

_einheit = _this select 0; // die zu bewegende Einheit als Parameter
_markers = ["marker1","marker2","marker3","marker4","marker5","marker6","marker7","marker8","marker9","marker10","marker11","marker12","marker13","marker14","marker15"];

_old_random_val = -1;
while {alive _einheit} do {
    _random_val = floor random 15;
    while {_random_val == _old_random_val} do {
        _random_val = floor random 15;
    };
    _old_random_val = _random_val;
    _marker = _markers select _random_val;
    _einheit doMove markerPos _marker;
    while {_einheit distance markerPos _marker > 20 && alive _einheit} do {
        sleep 5;
    };
   
    if (!alive _einheit) exitWith {};
    sleep 300 + random 900;
};

Xeno

Mr.g-c 22.06.2008 14:48

Wow das ist ja wirklich klasse!
Wenn ich nun den UAZ nicht auf die karte setze, sondern ihn bisher mit:

Code:

uaz_car = "UAZ" createVehicle getPos uaz_startpos;
uaz_car setVehicleInit
uaz_car = this;
this setVehicleVarName ""uaz_car"";
this setAmmoCargo 0;
this setVehicleLock ""LOCKED"";
clearWeaponCargo this;
clearMagazineCargo this;
removeAllWeapons this;"

"Civilian2 " createUnit [getpos uazstartpos, group soldat1, "uaz_driver = this", 1.0, "PRIVATE"];
[uaz_driver] join _group;
uaz_driver moveInDriver uaz_car;

Kann ich dann deinen code einfach hinten dran fügen und "_einheit = this select 0;" mit "_einheit = uaz_driver;" ersetzen?

Dann nochwas, wenn du zeit findest:
Wenn der UAZ und/oder der Fahrer getötet wurde, kann er dann an einer der 15 Marker wieder neu spawnen und seine Routen wie gewohnt abklappern?

Viele Grüsse und danke:
Christian

Xeno 22.06.2008 20:23

Zitat:

Zitat von Mr.g-c (Beitrag 181502)
Dann nochwas, wenn du zeit findest:
Wenn der UAZ und/oder der Fahrer getötet wurde, kann er dann an einer der 15 Marker wieder neu spawnen und seine Routen wie gewohnt abklappern?

Code:

// ich gehe davon aus, dass Du die Marker marker1 - marker15 genannt hast

while {true} do {
    _spawn_pos = call compile format ["markerPos 'marker%1';", ceil random 15];
    _vec = createVehicle ["uaz", _spawn_pos, [], 0, "NONE"];
    _vec lock true;
    _vec setAmmoCargo 0;
    _grp = createGroup civilian;
    _einheit =  _grp createUnit ["Civilian2", _spawn_pos, [], 0, "NONE"];
    [_einheit] join _grp;
    _einheit assignAsDriver _vec;_einheit moveindriver _vec;
   
    _old_random_val = -1;
    while {alive _einheit && alive _vec} do {
        _random_val = ceil random 15;
        while {_random_val == _old_random_val} do {
            _random_val = ceil random 15;
        };
        _old_random_val = _random_val;
        call compile format ["
            _einheit doMove markerPos 'marker%1';
            while {_einheit distance markerPos 'marker%1' > 20 && alive _einheit && alive _vec} do {
                sleep 5;
            };
        ", _random_val];
       
        if (!alive _einheit || !alive _vec) exitWith {};
        sleep 300 + random 900;
    };
    //deleteVehicle _einheit;
    //deleteVehicle _vec;
    deleteGroup _grp;
};

Xeno

Mr.g-c 23.06.2008 01:21

Wow vielen dank! Das funktioniert soweit ganz gut, bis auf 2 sachen:

1. Wenn man zu nahe dem UAZ mit nem Heli fliegt (hover knapp drüber) ejected der Fahrer, schmeisst sich auf den boden, rennt weg, kommt dann nach kurzer zeit zurück in den Wagen aber macht nichts mehr.
2. Wenn man den Wagen beschädigt, rennt der Faher ebenfalls weg aber nichts passiert weiter. Dann wenn ich den UAZ endgültig zerstört hatte, bleibt der faher aber noch am leben (er rannte schön weiter weg und schmiss sich auf den boden).

Meine ideen (ich würde das ja selber machen, aber weiss nicht in welchem der while-do's oder geht das auch ausserhalb der gesamten schleife?

1.
Code:

if ((!(_einheit in _vec)) and (alive _einheit))
                then{
                    _einheit moveInDriver _vec;
                    _einheit assignAsDriver _vec;
                };

2. Die beiden auskommentierten deletes aktivieren, da anscheinend trotz zerstörtem UAZ der Fahrer am leben blieb.

3. Da ich einen action-menu eintrag habe der bei nähe zu Vehicle auftauchen soll, es aber mit dem Code von dir nicht tut, denke ich cih brauche "setVehicleVarName" oder nicht?


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