HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Fallschirmspringer anfordern (https://hx3.de/editing-scripting-167/fallschirmspringer-anfordern-17800/)

bigbigmek 31.08.2009 13:28

Fallschirmspringer anfordern
 
Ich möchte mir ein script schreiben mit dem ich einen trupp falschirmspringer anfordern kann.

Die Theorie hirzu schaut wie folgt aus.

ini.sqs
Code:


callParaTroopers = compile preprocessFile "callParaTroop.sqf";
paraTroopsJump = compile preprocessFile "ParaTroopsJump.sqf";

_spawnPos = [0,0,1000];
_vehicle = "vehicleName";
_groupArray = ["soldier0", "soldier1", "soldier2", "soldier3"];

onMapSingleClick "paraGroup = call [_spawnPos, _pos, _vehicle, _groupArray] callParaTroopers;";

callParaTroop.sqf

Code:


_spawnPoint    = _this select 0;
_jumpPoint    = _this select 1;
_vehicleType    = _this select 2;
_soldiers    = _this select 3;

_newGroup = createGroup west;

_vehicle = _vehicleType createVehicle[_spawnPoint];
_waypoint = _vehicle addWaypoint[_jumpPoint,0];
  _waypoint select 0 setWaypointType "MOVE";
  _waypoint select 0 setWaypointSpeed "LIMITED";
_waypoint = _vehicle addWaypoint[[0, 0, 0],0];
  _waypoint select 1 setWaypointType "SCRIPTED";
  _waypoint select 1 setWaypointScript "call [waypointAttachedVehicle [_this, 1]] paraTroopsJump;";
/*waypointAttachedVehicle sollte irgendwie das fahrzeug zurück geben*/
_waypoint = _vehicle addWaypoint[_spawnPoint,0];
  waypoint select 2 setWaypointType "MOVE";
  _waypoint select 2 setWaypointSpeed "FULL";
_waypoint = _vehicle addWaypoint[[0, 0, 0],0];
  _waypoint select 3 setWaypointType "SCRIPTED";
  _waypoint select 3 setWaypointScript "deleteVehicle waypointAttachedVehicle [_this, 1];";

for "_index" from 0 to count _soldiers do
{
  _tempSold = _soldiers select _index createUnit[[0,0,0], _newGroup];
  _tempSold moveInCargo _vehicle;
};
_newGroup; //keine ahnung wie man einen wert zurück gibt

ParaTroopsJump.sqf
Code:

_vehicle = _this select 0;
_soldiers = _vehicle assignedCargo;

{sleep random 1; _x moveOut;} foreach _soldiers;

könnte das so funktionieren.
kann es leider momentan nicht testen.
geht mir eigentlich nur mal darum ob das von der logik her so funktionieren würde, oder ob ich es anders machen muss.

edit:
ok das
_waypoint select 1 setWaypointScript "call [waypointAttachedVehicle [_this, 1]] paraTroopsJump;";
ist blödsinn

aber das sollte funktionieren

_waypoint select 1 setWaypointScript "call [this] paraTroopsJump;";

bigbigmek 31.08.2009 23:02

ok habs leider heute nichtmehr hinbekommen stehe aber kurz davor.

hier mal meine resultate.

init (funktioniert)
Code:


 
callParaTroopers = compile preprocessFile "callParaTroop.sqf";
 
_spawnPos = [600,600,600];
_vehicle = "C130J";
groupArray = ["USMC_Soldier", "USMC_Soldier", "USMC_Soldier", "USMC_Soldier"];
onMapSingleClick {hint 'onMapSingleClick'; paraGroup = [[1500,1500, 800], _pos, "C130J", groupArray] call callParaTroopers;}
_waypoint = player addWaypoint[[600,600,0],0];
  _waypoint select 0 setWaypointType "MOVE";
player flyInHeight _spawnPoint select 2;

callParaTroop (funktioniert bis auf das waypointscript)
Code:


_spawnPoint    = _this select 0;
_jumpPoint    = _this select 1;
_jumpPoint set [2,_spawnPoint select 2];
_vehicleType    = format['%1', _this select 2];
_soldiers    = _this select 3;
_vehicle = createVehicle [_vehicleType, _spawnPoint, [], 0, "FLY"];
_vehicle setPos [getPos _vehicle select 0, getPos _vehicle select 1, _spawnPoint select 2];
_pilotes = createGroup west;
_pilote = _pilotes  createUnit ["USMC_Soldier_Pilot",_spawnPoint ,[], 0, "NONE"];
_pilote moveInDriver _vehicle;
_waypoint = _pilotes addWaypoint[_jumpPoint,0];
 [_pilotes,0]  setWaypointType "MOVE";
 [_pilotes,0] setWaypointSpeed "LIMITED";
 _vehicle flyInHeight  800;
 
_waypoint = _pilotes addWaypoint[[0, 0, 0],0];
  [_pilotes,1] setWaypointType "SCRIPTED";
  [_pilotes,1] setWaypointScript "ParaTroopsJump.sqs [this]";
 
_waypoint = _pilotes addWaypoint[_jumpPoint,0];
 [_pilotes,2]  setWaypointType "MOVE";
 [_pilotes,2] setWaypointSpeed "FULL";
_waypoint = _pilotes addWaypoint[[0, 0, 0],0];
  [_pilotes,3] setWaypointType "SCRIPTED";
  [_pilotes,3] setWaypointScript "deleteVehicle this";
 
_newGroup = createGroup west;
 
for "_i" from 0 to count _soldiers do{_soldier = _newGroup  createUnit ["USMC_Soldier",_jumpPoint ,[], 0, "NONE"]; _soldier moveInCargo _vehicle;};
player moveInCargo _vehicle;
_newGroup;

ParaTroopsJump (-)
Code:

_vehicle = _this select 0;
_soldiers = _vehicle assignedCargo;
for "_i" from 0 to count _soldiers do{ _i _vehicle;};

mein problem irgendwie fliegt er die wegpunkte nicht ab, sondern geht gleich zum letzten

bigbigmek 01.09.2009 19:53

ok jetzt funktioniert alles bis auf dieses kleine script


Code:


_driver = _this select 0;
_vehicle = assignedVehicle _this select 0;
_soldiers =  assignedCargo _vehicle;
hint format [ "driver: %1 vehicle: %2 soldiers: %3" ,_driver , _vehicle,  _soldiers];

for "_i" from 0 to count (_soldiers) do{ _i leaveVehicle _vehicle;};

ich komme einfach nicht drauf warum das nicht funktioniert.

kann mir wer helfen?

achja in _this 0 sollte der pilot stehen

siehe:
[_pilotes,1] setWaypointScript "ParaTroopsJump.sqs [this]";

bigbigmek 01.09.2009 23:11

EDIT:
script funktioniert jetzt.
kann beliebige viele flugzeuge spawnen lassen welche, brav ihre truppen abwerfen und dann zurücklfiegen und sich anschließend in luft auflösen.
auch wenn es bei 20 flugzeugen zu 12 soldaten schon arg zu ruckeln beginn bei mir.
schaut aber dafür umso cooler aus ;)

ps: schau es mir morgen nochmal durch und poste es dann hier.

bigbigmek 02.09.2009 21:06

Script ist fertig

hier ist der link zu meinem script.
würde mich freuen wenn es wer testen will.

ParaTroopsScript.zip ... at uploaded.to - Free File Hosting, Free Image Hosting, Free Music Hosting, Free Video Hosting, ...

aufgerufen wird das script wie folgt.


Code:


callParaTroopers = compile preprocessFile "callParaTroop.sqf";
 
returnValue= [spawnPosition, JumpPosition, VehicleName, groupArray] call callParaTroopers;

returnValue = ist die soldaten gruppe die erstellt wurde und am festgelegten punkt abspringt.

spawnPosition = ist die spawn position des vehicles
JumpPosition = ist der punkt wo die falschrimspringer abgeworfen werden.
VehicleName = klassenname des Fahrzeugs
groupArray = array mit klassennamen der soldaten die gespawnt werden sollen.

beispiel:
Code:

groupArray = ["USMC_Soldier", "USMC_Soldier", "USMC_Soldier"];
onMapSingleClick {paraGroup = [[1500,1500, 200], _pos, "C130J", groupArray] call callParaTroopers;}

dieser code erzeugt bei einem mapclick ein flugzeug vom type C130J an position 1500,1500,200 das zu position _pos fliegt und dort 3 soldaten vom type USMC_Soldier abwirft, danach wieder zu position [1500,1500,200] fliegt und dann verschwindet.

bei fragen stehe ich gerne zu verfügung auch anregungen höre ich gerne.
ist mein erstes script ich hoffe es kann jemand damit was anfangen. :)

Anemia 03.09.2009 06:56

bin echt gespannt ... werd es aufjedenfall am we mal testen.
Vorher habe ich keine zeit ...:(


EDIT:
Ist das script auch MP fähig ?

bigbigmek 03.09.2009 08:46

Zitat:

Zitat von Anemia (Beitrag 264692)
bin echt gespannt ... werd es aufjedenfall am we mal testen.
Vorher habe ich keine zeit ...:(


EDIT:
Ist das script auch MP fähig ?

hmm ich weis nicht, hab mich mit MP nochnicht beschäftigt.
wenns nicht multiplayertauglich ist mach ich so schnell wie möglich mutliplayertauglich.
was müsste ich den da beachten?
ich schau mal die wiki durch vieleicht find ich was.


edit:
schaut kompliziert aus, wenns wo tuts für mp scirpting gibt wäre ich dankbar wenn hier wer die links posten würde oder mir per pn schickt.

ps:
script ist natürlich frei, jeder kann es ändern und verwenden wo er will.
wenn wer angeben möchte das das scirpt von mir ist bin ich natürlich auch nicht beleidigt ;)

editedit:

wichtiger hinwesi hab ich oben vergessen
ParaId=0;
muss vor dem ersten scriptaufruf ausgeführt werden

Anemia 03.09.2009 09:43

Also damit es MP fähig wird , müssen globale variablen definiert werden, macht man in der Init.

in wievern das nun funktioniert kann ich dir auch nicht sagen. So hab ich es aufjedenfall in meiner Coop Map für die Tasks gemacht , damit die bei allen spielern die später ins spiel kommen .. die "fertigen" tasks auch schon erfüllt sind.

bin mir bei deinem script natürlich nicht sicher ob bzw. welche varibalen du als global definieren musst. :ugly:


P.s.:
setz doch einfach einen Header in dein Script ... in dem kannst du dann auch die editir möglichkeiten erfassen ... wie z.b.

Code:

; Improvised Explosive Device Script
; By Jeevz
; v1.2 12/13/06


; This script will create an explosion of a
; selected size on any object when called
; The arguments are [objectName, explosionPower]
; Explosion Power will be 1 of 4 choices
; Small - Good for Anti-Personnel use
; Medium - Will usually disable a Humvee without killing the occupants
; Large - Will usually destroy a passing humvee and kill or severly injure all occupants, will disable the tracks and possibly engine on M1A1
; Huge - Nothing will survive, I mean... it's HUGE :-)



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