• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

bounty hunter script

sarab

New Member
Joined
Sep 15, 2017
Messages
7
Reaction score
3
Olá pessoal, estou tentando criar um script de caçador de recompensas, onde a cabeça do jogador é um prêmio, mas não consigo fazer funcionar. Se alguém puder me dar uma mão para fazer funcionar.


-- Configurações locais
local baseBountyReward = 10000 -- Recompensa base em ouro
local checkInterval = 30 -- Intervalo em minutos para verificar o jogador com o nível mais alto
local rewardItemID = 14257 -- ID do item que será dado como recompensa

-- Variáveis globais
local bountyPlayer = nil -- Jogador com a cabeça a prêmio
local bountyLogs = {} -- Logs de eventos
local currentCheckInterval = checkInterval -- Intervalo de verificação atual (pode ser ajustado)

-- Função para registrar logs
função local logEvent(mensagem)
table.insert(bountyLogs, os.date("%Y-%m-%d %H:%M:%S") .. " - " .. mensagem)
print("[Bounty Log] " .. message) -- Exibe o log no console
fim

-- Função para encontrar o jogador com o nível mais alto
função local findHighestLevelPlayer()
nível mais alto local = 0
jogador-alvo local = nulo

para _, jogador em ipairs(Game.getPlayers()) faça
se jogador e jogador:getLevel() > highestLevel e jogador ~= bountyPlayer então
highestLevel = jogador:obterNível()
targetPlayer = jogador
fim
fim

logEvent("Jogador com maior nível encontrado: " .. (targetPlayer and targetPlayer:getName() or "Nenhum jogador encontrado"))
retornar targetPlayer
fim

-- Função chamada ao jogador morrer
função onDeath(criatura, cadáver, assassino, mostDamageKiller)
se não criatura:isPlayer() então
return true -- Ignorar criaturas que não são jogadores
fim

-- Verifique se a cabeça a prêmio morreu
se criatura == bountyPlayer então
logEvent(string.format("O jogador com a cabeça a prêmio (%s) foi morto por %s.", criatura:getName(), killer e killer:getName() or "desconhecido"))

-- Verifique se o killer é um jogador válido
se assassino e assassino:isPlayer() então
logEvent(string.format("Recompensa sendo atribuída a %s por matar o bounty.", killer:getName()))
giveItemToGroup(assassino)
elseif mostDamageKiller e mostDamageKiller:isPlayer() então
logEvent(string.format("Recompensa sendo atribuída a %s por maior dano no bounty.", mostDamageKiller:getName()))
giveItemToGroup(matarmaisdanos)
outro
logEvent("Nenhum jogador identificado como responsável pela morte do bounty.")
fim

-- Resetar a cabeça ao prêmio
bountyPlayer = nulo
-- Procurar e definir um novo bountyPlayer
atualizarRecompensa()
outro
logEvent(string.format("O jogador %s morreu, mas não era a cabeça a prêmio.", criatura:getName()))
fim

retornar verdadeiro
fim

-- Função para anunciar a cabeça a prêmio
função announceBounty(jogador)
se jogador e jogador:isPlayer() então
Game.broadcastMessage(string.format("[Bounty Hunter] A nova cabeça a prêmio é %s (Level %d).", player:getName(), player:getLevel()))
logEvent(string.format("Nova recompensa anunciada: %s (Nível %d)", player:getName(), player:getLevel()))
outro
logEvent("Não foi possível anunciar a cabeça a prêmio, jogador inválido.")
fim
fim

- Função para atualizar a cabeça a prêmio
função local updateBounty()
-- Verifique se a cabeça a prêmio já foi definido
se bountyPlayer então
-- Verifique se bountyPlayer é um jogador válido antes de chamar isOnline
se bountyPlayer:isPlayer() então
-- Se o jogador da cabeça a prêmio estiver desconectado, resetamos
se não bountyPlayer:isOnline() então
logEvent("A cabeça a prêmio " .. bountyPlayer:getName() .. " saiu do jogo. Resetando a cabeça a prêmio.")
bountyPlayer = nulo
outro
logEvent("Nenhuma mudança na cabeça a prêmio.")
return -- Nenhuma mudança, já que o bountyPlayer ainda está online
fim
outro
logEvent("A cabeça do prêmio não é mais um jogador válido, redefinindo.")
bountyPlayer = nulo
fim
outro
logEvent("A cabeça do prêmio não está definida. Procurando um novo jogador.")
fim

-- Encontrar o novo jogador com maior nível
local newBountyPlayer = findHighestLevelPlayer()

-- Verifique se encontramos um novo jogador válido para ser a cabeça a prêmio
se newBountyPlayer e newBountyPlayer:isPlayer() então
-- Se o jogador encontrado for diferente do atual, atualizamos a cabeça a prêmio
se newBountyPlayer ~= bountyPlayer então
bountyPlayer = novoBountyPlayer
anunciaBounty(bountyPlayer) -- Anuncia o novo bounty
outro
logEvent("O jogador com maior nível já é a cabeça a prêmio.")
fim
outro
logEvent("Nenhum jogador encontrado para ser a cabeça a prêmio.")
fim
fim

-- Função para dar um item e ouro para cada membro do grupo
função local giveItemToGroup(jogador)
grupo local = player:getGroup()
se grupo e #group:getMembers() > 1 então
para _, membro em ipairs(group:getMembers()) faça
se membro:getFreeCapacity() >= ItemType(rewardItemID):getWeight() então
-- Dar o item
item localAdded = membro:addItem(rewardItemID, 1)
se itemAdicionado então
member:sendTextMessage(MESSAGE_INFO_DESCR, "Você recebeu um item especial pela recompensa!")
logEvent("Item dado com sucesso: " .. member:getName() .. " recebeu 1 item (ID " .. RewardItemID .. ").")
outro
member:sendTextMessage(MESSAGE_INFO_DESCR, "Erro ao tentar adicionar o item ao seu inventário.")
logEvent("Falha ao adicionar item: " .. member:getName() .. " não recebeu o item (ID " .. rewardItemID .. ").")
fim

-- Dar ouro
membro:addMoney(baseBountyReward)
member:sendTextMessage(MESSAGE_INFO_DESCR, string.format("Você recebeu %d de ouro pela recompensa!", baseBountyReward))
logEvent("Ouro dado com sucesso: " .. member:getName() .. " recebido " .. baseBountyReward .. " de ouro.")
outro
member:sendTextMessage(MESSAGE_INFO_DESCR, "Você não tem espaço suficiente no inventário para receber o item.")
logEvent("Falha ao dar item: " .. member:getName() .. " sem espaço no inventário.")
fim
fim
outro
se jogador:getFreeCapacity() >= ItemType(rewardItemID):getWeight() então
-- Dar o item
item localAdded = jogador:addItem(rewardItemID, 1)
se itemAdicionado então
player:sendTextMessage(MESSAGE_INFO_DESCR, "Você recebeu um item especial pela recompensa!")
logEvent("Item dado com sucesso: " .. player:getName() .. " recebeu 1 item (ID " .. recompenseItemID .. ").")
outro
player:sendTextMessage(MESSAGE_INFO_DESCR, "Erro ao tentar adicionar o item ao seu inventário.")
logEvent("Falha ao adicionar item: " .. player:getName() .. " não recebeu o item (ID " .. RewardItemID .. ").")
fim

-- Dar ouro
jogador:addMoney(baseBountyReward)
player:sendTextMessage(MESSAGE_INFO_DESCR, string.format("Você recebeu %d de ouro pela recompensa!", baseBountyReward))
logEvent("Ouro dado com sucesso: " .. player:getName() .. " recebido " .. baseBountyReward .. " de ouro.")
outro
player:sendTextMessage(MESSAGE_INFO_DESCR, "Você não tem espaço suficiente no inventário para receber o item.")
logEvent("Falha ao dar item: " .. player:getName() .. " sem espaço no inventário.")
fim
fim
fim

-- Função chamada ao jogador morrer
função onDeath(criatura, cadáver, assassino, mostDamageKiller)
se não criatura:isPlayer() então
return true -- Ignorar criaturas que não são jogadores
fim

se criatura == bountyPlayer então
logEvent(string.format("O jogador com a cabeça a prêmio (%s) foi morto por %s.", criatura:getName(), killer e killer:getName() or "desconhecido"))

-- Verifique se o killer é um jogador válido
se assassino e assassino:isPlayer() então
logEvent(string.format("Recompensa sendo atribuída a %s por matar o bounty.", killer:getName()))
giveItemToGroup(assassino)
elseif mostDamageKiller e mostDamageKiller:isPlayer() então
logEvent(string.format("Recompensa sendo atribuída a %s por maior dano no bounty.", mostDamageKiller:getName()))
giveItemToGroup(matarmaisdanos)
outro
logEvent("Nenhum jogador identificado como responsável pela morte do bounty.")
fim

bountyPlayer = nulo
atualizarRecompensa()
outro
logEvent(string.format("O jogador %s morreu, mas não era a cabeça a prêmio.", criatura:getName()))
fim

retornar verdadeiro
fim

-- Configure o intervalo para verificar o jogador com o nível mais alto
função onThink(intervalo)
logEvent("Intervalo de seleção iniciado.")
atualizarRecompensa()
retornar verdadeiro
fim

-- Registrar os eventos
função onStartup()
logEvent("Sistema Bounty Hunter iniciado.")
addEvent(onThink, intervalo de verificação atual * 60 * 1000, intervalo de verificação atual * 60 * 1000)
fim

-- Iniciar o sistema
na inicialização()

_G.updateBounty = atualizarBounty
_G.setCheckInterval = função(novoIntervalo)
currentCheckInterval = novoIntervalo
logEvent("Intervalo de seleção alterado para " .. newInterval .. " minutos.")
fim
 

Attachments

You must follow OTland's rules on how to post scripts in the correct format to ensure better readability. Additionally, you should specify the version of TFS you are using, as no one can guess or read your mind about which version you're working with.

Furthermore, on OTland, you must communicate exclusively in English.


Actually, the system you were looking for already exists here on OTland. Xikini created a fantastic system, and you should check it out. You can add it to your server if you're using TFS 1.x+
 
Back
Top