forked from Sokomine/yl_speak_up
added custrom_functions_you_can_override.lua
This commit is contained in:
parent
cef75205f5
commit
01af5d1365
10
README.md
10
README.md
@ -178,8 +178,8 @@ NPC to ask for a passwort or the answer to a question the NPC just asked.
|
|||||||
The player's answer is checked against the *expected answer* that you give
|
The player's answer is checked against the *expected answer* that you give
|
||||||
when you set up this action.
|
when you set up this action.
|
||||||
|
|
||||||
Custom Actions
|
Custom Preconditions, Actions and Effects
|
||||||
==============
|
=========================================
|
||||||
You can define custom actions and provide a parameter. The function
|
You can define custom actions and provide a parameter. The function
|
||||||
yl_speak_up.get_fs_action_custom(player, param)
|
yl_speak_up.get_fs_action_custom(player, param)
|
||||||
gets called when such a function is executed and ought to return a formspec.
|
gets called when such a function is executed and ought to return a formspec.
|
||||||
@ -187,3 +187,9 @@ Input ought to be sent to the function
|
|||||||
yl_speak_up.input_fs_action_custom(player, formname, fields)
|
yl_speak_up.input_fs_action_custom(player, formname, fields)
|
||||||
which acts as an example of what you need to take care of in your own
|
which acts as an example of what you need to take care of in your own
|
||||||
implementation of this function.
|
implementation of this function.
|
||||||
|
|
||||||
|
You can also define custom preconditions and effects. For more information,
|
||||||
|
take a look at
|
||||||
|
custrom_functions_you_can_override.lua
|
||||||
|
In order to add custom functions, you need to be able to edit that file or
|
||||||
|
execute Lua code on the server.
|
||||||
|
112
custrom_functions_you_can_override.lua
Normal file
112
custrom_functions_you_can_override.lua
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
|
||||||
|
-- this contains custom functions that you can override on your server
|
||||||
|
-- please take a look at the example code!
|
||||||
|
|
||||||
|
-- replace some variables in the text the NPC speaks and which the player can use to reply
|
||||||
|
-- pname: the name of the player that is talking to the NPC;
|
||||||
|
-- Note: If you want to change this function, best call the original as well after
|
||||||
|
-- applying your custom changes.
|
||||||
|
yl_speak_up.replace_vars_in_text = function(text, dialog, pname)
|
||||||
|
local subs = {
|
||||||
|
MY_NAME = dialog.n_npc,
|
||||||
|
NPC_NAME = dialog.n_npc,
|
||||||
|
OWNER_NAME = dialog.npc_owner,
|
||||||
|
PLAYER_NAME = pname,
|
||||||
|
}
|
||||||
|
|
||||||
|
local day_time_name = "day"
|
||||||
|
local day_time = minetest.get_timeofday()
|
||||||
|
if(day_time < 0.5) then
|
||||||
|
day_time_name = "morning"
|
||||||
|
elseif(day_time < 0.75) then
|
||||||
|
day_time_name = "afternoon"
|
||||||
|
else
|
||||||
|
day_time_name = "evening"
|
||||||
|
end
|
||||||
|
subs.GOOD_DAY = "Good "..day_time_name
|
||||||
|
subs.good_DAY = "good "..day_time_name
|
||||||
|
|
||||||
|
-- Note: the $ char is a special one. It needs to be escaped with %$ in lua.
|
||||||
|
-- Note: when substitution argument is a table, we look up
|
||||||
|
-- substitutions in it using substring captured by "()" in
|
||||||
|
-- pattern. "[%a_]+" means one or more letter or underscore.
|
||||||
|
-- If lookup returns nil, then no substitution is made.
|
||||||
|
text = string.gsub(text, "%$([%a_]+)%$", subs)
|
||||||
|
|
||||||
|
return text
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- a custom precondition;
|
||||||
|
-- has to return either true (=precondition is fulfilled) or false (=precondition is not fulfilled)
|
||||||
|
-- Note: This function will be called often. Make it efficient!
|
||||||
|
yl_speak_up.precondition_custom = function(player, param)
|
||||||
|
minetest.chat_send_player(player:get_player_name(),
|
||||||
|
"Checking custom precondition with parameter \""..tostring(param).."\"..")
|
||||||
|
-- return if your precondition is fulfilled (true) or not (false)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- a custom effect;
|
||||||
|
-- has to return true (=effect was executed successfully) or false (=effect failed for some reason)
|
||||||
|
yl_speak_up.effect_custom = function(player, param)
|
||||||
|
minetest.chat_send_player(player:get_player_name(),
|
||||||
|
"Executing custom effect with parameter \""..tostring(param).."\"..")
|
||||||
|
-- return true if your effect executed successfuly, and false if not
|
||||||
|
-- (only relevant for following on_failure effects)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- a custom action (the formspec shown to the player);
|
||||||
|
-- overwrite this function on your server with a custom one that shows the formspec
|
||||||
|
-- that you want!
|
||||||
|
yl_speak_up.get_fs_action_custom = function(player, param)
|
||||||
|
local pname = player:get_player_name()
|
||||||
|
local dialog = yl_speak_up.speak_to[pname].dialog
|
||||||
|
return "size[8.5,4.0]"..
|
||||||
|
"button[0.2,0.0;2.0,0.9;back_to_talk;Back to talk]"..
|
||||||
|
"button[4.75,0.0;3.0,0.9;finished_action;Stare back]"..
|
||||||
|
|
||||||
|
"tooltip[back_to_talk;Click here if you want the action to FAIL.]"..
|
||||||
|
"tooltip[finished_action;Click here if you want the action to be a SUCCESS.]"..
|
||||||
|
"label[0.5,1.7;"..minetest.formspec_escape(
|
||||||
|
"["..(dialog.n_npc or "- ? -").." stares expectantly at you.]").."]"..
|
||||||
|
"label[0.5,2.5;Your custom parameter is:]"..
|
||||||
|
"label[1.5,3.0;"..minetest.formspec_escape(tostring(param)).."]"..
|
||||||
|
"label[0.5,3.5;Overwrite this function with a custom one!]"
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- a custom action (checking of the input);
|
||||||
|
-- overwrite this function on your server with a custom one that checks the
|
||||||
|
-- input to your formspec - but don't forget to call the necessary functions
|
||||||
|
-- as shown here
|
||||||
|
yl_speak_up.input_fs_action_custom = function(player, formname, fields)
|
||||||
|
-- back from error_msg? then show the formspec again
|
||||||
|
if(fields.back_from_error_msg) then
|
||||||
|
yl_speak_up.show_fs(player, "action_custom", nil)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local pname = player:get_player_name()
|
||||||
|
local a_id = yl_speak_up.speak_to[pname].a_id
|
||||||
|
if(fields.back_to_talk) then
|
||||||
|
-- the action failed
|
||||||
|
yl_speak_up.execute_next_action(player, a_id, false)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if(fields.finished_action) then
|
||||||
|
-- the action was a success
|
||||||
|
yl_speak_up.execute_next_action(player, a_id, true)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
-- else show a message to the player that he ought to decide
|
||||||
|
yl_speak_up.show_fs(player, "msg", {
|
||||||
|
input_to = "yl_speak_up:action_custom",
|
||||||
|
formspec = "size[7,1.0]"..
|
||||||
|
"label[0.2,-0.2;"..
|
||||||
|
"Please click either on \"Stare back\" or \"Back to talk\"!]"..
|
||||||
|
"button[2,0.5;1.5,0.9;back_from_error_msg;Back]"})
|
||||||
|
end
|
||||||
|
|
@ -618,55 +618,6 @@ yl_speak_up.get_fs_action_text_input = function(player, param)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- overwrite this function on your server with a custom one that checks the
|
|
||||||
-- input to your formspec above
|
|
||||||
yl_speak_up.input_fs_action_custom = function(player, formname, fields)
|
|
||||||
-- back from error_msg? then show the formspec again
|
|
||||||
if(fields.back_from_error_msg) then
|
|
||||||
yl_speak_up.show_fs(player, "action_custom", nil)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local pname = player:get_player_name()
|
|
||||||
local a_id = yl_speak_up.speak_to[pname].a_id
|
|
||||||
if(fields.back_to_talk) then
|
|
||||||
-- the action failed
|
|
||||||
yl_speak_up.execute_next_action(player, a_id, false)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
if(fields.finished_action) then
|
|
||||||
-- the action was a success
|
|
||||||
yl_speak_up.execute_next_action(player, a_id, true)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
-- else show a message to the player that he ought to decide
|
|
||||||
yl_speak_up.show_fs(player, "msg", {
|
|
||||||
input_to = "yl_speak_up:action_custom",
|
|
||||||
formspec = "size[7,1.0]"..
|
|
||||||
"label[0.2,-0.2;"..
|
|
||||||
"Please click either on \"Stare back\" or \"Back to talk\"!]"..
|
|
||||||
"button[2,0.5;1.5,0.9;back_from_error_msg;Back]"})
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- overwrite this function on your server with a custom one that shows the formspec
|
|
||||||
-- that you want!
|
|
||||||
yl_speak_up.get_fs_action_custom = function(player, param)
|
|
||||||
local pname = player:get_player_name()
|
|
||||||
local dialog = yl_speak_up.speak_to[pname].dialog
|
|
||||||
return "size[8.5,4.0]"..
|
|
||||||
"button[0.2,0.0;2.0,0.9;back_to_talk;Back to talk]"..
|
|
||||||
"button[4.75,0.0;3.0,0.9;finished_action;Stare back]"..
|
|
||||||
|
|
||||||
"tooltip[back_to_talk;Click here if you want the action to FAIL.]"..
|
|
||||||
"tooltip[finished_action;Click here if you want the action to be a SUCCESS.]"..
|
|
||||||
"label[0.5,1.7;"..minetest.formspec_escape(
|
|
||||||
"["..(dialog.n_npc or "- ? -").." stares expectantly at you.]").."]"..
|
|
||||||
"label[0.5,2.5;Your custom parameter is:]"..
|
|
||||||
"label[1.5,3.0;"..minetest.formspec_escape(tostring(param)).."]"..
|
|
||||||
"label[0.5,3.5;Overwrite this function with a custom one!]"
|
|
||||||
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_actions = function(player, formname, fields)
|
yl_speak_up.input_fs_edit_actions = function(player, formname, fields)
|
||||||
|
@ -694,16 +694,6 @@ yl_speak_up.execute_effect = function(player, n_id, o_id, r)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- a custom function that the server can override
|
|
||||||
yl_speak_up.effect_custom = function(player, param)
|
|
||||||
minetest.chat_send_player(player:get_player_name(),
|
|
||||||
"Executing custom effect with parameter \""..tostring(param).."\"..")
|
|
||||||
-- return true if your effect executed successfuly, and false if not
|
|
||||||
-- (only relevant for following on_failure effects)
|
|
||||||
return true
|
|
||||||
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)
|
||||||
|
@ -408,15 +408,6 @@ yl_speak_up.eval_precondition = function(player, n_id, p)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- a custom function that the server can override
|
|
||||||
yl_speak_up.precondition_custom = function(player, param)
|
|
||||||
minetest.chat_send_player(player:get_player_name(),
|
|
||||||
"Checking custom precondition with parameter \""..tostring(param).."\"..")
|
|
||||||
-- return weather your precondition is fulfilled (true) or not (false)
|
|
||||||
return true
|
|
||||||
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_preconditions = function(player, formname, fields)
|
yl_speak_up.input_fs_edit_preconditions = function(player, formname, fields)
|
||||||
|
@ -2967,39 +2967,6 @@ yl_speak_up.may_edit_npc = function(player, n_id)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- replace some variables in the text the NPC speaks and which the player can use to reply
|
|
||||||
-- pname: the name of the player that is talking to the NPC
|
|
||||||
yl_speak_up.replace_vars_in_text = function(text, dialog, pname)
|
|
||||||
local subs = {
|
|
||||||
MY_NAME = dialog.n_npc,
|
|
||||||
NPC_NAME = dialog.n_npc,
|
|
||||||
OWNER_NAME = dialog.npc_owner,
|
|
||||||
PLAYER_NAME = pname,
|
|
||||||
}
|
|
||||||
|
|
||||||
local day_time_name = "day"
|
|
||||||
local day_time = minetest.get_timeofday()
|
|
||||||
if(day_time < 0.5) then
|
|
||||||
day_time_name = "morning"
|
|
||||||
elseif(day_time < 0.75) then
|
|
||||||
day_time_name = "afternoon"
|
|
||||||
else
|
|
||||||
day_time_name = "evening"
|
|
||||||
end
|
|
||||||
subs.GOOD_DAY = "Good "..day_time_name
|
|
||||||
subs.good_DAY = "good "..day_time_name
|
|
||||||
|
|
||||||
-- Note: the $ char is a special one. It needs to be escaped with %$ in lua.
|
|
||||||
-- Note: when substitution argument is a table, we look up
|
|
||||||
-- substitutions in it using substring captured by "()" in
|
|
||||||
-- pattern. "[%a_]+" means one or more letter or underscore.
|
|
||||||
-- If lookup returns nil, then no substitution is made.
|
|
||||||
text = string.gsub(text, "%$([%a_]+)%$", subs)
|
|
||||||
|
|
||||||
return text
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- log changes done by players or admins to NPCs
|
-- log changes done by players or admins to NPCs
|
||||||
yl_speak_up.log_change = function(pname, n_id, text)
|
yl_speak_up.log_change = function(pname, n_id, text)
|
||||||
-- make sure all variables are defined
|
-- make sure all variables are defined
|
||||||
|
6
init.lua
6
init.lua
@ -21,6 +21,12 @@ dofile(modpath .. "privs.lua")
|
|||||||
dofile(modpath .. "show_fs.lua")
|
dofile(modpath .. "show_fs.lua")
|
||||||
-- ask if the player wants to save, discard or go back in edit mode
|
-- ask if the player wants to save, discard or go back in edit mode
|
||||||
dofile(modpath .. "fs_save_or_discard_or_back.lua")
|
dofile(modpath .. "fs_save_or_discard_or_back.lua")
|
||||||
|
-- as the name says: a collection of custom functions that you can
|
||||||
|
-- override on your server or in your game to suit your needs;
|
||||||
|
-- Note: No special privs are needed to call custom functions. But...
|
||||||
|
-- of course you can change them only if you have access to
|
||||||
|
-- the server's file system or can execute lua code.
|
||||||
|
dofile(modpath .. "custrom_functions_you_can_override.lua")
|
||||||
-- common functions for editing preconditions and effects
|
-- common functions for editing preconditions and effects
|
||||||
dofile(modpath .. "fs_edit_general.lua")
|
dofile(modpath .. "fs_edit_general.lua")
|
||||||
-- edit preconditions (can be reached through edit options dialog)
|
-- edit preconditions (can be reached through edit options dialog)
|
||||||
|
Loading…
Reference in New Issue
Block a user