More upgrades and new functions

This commit is contained in:
DESKTOP-UH65DCE\MusTanG 2017-07-03 15:59:40 -05:00
parent 44eb34445d
commit e906d29c9c
18 changed files with 414 additions and 456 deletions

View File

@ -308,49 +308,6 @@ switch _interactOption do {
["Unpacked backpack", 5] call Epoch_message;
};
};
case 15: { // Vehicle Upgrade
_canUpgrade = true;
_nearveh = nearestObjects[player,["Car","Truck","Heli","Boat","Plane"],15];
if (_nearveh isequalto []) exitwith {
["No Vehicle for upgrade found",5] call Epoch_message;_canUpgrade = false;
};
_veh = _nearveh select 0;
_vehType = typeOf _veh;
_classUpgrade = isClass(missionConfigFile >> "CfgVehicleUpgrades" >> _vehType);
if!(_classUpgrade)exitWith{
["Vehicle can't be upgraded",5] call Epoch_message;_canUpgrade = false;
};
_reqMaterials = getArray(missionConfigFile >> "CfgVehicleUpgrades" >> _vehType >> "ReqMaterials");
_crypto = 0;
if(_reqMaterials isEqualTo [])exitWith{
["Required Materials list not found, report this error to an admin",5] call Epoch_message;_canUpgrade = false;
};
{
if((_x select 1) isEqualTo "Crypto")then{
_crypto = _x select 0;
if(EPOCH_playerCrypto < _crypto)exitWith{
[format["You need %1 crypto to upgrade your %2", _crypto, _vehType],5] call Epoch_message;_canUpgrade = false;
};
};
if(!((_x select 1) in (magazines player)) && !((_x select 1) isEqualTo "Crypto"))exitWith{
[format["You do not have %1 to upgrade your %2", (_x select 1), _vehType],5] call Epoch_message;_canUpgrade = false;
};
}forEach _reqMaterials;
if(_canUpgrade)then{
{
_count = _x select 0;
_upgradeItem = _x select 1;
for "_i" from 1 to _count do{
if!(_upgradeItem isEqualTo "Crypto")then{
player removeItem _upgradeItem;
};
};
}forEach _reqMaterials;
_upgradeToVeh = getText(missionConfigFile >> "CfgVehicleUpgrades" >> _vehType >> "upgradeToVehicle");
[[_veh,_upgradeToVeh,_crypto],player,Epoch_personalToken] remoteExec ["EPOCH_server_upgrade_vehicle",2];
};
};
default {
["Found nothing", 5] call Epoch_message;

View File

@ -37,4 +37,7 @@ if ([_item, "CfgVehicles"] call EPOCH_fnc_isAny) then {
};
};
};
if (_return isequalto "") then {
_return = _item;
};
_return;

View File

@ -60,6 +60,23 @@ if (isClass (_config >> _data)) then {
EPOCH_CraftingItem = "";
};
_config = 'CfgVehicleUpgrades' call EPOCH_returnConfig;
if (isClass (_config >> _data)) then {
{
if (isclass (_config >> _data >> (typeof _x))) exitwith {
EPOCH_UpgradeVehicle = [_data,_x];
_reqMaterials = getArray (_config >> _data >> (typeof _x) >> "ReqMaterials");
_itemtxt = "required: ";
{
_itemtxt = _itemtxt + str (_x select 0) + ((_x select 1) call EPOCH_itemDisplayName) + ", ";
} foreach _reqMaterials;
_txt1 = format ["Upgrade %1", (typeof _x) call EPOCH_itemDisplayName];
_txt2 = "EPOCH_UpgradeVehicle call EPOCH_Client_UpgradeVehicle;";
_button_texts pushBack [_txt1,_txt2];
};
} foreach (nearestobjects [player,["Landvehicle","SHIP","AIR","TANK"],10]);
};
if !(_button_texts isEqualTo []) then {
_display = ctrlParent (_this select 0);
_pos = getMousePosition;

View File

@ -0,0 +1,65 @@
if (isnil 'EPOCH_UpgradeVehicle') exitwith {
["Upgrade failed - Error",5] call Epoch_message;
};
EPOCH_UpgradeVehicle params ["_data",["_veh",objnull]];
EPOCH_UpgradeVehicle = nil;
if (isnull _veh) exitwith {
["Upgrade failed - Vehicle not found",5] call Epoch_message;
};
if (player distance _veh > 12) exitwith {
["Upgrade failed - Vehicle to far away",5] call Epoch_message;
};
if !(local _veh) exitwith {
["Upgrade failed - Go in as Driver first",5] call Epoch_message;
};
if !(crew _veh isequalto []) exitwith {
["Upgrade failed - All passengers must leave the Vehicle",5] call Epoch_message;
};
_vehType = typeOf _veh;
_config = 'CfgVehicleUpgrades' call EPOCH_returnConfig;
_classUpgrade = gettext (_config >> _data >> _vehType >> "upgradeToVehicle");
_reqMaterials = getArray (_config >> _data >> _vehType >> "ReqMaterials");
_crypto = 0;
if(_reqMaterials isEqualTo [])exitWith{
["Required Materials list not found, report this error to an admin",5] call Epoch_message;
};
_hasall = true;
_missing = [];
{
_x params ["_count","_item"];
_has = 0;
if (_item isequalto "Crypto") then {
_has = Epoch_Playercrypto;
}
else {
_has = {_x == _item} count ((magazines player)+(items player));
};
if (_has < _count) then {
_missing pushback [_count-_has,_item];
_hasall = false
};
}forEach _reqMaterials;
if (!_hasall) exitwith {
_msg = 'Missing:';
{
_msg = _msg + format [' %1 %2,', _x select 0, (_x select 1) call EPOCH_itemDisplayName];
} foreach _missing;
[_msg,5] call Epoch_message;
};
{
_x params ["_count","_item"];
if (_item isequalto "Crypto") then {
_crypto = _crypto + _count;
}
else {
for "_i" from 1 to _count do{
player removeItem _item;
};
};
} forEach _reqMaterials;
[[_veh,_classUpgrade,_crypto],player,Epoch_personalToken] remoteExec ["EPOCH_server_upgrade_vehicle",2];

View File

@ -149,6 +149,7 @@ class CfgClientFunctions
class client_lockVehicle {};
class client_fillVehicle {};
class client_gearVehicle {};
class client_upgradeVehicle {};
};
class missions
{

View File

@ -550,14 +550,10 @@ class CfgItemInteractions
class ItemDoc6 : ItemDoc1 {};
class ItemDoc7 : ItemDoc1 {};
class ItemDoc8 : ItemDoc1 {};
class ItemVehDoc1
{
interactAction = 15;
interactText = "UPGRADE";
};
class ItemVehDoc2 : ItemVehDoc1 {};
class ItemVehDoc3 : ItemVehDoc1 {};
class ItemVehDoc4 : ItemVehDoc1 {};
class ItemVehDoc1 : ItemDoc1 {};
class ItemVehDoc2 : ItemDoc1 {};
class ItemVehDoc3 : ItemDoc1 {};
class ItemVehDoc4 : ItemDoc1 {};
class ItemBulb : Default {};
class ItemBurlap : Default {};
class ItemBriefcaseE : Default {};

View File

@ -7,104 +7,84 @@
*/
class CfgVehicleUpgrades
{
class C_Hatchback_01_EPOCH
class ItemVehDoc1
{
ReqMaterials[] = {{1,"ItemVehDoc1"},{1,"ItemCables"},{1,"CircuitParts"},{2,"VehicleRepairLg"}};
upgradeToVehicle = "C_Hatchback_01_EPOCH1";
class C_Hatchback_01_EPOCH
{
ReqMaterials[] = {{1,"ItemVehDoc1"},{1,"ItemCables"},{1,"CircuitParts"},{2,"VehicleRepairLg"}};
upgradeToVehicle = "C_Hatchback_01_EPOCH1";
};
class C_Hatchback_02_EPOCH: C_Hatchback_01_EPOCH
{
upgradeToVehicle = "C_Hatchback_02_EPOCH1";
};
class C_Offroad_01_EPOCH: C_Hatchback_01_EPOCH
{
upgradeToVehicle = "C_Offroad_01_EPOCH1";
};
class C_SUV_01_EPOCH: C_Hatchback_01_EPOCH
{
upgradeToVehicle = "C_SUV_01_EPOCH1";
};
};
class C_Hatchback_01_EPOCH1
class ItemVehDoc2
{
ReqMaterials[] = {{1,"ItemVehDoc2"},{2,"SpareTire"},{2,"KitTankTrap"}};
upgradeToVehicle = "C_Hatchback_01_EPOCH2";
class C_Hatchback_01_EPOCH1
{
ReqMaterials[] = {{1,"ItemVehDoc2"},{2,"SpareTire"},{2,"KitTankTrap"}};
upgradeToVehicle = "C_Hatchback_01_EPOCH2";
};
class C_Hatchback_02_EPOCH1: C_Hatchback_01_EPOCH1
{
upgradeToVehicle = "C_Hatchback_02_EPOCH2";
};
class C_Offroad_01_EPOCH1: C_Hatchback_01_EPOCH1
{
upgradeToVehicle = "C_Offroad_01_EPOCH2";
};
class C_SUV_01_EPOCH1: C_Hatchback_01_EPOCH1
{
upgradeToVehicle = "C_SUV_01_EPOCH2";
};
};
class C_Hatchback_01_EPOCH2
class ItemVehDoc3
{
ReqMaterials[] = {{1,"ItemVehDoc3"},{2,"ItemPipe"},{2,"KitShelf"}};
upgradeToVehicle = "C_Hatchback_01_EPOCH3";
class C_Hatchback_01_EPOCH2
{
ReqMaterials[] = {{1,"ItemVehDoc3"},{2,"ItemPipe"},{2,"KitShelf"}};
upgradeToVehicle = "C_Hatchback_01_EPOCH3";
};
class C_Hatchback_02_EPOCH2: C_Hatchback_01_EPOCH2
{
upgradeToVehicle = "C_Hatchback_02_EPOCH3";
};
class C_Offroad_01_EPOCH2: C_Hatchback_01_EPOCH2
{
upgradeToVehicle = "C_Offroad_01_EPOCH3";
};
class C_SUV_01_EPOCH2: C_Hatchback_01_EPOCH2
{
upgradeToVehicle = "C_SUV_01_EPOCH3";
};
};
class C_Hatchback_01_EPOCH3
class ItemVehDoc4
{
ReqMaterials[] = {{1,"ItemVehDoc4"},{1,"CircuitParts"},{2,"ItemScraps"},{1,"jerrycan_epoch"}};
upgradeToVehicle = "C_Hatchback_01_EPOCH4";
};
class C_Hatchback_02_EPOCH
{
ReqMaterials[] = {{1,"ItemVehDoc1"},{1,"ItemCables"},{1,"CircuitParts"},{2,"VehicleRepairLg"}};
upgradeToVehicle = "C_Hatchback_02_EPOCH1";
};
class C_Hatchback_02_EPOCH1
{
ReqMaterials[] = {{1,"ItemVehDoc2"},{2,"SpareTire"},{2,"KitTankTrap"}};
upgradeToVehicle = "C_Hatchback_02_EPOCH2";
};
class C_Hatchback_02_EPOCH2
{
ReqMaterials[] = {{1,"ItemVehDoc3"},{2,"ItemPipe"},{2,"KitShelf"}};
upgradeToVehicle = "C_Hatchback_02_EPOCH3";
};
class C_Hatchback_02_EPOCH3
{
ReqMaterials[] = {{1,"ItemVehDoc4"},{1,"CircuitParts"},{2,"ItemScraps"},{1,"jerrycan_epoch"}};
upgradeToVehicle = "C_Hatchback_02_EPOCH4";
};
class C_Offroad_01_EPOCH
{
upgradeReqItems[] = {{1,"ItemVehDoc1"},{1,"ItemCables"},{1,"CircuitParts"},{2,"VehicleRepairLg"}};
upgradeToVehicle = "C_Offroad_01_EPOCH1";
};
class C_Offroad_01_EPOCH1
{
ReqMaterials[] = {{1,"ItemVehDoc2"},{2,"SpareTire"},{2,"KitTankTrap"}};
upgradeToVehicle = "C_Offroad_01_EPOCH2";
};
class C_Offroad_01_EPOCH2
{
ReqMaterials[] = {{1,"ItemVehDoc3"},{2,"ItemPipe"},{2,"KitShelf"}};
upgradeToVehicle = "C_Offroad_01_EPOCH3";
};
class C_Offroad_01_EPOCH3
{
ReqMaterials[] = {{1,"ItemVehDoc4"},{1,"CircuitParts"},{2,"ItemScraps"},{1,"jerrycan_epoch"}};
upgradeToVehicle = "C_Offroad_01_EPOCH4";
};
class C_SUV_01_EPOCH
{
upgradeReqItems[] = {{1,"ItemVehDoc1"},{1,"ItemCables"},{1,"CircuitParts"},{2,"VehicleRepairLg"}};
upgradeToVehicle = "C_SUV_01_EPOCH1";
};
class C_SUV_01_EPOCH1
{
ReqMaterials[] = {{1,"ItemVehDoc2"},{2,"SpareTire"},{2,"KitTankTrap"}};
upgradeToVehicle = "C_SUV_01_EPOCH2";
};
class C_SUV_01_EPOCH2
{
ReqMaterials[] = {{1,"ItemVehDoc3"},{2,"ItemPipe"},{2,"KitShelf"}};
upgradeToVehicle = "C_SUV_01_EPOCH3";
};
class C_SUV_01_EPOCH3
{
ReqMaterials[] = {{1,"ItemVehDoc4"},{1,"CircuitParts"},{2,"ItemScraps"},{1,"jerrycan_epoch"}};
upgradeToVehicle = "C_SUV_01_EPOCH4";
};
class B_G_Offroad_01_armed_EPOCH
{
upgradeReqItems[] = {{1,"ItemVehDoc1"},{1,"ItemCables"},{1,"CircuitParts"},{2,"VehicleRepairLg"}};
upgradeToVehicle = "B_G_Offroad_01_armed_EPOCH1";
};
class B_G_Offroad_01_armed_EPOCH1
{
ReqMaterials[] = {{1,"ItemVehDoc2"},{2,"SpareTire"},{2,"KitTankTrap"}};
upgradeToVehicle = "B_G_Offroad_01_armed_EPOCH2";
};
class B_G_Offroad_01_armed_EPOCH2
{
ReqMaterials[] = {{1,"ItemVehDoc3"},{2,"ItemPipe"},{2,"KitShelf"}};
upgradeToVehicle = "B_G_Offroad_01_armed_EPOCH3";
};
class B_G_Offroad_01_armed_EPOCH3
{
ReqMaterials[] = {{1,"ItemVehDoc4"},{1,"CircuitParts"},{2,"ItemScraps"},{1,"jerrycan_epoch"}};
upgradeToVehicle = "B_G_Offroad_01_armed_EPOCH4";
class C_Hatchback_01_EPOCH3
{
ReqMaterials[] = {{1,"ItemVehDoc3"},{2,"ItemPipe"},{2,"KitShelf"}};
upgradeToVehicle = "C_Hatchback_01_EPOCH4";
};
class C_Hatchback_02_EPOCH3: C_Hatchback_01_EPOCH3
{
upgradeToVehicle = "C_Hatchback_02_EPOCH4";
};
class C_Offroad_01_EPOCH3: C_Hatchback_01_EPOCH3
{
upgradeToVehicle = "C_Offroad_01_EPOCH4";
};
class C_SUV_01_EPOCH3: C_Hatchback_01_EPOCH3
{
upgradeToVehicle = "C_SUV_01_EPOCH4";
};
};
};

View File

@ -73,9 +73,12 @@ if (_slot != -1) then {
if (_playerNetID == (owner _vehicle)) then {
_vehSlot = _vehicle getVariable["VEHICLE_SLOT", "ABORT"];
if (!_vehicleSold && _vehSlot != "ABORT") then {
removeFromRemainsCollector[_vehicle];
if (!_vehicleSold && _vehSlot != "ABORT") then {
_BaseClass = _vehicle getvariable ["VEHICLE_BaseClass",""];
if !(_BaseClass isequalto "") then {
_item = _BaseClass;
};
removeFromRemainsCollector[_vehicle];
deleteVehicle _vehicle;
_vehicleSold = true;

View File

@ -138,93 +138,7 @@ for "_i" from 1 to _maxStorageLimit do {
clearItemCargoGlobal _vehicle;
if !(_inventory isEqualTo []) then {
{
_objType = _forEachIndex;
_objTypes = _x;
_objQty = [];
if (_objType in [1, 2, 3]) then {
_objTypes = _x select 0;
_objQty = _x select 1;
};
{
switch _objType do {
// Weapon cargo
case 0: {
if (_x isEqualType []) then {
if ((count _x) >= 4) then {
_vehicle addWeaponCargoGlobal[_x deleteAt 0, 1];
_attachments = [];
_wMags = false;
_wMagsArray = [];
// suppressor, laser, optics, magazines(array), bipods
{
// magazines
if (_x isEqualType []) then{
_wMags = true;
_wMagsArray = _x;
}
else {
// attachments
if (_x != "") then{
_attachments pushBack _x;
};
};
} forEach _x;
// add all attachments to vehicle
// TODO replace with adding attachments directly to gun (Arma feature dependant)
{
_vehicle addItemCargoGlobal[_x, 1];
} forEach _attachments;
if (_wMags) then{
if (_wMagsArray isEqualType [] && (count _wMagsArray) >= 2) then{
_vehicle addMagazineAmmoCargo[_wMagsArray select 0, 1, _wMagsArray select 1];
};
};
};
};
};
// Magazine cargo
case 1: {
_magazineName = _x;
_magazineSize = _objQty select _forEachIndex;
if ((_magazineName isEqualType "STRING") && (_magazineSize isEqualType 0)) then {
_magazineSizeMax = getNumber (configFile >> "CfgMagazines" >> _magazineName >> "count");
if (_magazineSizeMax >= 1) then {
// Add full magazines cargo
_vehicle addMagazineAmmoCargo [_magazineName, floor (_magazineSize / _magazineSizeMax), _magazineSizeMax];
// Add last non full magazine
if ((_magazineSize % _magazineSizeMax) > 0) then {
_vehicle addMagazineAmmoCargo [_magazineName, 1, floor (_magazineSize % _magazineSizeMax)];
};
};
};
};
// Backpack cargo
case 2: {
if (_x isEqualType "STRING") then {
_qty = _objQty select _forEachIndex;
_vehicle addBackpackCargoGlobal [_x, _qty];
};
};
// Item cargo
case 3: {
if (_x isEqualType "STRING") then {
_qty = _objQty select _forEachIndex;
_vehicle addItemCargoGlobal [_x, _qty];
};
};
};
}forEach _objTypes;
}forEach _inventory;
[_vehicle,_inventory] call EPOCH_server_CargoFill;
};
if (EPOCH_DEBUG_VEH) then {

View File

@ -13,12 +13,12 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_actualHitpoints","_allHitpoints","_allVehicles","_allowDamage","_arr","_arrNum","_attachments","_availableColorsConfig","_cfgEpochVehicles","_class","_color","_colors","_config","_count","_damage","_dataFormat","_dataFormatCount","_diag","_dmg","_found","_hitpoints","_immuneIfStartInBase","_jammerOwner","_jammerRange","_jammers","_location","_lockedOwner","_magazineName","_magazineSize","_magazineSizeMax","_mags","_marker","_nearestJammer","_objQty","_objType","_objTypes","_qty","_removemagazinesturret","_removeweapons","_response","_selections","_serverSettingsConfig","_simulationHandler","_textureSelectionIndex","_textures","_vehHiveKey","_vehLockHiveKey","_vehicle","_vehicleDamages","_vehicleSlotIndex","_wMags","_wMagsArray","_worldspace"];
private ["_actualHitpoints","_allHitpoints","_allVehicles","_allowDamage","_arr","_arrNum","_attachments","_availableColorsConfig","_cfgEpochVehicles","_class","_color","_colors","_config","_count","_damage","_dataFormat","_dataFormatCount","_diag","_dmg","_found","_hitpoints","_immuneIfStartInBase","_jammerOwner","_jammerRange","_jammers","_location","_lockedOwner","_magazineName","_magazineSize","_magazineSizeMax","_mags","_marker","_nearestJammer","_objQty","_objType","_objTypes","_qty","_removemagazinesturret","_removeweapons","_response","_selections","_serverSettingsConfig","_simulationHandler","_textureSelectionIndex","_textures","_vehHiveKey","_vehLockHiveKey","_vehicle","_vehicleDamages","_vehicleSlotIndex","_wMags","_wMagsArray","_worldspace","_baseClass"];
//[[[end]]]
params [["_maxVehicleLimit",0]];
_diag = diag_tickTime;
_dataFormat = ["", [], 0, [], 0, [], [], 0];
_dataFormat = ["", [], 0, [], 0, [], [], 0, ""];
_dataFormatCount = count _dataFormat;
EPOCH_VehicleSlots = [];
_allVehicles = [];
@ -110,6 +110,10 @@ for "_i" from 1 to _maxVehicleLimit do {
} forEach _selections;
_vehicle setVariable ["VEHICLE_TEXTURE", _color];
};
_baseClass = _arr select 8;
if !(_baseClass isequalto "") then {
_vehicle setvariable ["VEHICLE_BASECLASS",_baseClass];
};
// disable thermal imaging equipment
_vehicle disableTIEquipment true;
// lock all vehicles
@ -131,83 +135,8 @@ for "_i" from 1 to _maxVehicleLimit do {
} foreach _removemagazinesturret;
};
{
_objType = _forEachIndex;
_objTypes = _x;
_objQty = [];
if (_objType in [1, 2, 3]) then {
_objTypes = _x select 0;
_objQty = _x select 1;
};
{
switch _objType do {
// Weapon cargo
case 0: {
if (_x isEqualType []) then {
if ((count _x) >= 4) then {
_vehicle addWeaponCargoGlobal[_x deleteAt 0, 1];
_attachments = [];
_wMags = false;
_wMagsArray = [];
// suppressor, laser, optics, magazines(array), bipods
{
// magazines
if (_x isEqualType []) then{
_wMags = true;
_wMagsArray = _x;
} else {
// attachments
if (_x != "") then{
_attachments pushBack _x;
};
};
} forEach _x;
// add all attachments to vehicle
// TODO replace with adding attachments directly to gun (Arma feature dependant)
{
_vehicle addItemCargoGlobal[_x, 1];
} forEach _attachments;
if (_wMags) then{
if (_wMagsArray isEqualType [] && (count _wMagsArray) >= 2) then{
_vehicle addMagazineAmmoCargo[_wMagsArray select 0, 1, _wMagsArray select 1];
};
};
};
};
};
// Magazine cargo
case 1: {
_magazineName = _x;
_magazineSize = _objQty select _forEachIndex;
if ((_magazineName isEqualType "STRING") && (_magazineSize isEqualType 0)) then {
_magazineSizeMax = getNumber (configFile >> "CfgMagazines" >> _magazineName >> "count");
if (_magazineSizeMax >= 1) then {
// Add full magazines cargo
_vehicle addMagazineAmmoCargo [_magazineName, floor (_magazineSize / _magazineSizeMax), _magazineSizeMax];
// Add last non full magazine
if ((_magazineSize % _magazineSizeMax) > 0) then {
_vehicle addMagazineAmmoCargo [_magazineName, 1, floor (_magazineSize % _magazineSizeMax)];
};
};
};
};
// Backpack cargo
case 2: {
if (_x isEqualType "STRING") then {
_qty = _objQty select _forEachIndex;
_vehicle addBackpackCargoGlobal [_x, _qty];
};
};
// Item cargo
case 3: {
if (_x isEqualType "STRING") then {
_qty = _objQty select _forEachIndex;
_vehicle addItemCargoGlobal [_x, _qty];
};
};
};
} forEach _objTypes;
} forEach (_arr select 5);
// utilize He-Man's new Cargo functions
[_vehicle,_arr select 5] call EPOCH_server_CargoFill;
// remove and add back magazines
if !((_arr select 6) isequalto []) then {

View File

@ -0,0 +1,78 @@
params [["_vehicle",objnull],["_items",[]]];
{
_objType = _forEachIndex;
_objTypes = _x;
_objQty = [];
if (_objType in [1, 2, 3]) then {
_objTypes = _x select 0;
_objQty = _x select 1;
};
{
switch _objType do {
// Weapon cargo
case 0: {
if (_x isEqualType []) then {
if ((count _x) >= 4) then {
_vehicle addWeaponCargoGlobal[_x deleteAt 0, 1];
_attachments = [];
_wMags = false;
_wMagsArray = [];
// suppressor, laser, optics, magazines(array), bipods
{
// magazines
if (_x isEqualType []) then{
_wMags = true;
_wMagsArray = _x;
} else {
// attachments
if (_x != "") then{
_attachments pushBack _x;
};
};
} forEach _x;
// add all attachments to vehicle
// TODO replace with adding attachments directly to gun (Arma feature dependant)
{
_vehicle addItemCargoGlobal[_x, 1];
} forEach _attachments;
if (_wMags) then{
if (_wMagsArray isEqualType [] && (count _wMagsArray) >= 2) then{
_vehicle addMagazineAmmoCargo[_wMagsArray select 0, 1, _wMagsArray select 1];
};
};
};
};
};
// Magazine cargo
case 1: {
_magazineName = _x;
_magazineSize = _objQty select _forEachIndex;
if ((_magazineName isEqualType "STRING") && (_magazineSize isEqualType 0)) then {
_magazineSizeMax = getNumber (configFile >> "CfgMagazines" >> _magazineName >> "count");
if (_magazineSizeMax >= 1) then {
// Add full magazines cargo
_vehicle addMagazineAmmoCargo [_magazineName, floor (_magazineSize / _magazineSizeMax), _magazineSizeMax];
// Add last non full magazine
if ((_magazineSize % _magazineSizeMax) > 0) then {
_vehicle addMagazineAmmoCargo [_magazineName, 1, floor (_magazineSize % _magazineSizeMax)];
};
};
};
};
// Backpack cargo
case 2: {
if (_x isEqualType "STRING") then {
_qty = _objQty select _forEachIndex;
_vehicle addBackpackCargoGlobal [_x, _qty];
};
};
// Item cargo
case 3: {
if (_x isEqualType "STRING") then {
_qty = _objQty select _forEachIndex;
_vehicle addItemCargoGlobal [_x, _qty];
};
};
};
} forEach _objTypes;
} forEach _items;

View File

@ -0,0 +1,66 @@
params [["_vehicle",objnull]];
// may not be needed but should prevent <null> in DB.
_wepsItemsCargo = weaponsItemsCargo _vehicle;
if (isNil "_wepsItemsCargo") then {
_wepsItemsCargo = [];
};
_magsAmmoCargo = magazinesAmmoCargo _vehicle;
if (isNil "_magsAmmoCargo") then {
_magsAmmoCargo = [];
};
{
_cargo = _x select 1;
_magsAmmoCargox = magazinesAmmoCargo _cargo;
{
_magsAmmoCargo pushback _x;
} foreach _magsAmmoCargox;
_wepsItemsCargox = weaponsItemsCargo _cargo;
{
_wepsItemsCargo pushback _x;
} foreach _wepsItemsCargox;
} foreach everycontainer _vehicle;
// minimize magazine ammo cargo
_magsAmmoCargoMinimized = [[],[]];
{
// find cargo in temp var
_cargoIndex = _magsAmmoCargoMinimized find (_x select 0);
if (_cargoIndex >= 0) then {
(_magsAmmoCargoMinimized select 1) set [_cargoIndex, ((_magsAmmoCargoMinimized select 1) select _cargoIndex) + (_x select 1)]; // get count & add current
}
else {
(_magsAmmoCargoMinimized select 0) pushBack (_x select 0); // classname
(_magsAmmoCargoMinimized select 1) pushBack (_x select 1); // count
};
} forEach _magsAmmoCargo;
// convert and normalize
_wepsItemsCargoNormalized = [];
{
_selectedWeaponComponents = _x;
_selectedWeapon = _selectedWeaponComponents deleteAt 0;
// find actual weapon components - todo this BIS call maybe slow
_weaponComponents = _selectedWeapon call BIS_fnc_weaponComponents;
// base weapon (without attachments)
_weapon = _weaponComponents deleteAt 0;
_newComponents = [];
{
// remove attachments that are already linked via config
if (_x isEqualType "" && {(tolower _x) in _weaponComponents}) then {
_newComponents pushBack "";
//diag_log format ["DEBUG: suppressed saving of %1 for weapon %2 config %3", _x, [_selectedWeapon,_selectedWeaponComponents],[_weapon,_weaponComponents]];
} else {
_newComponents pushBack _x;
};
} forEach _selectedWeaponComponents;
_wepsItemsCargoNormalized pushBack ([_selectedWeapon] + _newComponents);
} forEach _wepsItemsCargo;
_inventory = [
_wepsItemsCargoNormalized,
_magsAmmoCargoMinimized,
getBackpackCargo _vehicle,
getItemCargo _vehicle
];
_inventory

View File

@ -28,72 +28,8 @@ if (!isNull _vehicle) then {
_vehicle setDamage 0;
_vehiclePos = getposATL _vehicle;
// may not be needed but should prevent <null> in DB.
_wepsItemsCargo = weaponsItemsCargo _vehicle;
if (isNil "_wepsItemsCargo") then {
_wepsItemsCargo = [];
};
_magsAmmoCargo = magazinesAmmoCargo _vehicle;
if (isNil "_magsAmmoCargo") then {
_magsAmmoCargo = [];
};
{
_cargo = _x select 1;
_magsAmmoCargox = magazinesAmmoCargo _cargo;
{
_magsAmmoCargo pushback _x;
} foreach _magsAmmoCargox;
_wepsItemsCargox = weaponsItemsCargo _cargo;
{
_wepsItemsCargo pushback _x;
} foreach _wepsItemsCargox;
} foreach everycontainer _vehicle;
// minimize magazine ammo cargo
_magsAmmoCargoMinimized = [[],[]];
{
// find cargo in temp var
_cargoIndex = _magsAmmoCargoMinimized find (_x select 0);
if (_cargoIndex >= 0) then {
(_magsAmmoCargoMinimized select 1) set [_cargoIndex, ((_magsAmmoCargoMinimized select 1) select _cargoIndex) + (_x select 1)]; // get count & add current
}
else {
(_magsAmmoCargoMinimized select 0) pushBack (_x select 0); // classname
(_magsAmmoCargoMinimized select 1) pushBack (_x select 1); // count
};
} forEach _magsAmmoCargo;
// convert and normalize
_wepsItemsCargoNormalized = [];
{
_selectedWeaponComponents = _x;
_selectedWeapon = _selectedWeaponComponents deleteAt 0;
// find actual weapon components - todo this BIS call maybe slow
_weaponComponents = _selectedWeapon call BIS_fnc_weaponComponents;
// base weapon (without attachments)
_weapon = _weaponComponents deleteAt 0;
_newComponents = [];
{
// remove attachments that are already linked via config
if (_x isEqualType "" && {(tolower _x) in _weaponComponents}) then {
_newComponents pushBack "";
//diag_log format ["DEBUG: suppressed saving of %1 for weapon %2 config %3", _x, [_selectedWeapon,_selectedWeaponComponents],[_weapon,_weaponComponents]];
} else {
_newComponents pushBack _x;
};
} forEach _selectedWeaponComponents;
_wepsItemsCargoNormalized pushBack ([_selectedWeapon] + _newComponents);
} forEach _wepsItemsCargo;
_inventory = [
_wepsItemsCargoNormalized,
_magsAmmoCargoMinimized,
getBackpackCargo _vehicle,
getItemCargo _vehicle
];
_inventory = _vehicle call EPOCH_server_CargoSave;
_colorSlot = _vehicle getVariable ["STORAGE_TEXTURE",0];
_storageOwners = _vehicle getVariable["STORAGE_OWNERS",[]];
_locked = if (_vehicle getVariable["EPOCH_Locked", true]) then {1} else {-1};

View File

@ -27,77 +27,11 @@ if (!isNull _vehicle) then {
_hitpoints = (getAllHitPointsDamage _vehicle) param [2,[]];
// may not be needed but should prevent <null> in DB.
_wepsItemsCargo = weaponsItemsCargo _vehicle;
if (isNil "_wepsItemsCargo") then {
_wepsItemsCargo = [];
};
_magsAmmoCargo = magazinesAmmoCargo _vehicle;
if (isNil "_magsAmmoCargo") then {
_magsAmmoCargo = [];
};
{
_cargo = _x select 1;
_magsAmmoCargox = magazinesAmmoCargo _cargo;
{
_magsAmmoCargo pushback _x;
} foreach _magsAmmoCargox;
_wepsItemsCargox = weaponsItemsCargo _cargo;
{
_wepsItemsCargo pushback _x;
} foreach _wepsItemsCargox;
} foreach everycontainer _vehicle;
// minimize magazine ammo cargo
_magsAmmoCargoMinimized = [[],[]];
{
// find cargo in temp var
_cargoIndex = _magsAmmoCargoMinimized find (_x select 0);
if (_cargoIndex >= 0) then {
(_magsAmmoCargoMinimized select 1) set [_cargoIndex, ((_magsAmmoCargoMinimized select 1) select _cargoIndex) + (_x select 1)]; // get count & add current
}
else {
(_magsAmmoCargoMinimized select 0) pushBack (_x select 0); // classname
(_magsAmmoCargoMinimized select 1) pushBack (_x select 1); // count
};
} forEach _magsAmmoCargo;
// convert and normalize
_startTime = diag_tickTime;
//diag_log format ["DEBUG: BIS_fnc_weaponComponents start %1", _startTime];
_wepsItemsCargoNormalized = [];
{
_selectedWeaponComponents = _x;
_selectedWeapon = _selectedWeaponComponents deleteAt 0;
// find actual weapon components - todo this BIS call maybe slow
_weaponComponents = _selectedWeapon call BIS_fnc_weaponComponents;
//diag_log format ["DEBUG: BIS_fnc_weaponComponents end %1", diag_tickTime - _startTime];
// base weapon (without attachments)
_weapon = _weaponComponents deleteAt 0;
_newComponents = [];
{
// remove attachments that are already linked via config
if (_x isEqualType "" && {(tolower _x) in _weaponComponents}) then {
_newComponents pushBack "";
//diag_log format ["DEBUG: suppressed saving of %1 for weapon %2 config %3", _x, [_selectedWeapon,_selectedWeaponComponents],[_weapon,_weaponComponents]];
} else {
_newComponents pushBack _x;
};
} forEach _selectedWeaponComponents;
_wepsItemsCargoNormalized pushBack ([_selectedWeapon] + _newComponents);
} forEach _wepsItemsCargo;
// diag_log format ["DEBUG: convert and normalize end %1", diag_tickTime - _startTime];
_inventory = [
_wepsItemsCargoNormalized,
_magsAmmoCargoMinimized,
getBackpackCargo _vehicle,
getItemCargo _vehicle
];
_inventory = _vehicle call EPOCH_server_CargoSave;
_colorSlot = _vehicle getVariable ["VEHICLE_TEXTURE",0];
_VAL = [typeOf _vehicle,[(getposATL _vehicle call EPOCH_precisionPos),vectordir _vehicle,vectorup _vehicle],damage _vehicle,_hitpoints,fuel _vehicle,_inventory,[true,magazinesAllTurrets _vehicle],_colorSlot];
_baseType = _vehicle getVariable ["VEHICLE_BASECLASS",""];
_VAL = [typeOf _vehicle,[(getposATL _vehicle call EPOCH_precisionPos),vectordir _vehicle,vectorup _vehicle],damage _vehicle,_hitpoints,fuel _vehicle,_inventory,[true,magazinesAllTurrets _vehicle],_colorSlot,_baseType];
["Vehicle", _vehHiveKey, EPOCH_expiresVehicle, _VAL] call EPOCH_fnc_server_hiveSETEX;
};
};

View File

@ -24,21 +24,82 @@ if (_UpgradeVeh isequalto "") exitwith {
diag_log "No Upgrade Vehicle Class";
};
if !(_removeCrypto isequalto []) && !(_removeCrypto isEqualTo 0) then {
[_player,-_removeCrypto] remoteExec ["EPOCH_server_effectCrypto",2];
[_player,-_removeCrypto] call EPOCH_server_effectCrypto;
};
_slot = _veh getvariable ["vehicle_slot","-1"];
if (_slot isequalto "-1") exitwith {
diag_log "Vehicle has no Slot";
};
_pos = getposasl _veh;
_dir = getdir _veh;
_cargo = _veh call EPOCH_server_CargoSave;
_damage = damage _veh;
_hitPoints = getAllHitPointsDamage _veh;
_baseVeh = _veh getVariable ["VEHICLE_BASECLASS",""];
_typeVeh = typeOf _veh;
_colorVeh = _veh getVariable ["VEHICLE_TEXTURE",""];
_fuel = fuel _veh;
deletevehicle _veh;
waituntil {isnull _veh};
_pos set [2,(_pos select 2)+0.5];
_veh = createVehicle [_UpgradeVeh, [random 500, random 500,500], [], 0, "CAN_COLLIDE"];
_veh setVariable ["VEHICLE_SLOT", _slot, true];
_veh call EPOCH_server_setVToken;
_veh call EPOCH_server_vehicleInit;
_veh setdir _dir;
_veh setposasl _pos;
_newVeh = createVehicle [_UpgradeVeh, [random 500, random 500,500], [], 0, "CAN_COLLIDE"];
_newVeh setVariable ["VEHICLE_SLOT", _slot, true];
if!(_baseVeh isEqualTo "")then
{
_newVeh setVariable["VEHICLE_BASECLASS", _baseVeh];
}else{
_newVeh setVariable["VEHICLE_BASECLASS", _typeVeh];
};
_newVeh call EPOCH_server_setVToken;
_newVeh call EPOCH_server_vehicleInit;
_newVeh setdir _dir;
_newVeh setposasl _pos;
// set fuel level
_newVeh setFuel _fuel;
// apply persistent textures
_cfgEpochVehicles = 'CfgEpochVehicles' call EPOCH_returnConfig;
_newbaseVeh = _veh getVariable ["VEHICLE_BASECLASS",""];
_availableColorsConfig = (_cfgEpochVehicles >> _newbaseVeh >> "availableColors");
if (isArray(_availableColorsConfig)) then {
_color = _colorVeh;
_colors = getArray(_availableColorsConfig);
_textureSelectionIndex = (_cfgEpochVehicles >> _newbaseVeh >> "textureSelectionIndex");
_selections = if (isArray(_textureSelectionIndex)) then { getArray(_textureSelectionIndex) } else { [0] };
_count = (count _colors) - 1;
{
_textures = _colors select 0;
if (_count >= _forEachIndex) then {
_textures = _colors select _forEachIndex;
};
_newVeh setObjectTextureGlobal [_x, _textures select _color];
} forEach _selections;
_newVeh setVariable ["VEHICLE_TEXTURE", _color];
};
// disable thermal imaging equipment
_newVeh disableTIEquipment true;
// set damage and hitpoints
_newVeh setDamage _damage;
_allHitpoints = getAllHitPointsDamage _newVeh;
if !(_allHitpoints isEqualTo []) then{
_actualHitpoints = _allHitpoints select 0;
if ((count _actualHitpoints) == (count _hitpoints)) then{
{
_dmg = _hitpoints param [_forEachIndex,0];
if (_x in ["HitFuel", "HitEngine"]) then {
_dmg = _dmg min 0.9;
};
_newVeh setHitIndex [_forEachIndex, _dmg];
} forEach _actualHitpoints;
};
};
// add back old inventory
[_newveh,_cargo] call EPOCH_server_CargoFill;
// save new vehicle to db
_newveh call EPOCH_Server_Save_Vehicle;

View File

@ -95,6 +95,8 @@ class CfgServerFunctions
class server_packJack {};
class spawn_vehicle {};
class server_upgrade_vehicle {};
class server_CargoSave {};
class server_CargoFill {};
};
class epoch_server {
class weightedArray {};

View File

@ -163,7 +163,7 @@ diag_log "Epoch: Spawning vehicles";
_allowedVehiclesListArray = [];
{
_x params ["_vehClass","_velimit"];
_vehicleCount = {typeOf _x == _vehClass} count vehicles;
_vehicleCount = {(_x getvariable ["VEHICLE_BaseClass",typeOf _x]) == _vehClass} count vehicles;
// Load how many of this vehicle are in stock at any trader.
_indexStock = EPOCH_traderStoredVehicles find _vehClass;

View File

@ -18,14 +18,26 @@ class CfgEpochVehicles
textureSelectionIndex[] = {0};
availableColors[] = {{ "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE01_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE02_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE03_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE04_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE05_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE06_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE07_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE08_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE09_CO.paa" }};
};
class C_Hatchback_01_EPOCH1: C_Hatchback_01_EPOCH{};
class C_Hatchback_01_EPOCH2: C_Hatchback_01_EPOCH{};
class C_Hatchback_01_EPOCH3: C_Hatchback_01_EPOCH{};
class C_Hatchback_01_EPOCH4: C_Hatchback_01_EPOCH{};
class C_Offroad_01_EPOCH {
textureSelectionIndex[] = {0,1};
availableColors[] = {{ "\A3\soft_F\Offroad_01\Data\Offroad_01_ext_co.paa","\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE01_CO.paa","\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE02_CO.paa","\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE03_CO.paa","\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE04_CO.paa","\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE05_CO.paa" }};
};
class C_Offroad_01_EPOCH1: C_Offroad_01_EPOCH{};
class C_Offroad_01_EPOCH2: C_Offroad_01_EPOCH{};
class C_Offroad_01_EPOCH3: C_Offroad_01_EPOCH{};
class C_Offroad_01_EPOCH4: C_Offroad_01_EPOCH{};
class C_SUV_01_EPOCH {
textureSelectionIndex[] = {0};
availableColors[] = {{ "\A3\Soft_F_Gamma\SUV_01\Data\SUV_01_ext_CO.paa","\A3\Soft_F_Gamma\SUV_01\Data\SUV_01_ext_02_CO.paa","\A3\Soft_F_Gamma\SUV_01\Data\SUV_01_ext_03_CO.paa","\A3\Soft_F_Gamma\SUV_01\Data\SUV_01_ext_04_CO.paa" }};
};
class C_SUV_01_EPOCH1: C_SUV_01_EPOCH{};
class C_SUV_01_EPOCH2: C_SUV_01_EPOCH{};
class C_SUV_01_EPOCH3: C_SUV_01_EPOCH{};
class C_SUV_01_EPOCH4: C_SUV_01_EPOCH{};
class C_Van_01_transport_EPOCH {
textureSelectionIndex[] = {0};
availableColors[] = {{ "\A3\soft_f_gamma\van_01\Data\van_01_ext_CO.paa","\A3\soft_f_gamma\van_01\Data\van_01_ext_red_CO.paa" }};
@ -34,6 +46,10 @@ class CfgEpochVehicles
textureSelectionIndex[] = {0};
availableColors[] = {{ "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT01_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT02_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT03_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT04_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT05_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT06_CO.paa" }};
};
class C_Hatchback_02_EPOCH1: C_Hatchback_02_EPOCH{};
class C_Hatchback_02_EPOCH2: C_Hatchback_02_EPOCH{};
class C_Hatchback_02_EPOCH3: C_Hatchback_02_EPOCH{};
class C_Hatchback_02_EPOCH4: C_Hatchback_02_EPOCH{};
class C_Quadbike_01_EPOCH {
textureSelectionIndex[] = {0,1};
availableColors[] = {{ "\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_CIV_BLACK_CO.paa","\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_CIV_BLUE_CO.paa","\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_CIV_RED_CO.paa","\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_CIV_WHITE_CO.paa" },{ "\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_wheel_CIVBLACK_CO.paa","\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_wheel_CIVBLUE_CO.paa","\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_wheel_CIVRED_CO.paa","\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_wheel_CIVWHITE_CO.paa" }};