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:
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:
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:
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:
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: