support registration pre-check
parent
9e788452f3
commit
7a3bb1e07e
7
API.md
7
API.md
|
@ -14,7 +14,12 @@ You can implement a new chat mode by calling
|
|||
The mode definition must include the following table fields:
|
||||
|
||||
* `help`
|
||||
* brief summary of the options
|
||||
* a string -- brief summary of the options
|
||||
* `can_register(playername, params_array)`
|
||||
* optional
|
||||
* checks whether the player can switch to the mode, given the parameters
|
||||
* does not register the player - simply performs the check and returns a boolean
|
||||
* returns `true` if the registration would normally succeed
|
||||
* `register(playername, params_array)`
|
||||
* a handler function that is called any time a user switches chat modes. It is expected that the handler will register the player as having activated the mode, according to its parameters.
|
||||
* `deregister(playername)`
|
||||
|
|
22
api.lua
22
api.lua
|
@ -1,5 +1,4 @@
|
|||
-- TODO
|
||||
-- Implement support for custom privs
|
||||
-- Implement @-pings - play a sound to target player if @playername is mentioned
|
||||
|
||||
|
||||
|
@ -63,6 +62,11 @@ local function chatmodeswitch(playername, argsarray)
|
|||
return
|
||||
end
|
||||
|
||||
if newmodedef.can_register and not newmodedef.can_register(playername, argsarray) then
|
||||
minetest.chat_send_player(playername, "You cannot switch to that mode with those settings.")
|
||||
return
|
||||
end
|
||||
|
||||
-- ====
|
||||
|
||||
if oldmodedef.deregister then
|
||||
|
@ -156,6 +160,8 @@ minetest.register_on_chat_message(function(playername, message)
|
|||
for _,theplayer in pairs(valid_players.players) do
|
||||
chat_modes.chatsend(theplayer:get_player_name(), message)
|
||||
end
|
||||
|
||||
return true
|
||||
end)
|
||||
|
||||
|
||||
|
@ -163,12 +169,18 @@ end)
|
|||
-- ================================
|
||||
-- Player management
|
||||
|
||||
minetest.register_on_playerleave(function(player) -- FIXME verify
|
||||
playermodes[player:get_player_name()] = nil
|
||||
minetest.register_on_leaveplayer(function(player, timedout)
|
||||
-- Do not discard pref for a timed out player
|
||||
if not timedout then
|
||||
playermodes[player:get_player_name()] = nil
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_playerjoin(function(player) -- FIXME verify
|
||||
playermodes[player:get_player_name()] = defaultmode
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
-- Do not reinitialize after a player timeout
|
||||
if not playermodes[player:get_player_name()] then
|
||||
playermodes[player:get_player_name()] = defaultmode
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue