From 611b67e9ee1d5caa01f9d31aa3016a8401c76f3d Mon Sep 17 00:00:00 2001 From: Daniel Ceregatti Date: Fri, 17 Nov 2023 09:16:20 -0800 Subject: [PATCH] Add custom integration for changing spawn gear. WIP. --- files/custom/README.md | 25 +- files/custom/starting-gear/cfggameplay.json | 9 + files/custom/starting-gear/medic.json | 209 ++++++ files/custom/starting-gear/military.json | 337 +++++++++ files/custom/starting-gear/vanilla.json | 769 ++++++++++++++++++++ files/serverDZ.cfg | 2 + server/bin/dz | 39 +- 7 files changed, 1383 insertions(+), 7 deletions(-) create mode 100644 files/custom/starting-gear/cfggameplay.json create mode 100644 files/custom/starting-gear/medic.json create mode 100644 files/custom/starting-gear/military.json create mode 100644 files/custom/starting-gear/vanilla.json diff --git a/files/custom/README.md b/files/custom/README.md index 2d108f7..da68a95 100644 --- a/files/custom/README.md +++ b/files/custom/README.md @@ -87,4 +87,27 @@ This file will now serve as a types.xml override for all food items when the ser Every directory under /profiles/custom will be added as a new Economy Core entry when the server is started. -See https://community.bistudio.com/wiki/DayZ:Central_Economy_mission_files_modding for more details. +### Change starting gear + +To change player starting gear, using examples from [the BI DayZ Wiki](https://community.bistudio.com/wiki/DayZ:Spawning_Gear_Configuration): + +Go into the server container: + +```shell +docker compose exec server bash +``` + +Copy the custom integration directory: + +```shell +cd /profiles/custom +cp -a /files/custom/starting-gear . +``` + +Restart the server. + +### References + +[BI DayZ Wiki - Spawning Gear Configuration](https://community.bistudio.com/wiki/DayZ:Spawning_Gear_Configuration) + +[BI DayZ Wiki - Central Economy Mission Files Modding](ttps://community.bistudio.com/wiki/DayZ:Central_Economy_mission_files_modding) diff --git a/files/custom/starting-gear/cfggameplay.json b/files/custom/starting-gear/cfggameplay.json new file mode 100644 index 0000000..606bfc5 --- /dev/null +++ b/files/custom/starting-gear/cfggameplay.json @@ -0,0 +1,9 @@ +{ + "PlayerData":{ + "spawnGearPresetFiles": [ + "custom_starting-gear/medic.json", + "custom_starting-gear/military.json", + "custom_starting-gear/vanilla.json" + ] + } +} diff --git a/files/custom/starting-gear/medic.json b/files/custom/starting-gear/medic.json new file mode 100644 index 0000000..d2d6c5e --- /dev/null +++ b/files/custom/starting-gear/medic.json @@ -0,0 +1,209 @@ +{ + "spawnWeight": 1, + "name": "medic", + "attachmentSlotItemSets": [ + { + "slotName": "shoulderR", + "discreteItemSets": [ + { + "itemType": "PipeWrench", + "spawnWeight": 2, + "attributes": { + "healthMin": 0.5, + "healthMax": 0.8, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 2 + }, + { + "itemType": "Crowbar", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.5, + "healthMax": 0.8 + }, + "quickBarSlot": 2 + } + ] + }, + { + "slotName": "Vest", + "discreteItemSets": [ + { + "itemType": "PressVest_LightBlue", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + } + ] + }, + { + "slotName": "Back", + "discreteItemSets": [ + { + "itemType": "TortillaBag", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.5, + "healthMax": 0.8, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1 + }, + { + "itemType": "CoyoteBag_Green", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.5, + "healthMax": 0.8, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1 + } + ] + }, + { + "slotName": "Eyewear", + "discreteItemSets": [ + { + "itemType": "ThinFramesGlasses", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "", + "spawnWeight": 1 + } + ] + }, + { + "slotName": "Body", + "discreteItemSets": [ + { + "itemType": "MedicalScrubsShirt_Blue", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + } + ] + }, + { + "slotName": "Legs", + "discreteItemSets": [ + { + "itemType": "MedicalScrubsPants_Blue", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + } + ] + }, + { + "slotName": "Feet", + "discreteItemSets": [ + { + "itemType": "WorkingBoots_Yellow", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + } + ] + } + ], + "discreteUnsortedItemSets": [ + { + "name": "Medic Cargo 1", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.5, + "healthMax": 1.0, + "quantityMin": 0.6, + "quantityMax": 0.8 + }, + "complexChildrenTypes": [ + { + "itemType": "FirstAidKit", + "attributes": { + "healthMin": 0.7, + "healthMax": 0.8, + "quantityMin": 0.05, + "quantityMax": 0.1 + }, + "quickBarSlot": 3, + "simpleChildrenUseDefaultAttributes": false, + "simpleChildrenTypes": [ + "BloodBagIV", + "BandageDressing" + ] + } + ], + "simpleChildrenUseDefaultAttributes": false, + "simpleChildrenTypes": [ + "Rag", + "SheepSteakMeat" + ] + }, + { + "name": "Medic Cargo 2", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.5, + "healthMax": 1.0, + "quantityMin": 0.6, + "quantityMax": 0.8 + }, + "complexChildrenTypes": [ + { + "itemType": "FirstAidKit", + "attributes": { + "healthMin": 0.7, + "healthMax": 0.8, + "quantityMin": 0.05, + "quantityMax": 0.1 + }, + "quickBarSlot": 3, + "simpleChildrenUseDefaultAttributes": false, + "simpleChildrenTypes": [ + "TetracyclineAntibiotics", + "BandageDressing" + ] + } + ], + "simpleChildrenUseDefaultAttributes": false, + "simpleChildrenTypes": [ + "Canteen", + "Rag", + "Apple" + ] + } + ] +} \ No newline at end of file diff --git a/files/custom/starting-gear/military.json b/files/custom/starting-gear/military.json new file mode 100644 index 0000000..6046aa0 --- /dev/null +++ b/files/custom/starting-gear/military.json @@ -0,0 +1,337 @@ +{ + "spawnWeight": 1, + "name": "Military - AKM", + "characterTypes": [ + "SurvivorF_Judy", + "SurvivorM_Lewis" + ], + "attachmentSlotItemSets": [ + { + "slotName": "shoulderL", + "discreteItemSets": [ + { + "itemType": "AKM", + "spawnWeight": 3, + "attributes": { + "healthMin": 0.5, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1, + "complexChildrenTypes": [ + { + "itemType": "AK_PlasticBttstck", + "attributes": { + "healthMin": 0.4, + "healthMax": 0.6, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "PSO1Optic", + "attributes": { + "healthMin": 0.1, + "healthMax": 0.2, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1, + "simpleChildrenUseDefaultAttributes": true, + "simpleChildrenTypes": [ + "Battery9V" + ] + }, + { + "itemType": "Mag_AKM_30Rnd", + "attributes": { + "healthMin": 0.5, + "healthMax": 0.5, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + } + ], + "simpleChildrenUseDefaultAttributes": false, + "simpleChildrenTypes": [ + "AK_PlasticHndgrd", + "AK_Bayonet" + ] + }, + { + "itemType": "AKM", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1, + "complexChildrenTypes": [ + { + "itemType": "AK_WoodBttstck", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "PSO11Optic", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1, + "simpleChildrenUseDefaultAttributes": true, + "simpleChildrenTypes": [ + "Battery9V" + ] + }, + { + "itemType": "Mag_AKM_30Rnd", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + } + ], + "simpleChildrenUseDefaultAttributes": false, + "simpleChildrenTypes": [ + "AK_WoodHndgrd", + "AK_Bayonet" + ] + } + ] + }, + { + "slotName": "shoulderR", + "discreteItemSets": [ + { + "itemType": "BaseballBat", + "spawnWeight": 2, + "attributes": { + "healthMin": 0.5, + "healthMax": 0.8, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 2 + }, + { + "itemType": "Shovel", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.5, + "healthMax": 0.8 + }, + "quickBarSlot": 2 + } + ] + }, + { + "slotName": "Vest", + "discreteItemSets": [ + { + "itemType": "PlateCarrierVest", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1, + "simpleChildrenUseDefaultAttributes": false, + "simpleChildrenTypes": [ + "PlateCarrierHolster" + ] + } + ] + }, + { + "slotName": "Back", + "discreteItemSets": [ + { + "itemType": "TaloonBag_Blue", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.5, + "healthMax": 0.8, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 3, + "simpleChildrenUseDefaultAttributes": false, + "simpleChildrenTypes": [ + "Mag_AKM_Drum75Rnd" + ] + }, + { + "itemType": "TaloonBag_Orange", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.5, + "healthMax": 0.8, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 3, + "simpleChildrenUseDefaultAttributes": true, + "simpleChildrenTypes": [ + "Mag_AKM_30Rnd", + "Mag_AKM_30Rnd" + ] + } + ] + }, + { + "slotName": "Eyewear", + "discreteItemSets": [ + { + "itemType": "AviatorGlasses", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "", + "spawnWeight": 1 + } + ] + }, + { + "slotName": "Body", + "discreteItemSets": [ + { + "itemType": "GorkaEJacket_Flat", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + } + ] + }, + { + "slotName": "Legs", + "discreteItemSets": [ + { + "itemType": "GorkaPants_Flat", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + } + ] + }, + { + "slotName": "Feet", + "discreteItemSets": [ + { + "itemType": "MilitaryBoots_Bluerock", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + } + ] + } + ], + "discreteUnsortedItemSets": [ + { + "name": "Obelix", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.5, + "healthMax": 1.0, + "quantityMin": 0.6, + "quantityMax": 0.8 + }, + "complexChildrenTypes": [ + { + "itemType": "Pot", + "attributes": { + "healthMin": 0.1, + "healthMax": 0.8, + "quantityMin": 0.1, + "quantityMax": 0.1 + }, + "quickBarSlot": -1, + "simpleChildrenUseDefaultAttributes": false, + "simpleChildrenTypes": [ + "BoarSteakMeat", + "BoarSteakMeat" + ] + }, + { + "itemType": "Mag_AKM_30Rnd", + "attributes": { + "healthMin": 0.1, + "healthMax": 0.8, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + } + ], + "simpleChildrenUseDefaultAttributes": false, + "simpleChildrenTypes": [ + "Rag", + "BoarSteakMeat", + "BoarSteakMeat", + "BoarSteakMeat", + "FNX45", + "Mag_FNX45_15Rnd", + "AmmoBox_45ACP_25rnd" + ] + }, + { + "name": "Asterix", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.5, + "healthMax": 1.0, + "quantityMin": 0.6, + "quantityMax": 0.8 + }, + "simpleChildrenUseDefaultAttributes": false, + "simpleChildrenTypes": [ + "Canteen", + "Rag", + "Apple", + "AmmoBox_762x39_20Rnd", + "CZ75", + "Mag_CZ75_15Rnd", + "AmmoBox_9x19_25rnd" + ] + } + ] +} diff --git a/files/custom/starting-gear/vanilla.json b/files/custom/starting-gear/vanilla.json new file mode 100644 index 0000000..dcd2b07 --- /dev/null +++ b/files/custom/starting-gear/vanilla.json @@ -0,0 +1,769 @@ +{ + "spawnWeight": 1, + "name": "Player", + "characterTypes": [ + "SurvivorM_Mirek", + "SurvivorM_Boris", + "SurvivorM_Cyril", + "SurvivorM_Denis", + "SurvivorM_Elias", + "SurvivorM_Francis", + "SurvivorM_Guo", + "SurvivorM_Hassan", + "SurvivorM_Indar", + "SurvivorM_Jose", + "SurvivorM_Kaito", + "SurvivorM_Lewis", + "SurvivorM_Manua", + "SurvivorM_Niki", + "SurvivorM_Oliver", + "SurvivorM_Peter", + "SurvivorM_Quinn", + "SurvivorM_Rolf", + "SurvivorM_Seth", + "SurvivorM_Taiki", + "SurvivorF_Eva", + "SurvivorF_Frida", + "SurvivorF_Gabi", + "SurvivorF_Helga", + "SurvivorF_Irena", + "SurvivorF_Judy", + "SurvivorF_Keiko", + "SurvivorF_Linda", + "SurvivorF_Maria", + "SurvivorF_Naomi", + "SurvivorF_Baty" + ], + "attachmentSlotItemSets": [ + { + "slotName": "Body", + "discreteItemSets": [ + { + "itemType": "TShirt_Beige", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "TShirt_Black", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "TShirt_Blue", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "TShirt_Green", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "TShirt_OrangeWhiteStripes", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "TShirt_Red", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "TShirt_RedBlackStripes", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "TShirt_White", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "TShirt_Grey", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + } + ] + }, + { + "slotName": "Legs", + "discreteItemSets": [ + { + "itemType": "CanvasPantsMidi_Beige", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "CanvasPantsMidi_Blue", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "CanvasPantsMidi_Grey", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "CanvasPantsMidi_Red", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "CanvasPantsMidi_Violet", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + } + ] + }, + { + "slotName": "Feet", + "discreteItemSets": [ + { + "itemType": "AthleticShoes_Black", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "AthleticShoes_Blue", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "AthleticShoes_Brown", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "AthleticShoes_Green", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + }, + { + "itemType": "AthleticShoes_Grey", + "spawnWeight": 1, + "attributes": { + "healthMin": 0.45, + "healthMax": 0.65, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": -1 + } + ] + } + ], + "discreteUnsortedItemSets": [ + { + "name": "Cargo1", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "complexChildrenTypes": [ + { + "itemType": "BandageDressing", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 2 + }, + { + "itemType": "Chemlight_Red", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1 + }, + { + "itemType": "Pear", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 3 + } + ] + }, + { + "name": "Cargo2", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "complexChildrenTypes": [ + { + "itemType": "BandageDressing", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 2 + }, + { + "itemType": "Chemlight_Green", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1 + }, + { + "itemType": "Pear", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 3 + } + ] + }, + { + "name": "Cargo3", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "complexChildrenTypes": [ + { + "itemType": "BandageDressing", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 2 + }, + { + "itemType": "Chemlight_Yellow", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1 + }, + { + "itemType": "Pear", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 3 + } + ] + }, + { + "name": "Cargo4", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "complexChildrenTypes": [ + { + "itemType": "BandageDressing", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 2 + }, + { + "itemType": "Chemlight_White", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1 + }, + { + "itemType": "Pear", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 3 + } + ] + }, + { + "name": "Cargo5", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "complexChildrenTypes": [ + { + "itemType": "BandageDressing", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 2 + }, + { + "itemType": "Chemlight_Red", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1 + }, + { + "itemType": "Plum", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 3 + } + ] + }, + { + "name": "Cargo6", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "complexChildrenTypes": [ + { + "itemType": "BandageDressing", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 2 + }, + { + "itemType": "Chemlight_Green", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1 + }, + { + "itemType": "Plum", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 3 + } + ] + }, + { + "name": "Cargo7", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "complexChildrenTypes": [ + { + "itemType": "BandageDressing", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 2 + }, + { + "itemType": "Chemlight_Yellow", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1 + }, + { + "itemType": "Plum", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 3 + } + ] + }, + { + "name": "Cargo8", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "complexChildrenTypes": [ + { + "itemType": "BandageDressing", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 2 + }, + { + "itemType": "Chemlight_White", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1 + }, + { + "itemType": "Plum", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 3 + } + ] + }, + { + "name": "Cargo9", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "complexChildrenTypes": [ + { + "itemType": "BandageDressing", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 2 + }, + { + "itemType": "Chemlight_Red", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1 + }, + { + "itemType": "Apple", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 3 + } + ] + }, + { + "name": "Cargo10", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "complexChildrenTypes": [ + { + "itemType": "BandageDressing", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 2 + }, + { + "itemType": "Chemlight_Green", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1 + }, + { + "itemType": "Apple", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 3 + } + ] + }, + { + "name": "Cargo11", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "complexChildrenTypes": [ + { + "itemType": "BandageDressing", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 2 + }, + { + "itemType": "Chemlight_Yellow", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1 + }, + { + "itemType": "Apple", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 3 + } + ] + }, + { + "name": "Cargo12", + "spawnWeight": 1, + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "complexChildrenTypes": [ + { + "itemType": "BandageDressing", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 2 + }, + { + "itemType": "Chemlight_White", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 1 + }, + { + "itemType": "Apple", + "attributes": { + "healthMin": 1.0, + "healthMax": 1.0, + "quantityMin": 1.0, + "quantityMax": 1.0 + }, + "quickBarSlot": 3 + } + ] + } + ] +} diff --git a/files/serverDZ.cfg b/files/serverDZ.cfg index f2e2461..998f272 100644 --- a/files/serverDZ.cfg +++ b/files/serverDZ.cfg @@ -78,6 +78,8 @@ disableRespawnDialog = 0; // set to 1 to disable the respawn dialog (new chara lootHistory = 1; // How many persistence history files should be kept by instance, number is looped over during save storeHouseStateDisabled = false; // Disable houses/doors persistence (value true/false), usable in case of problems with persistence +enableCfgGameplayFile = 1; + // Mission to load on server startup. . class Missions { diff --git a/server/bin/dz b/server/bin/dz index b906eac..b23e712 100755 --- a/server/bin/dz +++ b/server/bin/dz @@ -146,8 +146,9 @@ mergexml(){ -o -name "init.c" \ \) -exec cp -v {} ${SERVER_FILES}{} \; # Follow https://community.bistudio.com/wiki/DayZ:Central_Economy_mission_files_modding - # First, remove any existing files, via the mod_ prefix + # Remove any existing files, via the mod_ and custom_ prefixes rm -rf ${MPMISSIONS}/${MAP}/mod_* + rm -rf ${MPMISSIONS}/${MAP}/custom_* for link in $(ls -tdr ${SERVER_PROFILE}/@* 2> /dev/null) do ID=$(readlink ${link} | awk -F/ '{print $NF}') @@ -165,7 +166,7 @@ mergexml(){ then MODNAME=$(get_mod_name ${ID}) echo - echo -e "${green}Adding mod ${MODNAME}${default}" + echo -e "${green}Adding mod integration ${MODNAME}${default}" FOUND=1 fi echo -n "Copy " @@ -214,7 +215,7 @@ mergexml(){ then MODNAME=$(get_mod_name ${ID}) echo - echo -e "${green}Adding mod ${MODNAME}${default}" + echo -e "${green}Adding mod integration ${MODNAME}${default}" FOUND=1 fi echo "Merge JSON '${WORKSHOP_DIR}/${ID}/${var,,}.json' -> '${MPMISSIONS}/${MAP}/${var,,}.json'" @@ -232,7 +233,7 @@ mergexml(){ then MODNAME=$(get_mod_name ${ID}) echo - echo -e "${green}Adding mod ${MODNAME}${default}" + echo -e "${green}Adding mod integration ${MODNAME}${default}" FOUND=1 fi echo "Patch '${WORKSHOP_DIR}/${ID}/${var,,}.c(.diff)' -> '${MPMISSIONS}/${MAP}/${var,,}.c'" @@ -245,8 +246,6 @@ mergexml(){ done if [ -d ${SERVER_PROFILE}/custom ] then - # First, remove any existing files, via the custom_ prefix - rm -rf ${MPMISSIONS}/${MAP}/custom_* for dir in $(ls ${SERVER_PROFILE}/custom 2> /dev/null) do FOUND=0 @@ -279,6 +278,34 @@ mergexml(){ -a /ce -t attr -n folder -v "custom_${dir}" ${C} \ -m /ce /economycore {} \; fi + # These are merged directly into the upstream file, but are JSON + for var in "CFGGAMEPLAY" + do + if [ -f "${SERVER_PROFILE}/custom/${dir}/${var,,}.json" ] + then + if [[ ${FOUND} = 0 ]] + then + MODNAME=$(get_mod_name ${ID}) + echo + echo -e "${green}Adding custom integration ${dir}${default}" + FOUND=1 + fi + echo "Merge JSON '${SERVER_PROFILE}/custom/${dir}/${var,,}.json' -> '${MPMISSIONS}/${MAP}/${var,,}.json'" + rm -f /tmp/x /tmp/y + jq -s '.[0] * .[1]' ${MPMISSIONS}/${MAP}/${var,,}.json ${SERVER_PROFILE}/custom/${dir}/${var,,}.json > /tmp/x + mv /tmp/x ${MPMISSIONS}/${MAP}/${var,,}.json + fi + done + if [[ ${FOUND} = 1 ]] + then + # Copy any other files in the mod directory into a custom directory under mpmissions + mkdir -p ${MPMISSIONS}/${MAP}/custom_${dir} + for file in $(ls ${SERVER_PROFILE}/custom/${dir} 2> /dev/null) + do + echo -n "Copy " + cp -av ${SERVER_PROFILE}/custom/${dir}/${file} ${MPMISSIONS}/${MAP}/custom_${dir} + done + fi done fi }