Postado Setembro 2, 2017 7 anos 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 Setembro 2, 2017 7 anos por fellype (veja o histórico de edições)
Postado Setembro 2, 2017 7 anos 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: Email: [email protected] Discord: Dwarfer#2715
Postado Setembro 2, 2017 7 anos Autor 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.
Postado Setembro 3, 2017 7 anos É só trocar a função doRemoveItensInPos() para essa: function doRemoveItensInPos() for k, v in pairs(t.items) do doCleanTile(v.pos) end end Contato: Email: [email protected] Discord: Dwarfer#2715
Postado Setembro 3, 2017 7 anos Autor 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
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.