forked from your-land-mirror/yl_speak_up
		
	
		
			
				
	
	
		
			190 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
 | |
| This mod allows to set RPG-like texts for NPC where the NPC "says" something
 | |
| to the player and the player can reply with a selection of given replies -
 | |
| which most of the time lead to the next dialog.
 | |
| 
 | |
| Terminology
 | |
| ===========
 | |
| dialog           A text said by the NPC, with diffrent replys the player can
 | |
|                  select from.
 | |
| 
 | |
| option           A reply/answer to the text the NPC said.
 | |
| 
 | |
| precondition/    All listed preconditions have to be true in order for the NPC
 | |
| prerequirement   to offer this option.
 | |
| 
 | |
| action           An action the player may (or may not) take, i.e. trading,
 | |
|                  taking an item from the NPC, giving the NPC something, entering
 | |
|                  the right password etc.
 | |
| 
 | |
| effect/result    Further effects (like setting variables, handing out items)
 | |
|                  that take place after the action was successful.
 | |
| 
 | |
| How to configure NPC and add dialogs
 | |
| ====================================
 | |
| There are two ways:
 | |
| 1. Just talk to them and click on the "I am your owner"-Dialog. This opens up
 | |
|    a menu where you can edit most things.
 | |
| 2. Use /giveme to get the staff you want, wield the staff and point it at the
 | |
|    NPC you want to change. This is much more powerful. Lua code can be
 | |
|    entered and later executed by the NPC.
 | |
| 
 | |
| Hint: The command "/npc_talk_debug <npc_id>" allows you to get debug
 | |
|       information regarding preconditions and effects. You can turn it
 | |
|       off with "/npc_talk_debug off". The NPC ID can be seen in the
 | |
|       setup dialog for preconditions and effects.
 | |
| 
 | |
| The privs
 | |
| =========
 | |
| npc_talk_owner   will allow players to edit their *own* NPC by talking to them.
 | |
|                  Does *not* include usage of the staffs!
 | |
|                  Ought to be given to all players.
 | |
|          
 | |
| npc_talk_master  allows players to edit *any* NPC supported by this mod.
 | |
|                  Does *not* include usage of the staffs!
 | |
|                  Ought to be given to selected trusted players who want to
 | |
|                  help others with their NPC configuration and/or support
 | |
|                  NPCs owned by the server.
 | |
| 
 | |
| npc_master       allows players to edit *any* NPC supported by this mod.
 | |
|                  *Does* include usage of the staffs.
 | |
|                  This is very powerful and allows to enter and execute lua
 | |
|                  code without restrictions.
 | |
|                  Only grant this to staff members you really trust.
 | |
| 
 | |
| Tools
 | |
| =====
 | |
| There are diffrent staffs for diffrent functionality:
 | |
| Staff of..       does:
 | |
| ..I-said-so      edit what the NPC says (extremly powerful)
 | |
| ..shut-up        mute the NPC
 | |
| ..dawai-dawai    un-mute the NPC
 | |
| ..game-over      remove the NPC (but not its data)
 | |
| ..fashion        change skin etc.
 | |
| 
 | |
| Be careful: With the staffs, you can add more than one result of the type
 | |
| "dialog" - which will confuse the NPC and lead to unexpected results. Use
 | |
| the staffs only with care!
 | |
| 
 | |
| Mute
 | |
| ====
 | |
| When you edit an NPC, you might want to stop it from talking to other players
 | |
| and spoiling unifinished texts/options to the player. 
 | |
| 
 | |
| For this case, the NPC can be muted. This works either with the staff or by
 | |
| selecting the appropriate option in the talk menu after having started edit
 | |
| mode by claiming to be the NPC's owner.
 | |
| 
 | |
| Skin
 | |
| ====
 | |
| The skin and what the NPC wields can be changed via the "Edit Skin" button.
 | |
| 
 | |
| 
 | |
| Simple variables
 | |
| ================
 | |
| If you want to let your NPC greet the player by name, you can do so. Some
 | |
| variables/texts are replaced appropriately in the text the NPC says and
 | |
| the player can reply:
 | |
| 
 | |
| $MY_NAME$       will be replaced by the name of the NPC
 | |
| $NPC_NAME$      same as above
 | |
| $OWNER_NAME$    will be replaced by the name of the owner of the NPC
 | |
| $PLAYER_NAME$   will be replaced by the name of the player talking to the NPC
 | |
| $GOOD_DAY$      will be replaced by "Good morning", "Good afternoon" or
 | |
|                 "Good evening" - depending on the ingame time of day
 | |
| $good_DAY$      same as above, but starts with a lowercase letter (i.e.
 | |
|                 "good morning")
 | |
| 
 | |
| Note: If you want to extend this, you can do the following in your own mod:
 | |
| 
 | |
| local old_function = yl_speak_up.replace_vars_in_text
 | |
| yl_speak_up.replace_vars_in_text = function(text, dialog, pname)
 | |
| 	-- do not forget to call the old function
 | |
| 	text = old_function(text, dialog, pname)
 | |
| 	-- do your own replacements
 | |
| 	text = string.gsub(text, "$TEXT_TO_REPLACE$", "new text")
 | |
| 	-- do not forget to return the new text
 | |
| 	return text
 | |
| end
 | |
| 
 | |
| The replacements will not be applied in edit mode.
 | |
| 
 | |
| 
 | |
| Trading (simple)
 | |
| ================
 | |
| The NPC can trade item(stacks) with other players.
 | |
| Only undammaged items can be traded.
 | |
| Items that contain metadata (i.e. written books, petz, ..) cannot be traded.
 | |
| Dammaged items and items containing metadata cannot be given to the NPC.
 | |
| 
 | |
| Trades can either be attached to dialog options (and show up as results there)
 | |
| via the edit options dialog or just be trades that are shown in a trade list.
 | |
| The trade list can be accessed from the NPC's inventory.
 | |
| 
 | |
| Trades cannot be added with the staffs.
 | |
| 
 | |
| If there are trades that ought to show up in the general trade list (i.e. not
 | |
| only be attached to dialog options), then a button "Let's trade" will be shown
 | |
| as option for the first dialog.
 | |
| 
 | |
| Trades that are attached to the trade list (and not dialog options) can be
 | |
| added and deleted without entering edit mode ("I am your owner. ...").
 | |
| 
 | |
| If unsure where to put your trades: If your NPC wants to tell players a story
 | |
| about what he sells (or if it is i.e. a barkeeper), put your trades in the
 | |
| options of dialogs. If you just want to sell surplus items to other players
 | |
| and have the NPC act like a shop, then use the trade list.
 | |
| 
 | |
| 
 | |
| Quest items
 | |
| ===========
 | |
| Quest items can be *created* to some degree as part of the *action* of an
 | |
| *option* through the edit options menu.
 | |
| 
 | |
| MineTest does not allow to create truely new items on a running server on
 | |
| the fly. What can be done is giving specific items (i.e. *that* one apple,
 | |
| *that* piece of paper, *that* stack of wood, ..) a new description that
 | |
| makes it diffrent from all other items of the same type (i.e. all other
 | |
| apples).
 | |
| 
 | |
| A new description alone may also be set by the player with the engraving
 | |
| table (provided that mod is installed):
 | |
| 	https://forum.minetest.net/viewtopic.php?t=17482
 | |
| 
 | |
| In order to distinguish items created by your NPC and those created through
 | |
| the engraving table or other mods, you can set a special ID. That ID will
 | |
| also contain the name of the player to which the NPC gave the item. Thus,
 | |
| players can't just take the quest items of other players from their bones
 | |
| and solve quests that way.
 | |
| 
 | |
| The actions *npc_gives* and *npc_wants* are responsible for handling of
 | |
| quest items. They can of course also handle regular items.
 | |
| 
 | |
| If an NPC creates a special quest item for a player in the *npc_gives*
 | |
| action, it takes the item out of its inventory from a stack of ordinary
 | |
| items of that type and applies the necessary modifications (change
 | |
| description, set special quest ID, set information which player got it).
 | |
| 
 | |
| If the NPC gets such a quest item in an *npc_wants* action, it will check
 | |
| the given parameters. If all is correct, it will strip those special
 | |
| parameters from the item, call the action a success and store the item
 | |
| in its inventory without wasting space (the item will likely stack if it
 | |
| is *not* a quest item).
 | |
| 
 | |
| Entering Passwords
 | |
| ==================
 | |
| Another useful method for quests is the *text_input* action. It allows the
 | |
| NPC to ask for a passwort or the answer to a question the NPC just asked.
 | |
| The player's answer is checked against the *expected answer* that you give
 | |
| when you set up this action.
 | |
| 
 | |
| Custom Actions
 | |
| ==============
 | |
| You can define custom actions and provide a parameter. The function
 | |
| 	yl_speak_up.get_fs_action_custom(player, param)
 | |
| gets called when such a function is executed and ought to return a formspec.
 | |
| Input ought to be sent to the function
 | |
| 	yl_speak_up.input_fs_action_custom(player, formname, fields)
 | |
| which acts as an example of what you need to take care of in your own
 | |
| implementation of this function.
 |