|
1 |
| -local function drop_flags(player, pteam) |
2 |
| - local pname = player:get_player_name() |
3 |
| - local flagteams = ctf_modebase.taken_flags[pname] |
4 |
| - if not flagteams then return end |
5 |
| - |
6 |
| - for _, flagteam in ipairs(flagteams) do |
7 |
| - ctf_modebase.flag_taken[flagteam] = nil |
| 1 | +function ctf_modebase.restore_flag(flagteam, taker) |
| 2 | + ctf_modebase.flag_taken[flagteam] = nil |
8 | 3 |
|
9 |
| - local fpos = vector.offset(ctf_map.current_map.teams[flagteam].flag_pos, 0, 1, 0) |
| 4 | + if ctf_modebase.taken_flags[taker] then |
| 5 | + table.remove(ctf_modebase.taken_flags[taker], table.indexof(ctf_modebase.taken_flags[taker], flagteam)) |
10 | 6 |
|
11 |
| - minetest.load_area(fpos) |
12 |
| - local node = minetest.get_node(fpos) |
| 7 | + if #ctf_modebase.taken_flags[taker] <= 0 then |
| 8 | + ctf_modebase.taken_flags[taker] = nil |
13 | 9 |
|
14 |
| - if node.name == "ctf_modebase:flag_captured_top" then |
15 |
| - node.name = "ctf_modebase:flag_top_" .. flagteam |
16 |
| - minetest.set_node(fpos, node) |
17 |
| - else |
18 |
| - minetest.log("error", string.format("[ctf_flags] Unable to return flag node=%s, pos=%s", |
19 |
| - node.name, vector.to_string(fpos)) |
20 |
| - ) |
| 10 | + if player_api.players[taker] then |
| 11 | + player_api.set_texture(minetest.get_player_by_name(taker), 2, "blank.png") |
| 12 | + end |
21 | 13 | end
|
22 | 14 | end
|
23 | 15 |
|
24 |
| - if player_api.players[pname] then |
25 |
| - player_api.set_texture(player, 2, "blank.png") |
| 16 | + local fpos = vector.offset(ctf_map.current_map.teams[flagteam].flag_pos, 0, 1, 0) |
| 17 | + |
| 18 | + minetest.load_area(fpos) |
| 19 | + local node = minetest.get_node(fpos) |
| 20 | + |
| 21 | + if node.name == "ctf_modebase:flag_captured_top" then |
| 22 | + node.name = "ctf_modebase:flag_top_" .. flagteam |
| 23 | + minetest.set_node(fpos, node) |
| 24 | + else |
| 25 | + minetest.log("error", string.format("[ctf_flags] Unable to return flag node=%s, pos=%s", |
| 26 | + node.name, vector.to_string(fpos)) |
| 27 | + ) |
26 | 28 | end
|
| 29 | +end |
27 | 30 |
|
28 |
| - ctf_modebase.taken_flags[pname] = nil |
| 31 | +local function drop_flags(player, pteam) |
| 32 | + local pname = player:get_player_name() |
| 33 | + local flagteams = ctf_modebase.taken_flags[pname] |
| 34 | + if not flagteams then return end |
| 35 | + |
| 36 | + for _, flagteam in ipairs(table.copy(flagteams)) do |
| 37 | + ctf_modebase.restore_flag(flagteam, pname) |
| 38 | + end |
29 | 39 |
|
30 | 40 | ctf_modebase.skip_vote.on_flag_drop(#flagteams)
|
31 | 41 | ctf_modebase:get_current_mode().on_flag_drop(player, flagteams, pteam)
|
@@ -109,7 +119,15 @@ function ctf_modebase.flag_on_punch(puncher, nodepos, node)
|
109 | 119 | ctf_modebase.on_flag_capture(puncher, flagteams)
|
110 | 120 |
|
111 | 121 | ctf_modebase.skip_vote.on_flag_capture(#flagteams)
|
112 |
| - ctf_modebase:get_current_mode().on_flag_capture(puncher, flagteams) |
| 122 | + local not_finished = ctf_modebase:get_current_mode().on_flag_capture(puncher, flagteams) |
| 123 | + |
| 124 | + for team in pairs(not_finished) do |
| 125 | + ctf_modebase.flag_captured[team] = nil |
| 126 | + end |
| 127 | + |
| 128 | + for _, player in pairs(minetest.get_connected_players()) do |
| 129 | + ctf_modebase.flag_huds.update_player(player) |
| 130 | + end |
113 | 131 | end
|
114 | 132 | end
|
115 | 133 | end
|
|
0 commit comments