forked from mtcontrib/minetest_treasurer
		
	Delete old README
This commit is contained in:
		
							
								
								
									
										201
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										201
									
								
								README
									
									
									
									
									
								
							@@ -1,201 +0,0 @@
 | 
				
			|||||||
= Treasurer’s README file for Treasurer version 0.1 =
 | 
					 | 
				
			||||||
== Overview ==
 | 
					 | 
				
			||||||
Name:		Treasurer
 | 
					 | 
				
			||||||
Technical name:	treasurer
 | 
					 | 
				
			||||||
Purpose:	To provide an interface for mods which want to spawn ItemStacks randomly and
 | 
					 | 
				
			||||||
		an interface for mods which create new items.
 | 
					 | 
				
			||||||
Version:	0.1
 | 
					 | 
				
			||||||
Dependencies:	none
 | 
					 | 
				
			||||||
License:	WTFPL
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
== Introduction ==
 | 
					 | 
				
			||||||
Problem:
 | 
					 | 
				
			||||||
There are a bunch of mods which have cool items but they won’t appear in the world by
 | 
					 | 
				
			||||||
themselves.
 | 
					 | 
				
			||||||
There are some mods which randomly distribute treasures into the world. Sadly, these only
 | 
					 | 
				
			||||||
distribute the items they know—which are just the items of the mod “default” most of the
 | 
					 | 
				
			||||||
time. The items of the other mods are completely missed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The reason for this is that the distributing mods can’t know what sort of items are available
 | 
					 | 
				
			||||||
unless they explicitly depend on the mods that defines these. Viewed the other way round,
 | 
					 | 
				
			||||||
the item-defining mods that also distribute these items into the world are limited in the
 | 
					 | 
				
			||||||
sense that they only know one means of distributing items.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
There is a gap between defining items and distributing them. Every time a mod does both,
 | 
					 | 
				
			||||||
flexibility is limited and expansion becomes difficult.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
To bridge this gap, Treasurer has been written. Treasurer makes it possible a) for mods to define
 | 
					 | 
				
			||||||
treasures without bothering _how_ these are distributed into the world and b) for mods to distribute
 | 
					 | 
				
			||||||
treasures around the world without knowledge about _what_ treasures exactly are distributed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
== Technical side of Treasurer ==
 | 
					 | 
				
			||||||
=== technical overview ===
 | 
					 | 
				
			||||||
To get a working Treasurer architecture and actually get some treasures into the world,
 | 
					 | 
				
			||||||
you need:
 | 
					 | 
				
			||||||
 * Treasurer
 | 
					 | 
				
			||||||
 * at least one treasure registration mod
 | 
					 | 
				
			||||||
 * at least one treasure spawning mod
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=== treasurer registration mod ===
 | 
					 | 
				
			||||||
Firstly, there are the treasure registration mods (TRMs). The task of TRMs is to tell
 | 
					 | 
				
			||||||
Treasurer which items does it have to offer, which relative appearance probabilities these
 | 
					 | 
				
			||||||
treasures should have, how “precious” the treasure is considered (on a scale from 0 to 10)
 | 
					 | 
				
			||||||
, optionally how big the stack of items should be and optionally how much worn out it is.
 | 
					 | 
				
			||||||
TRMs must depend on at least two mods: On treasurer and on the mod or mods
 | 
					 | 
				
			||||||
where the items are defined. Technically, a TRM consists of nothing more than a long
 | 
					 | 
				
			||||||
list of “registration” function calls. While this seems trivial, the task of balancing
 | 
					 | 
				
			||||||
out probabilties and balancing out preciousness levels of treasures is not trivial
 | 
					 | 
				
			||||||
and it may take a long time to get right.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
It is strongly recommended that a TRM really does nothing
 | 
					 | 
				
			||||||
more than registering treasures (and not defining items, for example). If you want
 | 
					 | 
				
			||||||
to make your mod compatible to Treasurer, don’t change your mod, write a TRM for
 | 
					 | 
				
			||||||
it instead.
 | 
					 | 
				
			||||||
There is an example TRM, called “trm_default_example”. It registers some items
 | 
					 | 
				
			||||||
of the default as treasures. Unsurprisingly, it depends on treasurer and default.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=== treasurer spawning mods ===
 | 
					 | 
				
			||||||
Secondly, there are the treasure spawning mods (TSMs). The task of a TSM is to somehow
 | 
					 | 
				
			||||||
distribute the available treasures into the world. This is also called “treasure
 | 
					 | 
				
			||||||
spawning”. How exactly the TSM spawns the treasures is completely up the TSM. But a
 | 
					 | 
				
			||||||
TSM has to request Treasurer to get some random treasures to distribute. A TSM may
 | 
					 | 
				
			||||||
optionally request to filter out treasures outside certain preciousness levels, so
 | 
					 | 
				
			||||||
it can be 
 | 
					 | 
				
			||||||
Treasurer can not guarantee to return the requestet amount of treasures, it may
 | 
					 | 
				
			||||||
return an empty table, for two reasons:
 | 
					 | 
				
			||||||
1) There is no TRM activated. There must be at least one to work
 | 
					 | 
				
			||||||
2) The preciousness filter filtered out. This problem can be fixed by installing more
 | 
					 | 
				
			||||||
TRMs or by balancing the existing TRMs to cover as many preciousness levels as
 | 
					 | 
				
			||||||
possible. It also may be that the range specified by the TSM was too small. It is
 | 
					 | 
				
			||||||
recommended to keep the requested range at least of a size of 1.
 | 
					 | 
				
			||||||
Treasurer does, however, guarantee that the returned treasures are always in the
 | 
					 | 
				
			||||||
requested boundsa.
 | 
					 | 
				
			||||||
A TSM has to at least depend on Treasurer.
 | 
					 | 
				
			||||||
Like for TRMs, it is strongly recommended that a TSM does nothing more than spawning
 | 
					 | 
				
			||||||
treasures. This does not exclude the possibility that a TSM does not depend
 | 
					 | 
				
			||||||
on any other mod.
 | 
					 | 
				
			||||||
There are two example TSMs. The first one is a very basic one and called “tsm_gift_example”.
 | 
					 | 
				
			||||||
It gives a “welcome gift” (1 random treasure) to players who just joined the server
 | 
					 | 
				
			||||||
or who respawn. The preciousness filter is not used. It does only depend on Treasurer.
 | 
					 | 
				
			||||||
The second one is called “tsm_chests_example” and pretty advanced for an example.
 | 
					 | 
				
			||||||
It places chests of the mod “default” between 20 and 200 node lenghts below the water
 | 
					 | 
				
			||||||
surface and puts 1-6 random treasures into these. The lower the chest, the higher
 | 
					 | 
				
			||||||
the preciousness. It depends on treasurer and default (for the chests, of course).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=== Recap ===
 | 
					 | 
				
			||||||
TRMs define treasures, TSMs spawn them. Treasurer manages the pool of available treasures.
 | 
					 | 
				
			||||||
TRMs and TSMs do not have to know anything from each other.
 | 
					 | 
				
			||||||
TRMs and TSMs do not neccessarily have to change any line of code of other mods to function.
 | 
					 | 
				
			||||||
Treasurer depends on nothing.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Important: It should always only be neccessary for TRMs and TSMs to depend on Treasurer.
 | 
					 | 
				
			||||||
All other mods do NOT HAVE TO and SHOULD NOT depend on Treasurer.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=== On rarity and preciousness ===
 | 
					 | 
				
			||||||
==== rarity ====
 | 
					 | 
				
			||||||
Rarity in Treasurer works in a pretty primitive way: The relative rarities of all
 | 
					 | 
				
			||||||
treasures from the treasure pool are simply all added up. The probabilitiy of one
 | 
					 | 
				
			||||||
certain treasure is then simply the rarity value divided by the sum.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
==== preciousness ====
 | 
					 | 
				
			||||||
How “precious” an item is, is highly subjective and also not always easy to categorize.
 | 
					 | 
				
			||||||
Preciousness in Treasurer’s terms should be therefore viewed as “utility” or as
 | 
					 | 
				
			||||||
“reward level” or “strength” or even “beauty” or whatever positive attributes you can
 | 
					 | 
				
			||||||
think of for items.
 | 
					 | 
				
			||||||
So, if you create a TRM and your treasure is something you want the player work
 | 
					 | 
				
			||||||
hard for, assign it a high preciousness. Everyday items that are already easy to
 | 
					 | 
				
			||||||
obtain in normal gameplay certainly deserve a lower precious than items that are
 | 
					 | 
				
			||||||
expensive to craft.
 | 
					 | 
				
			||||||
If your treasure consists of a powerful
 | 
					 | 
				
			||||||
item, assign it a high preciousness. When in doubt, try to value gameplay over
 | 
					 | 
				
			||||||
personal taste. Remember that TSMs can (and will!) filter out treasures based
 | 
					 | 
				
			||||||
on their preciousness.
 | 
					 | 
				
			||||||
For TSM authors, consider preciousness this way: If the trouble the player has
 | 
					 | 
				
			||||||
to get through to in order to obtain the treasure is high, better filter
 | 
					 | 
				
			||||||
out unprecious treasures. If your TSM distributes many treasures all over the world and these
 | 
					 | 
				
			||||||
are easy to obtain, filter out precious treasures.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TSMs also can just completely ignore preciousness, then the given treasures base
 | 
					 | 
				
			||||||
on sheer luck.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
==== Recap ====
 | 
					 | 
				
			||||||
Rarity determines the chance of a treasure, whereas preciousness determines
 | 
					 | 
				
			||||||
the difficulty to obtain it.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
== Overview of examples ==
 | 
					 | 
				
			||||||
- trm_default_example - registers items of default mod
 | 
					 | 
				
			||||||
- tsm_chests_example - spawns chests (from the default mod)
 | 
					 | 
				
			||||||
- tsm_gift_example - gives one treasure as a “welcome gift” to joined or respawned players
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
== Treasurer API documentation ==
 | 
					 | 
				
			||||||
=== API documentation for treasure registration mods ===
 | 
					 | 
				
			||||||
The API consists of one function, which is called “treasurer.register_treasure”.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	treasurer.register_treasure - registers a new treasure
 | 
					 | 
				
			||||||
		(this means the treasure will be ready to be spawned by treasure spawning mods.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	parameters:
 | 
					 | 
				
			||||||
		name:	name of resulting ItemStack, e.g. “mymod:item”
 | 
					 | 
				
			||||||
		rarity:	rarity of treasure on a scale from 0 to 1 (inclusive). lower = rarer
 | 
					 | 
				
			||||||
		preciousness: subjective preciousness on a scale from 0 to 10 (inclusive)
 | 
					 | 
				
			||||||
			higher = more precious.
 | 
					 | 
				
			||||||
		count:	optional value which specifies the multiplicity of the item. Default
 | 
					 | 
				
			||||||
			is 1. See count syntax help in this file.
 | 
					 | 
				
			||||||
		wear:	optional value which specifies the wear of the item. Default is 0,
 | 
					 | 
				
			||||||
			which disables the wear. See wear syntax help in this file.
 | 
					 | 
				
			||||||
	note:
 | 
					 | 
				
			||||||
		This function does some basic parameter checking to catch the most obvious
 | 
					 | 
				
			||||||
		mistakes. If invalid parameters have been passed, the input is rejected and
 | 
					 | 
				
			||||||
		the function returns false. However, it does not cover every possible
 | 
					 | 
				
			||||||
		mistake, so some invalid treasures may slip through.
 | 
					 | 
				
			||||||
	note:
 | 
					 | 
				
			||||||
		Rarity does not imply preciousness. A rare treasure may not neccessarily a
 | 
					 | 
				
			||||||
		very precious one. A treasure chest with scorched stuff inside may be very
 | 
					 | 
				
			||||||
		rare, but it’s certainly also very unprecious.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	returns:
 | 
					 | 
				
			||||||
		true on success,
 | 
					 | 
				
			||||||
		false on failure
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=== data formats ===
 | 
					 | 
				
			||||||
format of count type:
 | 
					 | 
				
			||||||
	A count can be a number or a table 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	count = number	
 | 
					 | 
				
			||||||
		--> it’s always number times
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	count = {min, max}	
 | 
					 | 
				
			||||||
		--> it’s pseudorandomly between min and max times, math.random() will be
 | 
					 | 
				
			||||||
		    used to chose the value
 | 
					 | 
				
			||||||
	count = {min, max, prob_func}
 | 
					 | 
				
			||||||
		--> it’s between min and max times, and the value is given by
 | 
					 | 
				
			||||||
		    prob_func (see below)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
format of wear type:
 | 
					 | 
				
			||||||
	completely analogous to count 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
format of prob_func function:
 | 
					 | 
				
			||||||
	prob_func = function()
 | 
					 | 
				
			||||||
	parameters:
 | 
					 | 
				
			||||||
		(none)
 | 
					 | 
				
			||||||
	returns:
 | 
					 | 
				
			||||||
	--> a random or pseudorandom number between 0 (inclusive) and 1 (exclusive).
 | 
					 | 
				
			||||||
	notes:
 | 
					 | 
				
			||||||
		prob_func is entirely optional, if it’s not used, treasurer will
 | 
					 | 
				
			||||||
		default to math.random. You can use prob_func to define your own
 | 
					 | 
				
			||||||
		random function, in case you don’t wish your values to be evenly
 | 
					 | 
				
			||||||
		distributed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=== API documentation for treasure spawning mods
 | 
					 | 
				
			||||||
The API consists of one function, called “treasurer.select_random_treasures”.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	treasurer.select_random_treasures - request some treasures from treasurer
 | 
					 | 
				
			||||||
	parameters:
 | 
					 | 
				
			||||||
		count: (optional) amount of treasures. If this value is nil, treasurer assumes a default of 1.
 | 
					 | 
				
			||||||
		minimal_preciousness: (optional) don’t consider treasures with a lower preciousness. If nil, there’s no lower bound.
 | 
					 | 
				
			||||||
		maximum_preciousness: (optional) don’t consider treasures with a higher preciousness. If nil, there’s no upper bound.
 | 
					 | 
				
			||||||
	returns: 
 | 
					 | 
				
			||||||
		a table of ItemStacks (the requested treasures) - may be empty
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user