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
  • Moderador
15 minutos atrás, 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

 

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
11 hours ago, Underewar said:

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"


 

 

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
  • Moderador
13 horas atrás, 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?

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

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
15 hours ago, Underewar said:

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

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 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. 
       
    • Por Andersontatuador
      Olá galera da TK, me chamo Anderson estou procurando alguém profissional em otservs e site.
      Já tenho um servidor o site e o cliente preciso só de uma pessoal competente, que esteja empenhado a trabalhar,
      não quero nada de graça, pois nessa onda fui mais roubado do quer eu pagar um profissional.
      caso alguém se interesse entrar em contato comigo através do whatsapp
      82 9 9304-9462
       
      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. 
       
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo