Callbacks implemented

master
Zughy 2020-07-18 13:31:58 +02:00
parent 9859a6b78c
commit 63702f77da
4 changed files with 59 additions and 1 deletions

12
DOCS.md
View File

@ -16,9 +16,19 @@ Because it's always good to understand the API without surfing the code, init? :
* `parties.get_party_leader(p_name)`: (string) returns the party leader of the party where `p_name` is in
* `parties.get_party_members(party_leader)`: (table) returns a list of every player inside the party where `party_leader` is in
## 2 Customisation
### 2.1 Chat
### 2.1 Callbacks
* `parties.register_on_pre_party_invite(sender, p_name)`: use it to run additional checks. Returning true keeps executing the invite, returning false/nil cancels it
* `parties.register_on_party_invite(sender, p_name)`: called when an invite has been succesfully sent
* `parties.register_on_pre_party_join(party_leader, p_name)`: use it to run additional checks.Returning true keeps executing the join function, returning false/nil cancels it
* `parties.register_on_party_join(party_leader, p_name)`: called when a player succesfully joined a party
* `parties.register_on_party_leave(party_leader, p_name)`: called when a player leaves a party
* `parties.register_on_party_disband(p_name)`: called when a party gets disbanded (by `p_name`, who is the party leader)
### 2.2 Chat
Chat is light blue by default and it adds the `[Party] ` prefix at the beginning of every message. It then follows the format of the chat set by the owner. By default is:
`[Party] <playername> message`

32
api.lua
View File

@ -9,6 +9,8 @@ local players_invited = {} -- KEY p_name; VALUE: inviter
function parties.invite(sender, p_name)
-- se si è in un gruppo ma non si è il capo gruppo
@ -36,12 +38,22 @@ function parties.invite(sender, p_name)
minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] This player is already in a party!")))
return end
-- se non può essere invitato (callback)
for _, callback in ipairs(parties.registered_on_pre_party_invite) do
if not callback(sender, p_name) then return end
end
-- TODO: riproduzione suono invito
minetest.chat_send_player(sender, format_party_message(S("Invite to @1 successfully sent", p_name)))
minetest.chat_send_player(p_name, format_party_message(S("@1 has invitied you in a party, would you like to join? (/party join)", sender)))
players_invited[p_name] = sender
-- eventuali callback
for _, callback in ipairs(parties.registered_on_party_invite) do
callback(sender, p_name)
end
-- se non ha accettato dopo 15 secondi, annullo l'invito
minetest.after(15, function()
if minetest.get_player_by_name(sender) and minetest.get_player_by_name(p_name) and players_invited[p_name] and players_invited[p_name] == sender then
@ -62,6 +74,11 @@ function parties.join(p_name)
local party_leader = players_invited[p_name]
-- se non può accettare (callback)
for _, callback in ipairs(parties.registered_on_pre_party_join) do
if not callback(party_leader, p_name) then return end
end
if players_in_parties[party_leader] == nil then
current_parties[party_leader] = {party_leader}
players_in_parties[party_leader] = party_leader
@ -75,6 +92,11 @@ function parties.join(p_name)
table.insert(current_parties[party_leader], p_name)
minetest.chat_send_player(p_name, format_party_message(S("You've joined @1's party", party_leader)))
-- eventuali callback
for _, callback in ipairs(parties.registered_on_party_join) do
callback(party_leader, p_name)
end
end
@ -99,6 +121,11 @@ function parties.leave(p_name)
players_in_parties[p_name] = nil
minetest.chat_send_player(p_name, format_party_message(S("You've left the party")), true)
-- eventuali callback
for _, callback in ipairs(parties.registered_on_party_leave) do
callback(party_leader, p_name)
end
-- se ad abbandonare è stato il capo gruppo, lo cambio
if p_name == party_leader then
@ -138,6 +165,11 @@ function parties.disband(p_name)
parties.chat_send_party(p_name, S("The party has been disbanded"), true)
-- eventuali callback
for _, callback in ipairs(parties.registered_on_party_disband) do
callback(p_name)
end
for _, pl_name in pairs(current_parties[p_name]) do
players_in_parties[pl_name] = nil
end

15
callbacks.lua Normal file
View File

@ -0,0 +1,15 @@
-- I had no idea how to do it, so, uhm... this is how Minetest handles callbacks
local function make_registration()
local t = {}
local registerfunc = function(func)
t[#t+1] = func
end
return t, registerfunc
end
parties.registered_on_pre_party_invite, parties.register_on_pre_party_invite = make_registration()
parties.registered_on_party_invite, parties.register_on_party_invite = make_registration()
parties.registered_on_pre_party_join, parties.register_on_pre_party_join = make_registration()
parties.registered_on_party_join, parties.register_on_party_join = make_registration()
parties.registered_on_party_leave, parties.register_on_party_leave = make_registration()
parties.registered_on_party_disband, parties.register_on_party_disband = make_registration()

View File

@ -1,4 +1,5 @@
dofile(minetest.get_modpath("parties") .. "/api.lua")
dofile(minetest.get_modpath("parties") .. "/callbacks.lua")
dofile(minetest.get_modpath("parties") .. "/chatcmdbuilder.lua")
dofile(minetest.get_modpath("parties") .. "/commands.lua")
dofile(minetest.get_modpath("parties") .. "/player_manager.lua")