Ir para conteúdo
  • 0

[Pedido] Alavanca + Items


Adolfohrq

Pergunta

Bom pessoal, gostaria de pedir a vocês um script que o jogador tenha que colocar 2 itens em cima de 2 mesas e depois, estando em cima de um tile (460) e apertar alavanca ele sera teletransportado, para x,y,z positions!

Agradeço desde já...

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

Em actions/scripts, duplique um arquivo e nomeie para "alavancaTele" sem as aspas e nele cole:

function onUse(cid, item, fromPosition, itemEx, toPosition)

local posItens = {x=123, y=432, z=7} -- posição em que estarão os itens.
local itensCheck = {1234, 4562} -- id dos itens que devem estar na "posItens" ao apertar a alavanca.
local removeItens = true -- deve remover os itens? coloque "true" para remover ou "false" para não remover.
local posTele = {x=546, y=987, z=6} -- posição que sera teleportado caso os itens estajam certos.

local itens = {}
for i=1, #itensCheck do
    for o=1, 255 do
		    posItens = {x=posItens.x, y=posItens.y, z=posItens.z, stackpos=o}
		    if isInArray(itensCheck, getThingfromPos(posItens).itemid) then
			    itens[i] = getThingfromPos(posItens).uid
                   break
		    end
    end
end
if #itens == #itensCheck then
   if removeItens then
       for i=1, #itens do
           doRemoveItem(itens[i])
       end        
   end
   doTransformItem(item.uid, item.itemid == 10044 and 10045 or 10044) -- você deve colocar a alavanca 10044 com seu mapa editor, ou substituir esses numeros pelo id da sua alavanca virada para direita e esquerda.
   doTeleportThing(cid, posTele)
   doSendMagicEffect(posTele, CONST_ME_TELEPORT)
else
   doPlayerSendCancel(cid, "Coloque os itens corretos para teleportar!")
end

return TRUE
end

 

Agora em actions.xml cole a tag:

<action actionid="2934" script="alavancaTele.lua"/>

 

Por último é só ir na alavanca desejada com seu mapa editor e colocar o actionid=2934.

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado jhon, reputado. Você saberia fazer ao envez de telentransportar o jogador ele receber uma storage?

 

Alias ali no script que você me passou eu gostaria que fosse 2 mesas e 2 itens diferentes, ali ele teletransporta o cara com os 2 items em cima de uma mesa.. Não consegui arrumar, mas ele funciona, só da uma arrumadinha nisso pra mim porfavor?

Editado por adolfuu
Link para o comentário
Compartilhar em outros sites

  • 0
function onUse(cid, item, fromPosition, itemEx, toPosition)

local posItensMesa1 = {x=123, y=432, z=7} -- posição em que estarão os itens.
local itensCheckMesa1 = {1234, 4562} -- id dos itens que devem estar na "posItensMesa1" ao apertar a alavanca.

local posItensMesa2 = {x=123, y=432, z=7} -- posição em que estarão os itens.
local itensCheckMesa2 = {1234} -- id dos itens que devem estar na "posItensMesa2" ao apertar a alavanca.

local removeItens = true -- deve remover os itens? coloque "true" para remover ou "false" para não remover.
local posTele = {x=546, y=987, z=6} -- posição que sera teleportado caso os itens estajam certos.

local itens1 = {}
local itens2 = {}
for i=1, #itensCheckMesa1 do
   for o=1, 255 do
    posItensMesa1 = {x=posItensMesa1.x, y=posItensMesa1.y, z=posItensMesa1.z, stackpos=o}
    if isInArray(itensCheckMesa1, getThingfromPos(posItensMesa1).itemid) then
	    itens1[i] = getThingfromPos(posItensMesa1).uid
	    break
    end
   end
end
for i=1, #itensCheckMesa2 do
   for o=1, 255 do
    posItensMesa2 = {x=posItensMesa2.x, y=posItensMesa2.y, z=posItensMesa2.z, stackpos=o}
    if isInArray(itensCheckMesa2, getThingfromPos(posItensMesa2).itemid) then
	    itens2[i] = getThingfromPos(posItensMesa2).uid
	    break
    end
   end
end
if #itens1 == #itensCheckMesa1 and #itens2 == #itensCheckMesa2 then
   if removeItens then
    for i=1, #itensCheckMesa1 do
	    doRemoveItem(itensCheckMesa1[i])
    end
       for i=1, #itensCheckMesa2 do
	    doRemoveItem(itensCheckMesa2[i])
    end    
   end
   doTransformItem(item.uid, item.itemid == 10044 and 10045 or 10044) -- você deve colocar a alavanca 10044 com seu mapa editor, ou substituir esses numeros pelo id da sua alavanca virada para direita e esquerda.
   doTeleportThing(cid, posTele)
   doSendMagicEffect(posTele, CONST_ME_TELEPORT)
else
   doPlayerSendCancel(cid, "Coloque os itens corretos para teleportar!")
end

return TRUE
end

Link para o comentário
Compartilhar em outros sites

  • 0
function getItemsInPos(items, pos) -- function by vodka
local items = type(items) == "table" and items or {items}    
   local check = true 
   local t = {}
   for i = 1,#items do 
       t[i] = getThingFromPos({x=pos.x,y=pos.y,z=pos.z,stackpos=i}).itemid 
       if not table.find(items, t[i]) then 
           check = false 
       break 
       end 
   end 
 if check then 
 return true
end 
return nil 
end
function doRemoveItensInPos(items, pos) -- function by vodka
local items = type(items) == "table" and items or {items}  
     for i = 1, table.maxn(items) do 
   doRemoveItem(getThingFromPos({x=pos.x,y=pos.y,z=pos.z,stackpos=1}).uid)
 end
 return nil
end
local t = {
{items = {2175, 2376} , pos = {x=185, y=57, z=7}},
{items = {5919} , pos = {x=188, y=57, z=7}}
}
topos = {x=160, y=54, z=7}
function onUse(cid, item, fromPosition, itemEx, toPosition)
for _, k in ipairs(t) do
       if not getItemsInPos(k.items, k.pos) then
       doPlayerSendCancel(cid, 'Está faltando items na mesa.') 
return true
end
       end
       for _, v in ipairs(t) do
doRemoveItensInPos(v.items, v.pos)
end
    doTeleportThing(cid, topos)
    doSendMagicEffect(topos, CONST_ME_TELEPORT)
       doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)
return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

Vodkart, não funcionou este script, alias o item 2 sumiu e o 1 ficou intacto. E além disso o player não foi teletransportado :/, poderia rever porfavor?

Link para o comentário
Compartilhar em outros sites

  • 0

Script

 

 

function getItemsInPos(items, pos) -- function by vodka

local items = type(items) == "table" and items or {items}

local check = true

local t = {}

for i = 1,#items do

t = getThingFromPos({x=pos.x,y=pos.y,z=pos.z,stackpos=i}).itemid

if not table.find(items, t) then

check = false

break

end

end

if check then

return true

end

return nil

end

function doRemoveItensInPos(items, pos) -- function by vodka

local items = type(items) == "table" and items or {items}

for i = 1, table.maxn(items) do

doRemoveItem(getThingFromPos({x=pos.x,y=pos.y,z=pos.z,stackpos=1}).uid)

end

return nil

end

local t = {

{items = {5904,10} , pos = {x=1718, y=989, z=7}},

{items = {2195} , pos = {x=1720, y=989, z=7}}

}

topos = {x=160, y=54, z=7}

function onUse(cid, item, fromPosition, itemEx, toPosition)

for _, k in ipairs(t) do

if not getItemsInPos(k.items, k.pos) then

doPlayerSendCancel(cid, 'Está faltando items na mesa.')

return true

end

end

for _, v in ipairs(t) do

doRemoveItensInPos(v.items, v.pos)

end

doTeleportThing(cid, topos)

doSendMagicEffect(topos, CONST_ME_TELEPORT)

doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)

return true

end

 

 

 

Foto

 

post-57647-0-68751000-1337793237_thumb.jpg

Link para o comentário
Compartilhar em outros sites

  • 0

function getItemsInPos(items, pos) -- function by vodka
for i = 1,#items do 
local stack = getTileItemById(pos, items[i][1])
if stack.uid > 0 and math.max(1, stack.type) >= items[i][2] then
if i == #items then
check = true
end
else
check = false
end
end
return check
end
function doRemoveItensInPos(items, pos) -- function by vodka
local items = type(items) == "table" and items or {items}  
     for i = 1, table.maxn(items) do 
   doRemoveItem(getThingFromPos({x=pos.x,y=pos.y,z=pos.z,stackpos=1}).uid)
 end
 return nil
end
local t = {
{items = {{5904,10}} , pos = {x=1718, y=989, z=7}},
{items = {{2195,1}} , pos = {x=1720, y=989, z=7}}
}
topos = {x=160, y=54, z=7}
function onUse(cid, item, fromPosition, itemEx, toPosition)
for _, k in ipairs(t) do
       if not getItemsInPos(k.items, k.pos) then
       doPlayerSendCancel(cid, 'Está faltando items na mesa.') 
return true
end
       end
       for _, v in ipairs(t) do
doRemoveItensInPos(v.items, v.pos)
end
    doTeleportThing(cid, topos)
    doSendMagicEffect(topos, CONST_ME_TELEPORT)
       doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)
return true
end

 

sobre não teleportar é pq vc esqueceu de mudar a pos para onde o jogador vai

 

muda aqui:

 

topos = {x=160, y=54, z=7}

Link para o comentário
Compartilhar em outros sites

  • 0

Funcinou perfeitamente, desculpe-me pela burrice, esqueci de mudar topos..

Vodkart, deixei uma msg em seu status, se poder dar uma olhada...

Rep + pra você, obrigado por sempre nos ajudar!

Link para o comentário
Compartilhar em outros sites

  • 0

IUSHiushiuHSIUSHiuSIUHsiusHIUshui

velho em nem sei onde é as mensagens do status

quase nunca olho aquilo lá '-'

 

reportado para moverem

Link para o comentário
Compartilhar em outros sites

  • 0

@adolfuu, malz aew por não poder ajudar. Tava sem internet dae nem deu de responder. Oque tinha de errado no meu script é que fiz a comparação errada. Pra arrumar bastava trocar essa linha:

if isInArray(itensCheckMesa1, getThingfromPos(posItensMesa1).itemid) then

por essa:

if  itensCheckMesa1[i] == getThingfromPos(posItensMesa1).itemid then

 

e essa:

if isInArray(itensCheckMesa2, getThingfromPos(posItensMesa2).itemid) then

por essa:

if itensCheckMesa2[i] == getThingfromPos(posItensMesa2).itemid then

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...