GE

[OtClient] Pokemon Health Info

Por Gengo, 27 de out. de 2018 em Clients

32
16.1k
GengoG
27 de outubro de 2018 às 21:07

Eai galera do xtibia, hoje venho por meio desse post trazer para vocês uma pokebar, sei que já existe porém este é um pouco diferente do que costumamos ver.

Antes de tudo faça o download do arquivo e vamos a configuração.

 

OBS: Seu otClient precisa ter opcodes para poder funcionar.

 

1) Coloque o module na pasta do seu otClient em /modules.

2) No arquivo do seu servidor em data/lib/106-mainfunctions.lua coloque o seguinte trecho de código:

Spoiler
function sendPokeOTC(cid)
	local pokemon = {}
	for indice, value in pairs(getPlayerPokeballs(cid)) do
		local Name = getPokeballName(value.uid)
		table.insert(pokemon, "{"..
			"portrait  = '"..getPortraitClientID.."',"..
			"name      = '"..Name.."',"..
			"health    = '"..getBallHealth(cid, value).."',"..
			"maxHealth = '"..getBallMaxHealth(cid,value).."',"..
		"},")				
	end
	return doSendPlayerExtendedOpcode(cid, 122, table.concat(pokemon))
end

 

3) Ainda no mesmo arquivo 106-mainfunctions.lua procure pela função doOTCSendPokemonHealth e substitua ela pelo trecho a seguir:

Spoiler
function doOTCSendPokemonHealth(cid)
	local ball  = getPlayerSlotItem(cid, CONST_SLOT_FEET)
	local pokemon = getCreatureSummons(cid)
	if not ball.uid or ball.uid <= 1 then
		return doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, "0|0")
	end
	if #pokemon >= 1 then
		return doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getCreatureHealth(pokemon[1]).."|"..getCreatureMaxHealth(pokemon[1]).."|".. getItemAttribute(ball.uid, "identificador"))
	end
	return doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallHealth(cid, ball).."|"..getBallMaxHealth(cid, ball).."|"..getItemAttribute(ball.uid, "identificador"))
end

 

4) Caso seu servidor não tenha a função table.serialize, adicione ela no arquivo do servidor em data/lib/012-table.lua:

Spoiler
table.serialize = function(x, recur)
	-- REMOVIDO DEVIDO HA ERROS NÃO SE PREOCUPE, SEGUE O TUTORIAL POIS JÁ FOI ALTERADO PARA FUNCIONAR SEM ESSA FUNÇÃO ---
end

 

5) No arquivo do seu servidor data/creaturescripts/script/login.lua coloque o seguinte trecho no final do onLogin antes do return

sendPokeOTC(cid)

6) Abrindo o arquivo do npc Nurse Joy em especifico o script.lua, procure o trecho de codigo: 

doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, healthMax.."|"..healthMax)

Substitui por esse:

doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, healthMax.."|"..healthMax.."|"..getItemAttribute(mypb.uid, "identificador"))

E no finalzinho da função do mesmo arquivo lua, antes do end, coloque o seguinte codigo:

for indice, value in pairs(getPlayerPokeballs(cid)) do
		doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallMaxHealth(cid, value).."|"..getBallMaxHealth(cid, value).."|"..getItemAttribute(value.uid, "identificador"))
end

7) E por ultimo no arquivo opcodes.lua localizado na pasta data/creaturescript/script/opcodes.lua procure por:

if buffer == "refresh" then
  doOTCSendPokemonHealth(cid)
end

E substitui por:

if buffer == "refresh" then
			for indice, value in pairs(getPlayerPokeballs(cid)) do
				doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallHealth(cid, value).."|"..getBallMaxHealth(cid, value).."|"..getItemAttribute(value.uid, "identificador"))
			end
        end

 

Bom é basicamente isso, a unica coisa que estará faltando e que vou deixar para vocês fazerem é quando o player colocar ou retirar outro pokemon na bag fazer com que o servidor chame a função sendPokeOTC(cid), não estarei ensinando essa parte pq o meu é bem diferente e não adiantaria eu mostrar como se faz, mas também não é um bixo de 7 cabeças fazer essa parte.

 

Fazendo esse tutorial certinho e tudo mais, ficará assim no game:

pokehealth.png.e71d4cbeba3935c8d172a8f75c0743ff.png

 

Espero que gostem e que entendam, desculpe-me por qualquer coisa não sou muito de explicar e ficar escrevendo tutorial.

 

Download do arquivo:

https://www.mediafire.com/file/p8wch1fogveh48e/game_poke.rar/file

Scan do arquivo:

https://www.virustotal.com/#/file/d88b33ad27520ddd28afdaeb7d17af26805fa3bf39400f1a30813a0da3ca1695/detection

 

Editado Agosto 8 por Gengo

BennyB
27 de outubro de 2018 às 21:12

Obrigado pelo conteúdo, Luis!

Comunidade agradece ? 

DarkWoreD
27 de outubro de 2018 às 21:44

Excelente Conteúdo, Reputado.

Ayron5A
27 de outubro de 2018 às 21:51

Nice! Reputado. 

1 mês depois...
10 de novembro de 2018 às 11:53

Eu estou tentando colocar este recurso de barra de vida no meu ot mas não estou conseguindo achar algumas linhas do script, pode me dar uma ajuda?

GengoG
10 de novembro de 2018 às 20:18
8 horas atrás, redeindependent disse:

Eu estou tentando colocar este recurso de barra de vida no meu ot mas não estou conseguindo achar algumas linhas do script, pode me dar uma ajuda?

Posso ajudar sim, especifique o que você precisa.

11 de novembro de 2018 às 00:00

Eu uso o OT DXP do Huatson, não consegui por para funcionar, da um montao de erro e a bar de skills some.

12 de novembro de 2018 às 20:21

ou será que isso só funciona no PDA?

GengoG
13 de novembro de 2018 às 07:27
11 horas atrás, redeindependent disse:

ou será que isso só funciona no PDA?

Funciona normal para ambos, você deve ter configurado algo errado, se vc não fala qual erro específico está ocorrendo, não tem como ajudar, seja mais claro na hora de mencionar os erros.

13 de novembro de 2018 às 18:47

ok amigo vou fazer novamente e te relatar o erro.

2 semanas depois...
25 de novembro de 2018 às 08:03

image.thumb.png.da4fe4180b11eb1b2e8391aca63a7b79.pngaparece esse erro ae

GengoG
25 de novembro de 2018 às 09:42
1 hora atrás, redeindependent disse:

image.thumb.png.da4fe4180b11eb1b2e8391aca63a7b79.pngaparece esse erro ae

Esso erro acontece pois creio que o numero que uso para registrar o Opcodes, no seu servidor pode já estar em uso.

25 de novembro de 2018 às 16:39

então o que deve-se fazer?

GengoG
25 de novembro de 2018 às 17:06
15 minutos atrás, redeindependent disse:

então o que deve-se fazer?

Na parte do modulo onde registra:

ProtocolGame.registerExtendedOpcode(122, ...

O 122 possivelmente está em uso no seu otClient, troque-o por um que não esteja em uso.

Dai você se pergunta também como saber qual não está em uso, simples coloque um numero que não de erro deste tipo, lembrando que o opcode vai do 0 ao 255.

OBS: Trocar o numero 122 do servidor também.

 

E mais, veja se o registro do Opcodes do HealthChange também não esteja em uso.

 

Verificado tudo isso, deverá funcionar normal, se erros surgirem dai não é erro com o module em que criei e sim má configuração sua.

25 de novembro de 2018 às 17:09

eu acabei de perceber isso.
ProtocolGame.registerExtendedOpcode(104, function(protocol, opcode, buffer) onPokeHealthChange(buffer) end)

 ProtocolGame.registerExtendedOpcode(104, function(protocol, opcode, buffer) onPokeHealthChange(protocol, opcode, buffer) end)

Um é do seu mod o outro é do cliente da pokebar e char life

 

Eu até consegui, porém ta aquele bug quando muda o poke nao altera nada. dai pra frente será osso