kill_assist = {} local kill_assists = {} function kill_assist.clear_assists(player) if type(player) == "string" then kill_assists[player] = nil else kill_assists = {} end end function kill_assist.add_assist(victim, attacker, damage) if victim == attacker then return end if not kill_assists[victim] then kill_assists[victim] = { players = {}, hp_offset = 0 } end kill_assists[victim].players[attacker] = (kill_assists[victim].players[attacker] or 0) + damage end function kill_assist.add_heal_assist(victim, healed_hp) if not kill_assists[victim] then return end kill_assists[victim].hp_offset = kill_assists[victim].hp_offset + healed_hp end function kill_assist.reward_assists(victim, killer, reward) local max_hp = minetest.get_player_by_name(victim):get_properties().max_hp or 20 if not kill_assists[victim] then if victim ~= killer then kill_assist.add_assist(victim, killer, max_hp) else return end end for name, damage in pairs(kill_assists[victim].players) do if minetest.get_player_by_name(name) then local help_percent = damage / (max_hp + kill_assists[victim].hp_offset) local main, match = ctf_stats.player(name) local color = "0x00FFFF" if name == killer or help_percent >= 0.33 then reward = math.max(math.floor((reward * help_percent)*100)/100, 1) end match.score = match.score + reward main.score = main.score + reward if name == killer then color = "0x00FF00" end hud_score.new(name, { name = "kill_assist:score", color = color, value = reward }) end end ctf_stats.request_save() kill_assist.clear_assists(victim) end ctf.register_on_killedplayer(function(victim, killer, _, toolcaps) local reward = ctf_stats.calculateKillReward(victim, killer, toolcaps) reward = math.floor(reward * 100) / 100 kill_assist.reward_assists(victim, killer, reward) end) ctf.register_on_punchplayer(function(player, hitter, _, _, _, damage) kill_assist.add_assist(player:get_player_name(), hitter:get_player_name(), damage) end) ctf_match.register_on_new_match(function() kill_assist.clear_assists() end) ctf.register_on_new_game(function() kill_assist.clear_assists() end) minetest.register_on_leaveplayer(function(player) kill_assist.clear_assists(player) end)