24 minutos atrás, PoRaI disse:
Em Lua faço isso por padronização. Saber quais variáveis estou utilizando no módulo e caso eu queira iniciar com um valor diferente de nil, a declaração vai para todo o código. A única coisa que influenciaria mesmo era se você chamasse a variável como local.
Sobre a função ser ou não separada, acredito que não tem problemas, rs. Deve ter sido problema a forma como você implementou. Uma das coisas erradas que notei foi inicializar o opcode TODAS as vezes que executasse o show, é super errado, afinal, você só taria inicializando os opcodes quando clicasse no SHOW e não receberia eles por isso nunca iria funcionar além de dar conflito de usar o mesmo opcode várias vezes. Você só inicializa o opcode uma vez, fora de outras chamadas.
Ue, é relativo como o seu sistema de task funciona, kk. Eu fiz uma vez pra um servidor chamado World of Piece só que era uma gambiarra enorme, pq eu só reaproveitei um código de task que o servidor usava e já estava online e eu não tinha muita liberdade em melhorar. Lá o cliente envia uma mensagem pro servidor "pedindo" as informações da outra aba de task, fazendo as verificações se tá liberado ou não.
Acho que vou fazer o opcode retornar a permissão se o player pode ou não abrir a proxima aba de task, se não puder manda uma viso se puder abre a aproxima janela. Acho que ai não tem segredo. Então acho que temos um problema kkkk como eu disse, não estava executando direito. Oque eu fiz foi criar uma talkaction executando a função e no client coloquei um g_game.talk('talk') que executa o opcode pra poder atualizar toda vez que abre a janela, no caso do mesmo jeito eu to chamando o opcode toda vez que abre a janela, pq coloquei o game.talk na function show() pra executar toda vez que abrir e atualizar a task asjeiajisej, pq será que sozinho ele n manda a informação automaticamente já ?
No caso, o código todo ficou assim:
taskWindow = nil
ProtocolGame.registerExtendedOpcode(255, function(protocol, opcode, buffer)
local param = buffer:split('@')
print(param[1])
print(param[2])
taskWindow:recursiveGetChildById('labelPoke'):setText(param[1])
--taskWindow:recursiveGetChildById('labelPoke'):setImageSource('/game_tasks/pokes/'..param[1])
end)
function init()
connect(g_game, { onGameEnd = onGameEnd })
taskWindow = g_ui.displayUI('tasks')
taskWindow:hide()
shopTabBar = taskWindow:getChildById('shopTabBar')
shopTabBar:setContentWidget(taskWindow:getChildById('shopTabContent'))
marketPanel = g_ui.loadUI('market')
shopTabBar:addTab('Market', marketPanel, '/images/game/shop/market')
taskButton = modules.client_topmenu.addRightGameButton('taskButton', tr('Tasks'), '/images/topbuttons/emerald_shop', toggle)
taskButton:setWidth(36)
end
function terminate()
disconnect(g_game, { onGameEnd = onGameEnd })
taskWindow:destroy()
taskButton:destroy()
end
function onGameEnd()
if taskWindow:isVisible() then
taskWindow:hide()
end
end
function show()
taskWindow:show()
taskWindow:raise()
taskWindow:focus()
addEvent(function() g_effects.fadeIn(taskWindow, 250) end)
--g_game.talk('tst')
end
function hide()
addEvent(function() g_effects.fadeOut(taskWindow, 250) end)
scheduleEvent(function() taskWindow:hide() end, 250)
end
function toggle()
if taskWindow:isVisible() then
hide()
else
show()
end
end
Desse jeito ai nem os prints mostram quando eu abro a janela, agora se eu deixar executando a talk que executa o opcode ai funciona, mas como vc disse é errado, pois está chamando o opcode toda vez que abre a janela.
#EDIT
Estava aqui pensando... pra fazer esse código eu tava olhando como base o do npcDialog de um server ai... e no caso, tem alguma coisa no servidor que "ativa" esse opcode, que no caso é o npc. Sempre que vc fala com o npc o npc executa a função que ta na lib executando o opcode pelo servidor pode ser que o erro esteja ai, e também o motivo de só funcionar se eu executar a função dentro do servidor pra mandar o opcode, então provavelmente o problema ta no meu código lua do servidor, vou continuar dando uma olhada aqui