merge d_got_item for generic dialogs with existing ones of current npc
This commit is contained in:
parent
7d92433d7c
commit
1e6e7e96d8
@ -64,6 +64,42 @@ yl_speak_up.rewrite_dialog_id = function(data, field_name, start_dialog, append_
|
||||
end
|
||||
|
||||
|
||||
-- helper function for yl_speak_up.check_and_add_as_generic_dialog(..);
|
||||
-- has to be called for all those dialogs where options from the generic
|
||||
-- NPC need to be injected in a dialog from the special NPC (and not in
|
||||
-- dialogs that are specific to the generic NPC)
|
||||
yl_speak_up.generic_dialog_rewrite_options = function(n_id, dialog_name, append_str, anz_generic)
|
||||
if(not(yl_speak_up.generic_dialogs[n_id])
|
||||
or not(yl_speak_up.generic_dialogs[n_id][dialog_name])) then
|
||||
return
|
||||
end
|
||||
local options = yl_speak_up.generic_dialogs[n_id][dialog_name].d_options
|
||||
if(not(options)) then
|
||||
return
|
||||
end
|
||||
local new_options = {}
|
||||
local anz_options = 0
|
||||
for o_id, o in pairs(options) do
|
||||
-- o_sort needs to be set accordingly
|
||||
local o_sort = tonumber(o.o_sort or "0")
|
||||
if(not(o_sort) or o_sort < 0) then
|
||||
o_sort = anz_options
|
||||
end
|
||||
-- make sure there is enough room for internal sorting
|
||||
o.o_sort = o_sort + (anz_generic * 100000)
|
||||
anz_options = anz_options + 1
|
||||
|
||||
-- adjust o_id
|
||||
o.o_id = o_id..append_str
|
||||
-- the options of the first dialog need to be renamed to r.r_id_n_id to avoid duplicates
|
||||
new_options[o_id..append_str] = o
|
||||
-- TODO: there may be preconditions refering this option which also might need changing
|
||||
end
|
||||
-- store the new options
|
||||
yl_speak_up.generic_dialogs[n_id][dialog_name].d_options = new_options
|
||||
end
|
||||
|
||||
|
||||
-- returns "OK" if the dialog can be used as a generic dialog, that is:
|
||||
-- * has at least one dialog
|
||||
yl_speak_up.check_and_add_as_generic_dialog = function(dialog, n_id)
|
||||
@ -299,25 +335,11 @@ yl_speak_up.check_and_add_as_generic_dialog = function(dialog, n_id)
|
||||
if(not(options)) then
|
||||
return "There are no options/answers that might be injected/made generic."
|
||||
end
|
||||
local new_options = {}
|
||||
local anz_options = 0
|
||||
for o_id, o in pairs(options) do
|
||||
-- o_sort needs to be set accordingly
|
||||
local o_sort = tonumber(o.o_sort or "0")
|
||||
if(not(o_sort) or o_sort < 0) then
|
||||
o_sort = anz_options
|
||||
end
|
||||
-- make sure there is enough room for internal sorting
|
||||
o.o_sort = o_sort + (anz_generic * 100000)
|
||||
anz_options = anz_options + 1
|
||||
yl_speak_up.generic_dialog_rewrite_options(n_id, start_dialog, append_str, anz_generic)
|
||||
|
||||
-- adjust o_id
|
||||
o.o_id = o_id..append_str
|
||||
-- the options of the first dialog need to be renamed to r.r_id_n_id to avoid duplicates
|
||||
new_options[o_id..append_str] = o
|
||||
-- TODO: there may be preconditions refering this option which also might need changing
|
||||
end
|
||||
yl_speak_up.generic_dialogs[n_id][start_dialog].d_options = new_options
|
||||
-- rename the options of d_got_item so that it can be used in combination with d_got_item
|
||||
-- from other generic npc or the specific npc
|
||||
yl_speak_up.generic_dialog_rewrite_options(n_id, "d_got_item", append_str, anz_generic)
|
||||
|
||||
-- all fine - no error occoured, no error message to display;
|
||||
-- the NPC's dialog has been added
|
||||
@ -360,8 +382,11 @@ yl_speak_up.add_generic_dialogs = function(dialog, current_n_id, player)
|
||||
for i, n_id in ipairs(n_id_list) do
|
||||
-- add the dialogs as such first
|
||||
for d_id, d in pairs(yl_speak_up.generic_dialogs[n_id]) do
|
||||
-- no need to deep copy here - this is not added in edit mode
|
||||
dialog.n_dialogs[d_id] = d
|
||||
-- d_got_item needs to be combined
|
||||
if(d_id ~= "d_got_item" and d_id ~= "d_got_item".."_"..tostring(n_id)) then
|
||||
-- no need to deep copy here - this is not added in edit mode
|
||||
dialog.n_dialogs[d_id] = d
|
||||
end
|
||||
end
|
||||
-- add the options so that these new dialogs can be accessed
|
||||
local d = yl_speak_up.generic_dialogs[n_id]["d_generic_start_dialog"]
|
||||
@ -378,8 +403,22 @@ yl_speak_up.add_generic_dialogs = function(dialog, current_n_id, player)
|
||||
dialog.n_dialogs[start_dialog_current].d_text.."\n"..d.d_text
|
||||
end
|
||||
|
||||
d = yl_speak_up.generic_dialogs[n_id]["d_got_item"]
|
||||
-- add the options from d_got_item
|
||||
if(not(dialog.n_dialogs["d_got_item"])
|
||||
or not(dialog.n_dialogs["d_got_item"].d_options)) then
|
||||
-- if the current NPC doesn't accept any items: just copy them from the generic npc
|
||||
dialog.n_dialogs["d_got_item"] = d
|
||||
elseif(d and d.d_options) then
|
||||
for o_id, o in pairs(d.d_options) do
|
||||
-- actually insert the new options
|
||||
-- note: the o_id needs to have been rewritten before this can be done!
|
||||
dialog.n_dialogs["d_got_item"].d_options[o.o_id] = o
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
-- TODO: deal with d_got_item
|
||||
return dialog
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user