Hi Dorph,

Originally Posted by
[HUD]Dorph
Thx Bob - Xeno already fixed it in latest ver
Another question - I used to change the welcome message when you board the liftchopper. I did that in the
"x_client\x_chop_hud.sqf" where the text was. Now the text isnt there anymore, but refers to a mission string like
_welcome_str2 = localize "STR_DOM_MISSIONSTRING_184";
Where do i change that welcome message ?
I'm back from a holiday in Turkey.
I have inserted the "MISSINSSTRING" in the two files.
These refer to the "stringtable.xml" for version 2.61 and the grip height is now at least 15 meters.
That should be a relief for those who can not make it themselves.
Greetings from Bob
x_chop_hud.sqf
Code:
// by Xeno
#define THIS_FILE "x_chop_hud.sqf"
#include "x_setup.sqf"
private ["_state", "_vec", "_hud", "_control", "_chopttype", "_hudoff", "_nobjects", "_nearest", "_dummy", "_chdispx", "_nx", "_ny", "_px", "_py", "_control2", "_angle", "_a", "_b", "_dif", "_chdispx2", "_controlxx","_distvstr"];
sleep 1.012;
_X_Chopper_Welcome = {};
disableSerialization;
if (GVAR(show_chopper_welcome)) then {
GVAR(rsc_end) = true;
GVAR(xxvllist) = [];
_X_Chopper_Welcome = {
private ["_state", "_vec", "_welcome_str1", "_welcome_str2", "_welcome_str3", "_welcome_str4", "_end_welcome", "_hud", "_control"];
disableSerialization;
GVAR(rsc_end) = false;
PARAMS_2(_state,_vec);
_welcome_str1 = format [localize "STR_DOM_MISSIONSTRING_183", GVAR(name_pl)];
switch (_state) do {
case 1: {
_welcome_str2 = localize "STR_DOM_MISSIONSTRING_184";
_welcome_str3 = localize "STR_DOM_MISSIONSTRING_185";
};
case 0: {
_welcome_str2 = localize "STR_DOM_MISSIONSTRING_186";
_welcome_str3 = localize "STR_DOM_MISSIONSTRING_187";
};
default {
_welcome_str2 = localize "STR_DOM_MISSIONSTRING_188";
_welcome_str3 = localize "STR_DOM_MISSIONSTRING_189";
};
};
_ttyp = toUpper (typeOf _vec);
if (count GVAR(xxvllist) == 0) then {
{GVAR(xxvllist) set [count GVAR(xxvllist), toUpper _x]} forEach GVAR(check_ammo_load_vecs);
};
_welcome_str4 = if (_ttyp in GVAR(xxvllist)) then {
(localize "STR_DOM_MISSIONSTRING_190")
} else {
(localize "STR_DOM_MISSIONSTRING_191")
};
_end_welcome = time + 14;
67322 cutRsc ["chopper_hud", "PLAIN"];
_hud = __uiGetVar(DCHOP_HUD);
#define __CTRL(A) (_hud displayCtrl A)
while {vehicle player != player && alive player && player == driver _vec} do {
__CTRL(64438) ctrlSetText _welcome_str1;
__CTRL(64439) ctrlSetText _welcome_str2;
__CTRL(64440) ctrlSetText _welcome_str3;
__CTRL(64441) ctrlSetText _welcome_str4;
if (time >= _end_welcome) exitWith {};
sleep 0.431;
};
67322 cutRsc ["Default", "PLAIN",1];
GVAR(rsc_end) = true;
};
};
_ui_forward = "\CA\ui\data\ui_tankdir_forward_ca.paa";
_ui_back = "\CA\ui\data\ui_tankdir_back_ca.paa";
_ui_left = "\CA\ui\data\ui_tankdir_left_ca.paa";
_ui_right = "\CA\ui\data\ui_tankdir_right_ca.paa";
_ui_tohigh = "\CA\ui\data\tankdir_turret_ca.paa";
_ui_ok = "\CA\ui\data\ui_tankdir_tower_ca.paa";
_distvstr = (localize "STR_DOM_MISSIONSTRING_192");
_typestr = (localize "STR_DOM_MISSIONSTRING_193");
_liftstr = (localize "STR_DOM_MISSIONSTRING_194");
_distgrstr = (localize "STR_DOM_MISSIONSTRING_195");
#define __CTRL2(B) (_chdispx displayCtrl B)
#define __CTRL3(B) (_chdispx2 displayCtrl B)
while {true} do {
waitUntil {alive player};
waitUntil {sleep random 0.3;vehicle player != player};
_vec = vehicle player;
while {vehicle player != player} do {
if (player == driver _vec) then {
if (_vec isKindOf "Helicopter" && !(_vec isKindOf "ParachuteBase") && !(_vec isKindOf "BIS_Steerable_Parachute")) then {
_chopttype = GV(_vec,GVAR(choppertype));
if (isNil "_chopttype") then {_chopttype = -1};
if (GVAR(show_chopper_welcome)) then {
if (_chopttype > -1) then {
[_chopttype,_vec] spawn _X_Chopper_Welcome;
sleep 0.321;
waitUntil {GVAR(rsc_end)};
};
};
if (_chopttype in [0,1]) then {
if (isNil {GV(_vec,GVAR(Vehicle_Attached))}) then {_vec setVariable [QGVAR(Vehicle_Attached), false]};
_search_height = 0;
_lift_height = 0;
_possible_types = GV(_vec,GVAR(lift_types));
if (_chopttype == 1) then {
_search_height = 70;
_lift_height = 50;
} else {
_search_height = 50;
_lift_height = 50;
};
_hudoff = true;
while {vehicle player != player && alive player && player == driver _vec} do {
if (GVAR(chophud_on)) then {
_hudoff = false;
_nobjects = nearestObjects [_vec, ["LandVehicle","Air"],_search_height];
_nearest = objNull;
if (count _nobjects > 0) then {
_dummy = _nobjects select 0;
if (_dummy == _vec) then {
if (count _nobjects > 1) then {_nearest = _nobjects select 1};
} else {
_nearest = _dummy;
};
_lift_height = 16;
};
private "_marp";
_marp = GV(_nearest,GVAR(WreckMaxRepair));
if (isNil "_marp") then {_marp = GVAR(WreckMaxRepair)};
_check_cond = if (_chopttype == 1) then {
(!isNull _nearest && damage _nearest >= 1 && ((typeof _nearest) in _possible_types) && _marp > 0)
} else {
(!isNull _nearest && ((typeof _nearest) in _possible_types) && (position _vec) select 2 > 2.5)
};
sleep 0.001;
if (_check_cond) then {
67321 cutRsc ["chopper_lift_hud", "PLAIN"];
_chdispx = __uiGetVar(DCHOP_LIFT_HUD);
__CTRL2(64440) ctrlSetText (if (_chopttype == 1) then {(localize "STR_DOM_MISSIONSTRING_196")} else {(localize "STR_DOM_MISSIONSTRING_197")});
_type_name = [typeof _nearest,0] call FUNC(GetDisplayName);
__CTRL2(64438) ctrlSetText (if !(GV(_vec,GVAR(Vehicle_Attached))) then {format [_typestr, _type_name]} else {format [_liftstr, _type_name]});
__CTRL2(64439) ctrlSetText (if (getText (configFile >> "CfgVehicles" >> typeof _nearest >> "picture") != "picturestaticobject") then {
getText (configFile >> "CfgVehicles" >> typeof _nearest >> "picture")
} else {
""
});
if !(GV(_vec,GVAR(Vehicle_Attached))) then {
__CTRL2(64441) ctrlSetText format [_distvstr, _vec distance _nearest];
_nearest_pos = position _nearest;
_pos_vec = position _vec;
_nx = _nearest_pos select 0;_ny = _nearest_pos select 1;_px = _pos_vec select 0;_py = _pos_vec select 1;
if ((_px <= _nx + 10 && _px >= _nx - 10) && (_py <= _ny + 10 && _py >= _ny - 10) && (_pos_vec select 2 < _lift_height)) then {
__CTRL2(64448) ctrlSetText _ui_ok;
} else {
__CTRL2(64442) ctrlSetText (if ((position _vec) select 2 >= _lift_height) then {(localize "STR_DOM_MISSIONSTRING_198")} else {""});
__CTRL2(64447) ctrlSetText _ui_tohigh;
_angle = 0; _a = ((_nearest_pos select 0) - (_pos_vec select 0));_b = ((_nearest_pos select 1) - (_pos_vec select 1));
if (_a != 0 || _b != 0) then {_angle = _a atan2 _b};
_dif = _angle - direction _vec;
if (_dif < 0) then {_dif = 360 + _dif};
if (_dif > 180) then {_dif = _dif - 360};
_angle = _dif;
__CTRL2(64444) ctrlSetText (if (_angle >= -70 && _angle <= 70) then {_ui_forward} else {""});
__CTRL2(64446) ctrlSetText (if (_angle >= 20 && _angle <= 160) then {_ui_right} else {""});
__CTRL2(64443) ctrlSetText (if (_angle <= -110 || _angle >= 110) then {_ui_back} else {""});
__CTRL2(64445) ctrlSetText (if (_angle <= -20 && _angle >= -160) then {_ui_left} else {""});
sleep 0.001;
};
} else {
__CTRL2(64441) ctrlSetText format [_distgrstr, (position _nearest) select 2];
__CTRL2(64442) ctrlSetText (localize "STR_DOM_MISSIONSTRING_199");
sleep 0.001;
};
} else {
67321 cutRsc ["Default", "PLAIN"];
67322 cutRsc ["chopper_lift_hud2", "PLAIN"];
_chdispx2 = __uiGetVar(DCHOP_HUD2);
__CTRL3(61422) ctrlSetText (switch (_chopttype) do {
case 1: {(localize "STR_DOM_MISSIONSTRING_196")};
case 0: {(localize "STR_DOM_MISSIONSTRING_197")};
});
};
} else {
if (!_hudoff) then {
_hudoff = true;
67321 cutRsc ["Default", "PLAIN"];
67322 cutRsc ["Default", "PLAIN"];
};
};
sleep 0.231;
};
67321 cutRsc ["Default", "PLAIN"];
67322 cutRsc ["Default", "PLAIN"];
} else {
67322 cutRsc ["chopper_lift_hud2", "PLAIN"];
_chdispx2 = __uiGetVar(DCHOP_HUD2);
__CTRL3(61422) ctrlSetText (localize "STR_DOM_MISSIONSTRING_200");
while {vehicle player != player && alive player && player == driver _vec} do {
sleep 0.421;
};
67322 cutRsc ["Default", "PLAIN"];
};
};
};
sleep 0.432;
};
waitUntil {sleep random 0.2; vehicle player == player};
};
x_helilift.sqf
Code:
// by Xeno
#define THIS_FILE "x_helilift.sqf"
#include "x_setup.sqf"
private ["_vehicle", "_nearest", "_id", "_pos", "_nobjects", "_dummy", "_depl", "_nx", "_ny", "_px", "_py", "_npos", "_fuelloss"];
if (!X_Client) exitWith {};
PARAMS_1(_vehicle);
_menu_lift_shown = false;
_nearest = objNull;
_id = -1212;
_release_id = -1212;
_vehicle setVariable [QGVAR(Vehicle_Attached), false];
_vehicle setVariable [QGVAR(Vehicle_Released), false];
_vehicle setVariable [QGVAR(Attached_Vec), objNull];
sleep 10.123;
_possible_types = GV(_vehicle,GVAR(lift_types));
while {alive _vehicle && alive player && (player in _vehicle)} do {
if ((driver _vehicle) == player) then {
_pos = getPos _vehicle;
if (!(GV(_vehicle,GVAR(Vehicle_Attached))) && (_pos select 2 > 2.5) && (_pos select 2 < 16)) then {
_nearest = objNull;
_nobjects = nearestObjects [_vehicle, ["LandVehicle","Air"],40];
if (count _nobjects > 0) then {
_dummy = _nobjects select 0;
if (_dummy == _vehicle) then {
if (count _nobjects > 1) then {_nearest = _nobjects select 1};
} else {
_nearest = _dummy;
};
};
if (!isNull _nearest) then {
if (_nearest isKindOf "Man") then {
_nearest = objNull;
} else {
if ((speed _nearest > 10) || (position _nearest select 2 > 5) || !((typeof _nearest) in _possible_types)) then {_nearest = objNull};
};
};
sleep 0.1;
if (!isNull _nearest && _nearest != (GV(_vehicle,GVAR(Attached_Vec)))) then {
_depl = GV(_nearest,GVAR(MHQ_Deployed));
if (isNil "_depl") then {_depl = false};
if (!_depl) then {
_nearest_pos = getPos _nearest;
_nx = _nearest_pos select 0;_ny = _nearest_pos select 1;_px = _pos select 0;_py = _pos select 1;
if ((_px <= _nx + 10 && _px >= _nx - 10) && (_py <= _ny + 10 && _py >= _ny - 10)) then {
if (!_menu_lift_shown) then {
_id = _vehicle addAction [(localize "STR_DOM_MISSIONSTRING_250") call FUNC(BlueText), "x_client\x_heli_action.sqf",-1,100000];
_menu_lift_shown = true;
};
} else {
_nearest = objNull;
if (_menu_lift_shown) then {
_vehicle removeAction _id;
_id = -1212;
_menu_lift_shown = false;
};
};
};
};
} else {
if (_menu_lift_shown) then {
_vehicle removeAction _id;
_id = -1212;
_menu_lift_shown = false;
};
sleep 0.1;
if (isNull _nearest) then {
_vehicle setVariable [QGVAR(Vehicle_Attached), false];
_vehicle setVariable [QGVAR(Vehicle_Released), false];
} else {
if (GV(_vehicle,GVAR(Vehicle_Attached))) then {
_release_id = _vehicle addAction [(localize "STR_DOM_MISSIONSTRING_251") call FUNC(RedText), "x_client\x_heli_release.sqf",-1,100000];
[_vehicle, (localize "STR_DOM_MISSIONSTRING_252")] call FUNC(VehicleChat);
_vehicle setVariable [QGVAR(Attached_Vec), _nearest];
switch (_nearest) do {
case MRR1: {
["mr1_in_air",true] call FUNC(NetSetJIP);
#ifndef __TT__
player kbTell [GVAR(kb_logic1),GVAR(kb_topic_side),"Dmr1_in_air",true];
#else
player kbTell [GVAR(hq_logic_en1),"HQ_W","Dmr1_in_air",true];
#endif
[QGVAR(mr1_l_c), _vehicle] call FUNC(NetCallEvent);
};
case MRR2: {
["mr2_in_air",true] call FUNC(NetSetJIP);
#ifndef __TT__
player kbTell [GVAR(kb_logic1),GVAR(kb_topic_side),"Dmr2_in_air",true];
#else
player kbTell [GVAR(hq_logic_en1),"HQ_W","Dmr2_in_air",true];
#endif
[QGVAR(mr2_l_c), _vehicle] call FUNC(NetCallEvent);
};
#ifdef __TT__
case MRRR1: {
["mrr1_in_air",true] call FUNC(NetSetJIP);
player kbTell [GVAR(hq_logic_ru1),"HQ_E","Dmr1_in_air",true];
[QGVAR(mrr1_l_c), _vehicle] call FUNC(NetCallEvent);
};
case MRRR2: {
["mrr2_in_air",true] call FUNC(NetSetJIP);
player kbTell [GVAR(hq_logic_ru1),"HQ_E","Dmr2_in_air",true];
[QGVAR(mrr2_l_c), _vehicle] call FUNC(NetCallEvent);
};
#endif
};
_fuelloss = switch (true) do {
case (_vehicle isKindOf "Wheeled_APC"): {0.0002};
case (_vehicle isKindOf "Car"): {0.0001};
case (_vehicle isKindOf "Air"): {0.0003};
case (_vehicle isKindOf "TANK"): {0.0005};
default {0.0001};
};
_nearest engineOn false;
_nearest attachTo [_vehicle, [0,0,-15]];
while {alive _vehicle && alive _nearest && alive player && !(GV(_vehicle,GVAR(Vehicle_Released))) && (player in _vehicle)} do {
_vehicle setFuel ((fuel _vehicle) - _fuelloss);
sleep 0.312;
};
detach _nearest;
_nearest setVelocity [0,0,0];
_nearest engineOn false;
if (position _nearest select 2 > 5) then {
_nearest spawn {
while {position _this select 2 > 5} do {
_this setDamage ((damage _this) + 0.01);
sleep 0.1;
if (!alive _this) exitWith {};
};
};
};
_vehicle setVariable [QGVAR(Vehicle_Attached), false];
_vehicle setVariable [QGVAR(Vehicle_Released), false];
switch (_nearest) do {
case MRR1: {
["mr1_in_air",false] call FUNC(NetSetJIP);
[QGVAR(mr1_l_c), objNull] call FUNC(NetCallEvent);
#ifndef __TT__
player kbTell [GVAR(kb_logic1),GVAR(kb_topic_side),"Dmr1_available",true];
#else
player kbTell [GVAR(hq_logic_en1),"HQ_W","Dmr1_available",true];
#endif
};
case MRR2: {
["mr2_in_air",false] call FUNC(NetSetJIP);
[QGVAR(mr2_l_c), objNull] call FUNC(NetCallEvent);
#ifndef __TT__
player kbTell [GVAR(kb_logic1),GVAR(kb_topic_side),"Dmr2_available",true];
#else
player kbTell [GVAR(hq_logic_en1),"HQ_W","Dmr2_available",true];
#endif
};
#ifdef __TT__
case MRRR1: {
["mrr1_in_air",false] call FUNC(NetSetJIP);
[QGVAR(mrr1_l_c), objNull] call FUNC(NetCallEvent);
player kbTell [GVAR(hq_logic_ru1),"HQ_E","Dmr1_available",true];
};
case MRRR2: {
["mrr2_in_air",false] call FUNC(NetSetJIP);
[QGVAR(mrr2_l_c), objNull] call FUNC(NetCallEvent);
player kbTell [GVAR(hq_logic_ru1),"HQ_E","Dmr2_available",true];
};
#endif
};
_vehicle setVariable [QGVAR(Attached_Vec), objNull];
if (!alive _vehicle) then {
_vehicle removeAction _release_id;
} else {
if (alive _vehicle && alive player) then {[_vehicle, (localize "STR_DOM_MISSIONSTRING_253")] call FUNC(VehicleChat)};
};
if (!(_nearest isKindOf "StaticWeapon") && (position _nearest) select 2 < 200) then {
waitUntil {(position _nearest) select 2 < 10};
} else {
_npos = position _nearest;
_nearest setPos [_npos select 0, _npos select 1, 0];
};
_nearest setVelocity [0,0,0];
sleep 1.012;
};
};
};
};
sleep 0.51;
};
if (alive _vehicle) then {
if (_id != -1212) then {_vehicle removeAction _id};
if (_release_id != -1212) then {_vehicle removeAction _release_id};
};