Ir para conteúdo
  • 0

[Resolvido] Mover Pokemon tfs 1.3


nociam

Pergunta

Boa tarde.

 

Pensei em fazer um ordem para pokemon mas estou com um bug alguém tem ideia de como resolver.

 

Problema: quanto do ordem em 1 sqm ele vai certinho mas quanto e mais longe ele se teleporta.

 

0b587004b6fcaccfb2a683bebce78f9b.gif

 

Código c++:

 

int LuaScriptInterface::luaGamePlayerMovePokemon(lua_State* L)
{
	// Game.playerMovePokemon(pokemon, toPosition)
	Creature* pokemon = getCreature(L, 1);
	if (pokemon->getMonster()) {
		const Position& position = getPosition(L, 2);

		Tile* toTile = g_game.map.getTile(position);
		g_game.internalMoveCreature(*pokemon, *toTile, FLAG_NOLIMIT);
	}

	return 1;
}

código lua:

 

function onUse(player, item, fromPosition, target, toPosition, isHotkey)

	local poke = player:getSummons()[1] 
	Game.playerMovePokemon(poke, toPosition)
	
	return true
end

 

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

7 respostass a esta questão

Posts Recomendados

  • 0
  • Administrador

Alguma configuração do config.lua ou na source para teleportar summons para perto quando tiver longe em X sqms.

Link para o comentário
Compartilhar em outros sites

  • 0

Se observar nao e esse o caso, ao dar ordem em 1 sql ele vai, quanto e pra mais longe ele vai mais nao vai caminhando ele se teleporta ate o local o certo e ir andando ate o local.

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

  • 1
  • Administrador

Ah sim, nem tinha analisado o código, só o gif, rs. Pensei que você tava arrastando ele pra testar, awoejawei.

Enfim, a função internalMoveCreature é usada para mover criaturas (quase igual a função internalTeleport) sem usar o algoritmo de Path Finding.
Em C++:

int LuaScriptInterface::luaGamePlayerMovePokemon(lua_State* L)
{
	// Game.playerMovePokemon(pokemon, toPosition)
	Creature* pokemon = getCreature(L, 1);
        const Position& position = getPosition(L, 2);

	if (pokemon->getMonster()) {
                std::forward_list<Direction> dirList;
                if(pokemon->getPathTo(position, dirList, 0, 0, true, true))
                      pokemon->startAutoWalk(dirList);
	}

	return 1;
}        

 

Lua: (Esse código ta mais elaborado do que o C++)

local pokemonsMoveTo = {}

function Player:movePokemonByList(pokemon, dirList, index)
	if self and pokemon and #dirList >= index then
		local speed = pokemon:getSpeed() * 3
		pokemon:move(dirList[index], 16)
		index = index + 1

		pokemonsMoveTo[self:getId()] = addEvent(function()
			self:movePokemonByList(pokemon, dirList, index)
		end, speed)
	end
end

function Player:movePokemon(pos)
	local pokemon = self:getSummons()
	if #pokemon == 0 then
		return false
	end

	if pokemonsMoveTo[self:getId()] then
		stopEvent(pokemonsMoveTo[self:getId()])
		pokemonsMoveTo[self:getId()] = nil
	end

	local dirList = pokemon[1]:getPathTo(pos, 0, 0, true, true)
	self:movePokemonByList(pokemon[1], dirList, 1)
	return true
end

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Administrador
A questão neste tópico de suporte foi respondida e/ou o autor do tópico resolveu o problema. Este tópico está fechado e foi movido para Suporte - Resolvidos. Se você tiver outras dúvidas, crie um novo tópico.
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...