Ir para conteúdo
  • Cadastre-se

(Resolvido)ITEM X LOCAIS X TP


Ir para solução Resolvido por Dwarfer,

Posts Recomendados

nao sei se estou no local correto mas agradeço quem me ajudar - preciso de uma scrip que -

verifique em 5 locais diferente se existe 5 items com quantidades  diferente (ex: item 1 precisa de 3, item 2 de 1 etc)

ele pucha a alavanca (normal 1945 - 1946) se  tiver tudo certo vai teleportar ( se tiver como ele vai abrir um tp ) para 1 local e vai  sumir os items  . mas se qualquer coisa estiver errada vai teleportar para outro local e sumir os items

Editado por fellype (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Solução

Em actions/scripts crie um arquivo:

 

levertp.lua

 

Spoiler

local t = {
right_pos = {x = 1,y = 1,z = 1}, -- posição caso os itens estejam corretos
wrong_pos = {x = 1,y = 1,z = 1}, -- posição caso os itens estejam errados
create_tp = {"no", {x = 1,y = 1, z = 1}, remove_time = {1, "min"}}, -- "yes" ou "no" para criar tp, posição onde o tp será criado, tempo de remoção do tp
items = {
[1] = {id_count = {2160,5}, pos = {x = 1, y = 1, z = 1}}, -- {id, quantidade} , posição que o item deve ficar
[2] = {id_count = {2148,3}, pos = {x = 1, y = 1, z = 1}},
[3] = {id_count = {2152,7}, pos = {x = 1, y = 1, z = 1}}
}}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    function count(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end
    doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)
    if count(t.items) == #getItemsInPos() then
        if t.create_tp[1] == "yes" then
            doCreateTeleport(1387, t.right_pos,  t.create_tp[2])
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Teleport ends in " .. t.create_tp.remove_time[1] .. " " .. t.create_tp.remove_time[2] .. ".")
            addEvent(function() doRemoveItem(getTileItemById(t.create_tp[2], 1387).uid) end, mathtime(t.create_tp.remove_time)*1000)
        else
            doTeleportThing(cid, t.right_pos)
            doSendMagicEffect(t.right_pos, CONST_ME_TELEPORT)
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Success!")
        end
    else
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Put the correct items next time.")
        doTeleportThing(cid, t.wrong_pos)
        doSendMagicEffect(t.wrong_pos, CONST_ME_TELEPORT)
    end
    doRemoveItensInPos()
    return true
end

function getItemsInPos()
local check = {}
for i, v in pairs(t.items) do
    for i = 0, 255 do
        v.pos.stackpos = i
        tile = getTileItemById(v.pos, v.id_count[1])
    end
    if tile.uid > 0 and tile.type >= v.id_count[2] then
        table.insert(check, 1)
    end
end
return check
end

function doRemoveItensInPos()
for i, v in pairs(t.items) do
    for i = 0, 255 do
        v.pos.stackpos = i
        tile = getTileItemById(v.pos, v.id_count[1])
    end
    if tile.uid > 0 then
        doRemoveItem(tile.uid)
    end
end
end

function mathtime(table) -- by dwarfer
local unit = {"sec", "min", "hour", "day"}
for i, v in pairs(unit) do
if v == table[2] then
return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
end
end
return "Error: Bad declaration in mathtime function."
end

 

 

Em actions.xml, adicione a tag: <action actionid="ACTION_ID_DA_ALAVANCA" script="levertp.lua" />

 

Contato:

 

Link para o post
Compartilhar em outros sites

VLW s2 me ajudou muito, se não for muito incomodo como faço pra tipo o  tp vai ficar aberto la por 10 segundos mas assim que qualquer player(o primeiro que entrar) entrar ele fecha

1 hora atrás, Dwarfer disse:

Em actions/scripts crie um arquivo:

 

levertp.lua

 

  Mostrar conteúdo oculto


local t = {
right_pos = {x = 1,y = 1,z = 1}, -- posição caso os itens estejam corretos
wrong_pos = {x = 1,y = 1,z = 1}, -- posição caso os itens estejam errados
create_tp = {"no", {x = 1,y = 1, z = 1}, remove_time = {1, "min"}}, -- "yes" ou "no" para criar tp, posição onde o tp será criado, tempo de remoção do tp
items = {
[1] = {id_count = {2160,5}, pos = {x = 1, y = 1, z = 1}}, -- {id, quantidade} , posição que o item deve ficar
[2] = {id_count = {2148,3}, pos = {x = 1, y = 1, z = 1}},
[3] = {id_count = {2152,7}, pos = {x = 1, y = 1, z = 1}}
}}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    function count(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end
    doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)
    if count(t.items) == #getItemsInPos() then
        if t.create_tp[1] == "yes" then
            doCreateTeleport(1387, t.right_pos,  t.create_tp[2])
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Teleport ends in " .. t.create_tp.remove_time[1] .. " " .. t.create_tp.remove_time[2] .. ".")
            addEvent(function() doRemoveItem(getTileItemById(t.create_tp[2], 1387).uid) end, mathtime(t.create_tp.remove_time)*1000)
        else
            doTeleportThing(cid, t.right_pos)
            doSendMagicEffect(t.right_pos, CONST_ME_TELEPORT)
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Success!")
        end
    else
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Put the correct items next time.")
        doTeleportThing(cid, t.wrong_pos)
        doSendMagicEffect(t.wrong_pos, CONST_ME_TELEPORT)
    end
    doRemoveItensInPos()
    return true
end

function getItemsInPos()
local check = {}
for i, v in pairs(t.items) do
    for i = 0, 255 do
        v.pos.stackpos = i
        tile = getTileItemById(v.pos, v.id_count[1])
    end
    if tile.uid > 0 and tile.type >= v.id_count[2] then
        table.insert(check, 1)
    end
end
return check
end

function doRemoveItensInPos()
for i, v in pairs(t.items) do
    for i = 0, 255 do
        v.pos.stackpos = i
        tile = getTileItemById(v.pos, v.id_count[1])
    end
    if tile.uid > 0 then
        doRemoveItem(tile.uid)
    end
end
end

function mathtime(table) -- by dwarfer
local unit = {"sec", "min", "hour", "day"}
for i, v in pairs(unit) do
if v == table[2] then
return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
end
end
return "Error: Bad declaration in mathtime function."
end

 

 

Em actions.xml, adicione a tag: <action actionid="ACTION_ID_DA_ALAVANCA" script="levertp.lua" />

 

Dwarf funcionou tudo certo mas percebi algums "bugs" tipo se eu colocar  o item "x" no " altar 1 "  e a quantidade for errada ele vai sumir o item "x" mas se eu colocar qualquer outro item que nao seja o " x " no "altar 1"  o item não some, ele ta so removendo os items errados dos altares se a quantidade do item que precisa estiver errada mas se for outro item no altar errado ele não remove.

Link para o post
Compartilhar em outros sites
6 minutos atrás, Dwarfer disse:

É só trocar a função doRemoveItensInPos() para essa:

 


function doRemoveItensInPos()
for k, v in pairs(t.items) do
doCleanTile(v.pos)
end
end

 

VLW MAN, agora ta tudo certinho, vc é o cara  +REP

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo