Add register_on_* compatibility
parent
f1ad93a6ad
commit
1d040a38e9
23
README.md
23
README.md
|
@ -5,12 +5,6 @@ This project is intended for use in combination with [multiserver](https://githu
|
|||
## Usage
|
||||
Install this mod on your minetest servers and enable mod channels on
|
||||
each server. You can now use the API in your own mods.
|
||||
**None of the methods will work if no players are connected to the
|
||||
minetest server. A fix is planned.**
|
||||
## Planned features
|
||||
* Fix dependence on connected player
|
||||
* Add register_on_* methods
|
||||
* Low priority: Stop using callback functions if a response is expected
|
||||
## Methods
|
||||
> `multiserver.alert(msg)`
|
||||
```
|
||||
|
@ -64,3 +58,20 @@ Description: Gets the address of a player (format: IP_ADDRESS:PORT) and
|
|||
passes it to the callback function; This is needed because minetest
|
||||
servers only see the address of the proxy
|
||||
```
|
||||
> `multiserver.register_on_joinplayer(callback)`
|
||||
```
|
||||
callback: Callback function (params: name)
|
||||
Description: Registers a callback for global join events
|
||||
```
|
||||
> `multiserver.register_on_leaveplayer(callback)`
|
||||
```
|
||||
callback: Callback function (params: name)
|
||||
Description: Registers a callback for global leave events
|
||||
```
|
||||
> `multiserver.register_on_redirect_done(callback)`
|
||||
```
|
||||
callback: Callback function (params: name, newsrv, success)
|
||||
Description: Registers a callback function for global redirect events;
|
||||
newsrv is the server the client was being redirected to, success
|
||||
indicates whether the redirection was successful
|
||||
```
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
multiserver.on_joinplayer = {}
|
||||
multiserver.on_leaveplayer = {}
|
||||
multiserver.on_redirect_done = {}
|
||||
|
||||
multiserver.alert = function(msg)
|
||||
multiserver.do_rpc("<-ALERT " .. msg, nil)
|
||||
end
|
||||
|
@ -29,3 +33,15 @@ end
|
|||
multiserver.get_address = function(name, cb)
|
||||
multiserver.do_rpc("<-GETADDR " .. name, cb)
|
||||
end
|
||||
|
||||
multiserver.register_on_joinplayer = function(cb)
|
||||
table.insert(multiserver.on_joinplayer, cb)
|
||||
end
|
||||
|
||||
multiserver.register_on_leaveplayer = function(cb)
|
||||
table.insert(multiserver.on_leaveplayer, cb)
|
||||
end
|
||||
|
||||
multiserver.register_on_redirect_done = function(cb)
|
||||
table.insert(multiserver.on_redirect_done, cb)
|
||||
end
|
||||
|
|
15
init.lua
15
init.lua
|
@ -7,9 +7,14 @@ dofile(mp .. "/rpc.lua")
|
|||
dofile(mp .. "/functions.lua")
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
minetest.after(1, function(name)
|
||||
multiserver.get_address(name, function(addr)
|
||||
minetest.chat_send_all(addr)
|
||||
end)
|
||||
end, player:get_player_name())
|
||||
if player:get_player_name() == "rpc" then
|
||||
local prop = {
|
||||
visual_size = {x = 0, y = 0},
|
||||
collisionbox = {0, 0, 0, 0, 0, 0},
|
||||
}
|
||||
player:set_nametag_attributes({
|
||||
color = {a = 0, r = 255, g = 255, b = 255},
|
||||
})
|
||||
player:set_properties(prop)
|
||||
end
|
||||
end)
|
||||
|
|
19
rpc.lua
19
rpc.lua
|
@ -11,7 +11,6 @@ end
|
|||
|
||||
minetest.register_on_modchannel_message(function(channel_name, sender, msg)
|
||||
local rrq = multiserver.fromhex(msg:split(" ")[1])
|
||||
if cb[rrq] == nil then return end
|
||||
local cmd = msg:split(" ")[2]
|
||||
local p
|
||||
if cmd == "->DEFSRV" then
|
||||
|
@ -26,7 +25,25 @@ minetest.register_on_modchannel_message(function(channel_name, sender, msg)
|
|||
p = msg:split(" ")[3]
|
||||
elseif cmd == "->ADDR" then
|
||||
p = msg:split(" ")[3]
|
||||
elseif cmd == "->JOIN" then
|
||||
local name = msg:split(" ")[3]
|
||||
for _, f in ipairs(multiserver.on_joinplayer) do
|
||||
f(name)
|
||||
end
|
||||
elseif cmd == "->LEAVE" then
|
||||
local name = msg:split(" ")[3]
|
||||
for _, f in ipairs(multiserver.on_leaveplayer) do
|
||||
f(name)
|
||||
end
|
||||
elseif cmd == "->REDIRECTED" then
|
||||
local name = msg:split(" ")[3]
|
||||
local newsrv = msg:split(" ")[4]
|
||||
local success = multiserver.tobool(msg:split(" ")[5])
|
||||
for _, f in ipairs(multiserver.on_redirect_done) do
|
||||
f(name, newsrv, success)
|
||||
end
|
||||
end
|
||||
if cb[rrq] == nil then return end
|
||||
cb[rrq](p)
|
||||
cb[rrq] = nil
|
||||
end)
|
||||
|
|
Loading…
Reference in New Issue