Ir para conteúdo

[OTC] Trainer Card


BlazerX

Posts Recomendados

Trainer Card

Fala galera do Xtibia, vim trazer mais uma contribuição para a comunidade, é um módulo para otclient básico porém legal.

 

TwyIHBJ.png

 

Como funciona?

O Trainer Card vai mostrar digamos algumas informações do seu personagem, 
você pode adicionar mais informações a esse card, vai da criatividade de cada um deixar bem funcional.

 

TwyIHBJ.png

 

Script do servidor:
Crique um arquivo na pasta do seu servidor em data/creaturescript/ e coloque o nome de trainercard.lua

Spoiler

local opcodeCard = 71

function onExtendedOpcode(cid, opcode, buffer)
	if opcode == opcodeCard then
		local value = ''
		if ( buffer == 'poke' ) then
			for indice, ball in pairs(getPlayerPokeballs(cid)) do
				value = getItemAttribute(ball.uid, "poke")..','..value
			end
		elseif ( buffer == 'badges' ) then
			local leaderGym = {"Brock", "Misty", "Surge", "Erika", "Sabrina", "Koga", "Blaine", "Giovanni"}
			for i = 1, #leaderGym do
				value = getPlayerBadgeOfLeader(cid, leaderGym[i])..','..value
			end
		end
		doSendPlayerExtendedOpcode(cid, 71, buffer..'-'..value)
	end
end

 

 

Coloque a seguinte tag no arquivo do creaturescripts.xml:

<event type="extendedopcode" name="TrainerCard" event="script" value="trainercard.lua"/>

Registre o evento no arquivo onLogin.lua onde se encontra na mesma pasta:

registerCreatureEvent(cid, "TrainerCard")

TwyIHBJ.png

 

Módulo otClient:
Coloque o módulo na pasta do seu otClient em modules/ 
Para abrir o módulo pressione a tecla Ctrl+Shift+Q

 

TwyIHBJ.png

 

Imagem do módulo:
PXG6v9p.png

 

TwyIHBJ.png

 

A base que foi utilizada do servidor foi a DarkXPoke.
O meu módulo tem mais informações do que o da imagem, porém eu dei uma mexida,

o módulo que o Gengo me passou do Trainer Card que eu utilizo está em um nivel totalmente

diferente do apresentado nesse tutorial, eu só modifiquei para compartilhar com a galera.

Espero que tenham gostado e faça um bom proveito do módulo, use sua criatividade para fazer de um belo sistema funcional.

 

TwyIHBJ.png

 

Créditos:

Spoiler

Créditos vai ao Gengo que fez a um tempo atras para mim e com a permissão dele estou postando.

 

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

14 minutos atrás, Poke X Ice disse:

Ótimo conteúdo, Rep ++.

 

não teria como fazer ele enviar portrait do pokémon ? 

Tem como fazer sim, você poderia me dizer como pega a portrait do seu servidor?
No servidor do DarkXPoke eu sei que é getPortraitClientID, porem eu não sei como é no seu.

Link para o comentário
Compartilhar em outros sites

só encontrei isso aqui sobre a portrait

 

servidor/data/movements/script/portrait.lua

Spoiler

function onEquip (cid, item, slot)

    if not cid then return true end
    if item.uid <= 0 then return true end

    if not getItemAttribute(item.uid, "poke") then
    return true
    end
        onPokeHealthChange(cid)
    for i, x in pairs(fotos) do
        if string.lower(getItemAttribute(item.uid, "poke")) == string.lower(i) then
            doTransformItem(getPlayerSlotItem(cid, 7).uid, fotos)
                           
        return true
        end
    end
end

function onDeEquip(cid, item, slot)

    if not cid then return true end
    if item.uid <= 0 then return true end
        onPokeHealthChange(cid)
    if not getItemAttribute(item.uid, "poke") then
    return true
    end
        onPokeHealthChange(cid)
    doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, 2395)
end

 

Link para o comentário
Compartilhar em outros sites

Vamos lá então!

No arquivo trainercard.lua mude a estrutura que envia o nome do pokemon por esse trecho de código:

for indice, ball in pairs(getPlayerPokeballs(cid)) do
	value = getItemInfo(fotos[getItemAttribute(ball.uid, "poke")]).clientId..','..value
end

No módulo game_card abra o arquivo card.otui e procure por BoxPokemon e substitua o trecho por esse:

BoxPokemon < UIItem
  image-source: ui/box
  image-offset: -4 0
  icon-size: 46 46
  icon-offset: 0 2

No mesmo módulo abra o arquivo card.lua e procure por box:setIcon e substitua o trecho por esse:

box:setItemId(tonumber(pokemon[i]))

Só isso mesmo, espero que entenda.

 

Link para o comentário
Compartilhar em outros sites

45 minutos atrás, Poke X Ice disse:

Estou com um simples, não está aparecendo o icone.

 

 

para abrir esse cardimage.thumb.png.32d722772aa09933f3df525520b5a117.png

TwyIHBJ.png


Eu ainda deixei um comentário: 

Para abrir o módulo pressione a tecla Ctrl+Shift+Q

Mas vou quebrar o seu galho kkk

Spoiler

-- Coloque dentro da função init
modules.client_topmenu.addRightGameToggleButton('cardButton', tr('Trainer Card'), 'nome_da_imagem_do_icone', toggle)
-- Coloque o nome da imagem do icone antes do toggle

 

 

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

desculpa acabei nem lendo tudo , estou muito estressado com problemas pessoais acabei nem percebendo.

 

acabou de da um erro

Spoiler


WARNING: attempt to add a null child into a UIWidget
stack traceback:
    [C]: in function 'createWidget'
    /game_card/card.lua:67: in function 'refreshPokeAndInsignias'
    /game_card/card.lua:16: in function 'callback'
    /gamelib/protocolgame.lua:17: in function </gamelib/protocolgame.lua:14>
at:
    [C++]: UIWidget::addChild
ERROR: failed to create widget from style 'BoxPokemon': unable to create widget of type 'UIItem'
ERROR: protected lua call failed: LUA ERROR:
/game_card/card.lua:69: attempt to index local 'box' (a nil value)
stack traceback:
    [C]: ?
    /game_card/card.lua:69: in function 'refreshPokeAndInsignias'
    /game_card/card.lua:16: in function 'callback'
    /gamelib/protocolgame.lua:17: in function </gamelib/protocolgame.lua:14>

card.lua

Spoiler

local opcodeCard = 71
local insignias  = { 'Boulder Badge', 'Cascade Badge', 'Thunder Badge', 'Rainbow Badge', 'Marsh Badge', 'Soul Badge', 'Volcano Badge', 'Earth Badge' }


local winCard
local lblTreinador
local lblLevel
local outfit
local boxPokemons
local boxInsignias 

function init()    
    connect(g_game, { onGameEnd = onGameEnd })
    
    ProtocolGame.registerExtendedOpcode(opcodeCard, function(protocol, opcode, buffer) 
        refreshPokeAndInsignias(buffer)
    end)
    
    winCard = g_ui.displayUI('card')
    winCard:move(70, 80)
    winCard:hide()
    
    g_keyboard.bindKeyPress('Ctrl+Shift+Q', toggle)
    
    lblTreinador = winCard:getChildById('lblTreinador')
    lblLevel     = winCard:getChildById('lblLevel')
    outfit       = winCard:getChildById('outfit')
    boxPokemons  = winCard:getChildById('boxPokemons')
    boxInsignias = winCard:getChildById('boxInsignias')
end

function terminate()
    disconnect(g_game, { onGameEnd = onGameEnd })
    ProtocolGame.unregisterExtendedOpcode(opcodeCard)
    winCard:destroy()
    g_keyboard.unbindKeyPress('Ctrl+Shift+Q')
end

function refresh()
    local player = g_game.getLocalPlayer()
    lblTreinador:setText(player:getName())
    outfit:setOutfit(player:getOutfit())
end

function onGameEnd()
    winCard:hide()
end

function toggle()
    if ( winCard:isVisible() ) then
      addEvent(function() g_effects.fadeOut(winCard, 200) end)
      scheduleEvent(function() winCard:hide() end, 220)
    else
      refresh()
      addEvent(function() winCard:show() g_effects.fadeIn(winCard, 200) end)
      g_game.getProtocolGame():sendExtendedOpcode(opcodeCard, "poke")
      g_game.getProtocolGame():sendExtendedOpcode(opcodeCard, "badges")
    end
end

function refreshPokeAndInsignias(value)
    local action = value:explode('-')
    if ( action[1] == 'poke' ) then
        local pokemon = action[2]:explode(',')
        boxPokemons:destroyChildren()
        for i = 1, 6 do
           local box = g_ui.createWidget('BoxPokemon', boxPokemons)
           if ( i <= #pokemon ) then
             box:setItemId(tonumber(pokemon))
             box:setTooltip(pokemon)
           end
        end
    elseif ( action[1] == 'badges' ) then
        local badges = action[2]:explode(',')
        boxInsignias:destroyChildren()
        for i = 1, #insignias do
          local uiInsignias = g_ui.createWidget('Insignias', boxInsignias)
          if ( tonumber(badges) == 1 ) then
            uiInsignias:setImageSource('insignias/'..insignias..'_on')    
          else
            uiInsignias:setImageSource('insignias/'..insignias..'_off')
          end
          uiInsignias:setTooltip(insignias)
        end
    end
end

 

 

Editado por Poke X Ice
Link para o comentário
Compartilhar em outros sites

30 minutos atrás, Poke X Ice disse:

desculpa acabei nem lendo tudo , estou muito estressado com problemas pessoais acabei nem percebendo.

 

acabou de da um erro

  Ocultar conteúdo


WARNING: attempt to add a null child into a UIWidget
stack traceback:
    [C]: in function 'createWidget'
    /game_card/card.lua:67: in function 'refreshPokeAndInsignias'
    /game_card/card.lua:16: in function 'callback'
    /gamelib/protocolgame.lua:17: in function </gamelib/protocolgame.lua:14>
at:
    [C++]: UIWidget::addChild
ERROR: failed to create widget from style 'BoxPokemon': unable to create widget of type 'UIItem'
ERROR: protected lua call failed: LUA ERROR:
/game_card/card.lua:69: attempt to index local 'box' (a nil value)
stack traceback:
    [C]: ?
    /game_card/card.lua:69: in function 'refreshPokeAndInsignias'
    /game_card/card.lua:16: in function 'callback'
    /gamelib/protocolgame.lua:17: in function </gamelib/protocolgame.lua:14>

card.lua

  Ocultar conteúdo

local opcodeCard = 71
local insignias  = { 'Boulder Badge', 'Cascade Badge', 'Thunder Badge', 'Rainbow Badge', 'Marsh Badge', 'Soul Badge', 'Volcano Badge', 'Earth Badge' }


local winCard
local lblTreinador
local lblLevel
local outfit
local boxPokemons
local boxInsignias 

function init()    
    connect(g_game, { onGameEnd = onGameEnd })
    
    ProtocolGame.registerExtendedOpcode(opcodeCard, function(protocol, opcode, buffer) 
        refreshPokeAndInsignias(buffer)
    end)
    
    winCard = g_ui.displayUI('card')
    winCard:move(70, 80)
    winCard:hide()
    
    g_keyboard.bindKeyPress('Ctrl+Shift+Q', toggle)
    
    lblTreinador = winCard:getChildById('lblTreinador')
    lblLevel     = winCard:getChildById('lblLevel')
    outfit       = winCard:getChildById('outfit')
    boxPokemons  = winCard:getChildById('boxPokemons')
    boxInsignias = winCard:getChildById('boxInsignias')
end

function terminate()
    disconnect(g_game, { onGameEnd = onGameEnd })
    ProtocolGame.unregisterExtendedOpcode(opcodeCard)
    winCard:destroy()
    g_keyboard.unbindKeyPress('Ctrl+Shift+Q')
end

function refresh()
    local player = g_game.getLocalPlayer()
    lblTreinador:setText(player:getName())
    outfit:setOutfit(player:getOutfit())
end

function onGameEnd()
    winCard:hide()
end

function toggle()
    if ( winCard:isVisible() ) then
      addEvent(function() g_effects.fadeOut(winCard, 200) end)
      scheduleEvent(function() winCard:hide() end, 220)
    else
      refresh()
      addEvent(function() winCard:show() g_effects.fadeIn(winCard, 200) end)
      g_game.getProtocolGame():sendExtendedOpcode(opcodeCard, "poke")
      g_game.getProtocolGame():sendExtendedOpcode(opcodeCard, "badges")
    end
end

function refreshPokeAndInsignias(value)
    local action = value:explode('-')
    if ( action[1] == 'poke' ) then
        local pokemon = action[2]:explode(',')
        boxPokemons:destroyChildren()
        for i = 1, 6 do
           local box = g_ui.createWidget('BoxPokemon', boxPokemons)
           if ( i <= #pokemon ) then
             box:setItemId(tonumber(pokemon))
             box:setTooltip(pokemon)
           end
        end
    elseif ( action[1] == 'badges' ) then
        local badges = action[2]:explode(',')
        boxInsignias:destroyChildren()
        for i = 1, #insignias do
          local uiInsignias = g_ui.createWidget('Insignias', boxInsignias)
          if ( tonumber(badges) == 1 ) then
            uiInsignias:setImageSource('insignias/'..insignias..'_on')    
          else
            uiInsignias:setImageSource('insignias/'..insignias..'_off')
          end
          uiInsignias:setTooltip(insignias)
        end
    end
end

 

 

TwyIHBJ.png


Por favor leia atentamente o que eu escrevi e quando for cópiar codigo daqui do fórum atente-se para os caracteres especiai,

eu percebi o erro que você teve, porem como você está estressado não atentou-se oq eu expliquei, refaça novamente.

 

Link para o comentário
Compartilhar em outros sites

  • 2 months later...
  • 3 months later...
Em 23/07/2019 em 10:40, BlazerX disse:

Trainer Card

Fala galera do Xtibia, vim trazer mais uma contribuição para a comunidade, é um módulo para otclient básico porém legal.

 

TwyIHBJ.png

 

Como funciona?

O Trainer Card vai mostrar digamos algumas informações do seu personagem, 
você pode adicionar mais informações a esse card, vai da criatividade de cada um deixar bem funcional.

 

TwyIHBJ.png

 

Script do servidor:
Crique um arquivo na pasta do seu servidor em data/creaturescript/ e coloque o nome de trainercard.lua

  Ocultar conteúdo


local opcodeCard = 71

function onExtendedOpcode(cid, opcode, buffer)
	if opcode == opcodeCard then
		local value = ''
		if ( buffer == 'poke' ) then
			for indice, ball in pairs(getPlayerPokeballs(cid)) do
				value = getItemAttribute(ball.uid, "poke")..','..value
			end
		elseif ( buffer == 'badges' ) then
			local leaderGym = {"Brock", "Misty", "Surge", "Erika", "Sabrina", "Koga", "Blaine", "Giovanni"}
			for i = 1, #leaderGym do
				value = getPlayerBadgeOfLeader(cid, leaderGym[i])..','..value
			end
		end
		doSendPlayerExtendedOpcode(cid, 71, buffer..'-'..value)
	end
end

 

 

Coloque a seguinte tag no arquivo do creaturescripts.xml:


<event type="extendedopcode" name="TrainerCard" event="script" value="trainercard.lua"/>

Registre o evento no arquivo onLogin.lua onde se encontra na mesma pasta:


registerCreatureEvent(cid, "TrainerCard")

TwyIHBJ.png

 

Módulo otClient:
Coloque o módulo na pasta do seu otClient em modules/ 
Para abrir o módulo pressione a tecla Ctrl+Shift+Q

 

TwyIHBJ.png

 

Imagem do módulo:
PXG6v9p.png

 

TwyIHBJ.png

 

A base que foi utilizada do servidor foi a DarkXPoke.
O meu módulo tem mais informações do que o da imagem, porém eu dei uma mexida,

o módulo que o Gengo me passou do Trainer Card que eu utilizo está em um nivel totalmente

diferente do apresentado nesse tutorial, eu só modifiquei para compartilhar com a galera.

Espero que tenham gostado e faça um bom proveito do módulo, use sua criatividade para fazer de um belo sistema funcional.

 

TwyIHBJ.png

 

Créditos:

  Mostrar conteúdo oculto

Créditos vai ao Gengo que fez a um tempo atras para mim e com a permissão dele estou postando.

 

tenhe como abrir o modulo sim  C.S. Q?

 

qe te n client ? n part d arriba

Link para o comentário
Compartilhar em outros sites

  • 4 weeks later...
×
×
  • Criar Novo...