Ir para conteúdo

[Arquivado]Opcodes Estudo


Darckx13

Posts Recomendados

Ola pessoal

 

Como podemos ver os artigos e coisas relacionadas com o OTC e muito poucos

então venho aqui sugerir que abrimos um grupo de estudo em relação a opcodes.

 

Oque seria OPCODES?

Opcodes é um sistema para permite a adição de novos opcodes ao protocolo do jogo usando os scripts apenas .Lua em ambos os lados cliente e servidor, tornando assim fácil de implementação de novas funcionalidades de cliente / servidor, independentemente da progranação feito em C + +. Apenas um código de operação é suportado, no momento, a 0x01, que é enviado pelo cliente para informa ao jogador a linguagem corrente. Opcodes novos serão adicionados no futuro, incluindo opcodes para reprodução de sons e novas interfaces.

 

Modificaçãos necessarias na Source do servidor!

 

protocolgame.h

-[Diff] protocolgame.h - Pastebin.com

 

protocolgame.cpp

-[Diff] protocolgame.cpp - Pastebin.com

 

const.h

-[Diff] const.h - Pastebin.com

 

luascript.h

-[Diff] luascript.h - Pastebin.com

 

luascript.cpp

-[Diff] luascript.cpp - Pastebin.com

 

player.h

-[Diff] player.h - Pastebin.com

 

creatureevent.h

-[Diff] creatureevent.h - Pastebin.com

 

creatureevent.cpp

-[Diff] creatureevent.cpp - Pastebin.com

 

game.h

-[Diff] game.h - Pastebin.com

 

game.cpp

-[Diff] game.cpp - Pastebin.com

 

/creaturescripts/creaturescrips.xml

-[Diff] creaturescripts.xml - Pastebin.com

 

/creaturescripts/extendedopcode.lua

-[Lua] extendedopcode.lua - Pastebin.com

 

 

Creditos edubart

 

Bem com essas informações podemos abrir mais o leque de possibilidades e apenas com uma função opcodes daria para fazermos "pog" em funções do cliente?

 

Postem oque vcs acha, e oque conseguem fazer!

Link para o comentário
Compartilhar em outros sites

Server-side:

 

Enviar:

 

doSendPlayerExtendedOpcode(cid, opcode, buffer)
Ex.: doSendPlayerExtendedOpcode(cid, 51, "oibls")

 

Receber:

Você deve ter visto a callback

 

OPCODE_LANGUAGE = 1

function onExtendedOpcode(cid, opcode, buffer)
	if opcode == OPCODE_LANGUAGE then
	  -- otclient language
	  if buffer == 'en' or buffer == 'pt' then
			  -- example, setting player language, because otclient is multi-language...
			  --doCreatureSetStorage(cid, CREATURE_STORAGE_LANGUAGE, buffer)
	  end
	else
	  -- other opcodes can be ignored, and the server will just work fine...
	end
end

 

Client-side:

 

Enviar:

 

local protocol = g_game.getProtocolGame()
protocol:sendExtendedOpcode(51, "oibls") -- opcode, buffer

 

Receber:

 

ProtocolGame.registerExtendedOpcode(opcode, callback)
Ex.: ProtocolGame.registerExtendedOpcode(51, function (protocol, opcode, buffer) print(buffer) end)

 

Créditos ao @dalvorsn, por ter me passado esse tutorial.

 

 

@Off, Slicer me perguntaram se sua versão 2.9 do PDA ainda tinha o bug das pokebolas que depois de um tempo o pokemon não sai mais, e manda chamar o God.

Editado por BananaFight
Link para o comentário
Compartilhar em outros sites

Minha intenção com esse poste e "arrumar" nova funcionabilidade para isso, como não intendo muito pensei em cria algo para estudo cada um posta oque pensa e todos nos aprendemos um poquinho, minha ideia seria com isso fazer um opcode para um globalevent tipo no pxg que quando entra em x area muda o shader ou som etc estou montando uma coisa aqui espero que de certo se tudo ocorrer bem postarei aqui ;)

Link para o comentário
Compartilhar em outros sites

Bom, uma boa iniciativa é ensinar o pessoal a compilar os opcode em ot 8.6, pois no tutorial quando você tenta instalar não consegue.

 

Olha ensinar não vou conseguir pois uso windows e tem que fazer as adaptação na unha, estou terminando de adapitar o meu mas pra quem quiser eu posto as sources do 8,6 ja com as opcode intalado so mais uma coisinha =p não e o tfs e o otx mas e com a mesma base do tfs então creio que funcione todos scripts e libs normal

 

 

Dll 32bits

Dll 64bits

Sources

Compilado mais sources Creditos Kaiser

 

 

Banana Fight por favor faz um scan e posta ae a net aqui ta a manivela

Link para o comentário
Compartilhar em outros sites

Como exemplo de uso, o modulo client_locales utiliza para enviar o locale escolhido para o servidor.

 

Voce teria algum exemplo de como utilizar so servidor para o cliente tipo

 

usar um onuse em x objeto e o cliente apresentar alguma caracteristica dele tipo som

 

com as informações que temos ta dificil pra alguns mais leigos e fuçados tentar execultar algo

 

a unica coisa que consegui utilizar ate agora foi o isPlayerUsingOtclient(cid)

ainda n intendi como usar o opcode

Link para o comentário
Compartilhar em outros sites

Exemplo bem básico:

 

Client:

#modules/game_print/print.otmod

de0vrxyU[/pastebin]

#modules/game_print/print.otui

S8SDFciL[/pastebin]

#modules/game_print/print.lua

DRv7GHbY[/pastebin]

 

Server:

#data/creaturescripts/extendedopcode.lua

GfG1mZF9[/pastebin]

 

Obs.: É necessário que tenhas o codigo compilado nas sources, se não tiver não vai funcionar a callback.

 

 

Modulo anexado

game_print.rar

 

Edit:

Como exemplo de uso, o modulo client_locales utiliza para enviar o locale escolhido para o servidor.

 

Voce teria algum exemplo de como utilizar so servidor para o cliente tipo

 

usar um onuse em x objeto e o cliente apresentar alguma caracteristica dele tipo som

 

com as informações que temos ta dificil pra alguns mais leigos e fuçados tentar execultar algo

 

a unica coisa que consegui utilizar ate agora foi o isPlayerUsingOtclient(cid)

ainda n intendi como usar o opcode

 

É só usar essa função no script do server

 

doSendPlayerExtendedOpcode(cid, opcode, buffer)

E no otclient voce usa essa função aqui:

ProtocolGame.registerExtendedOpcode(opcode, callback)

 

lembrando que callback deve ser uma função qualquer criada por voce, que tenha como parametros isso: protocol, opcode, buffer

 

Ex.:

function minhafuncao(protocol, opcode, buffer)
print(opcode, buffer)
ehd
ProtocolGame.registerExtendedOpcode(opcode, minhafuncao)

Editado por dalvorsn
Link para o comentário
Compartilhar em outros sites

tem como colocar no ot 8.54?

 

 

 

edit:

no arquivo const.h

 

n tem essa parte

 


  • enum OperatingSystem_t

  • {

  • CLIENTOS_LINUX = 0x01,

  • CLIENTOS_WINDOWS = 0x02,

  • CLIENTOS_FLASH = 0x03

  • CLIENTOS_LINUX = 0x01,

  • CLIENTOS_WINDOWS = 0x02,

  • CLIENTOS_FLASH = 0x03,

  • + CLIENTOS_OTCLIENT_LINUX = 0x0A,

  • + CLIENTOS_OTCLIENT_WINDOWS = 0x0B,

  • + CLIENTOS_OTCLIENT_MAC = 0x0C,

  • };

Editado por rohfagundes
Link para o comentário
Compartilhar em outros sites

tem como colocar no ot 8.54?

 

 

 

edit:

no arquivo const.h

 

n tem essa parte

 


  • enum OperatingSystem_t

  • {

  • CLIENTOS_LINUX = 0x01,

  • CLIENTOS_WINDOWS = 0x02,

  • CLIENTOS_FLASH = 0x03

  • CLIENTOS_LINUX = 0x01,

  • CLIENTOS_WINDOWS = 0x02,

  • CLIENTOS_FLASH = 0x03,

  • + CLIENTOS_OTCLIENT_LINUX = 0x0A,

  • + CLIENTOS_OTCLIENT_WINDOWS = 0x0B,

  • + CLIENTOS_OTCLIENT_MAC = 0x0C,

  • };

 

 

então essa parte que esta em verde e para vc adicionar nas sources, se vc usa linux e so da uma pesquisada sobre diff que os arquivos aqui postados são para auto adição dos codigos na source, se não acho que o unico jeito de adicionar isso e na unha me corrijam se eu estiver errado por favor.

Link para o comentário
Compartilhar em outros sites

tem como colocar no ot 8.54?

 

 

 

edit:

no arquivo const.h

 

n tem essa parte

 


  • enum OperatingSystem_t

  • {

  • CLIENTOS_LINUX = 0x01,

  • CLIENTOS_WINDOWS = 0x02,

  • CLIENTOS_FLASH = 0x03

  • CLIENTOS_LINUX = 0x01,

  • CLIENTOS_WINDOWS = 0x02,

  • CLIENTOS_FLASH = 0x03,

  • + CLIENTOS_OTCLIENT_LINUX = 0x0A,

  • + CLIENTOS_OTCLIENT_WINDOWS = 0x0B,

  • + CLIENTOS_OTCLIENT_MAC = 0x0C,

  • };

 

e porque esse diff foi feito com base numa source bem recente da svn privada do tfs

pra usar em tfs 036 vai ter que ler todas as modificaçoes, entender e adaptar, isso e bem complicado se voce for leigo em c++

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...