Ir para conteúdo

Featured Replies

Postado

Olá pessoal,

Hoje venho trazer pra vocês um sisteminha que acabei de criar, para auxiliar a movimentação de nossos players, fazendo com que além de spells de velocidade, também tenham um recurso a mais. Funciona da seguinte maneira : para os personagens melee (paladin e knight), há um grande impulso em que eles correm super rápido até o próximo obstáculo (monstros, paredes, etc) ou até a quantidade limite de posições para se avançar do talkaction, soltando efeitos de fogo pelos pés. É possível controlar sua direção de corrida pressionando ctrl+direção. Já os personagens mágicos, druid e sorcerer, canalizarão um poder de luz e após isso, se teleportarão, em linha reta, até o próximo obstáculo, ou até a quantidade de posições limite. Não é possível utilizar continuamente, porque senão seria bastante apelativo, então coloquei uma quantidade de exhaust, no meu caso, 10 segundos, porém você pode modificar no script. Para vocês terem ideia de como funciona, fiz um vídeo (com resolução ruim a propósito, peço perdão), que está logo à seguir :

 

Bom, cada uma das categorias(melee, magic) tem sua vantagem, e sua desvantagem.

Melee :

-Vantagem : é possível controlar as direcionais com ctrl.

-Desvantagem : pode ser atingido durante a movimentação.

 

Magic :

-Vantagem : aparece instantaneamente na posição destino, após a focalização de energia.

-Desvantagem : não pode desviar de obstáculos.

 

Para usar, apenas digite !move.

Agora, vou mostrar-lhes os códigos e como devem ser colocados e configurados.

 

Em data\talkactions\scripts, crie um novo arquivo chamado move.lua, e cole o seguinte código :

local exhauststorage = 20209 -- storage para o exhaust
local exhaust = 10 -- tempo do exhaust em segundos
local quantpos = 30 -- posições x ou y que o personagem irá avançar, por exemplo, aqui irá se mover 30 posições pra direção em que estiver
local voc = { --dependendo da vocação, a movimentação será diferente
	{3,4,7,8,11,12}, -- vocações melee, que no caso são knight e paladin
	{1,2,5,6,9,10}, -- vocações mágicas, que são sorc e druid
}

--Função da movimentação para paladin e knight
function moveMelee(cid, t)
	if(isCreature(cid)) then
		local tmp = getPlayerLookPos(cid)
		if(not isCreature(getThingFromPos(tmp).uid) and doTileQueryAdd(cid, tmp)==1 and t>0) then
			doCreatureSetNoMove(cid, 1)
			t = t-1
			doSendMagicEffect(getCreaturePos(cid), 15)
			doMoveCreature(cid, getPlayerLookDir(cid))
			return addEvent(moveMelee, 10, cid, t)
		else
			doCreatureSetNoMove(cid, 0)
			return TRUE
		end
	else
		return TRUE
	end
end

--Função da movimentação para sorcerer e druid
function moveMagic(cid)
	if(isCreature(cid)) then
		local tmp = getCreaturePos(cid)
		local dir = getPlayerLookDir(cid)
			for i=1, quantpos do
				if(dir==0) then
					tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z}
				elseif(dir==1) then
					tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z}
				elseif(dir==2) then
					tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z}
				elseif(dir==3) then
					tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z}
				end
				if(doTileQueryAdd(cid, tmp)~=1) then
					if(dir==0) then
						tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z}
					elseif(dir==1) then
						tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z}
					elseif(dir==2) then
						tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z}
					elseif(dir==3) then
						tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z}
					end
					break
				end
			end
		doTeleportThing(cid, tmp)
		doSendMagicEffect(getCreaturePos(cid), 49)
		doSendAnimatedText(getCreaturePos(cid), "Tchum!", 144)
		doCreatureSetNoMove(cid, 0)
		return TRUE
	else
		return TRUE
	end
end

--Efeitos para a movimentação de sorc e druid
function magicEffect(cid, i)
	if(isCreature(cid)) then
		local atual = getCreaturePosition(cid)
			local posefeitos = {
				{x=(atual.x)-1, y=(atual.y)-1, z=atual.z},
				{x=atual.x, y=(atual.y)-1, z=atual.z},
				{x=(atual.x)+1, y=(atual.y)-1, z=atual.z},
				{x=(atual.x)+1, y=atual.y, z=atual.z},
				{x=(atual.x)+1, y=(atual.y)+1, z=atual.z},
				{x=atual.x, y=(atual.y)+1, z=atual.z},
				{x=(atual.x)-1, y=(atual.y)+1, z=atual.z},
				{x=(atual.x)-1, y=atual.y, z=atual.z},
			}
			if(i<=8) then
				doSendMagicEffect({x=posefeitos[i].x, y=posefeitos[i].y, z=posefeitos[i].z}, 39)
			end
		if(i>8) then
			doSendMagicEffect(atual, 49) 
			doSendAnimatedText(atual, "Voosh", 144)
			return moveMagic(cid) 
		end
		return addEvent(magicEffect, 50, cid, i+1)
	else
		return TRUE
	end
end

--Função principal
function onSay(cid, words, param)
	if(getPlayerStorageValue(cid, exhauststorage)>os.time()) then
		doPlayerSendCancel(cid, "Voce deve esperar "..(getPlayerStorageValue(cid, exhauststorage)-os.time()).." segundos para usar a movimentação novamente.")
		return TRUE
	else
		setPlayerStorageValue(cid, exhauststorage, os.time()+exhaust)
		local v = getPlayerVocation(cid)
		for i=1, #voc[1] do
			if(v==voc[1][i]) then
				return moveMelee(cid, quantpos),doCreatureSay(cid, "Movimentação ultra rápida!", 1)
			end
		end
		return magicEffect(cid, 1),doCreatureSay(cid, "Teleport!", 1),doCreatureSetNoMove(cid, 1)
	end
end 

Agora vá em data\talkactions\talkactions.xml, e adicione uma nova linha com o seguinte conteúdo :

	<talkaction words="!move" event="script" value="move.lua"/>

O código está comentado, então agora é só configurar e usar de acordo com as suas preferências!

 

OBS : Fica a seu critério colocar se apenas vip podem utilizar esse sistema, se será necessário mp, ou soul, ou hp, ou qualquer coisa que precise. Tudo isso pode ser incrementado na função principal (onSay).

Créditos : eu mesmo (GMLeal/ BielzinhoCrazy/ Fakezim) tanto faz 

Bom, é isso aí pessoal, bom proveito, e obrigado!

Editado por bielzinhocrazy (veja o histórico de edições)

  • Respostas 12
  • Visualizações 1.7k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • bielzinhocrazy
    bielzinhocrazy

    Realmente, baixei um OT da versão 9,83, e não funcionou. Bom, eu não sei as causas porque sempre fiz scripts na versão 8.6, e faz muito, MUUUITO tempo que não faço códigos pra tibia (uns 3 a 4 anos, e

  • bielzinhocrazy
    bielzinhocrazy

    Pra limitar é só fazer a verificação se está pk e se é pz zone, se for, não teleportar pra dentro da pz, implementei já no script, tente com este código : local exhauststorage = 20209 -- storage par

  • bielzinhocrazy
    bielzinhocrazy

    Eu fiz mas nem testei, estou meio sem tempo, porém a lógica está certa, tente então desta forma : local exhauststorage = 20209 -- storage para o exhaust local exhaust = 10 -- tempo do exhaust em seg

Postado

No meu deu errado, não deu nenhum erro, mas no jogo quando eu executo essa talkaction, aparece a animação dos mages, mas ai o char fica no mesmo lugar, e além disso ele buga, e você não pode mais sair do lugar '-'

Postado
  • Autor

No meu deu errado, não deu nenhum erro, mas no jogo quando eu executo essa talkaction, aparece a animação dos mages, mas ai o char fica no mesmo lugar, e além disso ele buga, e você não pode mais sair do lugar '-'

Estranho, retestei o código e funcionou perfeitamente. Poderia postar como você colocou no seu OT, e a versão do seu OT? Ao meu ver parece que só está executando a função de efeitos do teleport(magicEffect), mas não chama a função que teleporta(moveMagic).

 

OBS : O script foi testado na versão 8.6 do tibia, e o servidor que uso é o eribaiak 3.0.

OBS 2 : O player trava e fica sem mover, porque enquanto os efeitos são executados, eu coloquei "setPlayerNoMove(cid, 1)" pro player não sair andando enquanto 'carrega' o teleport, mas após ele se teleportar, destrava o movimento, e é possível andar normalmente. Então realmente, o mais provável é a função moveMagic não estar sendo executada corretamente.

Editado por bielzinhocrazy (veja o histórico de edições)

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo