Distinzione tra leave e disband | quando leader gruppo abbandona, ne viene designato un altro in automatico

master
Marco 2020-06-30 20:55:03 +02:00
parent 4a8b2df837
commit 394da76abe
4 changed files with 78 additions and 23 deletions

View File

@ -10,6 +10,16 @@ ChatCmdBuilder.new("party", function(cmd)
parties.join(sender)
end)
-- abbandono
cmd:sub("leave", function(sender)
parties.leave(sender)
end)
-- scioglimento
cmd:sub("disband", function(sender)
parties.disband(sender)
end)
end,{})

View File

@ -4,7 +4,7 @@
# textdomain: parties
# party_manager.lua
[!] Only the party leader can invite!=[!] Può invitare solo il capo gruppo!
[!] Only the party leader can perform this action=[!] Solo il capo gruppo può eseguire quest'azione!
[!] You can't invite yourself!=[!] Non ci si può invitare da soli!
[!] This player is not online!=[!] Questo giocatore non è online!
[!] You've already invited this player!=[!] Hai già invitato questo giocatore!
@ -18,3 +18,5 @@ You've joined @1's party=Ti sei unito al gruppo di @1
The party has been disbanded=Il gruppo è stato sciolto
@1 has left the party=@1 è uscito dal gruppo
You've left the party=Sei uscito dal gruppo
@1 is the new party leader=@1 è il nuovo capo gruppo
Party=Gruppo

View File

@ -4,7 +4,7 @@
# textdomain: parties
# party_manager.lua
[!] Only the party leader can invite!=
[!] Only the party leader can perform this action!=
[!] You can't invite yourself!=
[!] This player is not online!=
[!] You've already invited this player!=
@ -18,3 +18,5 @@ You've joined @1's party=
The party has been disbanded=
@1 has left the group=
You've left the party=
@1 is the new party leader=
Party=

View File

@ -11,9 +11,9 @@ local players_invited = {} -- KEY p_name; VALUE: inviter
function parties.invite(sender, p_name)
-- se si è in un party ma non si è il capo gruppo
-- se si è in un gruppo ma non si è il capo gruppo
if players_in_parties[sender] and not current_parties[sender] then
minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] Only the party leader can invite!")))
minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] Only the party leader can perform this action!")))
return end
-- se si invita se stessi
@ -50,6 +50,7 @@ end
function parties.join(p_name)
-- se non ha nesssun invito
if not players_invited[p_name] then
minetest.chat_send_player(p_name, minetest.colorize("#e6482e", S("[!] You have no pending invites!")))
return end
@ -75,33 +76,57 @@ end
function parties.leave(p_name)
-- se non si è in un gruppo
if not players_in_parties[p_name] then
minetest.chat_send_player(p_name, minetest.colorize("#e6482e", S("[!] You must enter a party first!")))
return end
local party_leader = players_in_parties[p_name]
if current_parties[p_name] then
for _, pl_name in pairs(current_parties[party_leader]) do
players_in_parties[pl_name] = nil
-- rimuovo dal gruppo
for k, pl_name in pairs(current_parties[party_leader]) do
if pl_name == p_name then
current_parties[party_leader][k] = nil
end
parties.chat_send_party(p_name, format_party_message(S("The party has been disbanded")), true)
current_parties[party_leader] = nil
else
for k, pl_name in pairs(current_parties[party_leader]) do
if pl_name == p_name then
current_parties[party_leader][k] = nil
end
end
parties.chat_send_party(p_name, S("@1 has left the party", p_name), true)
minetest.chat_send_player(p_name, format_party_message(S("You've left the party")))
end
players_in_parties[p_name] = nil
minetest.chat_send_player(p_name, format_party_message(S("You've left the party")), true)
-- se ad abbandonare è stato il capo gruppo, ne nomino un altro
if p_name == party_leader then
local new_leader = current_parties[party_leader][next(current_parties[party_leader])]
parties.chat_send_party(new_leader, S("@1 has left the party", p_name), true)
parties.change_party_leader(p_name, new_leader)
else
parties.chat_send_party(party_leader, S("@1 has left the party", p_name), true)
end
end
function parties.disband(p_name)
-- se non si è in un gruppo
if not players_in_parties[p_name] then
minetest.chat_send_player(p_name, minetest.colorize("#e6482e", S("[!] You must enter a party first!")))
return end
-- se si è in un gruppo ma non si è il capo gruppo
if players_in_parties[p_name] and not current_parties[p_name] then
minetest.chat_send_player(p_name, minetest.colorize("#e6482e", S("[!] Only the party leader can perform this action!")))
return end
for _, pl_name in pairs(current_parties[p_name]) do
players_in_parties[pl_name] = nil
end
parties.chat_send_party(p_name, format_party_message(S("The party has been disbanded")), true)
current_parties[p_name] = nil
end
@ -120,7 +145,7 @@ end
function parties.is_players_party_leader(p_name)
function parties.is_player_party_leader(p_name)
if current_parties[p_name] then return true
else return false end
end
@ -149,6 +174,22 @@ end
function parties.change_party_leader(old_leader, new_leader)
current_parties[new_leader] = {}
for k, v in pairs(current_parties[old_leader]) do
current_parties[new_leader][k] = v
players_in_parties[v] = new_leader
end
current_parties[old_leader] = nil
parties.chat_send_party(new_leader, S("@1 is the new party leader", new_leader), true)
end
----------------------------------------------
@ -170,5 +211,5 @@ end
----------------------------------------------
function format_party_message(msg)
return minetest.colorize("#ddffdd", "[Party] " .. msg)
return minetest.colorize("#ddffdd", "[" .. S("Party") .. "] " .. msg)
end