-- Note: This config file is not intended to be edited directly. -- Like all my mods, it foremost provides an interface/api so -- that another mod (i.e. a server specific one written by you) -- can call functions here and do the settings. -- -- That way you can update this mod easily and keep your settings -- in a seperate mod and even override functions there if you -- want. -- -- So please use a seperate config mod! -- enable/disable the original staff-based editing -- Note: The staffs can only edit part of what the NPC can do. They can even break the NPC. -- Set this only if you need to force-mute an NPC or something like that. yl_speak_up.enable_staff_based_editing = true -- enable/disable special mobs in the yl_speak_up-namespace (mobs_redo based) yl_speak_up.enable_yl_mobs = true -- Do the NPCs talk right after they spawned? yl_speak_up.talk_after_spawn = true -- diffrent NPC may use diffrent models -- IMPORTANT: If you want to support an NPC with a diffrent model, provide -- an entry in this array! Else setting its skin will fail horribly. yl_speak_up.mesh_data = {} yl_speak_up.mesh_data["error"] = { texture_index = 1, can_show_wielded_items = false, } -- this model is used by mobs_npc yl_speak_up.mesh_data["mobs_character.b3d"] = { -- the first texture is the skin texture_index = 1, -- there is no support for capes or wielded items can_show_wielded_items = false, -- textures are applied directly textures_to_skin = false, } yl_speak_up.mesh_data["skinsdb_3d_armor_character_5.b3d"] = { -- the second texture is the skin texture_index = 2, -- they can wear and show capes and wield items can_show_wielded_items = true, -- call textures2skin in order to convert the textures (wielded items) textures_to_skin = true, } yl_speak_up.mesh_data["mobs_sheep.b3d"] = { texture_index = 1, } yl_speak_up.mesh_data["mobs_cow.b3d"] = { texture_index = 1, } -- diffrent mob types may want to wear diffrent skins - even if they share the -- same model/mesh yl_speak_up.mob_skins = {} -- some models support capes yl_speak_up.mob_capes = {} -- mobs_redo usually uses 64 x 32 textures: yl_speak_up.mob_skins["mobs_npc:npc"] = { "mobs_npc.png", "mobs_npc2.png", "mobs_npc3.png", "mobs_npc4.png", "mobs_npc_baby.png"} yl_speak_up.mob_skins["mobs_npc:igor"] = { "mobs_igor.png", "mobs_igor2.png", "mobs_igor3.png", "mobs_igor4.png", "mobs_igor5.png", "mobs_igor6.png", "mobs_igor7.png", "mobs_igor8.png"} yl_speak_up.mob_skins["mobs_npc:trader"] = { "mobs_trader.png", "mobs_trader2.png", "mobs_trader3.png"} yl_speak_up.mob_skins["mobs_animal:sheep_white"] = { "mobs_sheep_base.png^(mobs_sheep_wool.png^[colorize:#abababc0)"} yl_speak_up.mob_skins["mobs_animal:sheep_red"] = { "mobs_sheep_base.png^(mobs_sheep_wool.png^[colorize:#ff0000a0)"} yl_speak_up.mob_skins["mobs_animal:cow"] = { "mobs_cow.png", "mobs_cow2.png"} -- this here uses 64 x 64 textures: yl_speak_up.mob_skins["yl_speak_up:human"] = { "yl_speak_up_main_default.png", "some_skin.png", "2022_06_28_the-lonley-lumberjack-20494635.png"} -- which capes can an NPC wear? yl_speak_up.mob_capes["yl_speak_up:human"] = { "yl_npc_cape_default.png"} -- some mobs (in particular from mobs_redo) can switch between follow (their owner), -- stand and walking when they're right-clicked; emulate this behaviour for NPC in -- this list yl_speak_up.emulate_orders_on_rightclick = { "mobs_npc:npc", "mobs_npc:igor", "mobs_npc:trader", "mobs_animal:sheep_white", "mobs_animal:sheep_red", "mobs_animal:cow"} -- some properties from external NPC can be edited and changed (they have the self. prefix), -- and it is possible to react to property changes with handlers; -- key: name of the property (i.e. self.order); -- value: function that reacts to attempts to change the property -- For an example, see custom_functions_you_can_override.lua yl_speak_up.custom_property_handler = {} -- What shall we call the folder all the dialogs will reside in? yl_speak_up.path = "yl_speak_up_dialogs" -- What shall we call the folder all the inventories of the NPC will reside in? yl_speak_up.inventory_path = "yl_speak_up_inventories" -- Where shall player-specific varialbes (usually quest states) be stored? yl_speak_up.player_vars_save_file = "yl_speak_up_player_vars" -- Where to store the logfiles for the individual NPC yl_speak_up.log_path = "yl_speak_up_log" -- amount of time in seconds that has to have passed before the above file will be saved again -- (more time can pass if no variable is changed) yl_speak_up.player_vars_min_save_time = 60 -- An option may be choosen automaticly without the player having to click if all of its -- preconditions are true and the mode is set to automatic. Now, if the choosen target -- dialog has an option that also uses this automatic mode, infinite loops might be -- created. This option exists to avoid them. Any small value will do. yl_speak_up.max_allowed_recursion_depth = 5 -- Texts yl_speak_up.message_button_option_exit = "Farewell!" yl_speak_up.message_button_option_prerequisites_not_met_default = "Locked answer" yl_speak_up.message_tool_taken_because_of_lacking_priv = "We took the tool from you and logged this event. You used an admin item while lacking the neccessary priv npc_master" yl_speak_up.text_new_dialog_id = "New dialog" yl_speak_up.text_new_option_id = "New option" yl_speak_up.text_new_prerequisite_id = "New prerequisite" yl_speak_up.text_new_result_id = "New result" yl_speak_up.text_version_warning = "You are using an outdated Minetest version!\nI will have a hard time talking to you properly, but I will try my best.\nYou can help me by upgrading to at least 5.3.0!\nGet it at https://minetest.net/downloads" yl_speak_up.infotext = "Rightclick to talk" -- how many buttons will be shown simultaneously without having to scroll? yl_speak_up.max_number_of_buttons = 7 -- how many buttons can be added to one dialog? yl_speak_up.max_number_of_options_per_dialog = 15 -- how many rows and cols shall be used for the trade overview list? yl_speak_up.trade_max_rows = 10 yl_speak_up.trade_max_cols = 12 -- how many prerequirements can the player define per dialog option? yl_speak_up.max_prerequirements = 12 -- how many actions can there be per dialog option? -- for now, more than one doesn't make sense yl_speak_up.max_actions = 1 -- how many effects can the player define per dialog option? yl_speak_up.max_result_effects = 6 -- these blacklists forbid NPC to use effects on blocks; format: -- yl_speak_up.blacklist_effect_on_block_interact[ node_name ] = true -- forbids all interactions; -- use this if a node isn't prepared for a type of interaction with -- an NPC and cannot be changed easily; -- Example: yl_speak_up.blacklist_effect_on_block_right_click["default:chest"] = true yl_speak_up.blacklist_effect_on_block_interact = {} yl_speak_up.blacklist_effect_on_block_place = {} yl_speak_up.blacklist_effect_on_block_dig = {} yl_speak_up.blacklist_effect_on_block_punch = {} yl_speak_up.blacklist_effect_on_block_right_click = {} -- taking something out of the inventory of a block or putting something in yl_speak_up.blacklist_effect_on_block_put = {} yl_speak_up.blacklist_effect_on_block_take = {} -- If some items are for some reasons not at all acceptable as quest items, -- blacklist them here. The data structure is the same as for the tables above. yl_speak_up.blacklist_action_quest_item = {} -- NPC can send a message to all players as an effect; -- this text will be put in front of this message so that you and your players -- know that it originated from an NPC (just make sure this returns a string) yl_speak_up.chat_all_prefix = minetest.colorize("#0000FF", "[NPC] ") -- the NPC will use this color when sending a chat message yl_speak_up.chat_all_color = "#AAAAFF" -- it's possible to prevent players from trying actions (i.e. npc_gives, text_input, ..) too often; -- if no special text is set, this one will be shown (tab "Limit guessing:" in edit options menu) yl_speak_up.standard_text_if_action_failed_too_often = "You have tried so many times. I'm tired! ".. "Come back when you really know the answer - but not too soon.\n $TEXT$" -- it's also possible to prevent players from successfully executing actions too often (after all the -- quest items are created from the finite NPC's inventory); this is the standard text that will be -- shown by default (tab "Limit repeating:" in edit options menu) yl_speak_up.standard_text_if_action_repeated_too_soon = "I don't have infinite ressources. If you lost ".. "something I gave you - come back later and we may talk again.\n$TEXT$" -- reading textures for your land NPCs local function read_skins_and_capes_from_folders(races) local temp = {} -- get the files out of modpath local mp_list = minetest.get_dir_list(yl_speak_up.modpath .. DIR_DELIM .. "textures", false) -- get the files out of worlddir local wp_list = minetest.get_dir_list( yl_speak_up.worldpath .. DIR_DELIM .. "worldmods" .. DIR_DELIM .. "yl_npc" .. DIR_DELIM .. "textures", false ) -- Let's join both lists. table.insert_all(temp, mp_list) table.insert_all(temp, wp_list) --[[ Let's see if the files are the ones we want. Format is yl_npc_main_name.png <-- Those are the ones we want yl_npc_cape_name.png yl_npc_item_name.png ]]-- for _, race in ipairs(races) do if(not(yl_speak_up.mob_skins["yl_speak_up:"..race])) then yl_speak_up.mob_skins["yl_speak_up:"..race] = {} end if(not(yl_speak_up.mob_capes["yl_speak_up:"..race])) then yl_speak_up.mob_capes["yl_speak_up:"..race] = {} end end for _, v in pairs(temp) do local s = string.split(v, "_") if s[1] == "yl" and s[2] == "npc" and s[3] == "main" then for i, race in ipairs(races) do table.insert(yl_speak_up.mob_skins["yl_speak_up:"..race], v) end end if s[1] == "yl" and s[2] == "npc" and s[3] == "cape" then for i, race in ipairs(races) do table.insert(yl_speak_up.mob_capes["yl_speak_up:"..race], v) end end end for _, race in ipairs(races) do if(#yl_speak_up.mob_skins["yl_speak_up:"..race] < 1) then yl_speak_up.mob_skins["yl_speak_up:"..race] = {"yl_speak_up_main_default.png"} end if(#yl_speak_up.mob_capes["yl_speak_up:"..race] < 1) then yl_speak_up.mob_capes["yl_speak_up:"..race] = {"yl_npc_cape_default.png"} end end end read_skins_and_capes_from_folders({"dwarf","elf","goblin","human","npc","orc"})