2017-10-10 09:18:04 -07:00
squad = { }
2017-10-10 05:59:51 -07:00
ids_bg = { }
ids_hp = { }
ids_hptag = { }
ids_tag = { }
--local mod_storage = minetest.get_mod_storage()
squad.send_notice_all = function ( name , message )
for _ , players in ipairs ( minetest.get_connected_players ( ) ) do
local names = players : get_player_name ( )
if mod_storage : get_string ( name .. " _party " ) == mod_storage : get_string ( names .. " _party " ) and mod_storage : get_string ( name .. " _squad " ) == mod_storage : get_string ( names .. " _squad " ) then
minetest.chat_send_player ( names , minetest.colorize ( " orange " , " [Squad] = SQUAD-NOTICE = " ) .. " " .. message )
end
end
end
-- private notice
squad.send_notice = function ( name , message )
minetest.chat_send_player ( name , minetest.colorize ( " orange " , " [Squad] = NOTICE = " ) .. " " .. message )
end
-- check existance of squad in party, if exists, return true
squad.check_tag = function ( name , tag )
for _ , players in ipairs ( minetest.get_connected_players ( ) ) do
local playernames = players : get_player_name ( )
local squadnames = mod_storage : get_string ( playernames .. " _squad_leader " )
local cparty = mod_storage : get_string ( name .. " _party " )
if cparty == mod_storage : get_string ( playernames .. " _party " ) then
if squadnames ~= " " and squadnames == tag then
return true
end
end
end
end
-- find out people in a squad
squad.member_amt = function ( name , squad )
-- if not in a party, return
local cparty = mod_storage : get_string ( name .. " _party " )
if squad == " " then
return
end
local amt = 0
for _ , players in ipairs ( minetest.get_connected_players ( ) ) do
local playernames = players : get_player_name ( )
if cparty == mod_storage : get_string ( playernames .. " _party " ) and squad == mod_storage : get_string ( playernames .. " _squad " ) then
amt = amt + 1
end
end
return amt
end
squad.load_hud_self = function ( name )
local player = minetest.get_player_by_name ( name )
local cparty = mod_storage : get_string ( name .. " _party " )
local csquad = mod_storage : get_string ( name .. " _squad " )
local csquad_no = tonumber ( mod_storage : get_string ( name .. " _squad_no " ) )
-- add blanks huds to player whic can be modifed later on.
for i = 1 , 7 do
ids_bg [ name .. " _ " .. cparty .. " _bg_ " .. csquad .. " _ " .. i ] = player : hud_add ( {
hud_elem_type = " statbar " ,
text = " party_heart_background.png " ,
number = 0 ,
size = { x = 22 , y = 22 } ,
2017-10-12 19:25:22 -07:00
position = { x = 0.01 , y = 0.87 + ( i *- 0.07 ) } ,
offset = { x = 0 , y = 0 } ,
2017-10-10 05:59:51 -07:00
direction = 0 ,
} )
ids_hp [ name .. " _ " .. cparty .. " _hp_ " .. csquad .. " _ " .. i ] = player : hud_add ( {
hud_elem_type = " statbar " ,
text = " party_heart.png " ,
number = 0 ,
size = { x = 22 , y = 22 } ,
2017-10-12 19:25:22 -07:00
position = { x = 0.01 , y = 0.87 + ( i *- 0.07 ) } ,
offset = { x = 0 , y = 0 } ,
2017-10-10 05:59:51 -07:00
direction = 0 ,
} )
ids_hptag [ name .. " _ " .. cparty .. " _hptag_ " .. csquad .. " _ " .. i ] = player : hud_add ( {
hud_elem_type = " text " ,
2017-10-12 19:25:22 -07:00
position = { x = 0.01 , y = 0.87 + ( i *- 0.07 ) } ,
2017-10-10 05:59:51 -07:00
alignment = 0 ,
name = " text " ,
number = 0xFFFFFF ,
text = " " ,
alignment = { x = 1 , y = 0 } ,
2017-10-12 19:25:22 -07:00
offset = { x = 5 , y = 9 } ,
2017-10-10 05:59:51 -07:00
} )
ids_tag [ name .. " _ " .. cparty .. " _tag_ " .. csquad .. " _ " .. i ] = player : hud_add ( {
hud_elem_type = " text " ,
2017-10-12 19:25:22 -07:00
position = { x = 0.01 , y = 0.87 + ( i *- 0.07 ) } ,
2017-10-10 05:59:51 -07:00
alignment = 0 ,
name = " text " ,
number = 0x00FF00 ,
text = " " ,
alignment = { x = 1 , y = 0 } ,
2017-10-12 19:25:22 -07:00
offset = { x = 0 , y = - 8 } ,
2017-10-10 05:59:51 -07:00
} )
end
minetest.after ( 0.1 , function ( )
-- adds self hud
player : hud_change ( ids_bg [ name .. " _ " .. cparty .. " _bg_ " .. csquad .. " _ " .. csquad_no ] , " number " , 20 )
player : hud_change ( ids_hp [ name .. " _ " .. cparty .. " _hp_ " .. csquad .. " _ " .. csquad_no ] , " number " , player : get_hp ( ) )
player : hud_change ( ids_hptag [ name .. " _ " .. cparty .. " _hptag_ " .. csquad .. " _ " .. csquad_no ] , " text " , " HP: " .. player : get_hp ( ) .. " / 20 " )
player : hud_change ( ids_tag [ name .. " _ " .. cparty .. " _tag_ " .. csquad .. " _ " .. csquad_no ] , " text " , name )
end )
end
squad.update_hud_self = function ( name )
local player = minetest.get_player_by_name ( name )
local cparty = mod_storage : get_string ( name .. " _party " )
local csquad = mod_storage : get_string ( name .. " _squad " )
for _ , players in ipairs ( minetest.get_connected_players ( ) ) do
local playernames = players : get_player_name ( )
if cparty == mod_storage : get_string ( playernames .. " _party " ) and csquad == mod_storage : get_string ( playernames .. " _squad " ) and name ~= playernames then
local csquad_no = tonumber ( mod_storage : get_string ( playernames .. " _squad_no " ) )
-- update <name>'s hud with squad members.
minetest.after ( 0.3 , function ( )
player : hud_change ( ids_bg [ name .. " _ " .. cparty .. " _bg_ " .. csquad .. " _ " .. csquad_no ] , " number " , 20 )
player : hud_change ( ids_hp [ name .. " _ " .. cparty .. " _hp_ " .. csquad .. " _ " .. csquad_no ] , " number " , players : get_hp ( ) )
player : hud_change ( ids_hptag [ name .. " _ " .. cparty .. " _hptag_ " .. csquad .. " _ " .. csquad_no ] , " text " , " HP: " .. players : get_hp ( ) .. " / 20 " )
player : hud_change ( ids_tag [ name .. " _ " .. cparty .. " _tag_ " .. csquad .. " _ " .. csquad_no ] , " text " , playernames )
end )
end
end
end
squad.add_hud = function ( name )
local player = minetest.get_player_by_name ( name )
local cparty = mod_storage : get_string ( name .. " _party " )
local csquad = mod_storage : get_string ( name .. " _squad " )
local csquad_no = tonumber ( mod_storage : get_string ( name .. " _squad_no " ) )
for _ , players in ipairs ( minetest.get_connected_players ( ) ) do
local playernames = players : get_player_name ( )
if cparty == mod_storage : get_string ( playernames .. " _party " ) and csquad == mod_storage : get_string ( playernames .. " _squad " ) then
minetest.after ( 0.2 , function ( )
-- update squad members' hud with <name>
players : hud_change ( ids_bg [ playernames .. " _ " .. cparty .. " _bg_ " .. csquad .. " _ " .. csquad_no ] , " number " , 20 )
players : hud_change ( ids_hp [ playernames .. " _ " .. cparty .. " _hp_ " .. csquad .. " _ " .. csquad_no ] , " number " , player : get_hp ( ) )
players : hud_change ( ids_tag [ playernames .. " _ " .. cparty .. " _tag_ " .. csquad .. " _ " .. csquad_no ] , " text " , name )
players : hud_change ( ids_hptag [ playernames .. " _ " .. cparty .. " _hptag_ " .. csquad .. " _ " .. csquad_no ] , " text " , " HP: " .. player : get_hp ( ) .. " / 20 " )
end )
end
end
end
squad.join = function ( name , tag )
local cparty = mod_storage : get_string ( name .. " _party " )
local cparty_l = mod_storage : get_string ( cparty .. " _leader " )
local player = minetest.get_player_by_name ( name )
local squad_amt = squad.member_amt ( name , tag )
-- check if squad is full
if squad_amt > 7 then
squad.send_notice ( name , " Squad [ " .. tag .. " ] is full! " )
return
end
-- add the storage values to idenitify player
mod_storage : set_string ( name .. " _squad " , tag )
mod_storage : set_string ( name .. " _squad_no " , squad_amt + 1 )
-- add the huds
squad.load_hud_self ( name )
squad.add_hud ( name )
squad.update_hud_self ( name )
squad.send_notice_all ( name , name .. " has joined the [ " .. tag .. " ] squad " )
2017-10-12 07:43:34 -07:00
local tcolour = mod_storage : get_string ( cparty .. " _colour " )
if tcolour == " " then
tcolour = " lightgrey "
end
player : set_nametag_attributes ( { text = minetest.colorize ( tcolour , " [ " .. cparty_l .. " - " .. tag .. " ] " ) .. " " .. name } )
2017-10-11 03:31:03 -07:00
player : set_attribute ( " partychat " , " squad " )
2017-10-10 05:59:51 -07:00
end
squad.replace_hud = function ( name , oldno , newno )
local player = minetest.get_player_by_name ( name )
local cparty = mod_storage : get_string ( name .. " _party " )
local csquad = mod_storage : get_string ( name .. " _squad " )
mod_storage : set_string ( name .. " _squad_no " , newno )
for _ , players in ipairs ( minetest.get_connected_players ( ) ) do
local playernames = players : get_player_name ( )
if cparty == mod_storage : get_string ( playernames .. " _party " ) and csquad == mod_storage : get_string ( playernames .. " _squad " ) then
minetest.after ( 0.2 , function ( )
players : hud_change ( ids_bg [ playernames .. " _ " .. cparty .. " _bg_ " .. csquad .. " _ " .. oldno ] , " number " , 0 )
players : hud_change ( ids_hp [ playernames .. " _ " .. cparty .. " _hp_ " .. csquad .. " _ " .. oldno ] , " number " , 0 )
players : hud_change ( ids_hptag [ playernames .. " _ " .. cparty .. " _hptag_ " .. csquad .. " _ " .. oldno ] , " text " , " " )
players : hud_change ( ids_tag [ playernames .. " _ " .. cparty .. " _tag_ " .. csquad .. " _ " .. oldno ] , " text " , " " )
end )
minetest.after ( 0.3 , function ( )
players : hud_change ( ids_bg [ playernames .. " _ " .. cparty .. " _bg_ " .. csquad .. " _ " .. newno ] , " number " , 20 )
players : hud_change ( ids_hp [ playernames .. " _ " .. cparty .. " _hp_ " .. csquad .. " _ " .. newno ] , " number " , player : get_hp ( ) )
players : hud_change ( ids_hptag [ playernames .. " _ " .. cparty .. " _hptag_ " .. csquad .. " _ " .. newno ] , " text " , " HP: " .. player : get_hp ( ) .. " / 20 " )
players : hud_change ( ids_tag [ playernames .. " _ " .. cparty .. " _tag_ " .. csquad .. " _ " .. newno ] , " text " , name )
end )
end
end
end
squad.leave = function ( name , tag )
local cparty = mod_storage : get_string ( name .. " _party " )
local cparty_l = mod_storage : get_string ( cparty .. " _leader " )
local player = minetest.get_player_by_name ( name )
local csquad = mod_storage : get_string ( name .. " _squad " )
local csquad_no = tonumber ( mod_storage : get_string ( name .. " _squad_no " ) )
2017-10-11 03:31:03 -07:00
player : set_attribute ( " partychat " , " party " )
2017-10-10 05:59:51 -07:00
2017-10-10 09:18:04 -07:00
if csquad == " " then
return
end
2017-10-10 05:59:51 -07:00
-- remove all huds for player-that-left
for i = 1 , 7 do
player : hud_remove ( ids_bg [ name .. " _ " .. cparty .. " _bg_ " .. csquad .. " _ " .. i ] )
player : hud_remove ( ids_hp [ name .. " _ " .. cparty .. " _hp_ " .. csquad .. " _ " .. i ] )
player : hud_remove ( ids_hptag [ name .. " _ " .. cparty .. " _hptag_ " .. csquad .. " _ " .. i ] )
player : hud_remove ( ids_tag [ name .. " _ " .. cparty .. " _tag_ " .. csquad .. " _ " .. i ] )
end
mod_storage : set_string ( name .. " _squad " , nil )
mod_storage : set_string ( name .. " _squad_leader " , nil )
mod_storage : set_string ( name .. " _squad_lock " , nil )
mod_storage : set_string ( name .. " _squad_no " , nil )
2017-10-12 07:43:34 -07:00
local tcolour = mod_storage : get_string ( cparty .. " _colour " )
if tcolour == " " then
tcolour = " lightgrey "
end
player : set_nametag_attributes ( { text = minetest.colorize ( tcolour , " [ " .. cparty_l .. " ] " ) .. " " .. name } )
2017-10-10 05:59:51 -07:00
local squad_amt = squad.member_amt ( name , csquad )
for _ , players in ipairs ( minetest.get_connected_players ( ) ) do
local playernames = players : get_player_name ( )
if cparty == mod_storage : get_string ( playernames .. " _party " ) and csquad == mod_storage : get_string ( playernames .. " _squad " ) and name ~= playernames then
local msquad_n = tonumber ( mod_storage : get_string ( playernames .. " _squad_no " ) )
-- hide player-that-left's hud for other players
minetest.after ( 0.1 , function ( )
players : hud_change ( ids_bg [ playernames .. " _ " .. cparty .. " _bg_ " .. csquad .. " _ " .. csquad_no ] , " number " , 0 )
players : hud_change ( ids_hp [ playernames .. " _ " .. cparty .. " _hp_ " .. csquad .. " _ " .. csquad_no ] , " number " , 0 )
players : hud_change ( ids_hptag [ playernames .. " _ " .. cparty .. " _hptag_ " .. csquad .. " _ " .. csquad_no ] , " text " , " " )
players : hud_change ( ids_tag [ playernames .. " _ " .. cparty .. " _tag_ " .. csquad .. " _ " .. csquad_no ] , " text " , " " )
end )
end
end
for _ , players in ipairs ( minetest.get_connected_players ( ) ) do
local playernames = players : get_player_name ( )
if cparty == mod_storage : get_string ( playernames .. " _party " ) and csquad == mod_storage : get_string ( playernames .. " _squad " ) and name ~= playernames then
local msquad_n = tonumber ( mod_storage : get_string ( playernames .. " _squad_no " ) )
if msquad_n > squad_amt then
if msquad_n == 7 then
squad.replace_hud ( playernames , 7 , csquad_no )
return
elseif msquad_n == 6 then
squad.replace_hud ( playernames , 6 , csquad_no )
return
elseif msquad_n == 5 then
squad.replace_hud ( playernames , 5 , csquad_no )
return
elseif msquad_n == 4 then
squad.replace_hud ( playernames , 4 , csquad_no )
return
elseif msquad_n == 3 then
squad.replace_hud ( playernames , 3 , csquad_no )
return
elseif msquad_n == 2 then
squad.replace_hud ( playernames , 2 , csquad_no )
return
end
end
end
end
end
minetest.register_chatcommand ( " sq " , {
description = " Create and join a squad. For help, use /sq help " ,
privs = { shout = true } ,
func = function ( name , param )
local paramlist = { }
local index = 1
for param_split in param : gmatch ( " %S+ " ) do
paramlist [ index ] = param_split
index = index + 1
end
local param1 = paramlist [ 1 ]
local param2 = paramlist [ 2 ]
local player = minetest.get_player_by_name ( name )
local cparty = mod_storage : get_string ( name .. " _party " )
local cparty_o = mod_storage : get_string ( name .. " _officer " )
local csquad = mod_storage : get_string ( name .. " _squad " )
local csquad_l = mod_storage : get_string ( name .. " _squad_leader " )
local player_list = minetest.deserialize ( mod_storage : get_string ( " playerlist " ) )
if party.check ( name , 1 ) == true then
return
end
2017-10-11 03:31:03 -07:00
if param1 == " help " then
2017-10-10 05:59:51 -07:00
squad.send_notice ( name , " NOTE: Unlike parties, squads do not last permanently, you automatically leave if you leave the game and if the squad leader does so, the squad is automatically disbanded. " )
2017-10-10 07:11:45 -07:00
squad.send_notice ( name , minetest.colorize ( " cyan " , " /sq join <squadname> " ) .. " --- Join a squad. " )
squad.send_notice ( name , minetest.colorize ( " cyan " , " /sq leave " ) .. " --- Leave your squad. " )
squad.send_notice ( name , minetest.colorize ( " cyan " , " /sq invite <yes/no> " ) .. " --- Accept / reject an invite. " )
2017-10-10 05:59:51 -07:00
squad.send_notice ( name , " ===== PARTY OFFICERS/ PARTY LEADER COMMANDS: ===== " )
squad.send_notice ( name , minetest.colorize ( " cyan " , " /sq create <squadname> " ) .. " --- Create a squad. " )
squad.send_notice ( name , " ===== SQUAD LEADER COMMANDS: ===== " )
squad.send_notice ( name , minetest.colorize ( " cyan " , " /sq disband " ) .. " --- Disband your squad. " )
--squad.send_notice(name, minetest.colorize("cyan", "/sq leader <playername>").. " --- Give your squad leader position to someone else.")
squad.send_notice ( name , minetest.colorize ( " cyan " , " /sq lock <open/private> " ) .. " --- Change joining method for your squad. " )
squad.send_notice ( name , minetest.colorize ( " cyan " , " /sq invite <playername> " ) .. " --- Invite a player to your squad. " )
squad.send_notice ( name , " ===== PARTY LEADER / ADMIN COMMANDS: ===== " )
squad.send_notice ( name , minetest.colorize ( " cyan " , " /sq disband <squadname> " ) .. " --- Disband your squad in your party. " )
mod_storage : set_string ( name .. " _squad " , param2 )
mod_storage : set_string ( name .. " _squad_leader " , param2 )
elseif param1 == " create " and param2 ~= nil then
-- check if player is an officer or above.
if party.check ( name , 2 ) == true then
return
end
-- check if tag is too long
2017-10-12 09:55:16 -07:00
if string.len ( param2 ) > PARTY_SQUAD_NAME_LENGTH then
party.send_notice ( name , " Nametag is too long! " .. PARTY_SQUAD_NAME_LENGTH .. " is the maximum amount of characters " )
2017-10-10 05:59:51 -07:00
return
end
-- check if tag exists
if squad.check_tag ( name , param2 ) == true then
squad.send_notice ( name , " Squad name selected already exists. Please choose another one. " )
return
end
-- if player not in another squad already
if csquad == " " then
local cparty_l = mod_storage : get_string ( cparty .. " _leader " )
party.send_notice_all ( name , name .. " created the [ " .. param2 .. " ] squad in " .. cparty .. " 's party [ " .. cparty_l .. " ]. " )
2017-10-12 09:55:16 -07:00
2017-10-10 05:59:51 -07:00
mod_storage : set_string ( name .. " _squad_leader " , param2 )
2017-10-12 09:55:16 -07:00
mod_storage : set_string ( name .. " _squad_lock " , PARTY_SQUAD_JOIN_MODE )
2017-10-10 05:59:51 -07:00
squad.join ( name , param2 )
else squad.send_notice ( name , " You are already in [ " .. csquad .. " ] squad. " )
end
elseif param1 == " disband " then
local cparty_l = mod_storage : get_string ( cparty .. " _leader " )
if csquad_l == csquad and param2 == nil then
if csquad == " " then
squad.send_notice ( name , " You are not in a squad! " )
return
end
squad.send_notice_all ( name , " Squad [ " .. csquad .. " ] has been disbanded by the squad leader " .. name )
party.send_notice_all ( name , " Squad [ " .. csquad .. " ] has been disbanded by the squad leader " .. name )
-- remove all online squad members
for _ , players in ipairs ( minetest.get_connected_players ( ) ) do
local names = players : get_player_name ( )
if mod_storage : get_string ( names .. " _party " ) == cparty and mod_storage : get_string ( names .. " _squad " ) == csquad then
squad.leave ( names )
end
end
-- Allow party leader to disband squads
elseif ( param2 ~= nil or param2 ~= " " ) then
if party.check ( name , 3 ) == true then
return
end
if squad.check_tag ( name , param2 ) == true and param2 ~= " " then
party.send_notice_all ( name , " Squad [ " .. param2 .. " ] has been disbanded by the party leader " .. name )
for _ , players in ipairs ( minetest.get_connected_players ( ) ) do
local names = players : get_player_name ( )
if mod_storage : get_string ( names .. " _party " ) == cparty and mod_storage : get_string ( names .. " _squad " ) == param2 then
squad.leave ( names )
end
end
else squad.send_notice ( name , " Squad [ " .. param2 .. " ] does not exist in your party! " )
end
2017-10-11 21:00:23 -07:00
else squad.send_notice ( name , " You are not a squad leader nor the party leader! " )
2017-10-10 05:59:51 -07:00
end
elseif param1 == " lock " and param2 ~= nil then
if csquad_l ~= csquad then
squad.send_notice ( name , " You are not a squad leader. " )
return
end
if param2 == " open " then
mod_storage : set_string ( name .. " _squad_lock " , " " )
squad.send_notice_all ( name , " [Open mode] Public joining is enabled for " .. csquad .. " squad " )
elseif param2 == " private " then
mod_storage : set_string ( name .. " _squad_lock " , " private " )
squad.send_notice_all ( name , " [Private mode] Public joining is disabled for " .. csquad .. " squad " )
end
elseif param1 == " kick " and param2 ~= nil then
--check if player is squad leader
if csquad_l ~= csquad then
squad.send_notice ( name , " You are not a squad leader. " )
return
end
if minetest.player_exists ( param2 ) then
--check if player is online
if minetest.get_player_by_name ( param2 ) == nil then
squad.send_notice ( name , " Player " .. param2 .. " is not online now! " )
return
end
if mod_storage : get_string ( param2 .. " _party " ) == cparty and mod_storage : get_string ( param2 .. " _squad " ) == csquad then
squad.send_notice_all ( name , param2 .. " was kicked from the [ " .. csquad .. " ] squad by " .. name )
squad.leave ( param2 )
else squad.send_notice ( name , " Player " .. param2 .. " is not in your squad / party! " )
end
else squad.send_notice ( name , " Player " .. param2 .. " does not exist! " )
end
elseif param1 == " join " and param2 ~= nil then
if squad.check_tag ( name , param2 ) ~= true then
squad.send_notice ( name , " Squad name does not exist in your party! " )
return
end
if csquad ~= " " then
squad.send_notice ( name , " You are already in squad [ " .. csquad .. " ]. " )
return
end
for _ , players in ipairs ( minetest.get_connected_players ( ) ) do
local names = players : get_player_name ( )
-- if same party and squad name matches param2
if mod_storage : get_string ( names .. " _party " ) == cparty and mod_storage : get_string ( names .. " _squad " ) == param2 then
if mod_storage : get_string ( names .. " _squad_leader " ) ~= " " then
squadleadername = names
end
end
end
if mod_storage : get_string ( squadleadername .. " _squad_lock " ) == " private " then
squad.send_notice ( name , " Squad is private! " )
else
if squad.member_amt ( name , param2 ) <= 7 then
squad.join ( name , param2 )
else squad.send_notice ( name , " Squad [ " .. param2 .. " ] is full! " )
end
end
elseif param1 == " leave " then
if csquad == " " then
squad.send_notice ( name , " You are not in a squad! " )
return
end
if csquad_l == csquad then
squad.send_notice ( name , " You cannot leave because you are the squad leader! Use '/sq disband' instead. " )
return
end
squad.send_notice_all ( name , name .. " has left the [ " .. csquad .. " ] squad " )
squad.leave ( name )
elseif param1 == " invite " and param2 ~= nil then
if ( param2 == " yes " or param2 == " no " ) and csquad == " " then
if player : get_attribute ( " squadinvite " ) == nil then
squad.send_notice ( name , " You have not received a squad invite! " )
return
end
local sender = player : get_attribute ( " squadinvite " )
local csquad_i = mod_storage : get_string ( sender .. " _squad " )
if param2 == " yes " then
if squad.member_amt ( name , csquad_i ) <= 7 then
squad.join ( name , csquad_i )
squad.send_notice ( sender , name .. " has accepted your invite to join your squad [ " .. csquad_i .. " ] " )
player : set_attribute ( " squadinvite " , nil )
else
squad.send_notice ( sender , name .. " has accepted your invite to join your squad [ " .. csquad_i .. " ] BUT your squad is full! " )
squad.send_notice ( name , " You have accepted " .. sender .. " 's invitation to join the squad [ " .. csquad_i .. " ] BUT the squad is full! " )
end
elseif param2 == " no " then
squad.send_notice ( name , " You have rejected " .. sender .. " 's invitation to join the squad [ " .. csquad_i .. " ] " )
squad.send_notice ( sender , name .. " has rejected your invitation to join your squad [ " .. csquad_i .. " ] " )
player : set_attribute ( " squadinvite " , nil )
end
elseif csquad ~= " " then
if csquad_l ~= csquad then
squad.send_notice ( name , " You are not a squad leader. " )
return
end
if minetest.player_exists ( param2 ) then
-- check if player is online
if minetest.get_player_by_name ( param2 ) == nil then
squad.send_notice ( name , " Player " .. param2 .. " is not online! " )
return
end
-- check if player is in the same party
if mod_storage : get_string ( param2 .. " _party " ) ~= cparty then
squad.send_notice ( name , " Player " .. param2 .. " is not in your party! " )
return
end
-- check if player is already part of a squad
local target_squad = mod_storage : get_string ( param2 .. " _squad " )
if target_squad ~= " " then
squad.send_notice ( name , " Player " .. param2 .. " is already part of the squad " .. target_squad .. " ! " )
return
end
-- send invitation
squad.send_notice ( param2 , name .. " invited you to join the " .. csquad .. " squad. '/sq invite yes' to accept, '/sq invite no' to reject. " )
minetest.get_player_by_name ( param2 ) : set_attribute ( " squadinvite " , name )
squad.send_notice ( name , param2 .. " has been sent an invitation to join [ " .. csquad .. " ] squad. Pending response " )
else squad.send_notice ( name , " Player " .. param2 .. " does not exist! " )
end
2017-10-12 07:43:34 -07:00
else squad.send_notice ( name , " You are not in a squad! " )
2017-10-10 05:59:51 -07:00
end
else squad.send_notice ( name , " ERROR: Command is invalid! For help, use the command '/sq help'. " )
end
end ,
} )
minetest.register_on_player_hpchange ( function ( player , hp_change )
local name = player : get_player_name ( )
local cparty = mod_storage : get_string ( name .. " _party " )
local csquad = mod_storage : get_string ( name .. " _squad " )
local csquad_no = tonumber ( mod_storage : get_string ( name .. " _squad_no " ) )
if csquad == " " then
return
end
-- update self
--minetest.after(0.01, function()
if player : get_hp ( ) + hp_change < 20 then
player : hud_change ( ids_hp [ name .. " _ " .. cparty .. " _hp_ " .. csquad .. " _ " .. csquad_no ] , " number " , player : get_hp ( ) + hp_change )
player : hud_change ( ids_hptag [ name .. " _ " .. cparty .. " _hptag_ " .. csquad .. " _ " .. csquad_no ] , " text " , " HP: " .. player : get_hp ( ) + hp_change .. " / 20 " )
elseif player : get_hp ( ) + hp_change >= 20 then
player : hud_change ( ids_hp [ name .. " _ " .. cparty .. " _hp_ " .. csquad .. " _ " .. csquad_no ] , " number " , 20 )
player : hud_change ( ids_hptag [ name .. " _ " .. cparty .. " _hptag_ " .. csquad .. " _ " .. csquad_no ] , " text " , " HP: 20 / 20 " )
end
--end)
-- update squad displays of self
for _ , players in ipairs ( minetest.get_connected_players ( ) ) do
local playernames = players : get_player_name ( )
if cparty == mod_storage : get_string ( playernames .. " _party " ) and csquad == mod_storage : get_string ( playernames .. " _squad " ) and name ~= playernames then
minetest.after ( 0.02 , function ( )
if player : get_hp ( ) < 20 then
players : hud_change ( ids_hp [ playernames .. " _ " .. cparty .. " _hp_ " .. csquad .. " _ " .. csquad_no ] , " number " , player : get_hp ( ) )
players : hud_change ( ids_hptag [ playernames .. " _ " .. cparty .. " _hptag_ " .. csquad .. " _ " .. csquad_no ] , " text " , " HP: " .. player : get_hp ( ) .. " / 20 " )
elseif player : get_hp ( ) >= 20 then
players : hud_change ( ids_hp [ playernames .. " _ " .. cparty .. " _hp_ " .. csquad .. " _ " .. csquad_no ] , " number " , 20 )
players : hud_change ( ids_hptag [ playernames .. " _ " .. cparty .. " _hptag_ " .. csquad .. " _ " .. csquad_no ] , " text " , " HP: 20 / 20 " )
end
end )
end
end
end )
minetest.register_on_joinplayer ( function ( player )
-- clear all stats
local name = player : get_player_name ( )
local csquad = mod_storage : get_string ( name .. " _squad " )
if csquad ~= " " then
squad.leave ( name )
end
end )
minetest.register_on_leaveplayer ( function ( player )
local name = player : get_player_name ( )
local csquad = mod_storage : get_string ( name .. " _squad " )
local cparty = mod_storage : get_string ( name .. " _party " )
player : set_attribute ( " squadinvite " , nil )
if csquad == " " then
return
end
-- disband squad if squad leader leaves
if mod_storage : get_string ( name .. " _squad_leader " ) == csquad then
2017-10-11 21:00:23 -07:00
squad.send_notice_all ( name , " The squad [ " .. csquad .. " ] is disbanded because the squad leader, " .. name .. " , has left the game. " )
2017-10-10 05:59:51 -07:00
-- remove all members
for _ , players in ipairs ( minetest.get_connected_players ( ) ) do
local names = players : get_player_name ( )
if mod_storage : get_string ( names .. " _party " ) == cparty and mod_storage : get_string ( names .. " _squad " ) == csquad then
squad.leave ( names )
end
end
else
squad.send_notice_all ( name , name .. " has left the [ " .. csquad .. " ] squad because " .. name .. " left the game. " )
squad.leave ( name )
end
end )