forked from your-land-mirror/yl_speak_up
added formspec for precondition player_offered_item
This commit is contained in:
parent
e33f713f54
commit
d4e7870c05
@ -52,13 +52,23 @@ yl_speak_up.action_inv_changed = function(inv, listname, index, stack, player, h
|
||||
return
|
||||
end
|
||||
-- is the player in the process of editing an action of the npc_gives/npc_wants type?
|
||||
local target_fs = "edit_actions"
|
||||
local data = yl_speak_up.speak_to[pname][ "tmp_action" ]
|
||||
if(not(data) or (data.what ~= 4 and data.what ~= 5)) then
|
||||
return
|
||||
-- we are editing an action
|
||||
if(data) then
|
||||
return
|
||||
end
|
||||
-- it might be a precondition
|
||||
data = yl_speak_up.speak_to[pname][ "tmp_prereq" ]
|
||||
if(not(data) or (data.what ~= 8)) then
|
||||
return
|
||||
end
|
||||
target_fs = "edit_preconditions"
|
||||
end
|
||||
-- "The NPC gives something to the player (i.e. a quest item).", -- 4
|
||||
-- "The player is expected to give something to the NPC (i.e. a quest item).", -- 5
|
||||
if(how == "put" and (data.what == 4 or data.what == 5)) then
|
||||
if(how == "put") then
|
||||
data.item_node_name = stack:get_name().." "..stack:get_count()
|
||||
local meta = stack:get_meta()
|
||||
if(meta and meta:get_string("description")) then
|
||||
@ -81,7 +91,7 @@ yl_speak_up.action_inv_changed = function(inv, listname, index, stack, player, h
|
||||
data.item_node_name = ""
|
||||
end
|
||||
-- show the updated formspec to the player
|
||||
yl_speak_up.show_fs(player, "edit_actions", nil)
|
||||
yl_speak_up.show_fs(player, target_fs, nil)
|
||||
-- no need to check anything more here; the real checks need to be done
|
||||
-- when the player presses the save/store/execute button
|
||||
end
|
||||
|
@ -889,6 +889,10 @@ yl_speak_up.input_fs_edit_option_related = function(player, formname, fields,
|
||||
return
|
||||
end
|
||||
|
||||
elseif(fields.select_accept_group
|
||||
and data and data.what and what_type == "player_offered_item" and id_prefix == "p_") then
|
||||
data.item_group = fields.select_accept_group
|
||||
|
||||
-- comparison value for a variable (same for both preconditions and effects)
|
||||
elseif(fields.var_cmp_value
|
||||
and data and data.what and what_type == "state" and id_prefix ~= "a_") then
|
||||
@ -1148,6 +1152,7 @@ yl_speak_up.input_fs_edit_option_related = function(player, formname, fields,
|
||||
and (fields.change_element or fields.select_what or fields.select_trade
|
||||
or fields.select_inv or fields.select_block
|
||||
or fields.inv_list_name
|
||||
or fields.select_accept_group
|
||||
or fields.select_variable or fields.select_operator
|
||||
or fields.select_on_failure
|
||||
or fields.select_on_action_failure
|
||||
@ -1439,8 +1444,10 @@ yl_speak_up.get_fs_edit_option_related = function(player, table_click_result,
|
||||
|
||||
-- "The player is expected to give something to the NPC (i.e. a quest item).", -- 5
|
||||
-- (only for actions)
|
||||
elseif(data.what and id_prefix == "a_" and what_type == "npc_wants") then
|
||||
return yl_speak_up.get_fs_edit_option_action_npc_wants(
|
||||
-- "an item the player offered/gave to the NPC", (as precondition)
|
||||
elseif(data.what and ((id_prefix == "a_" and what_type == "npc_wants")
|
||||
or (id_prefix == "p_" and what_type == "player_offered_item"))) then
|
||||
return yl_speak_up.get_fs_edit_option_action_npc_wants_or_accepts(
|
||||
pname, dialog, formspec, data, id_prefix, save_button, e)
|
||||
|
||||
-- "The player has to manually enter a password or passphrase or some other text.", -- 6
|
||||
@ -2020,21 +2027,50 @@ end
|
||||
|
||||
-- "The player is expected to give something to the NPC (i.e. a quest item).", -- 5
|
||||
-- (only for actions)
|
||||
yl_speak_up.get_fs_edit_option_action_npc_wants = function(
|
||||
-- "an item the player offered/gave to the NPC", (as precondition)
|
||||
yl_speak_up.get_fs_edit_option_action_npc_wants_or_accepts = function(
|
||||
pname, dialog, formspec, data, id_prefix, save_button, e)
|
||||
local bg_img = ""
|
||||
local node_name = ""
|
||||
if(e) then
|
||||
data.item_quest_id = data.item_quest_id or e["item_quest_id"]
|
||||
data.item_desc = data.item_desc or e["item_desc"]
|
||||
data.item_group = data.item_group or e["item_group"]
|
||||
end
|
||||
if(data and (data.item_node_name or data.item_string)) then
|
||||
bg_img = "item_image[1.15,3.65;0.7,0.7;"..
|
||||
tostring(data.item_node_name or data.item_string).."]"
|
||||
node_name = tostring(data.item_node_name or data.item_string)
|
||||
bg_img = "item_image[1.15,3.65;0.7,0.7;"..node_name.."]"
|
||||
end
|
||||
wants_or_accepts = "wants"
|
||||
action_failure_info = ""
|
||||
if(id_prefix == "p_") then
|
||||
wants_or_accepts = "accepts"
|
||||
local group_list = {minetest.formspec_escape("- no, just this one item -")}
|
||||
-- get node name without amount
|
||||
local parts = node_name:split(" ")
|
||||
local nr = 1
|
||||
-- prepare group_list
|
||||
if(data and parts and minetest.registered_items[ parts[1] ]) then
|
||||
for k,v in pairs(minetest.registered_items[ parts[1] ].groups) do
|
||||
table.insert(group_list, k)
|
||||
end
|
||||
nr = table.indexof(minetest.registered_items[ parts[1] ].groups, data.item_group)
|
||||
if(nr == -1) then
|
||||
nr = 1
|
||||
end
|
||||
end
|
||||
-- use this for the group selection dialog as well
|
||||
action_failure_info = "label[1,4.8;...and also all other items of the group:]"..
|
||||
"dropdown[2,5.1;5.0,0.6;select_accept_group;"..
|
||||
table.concat(group_list, ",")..";"..tostring(nr)..";]"
|
||||
else
|
||||
action_failure_info = yl_speak_up.set_on_action_failure_dialog(pname, data,
|
||||
"The player shall give the NPC this item.")
|
||||
end
|
||||
return formspec..
|
||||
"label[8,2.6;Your inventory:]"..
|
||||
"list[current_player;main;8,3;8,4;]"..
|
||||
"label[1,3.1;"..minetest.formspec_escape(dialog.n_npc or "?").." wants:]"..
|
||||
"label[1,3.1;"..minetest.formspec_escape(dialog.n_npc or "?").." "..wants_or_accepts..":]"..
|
||||
"list[detached:yl_speak_up_player_"..pname..";npc_wants;2,3.5;1,1;]"..
|
||||
"label[3.2,4.0;"..
|
||||
minetest.formspec_escape(
|
||||
@ -2055,8 +2091,7 @@ yl_speak_up.get_fs_edit_option_action_npc_wants = function(
|
||||
data.item_desc
|
||||
or "- none set -").."]"..
|
||||
bg_img..
|
||||
yl_speak_up.set_on_action_failure_dialog(pname, data,
|
||||
"The player shall give the NPC this item.")..
|
||||
action_failure_info..
|
||||
save_button
|
||||
end
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
-- TODO: check inscription of a sign?
|
||||
-- TODO: invlist as dropdown of inventory lists at detected position
|
||||
|
||||
-- Which diffrent types of preconditions are available?
|
||||
-- -> The following fields are part of a precondition:
|
||||
@ -40,14 +39,15 @@ local check_what = {
|
||||
"the inventory of the player", -- 5
|
||||
"the inventory of the NPC", -- 6
|
||||
"the inventory of a block somewhere", -- 7
|
||||
"execute Lua code (requires npc_master priv)", -- 7 -> 8
|
||||
"Call custom functions that are supposed to be overridden by the server.", -- 8 -> 9
|
||||
"The preconditions of another dialog option are fulfilled/not fulfilled.", -- 9 -> 10
|
||||
"an item the player offered/gave to the NPC", -- 8
|
||||
"execute Lua code (requires npc_master priv)", -- 7 -> 9
|
||||
"Call custom functions that are supposed to be overridden by the server.", -- 8 -> 10
|
||||
"The preconditions of another dialog option are fulfilled/not fulfilled.", -- 9 -> 11
|
||||
}
|
||||
|
||||
-- how to store these as p_type in the precondition:
|
||||
local values_what = {"", "state", "block", "trade", "player_inv", "npc_inv",
|
||||
"block_inv",
|
||||
"block_inv", "player_offered_item",
|
||||
-- requires npc_master priv
|
||||
"function",
|
||||
-- custom function (does not require npc_master priv)
|
||||
|
Loading…
Reference in New Issue
Block a user