Divergent/mods/Western Goods/gamedata/scripts/western_goods_core.script

1300 lines
51 KiB
Plaintext
Raw Normal View History

2024-03-17 20:18:03 -04:00
---==================================================================================================================---
--- ---
--- Original Author(s) : NLTP_ASHES ---
--- Edited : N/A ---
--- Date : 20/02/2024 ---
--- License : Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) ---
--- ---
--- This script holds the 'core' of the addon. ---
--- Stuff that ensure proper working of the addon, or that are general purpose. ---
--- ---
--- Notable mentions are : ---
--- - This script is responsible for ensuring the player has the required game version and pre-requisites; ---
--- - This script is responsible for cleaning the save-game in case the player decides to remove the addon; ---
--- - This script is the source of truth for the list of items and objects added by the addon. ---
--- ---
---==================================================================================================================---
-- ---------------------------------------------------------------------------------------------------------------------
-- Constants, global variables and imported functions
-- ---------------------------------------------------------------------------------------------------------------------
-- Constants
local VERSION = "2.5.0"
-- Imported functions
local dbg_printf = western_goods_utils.dbg_printf
-- ---------------------------------------------------------------------------------------------------------------------
-- Core functions
-- ---------------------------------------------------------------------------------------------------------------------
--- Function used to print the version of the addon in the console/log.
--- @return nil
function print_addon_version()
UnregisterScriptCallback("on_game_load", print_addon_version)
printf("[WG] Western Goods version %s",VERSION)
end
--- Function used to delete every item added by the addon from the save file.
--- @author Leviathan
--- @return nil
function check_addon_removal(status)
if not status or not western_goods_mcm.get_config("addon_removal") then return end
dbg_printf("[WG] Core | Addon removal started...")
local released_objects = 0
dbg_printf("[WG] Core | Addon removal checking server objects...")
-- Release Western Goods items
western_goods_utils.server_objects_iter(function(se_obj)
dbg_printf("[WG] Core | Addon removal checking '%s' for deletion...", se_obj:section_name())
-- Check if is Western Goods item
if western_goods_items[se_obj:section_name()] then
released_objects = released_objects + 1
dbg_printf("[WG] Core | Addon removal releasing item '%s'", se_obj:section_name())
alife_release(se_obj)
return
end
-- Check if is Western Goods special item
for _,sec in pairs(western_goods_special_items) do
if se_obj:section_name() == sec then
released_objects = released_objects + 1
dbg_printf("[WG] Core | Addon removal releasing special item '%s'", se_obj:section_name())
alife_release(se_obj)
return
end
end
-- Check if is Western Goods squad
for _,sec in pairs(western_goods_squads) do
if se_obj:section_name() == sec then
released_objects = released_objects + 1 + se_obj:npc_count()
dbg_printf("[WG] Core | Addon removal releasing squad '%s'", se_obj:section_name())
SIMBOARD:remove_squad(se_obj)
return
end
end
-- Check if is Western Goods NPC
for _,sec in pairs(western_goods_npcs) do
if se_obj:section_name() == sec and (not western_goods_utils.get_squad_of(se_obj)) then
released_objects = released_objects + 1
dbg_printf("[WG] Core | Addon removal releasing squad-less NPC '%s'", se_obj:section_name())
alife():release(se_obj)
return
end
end
end)
dbg_printf("[WG] Core | Addon removal checking info portions...")
for _,info_name in pairs(western_goods_info) do
western_goods_utils.rem_info(info_name)
end
dbg_printf("[WG] Core | Addon removal checking tasks...")
-- Cancel Western Goods tasks
for _,task_id in pairs(western_goods_task) do
task_manager.get_task_manager():set_task_cancelled(task_id)
end
news_manager.send_tip(db.actor, "Successfully removed all %c[yellow]" .. released_objects .. "%c[default] items added by Western Goods from the save-game.", nil, nil, 10000)
dbg_printf("[WG] Core | Addon removal finished : %s", released_objects)
western_goods_mcm.set_config("addon_removal", false)
end
--- Function used to detect missing translations.
--- This function will iterate all files in gamedata/configs/text/[eng|rus]/*.xml.
--- Then, it will compare the strings found, and warn if any language has missing translation.
--- @return nil
function check_missing_translations()
dbg_printf("[WG] Core | Starting check for missing translations...")
local profiler = profile_timer()
profiler:start()
local folders = { "eng", "rus" }
local strings = {}
for _, folder in pairs(folders) do
local file_list = western_goods_utils.list_files("text\\" .. folder .. "\\")
dbg_printf("[WG] Core | Gathering strings for '%s' language", folder)
strings[folder] = {}
for _,file_name in pairs(file_list) do
if string.find(file_name, "western_goods") then
dbg_printf("[WG] Core | Parsing file '%s'", file_name)
local xml = CScriptXmlInit()
xml:ParseDirFile("text\\" .. folder, file_name)
xml:NavigateToNode("string_table", 0)
for i=0, xml:GetNodesNum("", 0, "string") - 1 do
strings[folder][#strings[folder]+1] = xml:ReadAttribute("string", i, "id")
end
end
end
end
for lang_curr, strings_curr in pairs(strings) do
for _, str_curr in pairs(strings_curr) do
for lang_other, strings_other in pairs(strings) do
if lang_curr ~= lang_other and not western_goods_utils.table_contains(strings_other, str_curr) then
printf("![WG] ERROR | Core | String '" .. str_curr .. "' found in '" .. lang_curr .. "' but not in '" .. lang_other .. "' !")
end
end
end
end
profiler:stop()
dbg_printf("[WG] Core | Check for missing translations ended in %sms", profiler:time()/1000)
end
-- ---------------------------------------------------------------------------------------------------------------------
-- Other functions
-- ---------------------------------------------------------------------------------------------------------------------
--- Function called from game_tutorials.xml when the player interacts with a campfire.
--- @return nil
function use_campfire()
printf("[WG] Core | Use Campfire - Called from game_tutorials.xml")
end
-- ---------------------------------------------------------------------------------------------------------------------
-- Addons detection functions
-- ---------------------------------------------------------------------------------------------------------------------
--- Function used to check if the Barter UI is installed.
--- @return boolean
function is_barter_ui_installed()
return barter_core ~= nil
end
--- Function used to check if the Hideout Furniture is installed.
--- @return boolean
function is_hideout_furniture_installed()
return ui_furniture_light ~= nil and hf_obj_manager ~= nil
end
--- Function used to check if the Food, Drugs and Drinks Animations (FDDA) is installed.
--- @return boolean
function is_fdda_installed()
return enhanced_animations ~= nil
end
-- ---------------------------------------------------------------------------------------------------------------------
-- Prerequisites functions
-- ---------------------------------------------------------------------------------------------------------------------
--- Function used to check if the necessary pre-requisites are installed, and forcefully crash the game if they aren't.
--- @return nil
function check_prerequisites()
UnregisterScriptCallback("on_game_load", check_prerequisites)
-- Out-of-date game
assert(is_version_1_5_2(), string.format("\n\n%s\n\n%s\n\n%s\n\n%s",
western_goods_utils.get_translation("st_err_outdated_game_title"),
western_goods_utils.get_translation("st_err_outdated_game_what"),
western_goods_utils.get_translation("st_err_outdated_game_why"),
western_goods_utils.get_translation("st_err_outdated_game_where")
))
-- Missing DXML
assert(is_dxml_installed(), string.format("\n\n%s\n\n%s\n\n%s\n\n%s",
western_goods_utils.get_translation("st_err_missing_dxml_title"),
western_goods_utils.get_translation("st_err_missing_dxml_what"),
western_goods_utils.get_translation("st_err_missing_dxml_why"),
western_goods_utils.get_translation("st_err_missing_dxml_where")
))
-- Missing LUA unlocalizer
assert(is_lua_unlocalizer_installed(), string.format("\n\n%s\n\n%s\n\n%s\n\n%s",
western_goods_utils.get_translation("st_err_missing_unlocalizer_title"),
western_goods_utils.get_translation("st_err_missing_unlocalizer_what"),
western_goods_utils.get_translation("st_err_missing_unlocalizer_why"),
western_goods_utils.get_translation("st_err_missing_unlocalizer_where")
))
end
--- Function used to check if game version number is 1.5.2.
--- @return boolean
function is_version_1_5_2()
return string.find(GAME_VERSION,"1.5.2")
end
--- Function used to check if DXML is installed.
--- @return boolean
function is_dxml_installed()
return dxml_core ~= nil
end
--- Function used to check if LUA Unlocalizer is installed.
--- @return boolean
function is_lua_unlocalizer_installed()
return western_goods_core.VERSION == VERSION
end
-- ---------------------------------------------------------------------------------------------------------------------
-- Callbacks Registration
-- ---------------------------------------------------------------------------------------------------------------------
--- Function used to register callbacks.
--- @return nil
function on_game_start()
RegisterScriptCallback("on_game_load", print_addon_version)
RegisterScriptCallback("on_game_load", check_prerequisites)
RegisterScriptCallback("on_game_load", check_missing_translations)
RegisterScriptCallback("on_option_change", check_addon_removal)
end
-- ---------------------------------------------------------------------------------------------------------------------
-- ITEMS POOL
-- ---------------------------------------------------------------------------------------------------------------------
--
-- Example :
--
-- ["<section>"] = {
-- type = "<type>",
-- trader_params = {
-- ["<faction>"] = { qte=<quantity>, sl=<supply_level>, prob=<probability> },
-- ["<faction>"] = { qte=<quantity>, sl=<supply_level>, prob=<probability> }
-- },
-- corpse_params = {
-- ["<faction>"] = { qte=<quantity>, prob=<probability> },
-- ["<faction>"] = { qte=<quantity>, prob=<probability> }
-- },
-- },
--
--
-- Legend :
--
-- - <section> : Name of the section to spawn in traders/corpses.
--
-- - <type> : Type of the item. If you add a new one, don't forget to modify function spawn_western_goods_in_trader() to spawn the new type of item.
-- Range: "food", "drink", "magazine", "tech", "money".
--
-- - <faction> : Faction allowed to spawn the item in trader/corpse.
-- Range: "stalker", "bandit", "csky", "dolg", "freedom", "killer", "army", "ecolog", "monolith", "renegade", "greh", "isg" or "trader".
--
-- - <quantity> : Quantity of the item to spawn in traders.
-- Range: any positive integer value.
--
-- - <supply_level> : Required supply level to access the item in traders.
-- Range: an integer value between 1 and 5.
--
-- - <probability> : Spawn rate in traders/corpses.
-- Range: a value from 0.0 to 1.0.
--
--
-- Note :
--
-- If you want an item to spawn for a given faction trader, you must define all three values : qte, sl and prob.
-- If one is missing, it most likely won't work or it'll crash to desktop.
--
-- You can make changes to this table from another script.
-- This way, you can do "Western Goods rebalance" addons or something, without needing to redistribute this script.
-- For this, create a script and inset something like this :
--
-- == my_western_goods_edit_<some_unique_name>.script ==================================================================
-- function on_game_start()
-- RegisterScriptCallback("on_game_load", function()
-- western_goods_core.western_goods_items["wg_twix"].trader_params["stalker"] = { qte=1, sl=1, prob=0.2 }
-- end)
-- end
-- =====================================================================================================================
--
-- With this line, stalker barmen will now have a 20% chance of selling 1 Twix at Supply Level 1.
-- Note that callbacks are fired in a random order, so if multiple edits are made to the same object and the same
-- property, it's unknown what the result will be.
--
-- ---------------------------------------------------------------------------------------------------------------------
western_goods_items = {
["wg_twix"] = {
type = "food",
trader_params = {
["freedom"] = { qte=1, sl=1, prob=0.2 },
["killer"] = { qte=2, sl=1, prob=0.5 },
["monolith"] = { qte=1, sl=1, prob=0.5 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=2, prob=0.02 },
["freedom"] = { qte=2, prob=0.05 },
["killer"] = { qte=2, prob=0.10 },
["monolith"] = { qte=2, prob=0.05 },
["renegade"] = { qte=2, prob=0.02 },
["isg"] = { qte=2, prob=0.10 }
},
},
["wg_mars"] = {
type = "food",
trader_params = {
["freedom"] = { qte=1, sl=1, prob=0.1 },
["killer"] = { qte=2, sl=1, prob=0.5 },
["monolith"] = { qte=1, sl=1, prob=0.1 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.05 },
["killer"] = { qte=1, prob=0.10 },
["monolith"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.10 }
},
},
["wg_milkyway"] = {
type = "food",
trader_params = {
["freedom"] = { qte=1, sl=1, prob=0.2 },
["killer"] = { qte=2, sl=1, prob=0.5 },
["monolith"] = { qte=1, sl=1, prob=0.4 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.05 },
["killer"] = { qte=1, prob=0.10 },
["monolith"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.10 }
},
},
["wg_snickers"] = {
type = "food",
trader_params = {
["bandit"] = { qte=1, sl=1, prob=0.8 },
["freedom"] = { qte=1, sl=1, prob=0.3 },
["killer"] = { qte=2, sl=1, prob=0.8 },
["monolith"] = { qte=1, sl=1, prob=0.3 },
["renegade"] = { qte=1, sl=2, prob=0.7 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.05 },
["killer"] = { qte=1, prob=0.10 },
["monolith"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.10 }
},
},
["wg_mnms"] = {
type = "food",
trader_params = {
["killer"] = { qte=2, sl=1, prob=0.3 },
["monolith"] = { qte=1, sl=1, prob=0.2 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=5, prob=0.02 },
["freedom"] = { qte=5, prob=0.05 },
["killer"] = { qte=5, prob=0.10 },
["monolith"] = { qte=5, prob=0.05 },
["renegade"] = { qte=5, prob=0.02 },
["isg"] = { qte=5, prob=0.10 }
},
},
["wg_mentos"] = {
type = "food",
trader_params = {
["monolith"] = { qte=1, sl=1, prob=0.2 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=3, prob=0.02 },
["freedom"] = { qte=3, prob=0.05 },
["killer"] = { qte=3, prob=0.10 },
["monolith"] = { qte=3, prob=0.05 },
["renegade"] = { qte=3, prob=0.02 },
["isg"] = { qte=3, prob=0.10 }
},
},
["wg_bounty"] = {
type = "food",
trader_params = {
["freedom"] = { qte=1, sl=1, prob=0.3 },
["killer"] = { qte=2, sl=1, prob=0.6 },
["monolith"] = { qte=1, sl=1, prob=0.4 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.05 },
["killer"] = { qte=1, prob=0.10 },
["monolith"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.10 }
},
},
["wg_kinder_maxi"] = {
type = "food",
trader_params = {
["monolith"] = { qte=1, sl=1, prob=0.3 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.05 },
["killer"] = { qte=1, prob=0.10 },
["monolith"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.10 }
},
},
["wg_kinder_bueno"] = {
type = "food",
trader_params = {
["monolith"] = { qte=1, sl=1, prob=0.3 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=2, prob=0.02 },
["freedom"] = { qte=2, prob=0.05 },
["killer"] = { qte=2, prob=0.10 },
["monolith"] = { qte=2, prob=0.05 },
["renegade"] = { qte=2, prob=0.02 },
["isg"] = { qte=2, prob=0.10 }
},
},
["wg_kitkat"] = {
type = "food",
trader_params = {
["monolith"] = { qte=1, sl=1, prob=0.2 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=4, prob=0.01 },
["freedom"] = { qte=4, prob=0.02 },
["killer"] = { qte=4, prob=0.05 },
["monolith"] = { qte=4, prob=0.05 },
["renegade"] = { qte=4, prob=0.01 },
["isg"] = { qte=4, prob=0.05 }
},
},
["wg_milka"] = {
type = "food",
trader_params = {
["monolith"] = { qte=1, sl=1, prob=0.2 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.01 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.01 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_lays"] = {
type = "food",
trader_params = {
["freedom"] = { qte=1, sl=1, prob=0.4 },
["monolith"] = { qte=1, sl=1, prob=0.3 },
["renegade"] = { qte=1, sl=2, prob=0.6 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.01 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.01 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_doritos"] = {
type = "food",
trader_params = {
["bandit"] = { qte=1, sl=2, prob=0.7 },
["monolith"] = { qte=1, sl=1, prob=0.2 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.01 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.01 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_pringles"] = {
type = "food",
trader_params = {
["freedom"] = { qte=1, sl=1, prob=0.3 },
["killer"] = { qte=2, sl=2, prob=0.4 },
["monolith"] = { qte=1, sl=1, prob=0.2 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.01 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.01 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_hamborgir"] = {
type = "food",
trader_params = {
["monolith"] = { qte=1, sl=1, prob=0.5 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.01 },
["freedom"] = { qte=1, prob=0.03 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.02 },
["renegade"] = { qte=1, prob=0.01 },
["isg"] = { qte=1, prob=0.10 }
},
},
["wg_gorbatschow_bottle"] = {
type = "drink",
trader_params = {
["freedom"] = { qte=1, sl=1, prob=0.6 },
["killer"] = { qte=2, sl=1, prob=0.5 },
["monolith"] = { qte=1, sl=1, prob=0.3 },
["renegade"] = { qte=1, sl=1, prob=0.8 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=2, prob=0.10 },
["freedom"] = { qte=2, prob=0.02 },
["killer"] = { qte=2, prob=0.05 },
["monolith"] = { qte=2, prob=0.05 },
["renegade"] = { qte=2, prob=0.05 },
["isg"] = { qte=2, prob=0.05 }
},
},
["wg_cola_bottle"] = {
type = "drink",
trader_params = {
["isg"] = { qte=2, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=3, prob=0.01 },
["freedom"] = { qte=3, prob=0.02 },
["killer"] = { qte=3, prob=0.05 },
["monolith"] = { qte=3, prob=0.02 },
["renegade"] = { qte=3, prob=0.01 },
["isg"] = { qte=3, prob=0.05 }
},
},
["wg_cola_can"] = {
type = "drink",
trader_params = {
["isg"] = { qte=2, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.01 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.02 },
["renegade"] = { qte=1, prob=0.01 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_sprite_can"] = {
type = "drink",
trader_params = {
["killer"] = { qte=2, sl=1, prob=0.7 },
["isg"] = { qte=2, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.01 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.02 },
["renegade"] = { qte=1, prob=0.01 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_redbull_can"] = {
type = "drink",
trader_params = {
["isg"] = { qte=2, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.01 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.02 },
["renegade"] = { qte=1, prob=0.01 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_perrier_can"] = {
type = "drink",
trader_params = {
["isg"] = { qte=2, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.01 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.02 },
["renegade"] = { qte=1, prob=0.01 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_rockstar_energy_can"] = {
type = "drink",
trader_params = {
["isg"] = { qte=2, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.01 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.02 },
["renegade"] = { qte=1, prob=0.01 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_monster_energy_can"] = {
type = "drink",
trader_params = {
["isg"] = { qte=2, sl=1, prob=0.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.01 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.02 },
["renegade"] = { qte=1, prob=0.01 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_wine_chateau_latour"] = {
type = "drink",
trader_params = {
},
corpse_params = {
["bandit"] = { qte=1, prob=0.01 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.02 },
["renegade"] = { qte=1, prob=0.01 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_yoohoo_bottle"] = {
type = "drink",
trader_params = {
["killer"] = { qte=2, sl=1, prob=0.1 },
["isg"] = { qte=2, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.01 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.02 },
["renegade"] = { qte=1, prob=0.01 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_nestea_icetea_bottle"] = {
type = "drink",
trader_params = {
["killer"] = { qte=2, sl=1, prob=0.3 },
["isg"] = { qte=2, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=2, prob=0.01 },
["freedom"] = { qte=2, prob=0.02 },
["killer"] = { qte=2, prob=0.05 },
["monolith"] = { qte=2, prob=0.02 },
["renegade"] = { qte=2, prob=0.01 },
["isg"] = { qte=2, prob=0.05 }
},
},
["wg_mountain_dew_bottle"] = {
type = "drink",
trader_params = {
["killer"] = { qte=2, sl=3, prob=0.2 },
["isg"] = { qte=2, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=2, prob=0.01 },
["freedom"] = { qte=2, prob=0.02 },
["killer"] = { qte=2, prob=0.05 },
["monolith"] = { qte=2, prob=0.02 },
["renegade"] = { qte=2, prob=0.01 },
["isg"] = { qte=2, prob=0.05 }
},
},
["wg_beer_86_can"] = {
type = "drink",
trader_params = {
["bandit"] = { qte=1, sl=2, prob=0.9 },
["freedom"] = { qte=1, sl=1, prob=0.1 },
["killer"] = { qte=2, sl=1, prob=0.6 },
["monolith"] = { qte=1, sl=1, prob=0.3 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_mountain_dew_can"] = {
type = "drink",
trader_params = {
["killer"] = { qte=2, sl=2, prob=0.8 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_fanta_can"] = {
type = "drink",
trader_params = {
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_pepsi_can"] = {
type = "drink",
trader_params = {
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_sevenup_can"] = {
type = "drink",
trader_params = {
["freedom"] = { qte=1, sl=1, prob=0.5 },
["killer"] = { qte=2, sl=1, prob=0.8 },
["monolith"] = { qte=1, sl=1, prob=0.5 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_dr_bob_can"] = {
type = "drink",
trader_params = {
["freedom"] = { qte=1, sl=1, prob=0.6 },
["killer"] = { qte=2, sl=1, prob=0.8 },
["monolith"] = { qte=1, sl=1, prob=0.5 },
["isg"] = { qte=3, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_lipton_icetea_can"] = {
type = "drink",
trader_params = {
["killer"] = { qte=2, sl=1, prob=0.8 },
["isg"] = { qte=2, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.01 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.02 },
["renegade"] = { qte=1, prob=0.01 },
["isg"] = { qte=1, prob=0.05 }
},
},
["wg_laptop"] = {
type = "tech",
trader_params = {
["killer"] = { qte=1, sl=3, prob=0.2 },
["isg"] = { qte=1, sl=1, prob=1.0 }
},
corpse_params = {
["killer"] = { qte=1, prob=0.01 }
},
},
["wg_military_radio"] = {
type = "tech",
trader_params = {
["killer"] = { qte=1, sl=1, prob=0.3 },
["isg"] = { qte=1, sl=1, prob=1.0 }
},
corpse_params = {
["killer"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.02 }
},
},
["wg_gps"] = {
type = "tech",
trader_params = {
["killer"] = { qte=2, sl=1, prob=0.9 },
["isg"] = { qte=2, sl=1, prob=1.0 }
},
corpse_params = {
["killer"] = { qte=1, prob=0.05 },
["isg"] = { qte=1, prob=0.10 }
},
},
["wg_porn_mag_1"] = {
type = "magazine",
trader_params = {
},
corpse_params = {
["bandit"] = { qte=1, prob=0.01 },
["freedom"] = { qte=1, prob=0.01 },
["killer"] = { qte=1, prob=0.02 },
["monolith"] = { qte=1, prob=0.01 },
["renegade"] = { qte=1, prob=0.01 }
},
},
["wg_porn_mag_2"] = {
type = "magazine",
trader_params = {
["killer"] = { qte=1, sl=3, prob=0.4 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.01 },
["renegade"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.02 }
},
},
["wg_porn_mag_3"] = {
type = "magazine",
trader_params = {
["killer"] = { qte=1, sl=2, prob=0.4 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.01 },
["renegade"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.02 }
},
},
["wg_xbox_mag_1"] = {
type = "magazine",
trader_params = {
["killer"] = { qte=1, sl=1, prob=0.6 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.02 },
["renegade"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.02 }
},
},
["wg_xbox_mag_2"] = {
type = "magazine",
trader_params = {
["killer"] = { qte=1, sl=2, prob=0.6 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.02 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.02 },
["renegade"] = { qte=1, prob=0.02 },
["isg"] = { qte=1, prob=0.02 }
},
},
["wg_dollars_10"] = {
type = "money",
trader_params = {
},
corpse_params = {
["bandit"] = { qte=1, prob=0.10 },
["freedom"] = { qte=1, prob=0.60 },
["killer"] = { qte=1, prob=0.80 },
["monolith"] = { qte=1, prob=0.01 },
["renegade"] = { qte=1, prob=0.01 }
},
},
["wg_dollars_50"] = {
type = "money",
trader_params = {
},
corpse_params = {
["bandit"] = { qte=1, prob=0.07 },
["freedom"] = { qte=1, prob=0.50 },
["killer"] = { qte=1, prob=0.70 },
["monolith"] = { qte=1, prob=0.01 },
["renegade"] = { qte=1, prob=0.01 }
},
},
["wg_dollars_100"] = {
type = "money",
trader_params = {
},
corpse_params = {
["bandit"] = { qte=1, prob=0.04 },
["freedom"] = { qte=1, prob=0.40 },
["killer"] = { qte=1, prob=0.60 },
["monolith"] = { qte=1, prob=0.01 },
["renegade"] = { qte=1, prob=0.01 }
},
},
["wg_euros_10"] = {
type = "money",
trader_params = {
},
corpse_params = {
["bandit"] = { qte=1, prob=0.10 },
["freedom"] = { qte=1, prob=0.60 },
["killer"] = { qte=1, prob=0.80 },
["monolith"] = { qte=1, prob=0.01 },
["renegade"] = { qte=1, prob=0.01 }
},
},
["wg_euros_50"] = {
type = "money",
trader_params = {
},
corpse_params = {
["bandit"] = { qte=1, prob=0.07 },
["freedom"] = { qte=1, prob=0.50 },
["killer"] = { qte=1, prob=0.70 },
["monolith"] = { qte=1, prob=0.01 },
["renegade"] = { qte=1, prob=0.01 }
},
},
["wg_euros_100"] = {
type = "money",
trader_params = {
},
corpse_params = {
["bandit"] = { qte=1, prob=0.04 },
["freedom"] = { qte=1, prob=0.40 },
["killer"] = { qte=1, prob=0.60 },
["monolith"] = { qte=1, prob=0.01 },
["renegade"] = { qte=1, prob=0.01 }
},
},
["wg_french_mre"] = {
type = "food",
trader_params = {
["killer"] = { qte=1, sl=3, prob=0.25 },
["isg"] = { qte=2, sl=1, prob=1.0 }
},
corpse_params = {
["killer"] = { qte=1, prob=0.01 },
["isg"] = { qte=1, prob=0.01 }
},
},
["wg_sandwich"] = {
type = "food",
trader_params = {
},
corpse_params = {
},
},
["wg_oreo"] = {
type = "food",
trader_params = {
["killer"] = { qte=2, sl=2, prob=1.0 },
["isg"] = { qte=2, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.05 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.01 },
["renegade"] = { qte=1, prob=0.01 }
},
},
["wg_ferrero_rocher"] = {
type = "food",
trader_params = {
["killer"] = { qte=1, sl=1, prob=0.5 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.05 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.01 },
["renegade"] = { qte=1, prob=0.01 }
},
},
["wg_mon_cheri"] = {
type = "food",
trader_params = {
["killer"] = { qte=1, sl=2, prob=0.6 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.05 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.01 },
["renegade"] = { qte=1, prob=0.01 }
},
},
["wg_toblerone"] = {
type = "food",
trader_params = {
["isg"] = { qte=1, sl=1, prob=1.0 },
["stalker"] = { qte=1, sl=3, prob=0.5 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.05 },
["killer"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.01 },
["renegade"] = { qte=1, prob=0.01 }
},
},
["wg_strana_igr_mag_1"] = {
type = "magazine",
trader_params = {
["isg"] = { qte=1, sl=1, prob=1.0 },
["stalker"] = { qte=1, sl=3, prob=0.4 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.01 }
},
},
["wg_car_mag_1"] = {
type = "magazine",
trader_params = {
["isg"] = { qte=1, sl=1, prob=1.0 },
["killer"] = { qte=1, sl=3, prob=0.6 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.04 },
["freedom"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.01 }
},
},
["wg_car_mag_2"] = {
type = "magazine",
trader_params = {
["isg"] = { qte=1, sl=1, prob=1.0 }
},
corpse_params = {
["bandit"] = { qte=1, prob=0.04 },
["freedom"] = { qte=1, prob=0.05 },
["renegade"] = { qte=1, prob=0.01 }
},
},
["wg_lighter_bic"] = {
type = "tech",
trader_params = {
["isg"] = { qte=1, sl=1, prob=1.0 },
["killer"] = { qte=2, sl=2, prob=0.9 },
["stalker"] = { qte=1, sl=2, prob=0.6 },
["freedom"] = { qte=1, sl=2, prob=0.8 },
["bandit"] = { qte=1, sl=2, prob=0.7 },
["monolith"] = { qte=1, sl=1, prob=0.7 }
},
corpse_params = {
["stalker"] = { qte=1, prob=0.03 },
["bandit"] = { qte=1, prob=0.03 },
["freedom"] = { qte=1, prob=0.03 },
["renegade"] = { qte=1, prob=0.03 },
["killer"] = { qte=1, prob=0.05 },
["isg"] = { qte=1, prob=0.10 },
["monolith"] = { qte=1, prob=0.05 }
},
},
["wg_rangefinder"] = {
type = "tech",
trader_params = {
["army"] = { qte=1, sl=2, prob=0.5 },
["isg"] = { qte=1, sl=1, prob=1.0 },
["killer"] = { qte=1, sl=2, prob=1.0 },
["monolith"] = { qte=1, sl=2, prob=1.0 }
},
corpse_params = {
["stalker"] = { qte=1, prob=0.02 },
["freedom"] = { qte=1, prob=0.02 },
["army"] = { qte=1, prob=0.03 },
["killer"] = { qte=1, prob=0.03 },
["isg"] = { qte=1, prob=0.05 },
["monolith"] = { qte=1, prob=0.05 }
},
}
}
-- ---------------------------------------------------------------------------------------------------------------------
-- OTHER ITEMS
-- ---------------------------------------------------------------------------------------------------------------------
western_goods_special_items = {
"wg_money_suitcase",
"wg_act_1_task_1_quest_item",
"wg_act_1_task_2_quest_item_1",
"wg_act_1_task_2_quest_item_2",
"wg_act_2_task_2_quest_item",
"wg_danylo_pendrive_quest_item",
"wg_deployment_notice_quest_item",
"wg_stash_map_quest_item",
"western_goods_helicopter_landed",
"western_goods_helicopter",
}
western_goods_squads = {
"stalker_crew_member_squad",
"stalker_danylo_chernenko_squad",
"stalker_dunn_lynn_squad",
"stalker_jupiter_informant_squad",
"stalker_oleksandr_chernenko_squad",
"stalker_western_goods_trader_squad",
"western_goods_act_1_task_1_heli_crew_squad",
"western_goods_act_1_task_1_zombie_1_squad",
"western_goods_act_1_task_1_zombie_2_squad",
"western_goods_act_1_task_1_zombie_3_squad",
"western_goods_act_1_task_1_zombie_4_squad",
"western_goods_act_1_task_2_bandit_1_squad",
"western_goods_act_1_task_2_bandit_2_squad",
"western_goods_act_1_task_2_bandit_3_squad",
"western_goods_act_1_task_2_bandit_4_squad",
"western_goods_act_1_task_2_bandit_5_squad",
"western_goods_act_1_task_2_bandit_6_squad",
"western_goods_act_1_task_3_mono_bridge_1_squad",
"western_goods_act_1_task_3_mono_bridge_2_squad",
"western_goods_act_1_task_3_mono_bridge_3_squad",
"western_goods_act_1_task_3_mono_guards_1_squad",
"western_goods_act_1_task_3_mono_guards_2_squad",
"western_goods_act_2_task_2_army_squad",
"western_goods_act_2_task_2_bandit_1_squad",
"western_goods_act_2_task_2_bandit_2_squad",
"western_goods_act_2_task_2_controller_squad",
"western_goods_act_2_task_2_ecolog_squad",
"western_goods_act_2_task_2_lynn_guards_squad",
"western_goods_act_2_task_2_mono_squad",
"western_goods_act_2_task_2_snork_squad",
"western_goods_act_2_task_2_zombie_1_squad",
"western_goods_act_2_task_2_zombie_2_squad",
"western_goods_ssu_bounty_squad",
"western_goods_ssu_prisoner_squad",
"western_goods_ssu_supervisor_squad",
}
western_goods_npcs = {
"stalker_crew_member",
"stalker_danylo_chernenko",
"stalker_dunn_lynn",
"stalker_ecolog_convoy_orange",
"stalker_ecolog_convoy_yellow",
"stalker_jupiter_informant",
"stalker_oleksandr_chernenko",
"stalker_ssu_prisoner",
"stalker_ssu_supervisor",
"stalker_western_goods_trader",
}
western_goods_task = {
"western_goods_act_1_task_1",
"western_goods_act_1_task_2",
"western_goods_act_1_task_3",
"western_goods_act_2_task_1",
"western_goods_act_2_task_2",
"western_goods_act_3_task_1",
"western_goods_act_3_task_2",
"western_goods_act_3_task_3",
"western_goods_act_3_task_4",
}
western_goods_info = {
"western_goods_act_1_finished",
"western_goods_act_1_task_1_active",
"western_goods_act_1_task_1_finished",
"western_goods_act_1_task_1_init",
"western_goods_act_1_task_1_ready_finished",
"western_goods_act_1_task_2_active",
"western_goods_act_1_task_2_available",
"western_goods_act_1_task_2_finished",
"western_goods_act_1_task_2_init",
"western_goods_act_1_task_2_ready_finished",
"western_goods_act_1_task_3_active",
"western_goods_act_1_task_3_available",
"western_goods_act_1_task_3_crew_member_extracted",
"western_goods_act_1_task_3_finished",
"western_goods_act_1_task_3_init",
"western_goods_act_1_task_3_ready_finished",
"western_goods_act_2_finished",
"western_goods_act_2_task_1_active",
"western_goods_act_2_task_1_finished",
"western_goods_act_2_task_1_init",
"western_goods_act_2_task_1_ready_finished",
"western_goods_act_2_task_2_active",
"western_goods_act_2_task_2_controller_killed",
"western_goods_act_2_task_2_controller_killed",
"western_goods_act_2_task_2_controller_spawned",
"western_goods_act_2_task_2_ecolog_calm",
"western_goods_act_2_task_2_ecolog_calm",
"western_goods_act_2_task_2_ecolog_flee",
"western_goods_act_2_task_2_finished",
"western_goods_act_2_task_2_init",
"western_goods_act_2_task_2_ready_finished",
"western_goods_act_3_finished",
"western_goods_act_3_task_1_active",
"western_goods_act_3_task_1_finished",
"western_goods_act_3_task_1_init",
"western_goods_act_3_task_1_ready_finished",
"western_goods_act_3_task_2_active",
"western_goods_act_3_task_2_finished",
"western_goods_act_3_task_2_init",
"western_goods_act_3_task_2_ready_finished",
"western_goods_act_3_task_3_active",
"western_goods_act_3_task_3_finished",
"western_goods_act_3_task_3_init",
"western_goods_act_3_task_3_ready_finished",
"western_goods_act_3_task_4_active",
"western_goods_act_3_task_4_finished",
"western_goods_act_3_task_4_init",
"western_goods_act_3_task_4_ready_finished",
"western_goods_danylo_army_warehouses",
"western_goods_danylo_army_warehouses",
"western_goods_danylo_red_forest",
}