ctf_flag fix bugs and make flag pick up faster
This commit is contained in:
parent
dcce50c476
commit
76e3d25be0
@ -1,7 +1,4 @@
|
||||
local function do_capture(attname, flag, returned)
|
||||
print("Do capture " .. attname)
|
||||
print(flag.x .. ", " .. flag.y .. ", " .. flag.z)
|
||||
|
||||
local team = flag.team
|
||||
local attacker = ctf.player(attname)
|
||||
|
||||
@ -34,6 +31,8 @@ local function do_capture(attname, flag, returned)
|
||||
player = attname
|
||||
}
|
||||
|
||||
ctf_flag.update(flag)
|
||||
|
||||
for i = 1, #ctf_flag.registered_on_pick_up do
|
||||
ctf_flag.registered_on_pick_up[i](attname, flag)
|
||||
end
|
||||
@ -103,6 +102,7 @@ ctf_flag = {
|
||||
ctf_flag.on_rightclick(pos, node, clicker)
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
local name = clicker:get_player_name()
|
||||
local flag = ctf_flag.get(pos)
|
||||
if not flag then
|
||||
return
|
||||
@ -110,19 +110,19 @@ ctf_flag = {
|
||||
|
||||
if flag.claimed then
|
||||
if ctf.setting("flag.capture_take") then
|
||||
minetest.chat_send_player(player, "This flag has been taken by "..flag.claimed.player)
|
||||
minetest.chat_send_player(player, "who is a member of team "..flag.claimed.team)
|
||||
minetest.chat_send_player(name, "This flag has been taken by "..flag.claimed.player)
|
||||
minetest.chat_send_player(name, "who is a member of team "..flag.claimed.team)
|
||||
return
|
||||
else
|
||||
minetest.chat_send_player(player, "Oops! This flag should not be captured. Reverting...")
|
||||
minetest.chat_send_player(name, "Oops! This flag should not be captured. Reverting...")
|
||||
flag.claimed = nil
|
||||
end
|
||||
end
|
||||
ctf.gui.flag_board(clicker:get_player_name(),pos)
|
||||
ctf.gui.flag_board(name, pos)
|
||||
end,
|
||||
on_punch = function(pos, node, puncher)
|
||||
local player = puncher:get_player_name()
|
||||
if not puncher or not player then
|
||||
local name = puncher:get_player_name()
|
||||
if not puncher or not name then
|
||||
return
|
||||
end
|
||||
|
||||
@ -133,11 +133,11 @@ ctf_flag = {
|
||||
|
||||
if flag.claimed then
|
||||
if ctf.setting("flag.capture_take") then
|
||||
minetest.chat_send_player(player, "This flag has been taken by " .. flag.claimed.player)
|
||||
minetest.chat_send_player(player, "who is a member of team " .. flag.claimed.team)
|
||||
minetest.chat_send_player(name, "This flag has been taken by " .. flag.claimed.player)
|
||||
minetest.chat_send_player(name, "who is a member of team " .. flag.claimed.team)
|
||||
return
|
||||
else
|
||||
minetest.chat_send_player(player, "Oops! This flag should not be captured. Reverting.")
|
||||
minetest.chat_send_player(name, "Oops! This flag should not be captured. Reverting.")
|
||||
flag.claimed = nil
|
||||
end
|
||||
end
|
||||
@ -147,33 +147,32 @@ ctf_flag = {
|
||||
return
|
||||
end
|
||||
|
||||
if ctf.team(team) and ctf.player(player).team then
|
||||
if ctf.player(player).team == team then
|
||||
if ctf.team(team) and ctf.player(name).team then
|
||||
if ctf.player(name).team == team then
|
||||
-- Clicking on their team's flag
|
||||
if ctf.setting("flag.capture_take") then
|
||||
ctf_flag._flagret(player)
|
||||
ctf_flag._flagret(name)
|
||||
end
|
||||
else
|
||||
-- Clicked on another team's flag
|
||||
local diplo = ctf.diplo.get(team, ctf.player(player).team) or
|
||||
local diplo = ctf.diplo.get(team, ctf.player(name).team) or
|
||||
ctf.setting("default_diplo_state")
|
||||
|
||||
if diplo ~= "war" then
|
||||
minetest.chat_send_player(player, "You are at peace with this team!")
|
||||
minetest.chat_send_player(name, "You are at peace with this team!")
|
||||
return
|
||||
end
|
||||
|
||||
do_capture(player, flag)
|
||||
do_capture(name, flag)
|
||||
end
|
||||
else
|
||||
minetest.chat_send_player(puncher:get_player_name(),"You are not part of a team!")
|
||||
minetest.chat_send_player(name, "You are not part of a team!")
|
||||
end
|
||||
end,
|
||||
_flagret = function(player)
|
||||
minetest.chat_send_player(player, "Own flag")
|
||||
_flagret = function(name)
|
||||
for i = 1, #ctf_flag.claimed do
|
||||
if ctf_flag.claimed[i].claimed.player == player then
|
||||
do_capture(player, ctf_flag.claimed[i], true)
|
||||
if ctf_flag.claimed[i].claimed.player == name then
|
||||
do_capture(name, ctf_flag.claimed[i], true)
|
||||
ctf_flag.collect_claimed()
|
||||
end
|
||||
end
|
||||
@ -183,7 +182,9 @@ ctf_flag = {
|
||||
meta:set_string("infotext", "Unowned flag")
|
||||
end,
|
||||
after_place_node = function(pos, placer)
|
||||
if not pos then
|
||||
local name = name
|
||||
|
||||
if not pos or not name then
|
||||
return
|
||||
end
|
||||
|
||||
@ -193,8 +194,8 @@ ctf_flag = {
|
||||
return
|
||||
end
|
||||
|
||||
if ctf.players and ctf.players[placer:get_player_name()] and ctf.players[placer:get_player_name()].team then
|
||||
local team = ctf.players[placer:get_player_name()].team
|
||||
if ctf.players and ctf.players[name] and ctf.players[name].team then
|
||||
local team = ctf.players[name].team
|
||||
meta:set_string("infotext", team.."'s flag")
|
||||
|
||||
-- add flag
|
||||
@ -235,7 +236,7 @@ ctf_flag = {
|
||||
|
||||
meta2:set_string("infotext", team.."'s flag")
|
||||
else
|
||||
minetest.chat_send_player(placer:get_player_name(), "You are not part of a team!")
|
||||
minetest.chat_send_player(name, "You are not part of a team!")
|
||||
minetest.set_node(pos,{name="air"})
|
||||
end
|
||||
end
|
||||
|
@ -101,6 +101,52 @@ function ctf_flag.add(team, pos)
|
||||
ctf.needs_save = true
|
||||
end
|
||||
|
||||
function ctf_flag.update(pos)
|
||||
if minetest.get_node(pos).name ~= "ctf_flag:flag" then
|
||||
return
|
||||
end
|
||||
|
||||
local top = {x=pos.x,y=pos.y+1,z=pos.z}
|
||||
local flagmeta = minetest.get_meta(pos)
|
||||
|
||||
if not flagmeta then
|
||||
return
|
||||
end
|
||||
|
||||
local flag_team_data = ctf_flag.get(pos)
|
||||
if not flag_team_data or not ctf.team(flag_team_data.team)then
|
||||
ctf.log("flag", "Flag does not exist! Deleting nodes. "..dump(pos))
|
||||
minetest.set_node(pos,{name="air"})
|
||||
minetest.set_node(top,{name="air"})
|
||||
return
|
||||
end
|
||||
local topmeta = minetest.get_meta(top)
|
||||
local flag_name = flag_team_data.name
|
||||
if flag_name and flag_name ~= "" then
|
||||
flagmeta:set_string("infotext", flag_name.." - "..flag_team_data.team)
|
||||
else
|
||||
flagmeta:set_string("infotext", flag_team_data.team.."'s flag")
|
||||
end
|
||||
|
||||
if not ctf.team(flag_team_data.team).data.color then
|
||||
ctf.team(flag_team_data.team).data.color = "red"
|
||||
ctf.needs_save = true
|
||||
end
|
||||
|
||||
if flag_team_data.claimed then
|
||||
minetest.set_node(top,{name="ctf_flag:flag_captured_top"})
|
||||
else
|
||||
minetest.set_node(top,{name="ctf_flag:flag_top_"..ctf.team(flag_team_data.team).data.color})
|
||||
end
|
||||
|
||||
topmeta = minetest.get_meta(top)
|
||||
if flag_name and flag_name ~= "" then
|
||||
topmeta:set_string("infotext", flag_name.." - "..flag_team_data.team)
|
||||
else
|
||||
topmeta:set_string("infotext", flag_team_data.team.."'s flag")
|
||||
end
|
||||
end
|
||||
|
||||
-- get a flag from a team
|
||||
function ctf_flag.get(pos)
|
||||
if not pos then
|
||||
@ -262,45 +308,5 @@ minetest.register_abm({
|
||||
nodenames = {"group:flag_bottom"},
|
||||
inteval = 5,
|
||||
chance = 1,
|
||||
action = function(pos)
|
||||
local top = {x=pos.x,y=pos.y+1,z=pos.z}
|
||||
local flagmeta = minetest.get_meta(pos)
|
||||
|
||||
if not flagmeta then
|
||||
return
|
||||
end
|
||||
|
||||
local flag_team_data = ctf_flag.get(pos)
|
||||
if not flag_team_data or not ctf.team(flag_team_data.team)then
|
||||
ctf.log("flag", "Flag does not exist! Deleting nodes. "..dump(pos))
|
||||
minetest.set_node(pos,{name="air"})
|
||||
minetest.set_node(top,{name="air"})
|
||||
return
|
||||
end
|
||||
local topmeta = minetest.get_meta(top)
|
||||
local flag_name = flag_team_data.name
|
||||
if flag_name and flag_name ~= "" then
|
||||
flagmeta:set_string("infotext", flag_name.." - "..flag_team_data.team)
|
||||
else
|
||||
flagmeta:set_string("infotext", flag_team_data.team.."'s flag")
|
||||
end
|
||||
|
||||
if not ctf.team(flag_team_data.team).data.color then
|
||||
ctf.team(flag_team_data.team).data.color = "red"
|
||||
ctf.needs_save = true
|
||||
end
|
||||
|
||||
if flag_team_data.claimed then
|
||||
minetest.set_node(top,{name="ctf_flag:flag_captured_top"})
|
||||
else
|
||||
minetest.set_node(top,{name="ctf_flag:flag_top_"..ctf.team(flag_team_data.team).data.color})
|
||||
end
|
||||
|
||||
topmeta = minetest.get_meta(top)
|
||||
if flag_name and flag_name ~= "" then
|
||||
topmeta:set_string("infotext", flag_name.." - "..flag_team_data.team)
|
||||
else
|
||||
topmeta:set_string("infotext", flag_team_data.team.."'s flag")
|
||||
end
|
||||
end
|
||||
action = ctf_flag.update
|
||||
})
|
||||
|
Loading…
x
Reference in New Issue
Block a user