From c316d209a79f7e9866162638022e1361bf12ef2f Mon Sep 17 00:00:00 2001 From: AirwavesMan Date: Mon, 8 Mar 2021 15:00:51 +0100 Subject: [PATCH 1/3] 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] ]; }; From 979751d3028c8a787379c7caf8cfb6ea57d7d883 Mon Sep 17 00:00:00 2001 From: AirwavesMan Date: Mon, 8 Mar 2021 15:07:13 +0100 Subject: [PATCH 2/3] Update PVDZ_plr_Save to prevent dayz_onBack dupe Thx to mmrsz from discord. PVDZ_plr_Save sends the current weapons from the player too now. This is needed to prevent the dayz_onBack dupe if the server has low fps. --- SQF/dayz_code/compile/player_forceSave.sqf | 4 ++-- SQF/dayz_code/compile/player_regularSave.sqf | 4 ++-- SQF/dayz_server/compile/server_playerSync.sqf | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/SQF/dayz_code/compile/player_forceSave.sqf b/SQF/dayz_code/compile/player_forceSave.sqf index 59a9ecdef..8259f8ba5 100644 --- a/SQF/dayz_code/compile/player_forceSave.sqf +++ b/SQF/dayz_code/compile/player_forceSave.sqf @@ -7,10 +7,10 @@ Opens player inventory to save _magazineArray = [] call player_countMagazines; if ((count _magazineArray) > 0) then { - PVDZ_plr_Save = [player, if (player isKindOf "PZombie_VB") then {nil} else {_magazineArray},dayz_onBack]; + PVDZ_plr_Save = [player, if (player isKindOf "PZombie_VB") then {nil} else {_magazineArray},dayz_onBack,weapons player]; publicVariableServer "PVDZ_plr_Save"; }; //diag_log format["Player_forceSave with magazines: %1",_magazineArray]; - + dayz_lastSave = diag_tickTime; diff --git a/SQF/dayz_code/compile/player_regularSave.sqf b/SQF/dayz_code/compile/player_regularSave.sqf index f0605d789..1f63a5bca 100644 --- a/SQF/dayz_code/compile/player_regularSave.sqf +++ b/SQF/dayz_code/compile/player_regularSave.sqf @@ -4,7 +4,7 @@ Email: N/A Creation date: 2020-12-30 17:20:00 - Last modified time: 2020-12-30 17:34:00 + Last modified time: 2021-03-08 14:04:00 Description: Requests a simple save for the player object. Example: @@ -13,5 +13,5 @@ Nothing */ -PVDZ_plr_Save = [player,nil,dayz_onBack]; +PVDZ_plr_Save = [player,nil,dayz_onBack,weapons player]; publicVariableServer "PVDZ_plr_Save"; \ No newline at end of file diff --git a/SQF/dayz_server/compile/server_playerSync.sqf b/SQF/dayz_server/compile/server_playerSync.sqf index 3ae756a3d..1ef129ebb 100644 --- a/SQF/dayz_server/compile/server_playerSync.sqf +++ b/SQF/dayz_server/compile/server_playerSync.sqf @@ -3,6 +3,7 @@ local _character = _this select 0; local _magazines = _this select 1; local _dayz_onBack = _this select 2; +local _weapons = _this select 3; local _characterID = _character getVariable ["characterID","0"]; local _playerUID = getPlayerUID _character; local _charPos = getPosATL _character; @@ -53,7 +54,7 @@ local _charPosLen = count _charPos; local _magTemp = []; if (!isNil "_magazines") then { - _playerGear = [weapons _character,_magazines,_dayz_onBack]; + _playerGear = [_weapons,_magazines,_dayz_onBack]; _character setVariable["ServerMagArray",[_magazines,_dayz_onBack], false]; } else { //check Magazines everytime they aren't sent by player_forceSave @@ -78,7 +79,7 @@ if (!isNil "_magazines") then { _magazines = _magTemp - ["0"]; _magazines = [_magazines, (_lastMagazines select 1)]; _character setVariable["ServerMagArray",_magazines, false]; - _playerGear = [weapons _character,_magazines select 0,_magazines select 1]; + _playerGear = [_weapons,_magazines select 0,_magazines select 1]; }; }; From 4fd12d00867ab7765853d3347c5abbb880fa98ca Mon Sep 17 00:00:00 2001 From: AirwavesMan Date: Mon, 8 Mar 2021 15:09:39 +0100 Subject: [PATCH 3/3] Add better handling for unbuyable items, vehicles on trading --- .../functions/z_at_displayBackpackInfo.sqf | 14 ++++++++------ .../functions/z_at_displayItemInfo.sqf | 12 ++++++++---- .../functions/z_at_displayVehicleInfo.sqf | 11 +++++++---- .../functions/z_at_displayWeaponInfo.sqf | 12 ++++++++---- SQF/dayz_code/stringtable.xml | 12 +++++++++++- 5 files changed, 42 insertions(+), 19 deletions(-) diff --git a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayBackpackInfo.sqf b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayBackpackInfo.sqf index 2125db50d..d2cf13652 100644 --- a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayBackpackInfo.sqf +++ b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayBackpackInfo.sqf @@ -32,23 +32,23 @@ if (Z_SingleCurrency) then { "
" + "%9: %2
" + "%10: %3
" + - "%12: %6 %4
" + - "%11: %5 %7
" + + "%12: %6 %7
" + + "%11: %5 %4
" + "%14: %8
", _picture, _display, _class, CurrencyName, if (_sellPrice >= 0) then {[_sellPrice] call BIS_fnc_numberText;} else {"";}, - if (_buyPrice >= 0) then {[_buyPrice] call BIS_fnc_numberText;} else {"";}, - CurrencyName, + if (_buyPrice >= 0) then {[_buyPrice] call BIS_fnc_numberText;} else {localize "STR_EPOCH_TRADE_UNBUYABLE";}, + if (_buyPrice >= 0) then {CurrencyName} else {""}, _transportMaxMagazines, localize "STR_EPOCH_NAME", localize "STR_EPOCH_CLASS", localize "STR_EPOCH_PLAYER_292", localize "STR_EPOCH_PLAYER_291", "\z\addons\dayz_code\gui\gear\gear_ui_slots_items_white.paa", - localize "STR_EPOCH_CARGO_SPACE" + localize "STR_EPOCH_CARGO_SPACE" ]; } else { _picSell = ""; @@ -60,6 +60,8 @@ if (Z_SingleCurrency) then { if (_buyPrice >= 0) then { _picBuy = getText (configFile >> 'CfgMagazines' >> _buyCurrency >> 'picture'); _buyCurrency = getText (configFile >> 'CfgMagazines' >> _buyCurrency >> 'displayName'); + } else { + _buyCurrency = ""; }; _formattedText = format [ @@ -74,7 +76,7 @@ if (Z_SingleCurrency) then { _class, _buyCurrency, if (_sellPrice >= 0) then {_sellPrice} else {"";}, - if (_buyPrice >= 0) then {_buyPrice} else {"";}, + if (_buyPrice >= 0) then {_buyPrice} else {localize "STR_EPOCH_TRADE_UNBUYABLE";}, _sellCurrency, _transportMaxMagazines, localize "STR_EPOCH_NAME", diff --git a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayItemInfo.sqf b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayItemInfo.sqf index 1aac58bbc..546dec199 100644 --- a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayItemInfo.sqf +++ b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayItemInfo.sqf @@ -57,19 +57,20 @@ if (Z_SingleCurrency) then { "
" + "%8: %2
" + "%9: %3
" + - "%11: %6 %7
" + + "%11: %6 %12
" + "%10: %5 %7
", _picture, _display, _class, 'lazy', if (_sellPrice >= 0) then {[_sellPrice] call BIS_fnc_numberText;} else {"";}, - if (_buyPrice >= 0) then {[_buyPrice] call BIS_fnc_numberText;} else {"";}, + if (_buyPrice >= 0) then {[_buyPrice] call BIS_fnc_numberText;} else {localize "STR_EPOCH_TRADE_UNBUYABLE";}, CurrencyName, localize "STR_EPOCH_NAME", localize "STR_EPOCH_CLASS", localize "STR_EPOCH_PLAYER_292", - localize "STR_EPOCH_PLAYER_291" + localize "STR_EPOCH_PLAYER_291", + if (_buyPrice >= 0) then {CurrencyName} else {""} ]; } else { _picSell = ""; @@ -81,7 +82,10 @@ if (Z_SingleCurrency) then { if (_buyPrice >= 0) then { _picBuy = getText (configFile >> "CfgMagazines" >> _buyCurrency >> "picture"); _buyCurrency = getText (configFile >> "CfgMagazines" >> _buyCurrency >> "displayName"); + } else { + _buyCurrency = ""; }; + _formattedText = format [ "
" + "%11: %2
" + @@ -93,7 +97,7 @@ if (Z_SingleCurrency) then { _class, 'lazy', if (_sellPrice >= 0) then {_sellPrice} else {"";}, - if (_buyPrice >= 0) then {_buyPrice} else {"";}, + if (_buyPrice >= 0) then {_buyPrice} else {localize "STR_EPOCH_TRADE_UNBUYABLE";}, _sellCurrency, _picSell, _buyCurrency, diff --git a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayVehicleInfo.sqf b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayVehicleInfo.sqf index faed7eabd..054e0ffab 100644 --- a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayVehicleInfo.sqf +++ b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayVehicleInfo.sqf @@ -117,7 +117,7 @@ if (Z_SingleCurrency) then { "
" + "%10: %2
" + "%11: %3
" + - "%13: %6 %7
" + + "%13: %6 %27
" + "%12: %5 %7
" + "%14: %8 %9 %4
" + "%17: %18 %24: %25
" + // Armor / Seats @@ -127,7 +127,7 @@ if (Z_SingleCurrency) then { _class, _transportmaxBackpacks, if (_sellPrice >= 0) then {[_sellPrice] call BIS_fnc_numberText;} else {"";}, - if (_buyPrice >= 0) then {[_buyPrice] call BIS_fnc_numberText;} else {"";}, + if (_buyPrice >= 0) then {[_buyPrice] call BIS_fnc_numberText;} else {localize "STR_EPOCH_TRADE_UNBUYABLE";}, CurrencyName, _transportMaxWeapons, _transportMaxMagazines, @@ -147,7 +147,8 @@ if (Z_SingleCurrency) then { _maxSpeed, localize "STR_EPOCH_SEATS", _seats, - "\z\addons\dayz_code\gui\gear\gear_ui_slots_backpacks_white.paa" + "\z\addons\dayz_code\gui\gear\gear_ui_slots_backpacks_white.paa", + if (_buyPrice >= 0) then {CurrencyName} else {""} ]; } else { _picSell = ""; @@ -159,6 +160,8 @@ if (Z_SingleCurrency) then { if (_buyPrice >= 0) then { _picBuy = getText (configFile >> 'CfgMagazines' >> _buyCurrency >> 'picture'); _buyCurrency = getText (configFile >> 'CfgMagazines' >> _buyCurrency >> 'displayName'); + } else { + _buyCurrency = ""; }; _formattedText = format [ @@ -175,7 +178,7 @@ if (Z_SingleCurrency) then { _class, _transportmaxBackpacks, if (_sellPrice >= 0) then {_sellPrice} else {"";}, - if (_buyPrice >= 0) then {_buyPrice} else {"";}, + if (_buyPrice >= 0) then {_buyPrice} else {localize "STR_EPOCH_TRADE_UNBUYABLE";}, _buyCurrency, _transportMaxWeapons, _transportMaxMagazines, diff --git a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayWeaponInfo.sqf b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayWeaponInfo.sqf index 497ae2a91..47ff426d4 100644 --- a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayWeaponInfo.sqf +++ b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_displayWeaponInfo.sqf @@ -66,19 +66,20 @@ if (Z_SingleCurrency) then { "
" + "%8: %2
" + "%9: %3
" + - "%11: %6 %7
" + + "%11: %6 %12
" + "%10: %5 %7
", _picture, _display, _class, _magText, if (_sellPrice >= 0) then {[_sellPrice] call BIS_fnc_numberText;} else {"";}, - if (_buyPrice >= 0) then {[_buyPrice] call BIS_fnc_numberText;} else {"";}, + if (_buyPrice >= 0) then {[_buyPrice] call BIS_fnc_numberText;} else {localize "STR_EPOCH_TRADE_UNBUYABLE";}, CurrencyName, localize "STR_EPOCH_NAME", localize "STR_EPOCH_CLASS", localize "STR_EPOCH_PLAYER_292", - localize "STR_EPOCH_PLAYER_291" + localize "STR_EPOCH_PLAYER_291", + if (_buyPrice >= 0) then {CurrencyName} else {""} ]; } else { _picSell = ""; @@ -90,7 +91,10 @@ if (Z_SingleCurrency) then { if (_buyPrice >= 0) then { _picBuy = getText (configFile >> 'CfgMagazines' >> _buyCurrency >> 'picture'); _buyCurrency = getText (configFile >> 'CfgMagazines' >> _buyCurrency >> 'displayName'); + } else { + _buyCurrency = ""; }; + _formattedText = format [ "
" + "%11: %2
" + @@ -102,7 +106,7 @@ if (Z_SingleCurrency) then { _class, _magText, if (_sellPrice >= 0) then {_sellPrice} else {"";}, - if (_buyPrice >= 0) then {_buyPrice} else {"";}, + if (_buyPrice >= 0) then {_buyPrice} else {localize "STR_EPOCH_TRADE_UNBUYABLE";}, _sellCurrency, _buyCurrency, _picSell, diff --git a/SQF/dayz_code/stringtable.xml b/SQF/dayz_code/stringtable.xml index 5bf0c5e8d..429efe683 100644 --- a/SQF/dayz_code/stringtable.xml +++ b/SQF/dayz_code/stringtable.xml @@ -13471,6 +13471,11 @@ Motorrad M1030 (Grün) Мотоцикл M1030 (Зелёный) + + Submarine + U-Boot + Подводная лодка + RHIB (M2) НЛЖК (M2) @@ -13478,7 +13483,7 @@ RHIB (MK 19) НЛЖК (MK 19) - + PBX Rubber Boat Моторная лодка ПВХ @@ -28943,6 +28948,11 @@ Etwas Wechselgeld ist in deinem Inventar verborgen. Reduziere die Gegenstände in deinem Inventar, um das Wechselgeld sichtbar zu machen! Некоторые изменения скрыты в вашем инвентаре. Уменьшите количество предметов в инвентаре, чтобы увидеть изменения! + + Unbuyable + Nicht kaufbar + Невозможно купить +