Go to file
Robert Zenz d041025c80 Extended Makefile. 2015-09-12 15:51:38 +02:00
deps Updated utils and added callbacks to spawn usher. 2015-08-15 14:27:33 +02:00
doc Providers can now provided exact positions. 2015-09-06 11:15:10 +02:00
mods Providers can now provided exact positions. 2015-09-06 11:15:10 +02:00
.gitmodules Initial commit. 2015-07-23 19:47:37 +02:00
LICENSE Initial commit. 2015-07-23 19:47:37 +02:00
Makefile Extended Makefile. 2015-09-12 15:51:38 +02:00
README Providers can now provided exact positions. 2015-09-06 11:15:10 +02:00
README.md Initial commit. 2015-07-23 19:47:37 +02:00

README.md

minetest-australopithecus-spawn-usher

A simple system that corrects the spawn of players without knowing anything about the mapgen that is used.

Usage

To activate the system, add it to your depends.txt and call this in your init.lua.:

spawnusher.activate()

-- With parameters.
spawnusher.activate(
    40,   -- random_placement_radius
    2,    -- required_bubble_size
    0.5)  -- retry_time

Optionally, you can set parameters when activating it, it accepts three parameters:

  1. random_placement_radius, the player will be randomly placed around the spawn point inside the given radius. Defaults to 40.
  2. required_bubble_size, the size of the air bubble that is required for the player to be placed there. Note this is only the vertical size. Defaults to 2.
  3. retry_time, if the player can't be placed because a block is not loaded yet, this is the amount of time that is elapsed until a retry. Defaults to 0.5 seconds.

Providers

You can register providers which allow to customize the spawn point of the players. The provider is a callback that is able to provide a different spawn point. As second return value it can return a boolean determining if the system should look for an air bubble above or below the given location. The signature is:

function(
    player,    -- The Player object of the player that is going to respawn.
    spawn_pos) -- The current spawn position of the player.

returns
    spawn_pos, -- The position at which the player should ge respawned.
               -- nil to use the current one.
    exact_spot -- true if the given position is the exact position to be
               -- used. nil to keep the current value.

And a usage example:

-- Fixes the spawn point of the player named "hero" at some position.
spawnusher.register_spawnpoint_provider(function(player, spawn_pos)
    if player:get_player_name() == "hero" then
        return {
            x = 0,
            y = 125,
            z = 50
        },
        true
    end
end)

-- We want to move all players further out.
spawnusher.register_spawnpoint_provider(function(player, spawn_pos)
    return {
        x = spawn_pos.x + 150,
        y = spawn_pos.y,
        z = spawn_pos.z + 150
    }
end)

After Spawn Callbacks

You can register a callback that will be invoked after the player has been respawned. This callback can't modify the spawn point anymore and is only to get informed about the actual spawn point of the player. The signature is:

function(
    player,      -- The Player object of the player that has respawned.
    spawn_point) -- The spawn point of the player.

Usage example:

spawnusher.register_after_spawn_callback(function(player, spawn_point)
    -- Do something with this information.
end)

Caveats

There is a good chance that the player is placed inside a cave if the required_bubble_size is small, like 2. If you want to prevent that, just pick a required_bubble_size that is large enough to avoid caves, 10 should work for the most part, for example.