Ir para conteúdo
  • Cadastre-se

Posts Recomendados

TFS 1.2 PokeDash By Pota

OTCv8


Hello, i have question.
I've added tooltip to my OTCv8 and i want to add Image for this ToolTip, but what i need to do?

https://imgur.com/LdNZWm3
I added Items.otb/xml to OTCv8 but friend told me to not to do this. 

So what i need to send Images from items.otb/xml (server) to my client? When i Hover on some item i want to display Image of this item.

 

Like in this: https://imgur.com/qPSo0dD
i have Moltres 200lvl, i want to display "helds" etc.
Is there any chance to receive it from .spr?

(OTCv8 - pokeinfo.lua) in this script i want to Test Image from items.otb/xml (This could be any item for test)

pokemonLookWindow = nil

function init()
  pokemonLookWindow = g_ui.displayUI('pokeinfo')
  if not pokemonLookWindow then
    print("Error: Failed to load pokeinfo.otui")
    return
  end

  print("pokeinfo.otui loaded successfully")
  pokemonLookWindow:hide()

  ProtocolGame.registerExtendedOpcode(200, function(protocol, opcode, buffer) displayPokemonInformation(protocol, opcode, buffer) end)

  connect(g_game, {
    onGameStart = nothing,
    onGameEnd = offline
  })
end

function terminate()
  disconnect(g_game, {
    onGameStart = online,
    onGameEnd = offline
  })

  if pokemonLookWindow then
    pokemonLookWindow:destroy()
    pokemonLookWindow = nil
  end

  ProtocolGame.unregisterExtendedOpcode(200)
end

function online()
  if not g_ui.isLoaded() then
    return
  end

  if not pokemonLookWindow then
    pokemonLookWindow = g_ui.displayUI('pokeinfo')
    pokemonLookWindow:hide()
  end
end

function offline()
  if pokemonLookWindow then
    pokemonLookWindow:hide()
  end
end

function onClosePokemonInformation()
  pokemonLookWindow:hide()
end

function displayPokemonInformation(protocol, opcode, buffer)
  print("OTCv8 received opcode:", opcode)
  print("OTCv8 received buffer:", buffer)

  local pokemonData = buffer:explode("|")
  local name = pokemonData[2]
  local level = tonumber(pokemonData[3])
  local boost = tonumber(pokemonData[4])

  getPokemonInformation(name, level, boost)
end

function getPokemonInformation(name, level, boost)
  pokemonLookWindow:show()
  pokemonLookWindow:raise()
  pokemonLookWindow:focus()

  local infoPanel = pokemonLookWindow:getChildById('full_content'):getChildById('right_content')



  infoPanel:getChildById('pokemon_name'):setText(tr(name))
  infoPanel:getChildById('pokemon_level'):setText(tr("Level: " .. level))

  if boost and boost > 0 then
    infoPanel:getChildById('pokemon_boost'):setText(tr("Boost: " .. boost))
  else
    infoPanel:getChildById('pokemon_boost'):setText(tr("Boost: None"))
  end
end

 

Editado por Xaiierek (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Administrador
  Em 08/05/2023 em 21:00, Xaiierek disse:

TFS 1.2 PokeDash By Pota

OTCv8


Hello, i have question.
I've added tooltip to my TFS 1.2 and i want to add Image for this ToolTip, but what i need to do?

https://imgur.com/LdNZWm3
I added Items.otb/xml to OTCv8 but friend told me to not to do this. 

So what i need to send Images from items.otb/xml (server) to my client? When i Hover on some item i want to display Image of this item.

 

Like in this: https://imgur.com/qPSo0dD
i have Moltres 200lvl, i want to display "helds" etc.
Is there any chance to receive it from .spr?

(OTCv8 - pokeinfo.lua) in this script i want to Test Image from items.otb/xml


pokemonLookWindow = nil

function init()
  pokemonLookWindow = g_ui.displayUI('pokeinfo')
  if not pokemonLookWindow then
    print("Error: Failed to load pokeinfo.otui")
    return
  end

  print("pokeinfo.otui loaded successfully")
  pokemonLookWindow:hide()

  ProtocolGame.registerExtendedOpcode(200, function(protocol, opcode, buffer) displayPokemonInformation(protocol, opcode, buffer) end)

  connect(g_game, {
    onGameStart = nothing,
    onGameEnd = offline
  })
end

function terminate()
  disconnect(g_game, {
    onGameStart = online,
    onGameEnd = offline
  })

  if pokemonLookWindow then
    pokemonLookWindow:destroy()
    pokemonLookWindow = nil
  end

  ProtocolGame.unregisterExtendedOpcode(200)
end

function online()
  if not g_ui.isLoaded() then
    return
  end

  if not pokemonLookWindow then
    pokemonLookWindow = g_ui.displayUI('pokeinfo')
    pokemonLookWindow:hide()
  end
end

function offline()
  if pokemonLookWindow then
    pokemonLookWindow:hide()
  end
end

function onClosePokemonInformation()
  pokemonLookWindow:hide()
end

function displayPokemonInformation(protocol, opcode, buffer)
  print("OTCv8 received opcode:", opcode)
  print("OTCv8 received buffer:", buffer)

  local pokemonData = buffer:explode("|")
  local name = pokemonData[2]
  local level = tonumber(pokemonData[3])
  local boost = tonumber(pokemonData[4])

  getPokemonInformation(name, level, boost)
end

function getPokemonInformation(name, level, boost)
  pokemonLookWindow:show()
  pokemonLookWindow:raise()
  pokemonLookWindow:focus()

  local infoPanel = pokemonLookWindow:getChildById('full_content'):getChildById('right_content')



  infoPanel:getChildById('pokemon_name'):setText(tr(name))
  infoPanel:getChildById('pokemon_level'):setText(tr("Level: " .. level))

  if boost and boost > 0 then
    infoPanel:getChildById('pokemon_boost'):setText(tr("Boost: " .. boost))
  else
    infoPanel:getChildById('pokemon_boost'):setText(tr("Boost: None"))
  end
end

 

Mostrar mais  

Você pode verificar as informações que estão sendo enviadas para o seu otclient na função 

 

displayPokemonInformation(protocol, opcode, buffer)

 

Essa função provavelmente deve estar em um arquivo na sua pasta data/creaturescript/scripts
Uma vez com essa função em mãos você pode ver o buffer que esta sendo retornado no otcliente, e ali você pode alterar ou adicionar informações, depois basta você referencialas.

Nesse caso o buffer esta sendo usado como 3 parametro dessa função você deverá encontrar algo como
 

local buffer = "resultado das informações do pokemon"


 

 

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites
  Em 08/05/2023 em 21:08, Underewar disse:

Você pode verificar as informações que estão sendo enviadas para o seu otclient na função 

 

displayPokemonInformation(protocol, opcode, buffer)

 

Essa função provavelmente deve estar em um arquivo na sua pasta data/creaturescript/scripts
Uma vez com essa função em mãos você pode ver o buffer que esta sendo retornado no otcliente, e ali você pode alterar ou adicionar informações, depois basta você referencialas.

Nesse caso o buffer esta sendo usado como 3 parametro dessa função você deverá encontrar algo como
 

local buffer = "resultado das informações do pokemon"


 

 

Mostrar mais  

Okay, i understand that it goes by opcode from the server to the client, but how do i send entire table of items to the client and how to attach the img to them?

Link para o post
Compartilhar em outros sites
  • Administrador
  Em 09/05/2023 em 08:35, Xaiierek disse:

Okay, i understand that it goes by opcode from the server to the client, but how do i send entire table of items to the client and how to attach the img to them?

Mostrar mais  

Para identificar e modificar a string encontrada conforme o código que você deixou no tópico é possivel ver que a separação na string do buffer está sendo executada e ordenada aqui

 

  local pokemonData = buffer:explode("|")
  local name = pokemonData[2]
  local level = tonumber(pokemonData[3])
  local boost = tonumber(pokemonData[4])

No entanto, opcodes só aceitam strings, mas é possível melhorar esse retorno utilizando a lib abaixo.

Explicando
A função explode que esta sendo usada na primeira linha está sendo usada para separar essa grande string que esta sendo recebida.
Logo na segunda linha podemos identificar que a terceira posição do array pokemonData e o nome do pokemon.
Você pode estudar melhorar o seu código utilizando a função log.
Ja na terceira linha transformamos a 4 posição do array em numero e temos o level do pokemon.
Ja na quarta linha transformamos a 5 posição do array em numero e temos o boost do pokemon.

Seria valido você fazer um log da string pokemonData e ver oque esta retornando.

LIB JSON OTC
Como os opcodes estão aceitando apenas cadeias de caracteres, o uso de JSON é muito útil para enviar mais dados.
Baixe o arquivojson.lua coloque em otclient/modules/corelib, então abra corelib.otmod e procure por

Code:
    dofile 'outputmessage'

Adicione

Code:
    dofile 'json'


Agora va em forgottenserver\data\lib\core E adicione uma nova lib, abracore.lua e adicione

Lua:
dofile('data/lib/core/json.lua')


Usando no otc:
OTC modules

Lua:
function sendMyCode()
    local myData = {
        a = "string",
        b = 123,
        c = {
            x = "string in table",
            y = 456
        }
    }
    protocolGame.sendExtendedOpCode(14, json.encode(myData))
end

Usando no servidor.
TFS 1x

Lua:

function onExtendedOpcode(player, opcode, buffer)
    local status, json_data =
        pcall(
            function()
                return json.decode(buffer)
            end
        )
    if not status then
        return false
    end
    
    print(json_data.a)
    print(json_data.b)
    print(json_data.c.x)
    print(json_data.c.y)
end


Agora vamos ao seu problema:
Quando você da look em uma pokebola ela ja mostra os helds ?
Se sim você precisa enviar o valor dessa variavel via opcode para o otc.
Lembre-se: Sem a lib json o OTC sempre vai receber uma string gigante e você vai ter que tratala em todos os casos.

 

json.luaFetching info...

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites
  Em 09/05/2023 em 19:33, Underewar disse:

Para identificar e modificar a string encontrada conforme o código que você deixou no tópico é possivel ver que a separação na string do buffer está sendo executada e ordenada aqui

 

  local pokemonData = buffer:explode("|")
  local name = pokemonData[2]
  local level = tonumber(pokemonData[3])
  local boost = tonumber(pokemonData[4])

No entanto, opcodes só aceitam strings, mas é possível melhorar esse retorno utilizando a lib abaixo.

Explicando
A função explode que esta sendo usada na primeira linha está sendo usada para separar essa grande string que esta sendo recebida.
Logo na segunda linha podemos identificar que a terceira posição do array pokemonData e o nome do pokemon.
Você pode estudar melhorar o seu código utilizando a função log.
Ja na terceira linha transformamos a 4 posição do array em numero e temos o level do pokemon.
Ja na quarta linha transformamos a 5 posição do array em numero e temos o boost do pokemon.

Seria valido você fazer um log da string pokemonData e ver oque esta retornando.

LIB JSON OTC
Como os opcodes estão aceitando apenas cadeias de caracteres, o uso de JSON é muito útil para enviar mais dados.
Baixe o arquivojson.lua coloque em otclient/modules/corelib, então abra corelib.otmod e procure por

Code:
    dofile 'outputmessage'

Adicione

Code:
    dofile 'json'


Agora va em forgottenserver\data\lib\core E adicione uma nova lib, abracore.lua e adicione

Lua:
dofile('data/lib/core/json.lua')


Usando no otc:
OTC modules

Lua:
function sendMyCode()
    local myData = {
        a = "string",
        b = 123,
        c = {
            x = "string in table",
            y = 456
        }
    }
    protocolGame.sendExtendedOpCode(14, json.encode(myData))
end

Usando no servidor.
TFS 1x

Lua:

function onExtendedOpcode(player, opcode, buffer)
    local status, json_data =
        pcall(
            function()
                return json.decode(buffer)
            end
        )
    if not status then
        return false
    end
    
    print(json_data.a)
    print(json_data.b)
    print(json_data.c.x)
    print(json_data.c.y)
end


Agora vamos ao seu problema:
Quando você da look em uma pokebola ela ja mostra os helds ?
Se sim você precisa enviar o valor dessa variavel via opcode para o otc.
Lembre-se: Sem a lib json o OTC sempre vai receber uma string gigante e você vai ter que tratala em todos os casos.

 

json.lua 10.15 kB · 0 downloads

Expand   Mostrar mais  

I think u don't understand me, i want display pokeball Sprite in OTC.
Im trying something like this:
    imagePanel:setItem(Item.create(itemId, 1))
    imagePanel:setItemId(itemId)
When i click on pokeball "onlook" then display pokeball sprite.
Something like this: https://imgur.com/SRmSvJc

i tried print ClientID with this and it work, but i still wonder how i can get Sprite with this ID.
 

    if (mouseButton == MouseLeftButton or mouseButton == MouseRightButton) then
      local player = g_game.getLocalPlayer()
      print(""..useThing:getId().."")
  end

 

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Under
      Apresentando o Tibia-IA: A IA para Desenvolvimento de Servidores Tibia! 
       O que é o Tibia-IA?
      Um modelo de IA especializado para Tibia! Ele está atualmente em teste gratuito, e eu adoraria que vocês o experimentassem. Basta acessar https://ai.tibiaking.com, criar uma conta e começar a usar totalmente de graça! 
       Versão Experimental Fechada
      Atualmente, algumas funcionalidades ainda estão em desenvolvimento. No momento, apenas a geração de scripts está disponível para o público.
      Se encontrarem qualquer problema nos scripts gerados, me avisem! Vamos juntos construir a IA mais poderosa para ajudar no desenvolvimento de servidores Tibia!  
      Contato direto discord : underewar
       Acesse agora: https://ai.tibiaking.com
       Como funciona?
       Geração automática de scripts LUA para TFS  Suporte a diferentes eventos, criaturas, NPCs, magias, etc.  Ferramenta em constante evolução para aprimorar o desenvolvimento Novidades em breve confira no site. O acesso ao Tibia-IA está disponível para testes GRATUITOS! 
      Basta criar uma conta em: https://ai.tibiaking.com
      Utilize a IA para gerar seus scripts de forma simples e rápida
      Envie feedbacks para ajudarmos a tornar a ferramenta ainda melhor!

      Problemas relatar diretamente no meu discord pessoal : underewar
       
       
    • Por braianlomas
      Como faço para corrigir esse problema para meu cliente, eu uso o tfs 0.3.6  
      Quero resolver esse problema que tenho no meu cliente, como e onde posso resolver?  
      Eu uso o tfs 0.3.6, não tenho as fontes do cliente, se você puder me dar eu vou amá-las para sempre  
       

       
    • Por A.Mokk
      Ola pessoal, estou tentando compilar o TFS 1.5 Downgrade para 8.60 atraves do MSVC 2022, ao tentar compilar da o seguinte erro:
       
       
      Fiz o download do MSVC, GitDash, TFS-SDK-3.2, e de varios boosts que tentei, ao fazer o seguinte procedimento no GitDash:
       
      Ao chegar em ./bootstrap-vcpkg.bat o GitDash nao consegue realizar o procedimento corretamente, alguem poderia me ajudar ?

      Tentei de diversas formas mas o mesmo erro sempre persiste, atualmente meu servidor utiliza TFS 0.4, consigo compilar sem nenhum problema no MSVC 2010, porem, as limitações do TFS 0.4 estão me fazendo precisar atualizar, se alguem souber como corrigir esses erros eu agradeço !

      Tutoriais utilizados :
      Compiling on Windows (vcpkg) · otland/forgottenserver Wiki · GitHub
      Compiling on Windows · otland/forgottenserver Wiki · GitHub
      Compilando TFS 1.3 com vídeo-aula - Tutoriais Infraestrutura & Proteção - Tibia King - Tudo sobre Tibia, OTServ e Bots!
      Compilar TFS 1.3 Vcpkg - Tutoriais Infraestrutura & Proteção - Tibia King - Tudo sobre Tibia, OTServ e Bots!
       
      O que acontece no Powershell:
       
    • Por thunmin
      .Qual servidor ou website você utiliza como base? 
      Canary 2.3.6
      Qual o motivo deste tópico? 
      Queria fazer com que os players não pudessem mexer no aleta sio, pois, agora os mesmos estão conseguindo mexer nos itens
      Está surgindo algum erro? Se sim coloque-o aqui. 
       
      Você tem o código disponível? Se tiver publique-o aqui: 
         
      Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 
       
    • Por thunmin
      .Qual servidor ou website você utiliza como base? 
      canary para o cliente 13.16
      Qual o motivo deste tópico? 
      Não consigo encontrar onde ajusta
      to com o problema no 13.16  o exausted, por exemplo os kinas era pra combar exori, erori gran e exori min, porém não ta indo ta dando exausted o char ta soltando magia ou runa e não consegue usar as potions
      Está surgindo algum erro? Se sim coloque-o aqui. 
       
      Você tem o código disponível? Se tiver publique-o aqui: 
         
      Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 
       
  • Estatísticas dos Fóruns

    96834
    Tópicos
    519575
    Posts
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo