Visa ämne
Anrop » ArmA 2 » Editering
 Skriv ut ämne
Para drop av objekt
Hittade följande script
Kod Källa  


/*
cargoScript.sqf
By dmos
Modified by F2k Sel
And Modified by Xealot & Grip
V1.0Anrop

*/

 _carrier = _this select 0; // Probably the plane making the drop off
_dropItem = _this select 1; // Item you want to drop
_velFactor = 0.75; // The item being dropped will have a portion of the carrier's speed (but just for a bit; it won't continue flying or anything)

_carrierPos = getPos _carrier;
_dropPoint = +_carrierPos;
_dropPoint set [2, (_dropPoint select 2) - 0.5];
_dropVel = velocity _carrier;
_dropVel = [(_dropVel select 0)  * _velFactor, (_dropVel select 1) * _velFactor, -10];

sleep 0.15;

_parachute = "ParachuteMediumWest" createvehicle _dropPoint;
_dropItem setDir getDir _carrier;
_dropItem setPos _dropPoint;
 _dropItem attachTo [_parachute, [0,0,0]];
 _parachute setpos _dropPoint;
 _parachute setVelocity _dropVel;
 _parachute setDir (getDir _carrier) + 180;
 
 sleep 2;
 
 // all this mascarade below because if left just like this objects like ammo boxes get burried or something
 waitUntil {sleep 0.4;  ((getPos _dropItem) select 2) <  0.5};
 _dropItemPos = getPos _dropItem;
 _dropItemPos set [2,0];
 _dropItem setPos _dropItemPos;
 detach _dropItem;
_groundchute = "I44_parachute_g_ground2" createVehicle (getPos _dropItem);
_groundchute setPos (getPos _dropItem);


Aktiverat av
Kod Källa  

_thisIsAScriptHandle = [name_of_your_plane_or_heli, name_of_item_to_drop] execVm "cargoScript.sqf"

Vilket i mitt fall borde bli
_thisIsAScriptHandle = [C, AC1] execVm "cargoScript.sqf"

källa
http://www.armaholic.com/page.php?id=...p?id=14510

Men jag får de inte att funka.
Om någon som är lite bättre på sånt här skulle ha tid att ta en titt å förklara vad jag ska ändra för att få de och funka så vore de jätte uppskattat.
Får gärna ändra med typ röd text eller nåt sånt så jag eller andra ser vad som måste ändras.

Planet hetter just nu C
Och objektet AC1
Redigerat av Grip den 2012-09-13 23:53
visserligen är jag n00b på scripts men ska det inte finnas nån typ av interaction-meny med nånstans?
jag ser ingen text som säger att du ska flyga till en viss punkt och utföra detta , eller ladda lådan nånstans och SEN flyga och droppa den.
som detta script ser ut för mig skapas ett plan/helo nånstans (skapat av missionmakern) som sen släpper en låda på just den platsen.
det finns ett cargodrop-script färdigt på armaholic där du kan ändra typ av plan/helo som ska kunna lasta vissa typer av last , dock är då detta script gjort för MP-missions när man kan ha en pilot som flyger saker.
Du får gärna vara lite mer specifik än "det funkar inte".

Vad funkar eller rättare sagt när slutar det att fungera, får du några fel i rpt filen?
The enemy cannot predict your actions if you have no idea what you're doing.
De som inte funkar är att inget händer när jag använder scriptet. rpt osv har jag ingen koll på hur eller var jag ska gräva fram.
i mitt fall ser RPT-genvägen ut så här:
"C:\Users\Kent\AppData\Local\ArmA 2 OA\arma2OA.RPT"
sen om du aldrig använt den kan det va en bra ide att gå in och rensa den innan du testar ditt script.
öppna bara med typ notepad eller liknande så funkar det.
grip, antar att du kör scriptet från ett av flygplanets waypoints?

och att du startar scriptet med
thisIsAScriptHandle = [C, AC1] execVm "cargoScript.sqf"
utan _ före

eller är du ute efter ett script som spawnar ett plan flyger in och droppar objektet, flyger iväg och deletas?
Arma hade gnällt redan i editorn om du försökt spara script handle som en lokal variabel i ett "global space" med en varningsruta och inte ens tillåtit att han sparade den raden i en waypoint onact.

Bara en heads up Smile
Som jag sa på teamspeak så rekommenderar jag att du debuggar scriptet själv, släng in hints eller sidechats eller diag_log (<- visas bara i rpt filen) för att se vart scriptet stannar.
The enemy cannot predict your actions if you have no idea what you're doing.
Okej problemet var att jag råkat ta med ordet Code: i början av filen:facepalm:
Redigerat av Grip den 2012-09-12 23:49
Nu till nästa problem efter om de inte skapas någon fallskärm på marken går de knappt att hitta igen de man släpper(Särskilt inte när föremålet är 1Mx30CM och grönt)

Så hur gör jag för att skappa ett föremål
Kod Källa  

I44_parachute_g_ground2

Vid själva nedslagsplatsen, utgår från att de borde gå med all information jag får från scriptet.
Själv tänkte jag att de borde va nåt i still med.
Kod Källa  

 sleep 2;(bara för att föremålet ska hinna landa riktigt)
_groundchute = "I44_parachute_g_ground2" createvehicle _dropItem;
_groundchute getPos _dropItem;
borde funka.. lägg till den i slutet av scriptet efter detach kommandot. ta bort sleepen
edit: ta bort sista raden, den bör vara onödig men får du problem med att chuten klippar igenom marken eller dylikt kan du försöka med
_groundchute setPos (getPos _dropItem);
Redigerat av xealot den 2012-09-13 12:32
The enemy cannot predict your actions if you have no idea what you're doing.
Tjo.
Har ett redigerat script set från Mandobe som jag fått att funka.
det är 2 filer, en som gör själva skärmen och det som droppas och Mandobes script styr ner skärmen inom en valfri radie.

GRIP om du kollar i senare delen a mando_chute scriptet ser du hur jag får dit ammolådan efter att ha låtit en vägkon vara det som hängt i skärmen.

the_chute
Använder den som en spawnfunction inne i ett script, klippt ut den del som behövs med lite kod innan och efter so visar hur jag använder det på en heli som spawnas in flyger in med grejjorna och sen ut igen och despawnas.
Kod Källa  


// define nedan är i början av filen innan all kod.

#define __exit if (!alive _driver || !alive _plane || !canMove _plane) exitWith {[_crew,_plane] spawn _delete_chop;_may_exit = true}

while {(_plane distance _targetpos) > _dist_to_drop} do {
   sleep 0.556;
   __exit; //defined script part check ifAlive mm
   _driver doMove _targetpos;
   };
sleep 0.512;
//  [color=#0000ff]här börjar den del som skapar skärmen "_the_chute" och ev fordon, ammo låda mm[/color]
// [color=#0000ff]
Parametrar: Type av fallskärm (class), Drop heli (object), Det som ska droppas (class),Pos för drop (markerPos)
[/color]
_scr = [_the_chute, _plane, mando_airsupport_type_ambox, _targetpos, _player] spawn
{   
private ["_para","_the_chute","_plane","_vehicle","_drop_type","_drop_posx","_player","_drop_radius","_is_ammo"];
   _the_chute = _this select 0;
   _plane = _this select 1;
   _drop_type = _this select 2;
   _drop_posx = _this select 3;
   _drop_radius = floor (random 10);//<<<<<<< [color=#0000ff] sätt en random radie här eller ändra till valfritt nummer (i meter)[/color]
   _drop_posx = [_drop_posx select 0, _drop_posx select 1, 0];
   sleep 1.512;
   _vehicle = objNull;
   _is_ammo = false;
   _para = objNull;
   if (_drop_type isKindOf "ReammoBox") then {  // ammoboxar beter sig lite speciellt i luften, de brukar fastna :|   _is_ammo = true;
   _para = createVehicle [_the_chute, [(getPosASL _plane) select 0,(getPosASL _plane) select 1,((getPosASL _plane) select 2)-20], [], 0, "FLY"];
   _para setpos [(getPosASL _plane) select 0,(getPosASL _plane) select 1,((getPosASL _plane) select 2) - 20];
   } else {
   _vehicle = createVehicle [_drop_type, [(getPosASL _plane) select 0,(getPosASL _plane) select 1,((getPosASL _plane) select 2)-20], [], 0, "NONE"];
   _vehicle setposASL [(getPosASL _plane) select 0,(getPosASL _plane) select 1,((GetposASL _plane) select 2) - 20];
   _para = createVehicle [_the_chute, [0,0,0], [], 0, "FLY"];
   _para setPos (_vehicle modelToWorld [0,0,2]);
   _vehicle attachTo [_para,[0,0,0]];
   };
         waitUntil {!(isNull _para)}; // se till att skärmen skapats innan du kallar på styrscriptet
         null = [_vehicle, _drop_posx, _drop_radius, _drop_type, _para, _is_ammo] execVM "scripts\mando_chute.sqf";
};//[color=#cc0000] slut på delen för The_chute[/color]
// [color=#0000ff]Nedan endast lite mer kod från det script jag håller på med[/color]

   waitUntil {scriptdone _scr};// waitUntil commandot bör användas med försiktighet, det kan låsa sig av olika anledningar när villkoret blir komplext och ger inget error meddelande eller något i RPT'n, med ett scripthandle fungerar det felfritt. med andra ord är villkoret komplext skriv det som en funktion och spawna det med ett script handle
   _driver doMove _spawnpos;
   _starttime = time + 300;
   sleep 0.512;
   _plane flyinHeight 35;
   _done = true;
   while {_done} do{
   sleep 2.556;
   __exit;
   if ((time > _starttime) || (_plane distance _spawnpos) < (mando_airsupport_bomb_alt +150)) then {
   _done = false;
   };
};
};
};
         __del;


Har lagt in en del kommentarer som borde hjälpa till lite.
Nästa fil är ett som helt enkelt ser till at skärmen och det du hängt upp i den kommer till den punkt som du sagt med den fel marginal du angett + lite av spelets inbyggda fel marginal.
I slutet av filen kallar jag på ett par globala arrayer som innehåller det jag vill ha i ammolådan
Filen jag kallar på är Mando_chute.sqf och ser ut som följer:
Kod Källa  



/*
   mando_chute.sqf v1.1
   by Mandoble
Edit by _MTL
   Moves a chute to the landing position
*/

private ["_man","_chuto","_target_pos","_rad","_box","_bla","_is_ammo","_deg_sec","_dir","_ang","_posc","_dif","_difabs","_turn","_hspd","_max_spd","_deltatime","_timeold","_vh","_vz","_acc","_cone","_detached","_pos_man","_helper1","_pos_conex"];
_man = _this select 0;
_target_pos = _this select 1;
_rad = _this select 2;
_bla = _this select 3;
_chuto = _this select 4;
_is_ammo = _this select 5;

if (count _target_pos == 2) then {_target_pos set [count _target_pos, 0]};
_ang = random 360;
_target_pos = if (_rad == 0) then {
   [_target_pos select 0, _target_pos select 1, 0]
} else {
    [(_target_pos select 0) + (sin _ang) * _rad, (_target_pos select 1) + (cos _ang) * _rad, 0]
};

_deg_sec = 30;
_max_spd = 4;
_hspd = _max_spd;
_acc = 2;
_vh = 0;
_vz = -3;
//hintC Format ["the Chute %1 %2 %3 %4 %5 %6",_man,_target_pos,_rad,_bla,_chuto,_is_ammo];
_timeold = time;
_dir = getDir _chuto;
_chuto setDir _dir;
_posc = getPosATL _chuto;
_cone = "RoadCone" createVehicleLocal [0,0,0];
_cone setDir _dir;
_cone setPosATL [_posc select 0, _posc select 1, (_posc select 2) - 4];
_posc = getPosATL _cone;
_detached = false;
_box = objNull;
while {alive _chuto && (getPos _chuto select 2) > 5} do {
   _deltatime = (time - _timeold) max 0.001;
   _timeold = time;
   
   _posc = getPosATL _cone;
   _ang = ((_target_pos select 0) - (_posc select 0)) atan2 ((_target_pos select 1) - (_posc select 1));
   if (([_target_pos select 0, _target_pos select 1, 0] distance [_posc select 0, _posc select 1, 0]) > (getPos _cone select 2)) then {
      if ((_vz + 0.5 * _deltatime) < -1.5) then {_vz = _vz + 0.5 * _deltatime};
   } else {
      if ((_vz - 0.5 * _deltatime) > -3) then {_vz = _vz - 0.5 * _deltatime};
   };

   _dif = _ang - _dir;
   if (_dif < 0) then {_dif = 360 + _dif};
   if (_dif > 180) then {_dif = _dif - 360};
   _difabs = abs _dif;
 
   _turn = if (_difabs > 0.01) then {_dif / _difabs} else {0};

   _dir = _dir + (_turn * ((_deg_sec * _deltatime) min _difabs));

   if (_vh < _hspd) then {
      _vh = _vh + (_acc * _deltatime);
   } else {
      if (_vh > _hspd) then {_vh = _vh - (_acc * _deltatime)};
   };

   _hspd = if (_difabs > 45) then {_max_spd / 3} else {_max_spd};
   _cone setDir _dir;
   _cone setVelocity [(sin _dir) * _vh, (cos _dir) * _vh, _vz];
   if (!isNull _man) then {_man setDir _dir};
   _chuto setPos (_cone modelToWorld [0,0,4]);
   _chuto setDir _dir;
   
   if (!_is_ammo && !_detached) then {
      if (position _man select 2 <= 4) then {
         detach _man;
         _detached = true;
         _pos_man = position _man;
         _helper1 = "HeliHEmpty" createVehicleLocal [_pos_man select 0, _pos_man select 1, 0];
         _helper1 setPos [_pos_man select 0, _pos_man select 1, 0];
         _man setPos [_pos_man select 0, _pos_man select 1, 0];
         _man setVectorUp (vectorUp  _helper1);
         deleteVehicle _helper1;
      };
   };
   sleep 0.01;
};
_pos_conex = [position _cone select 0,position _cone select 1,0];
deleteVehicle _cone;
if (_is_ammo) then
   {
//hintC Format ["Create the bloody box %1 %2 %3 %4 %5 %6",_box,_target_pos,_rad,_bla,_chuto,_is_ammo];
   _box = _bla createVehicle _pos_conex;
   while {(isNull _box)} do {
   sleep 0.128;
   };
   _box setPosATL _pos_conex;
   _weaps = "";
   if ((count mando_airsupport_magz) > 0) then
      {
      _weaps = "clearMagazineCargo this;";
         {_weaps = _weaps + format["this addMagazineCargoGlobal [""%1"", %2];", (_x select 0),(_x select 1)];
            } forEach mando_airsupport_magz;
      };
   if ((count mando_airsupport_weap) > 0) then
      {
         _weaps = _weaps + "clearWeaponCargo this;";
      {_weaps = _weaps + format["this addWeaponCargoGlobal [""%1"", %2];", (_x select 0),(_x select 1)];
         } forEach mando_airsupport_weap;
      };
   if (_weaps != "") then
      {
      _box SetVehicleInit _weaps;
      processInitCommands;
      };
   deleteVehicle _chuto;
   } else {
   if (position _man select 2 <= -1) then
      {
      _pos_man = position _man;
      _helper1 = "HeliHEmpty" createVehicleLocal [_pos_man select 0, _pos_man select 1, 0];
      _helper1 setPos [_pos_man select 0, _pos_man select 1, 0];
      _man setPos [_pos_man select 0, _pos_man select 1, 0];
      _man setVectorUp (vectorUp  _helper1);
      deleteVehicle _helper1;
      };
   deleteVehicle _chuto;
   };



Hoppas det kan hjälpa dig med scriptet du håller på med, svor ett antal eder över WaitUntil kommandot, begrep inte vad som låste.
Gjorde om dem till en while DO sats istället.
Ha det.
Metal
Redigerat av metal den 2012-09-18 01:33
slöben och lite kod knackare Cool