O problema está nos parâmetros passados para getPathTo, onde os parâmetros que controlam a passagem por obstáculos estão definidos como false. Isso permite que a criatura atravesse elementos bloqueantes. Além disso, podemos ajustar alguns detalhes para garantir um movimento mais seguro e fluido.
Script Ajustado
function pokemonWalk(summon, position, maxDistance, extra) -- Tenta encontrar um caminho para a posição desejada local path = summon:getPathTo(position, 0, maxDistance, true, false, 15) -- O terceiro parâmetro (true) indica que a criatura não pode atravessar bloqueios (como paredes). -- O quarto parâmetro (false) indica que a criatura pode atravessar outros monstros. if not path or #path == 0 then return false end setCreatureIdle(summon:getId(), #path * 500 + 10000) walkToPosition(summon:getId(), path, 1, extra) return true end function walkToPosition(cid, path, count, extra) local creature = Creature(cid) if not creature then return true end if creature:getCondition(CONDITION_MOVING) == nil then return true end local dir = path[count] creature:move(dir) count = count + 1 if count <= #path then addEvent(walkToPosition, creature:getWalkDelay(dir), cid, path, count, extra) end end function setCreatureIdle(cid, time) local creature = Creature(cid) if not creature then return true end local condition = Condition(CONDITION_MOVING) condition:setParameter(CONDITION_PARAM_TICKS, time) creature:addCondition(condition) end
Mudanças Feitas:
-
Parâmetro de Caminho:
-
getPathTo(position, 0, maxDistance, true, false, 15) -
O terceiro parâmetro (
true) agora assegura que a criatura não atravessará obstáculos sólidos como paredes ou itens que bloqueiam a passagem.
-
-
Verificação de Caminho:
-
Agora verificamos se
pathé válido e se contém direções antes de continuar com a funçãowalkToPosition.
-
Agora verificamos se
-
Execução Recursiva de Movimento:
-
A função
walkToPositionsó continua se houver mais direções a seguir no caminho (count <= #path).
-
A função
Como Funciona Agora:
- O Pokémon vai calcular um caminho válido para a posição alvo, evitando obstáculos como paredes.
- O movimento é executado passo a passo, verificando se há condições que podem interromper o movimento (como uma condição de movimento já existente).
- O movimento continua até que o Pokémon tenha atingido a posição final, sem atravessar paredes ou objetos intransponíveis.






info
Grupo: Campones
Registrado: 02/04/23
Posts: 2
Reputação: 0
Boa tarde.
Estou tentando reproduzir o script Pokémon Move de "pota".
mas estou com um problema, pois os monstros podem passar por tudo.
Código:
Editado Setembro 3 por joshiie25