Jump to content

[OtClient] Pokemon Health Info


Gengo

Recommended Posts

  • 2 months later...

a minha nurse joy não tem esses extended opcode, e ocorreu esse erro na parte do login...

 

heal.lua (nurse joy)

 

https://hastebin.com/aketokiqen.rb

 

login.lua

 

https://hastebin.com/iwuwepanaq.php

 

erro que deu no console:

[06/02/2019 19:50:26] [Error - LuaScriptInterface::loadFile] data/creaturescripts/scripts/login.lua:275: unexpected symbol near 'ï'
[06/02/2019 19:50:26] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/login.lua)
[06/02/2019 19:50:26] data/creaturescripts/scripts/login.lua:275: unexpected symbol near 'ï'

se puder me ajudar, agradeço mt

 

Edited by boxxer321
Link to comment
Share on other sites

17 horas atrás, boxxer321 disse:

a minha nurse joy não tem esses extended opcode, e ocorreu esse erro na parte do login...

 

heal.lua (nurse joy)

 

https://hastebin.com/aketokiqen.rb

 

login.lua

 

https://hastebin.com/iwuwepanaq.php

 

erro que deu no console:


[06/02/2019 19:50:26] [Error - LuaScriptInterface::loadFile] data/creaturescripts/scripts/login.lua:275: unexpected symbol near 'ï'
[06/02/2019 19:50:26] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/login.lua)
[06/02/2019 19:50:26] data/creaturescripts/scripts/login.lua:275: unexpected symbol near 'ï'

se puder me ajudar, agradeço mt

 

1º Seu otserv precisa ter opcodes.

2º Antes de sair copiando e colando, favor confira se não vem caracteres especiais, pois quando você copia algo daqui do forum e cola num editor de texto, eles vem com alguns caracteres indevido, é o que da para perceber no seu código.

 

Caso não seja isso, a 1ª opção que falei é valida. 

Link to comment
Share on other sites

2 horas atrás, Gengo disse:

1º Seu otserv precisa ter opcodes.

2º Antes de sair copiando e colando, favor confira se não vem caracteres especiais, pois quando você copia algo daqui do forum e cola num editor de texto, eles vem com alguns caracteres indevido, é o que da para perceber no seu código.

 

Caso não seja isso, a 1ª opção que falei é valida. 

Não é nenhuma das duas, meu server possui opcodes e o código foi copiado devidamente...

Tem ideia do qye pode ser?

 

@Gengo por eu dizer que a minha nurse joy não tem essa parte de opcodes, quis dizer na parte do tutorial de substituir... por que o servidor possui o opcodes, porém, a NPC Nurse Joy, não usa

Edited by boxxer321
Link to comment
Share on other sites

Mano no onLogin pelo que erro que você printou do console, me parece que é um carácter especial disso está explicito no erro;

No npc da Nurse Joy basta colocar a função doSendPlayerExtendedOpcode, veja de exemplo como o meu está.

Spoiler

local posis = {   --[storage da city] = {pos da nurse na city},
[897530] = {x = 1054, y = 1050, z = 7},   --saffron                   --alterado v1.9 \/
[897531] = {x = 1061, y = 900, z = 7},    --cerulean
[897532] = {x = 1203, y = 1040, z = 7},    --lavender
[897533] = {x = 1213, y = 1321, z = 7},    --fuchsia
[897534] = {x = 860, y = 1094, z = 6},    --celadon
[897535] = {x = 706, y = 1083, z = 7},    --viridian
[897536] = {x = 1073, y = 1233, z = 7},    --vermilion
[897537] = {x = 723, y = 844, z = 7},    --pewter
[897538] = {x = 848, y = 1394, z = 7},    --cinnabar
[897539] = {x = 1429, y = 1597, z = 6},    --snow
[897540] = {x = 258, y = 429, z = 7},    --golden

[897541] = {x = 243, y = 1028, z = 7}, -- Hammlin
[897542] = {x = 268, y = 1163, z = 7}, -- Shamouti
[897543] = {x = 252, y = 1260, z = 6}, -- Ascordbia
[897544] = {x = 2612, y = 985, z = 7}, -- Vip 1
[897545] = {x = 2680, y = 675, z = 7}, -- Vip 2
[897546] = {x = 2559, y = 444, z = 5}, -- Vip 3

[897546] = {x = 2559, y = 444, z = 5}, -- Pallet
[897546] = {x = 652, y = 1171, z = 7}, -- Coliseum

[897546] = {x = 1163, y = 1450, z = 13}, -- Outland north
[897546] = {x = 1509, y = 1290, z = 13}, -- outland west
[897546] = {x = 1152, y = 1068, z = 13}, -- outland sul
}

function onThingMove(creature, thing, oldpos, oldstackpos)
end

function onCreatureAppear(creature)
end

function onCreatureDisappear(cid, pos)
if focus == cid then
selfSay('Good bye sir!')
focus = 0
talk_start = 0
end
end

function onCreatureTurn(creature)
end

function msgcontains(txt, str)
return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end

function onCreatureSay(cid, type, msg)
local msg = string.lower(msg)
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

for a, b in pairs(gobackmsgs) do
	local gm = string.gsub(b.go, "doka!", "")
	local bm = string.gsub(b.back, "doka!", "")
if string.find(string.lower(msg), string.lower(gm)) or string.find(string.lower(msg), string.lower(bm)) then
return true
end
end

if((msgcontains(msg, 'hi') or msgcontains(msg, 'heal') or msgcontains(msg, 'oi')) and (getDistanceToCreature(cid) <= 3)) then

 	if exhaustion.get(cid, 9211) then
	selfSay('Por Favor espere um momento para eu por curar novamente seus Pokemons!')
	return true
   	end

	if not getTileInfo(getThingPos(cid)).protection and nurseHealsOnlyInPZ then
		selfSay("Por Favor, entre no Centro Pokemon para eu poder curar seus Pokemons!")
	return true
	end
	
	if isInDuel(cid) then
	   selfSay("Não possu curar seus Pokemons enquanto você está em Duel!")   --alterado v1.6.1
    return true 
    end
    

	exhaustion.set(cid, 9211, 1)

	doCreatureAddHealth(cid, getCreatureMaxHealth(cid)-getCreatureHealth(cid))
	doCureStatus(cid, "all", true)
	doSendMagicEffect(getThingPos(cid), 103)

	local mypb = getPlayerSlotItem(cid, 8)
	doSetItemAttribute(mypb.uid, "hpToDraw", 0)
	
	 if isRiderOrFlyOrSurf(cid) then 
	    demountPokemon(cid, true)
		doRemoveCondition(cid, CONDITION_OUTFIT)
		doRegainSpeed(cid)
	 end
	local s = getCreatureSummons(cid)
	local healthMax = 0
	if #s >= 1 then
		healthMax = getCreatureMaxHealth(s[1])
		doReturnPokemon(cid, s[1], mypb, pokeballs[getPokeballType(mypb.itemid)].effect)
		doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, healthMax.."|"..healthMax.."|"..getItemAttribute(mypb.uid, "identificador"))
	end
	
		if mypb.itemid ~= 0 and isPokeball(mypb.itemid) then  --alterado v1.3
			doSetItemAttribute(mypb.uid, "hpToDraw", 0)
			doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallMaxHealth(cid, mypb).."|"..getBallMaxHealth(cid, mypb).."|"..getItemAttribute(mypb.uid, "identificador"))

			for c = 1, 15 do
				local str = "move"..c
				setCD(mypb.uid, str, 0)
			end
			if getItemAttribute(mypb.uid, "happy") and getItemAttribute(mypb.uid, "happy") < baseNurseryHappiness then
				doItemSetAttribute(mypb.uid, "happy", baseNurseryHappiness)
			end
			if getPlayerStorageValue(cid, 17000) <= 0 and getPlayerStorageValue(cid, 17001) <= 0 and getPlayerStorageValue(cid, 63215) <= 0 then
				for a, b in pairs (pokeballs) do
					if isInArray(b.all, mypb.itemid) then
					   doTransformItem(mypb.uid, b.on)
					end
				end
			end
		end
	

	local bp = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK)

    local balls = getPokeballsInContainer(bp.uid)
    if #balls >= 1 then
       for _, uid in ipairs(balls) do
           doItemSetAttribute(uid, "hp", 1)
		   doSetItemAttribute(uid, "hpToDraw", 0)
           for c = 1, 15 do
               local str = "move"..c
               setCD(uid, str, 0)   
           end
           if getItemAttribute(uid, "hunger") and getItemAttribute(uid, "hunger") > baseNurseryHunger then
              doItemSetAttribute(uid, "hunger", baseNurseryHunger)
           end
           if getItemAttribute(uid, "happy") and getItemAttribute(uid, "happy") < baseNurseryHappiness then
              doItemSetAttribute(uid, "happy", baseNurseryHappiness)
           end
           local this = getThing(uid)
           for a, b in pairs (pokeballs) do
		       if isInArray(b.all, this.itemid) then
	              doTransformItem(uid, b.on)
               end
           end
		
        end
    end
	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
    sendDialogNpc(cid, getNpcCid(),'Todos os seus Pokemons foram curados, boa Sorte em sua jornada!')
	doCreatureSetSkullType(cid, 0)
end
end

 

Obs: Seu link não estão mostrando mais nada.

Link to comment
Share on other sites

8 horas atrás, Gengo disse:

Mano no onLogin pelo que erro que você printou do console, me parece que é um carácter especial disso está explicito no erro;

No npc da Nurse Joy basta colocar a função doSendPlayerExtendedOpcode, veja de exemplo como o meu está.

  Mostrar conteúdo oculto


local posis = {   --[storage da city] = {pos da nurse na city},
[897530] = {x = 1054, y = 1050, z = 7},   --saffron                   --alterado v1.9 \/
[897531] = {x = 1061, y = 900, z = 7},    --cerulean
[897532] = {x = 1203, y = 1040, z = 7},    --lavender
[897533] = {x = 1213, y = 1321, z = 7},    --fuchsia
[897534] = {x = 860, y = 1094, z = 6},    --celadon
[897535] = {x = 706, y = 1083, z = 7},    --viridian
[897536] = {x = 1073, y = 1233, z = 7},    --vermilion
[897537] = {x = 723, y = 844, z = 7},    --pewter
[897538] = {x = 848, y = 1394, z = 7},    --cinnabar
[897539] = {x = 1429, y = 1597, z = 6},    --snow
[897540] = {x = 258, y = 429, z = 7},    --golden

[897541] = {x = 243, y = 1028, z = 7}, -- Hammlin
[897542] = {x = 268, y = 1163, z = 7}, -- Shamouti
[897543] = {x = 252, y = 1260, z = 6}, -- Ascordbia
[897544] = {x = 2612, y = 985, z = 7}, -- Vip 1
[897545] = {x = 2680, y = 675, z = 7}, -- Vip 2
[897546] = {x = 2559, y = 444, z = 5}, -- Vip 3

[897546] = {x = 2559, y = 444, z = 5}, -- Pallet
[897546] = {x = 652, y = 1171, z = 7}, -- Coliseum

[897546] = {x = 1163, y = 1450, z = 13}, -- Outland north
[897546] = {x = 1509, y = 1290, z = 13}, -- outland west
[897546] = {x = 1152, y = 1068, z = 13}, -- outland sul
}

function onThingMove(creature, thing, oldpos, oldstackpos)
end

function onCreatureAppear(creature)
end

function onCreatureDisappear(cid, pos)
if focus == cid then
selfSay('Good bye sir!')
focus = 0
talk_start = 0
end
end

function onCreatureTurn(creature)
end

function msgcontains(txt, str)
return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end

function onCreatureSay(cid, type, msg)
local msg = string.lower(msg)
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

for a, b in pairs(gobackmsgs) do
	local gm = string.gsub(b.go, "doka!", "")
	local bm = string.gsub(b.back, "doka!", "")
if string.find(string.lower(msg), string.lower(gm)) or string.find(string.lower(msg), string.lower(bm)) then
return true
end
end

if((msgcontains(msg, 'hi') or msgcontains(msg, 'heal') or msgcontains(msg, 'oi')) and (getDistanceToCreature(cid) <= 3)) then

 	if exhaustion.get(cid, 9211) then
	selfSay('Por Favor espere um momento para eu por curar novamente seus Pokemons!')
	return true
   	end

	if not getTileInfo(getThingPos(cid)).protection and nurseHealsOnlyInPZ then
		selfSay("Por Favor, entre no Centro Pokemon para eu poder curar seus Pokemons!")
	return true
	end
	
	if isInDuel(cid) then
	   selfSay("Não possu curar seus Pokemons enquanto você está em Duel!")   --alterado v1.6.1
    return true 
    end
    

	exhaustion.set(cid, 9211, 1)

	doCreatureAddHealth(cid, getCreatureMaxHealth(cid)-getCreatureHealth(cid))
	doCureStatus(cid, "all", true)
	doSendMagicEffect(getThingPos(cid), 103)

	local mypb = getPlayerSlotItem(cid, 8)
	doSetItemAttribute(mypb.uid, "hpToDraw", 0)
	
	 if isRiderOrFlyOrSurf(cid) then 
	    demountPokemon(cid, true)
		doRemoveCondition(cid, CONDITION_OUTFIT)
		doRegainSpeed(cid)
	 end
	local s = getCreatureSummons(cid)
	local healthMax = 0
	if #s >= 1 then
		healthMax = getCreatureMaxHealth(s[1])
		doReturnPokemon(cid, s[1], mypb, pokeballs[getPokeballType(mypb.itemid)].effect)
		doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, healthMax.."|"..healthMax.."|"..getItemAttribute(mypb.uid, "identificador"))
	end
	
		if mypb.itemid ~= 0 and isPokeball(mypb.itemid) then  --alterado v1.3
			doSetItemAttribute(mypb.uid, "hpToDraw", 0)
			doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_POKEMON_HEALTH, getBallMaxHealth(cid, mypb).."|"..getBallMaxHealth(cid, mypb).."|"..getItemAttribute(mypb.uid, "identificador"))

			for c = 1, 15 do
				local str = "move"..c
				setCD(mypb.uid, str, 0)
			end
			if getItemAttribute(mypb.uid, "happy") and getItemAttribute(mypb.uid, "happy") < baseNurseryHappiness then
				doItemSetAttribute(mypb.uid, "happy", baseNurseryHappiness)
			end
			if getPlayerStorageValue(cid, 17000) <= 0 and getPlayerStorageValue(cid, 17001) <= 0 and getPlayerStorageValue(cid, 63215) <= 0 then
				for a, b in pairs (pokeballs) do
					if isInArray(b.all, mypb.itemid) then
					   doTransformItem(mypb.uid, b.on)
					end
				end
			end
		end
	

	local bp = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK)

    local balls = getPokeballsInContainer(bp.uid)
    if #balls >= 1 then
       for _, uid in ipairs(balls) do
           doItemSetAttribute(uid, "hp", 1)
		   doSetItemAttribute(uid, "hpToDraw", 0)
           for c = 1, 15 do
               local str = "move"..c
               setCD(uid, str, 0)   
           end
           if getItemAttribute(uid, "hunger") and getItemAttribute(uid, "hunger") > baseNurseryHunger then
              doItemSetAttribute(uid, "hunger", baseNurseryHunger)
           end
           if getItemAttribute(uid, "happy") and getItemAttribute(uid, "happy") < baseNurseryHappiness then
              doItemSetAttribute(uid, "happy", baseNurseryHappiness)
           end
           local this = getThing(uid)
           for a, b in pairs (pokeballs) do
		       if isInArray(b.all, this.itemid) then
	              doTransformItem(uid, b.on)
               end
           end
		
        end
    end
	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
    sendDialogNpc(cid, getNpcCid(),'Todos os seus Pokemons foram curados, boa Sorte em sua jornada!')
	doCreatureSetSkullType(cid, 0)
end
end

 

Obs: Seu link não estão mostrando mais nada.

fiz umas mudanças aqui, e não botei a nurse por enquanto...

mas apareceu esses erros ao tentar logar com o personagem:

 

[08/02/2019 04:54:27] [Error - CreatureScript Interface] 
[08/02/2019 04:54:27] data/creaturescripts/scripts/login.lua:onLogin
[08/02/2019 04:54:27] Description: 
[08/02/2019 04:54:27] data/lib/some functions.lua:84: attempt to perform arithmetic on local 'pokeLifeMax' (a nil value)
[08/02/2019 04:54:27] stack traceback:
[08/02/2019 04:54:27]     data/lib/some functions.lua:84: in function 'doSetAttributesBallsByPokeName'
[08/02/2019 04:54:27]     data/lib/some functions.lua:95: in function 'getBallHealth'
[08/02/2019 04:54:27]     data/lib/some functions.lua:43: in function 'sendPokeOTC'
[08/02/2019 04:54:27]     data/creaturescripts/scripts/login.lua:280: in function <data/creaturescripts/scripts/login.lua:6>

 

eu venho tentando pegar as functions do dxp, por exemplo: 'doSetAttributesBallsByPokeName', 'getBallHealth'

mas esse 'pokeLifeMax', eu não consegui achar e fica esse erro

 

Se puder ajudar, ficarei grato

Link to comment
Share on other sites

Mano tem que seguir o tutorial com atenção, em nenhum momento uso essa variavel pokeLifeMax e doSetAttributesBallsByPokeName, se vc está com problemas nessa variável e na função, isso não tem nada haver com o modulo de estar dando erros, veja a estrutura de como eu envio o nome, portrait, health e veja quais funções no seu servidor faz para pegar essas informações e por fim substitua para adaptar.

 

O que não faz sentido é lotar o tópico com bugs do servidor que não tem muito haver com o modulo.

 

Para não deixar vc na mão vou mostrar minhas function que pega o health e o nome do pokemon.

Spoiler

function getPokeballName(ball)
      return getItemAttribute(ball.uid, "poke")
end  

function getBallHealth(cid, ball)
	for a, b in pairs (pokeballs) do
		if ball.itemid == b.off then
			return 0
		end
	end
	if not getItemAttribute(ball.uid, "hpNow") then
		doSetAttributesBallsByPokeName(cid, ball.uid, getItemAttribute(ball.uid, "poke"))
	end
	local healthNow = getItemAttribute(ball.uid, "hpNow")
	return math.floor(healthNow)
end

function getBallMaxHealth(cid, ball)
	if not getItemAttribute(ball.uid, "hpMax") then
		doSetAttributesBallsByPokeName(cid, ball.uid, getItemAttribute(ball.uid, "poke"))
	end
	local healthNow = getItemAttribute(ball.uid, "hpMax")
	return math.floor(healthNow)
end

 

 

Link to comment
Share on other sites

  • 1 month later...
Em 27/10/2018 em 21:07, Gengo disse:

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:

  Mostrar conteúdo oculto


function sendPokeOTC(cid)

	local pokemon = {}
	
	for indice, value in pairs(getPlayerPokeballs(cid)) do
		local Name = getPokeballName(value.uid)
		doItemSetAttribute(value.uid, "identificador", value.uid)
		pokemon[indice] = {
			ball = value.uid,
			portrait  = getPortraitClientID(Name),			
			name 	  = Name,
			health    = getBallHealth(cid, value),
			maxHealth = getBallMaxHealth(cid,value)
		}				
	end
	
	return doSendPlayerExtendedOpcode(cid, 122, table.serialize(pokemon))
end

 

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

  Mostrar conteúdo oculto


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:

  Mostrar conteúdo oculto


table.serialize = function(x, recur)
	local t = type(x)
	recur = recur or {}

	if(t == nil) then
		return "nil"
	elseif(t == "string") then
		return string.format("%q", x)
	elseif(t == "number") then
		return tostring(x)
	elseif(t == "boolean") then
		return t and "true" or "false"
	elseif(getmetatable(x)) then
		error("Can not serialize a table that has a metatable associated with it.")
	elseif(t == "table") then
		if(table.find(recur, x)) then
			error("Can not serialize recursive tables.")
		end
		table.insert(recur, x)

		local s = "{"
		for k, v in pairs(x) do
			s = s .. "[" .. table.serialize(k, recur) .. "]"
			s = s .. " = " .. table.serialize(v, recur) .. ","
		end
		s = s .. "}"
		return s
	else
		error("Can not serialize value of type '" .. t .. "'.")
	end
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:

 

Hidden Content

  • Reply to this topic to see the hidden content.

 

Scan do arquivo:

 

Hidden Content

  • Reply to this topic to see the hidden content.

 

 

bom

Link to comment
Share on other sites

Em 27/10/2018 em 21:07, Gengo disse:

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:

  Mostrar conteúdo oculto


function sendPokeOTC(cid)

	local pokemon = {}
	
	for indice, value in pairs(getPlayerPokeballs(cid)) do
		local Name = getPokeballName(value.uid)
		doItemSetAttribute(value.uid, "identificador", value.uid)
		pokemon[indice] = {
			ball = value.uid,
			portrait  = getPortraitClientID(Name),			
			name 	  = Name,
			health    = getBallHealth(cid, value),
			maxHealth = getBallMaxHealth(cid,value)
		}				
	end
	
	return doSendPlayerExtendedOpcode(cid, 122, table.serialize(pokemon))
end

 

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

  Mostrar conteúdo oculto


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:

  Mostrar conteúdo oculto


table.serialize = function(x, recur)
	local t = type(x)
	recur = recur or {}

	if(t == nil) then
		return "nil"
	elseif(t == "string") then
		return string.format("%q", x)
	elseif(t == "number") then
		return tostring(x)
	elseif(t == "boolean") then
		return t and "true" or "false"
	elseif(getmetatable(x)) then
		error("Can not serialize a table that has a metatable associated with it.")
	elseif(t == "table") then
		if(table.find(recur, x)) then
			error("Can not serialize recursive tables.")
		end
		table.insert(recur, x)

		local s = "{"
		for k, v in pairs(x) do
			s = s .. "[" .. table.serialize(k, recur) .. "]"
			s = s .. " = " .. table.serialize(v, recur) .. ","
		end
		s = s .. "}"
		return s
	else
		error("Can not serialize value of type '" .. t .. "'.")
	end
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:

 

Hidden Content

  • Reply to this topic to see the hidden content.

 

Scan do arquivo:

 

Hidden Content

  • Reply to this topic to see the hidden content.

 

 

bom

Link to comment
Share on other sites

  • 2 weeks later...

Consegui adicionar no servidor que estou mechendo, porem clico na pokebar e nao acontece nada. Nao sei se é normal cada poke na pokebar da para arrastar para algum lugar da tela individualmente, nao fica em uma unica barra colados.

Link to comment
Share on other sites

40 minutos atrás, Taiger disse:

Consegui adicionar no servidor que estou mechendo, porem clico na pokebar e nao acontece nada. Nao sei se é normal cada poke na pokebar da para arrastar para algum lugar da tela individualmente, nao fica em uma unica barra colados.

Se vc clicar na pokebar, não é pra acontecer nada mesmo, não fiz ela pra ser clicado e chamar o pokemon. Fiz para poder arrastar individualmente sim.
Na verdade isso é só um módulo para outros poderem ter uma noção de como fazer uma pokebar para seus pokemons.

Link to comment
Share on other sites

3 horas atrás, Gengo disse:

Se vc clicar na pokebar, não é pra acontecer nada mesmo, não fiz ela pra ser clicado e chamar o pokemon. Fiz para poder arrastar individualmente sim.
Na verdade isso é só um módulo para outros poderem ter uma noção de como fazer uma pokebar para seus pokemons.

Ah entendi, obrigado.

Link to comment
Share on other sites

Em 06/02/2019 em 18:57, boxxer321 disse:

a minha nurse joy não tem esses extended opcode, e ocorreu esse erro na parte do login...

 

heal.lua (nurse joy)

 

https://hastebin.com/aketokiqen.rb

 

login.lua

 

https://hastebin.com/iwuwepanaq.php

 

erro que deu no console:


[06/02/2019 19:50:26] [Error - LuaScriptInterface::loadFile] data/creaturescripts/scripts/login.lua:275: unexpected symbol near 'ï'
[06/02/2019 19:50:26] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/login.lua)
[06/02/2019 19:50:26] data/creaturescripts/scripts/login.lua:275: unexpected symbol near 'ï'

se puder me ajudar, agradeço mt

 

Abre no notepad e vai em formatar converter para ANSI, dai os carater vao aparecer em forma de "???" so remover

Link to comment
Share on other sites

  • 3 weeks later...

Opa desculpe reviver o topico =/
estou com um problema, fui tentar add no server que estou utilizado e me retornou o seguinte erro no console :
 

Spoiler

image.thumb.png.59a78a67341b7a9a21227ab277e690dc.png

 

Link to comment
Share on other sites

  • 1 month later...
Em 27/10/2018 em 21:07, Gengo disse:

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:

  Ocultar conteúdo


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:

  Ocultar conteúdo


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:

  Ocultar conteúdo


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

 

Tive esse erro no terminal OTC.

Spoiler


ERROR: protected lua call failed: LUA ERROR:
/game_poke/poke.lua:50: attempt to call a nil value
stack traceback:
    [C]: ?
    /game_poke/poke.lua:50: in function 'createPokeWidget'
    /game_poke/poke.lua:7: in function 'callback'
    /gamelib/protocolgame.lua:17: in function </gamelib/protocolgame.lua:14>
ERROR: protected lua call failed: LUA ERROR:
/game_poke/poke.lua:50: attempt to call a nil value
stack traceback:
    [C]: ?
    /game_poke/poke.lua:50: in function 'createPokeWidget'
    /game_poke/poke.lua:7: in function 'callback'
    /gamelib/protocolgame.lua:17: in function </gamelib/protocolgame.lua:14>

 

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...