support registration pre-check

dev
Tai @ Flex 2017-03-01 10:12:48 +00:00
parent 9e788452f3
commit 7a3bb1e07e
2 changed files with 23 additions and 6 deletions

7
API.md
View File

@ -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
View File

@ -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)