[SSOT] Sharif 1,254 Report post Posted April 15, 2018 (edited) В общем суть такова, есть десант на C-130J к нему идет два Airborne отделения. Так как администрация WOG3 не собирается добавлять мод Backpack on chest или какие-либо другие решения, появилась идея найти/написать скрипт для высадки без потери рюказака/ДВ. Так как я кодер не профессиональный, пошел искать решение на форумах. Нашел скрипт:http://www.armaholic.com/page.php?id=23113 Лишний функционал вырезал (звуки, хим.светы на касках). Также на выделенном сервере была проблема при высадке пехоты (все кроме командира отделения телепортировались обратно в самолет после 3 секунд в воздухе). Заменил команду _unit action ["EJECT", _vehicle]; на moveOut _unit; и проблема решилась. На данный момент при тесте на выделенном сервере проблем не обнаружил, однако требуется дополнительное тестирование с несколькими игроками (также неизвестно, как поведет себя при высадки 20 человек из одного самолета). В общем, хотел дать данный скрипт на обозрение более опытным скриптерам вога. Вот код скрипта, который я использовал: Спойлер /* File: fn_paradrop.sqf Version: 1.1 Author(s): cobra4v320 - effects adapted from old halo.sqs, sounds from freesound.org Description: allows AI units and players to paradrop - fixes AI bug Parameters: 0: UNIT - (object) the unit that will be doing the paradrop 1: VEHICLE - (object) the vehicle that will be doing the paradrop 2: (optional) SAVELOADOUT - (boolean) true to save backpack and its contents, and add a "fake" backpack to the front of the unit. 3: (optional) CHEMLIGHT - (boolean) true if the units will use chemlights Example(s): [this, helo_1, true] call COB_fnc_paradrop */ if (!isDedicated) then { //Parameters private ["_unit","_vehicle","_saveLoadOut"]; _unit = [_this, 0, objNull, [objNull]] call BIS_fnc_param; _vehicle = [_this, 1, objNull, [objNull]] call BIS_fnc_param; _saveLoadOut = [_this, 2, true, [true]] call BIS_fnc_param; //Validate parameters if (isNull _unit) exitWith {"Unit parameter must not be objNull. Accepted: OBJECT" call BIS_fnc_error}; if (isNull _vehicle) exitWith {"Vehicle parameter must not be objNull. Accepted: OBJECT" call BIS_fnc_error}; //create a log entry ["Paradrop function has started"] call BIS_fnc_log; //save the backpack and its contents, also adds fake pack to front of unit if (_saveLoadOut && !isNull (unitBackpack _unit)) then { private ["_pack","_class","_magazines","_weapons","_items"]; _pack = unitBackpack _unit; _class = typeOf _pack; _magazines = getMagazineCargo _pack; _weapons = getWeaponCargo _pack; _items = getItemCargo _pack; removeBackpack _unit; //remove the backpack _unit addBackpack "b_parachute"; //attach the bacpack to the unit [_unit,_class,_magazines,_weapons,_items] spawn { private ["_unit","_class","_magazines","_weapons","_items"]; _unit = _this select 0; _class = _this select 1; _magazines = _this select 2; _weapons = _this select 3; _items = _this select 4; private "_packHolder"; _packHolder = createVehicle ["groundWeaponHolder", [0,0,0], [], 0, "can_collide"]; _packHolder addBackpackCargoGlobal [_class, 1]; waitUntil {animationState _unit == "para_pilot"}; _packHolder attachTo [vehicle _unit,[-0.07,0.67,-0.13],"pelvis"]; _packHolder setVectorDirAndUp [[0,-0.2,-1],[0,1,0]]; waitUntil {isTouchingGround _unit || (getPos _unit select 2) < 1}; deleteVehicle _packHolder; //delete the backpack in front _unit addBackpack _class; //return the backpack clearAllItemsFromBackpack _unit; //clear all gear from new backpack for "_i" from 0 to (count (_magazines select 0) - 1) do { (unitBackpack _unit) addMagazineCargoGlobal [(_magazines select 0) select _i,(_magazines select 1) select _i]; //return the magazines }; for "_i" from 0 to (count (_weapons select 0) - 1) do { (unitBackpack _unit) addWeaponCargoGlobal [(_weapons select 0) select _i,(_weapons select 1) select _i]; //return the weapons }; for "_i" from 0 to (count (_items select 0) - 1) do { (unitBackpack _unit) addItemCargoGlobal [(_items select 0) select _i,(_items select 1) select _i]; //return the items }; }; } else { if ((backpack _unit) != "b_parachute") then {_unit addBackpack "B_parachute"}; //add the parachute if unit has no backpack }; //eject from vehicle [_unit,_vehicle] spawn { private ["_unit","_vehicle","_altitude"]; _unit = _this select 0; _vehicle = _this select 1; _altitude = (getPos _vehicle select 2); _unit allowDamage false; //keep the AI from being injured when in para_pilot, its an AI bug moveOut _unit; _unit setDir getDir _vehicle; _unit setPos [(getPos _vehicle select 0), (getPos _vehicle select 1) - random 15 + random 30, _altitude - 4]; _unit setVelocity [0,20,-20]; waitUntil {isTouchingGround _unit || (getPos _unit select 2) < 1}; //wait for unit to touch ground if (!isPlayer _unit) then { _unit setPos [(getPos _unit select 0), (getPos _unit select 1), 0]; //this removes the unit from the parachute _unit setVelocity [0,0,0]; //set speed to zero _unit setVectorUp [0,0,1]; //set the unit upright sleep 1; _unit allowDamage TRUE; //allow unit to be damaged again } else { _unit allowDamage TRUE; //allow unit to be damaged again }; }; //create a log entry ["Paradrop function has completed"] call BIS_fnc_log; //Return Value _unit; }; Инициализация в init.sqf. Actionmenu выдается только тем, кто внутри C-130J при определенной скорости и высоте самолета. (спасибо [SW] Lex) Спойлер if !(isDedicated) then { _jumpCondition = "(((getPos (vehicle player)) select 2) >= 240) && !((vehicle player) isEqualTo player) && (typeOf (vehicle player) == 'RHS_C130J') && (((getPos (vehicle player)) select 2) <= 400) && (speed vehicle player <= 300)"; actionHandle = player addAction ["<t color='#FF0000'>PARADROP</t>", "[player, vehicle player, true] call COB_fnc_paradrop", "", 6, false, true, "", _jumpCondition]; }; Также надо было определить функцию в description.ext Спойлер class CfgFunctions { class COB { class functions { class paradrop {file = "COB_HALO\functions\fn_paradrop.sqf"}; }; }; }; Edited April 25, 2018 by Sharif 2 MIPOTBOPEC and KOHCTPYKTOP reacted to this Share this post Link to post Share on other sites
[KND] grfn 1,840 Report post Posted April 15, 2018 (edited) Я делал примерно так Спойлер Была попытка сохранения содержимого, использовалось примерно такое же решение,как в твоем примере, однако на играх вылезло боком, когда при высадке дюпалась снаряга сотнями штук. Edited April 15, 2018 by grafon 1 Sharif reacted to this Share this post Link to post Share on other sites
[BE] Merans 2,440 Report post Posted April 15, 2018 2 часа назад, Sharif сказал: Так как администрация WOG3 не собирается добавлять мод Backpack on chest или какие-либо другие решения Ставишь любой ящик, скидываешь туда дв, через эйс меню грузишь в вертолет (самолет), взлетаешь, так же через эйс меню сбрасываешь ящик, при посадке он помечается желтыми дымами. Share this post Link to post Share on other sites
[SSOT] Sharif 1,254 Report post Posted April 15, 2018 15 минут назад, Merans сказал: Ставишь любой ящик, скидываешь туда дв, через эйс меню грузишь в вертолет (самолет), взлетаешь, так же через эйс меню сбрасываешь ящик, при посадке он помечается желтыми дымами. Иногда эти ящики улетают в космос при посадке, да и задача еще была в том, что бы ограничить хало джампы с 3км. Share this post Link to post Share on other sites
[BE] krech 996 Report post Posted April 16, 2018 23 часа назад, Merans сказал: Ставишь любой ящик, скидываешь туда дв, через эйс меню грузишь в вертолет (самолет), взлетаешь, так же через эйс меню сбрасываешь ящик, при посадке он помечается желтыми дымами. сам понимаешь - проблемно это довольно Share this post Link to post Share on other sites
[BE] krech 996 Report post Posted April 16, 2018 @Sharif видео есть теста? если, что могу помочь в чем-нибудь Share this post Link to post Share on other sites
[SSOT] Sharif 1,254 Report post Posted April 16, 2018 @krech Думаю в конце недели найду время, соберу волю и соотрядников и потестирую с записью. За предложение спасибо, думаю лучшей помощью будет подкинуть идей для стресс теста, может я пропущу что-то, что надо протестировать. Share this post Link to post Share on other sites
[FRWL] Lex 431 Report post Posted April 16, 2018 Есть несколько вопросов по коду в init.sqf: 1. Зачем вообще нужна пауза 5 секунд? sleep 5; 2. Что это вообще за извращение? for "_i" from 0 to 1 step 0 do Попытка сделать бесконечный цикл? Для этого есть оператор while: while {true} do { //код }; Если это копипаст, то вопросов тогда нет, и советую эту писанину переписать на что-то подобное: if !(isDedicated) then { _jumpCondition = "(((getPos (vehicle player)) select 2) >= 240) && !((vehicle player) isEqualTo player) && (typeOf (vehicle player) == 'RHS_C130J') && (((getPos (vehicle player)) select 2) <= 400) && (speed vehicle player <= 300)"; actionHandle = player addAction ["<t color='#FF0000'>PARADROP</t>", "[player, vehicle player, true] call COB_fnc_paradrop", "", 6, false, true, "", _jumpCondition]; }; 2 Sharif and grfn reacted to this Share this post Link to post Share on other sites
[SSOT] Sharif 1,254 Report post Posted April 16, 2018 @Lex пауза была из-за того, что без неё миссия не запускалась.Костыли на костыле Share this post Link to post Share on other sites
[SSOT] Sharif 1,254 Report post Posted April 25, 2018 Видео тестов, все были сделаны на выделенном сервере. Спойлер 5 Player, Stelzz, Merans and 2 others reacted to this Share this post Link to post Share on other sites
[KND] JackReign 2,983 Report post Posted April 26, 2018 @Sharif @grafon решена ли проблема дюпа снаряжения в рюкзаках, в этом скрипте? Share this post Link to post Share on other sites
[SSOT] Sharif 1,254 Report post Posted April 26, 2018 @JackReign при тестах с игроками и в одиночку такой проблемы не было. Думаю окончательно можно будет сказать после использования на играх. Share this post Link to post Share on other sites
[KND] JackReign 2,983 Report post Posted April 26, 2018 @Sharif отпиши пожалуйста после теста на играх. Share this post Link to post Share on other sites