From c316d209a79f7e9866162638022e1361bf12ef2f Mon Sep 17 00:00:00 2001 From: AirwavesMan Date: Mon, 8 Mar 2021 15:00:51 +0100 Subject: [PATCH] Add submarine Thx @Helion4 for the model --- SQF/dayz_code/Configs/CfgParticles.hpp | 26 ++ .../CfgServerTrader/Category/Boats.hpp | 1 + .../CfgServerTraderZSC/Category/Boats.hpp | 1 + .../Configs/CfgVehicles/Boat/Submarine.hpp | 281 ++++++++++++++++++ .../Configs/CfgVehicles/CfgVehicles.hpp | 1 + SQF/dayz_code/config.cpp | 1 + .../compile/updateObject_functions.sqf | 4 +- SQF/dayz_server/system/dynamic_vehicle.sqf | 3 +- 8 files changed, 315 insertions(+), 3 deletions(-) create mode 100644 SQF/dayz_code/Configs/CfgParticles.hpp create mode 100644 SQF/dayz_code/Configs/CfgVehicles/Boat/Submarine.hpp diff --git a/SQF/dayz_code/Configs/CfgParticles.hpp b/SQF/dayz_code/Configs/CfgParticles.hpp new file mode 100644 index 000000000..5a9d3aa2f --- /dev/null +++ b/SQF/dayz_code/Configs/CfgParticles.hpp @@ -0,0 +1,26 @@ +//need to remove the spray, submarine is not a speedboat, +//so create an empty particle effect +class CfgCloudlets +{ + class Default; + class subpart: Default + { + interval = 0; + sizeCoef = 0; + colorCoef[] = {1,1,1,1}; + animationName = ""; + animationSpeedCoef = 0; + lifetime = 0; + position[] = {0,0,0}; + }; +}; + +//need to remove the spray, submarine is not a speedboat +class subspray +{ + class subspray + { + simulation = "particles"; + type = "subpart"; + }; +}; \ No newline at end of file diff --git a/SQF/dayz_code/Configs/CfgServerTrader/Category/Boats.hpp b/SQF/dayz_code/Configs/CfgServerTrader/Category/Boats.hpp index fee858179..24306ec2f 100644 --- a/SQF/dayz_code/Configs/CfgServerTrader/Category/Boats.hpp +++ b/SQF/dayz_code/Configs/CfgServerTrader/Category/Boats.hpp @@ -8,6 +8,7 @@ class Category_48 { //Unarmed Boats class Category_49 { + class Submarine_DZE {type = "trade_any_boat";buy[] = {2,"ItemBriefcase100oz"};sell[] = {1,"ItemBriefcase100oz"};}; class Smallboat_1_DZE {type = "trade_any_boat";buy[] = {2,"ItemGoldBar10oz"};sell[] = {1,"ItemGoldBar10oz"};}; class Smallboat_2_DZE {type = "trade_any_boat";buy[] = {2,"ItemGoldBar10oz"};sell[] = {1,"ItemGoldBar10oz"};}; class Fishing_Boat_DZE {type = "trade_any_boat";buy[] = {4,"ItemGoldBar10oz"};sell[] = {2,"ItemGoldBar10oz"};}; diff --git a/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Boats.hpp b/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Boats.hpp index a0576cb45..bbae7878f 100644 --- a/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Boats.hpp +++ b/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Boats.hpp @@ -8,6 +8,7 @@ class Category_48 { //Unarmed Boats class Category_49 { + class Submarine_DZE {type = "trade_any_boat";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; class Smallboat_1_DZE {type = "trade_any_boat";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; class Smallboat_2_DZE {type = "trade_any_boat";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; class Fishing_Boat_DZE {type = "trade_any_boat";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; diff --git a/SQF/dayz_code/Configs/CfgVehicles/Boat/Submarine.hpp b/SQF/dayz_code/Configs/CfgVehicles/Boat/Submarine.hpp new file mode 100644 index 000000000..ebcd6b7ec --- /dev/null +++ b/SQF/dayz_code/Configs/CfgVehicles/Boat/Submarine.hpp @@ -0,0 +1,281 @@ +class ship; +class Submarine: ship +{ + scope = 0; + class HitPoints; + class ViewPilot; +}; + +class Submarine_DZE_base: Submarine +{ + displayName = "Submarine"; + model = "\z\addons\dayz_epoch_v\vehicles\sub\epoch_sub_01.p3d"; + picture = "\ca\water\data\ico\pbx_CA.paa"; + Icon = "\Ca\water\Data\map_ico\icomap_rubber_CA.paa"; + mapSize = 6; + vehicleClass = "DayZ Epoch Vehicles"; +//vehicle characteristics + maxSpeed = 125; + brakeDistance = 20; + armor = 20; + damageResistance = 0.00318; + crewVulnerable = 1; + castDriverShadow = 0; + castCargoShadow = 0; + supplyRadius = 5; + hasGunner = 0; + enableManualFire = 0; + weapons[] = {}; + magazines[] = {}; + precision = 10; + enableGPS = false; + memoryPointsGetInDriver = "pos driver"; + memoryPointsGetInDriverDir = "pos driver dir"; + memoryPointsGetInCargo = "pos cargo"; + memoryPointsGetInCargoDir = "pos cargo dir"; +//need to remove the spray, submarine is not a speedboat + leftWaterEffect = "subspray"; + rightWaterEffect = "subspray"; + leftEngineEffect = "subspray"; + rightEngineEffect = "subspray"; + destrType = DestructWreck; + class DestructionEffects; + //driverForceOptics = 1; + //driverOpticsModel = "\ca\Tracked\optika_M1A1_commander"; + +//based on fishing boat + transportMaxMagazines = 500; + transportMaxWeapons = 50; + transportMaxBackpacks = 10; +// unitInfoType = UnitInfoCar; //By default no hud information +//crew + getInAction = GetInLow; + getOutAction = GetOutLow; + transportSoldier = 3; + typicalCargo[] = {RU_Soldier,RU_Soldier_AR,RU_Soldier_AR}; + driverAction = PBX_Driver; + cargoAction[] = {Truck_Cargo04,Truck_Cargo01,Truck_Cargo01}; +// FB_Cargo01,FB_Cargo02,FB_Cargo03,FB_Cargo03,FB_Cargo03,FB_Cargo03,FB_Cargo04 + cargoGetInAction[] = {"GetInLow"}; + cargoGetOutAction[] = {"GetOutLow"}; + extCameraPosition[] = {0,4.0,-14.0}; + +//ensure no turrets active + class turrets{}; +//anim sources + class AnimationSources + { + class dive + { + AnimPeriod = 12; + source = "user"; + InitPhase = 0; + }; + class peri_trans + { + AnimPeriod = 3; + source = "user"; + InitPhase = 0; + }; + class IndicatorSonar + { + AnimPeriod = 1; + source = "user"; + InitPhase = 0; + }; + }; +//in vehicle actions + class UserActions + { + class dive + { + displayName = "Dive"; + displayNameDefault = ""; + onlyforplayer = true; + position = "zamerny"; + radius = 1; + priority = 99; + condition = "(player == (driver this)) && {(surfaceIsWater position this) && {(((getPosATL this) select 2) > 10) && (this animationphase ""dive"" <= 0.5)}}"; + statement = "this animate [""dive"", 1]"; + }; + class surface : dive + { + displayName = "Surface"; + condition = "(player == (driver this)) && {(this animationphase ""dive"" > 0.5)}"; + statement = "this animate [""dive"", 0];"; + }; + /* + class periscope_up + { + displayName = "Periscope Up"; + displayNameDefault = ""; + onlyforplayer = true; + position = "zamerny"; + radius = 3; + priority = 99; + condition = "(player == driver this) && (this animationphase ""peri_trans"" < 0.5)"; + statement = "this animate [""peri_trans"", 1]"; + }; + class periscope_down : periscope_up + { + displayName = "Periscope Down"; + condition = "(player == driver this) && (this animationphase ""peri_trans"" > 0.5)"; + statement = "this animate [""peri_trans"", 0];"; + }; + */ + }; +//damage + class HitPoints: HitPoints + { + class HitHull + { + armor = 0.85; + material = -1; + name = "telo"; + visual = "zbytek"; + passThrough = 1; + }; + class HitEngine + { + armor = 1.2; + material = 60; + name = "motor"; + visual = "zbytek"; + passThrough = 1; + }; + }; + class Damage + { + tex[] = {}; + mat[] = + { + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_01.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_01_damage.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_01_destruct.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_02.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_02_damage.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_02_destruct.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_03.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_03_damage.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_03_destruct.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_details.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_details_damage.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_details_destruct.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_int.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_int_damage.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_int_destruct.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_shell.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_shell_damage.rvmat", + "z\addons\dayz_epoch_v\vehicles\sub\data\sub_shell_destruct.rvmat" + }; + }; +//sounds + insideSoundCoef = 1; + soundEngineOnInt[] = {"ca\sounds\vehicles\water\rhib\ext-boat-start-01", db-20, 1.0}; + soundEngineOnExt[] = {"ca\sounds\vehicles\water\rhib\ext-boat-start-01", db0, 1.0, 150}; + soundEngineOffInt[] = {"ca\sounds\vehicles\water\rhib\ext-boat-stop-01", db-20, 1.0}; + soundEngineOffExt[] = {"ca\sounds\vehicles\water\rhib\ext-boat-stop-01", db0, 1.0, 150}; + class Sounds + { + class Engine + { + sound[] = {"ca\sounds\vehicles\water\rhib\ext-boat-engine-low-01", db0, 0.9, 300}; + frequency = "(randomizer*0.05+0.95)*rpm"; + volume = "engineOn*(rpm factor[0.5, 0.1])"; + }; + class EngineHighOut + { + sound[] = {"ca\sounds\vehicles\water\rhib\ext-boat-engine-high-01", db0, 0.8, 300}; + frequency = "(randomizer*0.05+0.95)*rpm"; + volume = "engineOn*(rpm factor[0.4, 1.3])"; + }; + class IdleOut + { + sound[] = {"ca\sounds\vehicles\water\rhib\ext-boat-engine-idle-03", db-5, 1.0, 150}; + frequency = "1"; + volume = "engineOn*(rpm factor[0.3, 0])"; + }; + class WaternoiseOutW0 + { + sound[] = {"ca\sounds\vehicles\water\water_sfx\ext-water-noise-nospeed", db-8, 1.0, 100}; + frequency = "1"; + volume = "(speed factor[7, 0])"; + }; + class WaternoiseOutW1 + { + sound[] = {"ca\sounds\vehicles\water\water_sfx\ext-boat-lospd-noise-02", db-8, 1.0, 100}; + frequency = "1"; + volume = "((speed factor[2, 12]) min (speed factor[12, 2]))"; + }; + class WaternoiseOutW2 + { + sound[] = {"ca\sounds\vehicles\water\water_sfx\ext-boat-hispd-noise-02", db-8, 1.0, 100}; + frequency = "1"; + volume = "(speed factor[9, 18.7])"; + }; + }; + class ViewPilot: ViewPilot + { + initFov = 0.7; + minFov = 0.25; + maxFov = 1.4; + initAngleX = 0; + minAngleX = -65; + maxAngleX = 85; //Rg + initAngleY = 0; + minAngleY = -150; + maxAngleY = 150; //Rg + }; +//searchlight + class Reflectors + { + class main_reflector + { + color[] = {0.8, 0.8, 0.9, 1.0}; + ambient[] = {0.1, 0.1, 0.1, 1.0}; + position = "light"; + direction = "lightEnd"; + hitpoint = "light"; + selection = "light"; + size = 1.0; + brightness = 5.0; + }; + }; +//blinkers + class MarkerLights + { + class RedStill + { + name = "red_light"; + color[] = {1.0, 0.1, 0.1, 1}; + ambient[] = {0.1, 0.01, 0.01, 1}; + brightness = 0.01; + blinking = false; + }; + class GreenStill + { + name = "green_light"; + color[] = {0.1, 1.0, 0.1, 1}; + ambient[] = {0.01, 0.1, 0.01, 1}; + brightness = 0.01; + blinking = false; + }; + class WhiteStill + { + name = "white_light"; + color[] = {1.0, 1.0, 1.0, 1}; + ambient[] = {0.1, 0.1, 0.1, 1}; + brightness = 0.01; + blinking = false; + }; + }; +}; + +class Submarine_DZE: Submarine_DZE_base +{ + scope = 2; + displayName = $STR_VEH_NAME_SUBMARINE; + transportMaxMagazines = 360; + transportMaxWeapons = 80; + transportMaxBackpacks = 20; +}; \ No newline at end of file diff --git a/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp b/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp index 90efa4765..7609b527c 100644 --- a/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp +++ b/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp @@ -707,6 +707,7 @@ class CfgVehicles #include "Boat\smallboat.hpp" #include "Boat\JetSkiYanahui.hpp" #include "Boat\Seafox.hpp" + #include "Boat\Submarine.hpp" //Epoch Parachute #include "Parachute.hpp" diff --git a/SQF/dayz_code/config.cpp b/SQF/dayz_code/config.cpp index 5997e3d0a..50a6ab9f5 100644 --- a/SQF/dayz_code/config.cpp +++ b/SQF/dayz_code/config.cpp @@ -114,6 +114,7 @@ class DefaultEventhandlers { #include "Configs\CfgGlasses.hpp" #include "Configs\CfgArma.hpp" #include "Configs\CfgRecoils.hpp" +#include "Configs\CfgParticles.hpp" //#include "Configs\RadioProtocol.hpp" //#include "gui\padlock\padlock_ui.hpp" diff --git a/SQF/dayz_server/compile/updateObject_functions.sqf b/SQF/dayz_server/compile/updateObject_functions.sqf index 5a27c372c..a85bf7498 100644 --- a/SQF/dayz_server/compile/updateObject_functions.sqf +++ b/SQF/dayz_server/compile/updateObject_functions.sqf @@ -88,8 +88,8 @@ server_obj_dam = { _array set [count _array,[(_hit select 1),0]]; }; } count _hitpoints; - - if (_allFixed && {!_totalDmg}) then {_object setDamage 0;}; + + if (_allFixed && !_totalDmg) then {_object setDamage 0;}; if (_forced) then { if (_object in needUpdate_objects) then {needUpdate_objects = needUpdate_objects - [_object];}; diff --git a/SQF/dayz_server/system/dynamic_vehicle.sqf b/SQF/dayz_server/system/dynamic_vehicle.sqf index 0f4d64ad0..ab34c26d3 100644 --- a/SQF/dayz_server/system/dynamic_vehicle.sqf +++ b/SQF/dayz_server/system/dynamic_vehicle.sqf @@ -216,7 +216,8 @@ if (toLower worldName in ["caribou","chernarus","cmr_ovaron","dayznogova","dingo ["RHIB2Turret_DZE",_Ratio1], ["Smallboat_1_DZE",_Ratio3], ["Smallboat_2_DZE",_Ratio3], - ["Zodiac_DZE",_Ratio3] + ["Zodiac_DZE",_Ratio3], + ["Submarine_DZE",_Ratio3] ]; };