HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-187/)
-   -   Allgemeine Verzweiflung beim Scripten :D (https://hx3.de/editing-scripting-187/allgemeine-verzweiflung-beim-scripten-d-23295/)

b0rnkilla 18.01.2014 16:07

Allgemeine Verzweiflung beim Scripten :D
 
Hey Leute,

ich hab hier mal ein paar Fragen, bezüglich Scripting-Commands.

  1. Wenn ich eine Einheit bei einem Marker spawnen lasse, diese aber nicht exact bei dem Marker spawnen soll, sondern in einem gewissen Radius und dieser Radius am besten noch mit einem Random wert versehen ist,...
  2. Gibt es eine möglichkeit in einem laufendem Script die Position des Spielers zu aktualisieren? [1*] Wenn ja,...
  3. ich schreibe grade ein ganz simples Folge/Warte-Script. Via addAction"Folge" & addAction"Warte" soll der KI-Soldat das eben genannte tun. ich stoße hier auf das Problem von Punkt 2.
  4. wenn ich ein Fahrzeug spawne und es anschließend an einen Fallschirm hänge, spawnt das Fahrzeug immer zuerst am boden (position player) und teleportiert augenblicklich in die gewünschte höhe. lässt sich das umgehen und gleich in der gewünschten höhe spawnen? [2*]
  5. ich versuche grad ein script ausführen zu lassen, was erst in 10min wieder ausgeführt werden kann.
    dazu habe ich [3*] verwendet und anschließend eine variable auf true gesetzt... was aber alles nich so wirklich hin haut :( also...
  6. ich würde gerne einige Befehle nur eine gewisse Anzahl verfügbar machen. Beispielsweise das unten genannte Beispiel [1*] kann nur 3 mal angefordert werden. Wie...
...wie stell ich das am besten an ? :komisch:

[1*] Beispiel: ich rufe über Funk einen Heli, der zu meiner Position fliegt und mich erst einsammelt wenn ich eine grüne Rauchgranate geworfen habe (als LZ). Und jetzt stellt euch vor ich ruf ihn via Funk, stehe derzeit bei Punkt x, bewege mich aber danach 500m weg von Punkt x und will das der Heli nach meinem wurf der Rauchgranate an der neuen Player-Position landet :komisch:

[2*]
Code:

_Vspawn = _veh createVehicle (_pos); //<--- quasi hier schon die höhe einfügen und dadurch...
_Vspawn setPos [getPos _Vspawn select 0, getPos _Vspawn select 1, _height]; // ...den Befehl komplett weglassen ^^

[3*]
Code:

for [{_i=600}, {_i>=0}, {_i=_i-1}] do
{
        hint "Fahrzeug-Abwurf wieder möglich in " + str(_i) + "Sekunden"; sleep 1;
};

wenn ihr mehr infos oder ausschnitte aus meinen scripten benötigt, sagts ruhig, ich beiße nicht :confused:

Drunken Officer 18.01.2014 17:00

Probiere mal das:
_Vspawn = _veh createVehicle ([getPos _pos select 0, getPos _pos select 1, _height];

zu deinem Heli-Script.

Ich habe dir damals die Funktion mit der Rauchgranate eingebaut. Du mußt die Playerposition einfach neu definieren.
Du fragst über einen Eventhandler ab, ob das Script aktiv ist (dof_evac == true) && grün geworfen wurde. Wenn ja überschreibst du deine Player Posi.

Code:

for "_i" from 1 to 600 do
{
_g = 600 - _i;
hint format ["erst wieder möglich in %1 Sekunden", _g];
sleep 1;
};

Deiner Spielerposition wird so ermittelt
_spielerposi = getPos player

b0rnkilla 18.01.2014 17:33

Zitat:

Probiere mal das:
_Vspawn = _veh createVehicle ([getPos _pos select 0, getPos _pos select 1, _height]);
....hatte ich schon probiert... geht nicht :(


Zitat:

Code:

waitUntil {_hubi distance _pos < 500};
"SmokeShellGreen" createVehicle _pos;


Guck hier... das stand damals in deinem script :rolleyes:
aber ich wollte ja keine Rauchgranate an meine Position spawnen (die spawnt übrigends auch genau da wo ich den funkspruch abgelassen habe),
sondern via eventhandler selbst eine werfen und am besten die neue position der rauchgranate nehmen:rolleyes:

Drunken Officer 18.01.2014 19:44

Du hattest garnichts zu einer Rausgranate gesagt, dass hatte ich von meiner Seite her eingebaut! (nur mal so am Rande) Und klar spawnt die Rauchgranaten an deiner Posi, weil _pos drin steht. Du kannst die Zeile auch deaktivieren...

Du wolltest ein einfaches Script haben. Heli rufen - Heli kommt - Einsteigen und ab. Dann drücke dich doch bitte das nächstemal klarer aus.


Ansonsten über die cos funktion einen Abstand in deine Blickrichtung ermitteln und da spawnen lassen.

Oder aber via Eventhandler abfragen. Bedenke, was soll passieren
a) wenn der Soldat keine solcher Granaten hat
b) bis wann muss die Granate geworfen wurden sein, damit der Heli neue Daten bekommt.

addEventHandler - Bohemia Interactive Community

Edit: ich lasse eine Objekt auf meiner Posi spawnen und teleportiere es hoch. Es blitzt gaaaanz kurz auf. Alternativ einfach eine x-beliebige Position auf der Karte nehmen. und dann versetzen

b0rnkilla 18.01.2014 20:54

Sorry Drunken Officer,
ich wollte jetzt nicht bewirken das du irgendwie aufgebracht bist deswegen :oh:

...ja du hast recht, ich wollte ein simples script haben. das hatte ich dann auch und DU hast mich auf die idee mit der rauchgranate gebracht und diese wollte ich einfach etwas anders umsetzen (via eventhandler)

derzeit sieht das script so aus:
Code:

/* - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - HELICOPTER EVACUATION SCRIPT - - - - - -
- - - -  by DrunkenOfficer, JanIs, b0rnkilla  - - - -
- - - vielen Dank für die große Unterstützung an - - -
- - - - - - - DrunkenOfficer und Janis - - - - - - - -
- - - - - - - - - -  version 0.9 - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - */

private ["_wp0", "_wp1", "_wp2", "_wp3", "_pos", "_lz","_heli"];
if (isNil "heli_unterwegs") then {heli_unterwegs = false};

_heli = _this select 0;
_lz = getPos _heli;
_pos = getPos Player;
_heli setfuel 1;
smokethrow = false; publicVariable "smokethrow";

sleep 1 + (random 2);

player sideRadio "evac1";
player sidechat "REQUESTING A PICK UP. OVER";

if (heli_unterwegs) exitWith
    {
        sleep 2 + (random 2);   
        [west,"HQ"] sideRadio "evac3";
        [west,"HQ"] sidechat "UNABLE TO COMPLY. OVER";
    };

if (!heli_unterwegs) then
{
    heli_unterwegs = true;
   
    sleep 4 + (random 2);
       
        [west,"HQ"] sideRadio "evac2";
    sleep 0.5;
        [west,"HQ"] sidechat "AFFIRMATIVE. A VEHICLE IS ON THE WAY";
   
        _wp0 = group _heli addwaypoint [_pos, 0];
        _wp0 setwaypointtype "MOVE";
        _heli setCombatMode "blue";
        _heli setBehaviour "SAFE";
        _heli allowfleeing 0;
   
    waitUntil {_heli distance _pos < 500}; 
        _heli sideChat "CAN NOT SEE YOU, SIR!";
        sleep 1;
        _heli sideChat "THROW A GREEN SMOKEGRENADE TO MARK THE LZ!";
    deleteWaypoint [group _heli , 0];
        _wp1 = group _heli addwaypoint [_heli, 1];
        _wp1 setwaypointtype "HOLD";
   
    // nicht vergessen!! in die init-Zeile des Players: this addmagazine ["SmokeShellGreen",2];


    // EventHandler - der erkennt, wenn die Rauchgranate geworfen wurde - - - -
    vEHsmoke = player addEventHandler ["fired", {if (_this select 5 == "SmokeShellGreen") then {smokethrow=true; player removeEventHandler ["fired",vEHsmoke];}}];
    // - - - - - - - -   
   
    waitUntil {smokethrow};
   
        sleep 3;
   
        _heli sideChat "OK, WE CAN SEE THE SMOKE!";
        sleep 1;
        _heli sideChat "WE WILL LAND NEAR YOUR POSITION!";
   
        deleteWaypoint [group _heli, 1];
        _wp2 = group _heli addWaypoint [_pos, 2];
        _wp2 setwaypointtype "MOVE";
   
    waitUntil {_heli distance _pos < 100}; 

        _heli setspeedMode "LIMITED";
        _heli land "GET IN";
   
    waitUntil {getpos _heli select 2 < 5};    // getPos 'select 2' ist der dritte Wert einer Position, Länge x Breite x Höhe.
        _heli flyinHeight 2;

    waitUntil {{_x in _heli} count units group player == count units group player};
        _wp3 = group _heli addWaypoint [_lz,3];
        _wp3 setWaypointType "move";   
        _heli setspeedMode "normal";
        _heli flyinHeight 100;
   
    waitUntil {_heli distance _lz < 150};
        _heli setspeedMode "LIMITED";
        _heli land "LAND";
   
    waitUntil {isTouchingGround _heli};
        {_x action ["getOut", _heli];} forEach units group player;
        _heli action ["engineOff", _heli];
        deleteWaypoint [group _heli , 1];
        deleteWaypoint [group _heli , 2];
    heli_unterwegs = false;
};


Drunken Officer 18.01.2014 22:51

statt den WP zu löschen, nachdem die Granate geworfen wurde, mußt du diesen verschieben
setWPPos - Bohemia Interactive Community

Außerdem mußt du deinen Heli anhalten. Da nimmst du eine falsche Variable
Code:

waitUntil {_heli distance _pos < 500}; 
        _heli sideChat "CAN NOT SEE YOU, SIR!";
        sleep 1;
        _heli sideChat "THROW A GREEN SMOKEGRENADE TO MARK THE LZ!";
    deleteWaypoint [group _heli , 0];
        _wp1 = group _heli addwaypoint [_heli, 1];
        _wp1 setwaypointtype "HOLD";

Übersetzt:
warte bis Distanz kleiner 500
bla bla, schlafe, bla bla
lösche Wegpunkt mit Index 0
füge hinzu eine WP für Gruppe Heli auf der Position _heli mit dem Index 1.

_heli ist aber als select 0 definiert und somit dein Fahrzeug. Ein Pos-Angabe fordert einen Array!!!
dann mach es so:
Code:

deleteWaypoint [group _heli , 0];
_wartepos = getPos _heli;
        _wp1 = group _heli addwaypoint [_wartepos , 1];
        _wp1 setwaypointtype "HOLD";

Ich würde dafür eine While schleife nehmen.
Entweder der typ wirft ne Granate, dann von HOLD auf MOVE setzen oder aber, nach einer Zeit x,
alle Wegpunkte löschen und den HEli zurück zur Basis fliegen lassen.

Außerdem, was passiert, wenn der Spieler sieht, oh cool Rauch, ich werf mal eine. Dann ist bei deinem Script die Granate geworfen, wird aber u.U. nicht erkannt!
Also muss die Abfrage eher rein. Und dann sollte eine IF Abfrage kommen.

Die if (!heli_unterwegs) brauchst du nicht, da vorher das script beeendet wird, wenn der Heli bereits unterwegs ist


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