141 lines
4.6 KiB
Plaintext
141 lines
4.6 KiB
Plaintext
|
---------------------------------------------
|
||
|
-- PDA Backpack Travel (CoC 1.4.22 / 1.5 R6)
|
||
|
-- script version 12
|
||
|
-- author: sLoPpYdOtBiGhOlE
|
||
|
---------------------------------------------
|
||
|
|
||
|
-- demonized edit, made everything global
|
||
|
bp_travel = nil
|
||
|
bp_combat = nil
|
||
|
bp_damage = nil
|
||
|
bp_notime = nil
|
||
|
bp_storm = nil
|
||
|
bp_weight = nil
|
||
|
|
||
|
function bbp_extra_weight()
|
||
|
local w = 0
|
||
|
|
||
|
local function itr(npc,itm)
|
||
|
if (npc:is_on_belt(itm)) then
|
||
|
w = w + (itm and ((ini_sys:r_float_ex(itm:section(),"additional_inventory_weight") or 0) * itm:condition()) or 0)
|
||
|
end
|
||
|
end
|
||
|
db.actor:iterate_inventory(itr,db.actor)
|
||
|
|
||
|
local bkpk = db.actor:item_in_slot(13)
|
||
|
w = w + (bkpk and ini_sys:r_float_ex(bkpk:section(),"additional_inventory_weight") or 0)
|
||
|
|
||
|
return w
|
||
|
end
|
||
|
|
||
|
function map_spot_menu_add_property(property_ui,id,level_name)
|
||
|
local se_obj = alife_object(id)
|
||
|
if not (se_obj) then
|
||
|
return
|
||
|
end
|
||
|
if (bp_travel) and (string.find(se_obj:name(), "inv_actor_backpack") or string.find(se_obj:name(), "inv_backpack")) then
|
||
|
property_ui:AddItem(game.translate_string("bp_to"))
|
||
|
if (level.object_by_id(id)) then
|
||
|
property_ui:AddItem(game.translate_string("bp_open"))
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function map_spot_menu_property_clicked(property_ui,id,level_name,prop)
|
||
|
local se_obj = alife_object(id)
|
||
|
if not (se_obj) then
|
||
|
return
|
||
|
end
|
||
|
if (prop == game.translate_string("bp_to")) then
|
||
|
if not (bp_combat) then
|
||
|
if not (is_empty(xr_combat_ignore.fighting_with_actor_npcs)) then
|
||
|
hide_hud_pda()
|
||
|
actor_menu.set_msg(1, game.translate_string("st_travel_event"),4)
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
if not (bp_weight) then
|
||
|
local suit = db.actor:item_in_slot(7)
|
||
|
local diff = db.actor:get_total_weight() - db.actor:get_actor_max_walk_weight() - (suit and suit:get_additional_max_weight() or 0) - bbp_extra_weight()
|
||
|
if diff > 0 then
|
||
|
hide_hud_pda()
|
||
|
actor_menu.set_msg(1, game.translate_string("st_travel_overloaded"),4)
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
if not (bp_damage) then
|
||
|
local bleeding = db.actor.bleeding > 0
|
||
|
local radiation = db.actor.radiation > 0
|
||
|
if arszi_radiation and (arszi_radiation.settings.fastTravelWithRads == 1 and db.actor.radiation <= arszi_radiation.settings.RADIATION_THRESHOLD or arszi_radiation.settings.fastTravelWithRads == 2) then
|
||
|
if (bleeding) then
|
||
|
actor_menu.set_msg(1, game.translate_string("st_sleep_bleeding"),4)
|
||
|
hide_hud_pda()
|
||
|
return
|
||
|
end
|
||
|
else
|
||
|
if (bleeding or radiation) then
|
||
|
if (bleeding and radiation) then
|
||
|
actor_menu.set_msg(1, game.translate_string("st_sleep_bleeding_irradiated"),5)
|
||
|
elseif (bleeding) then
|
||
|
actor_menu.set_msg(1, game.translate_string("st_sleep_bleeding"),4)
|
||
|
elseif (radiation) then
|
||
|
actor_menu.set_msg(1, game.translate_string("st_sleep_irradiated"),4)
|
||
|
end
|
||
|
hide_hud_pda()
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
if not (bp_storm) then
|
||
|
if (xr_conditions.surge_started() or psi_storm_manager.is_started()) then
|
||
|
actor_menu.set_msg(1, game.translate_string("st_travel_event"),4)
|
||
|
hide_hud_pda()
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
if not (bp_notime) then
|
||
|
local dist = db.actor:position():distance_to(se_obj.position)
|
||
|
level.change_game_time(0,math.floor(dist/1000)+math.random(0,2),math.random(1,59))
|
||
|
surge_manager.get_surge_manager().time_forwarded = true
|
||
|
psi_storm_manager.get_psi_storm_manager().time_forwarded = true
|
||
|
level_weathers.get_weather_manager():forced_weather_change()
|
||
|
end
|
||
|
|
||
|
if (level_name == level.name()) then
|
||
|
db.actor:set_actor_position(se_obj.position)
|
||
|
hide_hud_pda()
|
||
|
else
|
||
|
ChangeLevel(se_obj.position,se_obj.m_level_vertex_id,se_obj.m_game_vertex_id,VEC_ZERO, true)
|
||
|
end
|
||
|
|
||
|
-- edit demonized, returns true and params on success
|
||
|
return true, {
|
||
|
se_obj = se_obj,
|
||
|
dist = db.actor:position():distance_to(se_obj.position),
|
||
|
}
|
||
|
-- edit demonized end
|
||
|
|
||
|
elseif (prop == game.translate_string("bp_open")) then
|
||
|
local b = level.object_by_id(id)
|
||
|
if (b) then
|
||
|
hide_hud_inventory()
|
||
|
b:use(db.actor)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function update_settings()
|
||
|
bp_travel = ui_options.get("gameplay/backpack_travel/state")
|
||
|
bp_combat = ui_options.get("gameplay/backpack_travel/on_combat")
|
||
|
bp_damage = ui_options.get("gameplay/backpack_travel/on_damage")
|
||
|
bp_notime = ui_options.get("gameplay/backpack_travel/time")
|
||
|
bp_storm = ui_options.get("gameplay/backpack_travel/on_emission")
|
||
|
bp_weight = ui_options.get("gameplay/backpack_travel/on_overweight")
|
||
|
end
|
||
|
|
||
|
function on_game_start()
|
||
|
RegisterScriptCallback("map_spot_menu_add_property",map_spot_menu_add_property)
|
||
|
RegisterScriptCallback("map_spot_menu_property_clicked",map_spot_menu_property_clicked)
|
||
|
RegisterScriptCallback("on_game_load",update_settings)
|
||
|
RegisterScriptCallback("on_option_change",update_settings)
|
||
|
end
|