Postado Maio 8, 2023 2 anos 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 Maio 11, 2023 2 anos por Xaiierek (veja o histórico de edições)
Postado Maio 8, 2023 2 anos Administrador 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" Contato :https://www.linkedin.com/in/rafhael-oliveira/Projetos :https://github.com/thetibiaking
Postado Maio 9, 2023 2 anos Autor 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?
Postado Maio 9, 2023 2 anos Administrador 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 Contato :https://www.linkedin.com/in/rafhael-oliveira/Projetos :https://github.com/thetibiaking
Postado Maio 10, 2023 2 anos Autor 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
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.