Add bounties
This commit is contained in:
parent
5b5d970fe9
commit
da892007cc
2 changed files with 97 additions and 0 deletions
2
mods/ctf_bounties/depends.txt
Normal file
2
mods/ctf_bounties/depends.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
ctf_stats
|
||||||
|
irc?
|
95
mods/ctf_bounties/init.lua
Normal file
95
mods/ctf_bounties/init.lua
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
local bountied_player = nil
|
||||||
|
|
||||||
|
local function announce(name)
|
||||||
|
minetest.chat_send_player(name,
|
||||||
|
minetest.colorize("#fff326", "The next person to kill " .. bountied_player ..
|
||||||
|
" will receive 150 points!"))
|
||||||
|
end
|
||||||
|
|
||||||
|
local function announce_all()
|
||||||
|
if bountied_player then
|
||||||
|
for _, player in pairs(minetest.get_connected_players()) do
|
||||||
|
if bountied_player ~= player:get_player_name() then
|
||||||
|
announce(player:get_player_name())
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function bounty_player(target)
|
||||||
|
if bountied_player then
|
||||||
|
minetest.chat_send_all("Player " .. bountied_player .. " no longer has a bounty on their head!")
|
||||||
|
end
|
||||||
|
|
||||||
|
bountied_player = target
|
||||||
|
|
||||||
|
if minetest.global_exists("irc") then
|
||||||
|
irc:say("Player " .. bountied_player .. " has a bounty on their head!")
|
||||||
|
end
|
||||||
|
minetest.after(0.1, announce_all)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function bounty_find_new_target()
|
||||||
|
local players = {}
|
||||||
|
for _, player in pairs(minetest.get_connected_players()) do
|
||||||
|
local name = player:get_player_name()
|
||||||
|
local pstat, mstat = ctf_stats.player(name)
|
||||||
|
pstat.name = name
|
||||||
|
pstat.color = nil
|
||||||
|
if pstat.score > 1000 and pstat.kills > pstat.deaths * 1.5 then
|
||||||
|
table.insert(players, pstat)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if #players > 0 then
|
||||||
|
bounty_player(players[math.random(1, #players)].name)
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.after(math.random(500, 1000), bounty_find_new_target)
|
||||||
|
end
|
||||||
|
minetest.after(math.random(500, 1000), bounty_find_new_target)
|
||||||
|
|
||||||
|
minetest.register_on_leaveplayer(function(player)
|
||||||
|
if bountied_player == player:get_player_name() then
|
||||||
|
bountied_player = nil
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
minetest.register_on_joinplayer(function(player)
|
||||||
|
if bountied_player then
|
||||||
|
announce(player:get_player_name())
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
ctf.register_on_killedplayer(function(victim, killer)
|
||||||
|
if victim == bountied_player then
|
||||||
|
local main, match = ctf_stats.player(killer)
|
||||||
|
if main and match then
|
||||||
|
main.score = main.score + 150
|
||||||
|
match.score = match.score + 150
|
||||||
|
ctf.needs_save = true
|
||||||
|
end
|
||||||
|
bountied_player = nil
|
||||||
|
|
||||||
|
local msg = killer .. " has killed " .. victim .. " and received the prize!"
|
||||||
|
if minetest.global_exists("irc") then
|
||||||
|
irc:say(msg)
|
||||||
|
end
|
||||||
|
minetest.chat_send_all(msg)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
minetest.register_privilege("bounty_admin")
|
||||||
|
|
||||||
|
minetest.register_chatcommand("place_bounty", {
|
||||||
|
privs = { bounty_admin = true },
|
||||||
|
func = function(name, target)
|
||||||
|
target = target:trim()
|
||||||
|
if not minetest.get_player_by_name(target) then
|
||||||
|
return false, target .. " is not online"
|
||||||
|
end
|
||||||
|
|
||||||
|
bounty_player(target)
|
||||||
|
return true, "Put bounty on " .. target
|
||||||
|
end
|
||||||
|
})
|
Loading…
Reference in a new issue