From 8d9a3281befa101f711b2ad56e5dd7a90e6a76f8 Mon Sep 17 00:00:00 2001 From: Zughy <4279489-marco_a@users.noreply.gitlab.com> Date: Sun, 19 Jul 2020 16:08:44 +0200 Subject: [PATCH] implemented utils 'is_player_invited', 'cancel_invite' and getter 'get_inviter' --- DOCS.md | 3 +++ api.lua | 32 +++++++++++++++++++++++++++++--- player_manager.lua | 8 ++++++-- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/DOCS.md b/DOCS.md index 5d5fe28..24c122e 100644 --- a/DOCS.md +++ b/DOCS.md @@ -6,13 +6,16 @@ Because it's always good to understand the API without surfing the code, init? : ### 1.1 Utils +* `parties.is_player_invited(p_name)`: (bool) checks whether a player has a pending invite * `parties.is_player_in_party(p_name)`: (bool) checks whether a player is in any party * `parties.is_player_party_leader(p_name)`: (bool) checks whether a player is the party leader of any party * `parties.chat_send_party(p_name, msg, as_broadcast)`: (nil) sends a message to every player inside the party where `p_name` is (`p_name` doesn't necessarily have to be the party leader). If `as_broadcast` is true, it'll be sent without following Minetest chat format. If false, `p_name` will be pointed as the sender when formatting the message * `parties.change_party_leader(old_leader, new_leader)`: (nil) changes the party leader +* `parties.cancel_invite(p_name)`: (nil) cancels a pending invite ### 1.2 Getters +* `parties.get_inviter(p_name)`: (string) returns the name of the player who invited `p_name`, if an event is pending * `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 diff --git a/api.lua b/api.lua index f2856fd..a41b91d 100644 --- a/api.lua +++ b/api.lua @@ -28,7 +28,7 @@ function parties.invite(sender, p_name) minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] This player is not online!"))) return end - -- se è già stato invitato + -- se è già stato invitato dalla stessa persona if players_invited[p_name] and players_invited[p_name] == sender then minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] You've already invited this player!"))) return end @@ -56,9 +56,11 @@ function parties.invite(sender, p_name) -- 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 + if players_invited[p_name] and players_invited[p_name] == sender then players_invited[p_name] = nil - minetest.chat_send_player(sender, format_party_message(minetest.colorize("#ededed", S("No answer from @1...", p_name)))) + if minetest.get_player_by_name(sender) then + minetest.chat_send_player(sender, format_party_message(minetest.colorize("#ededed", S("No answer from @1...", p_name)))) + end end end) end @@ -114,6 +116,8 @@ function parties.leave(p_name) minetest.chat_send_player(p_name, minetest.colorize("#e6482e", S("[!] You must enter a party first!"))) return end + -- se si aveva invitato qualcuno + local party_leader = players_in_parties[p_name] -- rimuovo dal gruppo @@ -191,6 +195,13 @@ end --------------------UTILS--------------------- ---------------------------------------------- +function parties.is_player_invited(p_name) + if players_invited[p_name] then return true + else return false end +end + + + function parties.is_player_in_party(p_name) if players_in_parties[p_name] then return true else return false end @@ -246,12 +257,23 @@ end +function parties.cancel_invite(p_name) + players_invited[p_name] = nil +end + + ---------------------------------------------- -----------------GETTERS---------------------- ---------------------------------------------- +function parties.get_inviter(p_name) + return players_invited[p_name] +end + + + function parties.get_party_leader(p_name) return players_in_parties[p_name] end @@ -262,6 +284,10 @@ function parties.get_party_members(party_leader) return current_parties[party_leader] end + + + + ---------------------------------------------- ---------------FUNZIONI LOCALI---------------- ---------------------------------------------- diff --git a/player_manager.lua b/player_manager.lua index dc4ada2..95b6fed 100644 --- a/player_manager.lua +++ b/player_manager.lua @@ -2,7 +2,11 @@ minetest.register_on_leaveplayer(function(player) local p_name = player:get_player_name() - if not parties.is_player_in_party(p_name) then return end + if parties.is_player_in_party(p_name) then + parties.leave(p_name) + end - parties.leave(p_name) + if parties.is_player_invited(p_name) then + parties.cancel_invite(p_name) + end end)