From a29902b980eb6c342f7c79b674d453dc3ba41bf5 Mon Sep 17 00:00:00 2001 From: DrakiaXYZ Date: Wed, 20 Mar 2024 09:43:51 +0000 Subject: [PATCH] Add a new `allExtracts` property to locations database, and use it for daily quest generation (!266) - Dumped from the client using an aki-debugging patch - Contains all extracts according to the map data, with a side indicator - Cleaned up ILocation vs ILocationData duplication Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com> Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/266 Co-authored-by: DrakiaXYZ Co-committed-by: DrakiaXYZ --- .../locations/bigmap/allExtracts.json | 444 ++++++++++++++++++ .../locations/factory4_day/allExtracts.json | 121 +++++ .../locations/factory4_night/allExtracts.json | 121 +++++ .../locations/interchange/allExtracts.json | 138 ++++++ .../locations/laboratory/allExtracts.json | 172 +++++++ .../locations/lighthouse/allExtracts.json | 206 ++++++++ .../locations/rezervbase/allExtracts.json | 172 +++++++ .../locations/sandbox/allExtracts.json | 121 +++++ .../locations/shoreline/allExtracts.json | 240 ++++++++++ .../locations/tarkovstreets/allExtracts.json | 308 ++++++++++++ .../database/locations/woods/allExtracts.json | 325 +++++++++++++ project/src/controllers/GameController.ts | 10 +- .../generators/RepeatableQuestGenerator.ts | 36 +- project/src/models/eft/common/ILocation.ts | 3 +- .../src/models/eft/common/ILocationBase.ts | 1 + project/src/models/spt/server/ILocations.ts | 44 +- project/src/services/SeasonalEventService.ts | 6 +- 17 files changed, 2404 insertions(+), 64 deletions(-) create mode 100644 project/assets/database/locations/bigmap/allExtracts.json create mode 100644 project/assets/database/locations/factory4_day/allExtracts.json create mode 100644 project/assets/database/locations/factory4_night/allExtracts.json create mode 100644 project/assets/database/locations/interchange/allExtracts.json create mode 100644 project/assets/database/locations/laboratory/allExtracts.json create mode 100644 project/assets/database/locations/lighthouse/allExtracts.json create mode 100644 project/assets/database/locations/rezervbase/allExtracts.json create mode 100644 project/assets/database/locations/sandbox/allExtracts.json create mode 100644 project/assets/database/locations/shoreline/allExtracts.json create mode 100644 project/assets/database/locations/tarkovstreets/allExtracts.json create mode 100644 project/assets/database/locations/woods/allExtracts.json diff --git a/project/assets/database/locations/bigmap/allExtracts.json b/project/assets/database/locations/bigmap/allExtracts.json new file mode 100644 index 00000000..74dc051b --- /dev/null +++ b/project/assets/database/locations/bigmap/allExtracts.json @@ -0,0 +1,444 @@ +[ + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Customs,Boiler Tanks", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "EXFIL_ZB013", + "PassageRequirement": "WorldEvent", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 50.0, + "Count": 5000, + "EntryPoints": "Customs,Boiler Tanks", + "EventAvailable": false, + "ExfiltrationTime": 60.0, + "ExfiltrationType": "SharedTimer", + "Id": "5449016a4bdc2d6f028b456f", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Dorms V-Ex", + "PassageRequirement": "TransferItem", + "PlayersCount": 4, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_Item", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Customs", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "ZB-1011", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Boiler Tanks", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Crossroads", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 50.0, + "Count": 0, + "EntryPoints": "Customs", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Old Gas Station", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Boiler Tanks", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Trailer Park", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Boiler Tanks", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "RUAF Roadblock", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 50.0, + "Count": 0, + "EntryPoints": "Boiler Tanks", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Smuggler's Boat", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 50.0, + "Count": 0, + "EntryPoints": "Customs", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "ZB-1012", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Shack", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Beyond Fuel Tank", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Railroad To Military Base", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Old Road Gate", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Sniper Roadblock", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Railroad To Port", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Crossroads", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Trailer Park Workers Shack", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Railroad To Tarkov", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "RUAF Roadblock_scav", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Warehouse 17", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Factory Shacks", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Warehouse 4", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Old Azs Gate", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Factory Far Corner", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Administration Gate", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Military Checkpoint", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + } +] \ No newline at end of file diff --git a/project/assets/database/locations/factory4_day/allExtracts.json b/project/assets/database/locations/factory4_day/allExtracts.json new file mode 100644 index 00000000..dd60e417 --- /dev/null +++ b/project/assets/database/locations/factory4_day/allExtracts.json @@ -0,0 +1,121 @@ +[ + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Factory", + "EventAvailable": false, + "ExfiltrationTime": 10.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Cellars", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Factory", + "EventAvailable": false, + "ExfiltrationTime": 10.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Gate 3", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Factory", + "EventAvailable": false, + "ExfiltrationTime": 10.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Gate 0", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Factory", + "EventAvailable": false, + "ExfiltrationTime": 10.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Gate m", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Gate 3", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Camera Bunker Door", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Office Window", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + } +] \ No newline at end of file diff --git a/project/assets/database/locations/factory4_night/allExtracts.json b/project/assets/database/locations/factory4_night/allExtracts.json new file mode 100644 index 00000000..dd60e417 --- /dev/null +++ b/project/assets/database/locations/factory4_night/allExtracts.json @@ -0,0 +1,121 @@ +[ + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Factory", + "EventAvailable": false, + "ExfiltrationTime": 10.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Cellars", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Factory", + "EventAvailable": false, + "ExfiltrationTime": 10.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Gate 3", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Factory", + "EventAvailable": false, + "ExfiltrationTime": 10.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Gate 0", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Factory", + "EventAvailable": false, + "ExfiltrationTime": 10.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Gate m", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Gate 3", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Camera Bunker Door", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Office Window", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + } +] \ No newline at end of file diff --git a/project/assets/database/locations/interchange/allExtracts.json b/project/assets/database/locations/interchange/allExtracts.json new file mode 100644 index 00000000..58baa7a7 --- /dev/null +++ b/project/assets/database/locations/interchange/allExtracts.json @@ -0,0 +1,138 @@ +[ + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "MallNW", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "SE Exfil", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "MallSE", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "NW Exfil", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 50.0, + "Count": 5000, + "EntryPoints": "MallSE,MallNW", + "EventAvailable": false, + "ExfiltrationTime": 60.0, + "ExfiltrationType": "SharedTimer", + "Id": "5449016a4bdc2d6f028b456f", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "PP Exfil", + "PassageRequirement": "TransferItem", + "PlayersCount": 4, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_Item", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "MallSE,MallNW", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "SharedTimer", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Interchange Cooperation", + "PassageRequirement": "ScavCooperation", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_Cooperate", + "Side": "Coop" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "MallSE,MallNW", + "EventAvailable": false, + "ExfiltrationTime": 10.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Hole Exfill", + "PassageRequirement": "Empty", + "PlayersCount": 0, + "RequiredSlot": "Backpack", + "RequirementTip": "EXFIL_INTERCHANGE_HOLE_TIP", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "MallSE,MallNW", + "EventAvailable": false, + "ExfiltrationTime": 3.0, + "ExfiltrationType": "Manual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Saferoom Exfil", + "PassageRequirement": "WorldEvent", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_INTERCHANGE_SAFEROOM_TIP", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "SE Exfil", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "NW Exfil", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + } +] \ No newline at end of file diff --git a/project/assets/database/locations/laboratory/allExtracts.json b/project/assets/database/locations/laboratory/allExtracts.json new file mode 100644 index 00000000..6557af7f --- /dev/null +++ b/project/assets/database/locations/laboratory/allExtracts.json @@ -0,0 +1,172 @@ +[ + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Common", + "EventAvailable": false, + "ExfiltrationTime": 10.0, + "ExfiltrationType": "Manual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "lab_Elevator_Cargo", + "PassageRequirement": "WorldEvent", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Common", + "EventAvailable": false, + "ExfiltrationTime": 5.0, + "ExfiltrationType": "Manual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "lab_Elevator_Main", + "PassageRequirement": "WorldEvent", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Common", + "EventAvailable": false, + "ExfiltrationTime": 15.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "lab_Vent", + "PassageRequirement": "Empty", + "PlayersCount": 0, + "RequiredSlot": "Backpack", + "RequirementTip": "EXFIL_tip_backpack", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Common", + "EventAvailable": false, + "ExfiltrationTime": 5.0, + "ExfiltrationType": "Manual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "lab_Elevator_Med", + "PassageRequirement": "WorldEvent", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Common", + "EventAvailable": false, + "ExfiltrationTime": 10.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "lab_Under_Storage_Collector", + "PassageRequirement": "WorldEvent", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 60.0, + "Count": 0, + "EntryPoints": "Common", + "EventAvailable": false, + "ExfiltrationTime": 10.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "lab_Parking_Gate", + "PassageRequirement": "WorldEvent", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 60.0, + "Count": 0, + "EntryPoints": "Common", + "EventAvailable": false, + "ExfiltrationTime": 10.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "lab_Hangar_Gate", + "PassageRequirement": "WorldEvent", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 0.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "lab_Elevator_Cargo", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 0.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "lab_Elevator_Main", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 0.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "lab_Elevator_Med", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + } +] \ No newline at end of file diff --git a/project/assets/database/locations/lighthouse/allExtracts.json b/project/assets/database/locations/lighthouse/allExtracts.json new file mode 100644 index 00000000..2279b32d --- /dev/null +++ b/project/assets/database/locations/lighthouse/allExtracts.json @@ -0,0 +1,206 @@ +[ + { + "Chance": 50.0, + "Count": 5000, + "EntryPoints": "Tunnel,North", + "EventAvailable": false, + "ExfiltrationTime": 60.0, + "ExfiltrationType": "SharedTimer", + "Id": "5449016a4bdc2d6f028b456f", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": " V-Ex_light", + "PassageRequirement": "TransferItem", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_Item", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Tunnel,North", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "SharedTimer", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "tunnel_shared", + "PassageRequirement": "ScavCooperation", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_Cooperate", + "Side": "Coop" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Tunnel,North", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "Alpinist", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Alpinist_light", + "PassageRequirement": "Reference", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Tunnel,North", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Shorl_free", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Tunnel", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Nothern_Checkpoint", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Tunnel,North", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Coastal_South_Road", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 420, + "EntryPoints": "Tunnel,North", + "EventAvailable": false, + "ExfiltrationTime": 5.0, + "ExfiltrationType": "SharedTimer", + "Id": "0", + "MinTime": 1200.0, + "MaxTime": 1500.0, + "Name": "EXFIL_Train", + "PassageRequirement": "Train", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "TIP IS HARDCODED", + "Side": "Coop" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Shorl_free_scav", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Scav_Coastal_South", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Scav_Underboat_Hideout", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Scav_Hideout_at_the_grotto", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Scav_Industrial_zone", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + } +] \ No newline at end of file diff --git a/project/assets/database/locations/rezervbase/allExtracts.json b/project/assets/database/locations/rezervbase/allExtracts.json new file mode 100644 index 00000000..8ea22212 --- /dev/null +++ b/project/assets/database/locations/rezervbase/allExtracts.json @@ -0,0 +1,172 @@ +[ + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Common", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "EXFIL_Bunker_D2", + "PassageRequirement": "WorldEvent", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Common", + "EventAvailable": false, + "ExfiltrationTime": 18.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "EXFIL_Bunker", + "PassageRequirement": "WorldEvent", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_BUNKER_POWER", + "Side": "Coop" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Common", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "Alpinist", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Alpinist", + "PassageRequirement": "Reference", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Common", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "SharedTimer", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "EXFIL_ScavCooperation", + "PassageRequirement": "ScavCooperation", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_Cooperate", + "Side": "Coop" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Common", + "EventAvailable": false, + "ExfiltrationTime": 10.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "EXFIL_vent", + "PassageRequirement": "Empty", + "PlayersCount": 0, + "RequiredSlot": "Backpack", + "RequirementTip": "EXFIL_tip_backpack", + "Side": "Coop" + }, + { + "Chance": 100.0, + "Count": 420, + "EntryPoints": "Common", + "EventAvailable": false, + "ExfiltrationTime": 5.0, + "ExfiltrationType": "SharedTimer", + "Id": "0", + "MinTime": 1200.0, + "MaxTime": 1500.0, + "Name": "EXFIL_Train", + "PassageRequirement": "Train", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "TIP IS HARDCODED", + "Side": "Coop" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Exit1", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Exit2", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Exit3", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Exit4", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + } +] \ No newline at end of file diff --git a/project/assets/database/locations/sandbox/allExtracts.json b/project/assets/database/locations/sandbox/allExtracts.json new file mode 100644 index 00000000..36c18cae --- /dev/null +++ b/project/assets/database/locations/sandbox/allExtracts.json @@ -0,0 +1,121 @@ +[ + { + "Chance": 100.0, + "Count": 5000, + "EntryPoints": "west,east", + "EventAvailable": false, + "ExfiltrationTime": 60.0, + "ExfiltrationType": "SharedTimer", + "Id": "5449016a4bdc2d6f028b456f", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Sandbox_VExit", + "PassageRequirement": "TransferItem", + "PlayersCount": 4, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_Item", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "east", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Unity_free_exit", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "west,east", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "SharedTimer", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Scav_coop_exit", + "PassageRequirement": "ScavCooperation", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_Cooperate", + "Side": "Coop" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "west", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Nakatani_stairs_free_exit", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "west,east", + "EventAvailable": false, + "ExfiltrationTime": 6.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Sniper_exit", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Unity_free_exit", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Nakatani_stairs_free_exit", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + } +] \ No newline at end of file diff --git a/project/assets/database/locations/shoreline/allExtracts.json b/project/assets/database/locations/shoreline/allExtracts.json new file mode 100644 index 00000000..0b34dd7b --- /dev/null +++ b/project/assets/database/locations/shoreline/allExtracts.json @@ -0,0 +1,240 @@ +[ + { + "Chance": 100.0, + "Count": 5000, + "EntryPoints": "Riverside,Village", + "EventAvailable": false, + "ExfiltrationTime": 60.0, + "ExfiltrationType": "SharedTimer", + "Id": "5449016a4bdc2d6f028b456f", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Shorl_V-Ex", + "PassageRequirement": "TransferItem", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_Item", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Village", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Road to Customs", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Village", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Road_at_railbridge", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Riverside", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Tunnel", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Riverside,Village", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Lighthouse_pass", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Riverside,Village", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "SharedTimer", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Smugglers_Trail_coop", + "PassageRequirement": "ScavCooperation", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_Cooperate", + "Side": "Coop" + }, + { + "Chance": 50.0, + "Count": 0, + "EntryPoints": "Riverside,Village", + "EventAvailable": false, + "ExfiltrationTime": 30.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Pier Boat", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Riverside,Village", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "Alpinist", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "RedRebel_alp", + "PassageRequirement": "Reference", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Scav Road to Customs", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Lighthouse", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Wrecked Road", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "South Fence Passage", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "RWing Gym Entrance", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Adm Basement", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + } +] \ No newline at end of file diff --git a/project/assets/database/locations/tarkovstreets/allExtracts.json b/project/assets/database/locations/tarkovstreets/allExtracts.json new file mode 100644 index 00000000..26858b63 --- /dev/null +++ b/project/assets/database/locations/tarkovstreets/allExtracts.json @@ -0,0 +1,308 @@ +[ + { + "Chance": 40.0, + "Count": 0, + "EntryPoints": "E1_2,E6_1,E2_3,E3_4,E4_5,E5_6,E6_1", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "E8_yard", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 50.0, + "Count": 5000, + "EntryPoints": "E1_2,E6_1,E2_3,E3_4,E4_5,E5_6,E6_1", + "EventAvailable": false, + "ExfiltrationTime": 60.0, + "ExfiltrationType": "SharedTimer", + "Id": "5449016a4bdc2d6f028b456f", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "E7_car", + "PassageRequirement": "TransferItem", + "PlayersCount": 4, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_Item", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "E6_1,E1_2", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "E1", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "E4_5,E3_4", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "E4", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "E2_3,E1_2", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "E2", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "E2_3,E3_4", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "E3", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "E4_5,E5_6", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "E5", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 0.0, + "Count": 0, + "EntryPoints": "E6_1,E5_6", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "E6", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "E1_2,E6_1,E2_3,E3_4,E4_5,E5_6,E6_1", + "EventAvailable": false, + "ExfiltrationTime": 6.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "E9_sniper", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "E1_2,E6_1,E2_3,E3_4,E4_5,E5_6,E6_1", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "SharedTimer", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Exit_E10_coop", + "PassageRequirement": "ScavCooperation", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_Cooperate", + "Side": "Coop" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "E6_1,E5_6", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "E7", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "scav_e1", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "scav_e2", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "scav_e3", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "scav_e4", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "scav_e5", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "scav_e7", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "scav_e8", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + } +] \ No newline at end of file diff --git a/project/assets/database/locations/woods/allExtracts.json b/project/assets/database/locations/woods/allExtracts.json new file mode 100644 index 00000000..40f5542e --- /dev/null +++ b/project/assets/database/locations/woods/allExtracts.json @@ -0,0 +1,325 @@ +[ + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "House,Old Station", + "EventAvailable": false, + "ExfiltrationTime": 20.0, + "ExfiltrationType": "SharedTimer", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Factory Gate", + "PassageRequirement": "ScavCooperation", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_Cooperate", + "Side": "Coop" + }, + { + "Chance": 66.0, + "Count": 0, + "EntryPoints": "House", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "RUAF Gate", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 66.0, + "Count": 0, + "EntryPoints": "House", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "ZB-016", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 66.0, + "Count": 0, + "EntryPoints": "Old Station", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "ZB-014", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "House", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "UN Roadblock", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 5000, + "EntryPoints": "House,Old Station", + "EventAvailable": false, + "ExfiltrationTime": 60.0, + "ExfiltrationType": "SharedTimer", + "Id": "5449016a4bdc2d6f028b456f", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "South V-Ex", + "PassageRequirement": "TransferItem", + "PlayersCount": 4, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "EXFIL_Item", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "Old Station", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Outskirts", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "House", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "un-sec", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Pmc" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Outskirts", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Outskirts Water", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Dead Man's Place", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "The Boat", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Scav House", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "East Gate", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Mountain Stash", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "West Border", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "Old Station", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "UN Roadblock", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + }, + { + "Chance": 100.0, + "Count": 0, + "EntryPoints": "", + "EventAvailable": false, + "ExfiltrationTime": 8.0, + "ExfiltrationType": "Individual", + "Id": "", + "MinTime": 0.0, + "MaxTime": 0.0, + "Name": "RUAF Roadblock", + "PassageRequirement": "None", + "PlayersCount": 0, + "RequiredSlot": "FirstPrimaryWeapon", + "RequirementTip": "", + "Side": "Scav" + } +] \ No newline at end of file diff --git a/project/src/controllers/GameController.ts b/project/src/controllers/GameController.ts index 29552c09..1c3417ab 100644 --- a/project/src/controllers/GameController.ts +++ b/project/src/controllers/GameController.ts @@ -7,6 +7,7 @@ import { HttpServerHelper } from "@spt-aki/helpers/HttpServerHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { PreAkiModLoader } from "@spt-aki/loaders/PreAkiModLoader"; import { IEmptyRequestData } from "@spt-aki/models/eft/common/IEmptyRequestData"; +import { ILocation } from "@spt-aki/models/eft/common/ILocation"; import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { BodyPartHealth } from "@spt-aki/models/eft/common/tables/IBotBase"; @@ -29,7 +30,6 @@ import { ILocationConfig } from "@spt-aki/models/spt/config/ILocationConfig"; import { ILootConfig } from "@spt-aki/models/spt/config/ILootConfig"; import { IPmcConfig } from "@spt-aki/models/spt/config/IPmcConfig"; import { IRagfairConfig } from "@spt-aki/models/spt/config/IRagfairConfig"; -import { ILocationData } from "@spt-aki/models/spt/server/ILocations"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; @@ -243,7 +243,7 @@ export class GameController for (const locationKey in this.botConfig.maxBotCap) { - const map: ILocationData = mapsDb[locationKey]; + const map: ILocation = mapsDb[locationKey]; if (!map) { continue; @@ -361,7 +361,7 @@ export class GameController for (const mapId in this.locationConfig.botTypeLimits) { - const map: ILocationData = mapsDb[mapId]; + const map: ILocation = mapsDb[mapId]; if (!map) { this.logger.warning( @@ -626,7 +626,7 @@ export class GameController } // Loop over all of the locations waves and look for waves with identical min and max slots - const location: ILocationData = this.databaseServer.getTables().locations[locationKey]; + const location: ILocation = this.databaseServer.getTables().locations[locationKey]; if (!location.base) { this.logger.warning( @@ -701,7 +701,7 @@ export class GameController } // Iterate over all maps - const location: ILocationData = this.databaseServer.getTables().locations[locationKey]; + const location: ILocation = this.databaseServer.getTables().locations[locationKey]; for (const wave of location.base.waves) { // Wave has size that makes it candidate for splitting diff --git a/project/src/generators/RepeatableQuestGenerator.ts b/project/src/generators/RepeatableQuestGenerator.ts index d6c143a0..c53ef80d 100644 --- a/project/src/generators/RepeatableQuestGenerator.ts +++ b/project/src/generators/RepeatableQuestGenerator.ts @@ -732,14 +732,8 @@ export class RepeatableQuestGenerator if (requiresSpecificExtract) { - // Filter by whitelist, it's also possible that the field "PassageRequirement" does not exist (e.g. Shoreline) - let mapExits = this.getLocationExitsForSide(locationKey, repeatableConfig.side); - - // Exclude scav coop exits when choosing pmc exit - if (repeatableConfig.side === "Pmc") - { - mapExits = mapExits.filter((exit) => exit.PassageRequirement !== "ScavCooperation"); - } + // Fetch extracts for the requested side + const mapExits = this.getLocationExitsForSide(locationKey, repeatableConfig.side); // Only get exits that have a greater than 0% chance to spawn const exitPool = mapExits.filter((exit) => exit.Chance > 0); @@ -787,33 +781,15 @@ export class RepeatableQuestGenerator /** * Filter a maps exits to just those for the desired side * @param locationKey Map id (e.g. factory4_day) - * @param playerSide Scav/Bear + * @param playerSide Scav/Pmc * @returns Array of Exit objects */ protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[] { - const mapBase = this.databaseServer.getTables().locations[locationKey.toLowerCase()].base as ILocationBase; + const mapExtracts = this.databaseServer.getTables().locations[locationKey.toLocaleLowerCase()] + .allExtracts as Exit[]; - const infilPointsOfSameSide = new Set(); - for (const spawnPoint of mapBase.SpawnPointParams) - { - // Same side, add infil to list - if (spawnPoint.Sides.includes(playerSide) || spawnPoint.Sides.includes("All")) - { - // Has specific start location - if (spawnPoint.Infiltration.length > 0) - { - infilPointsOfSameSide.add(spawnPoint.Infiltration); - } - } - } - - // use list of allowed infils to figure out side of exits - const infilPointsArray = Array.from(infilPointsOfSameSide); - - return mapBase.exits.filter((exit) => - exit.EntryPoints.split(",").some((entryPoint) => infilPointsArray.includes(entryPoint)) - ); + return mapExtracts.filter((exit) => exit.Side === playerSide); } protected generatePickupQuest( diff --git a/project/src/models/eft/common/ILocation.ts b/project/src/models/eft/common/ILocation.ts index 6c787905..98b6318d 100644 --- a/project/src/models/eft/common/ILocation.ts +++ b/project/src/models/eft/common/ILocation.ts @@ -1,4 +1,4 @@ -import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase"; +import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase"; import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot"; export interface ILocation @@ -6,6 +6,7 @@ export interface ILocation base: ILocationBase; looseLoot: ILooseLoot; statics: IStaticContainer; + allExtracts: Exit[]; } export interface IStaticContainer diff --git a/project/src/models/eft/common/ILocationBase.ts b/project/src/models/eft/common/ILocationBase.ts index 6b2c6bcf..61cd9d91 100644 --- a/project/src/models/eft/common/ILocationBase.ts +++ b/project/src/models/eft/common/ILocationBase.ts @@ -240,6 +240,7 @@ export interface Exit PassageRequirement: string; PlayersCount: number; RequirementTip: string; + Side?: string; } export interface MaxItemCountInLocation diff --git a/project/src/models/spt/server/ILocations.ts b/project/src/models/spt/server/ILocations.ts index 6089a5a0..077f0b06 100644 --- a/project/src/models/spt/server/ILocations.ts +++ b/project/src/models/spt/server/ILocations.ts @@ -1,32 +1,26 @@ -import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase"; -import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot"; +/* eslint-disable @typescript-eslint/naming-convention */ +import { ILocation } from "@spt-aki/models/eft/common/ILocation"; import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase"; export interface ILocations { - bigmap?: ILocationData; - develop?: ILocationData; - factory4_day?: ILocationData; - factory4_night?: ILocationData; - hideout?: ILocationData; - interchange?: ILocationData; - laboratory?: ILocationData; - lighthouse?: ILocationData; - privatearea?: ILocationData; - rezervbase?: ILocationData; - shoreline?: ILocationData; - suburbs?: ILocationData; - tarkovstreets?: ILocationData; - terminal?: ILocationData; - town?: ILocationData; - woods?: ILocationData; - sandbox?: ILocationData; + bigmap?: ILocation; + develop?: ILocation; + factory4_day?: ILocation; + factory4_night?: ILocation; + hideout?: ILocation; + interchange?: ILocation; + laboratory?: ILocation; + lighthouse?: ILocation; + privatearea?: ILocation; + rezervbase?: ILocation; + shoreline?: ILocation; + suburbs?: ILocation; + tarkovstreets?: ILocation; + terminal?: ILocation; + town?: ILocation; + woods?: ILocation; + sandbox?: ILocation; /** Holds a mapping of the linkages between locations on the UI */ base?: ILocationsBase; } - -export interface ILocationData -{ - base: ILocationBase; - looseLoot?: ILooseLoot; -} diff --git a/project/src/services/SeasonalEventService.ts b/project/src/services/SeasonalEventService.ts index bb4560c6..02a874ef 100644 --- a/project/src/services/SeasonalEventService.ts +++ b/project/src/services/SeasonalEventService.ts @@ -3,6 +3,7 @@ import { inject, injectable } from "tsyringe"; import { BotHelper } from "@spt-aki/helpers/BotHelper"; import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import { IConfig } from "@spt-aki/models/eft/common/IGlobals"; +import { ILocation } from "@spt-aki/models/eft/common/ILocation"; import { BossLocationSpawn } from "@spt-aki/models/eft/common/ILocationBase"; import { Inventory } from "@spt-aki/models/eft/common/tables/IBotType"; import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes"; @@ -11,7 +12,6 @@ import { IHttpConfig } from "@spt-aki/models/spt/config/IHttpConfig"; import { IQuestConfig } from "@spt-aki/models/spt/config/IQuestConfig"; import { ISeasonalEvent, ISeasonalEventConfig } from "@spt-aki/models/spt/config/ISeasonalEventConfig"; import { IWeatherConfig } from "@spt-aki/models/spt/config/IWeatherConfig"; -import { ILocationData } from "@spt-aki/models/spt/server/ILocations"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; @@ -530,7 +530,7 @@ export class SeasonalEventService continue; } - const mapData: ILocationData = maps[mapName]; + const mapData: ILocation = maps[mapName]; if (mapData?.base?.BotLocationModifier && "KhorovodChance" in mapData.base.BotLocationModifier) { mapData.base.BotLocationModifier.KhorovodChance = 100; @@ -547,7 +547,7 @@ export class SeasonalEventService const maps = this.databaseServer.getTables().locations; for (const gifterMapSettings of gifterSettings) { - const mapData: ILocationData = maps[gifterMapSettings.map]; + const mapData: ILocation = maps[gifterMapSettings.map]; // Dont add gifter to map twice if (mapData.base.BossLocationSpawn.some((boss) => boss.BossName === "gifter")) {