Divergent/mods/Duty Expansion/gamedata/scripts/dialogs_duty_girl.script

624 lines
21 KiB
Plaintext

local HI = has_alife_info
local GI = give_info
local DI = disable_info
local GT = game.translate_string
function NI(str)
return not (has_alife_info(str))
end
local saved_dialog
function add_dialog(p_id,id,phrase_id,cond,act)
if not ( saved_dialog ) then
return
end
local phrase = saved_dialog:AddPhrase(phrase_id,tostring(id),tostring(p_id),-10000)
if not ( phrase ) then
return
end
local phrase_script = phrase:GetPhraseScript()
if ( cond ) then
if ( type(cond) == "table" ) then
for key, value in pairs(cond) do
if (utils_data.findfunction(value,_G)) then
phrase_script:AddPrecondition(value)
else
printe("!ERROR dialog_manager | No such function exists '%s'",value)
end
end
else
if (utils_data.findfunction(cond,_G)) then
phrase_script:AddPrecondition(cond)
else
printe("!ERROR dialog_manager | No such function exists '%s'",cond)
end
end
end
if ( act ) then
if ( type(act) == "table" ) then
for key, value in pairs(act) do
if (utils_data.findfunction(value,_G)) then
phrase_script:AddAction(value)
else
printe("!ERROR dialog_manager | No such function exists '%s'",value)
end
end
else
if (utils_data.findfunction(act,_G)) then
phrase_script:AddAction(act)
else
printe("!ERROR dialog_manager | No such function exists '%s'",act)
end
end
end
return phrase_script
end
--[[----------------------------------------------------------------------------------------------------
General
------------------------------------------------------------------------------------------------------]]
function duty_girl_companion_join_dialog_con(a,b,dialog_name,pre_pid,cur_pid)
if (NI("duty_girl_capture_the_brirge_done")) then
return false
end
if (dialogs_axr_companion.is_actor_companion(a,b)) then
return false
end
return true
end
function duty_girl_companion_join_dialog(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_companion_join_0")
add_dialog(0,1,"duty_girl_companion_join_1","dialogs_duty_girl.duty_girl_companion_join_1_con","dialogs_axr_companion.become_actor_companion")
add_dialog(0,2,"duty_girl_companion_join_2","dialogs_duty_girl.duty_girl_companion_join_2_con")
end
function duty_girl_companion_join_1_con(a,b)
return not duty_girl_companion_join_2_con(a,b)
end
function duty_girl_companion_join_2_con(a,b)
local npc = get_story_object("devushka")
if (npc and npc:alive() and dialogs_axr_companion.is_actor_companion(db.actor,npc)) then
return true
end
return false
end
function duty_girl_companion_leave_dialog_con(a,b,dialog_name,pre_pid,cur_pid)
if (dialogs_axr_companion.is_actor_companion(a,b)) then
return true
end
return false
end
function duty_girl_companion_leave_dialog(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_companion_leave_0")
add_dialog(0,1,"duty_girl_companion_leave_1")
add_dialog(1,2,"duty_girl_companion_leave_2")
add_dialog(1,3,"duty_girl_companion_leave_3")
add_dialog(2,4,"duty_girl_companion_leave_4",nil,"dialogs_axr_companion.remove_companions_from_squad")
end
function duty_girl_actor_ask_companion_dialog_con(a,b,dialog_name,pre_pid,cur_pid)
local str = db.actor and character_community(db.actor) or ""
if (str and string.find(str,"dolg")) then
return false
end
return true
end
function duty_girl_actor_ask_companion_dialog(dialog)
end
function duty_girl_first_meet(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_first_meet_0")
add_dialog(0,1,"duty_girl_first_meet_1")
add_dialog(1,2,"duty_girl_first_meet_2")
add_dialog(2,3,"duty_girl_first_meet_3")
add_dialog(3,4,"duty_girl_first_meet_4")
add_dialog(4,5,"duty_girl_first_meet_5",nil,"dialogs_duty_girl.GI_duty_girl_first_meet")
end
--[[----------------------------------------------------------------------------------------------------
Quests
------------------------------------------------------------------------------------------------------]]
--[[----------------------------------------------------------------------------------------------------
duty_girl_hunting_chimera
------------------------------------------------------------------------------------------------------]]
function duty_girl_hunting_chimera_init_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_hunting_chimera_done") or HI("duty_girl_hunting_chimera_fail")) then
return false
end
return HI("duty_girl_first_meet") and NI("duty_girl_hunting_chimera_init")
end
function duty_girl_hunting_chimera_init(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_hunting_chimera_init_0")
add_dialog(0,1,"duty_girl_hunting_chimera_init_1",nil,"dialogs_duty_girl.duty_girl_hunting_chimera")
end
function duty_girl_hunting_chimera_move_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_hunting_chimera_done") or HI("duty_girl_hunting_chimera_fail")) then
return false
end
local npc = dialogs.who_is_npc(a,b)
return HI("duty_girl_hunting_chimera_init") and NI("duty_girl_hunting_chimera_move") and xr_conditions.npc_on_level(db.actor,npc,{"l02_garbage"})
end
function duty_girl_hunting_chimera_move(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_hunting_chimera_move_0")
add_dialog(0,1,"duty_girl_hunting_chimera_move_1",nil,"dialogs_duty_girl.GI_duty_girl_hunting_chimera_move")
end
function duty_girl_hunting_chimera_done_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_hunting_chimera_done") or HI("duty_girl_hunting_chimera_fail")) then
return false
end
return HI("duty_girl_hunting_chimera_dead") and NI("duty_girl_hunting_chimera_reward")
end
function duty_girl_hunting_chimera_done(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_hunting_chimera_done_0")
local action = {
"dialogs_duty_girl.give_money_8000",
"dialogs_duty_girl.GI_duty_girl_hunting_chimera_reward",
}
add_dialog(0,1,"duty_girl_hunting_chimera_done_1",nil,action)
end
--[[----------------------------------------------------------------------------------------------------
duty_girl_monolith_elite
------------------------------------------------------------------------------------------------------]]
function duty_girl_monolith_elite_init_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_monolith_elite_done") or HI("duty_girl_monolith_elite_fail")) then
return false
end
local npc = dialogs.who_is_npc(a,b)
return HI("duty_girl_hunting_chimera_done") and NI("duty_girl_monolith_elite_init") and xr_conditions.npc_on_level(db.actor,npc,{"l05_bar"})
end
function duty_girl_monolith_elite_init(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_monolith_elite_init_0")
add_dialog(0,1,"duty_girl_monolith_elite_init_1",nil,"dialogs_duty_girl.duty_girl_monolith_elite")
end
function duty_girl_monolith_elite_join_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_monolith_elite_done") or HI("duty_girl_monolith_elite_fail")) then
return false
end
local npc = dialogs.who_is_npc(a,b)
return HI("duty_girl_monolith_elite_init") and NI("duty_girl_monolith_elite_join") and xr_conditions.npc_on_level(db.actor,npc,{"l07_military"})
end
function duty_girl_monolith_elite_done_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_monolith_elite_done") or HI("duty_girl_monolith_elite_fail")) then
return false
end
return HI("duty_girl_monolith_elite_dead") and NI("duty_girl_monolith_elite_reward")
end
function duty_girl_monolith_elite_done(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_monolith_elite_done_0")
local action = {
"dialogs_duty_girl.give_money_12000",
"dialogs_duty_girl.GI_duty_girl_monolith_elite_reward",
}
add_dialog(0,1,"duty_girl_monolith_elite_done_1",nil,action)
end
--[[----------------------------------------------------------------------------------------------------
duty_girl_loot_stash
------------------------------------------------------------------------------------------------------]]
function duty_girl_loot_stash_init_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_loot_stash_done")) then
return false
end
local npc = dialogs.who_is_npc(a,b)
return HI("duty_girl_monolith_elite_done") and NI("duty_girl_loot_stash_init") and xr_conditions.npc_on_level(db.actor,npc,{"l05_bar"})
end
function duty_girl_loot_stash_init(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_loot_stash_init_0")
add_dialog(0,1,"duty_girl_loot_stash_init_1",nil,"dialogs_duty_girl.duty_girl_loot_stash")
add_dialog(1,2,"duty_girl_loot_stash_init_2")
end
--[[----------------------------------------------------------------------------------------------------
duty_girl_capture_the_brirge
------------------------------------------------------------------------------------------------------]]
function duty_girl_capture_the_brirge_init_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_capture_the_brirge_done")) then
return false
end
local npc = dialogs.who_is_npc(a,b)
return HI("duty_girl_loot_stash_done") and NI("duty_girl_capture_the_brirge_init") and xr_conditions.npc_on_level(db.actor,npc,{"l05_bar"})
end
function duty_girl_capture_the_brirge_init(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_capture_the_brirge_init_0")
add_dialog(0,1,"duty_girl_capture_the_brirge_init_1",nil,"dialogs_duty_girl.duty_girl_capture_the_brirge")
end
function duty_girl_capture_the_brirge_join_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_capture_the_brirge_done") or HI("duty_girl_capture_the_brirge_fail")) then
return false
end
local npc = dialogs.who_is_npc(a,b)
return HI("duty_girl_capture_the_brirge_init") and NI("duty_girl_capture_the_brirge_join") and xr_conditions.npc_on_level(db.actor,npc,{"l10_red_forest"})
end
function duty_girl_capture_the_brirge_done_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_capture_the_brirge_done") or HI("duty_girl_capture_the_brirge_fail")) then
return false
end
return HI("duty_girl_capture_the_brirge_dead") and NI("duty_girl_capture_the_brirge_reward")
end
function duty_girl_capture_the_brirge_done(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_capture_the_brirge_done_0")
local action = {
"dialogs_duty_girl.give_money_20000",
"dialogs_duty_girl.GI_duty_girl_capture_the_brirge_reward",
}
add_dialog(0,1,"duty_girl_capture_the_brirge_done_1",nil,action)
end
--[[----------------------------------------------------------------------------------------------------
Others
------------------------------------------------------------------------------------------------------]]
function red_duty_outpost_trader_concern_hostile(dialog)
saved_dialog = dialog
add_dialog("",0,"red_duty_outpost_trader_concern_hostile_0")
add_dialog(0,1,"red_duty_outpost_trader_concern_hostile_1")
end
function meet_guid_duty_outpost(dialog)
saved_dialog = dialog
add_dialog("",0,"meet_guid_duty_outpost_list_0")
add_dialog(0,1,"meet_guid_duty_outpost_list_1")
end
function travel_guid_duty_outpost(dialog)
saved_dialog = dialog
local action = {}
add_dialog("",0,"travel_guid_duty_outpost_0")
add_dialog(0,1,"travel_guid_duty_outpost_1")
action = { "dialogs_duty_girl.lost_money_1000","dialogs_mlr.l05_bar_guid" }
add_dialog(1,2,"travel_guid_duty_outpost_2","dialogs_duty_girl.have_money_1000",action)
action = { "dialogs_duty_girl.lost_money_2000","dialogs_mlr.zaton_guid" }
add_dialog(1,3,"travel_guid_duty_outpost_3","dialogs_duty_girl.have_money_2000",action)
action = { "dialogs_duty_girl.lost_money_3000","dialogs_mlr.garbage_guid" }
add_dialog(1,4,"travel_guid_duty_outpost_4","dialogs_duty_girl.have_money_3000",action)
action = { "dialogs_duty_girl.lost_money_4000","dialogs_mlr.yantar_guid" }
add_dialog(1,5,"travel_guid_duty_outpost_5","dialogs_duty_girl.have_money_4000",action)
action = { "dialogs_duty_girl.lost_money_5000","dialogs_mlr.agroprom_guid_military" }
add_dialog(1,6,"travel_guid_duty_outpost_6","dialogs_duty_girl.have_money_5000",action)
action = { "dialogs_duty_girl.lost_money_6000","dialogs_mlr.escape_village_guid" }
add_dialog(1,7,"travel_guid_duty_outpost_7","dialogs_duty_girl.have_money_6000",action)
action = { "dialogs_duty_girl.lost_money_6000","dialogs_mlr.marsh_guid" }
add_dialog(1,8,"travel_guid_duty_outpost_8","dialogs_duty_girl.have_money_6000",action)
add_dialog(1,9,"travel_guid_duty_outpost_9")
end
function travel_guid_duty_outpost_from_others_1(str)
return strformat(game.translate_string("travel_guid_duty_outpost_from_others_1"),str)
end
function travel_guid_duty_outpost_from_others_2(str)
return strformat(game.translate_string("travel_guid_duty_outpost_from_others_2"),str)
end
function travel_guid_duty_outpost_from_others_1000(dialog)
saved_dialog = dialog
local txt, action = "", {}
add_dialog("",0,"travel_guid_duty_outpost_from_others_0")
txt = travel_guid_duty_outpost_from_others_1(1000)
add_dialog(0,1,txt)
txt = travel_guid_duty_outpost_from_others_2(1000)
action = {"dialogs_duty_girl.lost_money_1000","dialogs_duty_girl.change_lvl_to_duty_outpost"}
add_dialog(1,2,txt,"dialogs_duty_girl.have_money_1000",action)
add_dialog(1,3,"travel_guid_duty_outpost_from_others_3")
end
function travel_guid_duty_outpost_from_others_2000(dialog)
saved_dialog = dialog
local txt, action = "", {}
add_dialog("",0,"travel_guid_duty_outpost_from_others_0")
txt = travel_guid_duty_outpost_from_others_1(2000)
add_dialog(0,1,txt)
txt = travel_guid_duty_outpost_from_others_2(2000)
action = {"dialogs_duty_girl.lost_money_2000","dialogs_duty_girl.change_lvl_to_duty_outpost"}
add_dialog(1,2,txt,"dialogs_duty_girl.have_money_2000",action)
add_dialog(1,3,"travel_guid_duty_outpost_from_others_3")
end
function travel_guid_duty_outpost_from_others_3000(dialog)
saved_dialog = dialog
local txt, action = "", {}
add_dialog("",0,"travel_guid_duty_outpost_from_others_0")
txt = travel_guid_duty_outpost_from_others_1(3000)
add_dialog(0,1,txt)
txt = travel_guid_duty_outpost_from_others_2(3000)
action = {"dialogs_duty_girl.lost_money_3000","dialogs_duty_girl.change_lvl_to_duty_outpost"}
add_dialog(1,2,txt,"dialogs_duty_girl.have_money_3000",action)
add_dialog(1,3,"travel_guid_duty_outpost_from_others_3")
end
function travel_guid_duty_outpost_from_others_4000(dialog)
saved_dialog = dialog
local txt, action = "", {}
add_dialog("",0,"travel_guid_duty_outpost_from_others_0")
txt = travel_guid_duty_outpost_from_others_1(4000)
add_dialog(0,1,txt)
txt = travel_guid_duty_outpost_from_others_2(4000)
action = {"dialogs_duty_girl.lost_money_4000","dialogs_duty_girl.change_lvl_to_duty_outpost"}
add_dialog(1,2,txt,"dialogs_duty_girl.have_money_4000",action)
add_dialog(1,3,"travel_guid_duty_outpost_from_others_3")
end
function travel_guid_duty_outpost_from_others_5000(dialog)
saved_dialog = dialog
local txt, action = "", {}
add_dialog("",0,"travel_guid_duty_outpost_from_others_0")
txt = travel_guid_duty_outpost_from_others_1(5000)
add_dialog(0,1,txt)
txt = travel_guid_duty_outpost_from_others_2(5000)
action = {"dialogs_duty_girl.lost_money_5000","dialogs_duty_girl.change_lvl_to_duty_outpost"}
add_dialog(1,2,txt,"dialogs_duty_girl.have_money_5000",action)
add_dialog(1,3,"travel_guid_duty_outpost_from_others_3")
end
function travel_guid_duty_outpost_from_others_6000(dialog)
saved_dialog = dialog
local txt, action = "", {}
add_dialog("",0,"travel_guid_duty_outpost_from_others_0")
txt = travel_guid_duty_outpost_from_others_1(6000)
add_dialog(0,1,txt)
txt = travel_guid_duty_outpost_from_others_2(6000)
action = {"dialogs_duty_girl.lost_money_6000","dialogs_duty_girl.change_lvl_to_duty_outpost"}
add_dialog(1,2,txt,"dialogs_duty_girl.have_money_6000",action)
add_dialog(1,3,"travel_guid_duty_outpost_from_others_3")
end
--[[----------------------------------------------------------------------------------------------------
Task
------------------------------------------------------------------------------------------------------]]
function duty_girl_hunting_chimera()
task_manager.get_task_manager():give_task("duty_girl_hunting_chimera")
end
function duty_girl_monolith_elite()
task_manager.get_task_manager():give_task("duty_girl_monolith_elite")
end
function duty_girl_loot_stash()
task_manager.get_task_manager():give_task("duty_girl_loot_stash")
end
function duty_girl_capture_the_brirge()
task_manager.get_task_manager():give_task("duty_girl_capture_the_brirge")
end
--[[----------------------------------------------------------------------------------------------------
Info
------------------------------------------------------------------------------------------------------]]
function GI_duty_girl_first_meet(a,b)
return GI("duty_girl_first_meet")
end
function GI_duty_girl_hunting_chimera_move(a,b)
return GI("duty_girl_hunting_chimera_move")
end
function GI_duty_girl_hunting_chimera_reward(a,b)
return GI("duty_girl_hunting_chimera_reward")
end
function GI_duty_girl_monolith_elite_join(a,b)
return GI("duty_girl_monolith_elite_join")
end
function GI_duty_girl_monolith_elite_reward(a,b)
return GI("duty_girl_monolith_elite_reward")
end
function GI_duty_girl_capture_the_brirge_reward(a,b)
return GI("duty_girl_capture_the_brirge_reward")
end
--[[----------------------------------------------------------------------------------------------------
Phrases
------------------------------------------------------------------------------------------------------]]
function get_phrase_monolith_elite_join_0(a,b)
return NI("duty_girl_monolith_elite_supply") and
GT("duty_girl_monolith_elite_join_0") or
GT("duty_girl_monolith_elite_join_2")
end
function get_phrase_monolith_elite_join_1(a,b)
return NI("duty_girl_monolith_elite_supply") and
GT("duty_girl_monolith_elite_join_1") or " "
end
function action_monolith_elite_join(a,b)
if NI("duty_girl_monolith_elite_supply") then
give_item_monolith_elite_supply(a,b)
else
GI("duty_girl_monolith_elite_join")
dialogs.break_dialog(a,b)
end
end
function get_phrase_capture_the_brirge_join_0(a,b)
return NI("duty_girl_capture_the_brirge_supply") and
GT("duty_girl_capture_the_brirge_join_0") or
GT("duty_girl_capture_the_brirge_join_2")
end
function get_phrase_capture_the_brirge_join_1(a,b)
return NI("duty_girl_capture_the_brirge_supply") and
GT("duty_girl_capture_the_brirge_join_1") or " "
end
function action_capture_the_brirge_join(a,b)
if NI("duty_girl_capture_the_brirge_supply") then
give_item_capture_the_brirge_join(a,b)
else
GI("duty_girl_capture_the_brirge_join")
dialogs.break_dialog(a,b)
end
end
--[[----------------------------------------------------------------------------------------------------
Utilites
------------------------------------------------------------------------------------------------------]]
function give_money_8000(a,b)
return dialogs.relocate_money_to_actor(a,b,8000)
end
function give_money_12000(a,b)
return dialogs.relocate_money_to_actor(a,b,12000)
end
function give_money_20000(a,b)
return dialogs.relocate_money_to_actor(a,b,20000)
end
function have_money_1000(a,b)
return mlr_utils.have_money(1000)
end
function have_money_2000(a,b)
return mlr_utils.have_money(2000)
end
function have_money_3000(a,b)
return mlr_utils.have_money(3000)
end
function have_money_4000(a,b)
return mlr_utils.have_money(4000)
end
function have_money_5000(a,b)
return mlr_utils.have_money(5000)
end
function have_money_6000(a,b)
return mlr_utils.have_money(6000)
end
function lost_money_1000(a,b)
return dialogs.relocate_money_from_actor(a,b,1000)
end
function lost_money_2000(a,b)
return dialogs.relocate_money_from_actor(a,b,2000)
end
function lost_money_3000(a,b)
return dialogs.relocate_money_from_actor(a,b,3000)
end
function lost_money_4000(a,b)
return dialogs.relocate_money_from_actor(a,b,4000)
end
function lost_money_5000(a,b)
return dialogs.relocate_money_from_actor(a,b,5000)
end
function lost_money_6000(a,b)
return dialogs.relocate_money_from_actor(a,b,6000)
end
local function give_items(p)
if not(p and is_not_empty(p)) then return end
for sec,num in pairs(p) do
if (sec and num) then
if (IsItem("ammo",sec)) then
alife_create_item(sec,db.actor,{ammo = num})
else
for k=1,num do
alife_create_item(sec,db.actor)
end
end
news_manager.relocate_item(db.actor,"in",sec,num)
end
end
end
function give_item_monolith_elite_supply(a,b)
give_items({bandage = 5, medkit_army = 3})
GI("duty_girl_monolith_elite_supply")
end
function give_item_capture_the_brirge_join(a,b)
give_items({bandage = 5, medkit_army = 3})
GI("duty_girl_capture_the_brirge_supply")
end
function change_lvl_to_duty_outpost(a,b)
if (db.actor:is_talking()) then
db.actor:stop_talk()
end
local smart = SIMBOARD.smarts_by_names["red_smart_terrain_bridge"]
if (smart) then
ChangeLevel(vector():set(-118,5,-256),smart.m_level_vertex_id,smart.m_game_vertex_id,vector():set(0,0,-1),true)
end
end