Add files via upload

This commit is contained in:
Bones50 2016-12-18 12:06:26 +11:00 committed by GitHub
parent f32d809483
commit 3664ce4f61
5 changed files with 374 additions and 0 deletions

207
rearm/service_point.sqf Normal file
View File

@ -0,0 +1,207 @@
// Vehicle Service Point by Axe Cop +fix to rearm all weapons from driver+only delete ammo in rearmed weapon only (not entire turret) by HALV
//reworked for a3 epoch by Halv
//reworked for a3 exile by Dodo
private ["_curturret","_folder","_servicePointClasses","_maxDistance","_costsFree","_message","_messageShown","_repair_enable","_repair_costs","_repair_repairTime","_rearm_enable","_rearm_costs","_lastVehicle","_lastRole","_fnc_removeActions","_fnc_getCosts","_fnc_actionTitle","_fnc_getWeapons"];
//====================== general settings
_folder = "Custom\rearm\"; // folder where the service point scripts are saved, relative to the mission file
_servicePointClasses = ["StorageBladder_02_water_sand_F"]; // service point classes (can be house, vehicle and unit classes)
_maxDistance = 50; // maximum distance from a service point for the options to be shown
_costsFree = "free"; // text for no costs
_message = "-- Vehicle Service Point --"; // message to be shown when in range of a service point (set to "" to disable)
_actionColour = "#0096ff"; //the colour of the scroll action Blue: "#0096ff"
//====================== repair settings
_repair_enable = true; // enable or disable the repair option
_repair_repairTime = 2; // time needed to repair each damaged part (in seconds)
_repair_costs = [ //Need Money
["Air",1000],
["AllVehicles",800]
];
//====================== rearm settings
_rearm_enable = true; // enable or disable the rearm option
//deny re-arm if more than this amount of current weapons magazines already in the vehicle
_deny_already_armed_with = 4;
//deny re-arm if more than this amount of magazines already in the vehicle
_GlobalMagazineMAX = 4;
//weapon classes disabled from re-arming
_NoGoWeapCName = [
//irrelevant ones
"Horn","SmokeLauncher","MiniCarHorn","SportCarHorn","TruckHorn2","TruckHorn","BikeHorn","CarHorn","TruckHorn3",
//PAWNEE Missiles
"missiles_DAR","missiles_DAGR"
];
//magazine classnames not allowed to be rearmed
_NoGoAmmoCName = [
//Gunship Missiles
"24Rnd_missiles", "12Rnd_PG_missiles"
];
//cost per magazine for individual vehicles
_rearm_costs = [
["B_MRAP_01_hmg_F",500],
["O_MRAP_02_hmg_F",500],
["I_MRAP_03_hmg_F",500],
["B_Heli_Light_01_Armed_F",800],
["O_Heli_Light_02_F",800],
["I_Heli_Light_03_F",800],
["B_Heli_Transport_01_F",800],
["AllVehicles",500],
["Air",800]
];
//debug weapons to see classnames in chat/rpt
_debugWeapon = false;
//=================================== CONFIG END
_lastVehicle = objNull;
_lastRole = [];
SP_repair_action = -1;
SP_rearm_actions = [];
_messageShown = false;
_fnc_removeActions = {
if (isNull _lastVehicle) exitWith {};
_lastVehicle removeAction SP_repair_action;
SP_repair_action = -1;
{
_lastVehicle removeAction _x;
} forEach SP_rearm_actions;
SP_rearm_actions = [];
_lastVehicle = objNull;
_lastRole = [];
};
_fnc_getCosts = {
private ["_vehicle","_costs","_cost"];
_vehicle = _this select 0;
_costs = _this select 1;
_cost = [];
{
private "_typeName";
_typeName = _x select 0;
if (_vehicle isKindOf _typeName) exitWith {
_cost = _x select 1;
};
} forEach _costs;
_cost
};
_fnc_actionTitle = {
private ["_actionName","_costs","_costsText","_actionTitle"];
_actionName = _this select 0;
_costs = _this select 1;
_costsText = _costsFree;
if (_costs > 0) then {
private ["_itemName","_displayName"];
_costsText = format ["%1 Pop tabs",_costs];
};
_actionTitle = format ["<t color='%3'>%1 (%2)</t>", _actionName, _costsText,_actionColour];
_actionTitle
};
_fnc_getWeapons = {
private ["_vehicle","_role","_weapons"];
_vehicle = _this select 0;
//turrets positions to search for weapons
_turrets = [[-1],[0],[1],[2],[0,0],[1,0],[2,0],[0,1],[0,2]];
_weapons = [];
{
_turret = _x;
_weaponsTurret = _vehicle weaponsTurret _turret;
{
_weapon = _x;
if !(_weapon in _NoGoWeapCName) then{
_weaponName = getText (configFile >> "CfgWeapons" >> _weapon >> "displayName");
_weapons pushBack [_weapon, _weaponName, _turret];
};
}forEach _weaponsTurret;
}forEach _turrets;
_weapons
};
_fnc_getAmmo = {
private ["_vehicle","_role","_weapons"];
_vehicle = _this select 0;
_weapon = _this select 1;
_allammo = getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines");
_ammoreturn = [];
{
_curammo = _x;
if !(_curammo in _NoGoAmmoCName) then{
_ammoname = getText (configFile >> "Cfgmagazines" >> _curammo >> "displayName");
_ammoreturn pushBack [_curammo, _ammoname];
};
}forEach _allammo;
_ammoreturn
};
while {true} do {
private ["_vehicle","_inVehicle"];
_vehicle = vehicle player;
_inVehicle = _vehicle != player;
if (local _vehicle && _inVehicle) then {
private ["_pos","_servicePoints","_inRange"];
_pos = getPosATL _vehicle;
_servicePoints = (nearestObjects [_pos, _servicePointClasses, _maxDistance]) - [_vehicle];
_inRange = count _servicePoints > 0;
if (_inRange && (speed (_vehicle) < 1) && (speed (_vehicle) > -1)) then {
private ["_servicePoint","_role","_actionCondition","_costs","_actionTitle"];
_servicePoint = _servicePoints select 0;
_role = assignedVehicleRole player;
if (((str _role) != (str _lastRole)) || (_vehicle != _lastVehicle)) then {
// vehicle or seat changed
call _fnc_removeActions;
};
_lastVehicle = _vehicle;
_lastRole = _role;
_actionCondition = "vehicle _this == _target && local _target";
if (SP_repair_action < 0 && _repair_enable) then {
_costs = [_vehicle, _repair_costs] call _fnc_getCosts;
_actionTitle = [format["Repair %1",getText (configFile >> "Cfgvehicles" >> typeOf _vehicle >> "displayName")], _costs] call _fnc_actionTitle;
SP_repair_action = _vehicle addAction [format["<img size='1.5'image='\a3\Ui_f\data\IGUI\Cfg\Cursors\iconrepairvehicle_ca.paa'/> %1",_actionTitle], _folder + "service_point_repair.sqf", [_servicePoint, _costs, _repair_repairTime], -1, false, true, "", _actionCondition];
};
if ((count SP_rearm_actions == 0) && _rearm_enable) then {
private ["_weapons"];
_costs = [_vehicle, _rearm_costs] call _fnc_getCosts;
_weapons = [_vehicle, _role] call _fnc_getWeapons;
{
private "_weaponName";
_curweapon = _x select 0;
_weaponName = _x select 1;
_curturret = _x select 2;
if(_debugWeapon)then{_msg = format["WEAPONS DEBUG: %1",_x];diag_log _msg;systemChat _msg;};
_ammo = [_vehicle,_curweapon] call _fnc_getAmmo;
{
_ammoclass = _x select 0;
_ammoname = _x select 1;
_actionTitle = [format["Rearm %1 %2 with %3", _weaponName,_curturret,_ammoname], _costs] call _fnc_actionTitle;
SP_rearm_action = _vehicle addAction [format["<img size='1.5'image='\a3\Ui_f\data\IGUI\Cfg\WeaponIcons\mg_ca.paa'/> %1",_actionTitle], _folder + "service_point_rearm.sqf", [_servicePoint, _costs, [_weaponName,_ammoclass,_ammoname,_GlobalMagazineMAX,_deny_already_armed_with,_curturret]], -1, false, true, "", _actionCondition];
SP_rearm_actions set [count SP_rearm_actions, SP_rearm_action];
}forEach _ammo;
} forEach _weapons;
};
if (!_messageShown && _message != "") then {
_messageShown = true;
_vehicle vehicleChat _message;
};
} else {
call _fnc_removeActions;
_messageShown = false;
};
} else {
call _fnc_removeActions;
_messageShown = false;
};
sleep 2;
};

View File

@ -0,0 +1,50 @@
// Vehicle Service Point (Rearm) by Axe Cop
//reworked for a3 epoch by Halv
//reworked for a3 exile by Dodo
private ["_vehicle","_args","_servicePoint","_costs","_magazineCount","_weapon","_type","_name","_weaponType","_weaponName","_turret","_magazines","_ammo","_exilew","_veh"];
_vehicle = _this select 0;
_args = _this select 3;
_servicePoint = _args select 0;
_costs = _args select 1;
_weapon = _args select 2;
_type = typeOf _vehicle;
_name = getText(configFile >> "cfgVehicles" >> _type >> "displayName");
_weaponName = _weapon select 0;
_ammoClass = _weapon select 1;
_ammoName = _weapon select 2;
_ammoMAX = _weapon select 3;
_ammoMIN = _weapon select 4;
_turret = _weapon select 5;
_exilew = player getVariable ["ExileMoney", 0];
_veh = vehicle player;
if (!local _vehicle) exitWith {["ErrorTitleOnly", ["Get in Vehicle as driver!"]] call ExileClient_gui_toaster_addTemplateToast; diag_log format["Error: called service_point_rearm.sqf with non-local vehicle: %1", _vehicle] };
if(count (crew _vehicle) > 1) exitWith {["ErrorTitleOnly", ["There must be no people in the vehicle!"]] call ExileClient_gui_toaster_addTemplateToast;};
if(!(_veh isEqualTo player) && !((driver _veh) isEqualTo player)) exitWith {["ErrorTitleOnly", ["Re-Arm Denied! You must be in the drivers seat."]] call ExileClient_gui_toaster_addTemplateToast;};
if (_exilew <_costs) exitWith {["ErrorTitleOnly", ["You don't have enough money!"]] call ExileClient_gui_toaster_addTemplateToast;};
if(_type isKindOf "Air") then
{
_ammoMAX = 1;
_ammoMIN = 2;
} else
{
_ammoMAX = _weapon select 3;
_ammoMIN = _weapon select 4;
};
_currentmags = magazines _vehicle;
_magscount = count _currentmags;
_ammocount = {_ammoClass == _x}count _currentmags;
if(_magscount > _ammoMAX)exitWith{["ErrorTitleOnly", ["Ammo Already Full!"]] call ExileClient_gui_toaster_addTemplateToast;};
if(_ammocount > _ammoMIN)exitWith{["ErrorTitleOnly", ["Ammo Already Full!"]] call ExileClient_gui_toaster_addTemplateToast;};
if(_costs > 0 && isTradeEnabled)then{
takegive_poptab = [player,_costs,true];
publicVariableServer "takegive_poptab";
};
// add a magazines
_vehicle addMagazineTurret [_ammoClass, _turret];
cutText [format["%1 of %2 Rearmed", _weaponName, _name], "PLAIN DOWN"];

View File

@ -0,0 +1,87 @@
// Vehicle Service Point (Repair) by Axe Cop
//reworked for a3 epoch by Halv
//reworked for a3 exile by Dodo
private ["_vehicle","_args","_servicePoint","_costs","_repairTime","_type","_name","_hitpoints","_allRepaired","_exilew"];
_vehicle = _this select 0;
if (!local _vehicle) exitWith { diag_log format["Error: called service_point_repair.sqf with non-local vehicle: %1", _vehicle] };
_args = _this select 3;
_servicePoint = _args select 0;
_costs = _args select 1;
_repairTime = _args select 2;
_type = typeOf _vehicle;
_name = getText(configFile >> "cfgVehicles" >> _type >> "displayName");
_exilew = player getVariable ["ExileMoney", 0];
_veh = vehicle player;
if (_exilew < _costs) exitWith {["ErrorTitleOnly", ["You don't have enough money!"]] call ExileClient_gui_toaster_addTemplateToast;};
if(_costs > 0 && isTradeEnabled)then{
takegive_poptab = [player,_costs,true];
publicVariableServer "takegive_poptab";
};
_fnc_vehicle_getHitpoints = {
private ["_cfgHitPoints", "_hps", "_funcGetHitPoints"];
_cfgHitPoints = configFile >> "CfgVehicles" >> (typeOf _this) >> "HitPoints";
_hps = [];
_funcGetHitPoints =
{
for "_i" from 0 to ((count _this) - 1) do
{
private ["_hp"];
_hp = configName (_this select _i);
if (!(_hp in _hps)) then
{
_hps set [count _hps, _hp];
};
};
};
while {(configName _cfgHitPoints) != ""} do
{
_cfgHitPoints call _funcGetHitPoints;
_cfgHitPoints = inheritsFrom _cfgHitPoints;
};
_hps
};
_vehicle engineOn false;
_hitpoints = _vehicle call _fnc_vehicle_getHitpoints;
_allRepaired = true;
{
private "_damage";
if ((vehicle player != _vehicle) || (!local _vehicle) || ([0,0,0] distance (velocity _vehicle) > 1)) exitWith {
_allRepaired = false;
["ErrorTitleOnly", ["Repair Interupted!"]] call ExileClient_gui_toaster_addTemplateToast;
};
_damage = _vehicle getHitPointDamage _x;
if (_damage > 0) then {
if (_repairTime > 0) then {
private "_partName";
//change "HitPart" to " - Part" rather than complicated string replace
_partName = toArray _x;
_partName set [0,20];
_partName set [1,45];
_partName set [2,20];
_partName = toString _partName;
["InfoTitleOnly", [format["Repairing %1 ...", _partName]]] call ExileClient_gui_toaster_addTemplateToast;
sleep _repairTime;
};
_vehicle setHitPointDamage [_x, 0];
};
} forEach _hitpoints;
if (_allRepaired) then {
_vehicle setDamage 0;
_vehicle setVelocity [0,0,1];
["SuccessTitleOnly", [format["%1 Repaired", _name]]] call ExileClient_gui_toaster_addTemplateToast;
};

16
rearm/takegive_poptab.sqf Normal file
View File

@ -0,0 +1,16 @@
/*
Original HALV_takegive_crypto.sqf by Halv
Copyright (C) 2015 Halvhjearne > README.md
Edit to takegive_poptab.sqf for Exile by Dodo
*/
_player = _this select 0;
_costs = _this select 1;
_money = _player getVariable ["ExileMoney", 0];
_money = _money - _costs;
_player setVariable ["ExileMoney", _money, true];
format["setPlayerMoney:%1:%2", _Money, _player getVariable ["ExileDatabaseID", 0]] call ExileServer_system_database_query_fireAndForget;
[_player, "purchaseVehicleSkinResponse", [0, str _money]] call ExileServer_system_network_send_to;
true

View File

@ -0,0 +1,14 @@
/*
Original HALV_takegive_crypto_init.sqf by Halv
Copyright (C) 2015 Halvhjearne > README.md
Edit to takegive_poptab.sqf for Exile by Dodo
*/
if(isServer)then{
takegive_poptab = compileFinal preprocessFileLineNumbers "Custom\rearm\takegive_poptab.sqf";
"takegive_poptab" addPublicVariableEventHandler {(_this select 1) call takegive_poptab};
};
if(hasInterface)then{
isTradeEnabled = true;
};