mirror of
https://gitea.your-land.de/Sokomine/yl_speak_up.git
synced 2025-06-19 05:38:02 +02:00
119 lines
4.3 KiB
Lua
119 lines
4.3 KiB
Lua
|
|
-- 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]"..
|
|
"button[4.75,0.8;3.0,0.9;failed_action;Fail to stare back]"..
|
|
"tooltip[back_to_talk;Click here if you want to abort/cancel.]"..
|
|
"tooltip[failed_action;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 was aborted
|
|
yl_speak_up.execute_next_action(player, a_id, nil)
|
|
return
|
|
end
|
|
if(fields.failed_action) 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
|
|
|