From ab9745ee0106059476a3b31d53e671a0c8fa3fca Mon Sep 17 00:00:00 2001 From: Sokomine Date: Wed, 14 Sep 2022 22:18:09 +0200 Subject: [PATCH] added npc_talk_reload command --- init.lua | 184 +++++++++++++++++++++++++--------------------- register_once.lua | 14 ++++ 2 files changed, 116 insertions(+), 82 deletions(-) diff --git a/init.lua b/init.lua index c94f3d2..7d09010 100644 --- a/init.lua +++ b/init.lua @@ -29,84 +29,104 @@ yl_speak_up.fs_version = {} yl_speak_up.custom_server_functions = {} --- the server-specific configuration -dofile(modpath .. "config.lua") --- logging and showing the log -dofile(modpath .. "fs_show_log.lua") --- players *and* npc need privs for certain things; this here handles the NPC side of things -dofile(modpath .. "npc_privs.lua") --- add generic dialogs -dofile(modpath .. "add_generic_dialogs.lua") --- handle on_player_receive_fields and showing of formspecs -dofile(modpath .. "show_fs.lua") --- general decoration part for main formspec, trade window etc. -dofile(modpath .. "fs_decorated.lua") --- the formspec and input handling for the main dialog -dofile(modpath .. "fs_talkdialog.lua") --- ask if the player wants to save, discard or go back in edit mode -dofile(modpath .. "fs_save_or_discard_or_back.lua") --- the player wants to change something regarding the dialog -dofile(modpath .. "edit_mode_apply_changes.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 .. "custom_functions_you_can_override.lua") --- execute preconditions, actions and effects -dofile(modpath .. "exec_eval_preconditions.lua") -dofile(modpath .. "exec_actions.lua") -dofile(modpath .. "exec_apply_effects.lua") --- some helper functions for formatting text for a formspec talbe -dofile(modpath .. "print_as_table.lua") --- create i.e. a dropdown list of player names -dofile(modpath .. "formspec_helpers.lua") --- handle alternate text for dialogs -dofile(modpath .. "fs_alternate_text.lua") --- debugging - extended information about what (your own) NPC does -dofile(modpath .. "npc_talk_debug.lua") --- execute lua code directly (preconditions and effects) - requires priv -dofile(modpath .. "eval_and_execute_function.lua") --- common functions for editing preconditions and effects -dofile(modpath .. "fs_edit_general.lua") --- edit preconditions (can be reached through edit options dialog) -dofile(modpath .. "fs_edit_preconditions.lua") --- edit actions (can be reached through edit options dialog) -dofile(modpath .. "fs_edit_actions.lua") --- edit effects (can be reached through edit options dialog) -dofile(modpath .. "fs_edit_effects.lua") --- edit options dialog (detailed configuration of options in edit mode) -dofile(modpath .. "fs_edit_options_dialog.lua") --- set name, description and owner (owner only with npc_talk_master priv) -dofile(modpath .. "fs_initial_config.lua") --- inspect and accept items the player gave to the NPC -dofile(modpath .. "fs_player_offers_item.lua") --- inventory management, trading and handling of quest items: -dofile(modpath .. "inventory.lua") --- limit how much the NPC shall buy and sell -dofile(modpath .. "fs_trade_limit.lua") -dofile(modpath .. "fs_edit_trade_limit.lua") --- trade one item(stack) against one other item(stack) -dofile(modpath .. "trade_simple.lua") --- just click on a button to buy items from the trade list -dofile(modpath .. "fs_trade_via_buy_button.lua") --- easily accessible list of all trades the NPC offers -dofile(modpath .. "fs_trade_list.lua") --- as the name says: list which npc acesses a variable how and in which context -dofile(modpath .. "fs_get_list_of_usage_of_variable.lua") --- show which values are stored for which player in a quest variable -dofile(modpath .. "fs_show_all_var_values.lua") --- manage quest variables: add, delete, manage access rights etc. -dofile(modpath .. "fs_manage_variables.lua") --- handle variables for quests for player-owned NPC -dofile(modpath .. "quest_api.lua") --- setting skin, wielded item etc. -dofile(modpath .. "fs_fashion.lua") --- properties for NPC without specific dialogs that want to make use of --- some generic dialogs -dofile(modpath .. "fs_properties.lua") --- the main functionality of the mod -dofile(modpath .. "functions.lua") +-- the functions in here can be reloaded without restarting the server +-- log_entry: what to write in the logfile +yl_speak_up.reload = function(modpath, log_entry) + -- the server-specific configuration + dofile(modpath .. "config.lua") + -- logging and showing the log + dofile(modpath .. "fs_show_log.lua") + -- players *and* npc need privs for certain things; this here handles the NPC side of things + dofile(modpath .. "npc_privs.lua") + -- add generic dialogs + dofile(modpath .. "add_generic_dialogs.lua") + -- handle on_player_receive_fields and showing of formspecs + dofile(modpath .. "show_fs.lua") + -- general decoration part for main formspec, trade window etc. + dofile(modpath .. "fs_decorated.lua") + -- the formspec and input handling for the main dialog + dofile(modpath .. "fs_talkdialog.lua") + -- ask if the player wants to save, discard or go back in edit mode + dofile(modpath .. "fs_save_or_discard_or_back.lua") + -- the player wants to change something regarding the dialog + dofile(modpath .. "edit_mode_apply_changes.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 .. "custom_functions_you_can_override.lua") + -- execute preconditions, actions and effects + dofile(modpath .. "exec_eval_preconditions.lua") + dofile(modpath .. "exec_actions.lua") + dofile(modpath .. "exec_apply_effects.lua") + -- some helper functions for formatting text for a formspec talbe + dofile(modpath .. "print_as_table.lua") + -- create i.e. a dropdown list of player names + dofile(modpath .. "formspec_helpers.lua") + -- handle alternate text for dialogs + dofile(modpath .. "fs_alternate_text.lua") + -- debugging - extended information about what (your own) NPC does + dofile(modpath .. "npc_talk_debug.lua") + -- execute lua code directly (preconditions and effects) - requires priv + dofile(modpath .. "eval_and_execute_function.lua") + -- common functions for editing preconditions and effects + dofile(modpath .. "fs_edit_general.lua") + -- edit preconditions (can be reached through edit options dialog) + dofile(modpath .. "fs_edit_preconditions.lua") + -- edit actions (can be reached through edit options dialog) + dofile(modpath .. "fs_edit_actions.lua") + -- edit effects (can be reached through edit options dialog) + dofile(modpath .. "fs_edit_effects.lua") + -- edit options dialog (detailed configuration of options in edit mode) + dofile(modpath .. "fs_edit_options_dialog.lua") + -- set name, description and owner (owner only with npc_talk_master priv) + dofile(modpath .. "fs_initial_config.lua") + -- inspect and accept items the player gave to the NPC + dofile(modpath .. "fs_player_offers_item.lua") + -- inventory management, trading and handling of quest items: + dofile(modpath .. "inventory.lua") + -- limit how much the NPC shall buy and sell + dofile(modpath .. "fs_trade_limit.lua") + dofile(modpath .. "fs_edit_trade_limit.lua") + -- trade one item(stack) against one other item(stack) + dofile(modpath .. "trade_simple.lua") + -- just click on a button to buy items from the trade list + dofile(modpath .. "fs_trade_via_buy_button.lua") + -- easily accessible list of all trades the NPC offers + dofile(modpath .. "fs_trade_list.lua") + -- as the name says: list which npc acesses a variable how and in which context + dofile(modpath .. "fs_get_list_of_usage_of_variable.lua") + -- show which values are stored for which player in a quest variable + dofile(modpath .. "fs_show_all_var_values.lua") + -- manage quest variables: add, delete, manage access rights etc. + dofile(modpath .. "fs_manage_variables.lua") + -- handle variables for quests for player-owned NPC + dofile(modpath .. "quest_api.lua") + -- setting skin, wielded item etc. + dofile(modpath .. "fs_fashion.lua") + -- properties for NPC without specific dialogs that want to make use of + -- some generic dialogs + dofile(modpath .. "fs_properties.lua") + -- the main functionality of the mod + dofile(modpath .. "functions.lua") + + -- initialize and load all registered generic dialogs + yl_speak_up.load_generic_dialogs() + + if(log_entry) then + minetest.log("action","[MOD] yl_speak_up "..tostring(log_entry)) + end +end + + +-- load all those files that can also be reloaded without a server restart +-- load here for the first time: +yl_speak_up.reload(modpath, "loaded re-loadable part for the first time") + +-- these functions here mostly cannot be reloaded without a server restart +-- because they register tools and entities +-- -- the staffs (requires npc_master priv) if(yl_speak_up.enable_staff_based_editing) then -- editing the npc with the staff: @@ -121,7 +141,10 @@ if(yl_speak_up.enable_yl_mobs) then -- the actual mobs, using mobs_redo dofile(modpath .. "mobs.lua") end ---dofile(modpath .. "debug.lua") + +-- register all the necessary things; this ought to be done only once +-- (although most might work without a server restart as well; but we +-- better want to be on the safe side here) dofile(modpath .. "register_once.lua") minetest.mkdir(yl_speak_up.worldpath..yl_speak_up.path) @@ -131,8 +154,5 @@ minetest.mkdir(yl_speak_up.worldpath..yl_speak_up.log_path) yl_speak_up.mob_table = yl_speak_up.init_mob_table() or {} --- initialize and load all registered generic dialogs -yl_speak_up.load_generic_dialogs() minetest.log("action","[MOD] yl_speak_up loaded") - diff --git a/register_once.lua b/register_once.lua index 1f99f92..29207eb 100644 --- a/register_once.lua +++ b/register_once.lua @@ -136,6 +136,20 @@ minetest.register_chatcommand( 'npc_talk_style', { }) +-- most of the files of this mod can be reloaded without the server having to +-- be restarted; +-- handled in init.lua +minetest.register_chatcommand( 'npc_talk_reload', { + description = "Reloads most of the files of this mod so that you can update their code ".. + "without having to restart the server. Requires the privs priv.", + privs = {privs = true}, + func = function(pname, param) + minetest.chat_send_player(pname, "Reloading most files from mod yl_speak_up...") + yl_speak_up.reload(yl_speak_up.modpath, "reloaded by "..tostring(pname)) + minetest.chat_send_player(pname, "Reloaded successfully.") + end +}) + ----------------------------------------------------------------------------- -- some node positions can be set by punching a node -----------------------------------------------------------------------------