Ir para conteúdo

[Action] Pokémon Move


Diego Skate

Posts Recomendados

Nome: Pokémon MOVE (Order System)

Autor: PoRaI ou PoPoRaI

Server: Polska 8.42 - Acho que pode funcionar em versões novas.

 

Como functiona?

No Pokémon Online funciona da seguinte maneira: Clicando no botão order e em algum local que possa andar, o pokémon vai até o local, então esse sistema funciona igualzinho ao sistema do Pokémon Online.

 

- Adiciona na LIB (Data → lib → functions.lua), você ira adicionar uma função criada pelo DOKMOS, doPushCreature.

------------------ Function doPushCreature(uid,direction,distance,time) by Dokmos ------------------
function doPushCreature(uid,direction,distance,time)
  if isCreature(uid) == TRUE then
  local rand = (2*math.random(0,1))-1
  local rand2 = math.random(-1,0)
     if direction == 0 then
     signal = {0,rand,-rand,rand,-rand,0,-1,-1,-1,0,0,0}
     elseif direction == 1 then
     signal = {1,1,1,0,0,0,0,rand,-rand,rand,-rand,0}
     elseif direction == 2 then
     signal = {0,rand,-rand,rand,-rand,0,1,1,1,0,0,0}
     elseif direction == 3 then
     signal = {-1,-1,-1,0,0,0,0,rand,-rand,rand,-rand,0}
     elseif direction == 4 then
     signal = {-1,rand2,(-rand2)-1,0,1,rand2+1,rand2,0}
     elseif direction == 5 then
     signal = {1,-rand2,-((-rand2)-1),0,1,rand2+1,rand2,0}
     elseif direction == 6 then
     signal = {-1,rand2,(-rand2)-1,0,-1,(-rand2)-1,rand2,0}
     else
     signal = {1,-rand2,-((-rand2)-1),0,-1,(-rand2)-1,rand2,0}
     end
  local pos = getThingPos(uid)
  nsig = #signal
  nvar = 0

  repeat
  nvar = nvar+1
  newpos = {x=pos.x+(signal[nvar]),y=pos.y+(signal[(nsig/2)+nvar]),z=pos.z}
  newtile = {x=newpos.x,y=newpos.y,z=newpos.z,stackpos=0}
  until getTileThingByPos(newtile).uid ~= 0 and hasProperty(getTileThingByPos(newtile).uid,3) == FALSE and queryTileAddThing(uid,newpos) == 1 or nvar == (nsig/2) 

     if distance == nil or distance == 1 then
     doTeleportThing(uid,newpos,TRUE)   
     else
     distance = distance-1
     doTeleportThing(uid,newpos,TRUE)
        if time ~= nil then
        addEvent(doPushCreature,time,uid,direction,distance,time)
        else
        addEvent(doPushCreature,500,uid,direction,distance,500)
        end       
     end
  end  
end  

 

- Em actions.xml coloque:

<action itemid="idaqui" script="move.lua" allowfaruse="1"/> 

 

- Cria um arquivo em: Data → Actions → Scripts um novo arquivo chamado move.lua

function onUse(cid, item, frompos, item2, toPosition)
function doOrderMove(cid) -- By PoRaI.
local creature = getCreatureSummons(cid)[1]
local pokepos = getCreaturePosition(creature)
local ir = toPosition

if pokepos.x == ir.x and pokepos.y == ir.y then
return TRUE
end
if pokepos.x ~= ir.x or pokepos.y ~= ir.y then
if(pokepos.y - ir.y) >= 1 then
addEvent(doPushCreature, 300, creature, NORTH, pokepos.y - ir.y)
end
if(ir.y - pokepos.y) >= 1 then
addEvent(doPushCreature, 300, creature, SOUTH, ir.y - pokepos.y)
end
if(pokepos.x - ir.x) >= 1 then
doPushCreature(creature, WEST, pokepos.x - ir.x)
end
if(ir.x - pokepos.x) >= 1 then
addEvent(doPushCreature, 300, creature, EAST, ir.x - pokepos.x)
end
return FALSE
end
end
if #getCreatureSummons(cid) == 1 then
doOrderMove(cid)
end
end 

 

Créditos ao PoRaI & DOKMOS

Só estou divulgando!

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

bugs que encontrei:

 

Se ficar usando o order sem parar o pokemon começa a blinkar que nem maluco.

 

Como o delay do doPushCreature é de 300, pokemons muito lerdos aparentam estar teletransportando.

 

Devido a falta do return true, quando usa o order aparece a mensagem "You cannot use this object." mas o script roda mesmo assim.

 

Ficaria melhor se o treinador falasse "<nome do poke>, move!" ou algo assim pra parecer realmente que foi uma ordem, e não uma telepatia com o pokemon.

 

Não é culpa sua isso, mas já era de se esperar que o PoRai não liberasse o order dele perfeitinho (sei que ele é capaz porque já vi varios teasers/joguei no server dele).

 

Vlw mesmo assim por compartilhar, ainda mais essa função doPushCreature que pouca gente conhecia.

Isso ai é a base perfeita pra fazer o order :)

 

A propósito, esse Dokmos é um gênio, quem usa a própria função para fazer a mesma função?

Esse doPushCreature é sinistro :o

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

Ei eu queria saber aonde eu coloko essa parte

1º - Adiciona na LIB (Data → lib → functions.lua), você ira adicionar uma função criada pelo DOKMOS, doPushCreature.

------------------ Function doPushCreature(uid,direction,distance,time) by Dokmos ------------------

function doPushCreature(uid,direction,distance,time)

if isCreature(uid) == TRUE then

local rand = (2*math.random(0,1))-1

local rand2 = math.random(-1,0)

if direction == 0 then

signal = {0,rand,-rand,rand,-rand,0,-1,-1,-1,0,0,0}

elseif direction == 1 then

signal = {1,1,1,0,0,0,0,rand,-rand,rand,-rand,0}

elseif direction == 2 then

signal = {0,rand,-rand,rand,-rand,0,1,1,1,0,0,0}

elseif direction == 3 then

signal = {-1,-1,-1,0,0,0,0,rand,-rand,rand,-rand,0}

elseif direction == 4 then

signal = {-1,rand2,(-rand2)-1,0,1,rand2+1,rand2,0}

elseif direction == 5 then

signal = {1,-rand2,-((-rand2)-1),0,1,rand2+1,rand2,0}

elseif direction == 6 then

signal = {-1,rand2,(-rand2)-1,0,-1,(-rand2)-1,rand2,0}

else

signal = {1,-rand2,-((-rand2)-1),0,-1,(-rand2)-1,rand2,0}

end

local pos = getThingPos(uid)

nsig = #signal

nvar = 0

 

repeat

nvar = nvar+1

newpos = {x=pos.x+(signal[nvar]),y=pos.y+(signal[(nsig/2)+nvar]),z=pos.z}

newtile = {x=newpos.x,y=newpos.y,z=newpos.z,stackpos=0}

until getTileThingByPos(newtile).uid ~= 0 and hasProperty(getTileThingByPos(newtile).uid,3) == FALSE and queryTileAddThing(uid,newpos) == 1 or nvar == (nsig/2)

 

if distance == nil or distance == 1 then

doTeleportThing(uid,newpos,TRUE)

else

distance = distance-1

doTeleportThing(uid,newpos,TRUE)

if time ~= nil then

addEvent(doPushCreature,time,uid,direction,distance,time)

else

addEvent(doPushCreature,500,uid,direction,distance,500)

end

end

end

end

TIPOW MEU CHAR VAI JUNTO COM O POKE =/

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

  • Administrador

Dokmos é um programador em C++

A proposito, 90% de chance de não funcionar em um servidor 8.54 (desses de pokémon) suas libs é source são muito desatualizadas.

Eu que criei o script, eu usei a função doPushCreature por que tava com preguiça de fazer uma .__.

Não pensei que o script iria vazar tão rapido assim.

 

Se vocês querem que aparece msg: "Pikachu, move!" faça assim:

function onUse(cid, item, frompos, item2, toPosition)

function doOrderMove(cid) -- By PoRaI.

local creature = getCreatureSummons(cid)[1]

local pokepos = getCreaturePosition(creature)

local ir = toPosition

 

if pokepos.x == ir.x and pokepos.y == ir.y then

return TRUE

end

if pokepos.x ~= ir.x or pokepos.y ~= ir.y then

if(pokepos.y - ir.y) >= 1 then

addEvent(doPushCreature, 300, creature, NORTH, pokepos.y - ir.y)

end

if(ir.y - pokepos.y) >= 1 then

addEvent(doPushCreature, 300, creature, SOUTH, ir.y - pokepos.y)

end

if(pokepos.x - ir.x) >= 1 then

doPushCreature(creature, WEST, pokepos.x - ir.x)

end

if(ir.x - pokepos.x) >= 1 then

addEvent(doPushCreature, 300, creature, EAST, ir.x - pokepos.x)

end

return FALSE

end

end

if #getCreatureSummons(cid) == 1 then

doCreatureSay(cid,getCreatureName(creature) ..", move!",1)

doOrderMove(cid)

end

end

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

Dokmos é um programador em C++

A proposito, 90% de chance de não funcionar em um servidor 8.54 (desses de pokémon) suas libs é source são muito desatualizadas.

Eu que criei o script, eu usei a função doPushCreature por que tava com preguiça de fazer uma .__.

Não pensei que o script iria vazar tão rapido assim.

 

Se vocês querem que aparece msg: "Pikachu, move!" faça assim:

function onUse(cid, item, frompos, item2, toPosition)

function doOrderMove(cid) -- By PoRaI.

local creature = getCreatureSummons(cid)[1]

local pokepos = getCreaturePosition(creature)

local ir = toPosition

 

if pokepos.x == ir.x and pokepos.y == ir.y then

return TRUE

end

if pokepos.x ~= ir.x or pokepos.y ~= ir.y then

if(pokepos.y - ir.y) >= 1 then

addEvent(doPushCreature, 300, creature, NORTH, pokepos.y - ir.y)

end

if(ir.y - pokepos.y) >= 1 then

addEvent(doPushCreature, 300, creature, SOUTH, ir.y - pokepos.y)

end

if(pokepos.x - ir.x) >= 1 then

doPushCreature(creature, WEST, pokepos.x - ir.x)

end

if(ir.x - pokepos.x) >= 1 then

addEvent(doPushCreature, 300, creature, EAST, ir.x - pokepos.x)

end

return FALSE

end

end

if #getCreatureSummons(cid) == 1 then

doCreatureSay(cid,getCreatureName(creature) ..", move!",1)

doOrderMove(cid)

end

end

ei tipow voce podia passar o script para a gente né =P

Link para o comentário
Compartilhar em outros sites

  • Administrador

 



ei tipow voce podia passar o script para a gente né =P

Dokmos é um programador em C++
A proposito, 90% de chance de não funcionar em um servidor 8.54 (desses de pokémon) suas libs é source são muito desatualizadas.
Eu que criei o script, eu usei a função doPushCreature por que tava com preguiça de fazer uma .__.
Não pensei que o script iria vazar tão rapido assim.

Se vocês querem que aparece msg: "Pikachu, move!" faça assim:

function onUse(cid, item, frompos, item2, toPosition)

function doOrderMove(cid) -- By PoRaI.
local creature = getCreatureSummons(cid)[1]
local pokepos = getCreaturePosition(creature)
local ir = toPosition

if pokepos.x == ir.x and pokepos.y == ir.y then
return TRUE
end
if pokepos.x ~= ir.x or pokepos.y ~= ir.y then
if(pokepos.y - ir.y) >= 1 then
addEvent(doPushCreature, 300, creature, NORTH, pokepos.y - ir.y)
end
if(ir.y - pokepos.y) >= 1 then
addEvent(doPushCreature, 300, creature, SOUTH, ir.y - pokepos.y)
end
if(pokepos.x - ir.x) >= 1 then
doPushCreature(creature, WEST, pokepos.x - ir.x)
end
if(ir.x - pokepos.x) >= 1 then
addEvent(doPushCreature, 300, creature, EAST, ir.x - pokepos.x)
end
return FALSE
end
end
if #getCreatureSummons(cid) == 1 then
doCreatureSay(cid,getCreatureName(creature) ..", move!",1)
doOrderMove(cid)
end
end



Que script? quem eu saiba ja está aqui no topico o.O, no inicio dele.

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

Ei eu queria saber aonde eu coloko essa parte

1º - Adiciona na LIB (Data → lib → functions.lua), você ira adicionar uma função criada pelo DOKMOS, doPushCreature.

------------------ Function doPushCreature(uid,direction,distance,time) by Dokmos ------------------

function doPushCreature(uid,direction,distance,time)

if isCreature(uid) == TRUE then

local rand = (2*math.random(0,1))-1

local rand2 = math.random(-1,0)

if direction == 0 then

signal = {0,rand,-rand,rand,-rand,0,-1,-1,-1,0,0,0}

elseif direction == 1 then

signal = {1,1,1,0,0,0,0,rand,-rand,rand,-rand,0}

elseif direction == 2 then

signal = {0,rand,-rand,rand,-rand,0,1,1,1,0,0,0}

elseif direction == 3 then

signal = {-1,-1,-1,0,0,0,0,rand,-rand,rand,-rand,0}

elseif direction == 4 then

signal = {-1,rand2,(-rand2)-1,0,1,rand2+1,rand2,0}

elseif direction == 5 then

signal = {1,-rand2,-((-rand2)-1),0,1,rand2+1,rand2,0}

elseif direction == 6 then

signal = {-1,rand2,(-rand2)-1,0,-1,(-rand2)-1,rand2,0}

else

signal = {1,-rand2,-((-rand2)-1),0,-1,(-rand2)-1,rand2,0}

end

local pos = getThingPos(uid)

nsig = #signal

nvar = 0

 

repeat

nvar = nvar+1

newpos = {x=pos.x+(signal[nvar]),y=pos.y+(signal[(nsig/2)+nvar]),z=pos.z}

newtile = {x=newpos.x,y=newpos.y,z=newpos.z,stackpos=0}

until getTileThingByPos(newtile).uid ~= 0 and hasProperty(getTileThingByPos(newtile).uid,3) == FALSE and queryTileAddThing(uid,newpos) == 1 or nvar == (nsig/2)

 

if distance == nil or distance == 1 then

doTeleportThing(uid,newpos,TRUE)

else

distance = distance-1

doTeleportThing(uid,newpos,TRUE)

if time ~= nil then

addEvent(doPushCreature,time,uid,direction,distance,time)

else

addEvent(doPushCreature,500,uid,direction,distance,500)

end

end

end

end

TIPOW MEU CHAR VAI JUNTO COM O POKE =/

Tente usar isArray <

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...