95 lines
4.1 KiB
Lua
95 lines
4.1 KiB
Lua
|
|
-- requires mail.send from the mail mod
|
|
|
|
-- NPC can send out mails in order to sum up a quest state or complex step
|
|
-- - or just to inform their owner that they ran out of stock
|
|
-- There is also a similar action defined in another file. The action
|
|
-- allows the player that talks to the NPC to enter his/her own mailtext.
|
|
-- The *effect* here requires that the text has been configured in advance.
|
|
|
|
-- define the custom effect named "send_mail"
|
|
local effect_send_mail = {
|
|
-- this information is necessary for allowing to add this as an effect to an option
|
|
description = "Send a preconfigured mail via the mail_mod mod for quest state etc.",
|
|
-- define the parameters that can be set when the action is added
|
|
param1_text = "To:",
|
|
param1_desc = "Who shall receive this mail? Default: $PLAYER_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$.",
|
|
-- the "From:" field will always be the name of the owner of the NPC
|
|
-- 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. Ought to give the player information\n"..
|
|
"which NPC sent this mail and why.\n"..
|
|
"Default: \"$NPC_NAME$ has a message from $OWNER_NAME$\"",
|
|
param6_text = "Mail text:",
|
|
param6_desc = "The actual text of the mail. Use the usual replacements to make the mail\n"..
|
|
"meaningful! You may want to use $VAR name_of_your_var$.\n"..
|
|
"Note: Use \\n to create a newline!",
|
|
}
|
|
|
|
|
|
|
|
-- the actual implementation of the function - run when the effect is executed
|
|
effect_send_mail.code = function(player, n_id, r)
|
|
local pname = player:get_player_name()
|
|
if(not(pname) or not(yl_speak_up.speak_to[pname])) 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(r.r_param1, dialog, pname)
|
|
local mail_from = yl_speak_up.replace_vars_in_text(r.r_param2, dialog, pname)
|
|
local mail_cc = yl_speak_up.replace_vars_in_text(r.r_param3, dialog, pname)
|
|
local mail_bcc = yl_speak_up.replace_vars_in_text(r.r_param4, dialog, pname)
|
|
local mail_subject = yl_speak_up.replace_vars_in_text(r.r_param5, dialog, pname)
|
|
local mail_text = yl_speak_up.replace_vars_in_text(r.r_param6, dialog, pname)
|
|
-- this is in reverse of the actions: the mail is usually sent to the player the
|
|
-- NPC is talking with - e.g. as a reminder of a quest status
|
|
if(not(mail_to) or mail_to == "") then
|
|
mail_to = pname
|
|
end
|
|
-- the mail always originates from the owner of the NPC
|
|
mail_from = dialog.npc_owner
|
|
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 "- ? -").." has a message from "..(dialog.npc_owner or "- ? -")
|
|
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 = "Message from "..tostring(dialog.n_npc or "- ? -")..":\n\n"..
|
|
table.concat(string.split(mail_text or "- no message -", "\\n"), "\n")
|
|
})
|
|
return success
|
|
end
|
|
|
|
|
|
if(minetest.global_exists("mail")
|
|
and type(mail) == "table"
|
|
and type(mail.send) == "function") then
|
|
-- only add this effect if the mail mod and the mail.send function exist
|
|
yl_speak_up.custom_functions_r_[ "send_mail" ] = effect_send_mail
|
|
end
|