[Actions] - Sistema de forja (forging system) - paulim78 - 17-08-2025
Esse script é um sistema de forja (forging system), ele altera alguns itens do mapa enquanto a forja esta rodando.
Resumo:- O jogador usa uma alavanca ou outro item com actionid = 7787 para iniciar a forja.
- Requisitos para ativar:
- 250 Crystal Coins (ID 2159)
- 1 Item especial (ID 9019)
- 5kk de gold
- Se cumprir os requisitos, os itens são removidos do jogador e o processo começa:
- Os itens do mapa (originalItems) são substituídos por suas versões forjadas (forgedItems) por 3 minutos.
- A cada 10s, é enviado um broadcast avisando que a forja está em andamento.
- Após os 3 minutos, os itens voltam ao estado original.
- Dois itens específicos do mapa (toRemoveInPhase2) somem por 30 segundos simulando o processo.
- Uma nova forja visual aparece no mapa (forgeVisual) e o jogador recebe a recompensa (rewardItem, Vampire Token, ID 9955) no chão em
rewardDropPos.
- Passados 30 segundos, a forja desaparece e os itens da fase 2 são recriados.
- O sistema tem cooldown global para evitar que outro jogador ative a forja enquanto já está em andamento.
Codigo:
Show Content
Spoiler
local actionId = 7787
local requiredItems = {
{id = 2159, count = 250},
{id = 9019, count = 1}
}
local requiredMoney = 5000000
local rewardItem = 9955
local rewardCount = 1
local globalStorageForge = 90000
local forgeDuration = 3 * 60 * 1000
local forgeCooldown = 20 * 1000
local originalItems = {
{id = 8642, pos = Position(1669, 1992, 7)},
{id = 8654, pos = Position(1670, 1992, 7)},
{id = 8661, pos = Position(1671, 1992, 7)},
{id = 8658, pos = Position(1672, 1992, 7)},
{id = 8660, pos = Position(1672, 1993, 7)},
{id = 8657, pos = Position(1671, 1993, 7)},
{id = 8659, pos = Position(1671, 1994, 7)},
{id = 8658, pos = Position(1672, 1994, 7)},
{id = 8646, pos = Position(1672, 1995, 7)},
{id = 8647, pos = Position(1672, 1996, 7)}
}
local forgedItems = {
{id = 8641, pos = Position(1669, 1992, 7)},
{id = 8673, pos = Position(1670, 1992, 7)},
{id = 8650, pos = Position(1670, 1992, 7)},
{id = 8667, pos = Position(1671, 1992, 7)},
{id = 8664, pos = Position(1672, 1992, 7)},
{id = 8666, pos = Position(1672, 1993, 7)},
{id = 8663, pos = Position(1671, 1993, 7)},
{id = 8665, pos = Position(1671, 1994, 7)},
{id = 8664, pos = Position(1672, 1994, 7)},
{id = 8645, pos = Position(1672, 1995, 7)},
{id = 8643, pos = Position(1672, 1996, 7)}
}
local toRemoveInPhase2 = {
{id = 1526, pos = Position(1670, 1997, 7)}, -- Coloque o ID real
{id = 1526, pos = Position(1670, 1998, 7)} -- Coloque o ID real
}
local forgeVisual = {
id = 8670,
pos = Position(1670, 1993, 7)
}
local rewardDropPos = Position(1672, 1998, 7)
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
if item.actionid ~= actionId then
return true
end
local currentStorage = Game.getStorageValue(globalStorageForge) or 0
if currentStorage > os.time() then
player:sendCancelMessage("A forja já está em andamento.")
return true
end
for _, entry in pairs(requiredItems) do
if player:getItemCount(entry.id) < entry.count then
player:sendCancelMessage("Você não possui todos os itens necessários.")
return true
end
end
if not player:removeMoney(requiredMoney) then
player:sendCancelMessage("Você precisa de 1kk de gold.")
return true
end
for _, entry in pairs(requiredItems) do
player:removeItem(entry.id, entry.count)
end
for i, v in ipairs(originalItems) do
local tile = Tile(v.pos)
if tile then
local oldItem = tile:getItemById(v.id)
if oldItem then oldItem:remove() end
end
end
for _, v in ipairs(forgedItems) do
Game.createItem(v.id, 1, v.pos)
end
Game.setStorageValue(globalStorageForge, os.time() + ((forgeDuration + forgeCooldown) / 1000))
-- Broadcast a cada 10s
for i = 0, (forgeDuration - 1), 10000 do
addEvent(function()
broadcastMessage(player:getName() .. " está forjando um Vampire Token!", MESSAGE_EVENT_ADVANCE)
end, i)
end
addEvent(function()
for _, v in ipairs(forgedItems) do
local tile = Tile(v.pos)
if tile then
local tempItem = tile:getItemById(v.id)
if tempItem then tempItem:remove() end
end
end
for _, v in ipairs(originalItems) do
Game.createItem(v.id, 1, v.pos)
end
-- Remover os 2 itens da fase 2
for _, data in ipairs(toRemoveInPhase2) do
local tile = Tile(data.pos)
if tile then
local item = tile:getItemById(data.id)
if item then item:remove() end
end
end
-- Remover o item 1945 existente (visualmente) se necessário
local forgeTile = Tile(forgeVisual.pos)
local forgeItem = forgeTile and forgeTile:getItemById(forgeVisual.id)
if forgeItem then forgeItem:remove() end
-- Recriar forja
local createdForge = Game.createItem(forgeVisual.id, 1, forgeVisual.pos)
-- Entrega recompensa no chão
Game.createItem(rewardItem, rewardCount, rewardDropPos)
-- Após 30s, remove a forja e restaura os dois itens
addEvent(function()
local tile = Tile(forgeVisual.pos)
if tile then
local existing = tile:getItemById(forgeVisual.id)
if existing then existing:remove() end
end
-- Recria os 2 itens da fase 2
for _, data in ipairs(toRemoveInPhase2) do
Game.createItem(data.id, 1, data.pos)
end
end, forgeCooldown)
end, forgeDuration)
return true
end
Foto:
![[Imagem: Captura-de-tela-2025-08-17-144627.png]](https://i.ibb.co/rJ0nzSd/Captura-de-tela-2025-08-17-144627.png)
![[Imagem: Captura-de-tela-2025-08-17-145323.png]](https://i.ibb.co/BK6cxMPC/Captura-de-tela-2025-08-17-145323.png)
![[Imagem: Captura-de-tela-2025-08-17-145637.png]](https://i.ibb.co/xq9wgb9y/Captura-de-tela-2025-08-17-145637.png)
Como configurar.
1- Item de ativação
Citação:local actionId = 7787
Aqui eu utilizo uma alavanca esse 7787 vai na alavanca.
2- Requisitos do jogador
Citação:local requiredItems = {
{id = 2159, count = 250}, -- Crystal Coins
{id = 9019, count = 1} -- Item especial
}
local requiredMoney = 5000000 -- Gold necessário
Define os itens e dinheiro que o jogador precisa para forjar.
3- Recompensa
Citação:local rewardItem = 9955
local rewardCount = 1
local rewardDropPos = Position(1672, 1998, 7)
Item e quantidade da recompensa, e onde será criada a recompensa qual posição.
4- Tempos de forja
Citação:local forgeDuration = 3 * 60 * 1000 -- 3 minutos
local forgeCooldown = 20 * 1000 -- 20 segundos após o fim
Controla quanto tempo dura a forja e quanto tempo demora para resetar totalmente.
5- Itens do mapa alterados
Citação:local originalItems = { ... } -- Itens normais
local forgedItems = { ... } -- Versões forjadas
local toRemoveInPhase2 = { ... } -- Itens removidos temporariamente
local forgeVisual = { id = 8670, pos = Position(1670, 1993, 7) } -- Aparência da forja
Permite trocar os itens que vão se transformar no mapa, os que somem na segunda fase e o item visual da forja.
Creditos:
Fiapo
|