Spell doMoveCreature

161996
Por 161996
em Scripts
  • 1
  • 2

161996

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/04/08Posts: 91Char no Tibia: walquer

Olá pessoal, estou precisando urgente de uma spell com doMoveCreature que é igual esta abaixo porém sem o bug de atravessar rios e paredes... (obs: ja coloquei blockwalls="1" e tentei de tudo). Ela é controlada pelo ctrl+setas do teclado e é muito legal para usar em servidores derivados.



Spell:





local area = {

{0,0,0},

{0,3,0},

{0,0,0},

}


function onDash(cid)

local poslook = getCreatureLookPosition(cid)

poslook.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE

if isWalkable(poslook, false, false, false) then

if not isCreature(getThingfromPos(poslook).uid) then

doMoveCreature(cid, getPlayerLookDirection(cid))

doSendMagicEffect(getPlayerPosition(cid), 2)

return TRUE

else

doMoveCreature(cid, getPlayerLookDirection(cid))

doAreaCombatHealth(0, 1, poslook, area, -getCreatureSpeed(cid)*2/(getCreatureHealth(cid)/300), -getCreatureSpeed(cid)*3/(getCreatureHealth(cid)/30), 9)

doCreatureSay(getThingfromPos(poslook).uid, 'Auch', TALKTYPE_MONSTER)

doSetItemOutfit(getThingfromPos(poslook).uid, 2317, 1*1000)

doSendMagicEffect(getCreaturePosition(getThingfromPos(poslook).uid), 31)

return TRUE

end

end

end


function onCastSpell(cid, var)local distance = 40


for i = 0, distance do

addEvent(onDash,90*i,cid)

end

return TRUE

end

function isWalkable(pos, creature, proj, pz)-- by Nord

if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end

if getTopCreature(pos).uid > 0 and creature then return false end

if getTileInfo(pos).protection and pz then return false, true end

local n = not proj and 3 or 2

for i = 0, 255 do

pos.stackpos = i

local tile = getTileThingByPos(pos)

if tile.itemid ~= 0 and not isCreature(tile.uid) then

if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then

return false

end

end

end

return true

end






Alguém poderia fazer outra??! Aguardando.

Novo servidor de Poketibia ! INAUGURAÇÃO DIA 01/04/2020
 http://www.pokehonor.com.br/

 

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

O problema está no bloco depois do else, na condição do isWalkable, localizado na função onDash. Mesmo se não for "andável", o jogador será teleportado para frente. Com isso, obviamente, ele vai atravessar paredes, rios e etc. Portanto, lhe pergunto: qual a necessidade disso?

doMoveCreature(cid, getPlayerLookDirection(cid))
doAreaCombatHealth(0, 1, poslook, area, -getCreatureSpeed(cid)*2/(getCreatureHealth(cid)/300), -getCreatureSpeed(cid)*3/(getCreatureHealth(cid)/30), 9)
doCreatureSay(getThingfromPos(poslook).uid, 'Auch', TALKTYPE_MONSTER)
doSetItemOutfit(getThingfromPos(poslook).uid, 2317, 1*1000)
doSendMagicEffect(getCreaturePosition(getThingfromPos(poslook).uid), 31)

Se esta parte fosse removido do código, iria funcionar perfeitamente.

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

161996

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/04/08Posts: 91Char no Tibia: walquer

Também pensei nisso zip, só que essa spell atravessa alguns tipos de paredes somente, exemplo: shallow water e wall de cave ela atravessa. O resto de paredes comuns ele não atravessa... sabe qual o problema? (Obs: tenho outra spell que funciona perfeitamente mas ela está perdendo a storage ao morrer, se quiser eu posto ela aqui).

Novo servidor de Poketibia ! INAUGURAÇÃO DIA 01/04/2020
 http://www.pokehonor.com.br/

 

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

Hm, poderia tentar com este código? Qualquer coisa, podemos fazer uma tabela com os IDs dos items que a spell atravessa. Aí, complementamos o código com uma condição envolvendo-os.

local area = {
    {0, 0, 0},
    {0, 3, 0},
    {0, 0, 0},
}
function isWalkable(pos)-- by Nord / editado por Omega
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then
        return false
    elseif isCreature(getTopCreature(pos).uid) then
        return false
    elseif getTileInfo(pos).protection then
        return false
    elseif hasProperty(getThingFromPos(pos).uid, 3) or hasProperty(getThingFromPos(pos).uid, 7) then
        return false
    end
    return true
end
function onDash(cid)
    if not isCreature(cid) then return true end
    local poslook = getCreatureLookPosition(cid)
    poslook.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
    if isWalkable(poslook) then
        doMoveCreature(cid, getPlayerLookDirection(cid))
        doSendMagicEffect(getPlayerPosition(cid), 2)
    else
        doMoveCreature(cid, getPlayerLookDirection(cid))
        doAreaCombatHealth(0, 1, poslook, area, -getCreatureSpeed(cid)*2/(getCreatureHealth(cid)/300), -getCreatureSpeed(cid)*3/(getCreatureHealth(cid)/30), 9)
        doCreatureSay(getThingfromPos(poslook).uid, 'Auch', TALKTYPE_MONSTER)
        doSetItemOutfit(getThingfromPos(poslook).uid, 2317, 1*1000)
        doSendMagicEffect(getCreaturePosition(getThingfromPos(poslook).uid), 31)
    end
    return true
end
function onCastSpell(cid, var)
    local distance = 40
    for i = 0, distance do
        addEvent(onDash, 90*i, cid)
    end
    return true
end

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

161996

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/04/08Posts: 91Char no Tibia: walquer

Não da erro no console mas a spell não funciona.

 

Aqui vai outra spell que funciona perfeitamente porém como ela é baseada em storage, ao morrer com ela ativada, o player perde o storage e não consegue mais usar a spell para sempre.

Novo servidor de Poketibia ! INAUGURAÇÃO DIA 01/04/2020
 http://www.pokehonor.com.br/

 

Duuhzinhow

Projeto ViteraOt
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 14/01/14Posts: 276Gênero: MasculinoChar no Tibia: Sonda retro

A funçao da spell seria controlar seu alvo pelo ctrl+setas?

161996

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/04/08Posts: 91Char no Tibia: walquer

Exato. As duas spells que eu postei fazem isso, no entanto cada uma tem um tipo de bug.

Novo servidor de Poketibia ! INAUGURAÇÃO DIA 01/04/2020
 http://www.pokehonor.com.br/

 

Slicer

Insanity
avatar
Príncipe
Príncipe

INFOS

Grupo: PríncipeRegistrado: 19/08/10Posts: 4014Gênero: Masculino

pq simplismente n tiram a funçao doMoveCreature do else? -deixando o resto como ta- ;x n achu q seja necessario ela ali...

"Só a beira do abismo que os seres humanos acham forças para mudar."... E isso me da nojo... ¬¬

"Insanity is doing the exact... same fucking thing... over and over again expecting... shit to change... That. Is. Crazy." -Vass/Einstein

 

161996

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/04/08Posts: 91Char no Tibia: walquer

pq simplismente n tiram a funçao doMoveCreature do else? -deixando o resto como ta- ;x n achu q seja necessario ela ali...

 

Então, isso não interfere em nada tanto que achei q era esse o problema... pode me ajudar em refazer a spell com seus poderes de script Slicer?

Novo servidor de Poketibia ! INAUGURAÇÃO DIA 01/04/2020
 http://www.pokehonor.com.br/

 

Slicer

Insanity
avatar
Príncipe
Príncipe

INFOS

Grupo: PríncipeRegistrado: 19/08/10Posts: 4014Gênero: Masculino

eu diria q a do zip ta perfeita ;x soh tem q tirar o doMove do else... ;x

 

ah sim, tem q verificar se o cid ainda ta online ;x e seria bom fazer a funçao ms da addEvent... melhor q deixar 40 addEvent programados...

"Só a beira do abismo que os seres humanos acham forças para mudar."... E isso me da nojo... ¬¬

"Insanity is doing the exact... same fucking thing... over and over again expecting... shit to change... That. Is. Crazy." -Vass/Einstein

 

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

Valeu por lembrar, Slicer. Sobre o doMoveCreature dentro do else, não removi pois não sabia qual a intenção do cara quando não fosse "andável" a próxima posição. Se ele puder responder tal dúvida, poderá ajudar a "corrigir" essa parte.

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

161996

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/04/08Posts: 91Char no Tibia: walquer

eu diria q a do zip ta perfeita ;x soh tem q tirar o doMove do else... ;x

 

ah sim, tem q verificar se o cid ainda ta online ;x e seria bom fazer a funçao ms da addEvent... melhor q deixar 40 addEvent programados...

 

Olha ai como deixei... mesma coisa

 

 

local area = {
{0, 0, 0},
{0, 3, 0},
{0, 0, 0},
}
function isWalkable(pos)-- by Nord / editado por Omega
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then
return false
elseif isCreature(getTopCreature(pos).uid) then
return false
elseif getTileInfo(pos).protection then
return false
elseif hasProperty(getThingFromPos(pos).uid, 3) or hasProperty(getThingFromPos(pos).uid, 7) then
return false
end
return true
end
function onDash(cid)
local poslook = getCreatureLookPosition(cid)
poslook.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
if isWalkable(poslook) then
doMoveCreature(cid, getPlayerLookDirection(cid))
doSendMagicEffect(getPlayerPosition(cid), 2)
return true
end
end
function onCastSpell(cid, var)
addEvent(onDash, 700, cid)
addEvent(onDash, 800, cid)
addEvent(onDash, 900, cid)
addEvent(onDash, 1000, cid)
addEvent(onDash, 1100, cid)
addEvent(onDash, 1200, cid)
addEvent(onDash, 1300, cid)
addEvent(onDash, 1400, cid)
addEvent(onDash, 1500, cid)
addEvent(onDash, 1600, cid)
addEvent(onDash, 1700, cid)
addEvent(onDash, 1800, cid)
addEvent(onDash, 1900, cid)
addEvent(onDash, 2000, cid)
addEvent(onDash, 2100, cid)
addEvent(onDash, 2200, cid)
addEvent(onDash, 2300, cid)
addEvent(onDash, 2400, cid)
addEvent(onDash, 2500, cid)
addEvent(onDash, 2600, cid)
addEvent(onDash, 2700, cid)
addEvent(onDash, 2800, cid)
addEvent(onDash, 2900, cid)
addEvent(onDash, 3000, cid)
addEvent(onDash, 3100, cid)
addEvent(onDash, 3200, cid)
addEvent(onDash, 3300, cid)
addEvent(onDash, 3400, cid)
addEvent(onDash, 3500, cid)
addEvent(onDash, 3600, cid)
addEvent(onDash, 3700, cid)
return true
end

Respondendo o zip:
Acho que foi um erro aquele move depois do else... no entanto ele não interfere em nada... pode ver que eu testei a spell a cima e está atravessando alguns pisos ainda como poison, water e caves.

Novo servidor de Poketibia ! INAUGURAÇÃO DIA 01/04/2020
 http://www.pokehonor.com.br/

 

Slicer

Insanity
avatar
Príncipe
Príncipe

INFOS

Grupo: PríncipeRegistrado: 19/08/10Posts: 4014Gênero: Masculino

/\ tu n intendeu oq eu quis dizer com botar o addEvent n funçao kk'

e sobre oq tu flo de ainda andar sobre poison, water e afins, isso eh BEMMMM complicado de arrumar kk' achu q o jeito mais simples eh pegar os tiles q ele ta andando e checar eles na funçao isWalkable tb... ;x

 

@zip

eh tb n intendi a ideia daquilo... se n eh andavel, pq ele vai tentar andar denovo? kk'

"Só a beira do abismo que os seres humanos acham forças para mudar."... E isso me da nojo... ¬¬

"Insanity is doing the exact... same fucking thing... over and over again expecting... shit to change... That. Is. Crazy." -Vass/Einstein

 

161996

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/04/08Posts: 91Char no Tibia: walquer

/\ tu n intendeu oq eu quis dizer com botar o addEvent n funçao kk'

e sobre oq tu flo de ainda andar sobre poison, water e afins, isso eh BEMMMM complicado de arrumar kk' achu q o jeito mais simples eh pegar os tiles q ele ta andando e checar eles na funçao isWalkable tb... ;x

 

@zip

eh tb n intendi a ideia daquilo... se n eh andavel, pq ele vai tentar andar denovo? kk'

 

Mas sli... a segunda spell q eu postei funciona perfeitamente, no entanto quando o player morre com ela ativada o storage some e nunca mais volta. E detalhe: nao usa iswalkable.

Novo servidor de Poketibia ! INAUGURAÇÃO DIA 01/04/2020
 http://www.pokehonor.com.br/

 

Slicer

Insanity
avatar
Príncipe
Príncipe

INFOS

Grupo: PríncipeRegistrado: 19/08/10Posts: 4014Gênero: Masculino

estranhu.. era pra essa 2* spell ae passar por cima de tudo ;x ate paredes e afins ;/

 

o real problema dessa funçao eh isso:

lua_pushnumber(L, g_game.internalMoveCreature(creature, (Direction)direction, FLAG_NOLIMIT));

essa FLAG_NOLIMIT q faz as sources n checarem a pos antes de mover a criatura ;x n intendo pq foi feito assim mas... se tu tiver as sources pode tirar essa flag dali e tudo deve da certo ;p

"Só a beira do abismo que os seres humanos acham forças para mudar."... E isso me da nojo... ¬¬

"Insanity is doing the exact... same fucking thing... over and over again expecting... shit to change... That. Is. Crazy." -Vass/Einstein

 

  • 1
  • 2