Olá,
Bom... teve um pedido no Discord da TK feito por algum usuário (não estou recordando o nome) que estava tendo dificuldades em fazer determinado script, então decidi fazê-lo. É algo simples, eu já tinha enviado lá no canal de suporte, porém, como já de conhecimento por muitos, o canal foi removido. Decidi refazer de uma forma melhor e mais prática. * Sobre o Script *
Quando o jogador utilizar a alavanca para ganhar determinado(s) item(s), ele terá que ter deixado em POSIÇÕES DEFINIDAS alguns itens, sendo assim, possível efetuar a troca. Simples, não? Caso ainda não tenha entendido, tem imagem abaixo de como funciona o mesmo.
* Imagens demonstração *
Tentando efetuar a troca sem tá com os itens posicionados de forma correta...
Efetuando a troca de forma correta.
* Instalando o Script *
Em data/actions/scripts/ crie um arquivo chamado alavanca_troca.lua e cole isto dentro:
--[[
Lordzetros - TK
]]
local config_itens = {
{id = 2666, pos = {144,63,6}, count = 1}, -- ID DO ITEM NECESSÁRIO, POSIÇÃO QUE DEVE FICAR, QUANTIDADE DE ITEM NECESSÁRIO
{id = 2667, pos = {145,63,6}, count = 1},
{id = 2671, pos = {146,63,6}, count = 1}, -- Caso queira colocar outro item, basta seguir esse modelo (ctrl + c)
}
local config_troca = {
msg_falha = "Falha na troca do item. Necessario: %dx %s em sua devida posicao!",
msg_sucesso = "A troca foi efetuada com sucesso!",
recompensas = {{id = 2003, count = 1}, {id = 2004, count = 1}} -- Para deixar apenas uma recompensa, apenas deixe recompensas = {{id = ID_DO_ITEM_A_GANHAR, count = QUANTIDADE_A_GANHAR}}
}
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
local ax_t = {}
for i, v in ipairs(config_itens) do
local vt = Tile(Position(v.pos[1], v.pos[2], v.pos[3]))
local item_t = vt:getItemById(v.id)
if (not item_t or item_t:getCount() < v.count) then
player:getPosition():sendMagicEffect(CONST_ME_POFF)
player:sendTextMessage(36, config_troca.msg_falha:format(v.count, ItemType(v.id):getName()))
return false
end
table.insert(ax_t, {item_t, v.count})
end
for i, v in ipairs(ax_t) do
v[1]:remove(v[2])
end
for i, v in ipairs(config_troca.recompensas) do
player:addItem(v.id, v.count)
end
player:sendTextMessage(36, config_troca.msg_sucesso)
player:getPosition():sendMagicEffect(CONST_ME_FIREWORK_RED)
return true
end
Em seguida, coloque esta linha de código abaixo de uma semelhante em data/actions/actions.xml
<action actionid="30258" script="alavanca_troca.lua" />
Para finalizar, abre seu editor de mapa e coloque em algum alavanca o actionID = 30258
* Configurando o Script *
Tá tudo comentado no código, portanto, vou falar só por cima.
{id = 2666, pos = {144,63,6}, count = 1}
Nesta parte, você deve colocar o id do item necessário, a posição que ele deve ficar e a quantidade.
E nesta parte você configura a recompensa do jogador
recompensas = {{id = 2003, count = 1}, {id = 2004, count = 1}}
Id do item que ele ganhará e quantidade
Enfim, script simples, porém, pode ser útil para muitos, assim como acredito que será para o usuário que solicitou, :). Abraços.