Painting Garage (WIP)

This commit is contained in:
He-Man 2019-05-01 23:31:15 +02:00
parent a1208577a8
commit 76ef193139
15 changed files with 348 additions and 23 deletions

@ -1 +1 @@
5 "" !="bis_fnc_execvm \[\[.+\],\"initPlayerServer.sqf\"]" !="bis_fnc_effectkilled(airdestruction|secondaries) \[.+\]" !="epoch_server_(checkplayer|save(_vehicles|building)|(lock|pack)Storage|(upgrade|remove|paint|maint)build) \[.+\]" !="epoch_server_((load|respawn|dead|invite|revive|teleport)Player) \[.+\]" !="epoch_server_((upgrade|updateplayer|inviteplayer|create|delete)(Temp|)Group) \[.+\]" !="epoch_server_(deadplayerdetonate|triggerantagonist|playersetvariable|missioncomms|make(marker|SP)|removemarker) \[.+\]" !="epoch_server_(upgrade_vehicle|knockDownTree|mineRocks|lootAnimal|handle_(say3d|switchmove|sapperObjs)) \[.+\]" !="epoch_server_((repair|fill|lock)Vehicle|(loot|fill)Container|(store|take)Crypto|make(NPC|)Trade) \[.+\]" !="epoch_server_(paycrypto|tradeRequest|equippeditem|packJack|create(object|AirDrop)|airDropCrate|destroytrash|unpackBackpack) \[.+\]" !="epoch_(localcleanup|fnc_saveplayer|client_bitePlayer|serverlootobject|fnc_updateplayerstats) \[.+\]" !="cup_fnc_handletow \[.+\]" !="bis_fnc_reviveinitaddplayer \[.+\]" !="epoch_server_(setfinalplayerpos|defusebomb|putcrypto) \[.+\]"
5 "" !="bis_fnc_execvm \[\[.+\],\"initPlayerServer.sqf\"]" !="bis_fnc_effectkilled(airdestruction|secondaries) \[.+\]" !="epoch_server_(checkplayer|save(_vehicles|building)|(lock|pack)Storage|(upgrade|remove|paint|maint)build) \[.+\]" !="epoch_server_((load|respawn|dead|invite|revive|teleport)Player) \[.+\]" !="epoch_server_((upgrade|updateplayer|inviteplayer|create|delete)(Temp|)Group) \[.+\]" !="epoch_server_(deadplayerdetonate|triggerantagonist|playersetvariable|missioncomms|make(marker|SP)|removemarker) \[.+\]" !="epoch_server_(upgrade_vehicle|knockDownTree|mineRocks|lootAnimal|handle_(say3d|switchmove|sapperObjs)) \[.+\]" !="epoch_server_((repair|fill|lock)Vehicle|(loot|fill)Container|(store|take)Crypto|make(NPC|)Trade) \[.+\]" !="epoch_server_(paycrypto|tradeRequest|equippeditem|packJack|create(object|AirDrop)|airDropCrate|destroytrash|unpackBackpack) \[.+\]" !="epoch_(localcleanup|fnc_saveplayer|client_bitePlayer|serverlootobject|fnc_updateplayerstats) \[.+\]" !="cup_fnc_handletow \[.+\]" !="bis_fnc_reviveinitaddplayer \[.+\]" !="epoch_server_(setfinalplayerpos|defusebomb|putcrypto|paintvehicle) \[.+\]"

@ -0,0 +1,74 @@
_this spawn {
params ["_Building","_Vehicle",["_Textures",[]]];
_PaintingCosts = getnumber (missionconfigfile >> "CfgPainting" >> (typeof _Vehicle) >> "PaintingCosts");
if (EPOCH_playerCrypto < _PaintingCosts) exitWith {
_line = format ['You need %1 Crypto for Painting', _PaintingCosts];
[_line,5] call Epoch_message;
};
_ok = true;
_Check1 = {
_out1 = true;
if (_Vehicle distance2D _Building > 1.5) exitwith {
["Park in center of the Garage",5] call Epoch_Message;
false
};
if !((crew _Vehicle) isEqualTo []) exitwith {
["All passengers have to leave the Vehicle",5] call Epoch_Message;
false
};
{
_playerPosASL = visiblePositionASL _x;
_abovePlayerPosASL = [_playerPosASL select 0,_playerPosASL select 1,(_playerPosASL select 2) + 15];
if (lineIntersects [_playerPosASL, _abovePlayerPosASL, _x]) exitwith {
["All Players have to leave the Garage",5] call Epoch_Message;
_out1 = false;
};
} foreach (_Building nearentities ["MAN",(sizeof (typeof _Building))/2]);
_out1
};
_DoorCheck = {
(_building animationPhase "Lroll_door") < 0.1
};
_Animate = {
_Building animate ["Lroll_door",_this];
_Building animate ["Uroll_door",_this];
_Building animate ["door_2",if (_this == 1) then {0} else {1}];
};
if !(call _Check1) exitwith {};
0 call _Animate;
waituntil {uisleep 0.2; !(call _Check1) || call _DoorCheck};
if !(call _DoorCheck) exitwith {};
_smokes = [];
_smokeclasses = ["SmokeShellOrange","SmokeShellBlue","SmokeShellPurple","SmokeShellRed","SmokeShellGreen","SmokeShellYellow"];
for "_i" from 0 to 5 do {
_pos = switch _i do {
case 0: {[-1.5,2,-0.35]};
case 1: {[1.5,2,-0.35]};
case 2: {[-1.5,-2,-0.35]};
case 3: {[1.5,-2,-0.35]};
case 4: {[0,0,-0.35]};
default {[0,0,0]};
};
if !(call _DoorCheck) exitwith {};
_smoke = (_smokeclasses deleteat 0) createVehicle getPosATL _Vehicle;
_smoke attachTo [_Vehicle,_pos];
_smokes pushback _smoke;
uisleep 3.5;
};
if !(call _DoorCheck) exitwith {
["Painting Abort - Someone has opened the Door",5] call Epoch_Message;
{
deletevehicle _x;
} foreach _smokes;
1 call _Animate;
};
if !(_Textures isEqualTo []) then {
[_vehicle,_PaintingCosts,_Textures,player,Epoch_personalToken] remoteexec ['epoch_server_paintvehicle',2];
};
{
deletevehicle _x;
} foreach _smokes;
uisleep 5;
["Painting finished! Thank you very much...",5] call Epoch_Message;
1 call _Animate;
};

@ -53,6 +53,17 @@ _checkConfigs = {
_cfg = "CfgBaseBuilding" call EPOCH_returnConfig;
(_cfg >> dyna_cursorTargetType)
};
case "PaintGarage":
{
private _cfgtmp = "CfgPainting" call EPOCH_returnConfig;
_garageveh = ((dyna_cursorTarget nearentities 10) select {isclass (_cfgtmp >> (typeof _x))}) param [0, objnull];
if (isnull _garageveh) exitwith {
["No Paintable Vehicle found in Garage",5] call Epoch_message;
(_cfg >> _selfOrTarget)
};
dyna_Paintobj = _garageveh;
(_cfgtmp >> (typeof _garageveh))
};
case "":
{
(_cfg >> _selfOrTarget)
@ -97,6 +108,25 @@ _checkConfigs = {
} forEach (getArray (_config >> "upgradeBuilding"));
};
case "PaintGarage":
{
if !(isClass _config) exitWith {_in = "";};
_icon = gettext (_config >> "icon");
{
_tooltip = gettext (_x >> "ColorName");
_iconcolor = getarray (_x >> "iconcolor");
private _textures = getarray (_x >> "textures");
if (_textures isEqualTo []) exitwith {_in = "";};
_action = format ["[dyna_cursorTarget,dyna_Paintobj,%1] call EPOCH_vehicle_Paintgarage; true call Epoch_dynamicMenuCleanup;",_textures];
_buttonSettings pushBack [
_icon,
_tooltip,
_action,
_iconcolor
];
} forEach (configProperties [_config, "isClass _x",true]);
};
default
{

@ -88,6 +88,13 @@ for "_e" from 0 to (_entries - 1) do {
_ctrl2 ctrlSetTooltipColorBox [0, 0, 0, 0];
_ctrl2 ctrlSetTooltipColorShade [0, 0, 0, 0];
_ctrl2 ctrlSetText (_buttonSettings select _e select 0);
if (count (_buttonSettings select _e) > 3) then {
if ((_buttonSettings select _e select 3) isEqualType []) then {
if !((_buttonSettings select _e select 3) isEqualTo []) then {
_ctrl2 ctrlSetTextColor (_buttonSettings select _e select 3);
};
};
};
_ctrl2 ctrlSetPosition [0.5,0.5,0,0];
_ctrl2 ctrlCommit 0;

@ -51,6 +51,7 @@ class CfgActionMenu
dyna_AtHome = "call {_nearjammers = (nearestObjects[player, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {player distance _x < (getnumber (getmissionconfig 'cfgEpochClient' >> 'CfgJammers' >> (typeof _x) >> 'buildingJammerRange'))};if (_nearjammers isEqualTo []) exitwith {false};_nearestJammer = _nearjammers select 0;((_nearestJammer getVariable['BUILD_OWNER', '-1']) in[getPlayerUID player, Epoch_my_GroupUID])}";
dyna_Watersource = "call {_nearObjects = nearestObjects [player, [], 2];_check = 'water';_ok = false;{if (alive _x) then {_ok = [_x, _check] call EPOCH_worldObjectType;};if (_ok) exitWith {};} forEach _nearObjects;_ok}";
dyna_Paintobj = "objnull"; // <--- internal use only!
};
class self

@ -22,6 +22,14 @@ class build_upgrade
tooltipcode = "format['Upgrade %1',getText(configFile >> 'CfgVehicles' >> (typeof dyna_cursorTarget) >> 'displayName')]";
class special {}; //uses external config, hardcoded
};
class PaintGarage
{
condition = "dyna_cursortargettype in ['paintshop']";
action = "";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Paint.paa";
tooltip = "Paint Garage";
class special {}; //uses external config, hardcoded
};
class build_remove
{
condition = "dyna_buildMode select 1";

@ -195,6 +195,7 @@ class CfgClientFunctions
class vehicle_checkTurretAmmo {};
class vehicle_removeTurretAmmo {};
class vehicle_ChangeLicensePlate {};
class vehicle_Paintgarage {};
};
class missions
{

@ -0,0 +1,161 @@
class CfgPainting {
class DefaultVehicle
{
PaintingCosts = 500;
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Paint.paa";
class Pink
{
ColorName = "Pink";
iconcolor[] = {1,0.0784,0.576,1};
textures[] = {
{0,"#(rgb,8,8,3)color(1,0.0784,0.576,1)"}
};
};
};
class C_Hatchback_01_EPOCH : DefaultVehicle
{
class White
{
ColorName = "White";
iconcolor[] = {1, 1, 1, 1};
textures[] = {
{0,"\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_CO.paa"}
};
};
class Green
{
ColorName = "Green";
iconcolor[] = {0, 1, 0, 1};
textures[] = {
{0,"\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE02_CO.paa"}
};
};
class Blue
{
ColorName = "Blue";
iconcolor[] = {0, 0, 1, 1};
textures[] = {
{0,"\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE04_CO.paa"}
};
};
class Yellow
{
ColorName = "Yellow";
iconcolor[] = {1, 1, 0, 1};
textures[] = {
{0,"\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE06_CO.paa"}
};
};
class Grey
{
ColorName = "Grey";
iconcolor[] = {0.5, 0.5, 0.5, 1};
textures[] = {
{0,"\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE07_CO.paa"}
};
};
class Black
{
ColorName = "Black";
iconcolor[] = {0.1, 0.1, 0.1, 1};
textures[] = {
{0,"\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_Hatchback_02_EPOCH: C_Hatchback_01_EPOCH{};
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_Offroad_01_EPOCH : DefaultVehicle
{
class Red
{
ColorName = "Red";
iconcolor[] = {1, 0, 0, 1};
textures[] = {
{0,"\A3\soft_F\Offroad_01\Data\Offroad_01_ext_co.paa"}
};
};
class White
{
ColorName = "White";
iconcolor[] = {1, 1, 1, 1};
textures[] = {
{0,"\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE02_CO.paa"}
};
};
class Blue
{
ColorName = "Blue";
iconcolor[] = {0, 0, 1, 1};
textures[] = {
{0,"\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE03_CO.paa"}
};
};
class DarkRed
{
ColorName = "Dark Red";
iconcolor[] = {0.8, 0, 0, 1};
textures[] = {
{0,"\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE04_CO.paa"}
};
};
class BlackWhite
{
ColorName = "Black / White";
iconcolor[] = {0.1, 0.1, 0.1, 1};
textures[] = {
{0,"\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 : DefaultVehicle
{
class Red
{
ColorName = "Red";
iconcolor[] = {1, 0, 0, 1};
textures[] = {
{0,"\A3\Soft_F_Gamma\SUV_01\Data\SUV_01_ext_CO.paa"}
};
};
class Black
{
ColorName = "Black";
iconcolor[] = {0.1, 0.1, 0.1, 1};
textures[] = {
{0,"\A3\Soft_F_Gamma\SUV_01\Data\SUV_01_ext_02_CO.paa"}
};
};
class White
{
ColorName = "White";
iconcolor[] = {1, 1, 1, 1};
textures[] = {
{0,"\A3\Soft_F_Gamma\SUV_01\Data\SUV_01_ext_03_CO.paa"}
};
};
class Orange
{
ColorName = "Orange";
iconcolor[] = {1, 0.9, 0, 1};
textures[] = {
{0,"\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{};
};

@ -26,6 +26,11 @@ class CfgRemoteExec
{
mode = 1;
jip = 0;
class EPOCH_server_PaintVehicle
{
allowedTargets=2;
jip = 0;
};
class EPOCH_server_PutCrypto
{
allowedTargets=2;

@ -73,6 +73,7 @@ showHUD[] =
#include "Configs\cfgPricing.hpp"
#include "Configs\CfgDynamicHUD.hpp"
#include "Configs\CfgEPad.hpp"
#include "Configs\CfgPainting.hpp"
#include "Configs\CfgEpochClient.hpp"

@ -121,7 +121,7 @@ for "_i" from 1 to _maxVehicleLimit do {
// set fuel level
_vehicle setFuel _fuel;
// apply persistent textures
if ((missionnamespace getvariable ["UseCustomTextures",false]) && {!(_Textures isEqualTo [])}) then {
if (((missionnamespace getvariable ["UseCustomTextures",false]) || _color isEqualTo -1) && {!(_Textures isEqualTo [])}) then {
{
_vehicle setobjecttextureglobal [_foreachindex,_x];
} foreach _Textures;

@ -0,0 +1,27 @@
private ["_ok"];
_ok = true;
params [["_vehicle",objnull],["_PaintingCosts",0],["_textures",[]],["_player",objnull],["_token","",[""]]];
if !([_player,_token] call EPOCH_server_getPToken) exitWith {};
if (isnull _vehicle) exitwith {};
if (_Textures isEqualTo []) exitwith {};
if(_PaintingCosts > 0)then{
_cIndex = EPOCH_customVars find "Crypto";
_vars = _player getVariable["VARS", call EPOCH_defaultVars_SEPXVar];
_current_crypto = _vars select _cIndex;
if (_current_crypto < _PaintingCosts) exitwith {
_ok = false;
};
_playerCryptoLimit = EPOCH_customVarLimits select _cIndex;
_playerCryptoLimit params ["_playerCryptoLimitMax","_playerCryptoLimitMin"];
_current_crypto = ((_current_crypto - _PaintingCosts) min _playerCryptoLimitMax) max _playerCryptoLimitMin;
_current_crypto remoteExec ['EPOCH_effectCrypto',_player];
_vars set[_cIndex, _current_crypto];
_player setVariable["VARS", _vars];
};
if (_ok) then {
{
_vehicle SetObjectTextureGlobal _x;
} foreach _Textures;
_vehicle setVariable ["VEHICLE_TEXTURE", -1];
EPOCH_saveVehQueue pushBackUnique _vehicle;
};

@ -33,7 +33,7 @@ if (!isNull _vehicle) then {
_baseType = _vehicle getVariable ["VEHICLE_BASECLASS",""];
_Textures = [];
if (missionnamespace getvariable ["UseCustomTextures",false]) then {
if (missionnamespace getvariable ["UseCustomTextures",false] || _colorSlot isEqualTo -1) then {
_Textures = getObjectTextures _vehicle;
};

@ -41,6 +41,7 @@ _OldHitPoints = getAllHitPointsDamage _veh;
_typeVeh = typeOf _veh;
_baseVeh = _veh getVariable ["VEHICLE_BASECLASS",_typeVeh];
_color = _veh getVariable ["VEHICLE_TEXTURE",""];
_textures = getobjecttextures _veh;
_fuel = fuel _veh;
_lock = locked _veh;
deletevehicle _veh;
@ -55,28 +56,36 @@ _newVeh call EPOCH_server_vehicleInit;
_newVeh setFuel _fuel;
_newVeh lock _lock;
// apply persistent textures
_checkclass = _typeVeh;
if !(_newVeh iskindof _typeVeh) then {
_checkclass = _UpgradeVeh;
};
_cfgEpochVehicles = 'CfgEpochVehicles' call EPOCH_returnConfig;
_availableColorsConfig = (_cfgEpochVehicles >> _checkclass >> "availableColors");
if (isArray(_availableColorsConfig)) then{
_colors = getArray (_availableColorsConfig);
_textureSelectionIndex = (_cfgEpochVehicles >> _checkclass >> "textureSelectionIndex");
_selections = if (isArray(_textureSelectionIndex)) then{ getArray(_textureSelectionIndex) } else { [0] };
_textures = _colors select 0;
if (!(_newVeh iskindof _typeVeh) || _color isequalto "") then {
_color = floor(random(count _textures));
};
_count = (count _colors) - 1;
if (_color isEqualTo -1 && {(_newVeh iskindof _typeVeh)}) then {
{
if (_count >= _forEachIndex) then{
_textures = _colors select _forEachIndex;
};
_newVeh setObjectTextureGlobal[_x, (_textures select _color)];
} forEach _selections;
_newVeh SetObjectTextureGlobal [_foreachindex,_x];
} foreach _textures;
_newVeh setVariable["VEHICLE_TEXTURE", _color];
}
else {
_checkclass = _typeVeh;
if !(_newVeh iskindof _typeVeh) then {
_checkclass = _UpgradeVeh;
};
_cfgEpochVehicles = 'CfgEpochVehicles' call EPOCH_returnConfig;
_availableColorsConfig = (_cfgEpochVehicles >> _checkclass >> "availableColors");
if (isArray(_availableColorsConfig)) then{
_colors = getArray (_availableColorsConfig);
_textureSelectionIndex = (_cfgEpochVehicles >> _checkclass >> "textureSelectionIndex");
_selections = if (isArray(_textureSelectionIndex)) then{ getArray(_textureSelectionIndex) } else { [0] };
_textures = _colors select 0;
if (!(_newVeh iskindof _typeVeh) || _color isequalto "") then {
_color = floor(random(count _textures));
};
_count = (count _colors) - 1;
{
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

@ -109,6 +109,7 @@ class CfgServerFunctions
class server_CargoSave {};
class server_CargoFill {};
class server_removemagoritemcargo {};
class server_PaintVehicle {};
};
class epoch_server {
class precisionPos {};