added addons folder; added addon action send_mail
This commit is contained in:
parent
a85f0629c5
commit
9af492c07a
188
addons/action_send_mail.lua
Normal file
188
addons/action_send_mail.lua
Normal file
@ -0,0 +1,188 @@
|
||||
-- requires mail.send from the mail mod
|
||||
|
||||
-- sending a mail allows to give feedback - and for players to ask the NPC owner to add more texts
|
||||
-- and let the NPC answer to further questions
|
||||
|
||||
-- define the custom action named "send_mail"
|
||||
local action_send_mail = {
|
||||
-- this information is necessary for allowing to add this as an action to an option
|
||||
description = "Send a mail via the mail_mod mod for feedback/ideas/etc.",
|
||||
-- define the parameters that can be set when the action is added
|
||||
param1_text = "To:",
|
||||
param1_desc = "Who shall receive this mail? Default: $OWNER_NAME$."..
|
||||
"\nNote: Leave fields empty for the default values."..
|
||||
"\nNote: All parameters allow to use the usual replacements like $NPC_NAME$,"..
|
||||
"\n\t$OWNER_NAME$, $PLAYER_NAME$, $VAR name_of_your_var$, $PROP name_of_prop$.",
|
||||
param2_text = "From:",
|
||||
param2_desc = "Who shall be listed as the sender of this mail?\n"..
|
||||
"The player talking to the NPC might be best as it makes answering easier.\n"..
|
||||
"Default: $PLAYER_NAME$. Also allowed: $OWNER_NAME$.",
|
||||
param3_text = "cc:",
|
||||
param3_desc = "(optional) Whom to send a carbon copy to?"..
|
||||
"\nThis is useful if multiple players may edit this NPC."..
|
||||
"\nIt is also possible to send a copy to $PLAYER_NAME$.",
|
||||
param4_text = "bcc:",
|
||||
param4_desc = "(optional) Who gets set in the bcc?",
|
||||
param5_text = "Subject:",
|
||||
param5_desc = "The subject of the mail. The player talking to the NPC\n"..
|
||||
"will provide the actual text for the body of the mail.\n"..
|
||||
"Default: \"$NPC_NAME$: regarding $PLAYER_NAME$\"",
|
||||
}
|
||||
|
||||
|
||||
-- this function will show a formspec whenever our custom action "send_mail" is executed
|
||||
--yl_speak_up.custom_functions_a_[ "send_mail" ].code = function(player, n_id, a)
|
||||
action_send_mail.code = function(player, n_id, a)
|
||||
local pname = player:get_player_name()
|
||||
-- sending the mail can either succeed or fail; pdata.tmp_mail_* variables store the result
|
||||
local pdata = yl_speak_up.speak_to[pname]
|
||||
-- just the normal dialog data from the NPC (contains name of the NPC and owner)
|
||||
local dialog = yl_speak_up.speak_to[pname].dialog
|
||||
local npc_name = "- (this NPC) -"
|
||||
local owner_name = "- (his owner) -"
|
||||
if(dialog) then
|
||||
-- the NPC is the one "forwarding" the message (so that the receiver will know
|
||||
-- *which* NPC was talked to)
|
||||
npc_name = minetest.formspec_escape(dialog.n_npc or "- ? -")
|
||||
-- usually the owner is the receiver
|
||||
owner_name = minetest.formspec_escape(a.a_param1 or dialog.npc_owner or "- ? ")
|
||||
end
|
||||
|
||||
-- the mail was already sent successful; we still return once to this formspec so that
|
||||
-- the player gets this information and can finish the action successfully
|
||||
if(pdata and pdata.tmp_mail_to and pdata.tmp_mail_success) then
|
||||
local mail_to = minetest.formspec_escape(pdata.tmp_mail_to or "?")
|
||||
-- unset temporary variables that are no longer needed
|
||||
pdata.tmp_mail_success = nil
|
||||
pdata.tmp_mail_error = nil
|
||||
pdata.tmp_mail_to = nil
|
||||
return table.concat({
|
||||
"size[20,3]label[0.2,0.7;",
|
||||
npc_name,
|
||||
" has sent a mail containing your text to ",
|
||||
mail_to,
|
||||
" and awaits further instructions."..
|
||||
"\nPlease be patient and wait for a reply. This may take some time as ",
|
||||
mail_to,
|
||||
" has to receive, read and answer the mail.]",
|
||||
-- offer a button to finally complete the action successfully
|
||||
"button[4,2;6.8,0.9;finished_action;Ok. I'll wait.]",
|
||||
}, "")
|
||||
|
||||
-- we tried to send the mail - and an error occoured
|
||||
elseif(pdata and pdata.tmp_mail_to and pdata.tmp_mail_error) then
|
||||
local mail_to = minetest.formspec_escape(pdata.tmp_mail_to or "?")
|
||||
local error_msg = minetest.formspec_escape(pdata.tmp_mail_error or "?")
|
||||
-- unset temporary variables that are no longer needed
|
||||
pdata.tmp_mail_success = nil
|
||||
pdata.tmp_mail_error = nil
|
||||
pdata.tmp_mail_to = nil
|
||||
return table.concat({
|
||||
"size[20,8]label[0.2,0.7;",
|
||||
npc_name,
|
||||
" FAILED to sent a mail containing your text to ",
|
||||
mail_to,
|
||||
" in order to get help!]",
|
||||
"textarea[0.2,1.8;19.6,5;;The following error(s) occourd:;",
|
||||
error_msg,
|
||||
"]",
|
||||
-- the action can no longer be completed successfully; best to back to talk
|
||||
"button[7,7.0;6.0,0.9;back_to_talk;Back to talk]",
|
||||
}, "")
|
||||
end
|
||||
|
||||
-- the mail has not been sent yet; show the normal formspec asking for text input
|
||||
return table.concat({"size[20,8.5]label[4,0.7;Send a message to ",
|
||||
npc_name,
|
||||
"]",
|
||||
"button[17.8,0.2;2.0,0.9;back_to_talk;Back]",
|
||||
"label[0.2,7.0;Note: ",
|
||||
npc_name,
|
||||
" will send a mail to ",
|
||||
minetest.formspec_escape(a.a_param1 or dialog.npc_owner or "- ? "),
|
||||
", requesting instructions how to respond. This may take a while.]",
|
||||
"button[3.6,7.5;6.0,0.9;back_to_talk;Abort and go back]",
|
||||
"button[10.2,7.5;6.0,0.9;send_mail;Send this message]",
|
||||
-- read-only
|
||||
"textarea[0.2,1.8;19.6,5;message_text;Write your message for ",
|
||||
npc_name,
|
||||
" here, and then click on \"Send this message\":;",
|
||||
"",
|
||||
"]",
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
-- whenever our formspec above for the custom action "send_mail" received input (player clicked
|
||||
-- on a button), this function is called
|
||||
action_send_mail.code_input_handler = function(player, n_id, a, formname, fields)
|
||||
local pname = player:get_player_name()
|
||||
if(not(pname) or not(yl_speak_up.speak_to[pname])) then
|
||||
return fields
|
||||
end
|
||||
-- sending was aborted or there was no text to send
|
||||
if( not(fields.message_text) or fields.message_text == ""
|
||||
or not(fields.send_mail) or fields.send_mail == "") then
|
||||
return fields
|
||||
end
|
||||
local dialog = yl_speak_up.speak_to[pname].dialog
|
||||
|
||||
-- prepare data/parameters for the mail we want to send
|
||||
-- $PLAYER_NAME$, $OWNER_NAME$, $NPC_NAME$, $VAR *$ $PROP *$ are allowed replacements!!
|
||||
local mail_to = yl_speak_up.replace_vars_in_text(a.a_param1, dialog, pname)
|
||||
local mail_from = yl_speak_up.replace_vars_in_text(a.a_param2, dialog, pname)
|
||||
local mail_cc = yl_speak_up.replace_vars_in_text(a.a_param3, dialog, pname)
|
||||
local mail_bcc = yl_speak_up.replace_vars_in_text(a.a_param4, dialog, pname)
|
||||
local mail_subject = yl_speak_up.replace_vars_in_text(a.a_param5, dialog, pname)
|
||||
if(not(mail_to) or mail_to == "") then
|
||||
mail_to = dialog.npc_owner
|
||||
end
|
||||
-- make sure the sender is not forged; we allow EITHER the name of the owner of the NPC
|
||||
-- OR the name of the player currently talking to the npc
|
||||
if(not(mail_from) or mail_from == "" or mail_from ~= dialog.npc_owner) then
|
||||
mail_from = pname
|
||||
end
|
||||
if(not(mail_cc) or mail_cc == "") then
|
||||
mail_cc = nil
|
||||
end
|
||||
if(not(mail_bcc) or mail_bcc == "") then
|
||||
mail_bcc = nil
|
||||
end
|
||||
if(not(mail_subject) or mail_subject == "") then
|
||||
mail_subject = (dialog.n_npc or "- ? -")..": regarding "..pname
|
||||
end
|
||||
-- actually send the mail via the mail_mod mod
|
||||
local success, error_msg = mail.send({
|
||||
from = mail_from,
|
||||
to = mail_to,
|
||||
cc = mail_cc,
|
||||
bcc = mail_bcc,
|
||||
subject = mail_subject,
|
||||
body = "Dear "..tostring(dialog.npc_owner)..",\n\n"..tostring(pname)..
|
||||
" asked me something I don't know the answer to. Hope you can help? "..
|
||||
"This is the request:\n\n"..
|
||||
tostring(fields.message_text or "- no message -")
|
||||
})
|
||||
-- Sending this mail was either successful or not. We want to display this to the player.
|
||||
-- Therefore, we set fields.back_from_error_msg. This tells the calling function that it
|
||||
-- needs to display the formspec generated by the function
|
||||
-- yl_speak_up.custom_functions_a_[ "send_mail" ].code
|
||||
-- again.
|
||||
fields.back_from_error_msg = true
|
||||
-- The function displaying the formspec needs to know that it has to display the result
|
||||
-- of sending the mail now. We need to store these variables somewhere.
|
||||
local pdata = yl_speak_up.speak_to[pname]
|
||||
pdata.tmp_mail_success = success
|
||||
pdata.tmp_mail_error = error_msg
|
||||
pdata.tmp_mail_to = mail_to
|
||||
-- the function has to return fields
|
||||
return fields
|
||||
end
|
||||
|
||||
|
||||
if(minetest.global_exists("mail")
|
||||
and type(mail) == "table"
|
||||
and type(mail.send) == "function") then
|
||||
-- only add this action if the mail mod and the mail.send function exist
|
||||
yl_speak_up.custom_functions_a_[ "send_mail" ] = action_send_mail
|
||||
end
|
16
addons/load_addons.lua
Normal file
16
addons/load_addons.lua
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
-- this file lods addons - actions, preconditions, effects and other things
|
||||
-- - which may not be of intrest to all games
|
||||
-- - and which usually require other mods to be installed in order to work
|
||||
|
||||
local path_addons = yl_speak_up.modpath..DIR_DELIM.."addons"..DIR_DELIM
|
||||
|
||||
|
||||
-- the action "send_mail" requires the "mail" mod and allows to send
|
||||
-- ingame mails via actions
|
||||
if(minetest.global_exists("mail")
|
||||
and type(mail) == "table"
|
||||
and type(mail.send) == "function") then
|
||||
|
||||
dofile(path_addons .. "action_send_mail.lua")
|
||||
end
|
4
init.lua
4
init.lua
@ -222,6 +222,10 @@ yl_speak_up.reload = function(modpath, log_entry)
|
||||
dofile(modpath .. "api/api_npc_list.lua")
|
||||
dofile(modpath .. "fs/fs_npc_list.lua")
|
||||
|
||||
-- this may load custom things like preconditions, actions, effects etc.
|
||||
-- which may depend on the existance of other mods
|
||||
dofile(modpath .. "addons/load_addons.lua")
|
||||
|
||||
-- some general functions that are useful for mobs_redo
|
||||
-- (react to right-click, nametag color etc.)
|
||||
-- only gets loaded if mobs_redo (mobs) exists as mod
|
||||
|
Loading…
Reference in New Issue
Block a user