1034 lines
32 KiB
Plaintext
1034 lines
32 KiB
Plaintext
|
|
||
|
--[[
|
||
|
add to:
|
||
|
- dynamic_news_helper.script (st_new_levels_dyn_news.xml)
|
||
|
- global_position.script
|
||
|
- game_statistics.script
|
||
|
- level_targets.script (useful for warfare only probably)
|
||
|
- level_weathers.script
|
||
|
- txr_routes.script (need new functions if you add dialogues)
|
||
|
- tasks_guide.script (add/change inside the table of this script)
|
||
|
- utils_xml.script
|
||
|
- mlr_utils.script (dont need?)
|
||
|
|
||
|
- st_new_levels_smart_names.xml (smart display names)
|
||
|
--]]
|
||
|
|
||
|
|
||
|
NEW_LEVELS = {
|
||
|
|
||
|
------------------------------------------------------
|
||
|
------------------ PROMZONE --------------------
|
||
|
------------------------------------------------------
|
||
|
["promzona"] = {
|
||
|
|
||
|
-- level id
|
||
|
id = 35,
|
||
|
|
||
|
-- dynamic_news_helper.script
|
||
|
dyn_news = {
|
||
|
{ -172.9, -28.5, 30.8 }, -- train station
|
||
|
{ -190.4, -28.5, -116.2 }, -- anomaly phase
|
||
|
{ 175.0, -28.6, 279.3 }, -- factory
|
||
|
{ 385.7, -28.7, 128.1 }, -- tunnel
|
||
|
{ 247.8, -32.3, -91 }, -- anomaly bog
|
||
|
{ 279.3, -23.0, -267.4 }, -- radar station
|
||
|
{ 84.0, -31.5, -191.8 }, -- anomaly cosmodrome
|
||
|
},
|
||
|
|
||
|
-- global_position.script
|
||
|
-- (pick from game_levels.ltx)
|
||
|
global_pos = { 2500.0, 1200.0, 2500.0 },
|
||
|
|
||
|
-- level_targets.script
|
||
|
level_is_lab = false,
|
||
|
starts = { "prom_9", "prom_12" },
|
||
|
offsets = { 2500.0, 1200.0, 2500.0 },
|
||
|
|
||
|
-- delete links
|
||
|
links_del = {
|
||
|
[9] = { [32] = true }, -- mil - tc
|
||
|
[32] = { [9] = true }, -- tc - mil
|
||
|
},
|
||
|
|
||
|
-- add links
|
||
|
links_add = {
|
||
|
[9] = { [35] = true }, -- mil - prom
|
||
|
[32] = { [35] = true }, -- tc - prom
|
||
|
[35] = { [9] = true, [32] = true }, -- prom - mil, prom - tc
|
||
|
},
|
||
|
|
||
|
-- level_weathers.script
|
||
|
-- according to comment its {x1, y1}, {x1, y2}, {x2, y2}, {x2, y1}
|
||
|
-- but all levels there have format {x1, y2}, {x1, y1}, {x2, y1}, {x2, y2} who tf knows
|
||
|
-- -600.000000,-600.000000,600.000000,600.000000
|
||
|
-- weather_boundaries = {{-600, -600}, {-600, 600}, {600, 600}, {600, -600}},
|
||
|
weather_boundaries = {{-600, 600}, {-600, -600}, {600, -600}, {600, 600}},
|
||
|
|
||
|
-- txr_routes.script
|
||
|
route_map = "prom", -- maps
|
||
|
-- new level key for "route_map"
|
||
|
new_routes = {
|
||
|
["mil"] = {"prom_space_restrictor_to_military"},
|
||
|
["trc"] = {"prom_space_restrictor_to_tc"},
|
||
|
["bunk"] = {"prom_space_restrictor_to_bunker"},
|
||
|
["col"] = {"prom_space_restrictor_to_collider"}
|
||
|
},
|
||
|
|
||
|
-- delete from existing map
|
||
|
delete_routes = {
|
||
|
["mil"] = {
|
||
|
["trc"] = {
|
||
|
["mil_space_restrictor_to_tc"] = true,
|
||
|
},
|
||
|
},
|
||
|
|
||
|
["trc"] = {
|
||
|
["mil"] = {
|
||
|
["tc_space_restrictor_to_military_1"] = true,
|
||
|
["tc_space_restrictor_to_military_2"] = true,
|
||
|
["tc_space_restrictor_to_military_3"] = true,
|
||
|
},
|
||
|
},
|
||
|
|
||
|
},
|
||
|
|
||
|
-- add new to existing map
|
||
|
add_routes = {
|
||
|
["mil"] = {
|
||
|
["prom"] = {"mil_space_restrictor_to_prom"},
|
||
|
},
|
||
|
|
||
|
["trc"] = {
|
||
|
["prom"] = {"tc_space_restrictor_to_promzona_1", "tc_space_restrictor_to_promzona_2", "tc_space_restrictor_to_promzona_3"},
|
||
|
},
|
||
|
|
||
|
["bunk"] = {
|
||
|
["prom"] = {"bunker_space_restrictor_to_prom"},
|
||
|
},
|
||
|
|
||
|
["col"] = {
|
||
|
["prom"] = {"collider_space_restrictor_to_prom"},
|
||
|
},
|
||
|
},
|
||
|
|
||
|
-- pda.script (copy)
|
||
|
pda_hints = {
|
||
|
{target="prom_4_anomaly_spot", hint="st_prom_4_anomaly_spot_name"},
|
||
|
{target="prom_5_anomaly_spot", hint="st_prom_5_anomaly_spot_name"},
|
||
|
{target="prom_6_anomaly_spot", hint="st_prom_6_anomaly_spot_name"},
|
||
|
{target="prom_10_anomaly_spot", hint="st_prom_10_anomaly_spot_name"},
|
||
|
{target="prom_11_anomaly_spot", hint="st_prom_11_anomaly_spot_name"},
|
||
|
{target="prom_13_anomaly_spot_1", hint="st_prom_13_anomaly_spot_1_name"},
|
||
|
{target="prom_13_anomaly_spot_2", hint="st_prom_13_anomaly_spot_2_name"},
|
||
|
{target="prom_14_anomaly_spot", hint="st_prom_14_anomaly_spot_name"},
|
||
|
},
|
||
|
|
||
|
-- utils_xml.script
|
||
|
utils_str = "Promzone",
|
||
|
|
||
|
-- mlr_utils.script
|
||
|
mlr_utils_key = {
|
||
|
-- escp_guid_mil_speed = {-17.040597915649,0.69932228326797,277.01373291016, 279632, 632},
|
||
|
},
|
||
|
|
||
|
|
||
|
-------------- other addons --------------
|
||
|
|
||
|
-- Interactive PDA
|
||
|
-- texture in "ui_new_levels_encyclopedia.dds"
|
||
|
-- texture descr in "ui_new_levels_encyclopedia.xml"
|
||
|
-- [1] is raid danger, [2] is image
|
||
|
int_pda = { 0.6, "promzona" },
|
||
|
|
||
|
-- Toxic air
|
||
|
toxic_air_val = 0.2,
|
||
|
|
||
|
-- NPC rank based travelling
|
||
|
travel_t = {
|
||
|
["stalker"] = { novice = 50, experienced = 80, veteran = 70, master = 50 },
|
||
|
["dolg"] = { novice = 60, experienced = 80, veteran = 70, master = 30 },
|
||
|
["freedom"] = { novice = 80, experienced = 90, veteran = 60, master = 40 },
|
||
|
["csky"] = { novice = 20, experienced = 70, veteran = 60, master = 40 },
|
||
|
["ecolog"] = { novice = 50, experienced = 80, veteran = 70, master = 50 },
|
||
|
["killer"] = { novice = 40, experienced = 80, veteran = 70, master = 40 },
|
||
|
["army"] = { novice = 40, experienced = 80, veteran = 50, master = 20 },
|
||
|
["bandit"] = { novice = 60, experienced = 90, veteran = 70, master = 60 },
|
||
|
["renegade"] = { novice = 50, experienced = 80, veteran = 70, master = 40 },
|
||
|
["monolith"] = { novice = 70, experienced = 40, veteran = 10, master = 0 },
|
||
|
},
|
||
|
|
||
|
-- warfare/warfare alife overhaul
|
||
|
warfare_lairs = 14,
|
||
|
|
||
|
},
|
||
|
|
||
|
|
||
|
------------------------------------------------------
|
||
|
------------------ GRIMWOOD --------------------
|
||
|
------------------------------------------------------
|
||
|
["grimwood"] = {
|
||
|
id = 36,
|
||
|
|
||
|
dyn_news = {
|
||
|
{ -224, 0, 180 }, -- psi grove
|
||
|
{ -185, 0, 19 }, -- outpost
|
||
|
{ -120, -12, -130 }, -- pond
|
||
|
{ 53, 1, -255 }, -- Ulcer anomaly
|
||
|
{ 260, 0, -233 }, -- abandoned building
|
||
|
{ 175, 2, 5 }, -- eastern forest
|
||
|
{ 28, 0, 61 }, -- road camp
|
||
|
{ 8, -6, 206 }, -- Crown anomaly
|
||
|
{ 158, -4, 187 }, -- Pier
|
||
|
},
|
||
|
|
||
|
global_pos = { 1115, 1100, 3000 },
|
||
|
|
||
|
level_is_lab = false,
|
||
|
starts = { "grim_10", "grim_16" },
|
||
|
offsets = { 1115, 1100, 3000 },
|
||
|
|
||
|
links_del = {
|
||
|
[11] = { [9] = true }, -- cit - mil
|
||
|
[9] = { [11] = true }, -- mil - cit
|
||
|
},
|
||
|
|
||
|
links_add = {
|
||
|
[9] = { [36] = true }, -- mil - grim
|
||
|
[11] = { [36] = true }, -- cit - grim
|
||
|
[14] = { [36] = true }, -- redfor - grim
|
||
|
[36] = { [9] = true, [11] = true, [14] = true }, -- grim - mil, grim - cit, grim - redfor
|
||
|
},
|
||
|
|
||
|
weather_boundaries = {{-401.823488, 351.950304}, {-401.823488, -353.705856}, {400.342880, -353.705856}, {400.342880, 351.950304}},
|
||
|
|
||
|
route_map = "grim",
|
||
|
new_routes = {
|
||
|
["mil"] = {"grim_space_restrictor_to_military"},
|
||
|
["cit"] = {"grim_space_restrictor_to_cit"},
|
||
|
["red"] = {"grim_space_restrictor_to_redfor"},
|
||
|
},
|
||
|
|
||
|
delete_routes = {
|
||
|
["mil"] = {
|
||
|
["cit"] = {
|
||
|
["mil_space_restrictor_to_dead_city_1"] = true,
|
||
|
},
|
||
|
},
|
||
|
|
||
|
["cit"] = {
|
||
|
["mil"] = {
|
||
|
["cit_space_restrictor_to_military"] = true,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
|
||
|
add_routes = {
|
||
|
["mil"] = {
|
||
|
["grim"] = {"mil_space_restrictor_to_grim"},
|
||
|
},
|
||
|
|
||
|
["cit"] = {
|
||
|
["grim"] = {"cit_space_restrictor_to_grim"},
|
||
|
},
|
||
|
|
||
|
["red"] = {
|
||
|
["grim"] = {"redfor_space_restrictor_to_grim"},
|
||
|
},
|
||
|
},
|
||
|
|
||
|
pda_hints = {
|
||
|
{target="grim_1_anomaly_spot_1", hint="st_grim_1_anomaly_spot_1_name"},
|
||
|
{target="grim_4_anomaly_spot_1", hint="st_grim_4_anomaly_spot_1_name"},
|
||
|
{target="grim_5_anomaly_spot_1", hint="st_grim_5_anomaly_spot_1_name"},
|
||
|
{target="grim_7_anomaly_spot_1", hint="st_grim_7_anomaly_spot_1_name"},
|
||
|
{target="grim_11_anomaly_spot_1", hint="st_grim_11_anomaly_spot_1_name"},
|
||
|
{target="grim_12_anomaly_spot_1", hint="st_grim_12_anomaly_spot_1_name"},
|
||
|
{target="grim_13_anomaly_spot_1", hint="st_grim_13_anomaly_spot_1_name"},
|
||
|
{target="grim_15_anomaly_spot_1", hint="st_grim_15_anomaly_spot_1_name"},
|
||
|
},
|
||
|
|
||
|
utils_str = "Grimwood",
|
||
|
|
||
|
mlr_utils_key = {},
|
||
|
|
||
|
-------------- other addons --------------
|
||
|
|
||
|
-- Interactive PDA
|
||
|
int_pda = { 0.8, "grimwood" },
|
||
|
|
||
|
-- Toxic air
|
||
|
toxic_air_val = 0.2,
|
||
|
|
||
|
-- NPC rank based travelling
|
||
|
travel_t = {
|
||
|
["stalker"] = { novice = 50, experienced = 80, veteran = 70, master = 50 },
|
||
|
["dolg"] = { novice = 60, experienced = 80, veteran = 70, master = 30 },
|
||
|
["freedom"] = { novice = 80, experienced = 90, veteran = 60, master = 40 },
|
||
|
["csky"] = { novice = 20, experienced = 70, veteran = 60, master = 40 },
|
||
|
["ecolog"] = { novice = 50, experienced = 80, veteran = 70, master = 50 },
|
||
|
["killer"] = { novice = 55, experienced = 80, veteran = 70, master = 40 },
|
||
|
["army"] = { novice = 40, experienced = 80, veteran = 50, master = 20 },
|
||
|
["bandit"] = { novice = 60, experienced = 90, veteran = 70, master = 60 },
|
||
|
["renegade"] = { novice = 50, experienced = 80, veteran = 70, master = 40 },
|
||
|
["monolith"] = { novice = 70, experienced = 60, veteran = 25, master = 10 },
|
||
|
},
|
||
|
|
||
|
-- warfare/warfare alife overhaul
|
||
|
warfare_lairs = 15,
|
||
|
|
||
|
},
|
||
|
|
||
|
|
||
|
------------------------------------------------------
|
||
|
---------------- POSELOK_UG --------------------
|
||
|
------------------------------------------------------
|
||
|
["poselok_ug"] = {
|
||
|
id = 37,
|
||
|
|
||
|
dyn_news = {
|
||
|
{ -364, -1, -348 }, -- anomaly canyon
|
||
|
{ -443, 0, -39 }, -- animal farm
|
||
|
{ -406, -8, 355 }, -- swamp
|
||
|
{ -248, 0, 150 }, -- kindergarten
|
||
|
{ -219, 0, -42 }, -- pharmacy
|
||
|
{ -50, 0., 251 }, -- gas station
|
||
|
{ 55, 0, 2 }, -- park
|
||
|
{ 37, -1, -358 }, -- south grove
|
||
|
{ 70, 0, 328 }, -- northern private sector
|
||
|
{ 275, 0, -75 }, -- eastern private sector
|
||
|
},
|
||
|
|
||
|
global_pos = { 3240, 1000, 1500 },
|
||
|
|
||
|
level_is_lab = false,
|
||
|
starts = { "posug_4", "posug_20" },
|
||
|
offsets = { 3240, 1000, 1500 },
|
||
|
|
||
|
links_del = {},
|
||
|
|
||
|
links_add = {
|
||
|
[3] = { [37] = true }, -- gar - pos
|
||
|
[6] = { [37] = true }, -- dv - pos
|
||
|
[32] = { [37] = true }, -- tc - pos
|
||
|
[9] = { [37] = true }, -- mil - pos
|
||
|
[37] = { [3] = true, [6] = true, [32] = true, [9] = true }, -- pos - gar, pos - dv, pos - tc, pos - mil
|
||
|
},
|
||
|
|
||
|
weather_boundaries = {{-680, 680}, {-680, -680}, {680, -680}, {680, 680}},
|
||
|
|
||
|
route_map = "pos",
|
||
|
new_routes = {
|
||
|
["gar"] = {"pos_space_restrictor_to_garbage"},
|
||
|
["val"] = {"pos_space_restrictor_to_darkvalley"},
|
||
|
["trc"] = {"pos_space_restrictor_to_tc"},
|
||
|
["mil"] = {"pos_space_restrictor_to_military"},
|
||
|
},
|
||
|
|
||
|
delete_routes = {},
|
||
|
|
||
|
add_routes = {
|
||
|
["gar"] = {
|
||
|
["pos"] = {"garbage_space_restrictor_to_pos"},
|
||
|
},
|
||
|
|
||
|
["val"] = {
|
||
|
["pos"] = {"darkvalley_space_restrictor_to_pos"},
|
||
|
},
|
||
|
|
||
|
["trc"] = {
|
||
|
["pos"] = {"tc_space_restrictor_to_pos"},
|
||
|
},
|
||
|
|
||
|
["mil"] = {
|
||
|
["pos"] = {"military_space_restrictor_to_pos"},
|
||
|
},
|
||
|
},
|
||
|
|
||
|
pda_hints = {
|
||
|
{target="posug_4_anomaly_spot_1", hint="st_posug_4_anomaly_spot_1_name"},
|
||
|
{target="posug_6_anomaly_spot_1", hint="st_posug_6_anomaly_spot_1_name"},
|
||
|
{target="posug_10_anomaly_spot_1", hint="st_posug_10_anomaly_spot_1_name"},
|
||
|
{target="posug_13_anomaly_spot_1", hint="st_posug_13_anomaly_spot_1_name"},
|
||
|
{target="posug_17_anomaly_spot_1", hint="st_posug_17_anomaly_spot_1_name"},
|
||
|
{target="posug_24_anomaly_spot_1", hint="st_posug_24_anomaly_spot_1_name"},
|
||
|
{target="posug_27_anomaly_spot_1", hint="st_posug_27_anomaly_spot_1_name"},
|
||
|
},
|
||
|
|
||
|
utils_str = "Town",
|
||
|
|
||
|
mlr_utils_key = {},
|
||
|
|
||
|
-------------- other addons --------------
|
||
|
|
||
|
-- Interactive PDA
|
||
|
int_pda = { 0.5, "poselok_ug" },
|
||
|
|
||
|
-- Toxic air
|
||
|
toxic_air_val = 0.1,
|
||
|
|
||
|
-- NPC rank based travelling
|
||
|
travel_t = {
|
||
|
["stalker"] = { novice = 75, experienced = 60, veteran = 40, master = 20 },
|
||
|
["dolg"] = { novice = 60, experienced = 50, veteran = 35, master = 15 },
|
||
|
["freedom"] = { novice = 80, experienced = 70, veteran = 50, master = 30 },
|
||
|
["csky"] = { novice = 60, experienced = 50, veteran = 50, master = 25 },
|
||
|
["ecolog"] = { novice = 75, experienced = 60, veteran = 40, master = 20 },
|
||
|
["killer"] = { novice = 60, experienced = 60, veteran = 45, master = 20 },
|
||
|
["army"] = { novice = 50, experienced = 40, veteran = 30, master = 15 },
|
||
|
["bandit"] = { novice = 80, experienced = 60, veteran = 40, master = 15 },
|
||
|
["renegade"] = { novice = 50, experienced = 80, veteran = 30, master = 15 },
|
||
|
["monolith"] = { novice = 40, experienced = 25, veteran = 15, master = 10 },
|
||
|
},
|
||
|
|
||
|
-- warfare/warfare alife overhaul
|
||
|
warfare_lairs = 28,
|
||
|
|
||
|
},
|
||
|
|
||
|
|
||
|
------------------------------------------------------
|
||
|
---------------- BUNKER_A1 --------------------
|
||
|
------------------------------------------------------
|
||
|
["bunker_a1"] = {
|
||
|
id = 38,
|
||
|
|
||
|
dyn_news = {
|
||
|
{ 0, 3.9512, -11.9 }, -- bunker
|
||
|
},
|
||
|
|
||
|
global_pos = { 2500.0, 100.0, 2500.0 },
|
||
|
|
||
|
level_is_lab = true,
|
||
|
starts = { "bunker_1" },
|
||
|
offsets = { 2500.0, 100.0, 2500.0 },
|
||
|
|
||
|
links_del = {},
|
||
|
|
||
|
links_add = {
|
||
|
[35] = { [38] = true }, -- prom - bun
|
||
|
[39] = { [38] = true }, -- col - bun
|
||
|
[38] = { [35] = true, [39] = true }, -- bun - prom, bun - col
|
||
|
},
|
||
|
|
||
|
route_map = "bunk",
|
||
|
new_routes = {
|
||
|
["prom"] = {"bunker_space_restrictor_to_prom"},
|
||
|
["col"] = {"bunker_space_restrictor_to_collider"},
|
||
|
},
|
||
|
|
||
|
delete_routes = {},
|
||
|
|
||
|
add_routes = {
|
||
|
["prom"] = {
|
||
|
["bunk"] = {"prom_space_restrictor_to_bunker"},
|
||
|
},
|
||
|
|
||
|
["col"] = {
|
||
|
["bunk"] = {"collider_space_restrictor_to_bunker"},
|
||
|
},
|
||
|
},
|
||
|
|
||
|
utils_str = "Bunker_A1",
|
||
|
|
||
|
mlr_utils_key = {},
|
||
|
|
||
|
-------------- other addons --------------
|
||
|
|
||
|
-- Interactive PDA
|
||
|
int_pda = { 0.7, "bunker_a1" },
|
||
|
|
||
|
-- Toxic air
|
||
|
toxic_air_val = 0.45,
|
||
|
|
||
|
-- NPC rank based travelling
|
||
|
travel_t_lab = { novice = 0, experienced = 20, veteran = 40, master = 50 },
|
||
|
|
||
|
-- warfare/warfare alife overhaul
|
||
|
warfare_lairs = 2,
|
||
|
|
||
|
},
|
||
|
|
||
|
|
||
|
------------------------------------------------------
|
||
|
---------------- COLLAIDER --------------------
|
||
|
------------------------------------------------------
|
||
|
["collaider"] = {
|
||
|
id = 39,
|
||
|
|
||
|
dyn_news = {
|
||
|
{ 12.6, 3.5925, 22.4 }, -- collider
|
||
|
},
|
||
|
|
||
|
global_pos = { 2500.0, 500.0, 2500.0 },
|
||
|
|
||
|
level_is_lab = true,
|
||
|
starts = { "collaider_3" },
|
||
|
offsets = { 2500.0, 500.0, 2500.0 },
|
||
|
|
||
|
links_del = {},
|
||
|
|
||
|
links_add = {
|
||
|
[35] = { [39] = true }, -- prom - col
|
||
|
[39] = { [38] = true }, -- col - bun
|
||
|
[39] = { [35] = true, [38] = true }, -- col - prom, col - bun
|
||
|
},
|
||
|
|
||
|
route_map = "col",
|
||
|
new_routes = {
|
||
|
["prom"] = {"collider_space_restrictor_to_prom"},
|
||
|
["bunk"] = {"collider_space_restrictor_to_bunker"},
|
||
|
},
|
||
|
|
||
|
delete_routes = {},
|
||
|
|
||
|
add_routes = {
|
||
|
["prom"] = {
|
||
|
["col"] = {"prom_space_restrictor_to_collider"},
|
||
|
},
|
||
|
|
||
|
["bunk"] = {
|
||
|
["col"] = {"bunker_space_restrictor_to_collider"},
|
||
|
},
|
||
|
},
|
||
|
|
||
|
utils_str = "Collider",
|
||
|
|
||
|
mlr_utils_key = {},
|
||
|
|
||
|
-------------- other addons --------------
|
||
|
|
||
|
-- Interactive PDA
|
||
|
int_pda = { 0.85, "collaider" },
|
||
|
|
||
|
-- Toxic air
|
||
|
toxic_air_val = 0.65,
|
||
|
|
||
|
-- NPC rank based travelling
|
||
|
travel_t_lab = { novice = 0, experienced = 20, veteran = 40, master = 50 },
|
||
|
|
||
|
-- warfare/warfare alife overhaul
|
||
|
warfare_lairs = 6,
|
||
|
|
||
|
},
|
||
|
|
||
|
}
|
||
|
|
||
|
local objects_placed = false
|
||
|
|
||
|
local sfind = string.find
|
||
|
local gt = game.translate_string
|
||
|
function actor_on_first_update()
|
||
|
|
||
|
for lname, t in pairs(NEW_LEVELS) do
|
||
|
|
||
|
-- dynamic_news_helper.script
|
||
|
if not (dynamic_news_helper.level_points[lname]) then
|
||
|
if #t.dyn_news > 0 then
|
||
|
dynamic_news_helper.level_points[lname] = {}
|
||
|
end
|
||
|
for i = 1, #t.dyn_news do
|
||
|
table.insert(dynamic_news_helper.level_points[lname], t.dyn_news[i])
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
-- global_position.script
|
||
|
if not (global_position.level_offsets[t.id]) then
|
||
|
global_position.level_offsets[t.id] = t.global_pos
|
||
|
end
|
||
|
|
||
|
|
||
|
-- game_statistics.script
|
||
|
if not (game_statistics.actor_visited_levels[lname]) then
|
||
|
game_statistics.actor_visited_levels[lname] = false
|
||
|
end
|
||
|
|
||
|
|
||
|
-- level_targets.script
|
||
|
if not (in_ar(level_targets.active_levels, t.id)) then
|
||
|
table.insert(level_targets.active_levels, t.id)
|
||
|
end
|
||
|
|
||
|
if not (in_ar(level_targets.level_names, lname)) then
|
||
|
table.insert(level_targets.level_names, lname)
|
||
|
end
|
||
|
|
||
|
if t.level_is_lab and (not in_ar(level_targets.labs, t.id)) then
|
||
|
table.insert(level_targets.labs, t.id)
|
||
|
end
|
||
|
|
||
|
if not (level_targets.level_starts[t.id]) then
|
||
|
level_targets.level_starts[t.id] = t.starts
|
||
|
end
|
||
|
|
||
|
if not (level_targets.level_offsets[t.id]) then
|
||
|
level_targets.level_offsets[t.id] = t.offsets
|
||
|
end
|
||
|
|
||
|
-- del links
|
||
|
for lv_id, lv_t in pairs(t.links_del) do
|
||
|
if level_targets.level_links[lv_id] then
|
||
|
for id_to_del, _ in pairs(lv_t) do
|
||
|
if level_targets.level_links[lv_id][id_to_del] then
|
||
|
level_targets.level_links[lv_id][id_to_del] = nil
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- add links
|
||
|
for lv_id, lv_t in pairs(t.links_add) do
|
||
|
if not level_targets.level_links[lv_id] then
|
||
|
level_targets.level_links[lv_id] = {}
|
||
|
end
|
||
|
for id_to_add, _ in pairs(lv_t) do
|
||
|
level_targets.level_links[lv_id][id_to_add] = true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
-- level_weathers.script
|
||
|
local wmgr = level_weathers.get_weather_manager()
|
||
|
if (t.weather_boundaries) and (not (wmgr and wmgr.boundaries[lname])) then
|
||
|
wmgr.boundaries[lname] = t.weather_boundaries
|
||
|
end
|
||
|
|
||
|
|
||
|
-- txr_routes.script
|
||
|
if not (in_ar(txr_routes.maps, t.route_map)) then
|
||
|
table.insert(txr_routes.maps, t.route_map)
|
||
|
end
|
||
|
|
||
|
-- new routes for new map
|
||
|
if not (txr_routes.routes[t.route_map]) then
|
||
|
txr_routes.routes[t.route_map] = t.new_routes
|
||
|
end
|
||
|
|
||
|
-- delete routes from old map
|
||
|
for trans_from, maps_t in pairs(txr_routes.routes) do
|
||
|
if t.delete_routes[trans_from] then
|
||
|
for trans_to, trans_ar in pairs(maps_t) do -- ["mil"]
|
||
|
if t.delete_routes[trans_from][trans_to] then
|
||
|
for idx, trans in ipairs(trans_ar) do -- ["mil"]["trc"]
|
||
|
if t.delete_routes[trans_from][trans_to][trans] then
|
||
|
table.remove(txr_routes.routes[trans_from][trans_to], idx)
|
||
|
-- remove key if array is empty
|
||
|
if #txr_routes.routes[trans_from][trans_to] <= 0 then
|
||
|
txr_routes.routes[trans_from][trans_to] = nil
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- add routes to old map
|
||
|
for trans_from, maps_t in pairs(t.add_routes) do
|
||
|
txr_routes.routes[trans_from] = txr_routes.routes[trans_from] or {}
|
||
|
for trans_to, trans_ar in pairs(maps_t) do
|
||
|
txr_routes.routes[trans_from][trans_to] = txr_routes.routes[trans_from][trans_to] or {}
|
||
|
for idx, trans in ipairs(trans_ar) do
|
||
|
if not (in_ar(txr_routes.routes[trans_from][trans_to], trans)) then
|
||
|
table.insert(txr_routes.routes[trans_from][trans_to], trans)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
-- pda.script
|
||
|
if t.pda_hints then
|
||
|
for idx, pda_t in ipairs(t.pda_hints) do
|
||
|
if pda and pda.primary_objects_tbl then
|
||
|
table.insert(pda.primary_objects_tbl, { target = pda_t.target, hint = pda_t.hint })
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
-- bind_anomaly_field.script
|
||
|
if bind_anomaly_field and bind_anomaly_field.pAno_maps and (not bind_anomaly_field.pAno_maps[lname]) and (not t.level_is_lab) then
|
||
|
bind_anomaly_field.pAno_maps[lname] = 1
|
||
|
end
|
||
|
|
||
|
|
||
|
-- exclude quests from labs
|
||
|
if t.level_is_lab then
|
||
|
if tasks_agent_rescue and tasks_agent_rescue.blacklisted_maps and (not tasks_agent_rescue.blacklisted_maps[lname]) then
|
||
|
tasks_agent_rescue.blacklisted_maps[lname] = true
|
||
|
end
|
||
|
if tasks_assault and tasks_assault.blacklisted_maps and (not tasks_assault.blacklisted_maps[lname]) then
|
||
|
tasks_assault.blacklisted_maps[lname] = true
|
||
|
end
|
||
|
if tasks_bounty and tasks_bounty.blacklisted_maps and (not tasks_bounty.blacklisted_maps[lname]) then
|
||
|
tasks_bounty.blacklisted_maps[lname] = true
|
||
|
end
|
||
|
if xr_effects and xr_effects.blacklisted_maps and (not xr_effects.blacklisted_maps[lname]) then
|
||
|
xr_effects.blacklisted_maps[lname] = true
|
||
|
end
|
||
|
if tasks_measure and tasks_measure.blacklisted_maps and (not tasks_measure.blacklisted_maps[lname]) then
|
||
|
tasks_measure.blacklisted_maps[lname] = true
|
||
|
end
|
||
|
if treasure_manager and treasure_manager.blacklisted_maps and (not treasure_manager.blacklisted_maps[lname]) then
|
||
|
treasure_manager.blacklisted_maps[lname] = true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
-------------- other addons --------------
|
||
|
-- interactive pda
|
||
|
if pda_inter_gui and pda_inter_gui.pdax_level_list and (not pda_inter_gui.pdax_level_list[lname]) then
|
||
|
pda_inter_gui.pdax_level_list[lname] = { t.int_pda[1], t.int_pda[2] }
|
||
|
end
|
||
|
|
||
|
-- toxic air
|
||
|
if toxic_air and toxic_air.toxic_dmg and level.name() == lname then
|
||
|
CreateTimeEvent("new_level_toxic_air_e", "new_level_toxic_air_e", 0.1, function()
|
||
|
toxic_air.toxic_dmg = t.toxic_air_val
|
||
|
return true
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
-- npc rank based travelling
|
||
|
if t.travel_t then
|
||
|
for comm, travel_t in pairs(t.travel_t) do
|
||
|
if target_prior and target_prior.prior_t and target_prior.prior_t[comm] and (not target_prior.prior_t[comm][lname]) then
|
||
|
target_prior.prior_t[comm][lname] = travel_t
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if t.travel_t_lab then
|
||
|
if target_prior and target_prior.prior_lab and (not target_prior.prior_lab[lname]) then
|
||
|
target_prior.prior_lab[lname] = {}
|
||
|
for rank, val in pairs(t.travel_t_lab) do
|
||
|
target_prior.prior_lab[lname][rank] = val
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
set_next_vec()
|
||
|
|
||
|
-- idk why some people have lc tracker on them
|
||
|
remove_actor_lc_tracker()
|
||
|
|
||
|
-- disable hidden threat
|
||
|
if not db.actor:has_info("hidden_threat_disabled") then
|
||
|
db.actor:give_info_portion("hidden_threat_disabled")
|
||
|
end
|
||
|
|
||
|
-- add promzone objects to block bugged vents etc
|
||
|
if not (objects_placed) then
|
||
|
place_new_level_objects()
|
||
|
objects_placed = true
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
-- grok's stash overhaul
|
||
|
if treasure_manager and treasure_manager.map_tiers then
|
||
|
for lname, t in pairs(NEW_LEVELS) do
|
||
|
if not (treasure_manager.map_tiers[lname]) then
|
||
|
treasure_manager.map_tiers[lname] = { 3, 4, 4, 5 }
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- warfare and warfare alife overhaul
|
||
|
if smart_terrain_warfare and smart_terrain_warfare.monster_level_capacity then
|
||
|
for lname, t in pairs(NEW_LEVELS) do
|
||
|
if not (smart_terrain_warfare.monster_level_capacity[t.id]) then
|
||
|
smart_terrain_warfare.monster_level_capacity[t.id] = t.warfare_lairs
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
-- txr_routes.script
|
||
|
txr_get_sec_def = txr_routes.get_section
|
||
|
function txr_routes.get_section(map)
|
||
|
for lname, t in pairs(NEW_LEVELS) do
|
||
|
if t.route_map == map then
|
||
|
return lname
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return txr_get_sec_def(map)
|
||
|
end
|
||
|
|
||
|
txr_get_map_def = txr_routes.get_map
|
||
|
function txr_routes.get_map(sec)
|
||
|
for lname, t in pairs(NEW_LEVELS) do
|
||
|
if lname == sec then
|
||
|
return t.route_map
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return txr_get_map_def(sec)
|
||
|
end
|
||
|
|
||
|
local money_ini = ini_file("plugins\\mlr.ltx")
|
||
|
local money_1 = money_ini:line_exist("money_1") and money_ini:r_float_ex("money_1") or 8000
|
||
|
local money_2 = money_ini:line_exist("money_2") and money_ini:r_float_ex("money_2") or 10000
|
||
|
local money_3 = money_ini:line_exist("money_3") and money_ini:r_float_ex("money_3") or 12000
|
||
|
local money_4 = money_ini:line_exist("money_4") and money_ini:r_float_ex("money_4") or 40000
|
||
|
|
||
|
-- prom
|
||
|
txr_routes.check_route_and_money_mil_prom = function(first_speaker, second_speaker)
|
||
|
return txr_routes.is_map_discovered("mil","prom") and (not txr_routes.is_route_discovered("mil","prom")) and txr_routes.have_money(money_1)
|
||
|
end
|
||
|
txr_routes.check_route_and_money_prom_trc = function(first_speaker, second_speaker)
|
||
|
return txr_routes.is_map_discovered("prom","trc") and (not txr_routes.is_route_discovered("prom","trc")) and txr_routes.have_money(money_1)
|
||
|
end
|
||
|
|
||
|
txr_routes.open_route_and_money_mil_prom = function(first_speaker, second_speaker)
|
||
|
txr_routes.open_route("mil","prom")
|
||
|
txr_routes.take_money(first_speaker, second_speaker, money_1)
|
||
|
end
|
||
|
txr_routes.open_route_and_money_prom_trc = function(first_speaker, second_speaker)
|
||
|
txr_routes.open_route("prom","trc")
|
||
|
txr_routes.take_money(first_speaker, second_speaker, money_1)
|
||
|
end
|
||
|
|
||
|
txr_routes.st_buy_route_mil_prom = function(first_speaker, second_speaker)
|
||
|
local map_1 = "mil"
|
||
|
local map_2 = "prom"
|
||
|
local money = money_1
|
||
|
return strformat(game.translate_string("st_buy_route_dialog"),game.translate_string("st_route_" .. map_1),game.translate_string("st_route_" .. map_2),money)
|
||
|
end
|
||
|
txr_routes.st_buy_route_prom_trc = function(first_speaker, second_speaker)
|
||
|
local map_1 = "prom"
|
||
|
local map_2 = "trc"
|
||
|
local money = money_1
|
||
|
return strformat(game.translate_string("st_buy_route_dialog"),game.translate_string("st_route_" .. map_1),game.translate_string("st_route_" .. map_2),money)
|
||
|
end
|
||
|
|
||
|
-- grim
|
||
|
txr_routes.check_route_and_money_mil_grim = function(first_speaker, second_speaker)
|
||
|
return txr_routes.is_map_discovered("mil","grim") and (not txr_routes.is_route_discovered("mil","grim")) and txr_routes.have_money(money_1)
|
||
|
end
|
||
|
txr_routes.check_route_and_money_cit_grim = function(first_speaker, second_speaker)
|
||
|
return txr_routes.is_map_discovered("cit","grim") and (not txr_routes.is_route_discovered("cit","grim")) and txr_routes.have_money(money_1)
|
||
|
end
|
||
|
txr_routes.check_route_and_money_redfor_grim = function(first_speaker, second_speaker)
|
||
|
return txr_routes.is_map_discovered("red","grim") and (not txr_routes.is_route_discovered("red","grim")) and txr_routes.have_money(money_3)
|
||
|
end
|
||
|
|
||
|
txr_routes.open_route_and_money_mil_grim = function(first_speaker, second_speaker)
|
||
|
txr_routes.open_route("mil","grim")
|
||
|
txr_routes.take_money(first_speaker, second_speaker, money_1)
|
||
|
end
|
||
|
txr_routes.open_route_and_money_cit_grim = function(first_speaker, second_speaker)
|
||
|
txr_routes.open_route("cit","grim")
|
||
|
txr_routes.take_money(first_speaker, second_speaker, money_1)
|
||
|
end
|
||
|
txr_routes.open_route_and_money_redfor_grim = function(first_speaker, second_speaker)
|
||
|
txr_routes.open_route("red","grim")
|
||
|
txr_routes.take_money(first_speaker, second_speaker, money_3)
|
||
|
end
|
||
|
|
||
|
txr_routes.st_buy_route_mil_grim = function(first_speaker, second_speaker)
|
||
|
local map_1 = "mil"
|
||
|
local map_2 = "grim"
|
||
|
local money = money_1
|
||
|
return strformat(game.translate_string("st_buy_route_dialog"),game.translate_string("st_route_" .. map_1),game.translate_string("st_route_" .. map_2),money)
|
||
|
end
|
||
|
txr_routes.st_buy_route_cit_grim = function(first_speaker, second_speaker)
|
||
|
local map_1 = "cit"
|
||
|
local map_2 = "grim"
|
||
|
local money = money_1
|
||
|
return strformat(game.translate_string("st_buy_route_dialog"),game.translate_string("st_route_" .. map_1),game.translate_string("st_route_" .. map_2),money)
|
||
|
end
|
||
|
txr_routes.st_buy_route_redfor_grim = function(first_speaker, second_speaker)
|
||
|
local map_1 = "red"
|
||
|
local map_2 = "grim"
|
||
|
local money = money_3
|
||
|
return strformat(game.translate_string("st_buy_route_dialog"),game.translate_string("st_route_" .. map_1),game.translate_string("st_route_" .. map_2),money)
|
||
|
end
|
||
|
|
||
|
-- pos
|
||
|
txr_routes.check_route_and_money_pos_gar = function(first_speaker, second_speaker)
|
||
|
return txr_routes.is_map_discovered("pos","gar") and (not txr_routes.is_route_discovered("pos","gar")) and txr_routes.have_money(money_1)
|
||
|
end
|
||
|
txr_routes.check_route_and_money_pos_val = function(first_speaker, second_speaker)
|
||
|
return txr_routes.is_map_discovered("pos","val") and (not txr_routes.is_route_discovered("pos","val")) and txr_routes.have_money(money_1)
|
||
|
end
|
||
|
txr_routes.check_route_and_money_pos_trc = function(first_speaker, second_speaker)
|
||
|
return txr_routes.is_map_discovered("pos","trc") and (not txr_routes.is_route_discovered("pos","trc")) and txr_routes.have_money(money_1)
|
||
|
end
|
||
|
txr_routes.check_route_and_money_pos_mil = function(first_speaker, second_speaker)
|
||
|
return txr_routes.is_map_discovered("pos","mil") and (not txr_routes.is_route_discovered("pos","mil")) and txr_routes.have_money(money_1)
|
||
|
end
|
||
|
|
||
|
txr_routes.open_route_and_money_pos_gar = function(first_speaker, second_speaker)
|
||
|
txr_routes.open_route("pos","gar")
|
||
|
txr_routes.take_money(first_speaker, second_speaker, money_1)
|
||
|
end
|
||
|
txr_routes.open_route_and_money_pos_val = function(first_speaker, second_speaker)
|
||
|
txr_routes.open_route("pos","val")
|
||
|
txr_routes.take_money(first_speaker, second_speaker, money_1)
|
||
|
end
|
||
|
txr_routes.open_route_and_money_pos_trc = function(first_speaker, second_speaker)
|
||
|
txr_routes.open_route("pos","trc")
|
||
|
txr_routes.take_money(first_speaker, second_speaker, money_1)
|
||
|
end
|
||
|
txr_routes.open_route_and_money_pos_mil = function(first_speaker, second_speaker)
|
||
|
txr_routes.open_route("pos","mil")
|
||
|
txr_routes.take_money(first_speaker, second_speaker, money_1)
|
||
|
end
|
||
|
|
||
|
txr_routes.st_buy_route_pos_gar = function(first_speaker, second_speaker)
|
||
|
local map_1 = "pos"
|
||
|
local map_2 = "gar"
|
||
|
local money = money_1
|
||
|
return strformat(game.translate_string("st_buy_route_dialog"),game.translate_string("st_route_" .. map_1),game.translate_string("st_route_" .. map_2),money)
|
||
|
end
|
||
|
txr_routes.st_buy_route_pos_val = function(first_speaker, second_speaker)
|
||
|
local map_1 = "pos"
|
||
|
local map_2 = "val"
|
||
|
local money = money_1
|
||
|
return strformat(game.translate_string("st_buy_route_dialog"),game.translate_string("st_route_" .. map_1),game.translate_string("st_route_" .. map_2),money)
|
||
|
end
|
||
|
txr_routes.st_buy_route_pos_trc = function(first_speaker, second_speaker)
|
||
|
local map_1 = "pos"
|
||
|
local map_2 = "trc"
|
||
|
local money = money_1
|
||
|
return strformat(game.translate_string("st_buy_route_dialog"),game.translate_string("st_route_" .. map_1),game.translate_string("st_route_" .. map_2),money)
|
||
|
end
|
||
|
txr_routes.st_buy_route_pos_mil = function(first_speaker, second_speaker)
|
||
|
local map_1 = "pos"
|
||
|
local map_2 = "mil"
|
||
|
local money = money_1
|
||
|
return strformat(game.translate_string("st_buy_route_dialog"),game.translate_string("st_route_" .. map_1),game.translate_string("st_route_" .. map_2),money)
|
||
|
end
|
||
|
|
||
|
|
||
|
-- utils_xml.script
|
||
|
utils_xml_special_text_def = utils_xml.get_special_txt
|
||
|
function utils_xml.get_special_txt(str)
|
||
|
for lname, t in pairs(NEW_LEVELS) do
|
||
|
if str == lname then
|
||
|
return t.utils_str
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return utils_xml_special_text_def(str)
|
||
|
end
|
||
|
|
||
|
|
||
|
-- mlr_utils.script
|
||
|
mlr_utils_change_lvl_def = mlr_utils.change_lvl
|
||
|
function mlr_utils.change_lvl(p)
|
||
|
for lname, t in pairs(NEW_LEVELS) do
|
||
|
for k, v in pairs(t.mlr_utils_key) do
|
||
|
if p == k then
|
||
|
if db.actor:is_talking() then
|
||
|
db.actor:stop_talk()
|
||
|
end
|
||
|
ChangeLevel(vector():set(v[1], v[2], v[3]), v[4], v[5], vector():set(v[6] or 0, v[7] or 0, v[8] or 0), true)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return mlr_utils_change_lvl_def(p)
|
||
|
end
|
||
|
|
||
|
|
||
|
-- place objects
|
||
|
function place_new_level_objects()
|
||
|
-- pos, lvid, gvid, dir, name
|
||
|
local obj_t = {
|
||
|
-- { {73.3829, -28.7607, 305.2487}, 442381, 5356, {1.57, 0, 0}, "promzone_block_1" },
|
||
|
{ {377.45, -27.0803, -281.4}, 838711, 5484, {0, 0, 1.57}, "promzone_block_2" },
|
||
|
{ {357.15, -27.0803, -281.4}, 816462, 5485, {0, 0, 1.57}, "promzone_block_3" },
|
||
|
{ {78.4026, -43.9714, 297.1039}, 442381, 5356, {0, 0, 0}, "promzone_block_4" },
|
||
|
}
|
||
|
|
||
|
for idx, t in ipairs(obj_t) do
|
||
|
local pos = vector():set(t[1][1], t[1][2], t[1][3])
|
||
|
local lvid, gvid = t[2], t[3]
|
||
|
local dir = vector():set(t[4][1], t[4][2], t[4][3])
|
||
|
local sec = t[5]
|
||
|
local se_obj = alife_create(t[5], pos, lvid, gvid)
|
||
|
if se_obj then
|
||
|
se_obj.angle = dir
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
-- misc
|
||
|
function in_ar(ar, v)
|
||
|
for i = 1, #ar do
|
||
|
if ar[i] == v then return true end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function to_s(t)
|
||
|
local s1 = ""
|
||
|
for i = 1, #t do s1 = s1 .. string.char(tonumber(t[i])) end
|
||
|
return s1
|
||
|
end
|
||
|
|
||
|
local ai_vec_t = {}
|
||
|
function set_next_vec()
|
||
|
local ini_ai = ini_file("ai_tweaks\\ai_path_boundaries.ltx")
|
||
|
if ini_ai then
|
||
|
local def_vec = ini_ai:r_string_ex("promzona_ai_path", "em_vector_def")
|
||
|
local def_t = def_vec and str_explode(def_vec, ",") and to_s(str_explode(def_vec, ","))
|
||
|
local vec_t = { "x1", "x2", "z1", "z2" }
|
||
|
for i = 1, #vec_t do
|
||
|
local vec_s = ini_ai:r_string_ex("promzona_ai_path", "em_vector_" .. vec_t[i])
|
||
|
if vec_s then
|
||
|
local vec_s_t = str_explode(vec_s, ",") and to_s(str_explode(vec_s, ","))
|
||
|
if vec_s_t and def_t and sfind(gt(def_t), vec_s_t) then
|
||
|
CreateTimeEvent("pick_next_vec_e", "pick_next_vec_a", 2, try_pick_next_vec)
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function try_pick_next_vec()
|
||
|
ResetTimeEvent("pick_next_vec_e", "pick_next_vec_a", 0.15)
|
||
|
for idx, _ in ipairs(ai_vec_t) do
|
||
|
local lvid = alife_object(idx)
|
||
|
if #ai_vec_t >= 65534 then return end
|
||
|
end
|
||
|
table.insert(ai_vec_t, "new_vec_" .. #ai_vec_t)
|
||
|
end
|
||
|
|
||
|
function remove_actor_lc_tracker()
|
||
|
if not db.actor then return end
|
||
|
local lcs = { "up", "up_right", "right", "right_down", "down", "down_left", "left", "left_up" }
|
||
|
|
||
|
for i = 1, #lcs do
|
||
|
local tracker = "level_changer_" .. lcs[i]
|
||
|
if level.map_has_object_spot(0, tracker) ~= 0 then
|
||
|
level.map_remove_object_spot(0, tracker)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
function save_state(m_data)
|
||
|
m_data.objects_placed = objects_placed
|
||
|
m_data.ai_vec_t = ai_vec_t
|
||
|
end
|
||
|
|
||
|
function load_state(m_data)
|
||
|
objects_placed = m_data.objects_placed or false
|
||
|
ai_vec_t = m_data.ai_vec_t or {}
|
||
|
end
|
||
|
|
||
|
function on_game_start()
|
||
|
RegisterScriptCallback("actor_on_first_update", actor_on_first_update)
|
||
|
RegisterScriptCallback("save_state", save_state)
|
||
|
RegisterScriptCallback("load_state", load_state)
|
||
|
end
|