Pesquisar na Comunidade
Mostrando resultados para as tags ''opcode''.
Encontrado 10 registros
-
Opcodes - Oque são? Como utilizar? [Exemplo explicado]
um tópico no fórum postou maykeldoido Tutoriais de Scripting
Olá galera tudo bem? Vi um usuário perguntando no fórum sobre Opcodes, como no começo eu tive bastante dificuldade de entender, estou fazendo este tutorial básico para que fique claro! Opcodes são a comunicação entre o cliente e o servidor sem fazer alterações na source.. Na source você poderia usar sockets, que são pacotes de informação, diretamente sem usar funcionalidades do jogo como meio de transmissão, já o opCode utiliza recursos in game para fazer essa comunicação, entendeu? Exemplo: No módulo game_skills, no arquivo skills.lua, você pode notar a utilização do seguinte código: Essa linha, serve para registrar o uso do opCode número 102, estamos dizendo ali, que quando recebermos uma solicitação por opCode, sentido Servidor > Cliente, sendo essa de número 102, deverá ser acionada a função onPokemonSkillChange. em outra parte do mesmo skills.lua, temos o seguinte código: Repare que a parte destaca: g_game.getProtocolGame():sendExtendedOpcode(102, 'refresh'), faz o envio de uma solicitação de sentido Cliente > Servidor, com o número 102 que é o id de identificação da opCode e na frente a string 'refresh', ou seja, um valor para o servidor conseguir enxergar o que deve ser feito.. Para entender melhor vamos ao Servidor e olhar onde é tratada essa chamada do Cliente. No Servidor, em data/creaturescripts/scripts/opcodes/opcode.lua, temos o seguinte código: Repare nas partes que eu destaquei, irei explica-las abaixo: Vamos ver o que essa função faz? em data/lib/106-main functions.lua, temos a definição daquela função, que é: Basicamente, está função preenche uma tabela com as informações sobre insígneas, coins, qtd capturas do player e envia de volta ao Cliente através do comando: return doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_SKILL_BAR, table.concat(str)) lembrando que o opcodes.OPCODE_SKILL_BAR nada mais que que o número 102 e o table.concat(str) é o buffer, ou seja, um parâmetro da função doSendPlayerExtendedOpcode com os dados que serão enviados ao Cliente. Espero que todos tenham entendido, qualquer dúvida deixe nos comentários e se for preciso estarei arrumando qualquer erro que reportem no tutorial. -
action [Encerrado] [pedido]storage no otclient
um tópico no fórum postou Scizorgame Tópicos Sem Resposta
Olá, estou tentando fazer que o valor de um storage apareça na minha janela de skills do otclient, mas não estou conseguindo,ja tentei atravez de talkaction e extendedopcode mas não sei fazer o otclient receber e adaptar não achei nada muito detalhado ensinando, eu quero fazer o numero do storage 16900 aparecer do lado do Kanto Caughts: EDIT: Ja consegui resolver, podem fechar o topico. -
Minha dúvida é a seguinte, tem como eu mandar um vetor ou uma matriz por opcode? Ou Isso sendo vetor ou matriz, alguem sabe dizer como eu faço? Eu tentei aqui, mas ele não passa os valores e nem da erro, eu to achando que é o jeito que eu estou tentando pegar os valores, existe um modulo de passar esses valores como tabela ou matriz? Eu sei que dar para passar tudo como uma String e no cliente eu separar os valores, mas queria ver se consigo passar o vetor/matriz por inteiro. Obrigado
-
Boa noite, Estou refazendo algumas funções do servidor com o OPCODE do Otclient. Ao registrar o Opcode a função e enviar do servidor para o client, funciona tudo perfeitamente, mas ao tentar enviar do cliente para o servidor recebo o erro. Sei que isso é devido ao sistema de proteção contra BOT e que preciso compilar o Client sem tal proteção, mas gostaria de saber se preciso reaumente desativar, se existe uma alternativa correta para fazer com que o client permita o funcionamento deste OPCODE, pois em outra ocasião já consegui utilizar o mesmo sistema de opcode sem ter estes erros.
-
Pessoal, estou com problemas para configuração do extendedopcode em meu server. Eu já compilei nas sourcers, mas não consigo encaixar o que eu quero no script, Gostaria de um exemplo simples apenas, de como resgatar o getVocation do servidor no Cliente. Se alguém puder mostrar um exemplinho ae pode ser apenas dando um print da vocation no console. Obg.
- 3 respostas
-
- extendedopcode
- getvocation
- (e 4 mais)
-
Segui esse tutorial de OPCodes 8.54 "http://www.xtibia.com/forum/topic/213108-c-opcode-versao-854/", mas agora nao faço ideia do que eu preciso fazer por exemplo, na imagem abaixo mostra minha barra de atributos, nos botões esta tudo OK!, eu clico e aumenta pontos, mas ao invés de eu ter que clicar em points avaiable eu queria que isso ja fica-se ali em "My Points" que por exemplo seria os pontos que ainda restam para distribuir e também na frente de cada atributos mostra-se a quantidades de pontos que eu ja distribui... eu sei que precisa dos OPCodes eu consegui implantar no servidor e agora? o que eu coloco no cliente para aparecer essas informações?
-
Pessoal, estou aqui para pedir uma ajuda, estou fazendo uma spellbar para um servidor 8.54, no meu otclient 0.6.5. A dúvida é o seguinte, minha spellbar está usando o sendcancel, e queria utilizar o extendedopcode, algúem pode me dizer como ficaria o script para usar o opcode(lembrando já instalei o opcode na sources do servidor) Segue script do otclient cdBar.lua --[[Coisas para saber! local button = optionsWindow:recursiveGetChildById('Button'):setText("Fuu") == muda o nome do botao! optionsWindow = g_ui.loadUI('bot.otui', modules.game_interface.getRightPanel()) == faz a janela ficar nos cantos! local player = g_game.getLocalPlayer() == pega o player! player:getInventoryItem(8):getId() == pega o id do item, id do .spr ]] -- Privates variables local cdBarWin = nil local isIn = 'H' --[[ 'H' = horizontal; 'V' = vertical ]]-- local namesAtks = '' local icons = {} -- End privates variables -- Public functions function init() cdBarWin = g_ui.displayUI('cdBar', modules.game_interface.getRootPanel()) cdBarWin:setVisible(false) cdBarWin:move(250,50) connect(g_game, 'onTextMessage', getParams) connect(g_game, { onGameEnd = hide } ) connect(LocalPlayer, { onLevelChange = onLevelChange }) g_mouse.bindPress(cdBarWin, function() createMenu() end, MouseRightButton) createIcons() end function terminate() disconnect(g_game, { onGameEnd = hide }) disconnect(g_game, 'onTextMessage', getParams) disconnect(LocalPlayer, { onLevelChange = onLevelChange }) destroyIcons() cdBarWin:destroy() end function onLevelChange(localPlayer, value, percent) g_game.talk("/reloadCDs") end function getParams(mode, text) if not g_game.isOnline() then return end if mode == MessageModes.Failure then if string.find(text, '12//,') then if string.find(text, 'hide') then hide() else show() end elseif string.find(text, '12|,') then atualizarCDs(text) elseif string.find(text, '12&,') then FixTooltip(text) end end end function atualizarCDs(text) if not g_game.isOnline() then return end if not cdBarWin:isVisible() then return end local t = text:explode(",") table.remove(t, 1) for i = 1, 12 do local t2 = t[i]:explode("|") barChange(i, tonumber(t2[1]), tonumber(t2[2]), tonumber(t2[3])) end end function changePercent(progress, icon, perc, num, init) if not cdBarWin:isVisible() then return end if init then progress:setPercent(0) else progress:setPercent(progress:getPercent()+perc) end if progress:getPercent() >= 100 then progress:setText("") return end progress:setText(num) icons[icon:getId()].event = scheduleEvent(function() changePercent(progress, icon, perc, num-1) end, 1000) end function barChange(ic, num, lvl, lvlPoke) if not g_game.isOnline() then return end if not cdBarWin:isVisible() then return end local icon = icons['Icon'..ic].icon local progress = icons['Icon'..ic].progress if not progress:getTooltip() then return end local player = g_game.getLocalPlayer() local pathOn = "moves_icon/"..progress:getTooltip().."_on.png" icon:setImageSource(pathOn) if num and num >= 1 then cleanEvents('Icon'..ic) changePercent(progress, icon, 100/num, num, true) else if (lvlPoke and lvlPoke < lvl) or player:getLevel() < lvl then progress:setPercent(0) progress:setText('L.'.. lvl) progress:setColor('#FF0000') else progress:setPercent(100) progress:setText("") end end end function FixTooltip(text) cdBarWin:setHeight(isIn == 'H' and 450 or 70) cdBarWin:setWidth(isIn == 'H' and 70 or 450) if not text then text = namesAtks else namesAtks = text end local t2 = text:explode(",") local count = 0 for j = 2, 13 do local ic = icons['Icon'..(j-1)] ic.icon:setMarginLeft(isIn == 'H' and 4 or ic.dist) ic.icon:setMarginTop(isIn == 'H' and ic.dist or 4) if t2[j] == 'n/n' then ic.icon:hide() count = count+1 else ic.icon:show() ic.progress:setTooltip(t2[j]) ic.progress:setVisible(true) end end if count > 0 and count ~= 12 then if isIn == "H" then cdBarWin:setHeight(450 - (count*34)) else cdBarWin:setWidth(450 - (count*34)) end elseif count == 12 then cdBarWin:setHeight(70) cdBarWin:setWidth(70) local p = icons['Icon1'].progress p:setTooltip(false) p:setVisible(false) end end function createIcons() local d = 38 for i = 1, 12 do local icon = g_ui.createWidget('SpellIcon', cdBarWin) local progress = g_ui.createWidget('SpellProgress', cdBarWin) icon:setId('Icon'..i) progress:setId('Progress' ..i) icons['Icon'..i] = {icon = icon, progress = progress, dist = (i == 1 and 5 or i == 2 and 38 or d + ((i-2)*34)), event = nil} icon:setMarginTop(icons['Icon'..i].dist) icon:setMarginLeft(4) progress:fill(icon:getId()) progress.onClick = function() g_game.talk('m'..i) end end end function destroyIcons() for i = 1, 12 do icons['Icon'..i].icon:destroy() icons['Icon'..i].progress:destroy() end cleanEvents() icons = {} end function cleanEvents(icon) local e = icons[icon] if icon then if e and e.event ~= nil then removeEvent(e.event) e.event = nil end else for i = 1, 12 do e = icons['Icon'..i] cleanEvents('Icon'..i) e.progress:setPercent(100) e.progress:setText("") end end end function createMenu() local menu = g_ui.createWidget('PopupMenu') menu:addOption("Set "..(isIn == 'H' and 'Vertical' or 'Horizontal'), function() toggle() end) menu:display() end function toggle() if not cdBarWin:isVisible() then return end cdBarWin:setVisible(false) if isIn == 'H' then isIn = 'V' else isIn = 'H' end FixTooltip() show() end function hide() cleanEvents() cdBarWin:setVisible(false) end function show() cdBarWin:setVisible(true) end -- End public functions cdBar.OTUI MainWindow id: optionsWindow text: Moves size: 70 450 focusable: false &save: true SpellIcon < Button width: 32 height: 32 image-size: 32 32 image-source: /game_pokemoves/moves_icon/Base.png image-clip: 0 0 0 0 image-color: white focusable: false anchors.top: parent.top anchors.left: parent.left !tooltip: '' anchors.fill: parent anchors.bottom: text.bottom SpellProgress < UIProgressRect background: #585858AA percent: 100 focusable: false font: verdana-11px-rounded color: #FFFFFF Abrir a barra no Servidor (goback) doPlayerSendCancel(cid, '12//,show') Fechar a barra no Servidor (goback) doPlayerSendCancel(cid, '12//,hide')
-
Pessoal, estou aqui para pedir uma ajuda, estou fazendo uma spellbar para um servidor 8.54, no meu otclient 0.6.5. A dúvida é o seguinte, minha spellbar está usando o sendcancel, e queria utilizar o extendedopcode, algúem pode me dizer como ficaria o script para usar o opcode(lembrando já instalei o opcode na sources do servidor) Segue script do otclient cdBar.lua --[[Coisas para saber! local button = optionsWindow:recursiveGetChildById('Button'):setText("Fuu") == muda o nome do botao! optionsWindow = g_ui.loadUI('bot.otui', modules.game_interface.getRightPanel()) == faz a janela ficar nos cantos! local player = g_game.getLocalPlayer() == pega o player! player:getInventoryItem(8):getId() == pega o id do item, id do .spr ]] -- Privates variables local cdBarWin = nil local isIn = 'H' --[[ 'H' = horizontal; 'V' = vertical ]]-- local namesAtks = '' local icons = {} -- End privates variables -- Public functions function init() cdBarWin = g_ui.displayUI('cdBar', modules.game_interface.getRootPanel()) cdBarWin:setVisible(false) cdBarWin:move(250,50) connect(g_game, 'onTextMessage', getParams) connect(g_game, { onGameEnd = hide } ) connect(LocalPlayer, { onLevelChange = onLevelChange }) g_mouse.bindPress(cdBarWin, function() createMenu() end, MouseRightButton) createIcons() end function terminate() disconnect(g_game, { onGameEnd = hide }) disconnect(g_game, 'onTextMessage', getParams) disconnect(LocalPlayer, { onLevelChange = onLevelChange }) destroyIcons() cdBarWin:destroy() end function onLevelChange(localPlayer, value, percent) g_game.talk("/reloadCDs") end function getParams(mode, text) if not g_game.isOnline() then return end if mode == MessageModes.Failure then if string.find(text, '12//,') then if string.find(text, 'hide') then hide() else show() end elseif string.find(text, '12|,') then atualizarCDs(text) elseif string.find(text, '12&,') then FixTooltip(text) end end end function atualizarCDs(text) if not g_game.isOnline() then return end if not cdBarWin:isVisible() then return end local t = text:explode(",") table.remove(t, 1) for i = 1, 12 do local t2 = t[i]:explode("|") barChange(i, tonumber(t2[1]), tonumber(t2[2]), tonumber(t2[3])) end end function changePercent(progress, icon, perc, num, init) if not cdBarWin:isVisible() then return end if init then progress:setPercent(0) else progress:setPercent(progress:getPercent()+perc) end if progress:getPercent() >= 100 then progress:setText("") return end progress:setText(num) icons[icon:getId()].event = scheduleEvent(function() changePercent(progress, icon, perc, num-1) end, 1000) end function barChange(ic, num, lvl, lvlPoke) if not g_game.isOnline() then return end if not cdBarWin:isVisible() then return end local icon = icons['Icon'..ic].icon local progress = icons['Icon'..ic].progress if not progress:getTooltip() then return end local player = g_game.getLocalPlayer() local pathOn = "moves_icon/"..progress:getTooltip().."_on.png" icon:setImageSource(pathOn) if num and num >= 1 then cleanEvents('Icon'..ic) changePercent(progress, icon, 100/num, num, true) else if (lvlPoke and lvlPoke < lvl) or player:getLevel() < lvl then progress:setPercent(0) progress:setText('L.'.. lvl) progress:setColor('#FF0000') else progress:setPercent(100) progress:setText("") end end end function FixTooltip(text) cdBarWin:setHeight(isIn == 'H' and 416 or 40) cdBarWin:setWidth(isIn == 'H' and 40 or 416) if not text then text = namesAtks else namesAtks = text end local t2 = text:explode(",") local count = 0 for j = 2, 13 do local ic = icons['Icon'..(j-1)] ic.icon:setMarginLeft(isIn == 'H' and 4 or ic.dist) ic.icon:setMarginTop(isIn == 'H' and ic.dist or 4) if t2[j] == 'n/n' then ic.icon:hide() count = count+1 else ic.icon:show() ic.progress:setTooltip(t2[j]) ic.progress:setVisible(true) end end if count > 0 and count ~= 12 then if isIn == "H" then cdBarWin:setHeight(416 - (count*34)) else cdBarWin:setWidth(416 - (count*34)) end elseif count == 12 then cdBarWin:setHeight(40) cdBarWin:setWidth(40) local p = icons['Icon1'].progress p:setTooltip(false) p:setVisible(false) end end function createIcons() local d = 38 for i = 1, 12 do local icon = g_ui.createWidget('SpellIcon', cdBarWin) local progress = g_ui.createWidget('SpellProgress', cdBarWin) icon:setId('Icon'..i) progress:setId('Progress' ..i) icons['Icon'..i] = {icon = icon, progress = progress, dist = (i == 1 and 5 or i == 2 and 38 or d + ((i-2)*34)), event = nil} icon:setMarginTop(icons['Icon'..i].dist) icon:setMarginLeft(4) progress:fill(icon:getId()) progress.onClick = function() g_game.talk('m'..i) end end end function destroyIcons() for i = 1, 12 do icons['Icon'..i].icon:destroy() icons['Icon'..i].progress:destroy() end cleanEvents() icons = {} end function cleanEvents(icon) local e = icons[icon] if icon then if e and e.event ~= nil then removeEvent(e.event) e.event = nil end else for i = 1, 12 do e = icons['Icon'..i] cleanEvents('Icon'..i) e.progress:setPercent(100) e.progress:setText("") end end end function createMenu() local menu = g_ui.createWidget('PopupMenu') menu:addOption("Set "..(isIn == 'H' and 'Vertical' or 'Horizontal'), function() toggle() end) menu:display() end function toggle() if not cdBarWin:isVisible() then return end cdBarWin:setVisible(false) if isIn == 'H' then isIn = 'V' else isIn = 'H' end FixTooltip() show() end function hide() cleanEvents() cdBarWin:setVisible(false) end function show() cdBarWin:setVisible(true) end -- End public functions cdBar.OTUI UIWindow id: optionsWindow text: Moves size: 40 416 focusable: false &save: true opacity: 0.95 image-source: /images/ui/progressbar SpellIcon < Button width: 32 height: 32 image-size: 32 32 image-source: /game_pokemoves/moves_icon/Base.png image-clip: 0 0 0 0 image-color: white focusable: false anchors.top: parent.top anchors.left: parent.left !tooltip: '' anchors.fill: parent anchors.bottom: text.bottom SpellProgress < UIProgressRect background: #585858AA percent: 100 focusable: false font: verdana-11px-rounded color: #FFFFFF Abrir a barra doPlayerSendCancel(cid, '12//,show') fechar a barra doPlayerSendCancel(cid, '12//,hide')
-
[Encerrado] [Pedido] Distro PDA by Slicer v2.9
um tópico no fórum postou Frenvius Tópicos Sem Resposta
Gostaria de fazer esse pedido em especial para o Slicer, seria via PM mas ele não recebe :T Bom, se for possível, gostaria de um distro para o seu servidor postado, PDA by Slicer v2.9 com lvl, com opcode e se não for pedir demais, caso não queira fazer, passe as sources :v Sério, to precisando, e creio que não seja o único, OTC ta aí, muita gente usando, serial legal pessoal que for compilando já compilar com o opcode. Bom, fica aí o meu pedido, espero ser atendido, ou pelo menos respondido, sem mais. Obrigado desde já, Att, Frenvius -
[Encerrado] servidor TFS 8.6 ou 8.54 com OPCODE
um tópico no fórum postou 3145288 Tópicos Sem Resposta
Gostaria de saber se alguém tem um servidor 8.54 ou 8.6 com opcode's funcionando e possa disponibilizar para download! Compilei as sources de ambas versões, porém a função doSendPlayerExtendedOpcode() não funciona em nenhuma delas!! Inclusive, no OTX que já vem compilado, está função também não funciona... Se alguém tiver um server com a função funcionando, e puder postar as sources e linker's do projeto, eu agradeço. Utilizo C++ (Dev C++) como compilador. Obrigado.