mirror of
https://gitea.your-land.de/Sokomine/yl_speak_up.git
synced 2025-08-14 00:05:49 +02:00
added get list of writable variables, some documentation and yl_speak_up.show_effect to fs_edit_effects.lua
This commit is contained in:
parent
967e7c6eb4
commit
fab84ca4a0
@ -1,4 +1,33 @@
|
|||||||
|
|
||||||
|
-- Which diffrent types of effects are available?
|
||||||
|
-- -> The following fields are part of an effect/result:
|
||||||
|
-- r_id the ID/key of the effect/result
|
||||||
|
-- r_type selected from values_what; the staffs allow to use other
|
||||||
|
-- types like "function" or "give_item" etc. - but that is not
|
||||||
|
-- supported here (cannot be edited or created; only be shown)
|
||||||
|
-- r_value used to store the subtype of r_type
|
||||||
|
--
|
||||||
|
-- a state/variable:
|
||||||
|
-- r_variable name of a variable the player has *write* access to;
|
||||||
|
-- dropdown list with allowed options
|
||||||
|
-- r_operator selected from values_operator
|
||||||
|
-- r_var_cmp_value can be set freely by the player (the variable will be
|
||||||
|
-- set to this value)
|
||||||
|
--
|
||||||
|
-- a block in the world:
|
||||||
|
-- r_pos a position in the world; determined by asking the player
|
||||||
|
-- to punch the block
|
||||||
|
-- r_node (follows from r_pos)
|
||||||
|
-- r_param2 (follows from r_pos)
|
||||||
|
--
|
||||||
|
-- a craft receipe: TODO
|
||||||
|
--
|
||||||
|
-- on_failure: TODO
|
||||||
|
--
|
||||||
|
-- Unlike in preconditions, trade (the trade action already happened) and
|
||||||
|
-- inventory actions are not supported as effects.
|
||||||
|
--
|
||||||
|
|
||||||
-- some helper lists for creating the formspecs and evaulating
|
-- some helper lists for creating the formspecs and evaulating
|
||||||
-- the player's answers:
|
-- the player's answers:
|
||||||
|
|
||||||
@ -39,6 +68,77 @@ local check_operator = {
|
|||||||
-- how to store these as r_value (the actual variable is stored in r_variable, and the value in r_new_value):
|
-- how to store these as r_value (the actual variable is stored in r_variable, and the value in r_new_value):
|
||||||
local values_operator = {"", "set_to", "unset"}
|
local values_operator = {"", "set_to", "unset"}
|
||||||
|
|
||||||
|
|
||||||
|
-- get the list of variables the player has *write* access to
|
||||||
|
yl_speak_up.get_sorted_player_var_list_write_access = function(pname)
|
||||||
|
local var_list = {}
|
||||||
|
-- some values - like hour of day or HP of the player - can be read in
|
||||||
|
-- a precondition but not be modified
|
||||||
|
-- get the list of variables the player can *write*
|
||||||
|
local tmp = yl_speak_up.get_quest_variables_with_write_access(pname)
|
||||||
|
-- sort that list (the dropdown formspec element returns just an index)
|
||||||
|
table.sort(tmp)
|
||||||
|
for i, v in ipairs(tmp) do
|
||||||
|
table.insert(var_list, v)
|
||||||
|
end
|
||||||
|
return var_list
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- returns a human-readable text as description of the effects
|
||||||
|
-- (as shown in the edit options dialog and in the edit effect formspec)
|
||||||
|
yl_speak_up.show_effect = function(r)
|
||||||
|
if(not(r.r_type) or r.r_type == "") then
|
||||||
|
return "(nothing): Nothing to do. No effect."
|
||||||
|
elseif(r.r_type == "give_item") then
|
||||||
|
return "give_item: Add \""..tostring(r.r_value).."\" to the player's inventory."
|
||||||
|
elseif(r.r_type == "take_item") then
|
||||||
|
return "take_item: Take \""..tostring(r.r_value).."\" from the player's inventory."
|
||||||
|
elseif(r.r_type == "move") then
|
||||||
|
return "move: Move the player to "..tostring(r.r_value).."."
|
||||||
|
elseif(r.r_type == "function") then
|
||||||
|
return "function: execute \""..tostring(r.r_value).."\"."
|
||||||
|
elseif(r.r_type == "trade") then
|
||||||
|
return "trade: obsolete (now defined as an action)"
|
||||||
|
elseif(r.r_type == "dialog") then
|
||||||
|
return "Switch to dialog \""..tostring(r.r_value).."\"."
|
||||||
|
elseif(r.r_type == "state") then
|
||||||
|
if(not(r.r_operator)) then
|
||||||
|
return "Error: Operator not defined."
|
||||||
|
elseif(r.r_operator == "set_to") then
|
||||||
|
return "set VARIABLE[ "..tostring(r.r_variable).." ] to value \""..
|
||||||
|
tostring(r.r_var_cmp_value).."\""
|
||||||
|
elseif(r.r_operator == "unset") then
|
||||||
|
return "discard VARIABLE[ "..tostring(r.r_variable).." ] (unset)"
|
||||||
|
else
|
||||||
|
return "ERROR: Wrong operator \""..tostring(r.r_operator).."\" for "..
|
||||||
|
"VARIABLE[ "..tostring(r.r_variable).." ]"
|
||||||
|
end
|
||||||
|
elseif(r.r_type == "block") then
|
||||||
|
if(not(r.r_pos) or type(r.r_pos) ~= "table"
|
||||||
|
or not(r.r_pos.x) or not(r.r_pos.y) or not(r.r_pos.z)) then
|
||||||
|
return "ERROR: r.r_pos is "..minetest.serialize(r.r_pos)
|
||||||
|
elseif(r.r_value == "place") then
|
||||||
|
return "Place \""..tostring(r.r_node).."\" with param2: "..tostring(r.r_param2)..
|
||||||
|
" at "..minetest.pos_to_string(p.p_pos).."."
|
||||||
|
elseif(r.r_value == "dig") then
|
||||||
|
return "Dig the block at "..minetest.pos_to_string(r.r_pos).."."
|
||||||
|
elseif(r.r_value == "punch") then
|
||||||
|
return "Punch the block at "..minetest.pos_to_string(r.r_pos).."."
|
||||||
|
elseif(r.r_value == "right-click") then
|
||||||
|
return "Right-click the block at "..minetest.pos_to_string(r.r_pos).."."
|
||||||
|
else
|
||||||
|
return "ERROR: Don't know what to do with the block at "..
|
||||||
|
minetest.pos_to_string(r.r_pos)..": \""..tostring(r.r_value).."\"?"
|
||||||
|
end
|
||||||
|
elseif(r.r_type == "craft") then
|
||||||
|
return "TODO. Crafting is not yet supported."
|
||||||
|
end
|
||||||
|
-- fallback
|
||||||
|
return tostring(r.r_value)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-- these are only wrapper functions for those in fs_edit_general.lua
|
-- these are only wrapper functions for those in fs_edit_general.lua
|
||||||
|
|
||||||
yl_speak_up.input_fs_edit_effects = function(player, formname, fields)
|
yl_speak_up.input_fs_edit_effects = function(player, formname, fields)
|
||||||
@ -48,9 +148,8 @@ yl_speak_up.input_fs_edit_effects = function(player, formname, fields)
|
|||||||
"Please punch the block you want to manipulate in your effect!",
|
"Please punch the block you want to manipulate in your effect!",
|
||||||
values_what, values_operator, values_block, {}, {},
|
values_what, values_operator, values_block, {}, {},
|
||||||
check_what, check_operator, check_block, {}, {},
|
check_what, check_operator, check_block, {}, {},
|
||||||
-- TODO: this needs to be implemented
|
|
||||||
-- player variables with write access
|
-- player variables with write access
|
||||||
get_sorted_player_var_list,
|
yl_speak_up.get_sorted_player_var_list_write_access,
|
||||||
"edit_effects"
|
"edit_effects"
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
@ -61,11 +160,9 @@ yl_speak_up.get_fs_edit_effects = function(player, table_click_result)
|
|||||||
"(Ef)fect", "tmp_result",
|
"(Ef)fect", "tmp_result",
|
||||||
"What do you want to change with this effect?",
|
"What do you want to change with this effect?",
|
||||||
check_what, check_operator, check_block, {}, {},
|
check_what, check_operator, check_block, {}, {},
|
||||||
-- TODO: this needs to be implemented
|
|
||||||
-- player variables with write access
|
-- player variables with write access
|
||||||
get_sorted_player_var_list,
|
yl_speak_up.get_sorted_player_var_list_write_access,
|
||||||
-- TODO: the show_result function needs to be implemented
|
yl_speak_up.show_effect,
|
||||||
yl_speak_up.show_result,
|
|
||||||
"table_of_elements",
|
"table_of_elements",
|
||||||
"Change the value of the following variable:", "What to do:", "New value:",
|
"Change the value of the following variable:", "What to do:", "New value:",
|
||||||
"The NPC shall do something to the block at the following position:"
|
"The NPC shall do something to the block at the following position:"
|
||||||
|
@ -192,14 +192,16 @@ yl_speak_up.get_fs_edit_option_dialog = function(player, n_id, d_id, o_id)
|
|||||||
list_of_effects = list_of_effects..
|
list_of_effects = list_of_effects..
|
||||||
minetest.formspec_escape(v.r_id)..",#999999,"..
|
minetest.formspec_escape(v.r_id)..",#999999,"..
|
||||||
minetest.formspec_escape(v.r_type)..","..
|
minetest.formspec_escape(v.r_type)..","..
|
||||||
minetest.formspec_escape(v.r_value)..","
|
minetest.formspec_escape(
|
||||||
|
yl_speak_up.show_effect(v))..","
|
||||||
-- there may be more than one in the data structure
|
-- there may be more than one in the data structure
|
||||||
target_dialog = v.r_value
|
target_dialog = v.r_value
|
||||||
elseif v.r_type ~= "dialog" then
|
elseif v.r_type ~= "dialog" then
|
||||||
list_of_effects = list_of_effects..
|
list_of_effects = list_of_effects..
|
||||||
minetest.formspec_escape(v.r_id)..",#FFFF00,"..
|
minetest.formspec_escape(v.r_id)..",#FFFF00,"..
|
||||||
minetest.formspec_escape(v.r_type)..","..
|
minetest.formspec_escape(v.r_type)..","..
|
||||||
minetest.formspec_escape(v.r_value)..","
|
minetest.formspec_escape(
|
||||||
|
yl_speak_up.show_effect(v))..","
|
||||||
end
|
end
|
||||||
count_effects = count_effects + 1
|
count_effects = count_effects + 1
|
||||||
end
|
end
|
||||||
|
@ -130,7 +130,7 @@ yl_speak_up.show_precondition = function(p)
|
|||||||
if(not(p.p_type) or p.p_type == "") then
|
if(not(p.p_type) or p.p_type == "") then
|
||||||
return "(nothing): Always true."
|
return "(nothing): Always true."
|
||||||
elseif(p.p_type == "item") then
|
elseif(p.p_type == "item") then
|
||||||
return "item: The player has "..tostring(p.p_value).." in his inventory."
|
return "item: The player has \""..tostring(p.p_value).."\" in his inventory."
|
||||||
elseif(p.p_type == "quest") then
|
elseif(p.p_type == "quest") then
|
||||||
return "quest: Always false."
|
return "quest: Always false."
|
||||||
elseif(p.p_type == "auto") then
|
elseif(p.p_type == "auto") then
|
||||||
|
Loading…
Reference in New Issue
Block a user