Allow maps to optionally specify custom treasures (#351)
This commit is contained in:
parent
03fea8fac2
commit
91c5f47886
5 changed files with 106 additions and 37 deletions
|
@ -1,51 +1,84 @@
|
|||
# CTF Map
|
||||
|
||||
This mod handles multiple maps.
|
||||
This mod handles creating and loading maps.
|
||||
|
||||
# Creating a new map
|
||||
## Creating a new map
|
||||
|
||||
## 1. Dependencies
|
||||
### 1. Dependencies
|
||||
|
||||
* Minetest 0.4.16 or later.
|
||||
* Mods
|
||||
* ctf_map (by copying the folder from this game to `minetest/mods`)
|
||||
* worldedit and worldedit_commands.
|
||||
* ctf_map (by copying the folder from this game to `minetest/mods`)
|
||||
* worldedit and worldedit_commands.
|
||||
|
||||
## 2. Find an area
|
||||
### 2. Find an area
|
||||
|
||||
* Can use Minetest Game and any mapgen.
|
||||
* It must be a cube, and the barrier will be in the exact center.
|
||||
* It should be around 230x230 in surface area, but this can vary.
|
||||
* Feel free to modify the area to your needs.
|
||||
|
||||
## 3. Select the area
|
||||
### 3. Select the area
|
||||
|
||||
There are multiple ways do this, this is the simplist in most cases.
|
||||
|
||||
* If you haven't modified the map at all, do the following to speed up barrier placement:
|
||||
* Stop Minetest.
|
||||
* Open up the world's world.mt
|
||||
* Set backend to "dummy".
|
||||
* Save.
|
||||
* Stop Minetest.
|
||||
* Open up the world's world.mt
|
||||
* Set backend to "dummy".
|
||||
* Save.
|
||||
* Using worldedit, select the area.
|
||||
* Type /gui, and click "From WE" then "To WE".
|
||||
* Check that the center location is the right place for the barrier to go.
|
||||
* Check that the bounds extend far enough.
|
||||
|
||||
## 4. Place barriers
|
||||
### 4. Place barriers
|
||||
|
||||
* Set the middle barrier direction. The barrier is a plane defined by a co-ordinate = 0.
|
||||
If the barrier is X=0, then it will placed with every node of the barrier having X=0.
|
||||
If the barrier is Z=0, then it will placed with every node of the barrier having Z=0.
|
||||
* Click "place barrier". Note that this command does not have an undo.
|
||||
|
||||
## 5. Meta data
|
||||
### 5. Meta data
|
||||
|
||||
* Set the meta data
|
||||
|
||||
## 6. Export
|
||||
### 6. Export
|
||||
|
||||
* Click export, and wait until completion.
|
||||
* Copy the two files from `worlddir/schemes/` to `ctf_map/maps/`.
|
||||
* Copy the two files from `worlddir/schems/` to `ctf_map/maps/`.
|
||||
* Rename the files so the two prefixed numbers are consistent to existing maps.
|
||||
* Profit!
|
||||
|
||||
## Documentation
|
||||
|
||||
### Map meta
|
||||
|
||||
Each map's metadata is stored in an accompanying .conf file containing the following data:
|
||||
|
||||
* `name`: Name of map.
|
||||
* `author`: Author of the map.
|
||||
* `hint`: [Optional] Helpful hint or tip for unique maps, to help players understand the map.
|
||||
* `rotation`: Rotation of the schem. [`x`|`z`]
|
||||
* `schematic`: Name of the map's schematic.
|
||||
* `initial_stuff`: [Optional] Comma-separated list of itemstacks to be given to the player on join and on respawn.
|
||||
* `treasures`: [Optional] List of treasures to be registered for the map, in a serialized format. Refer to the `treasures` sub-section for more details.
|
||||
* `r`: Radius of the map.
|
||||
* `h`: Height of the map.
|
||||
* `team.i`: Name of team `i`.
|
||||
* `team.i.color`: Color of team `i`.
|
||||
* `team.i.pos`: Position of team `i`'s flag, relative to center of schem.
|
||||
* `chests.i.from`, `chests.i.to`: [Optional] Positions of diagonal corners of custom chest zone `i`, relative to the center of the schem.
|
||||
* `chests.i.n`: [Optional] Number of chests to place in custom chest zone `i`.
|
||||
|
||||
#### `treasures`
|
||||
|
||||
`treasures` is a list of treasures to be registered for this map in serialized format.
|
||||
|
||||
An example `treasures` value that registers steel pick, shotgun, and grenade:
|
||||
|
||||
```lua
|
||||
treasures = default:pick_steel,0.5,5,1,10;shooter:shotgun,0.04,2,1;shooter:grenade,0.08,2,1
|
||||
```
|
||||
|
||||
(See [here](../../other/treasurer/README.md) to understand the magic numbers)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
default
|
||||
ctf_treasure?
|
||||
stairs?
|
||||
wool?
|
||||
ctf_team_base?
|
||||
|
|
|
@ -137,10 +137,12 @@ function ctf_match.load_map_meta(idx, name)
|
|||
local meta = Settings(conf_path)
|
||||
|
||||
if meta:get("r") == nil then
|
||||
error("Map was not properly configured " .. conf_path)
|
||||
error("Map was not properly configured: " .. conf_path)
|
||||
end
|
||||
|
||||
local initial_stuff = meta:get("initial_stuff")
|
||||
local treasures = meta:get("treasures")
|
||||
treasures = treasures and treasures:split(";")
|
||||
local map = {
|
||||
idx = idx,
|
||||
name = meta:get("name"),
|
||||
|
@ -149,11 +151,12 @@ function ctf_match.load_map_meta(idx, name)
|
|||
rotation = meta:get("rotation"),
|
||||
schematic = name .. ".mts",
|
||||
initial_stuff = initial_stuff and initial_stuff:split(","),
|
||||
treasures = treasures,
|
||||
r = tonumber(meta:get("r")),
|
||||
h = tonumber(meta:get("h")),
|
||||
offset = offset,
|
||||
teams = {},
|
||||
chests = {},
|
||||
chests = {}
|
||||
}
|
||||
|
||||
assert(map.r <= max_r)
|
||||
|
@ -176,6 +179,35 @@ function ctf_match.load_map_meta(idx, name)
|
|||
i = i + 1
|
||||
end
|
||||
|
||||
-- Register per-map treasures or the default set of treasures
|
||||
-- if treasures field hasn't been defined in map meta
|
||||
if treasurer and ctf_treasure then
|
||||
treasurer.treasures = {}
|
||||
if treasures then
|
||||
for _, item in pairs(treasures) do
|
||||
item = item:split(",")
|
||||
-- treasurer.register_treasure(name, rarity, preciousness, count)
|
||||
if #item == 4 then
|
||||
treasurer.register_treasure(item[1],
|
||||
tonumber(item[2]),
|
||||
tonumber(item[3]),
|
||||
tonumber(item[4]))
|
||||
-- treasurer.register_treasure(name, rarity, preciousness, {min, max})
|
||||
elseif #item == 5 then
|
||||
treasurer.register_treasure(item[1],
|
||||
tonumber(item[2]),
|
||||
tonumber(item[3]),
|
||||
{
|
||||
tonumber(item[4]),
|
||||
tonumber(item[5])
|
||||
})
|
||||
end
|
||||
end
|
||||
else
|
||||
ctf_treasure.register_default_treasures()
|
||||
end
|
||||
end
|
||||
|
||||
-- Read custom chest zones from config
|
||||
i = 1
|
||||
while meta:get("chests." .. i .. ".from") do
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
treasurer
|
||||
default
|
||||
|
|
|
@ -1,21 +1,25 @@
|
|||
treasurer.register_treasure("default:ladder",0.3,5,{1,20})
|
||||
treasurer.register_treasure("default:torch",0.3,5,{1,20})
|
||||
treasurer.register_treasure("default:cobble",0.4,5,{45,99})
|
||||
treasurer.register_treasure("default:apple",0.3,5,{1,8})
|
||||
treasurer.register_treasure("default:wood",0.3,5,{30,60})
|
||||
treasurer.register_treasure("doors:door_steel",0.3,5,{1,3})
|
||||
ctf_treasure = {}
|
||||
|
||||
treasurer.register_treasure("default:pick_steel",0.5,5,{1,10})
|
||||
treasurer.register_treasure("default:sword_stone",0.6,5,{1,10})
|
||||
treasurer.register_treasure("default:sword_steel",0.4,5,{1,4})
|
||||
treasurer.register_treasure("default:shovel_stone",0.6,5,{1,10})
|
||||
treasurer.register_treasure("default:shovel_steel",0.3,5,{1,10})
|
||||
function ctf_treasure.register_default_treasures()
|
||||
treasurer.register_treasure("default:ladder",0.3,5,{1,20})
|
||||
treasurer.register_treasure("default:torch",0.3,5,{1,20})
|
||||
treasurer.register_treasure("default:cobble",0.4,5,{45,99})
|
||||
treasurer.register_treasure("default:apple",0.3,5,{1,8})
|
||||
treasurer.register_treasure("default:wood",0.3,5,{30,60})
|
||||
treasurer.register_treasure("doors:door_steel",0.3,5,{1,3})
|
||||
|
||||
treasurer.register_treasure("shooter:crossbow",0.5,2,{1,5})
|
||||
treasurer.register_treasure("shooter:pistol",0.4,2,{1,5})
|
||||
treasurer.register_treasure("shooter:rifle",0.1,2,{1,2})
|
||||
treasurer.register_treasure("shooter:shotgun",0.04,2,1)
|
||||
treasurer.register_treasure("shooter:grenade",0.08,2,1)
|
||||
treasurer.register_treasure("shooter:machine_gun",0.02,2,1)
|
||||
treasurer.register_treasure("shooter:ammo",0.3,2,{1,10})
|
||||
treasurer.register_treasure("shooter:arrow_white",0.5,2,{2,18})
|
||||
treasurer.register_treasure("default:pick_steel",0.5,5,{1,10})
|
||||
treasurer.register_treasure("default:sword_stone",0.6,5,{1,10})
|
||||
treasurer.register_treasure("default:sword_steel",0.4,5,{1,4})
|
||||
treasurer.register_treasure("default:shovel_stone",0.6,5,{1,10})
|
||||
treasurer.register_treasure("default:shovel_steel",0.3,5,{1,10})
|
||||
|
||||
treasurer.register_treasure("shooter:crossbow",0.5,2,{1,5})
|
||||
treasurer.register_treasure("shooter:pistol",0.4,2,{1,5})
|
||||
treasurer.register_treasure("shooter:rifle",0.1,2,{1,2})
|
||||
treasurer.register_treasure("shooter:shotgun",0.04,2,1)
|
||||
treasurer.register_treasure("shooter:grenade",0.08,2,1)
|
||||
treasurer.register_treasure("shooter:machine_gun",0.02,2,1)
|
||||
treasurer.register_treasure("shooter:ammo",0.3,2,{1,10})
|
||||
treasurer.register_treasure("shooter:arrow_white",0.5,2,{2,18})
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue