mirror of
https://gitea.your-land.de/Sokomine/yl_speak_up.git
synced 2025-07-10 07:48:54 +02:00
added yl_speak_up.get_fs_operator_based_comparison for operator + value entry for preconditions and effects
This commit is contained in:
parent
98c63c83bd
commit
adb5c5573f
@ -1514,23 +1514,18 @@ end
|
||||
----------------------------------------------------------------------------
|
||||
-- begin of formspecs for types of preconditions, actions and effects
|
||||
|
||||
-- "an internal state (i.e. of a quest)", -- 2
|
||||
-- (state is the second offered option in both preconditions and effects list)
|
||||
yl_speak_up.get_fs_edit_option_p_and_e_state = function(
|
||||
pname, dialog, formspec, data, id_prefix, save_button, e,
|
||||
text_variable, text_select_value, text_select_operator,
|
||||
values_operator, check_operator, get_sorted_player_var_list_function )
|
||||
|
||||
local var_list = get_sorted_player_var_list_function(pname)
|
||||
-- helper function for "state", "property" and "evaluate";
|
||||
-- shows dropdown for operator and input field for comparison value var_cmp_value
|
||||
yl_speak_up.get_fs_operator_based_comparison = function(data, id_prefix, save_button, e,
|
||||
values_operator, check_operator,
|
||||
what_is_this, text_what_is_this,
|
||||
text_select_operator, text_select_value)
|
||||
if(e) then
|
||||
data.operator = math.max(1,table.indexof(values_operator, e[ id_prefix.."operator" ]))
|
||||
data.var_cmp_value = e[ id_prefix.."var_cmp_value" ]
|
||||
data.variable_name = yl_speak_up.strip_pname_from_var(e[ id_prefix.."variable" ], pname)
|
||||
data.variable = table.indexof(var_list, e[ id_prefix.."variable"])
|
||||
end
|
||||
local var_list_stripped = yl_speak_up.strip_pname_from_varlist(var_list, pname)
|
||||
if(not(data.variable) or data.variable < 1) then
|
||||
data.variable = 0
|
||||
if(not(data[what_is_this]) or data[what_is_this] == "" or tostring(data[what_is_this]) == -1
|
||||
or tostring(data[what_is_this]) == "0") then
|
||||
-- not enough selected yet for saving
|
||||
save_button = ""
|
||||
elseif(not(data.operator) or data.operator == 1) then
|
||||
@ -1550,18 +1545,43 @@ yl_speak_up.get_fs_edit_option_p_and_e_state = function(
|
||||
-- the list of available variables needs to be extended with the ones
|
||||
-- the player has read access to, and the order has to be constant
|
||||
-- (because dropdown just returns an index)
|
||||
return formspec..
|
||||
"label[0.2,3.3;"..text_variable.."]"..
|
||||
"label[0.2,4.3;Name of variable:]"..
|
||||
"dropdown[0.2,4.8;6.5,0.6;select_variable;"..
|
||||
"- please select -"..var_list_stripped..";"..
|
||||
tostring(data.variable + 1)..";]"..
|
||||
return "label[0.2,3.3;"..text_what_is_this.."]"..
|
||||
"label[0.2,4.3;Name of "..what_is_this..":]"..
|
||||
"label[7.0,4.3;"..text_select_operator.."]"..
|
||||
"dropdown[7.0,4.8;4.5,0.6;select_operator;"..
|
||||
table.concat(check_operator, ",")..";"..
|
||||
tostring(data.operator)..";]"..
|
||||
"label[11.7,4.3;"..text_select_value.."]"..
|
||||
field_for_value..
|
||||
save_button
|
||||
end
|
||||
|
||||
|
||||
-- "an internal state (i.e. of a quest)", -- 2
|
||||
-- (state is the second offered option in both preconditions and effects list)
|
||||
yl_speak_up.get_fs_edit_option_p_and_e_state = function(
|
||||
pname, dialog, formspec, data, id_prefix, save_button, e,
|
||||
text_variable, text_select_value, text_select_operator,
|
||||
values_operator, check_operator, get_sorted_player_var_list_function )
|
||||
-- the list of available variables needs to be extended with the ones
|
||||
-- the player has read access to, and the order has to be constant
|
||||
-- (because dropdown just returns an index)
|
||||
local var_list = get_sorted_player_var_list_function(pname)
|
||||
local var_list_stripped = yl_speak_up.strip_pname_from_varlist(var_list, pname)
|
||||
if(e) then
|
||||
data.variable_name = yl_speak_up.strip_pname_from_var(e[ id_prefix.."variable" ], pname)
|
||||
data.variable = table.indexof(var_list, e[ id_prefix.."variable"])
|
||||
end
|
||||
if(not(data.variable) or data.variable < 1) then
|
||||
data.variable = 0
|
||||
end
|
||||
return formspec..
|
||||
yl_speak_up.get_fs_operator_based_comparison(data, id_prefix, save_button, e,
|
||||
values_operator, check_operator, "variable", text_variable,
|
||||
text_select_operator, text_select_value)..
|
||||
"dropdown[0.2,4.8;6.5,0.6;select_variable;"..
|
||||
"- please select -"..var_list_stripped..";"..
|
||||
tostring(data.variable + 1)..";]"..
|
||||
"button[0.2,6.0;4.0,0.6;manage_variables;Manage variables]"..
|
||||
"button[4.7,6.0;6.5,0.6;show_var_usage_edit_element;Show where this variable is used]"..
|
||||
"hypertext[1.2,7.0;16.0,2.5;some_text;<normal>"..
|
||||
@ -1572,8 +1592,7 @@ yl_speak_up.get_fs_edit_option_p_and_e_state = function(
|
||||
"than x seconds ago\" or \"less than x seconds ago\". This can be "..
|
||||
"useful for prevending your NPC from handing out the same quest item again "..
|
||||
"too quickly (players are inventive and may use your quest item for their "..
|
||||
"own needs).\n</normal>]"..
|
||||
save_button
|
||||
"own needs).\n</normal>]"
|
||||
end
|
||||
|
||||
|
||||
@ -1582,27 +1601,8 @@ yl_speak_up.get_fs_edit_option_p_and_e_property = function(
|
||||
pname, dialog, formspec, data, id_prefix, save_button, e,
|
||||
text_select_operator, values_operator, check_operator)
|
||||
if(e) then
|
||||
data.operator = math.max(1,table.indexof(values_operator, e[ id_prefix.."operator" ]))
|
||||
data.var_cmp_value = e[ id_prefix.."var_cmp_value" ]
|
||||
data.property = e[ id_prefix.."value"]
|
||||
end
|
||||
if(not(data.property) or data.property == "") then
|
||||
-- not enough selected yet for saving
|
||||
save_button = ""
|
||||
elseif(not(data.operator) or data.operator == 1) then
|
||||
data.operator = 1
|
||||
save_button = ""
|
||||
end
|
||||
local field_for_value = "field[11.7,4.8;7.5,0.6;var_cmp_value;;"..
|
||||
minetest.formspec_escape(data.var_cmp_value or "- enter value -").."]"
|
||||
-- do not show value input field for unary operators
|
||||
-- (unary operators are diffrent for prerequirements and effects)
|
||||
if(not(data.operator)
|
||||
or (id_prefix == "p_" and (data.operator == 1 or (data.operator>=8 and data.operator<11)))
|
||||
-- "unset", "set_to_current_time"
|
||||
or (id_prefix == "r_" and (data.operator == 3 or data.operator == 4))) then
|
||||
field_for_value = "label[11.7,5.1;- not used for this operator -]"
|
||||
end
|
||||
local operator_list = {}
|
||||
for i, v in ipairs(check_operator) do
|
||||
v2 = values_operator[i]
|
||||
@ -1618,21 +1618,16 @@ yl_speak_up.get_fs_edit_option_p_and_e_property = function(
|
||||
end
|
||||
-- the list of available variables needs to be extended with the ones
|
||||
return formspec..
|
||||
"label[0.2,3.3;The NPC shall have the following property:]"..
|
||||
"label[0.2,4.3;Name of property:]"..
|
||||
yl_speak_up.get_fs_operator_based_comparison(data, id_prefix, save_button, e,
|
||||
values_operator, operator_list, "property",
|
||||
"The NPC shall have the following property:",
|
||||
text_select_operator, text_compare_with)..
|
||||
"field[1.0,4.8;5.0,0.6;property;;"..
|
||||
minetest.formspec_escape(data.property or "- enter name -").."]"..
|
||||
"label[7.0,4.3;"..text_select_operator.."]"..
|
||||
"dropdown[7.0,4.8;4.5,0.6;select_operator;"..
|
||||
table.concat(operator_list, ",")..";"..
|
||||
tostring(data.operator)..";]"..
|
||||
"label[11.7,4.3;"..text_compare_with..":]"..
|
||||
field_for_value..
|
||||
"hypertext[1.2,7.0;16.0,2.5;some_text;<normal>"..
|
||||
"<b>Note:</b> Properties are useful for NPC that have a generic "..
|
||||
"behaviour and may vary their behaviour slightly.\n"..
|
||||
"</normal>]"..
|
||||
save_button
|
||||
"</normal>]"
|
||||
end
|
||||
|
||||
|
||||
@ -1640,8 +1635,36 @@ end
|
||||
yl_speak_up.get_fs_edit_option_p_and_e_evaluate = function(
|
||||
pname, dialog, formspec, data, id_prefix, save_button, e,
|
||||
text_select_operator, values_operator, check_operator)
|
||||
-- TODO: actually implement
|
||||
return formspec
|
||||
if(e) then
|
||||
data.function_name = e[ id_prefix.."value"]
|
||||
-- TODO: p_param1 .. p_param9
|
||||
end
|
||||
local operator_list = {}
|
||||
for i, v in ipairs(check_operator) do
|
||||
v2 = values_operator[i]
|
||||
if( v2 ~= "quest_step_done" and v2 ~= "quest_step_not_done"
|
||||
and v2 ~= "true_for_param" and v2 ~= "false_for_param") then
|
||||
table.insert(operator_list, v)
|
||||
end
|
||||
end
|
||||
local text_operator_and_comparison = ""
|
||||
if(id_prefix ~= "r_") then
|
||||
text_operator_and_comparison = yl_speak_up.get_fs_operator_based_comparison(
|
||||
data, id_prefix, save_button, e,
|
||||
values_operator, operator_list, "function",
|
||||
"Execute and evaluate the following function:",
|
||||
text_select_operator, "Compare the return value with this value:")
|
||||
end
|
||||
-- the list of available variables needs to be extended with the ones
|
||||
return formspec..
|
||||
text_operator_and_comparison..
|
||||
-- TODO: rather a dropdown...
|
||||
"field[1.0,4.8;5.0,0.6;property;;"..
|
||||
minetest.formspec_escape(data.property or "- enter name -").."]"..
|
||||
"hypertext[1.2,7.0;16.0,2.5;some_text;<normal>"..
|
||||
"<b>Note:</b> Functions are called with parameters which are passed on to them. "..
|
||||
"The function then calculates a result. This can be compared to a given value."..
|
||||
"</normal>]"
|
||||
end
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user