Ir para conteúdo
  • 0

Usando registerExtendedOpcode


LuckOake

Pergunta

Olá.

 

Comecei a mexer no otclient e achei interessante o uso desses opcodes, mas ainda não consegui entender a parte do client de receber os dados.

 

Como eu utilizo o registerExtendedOpcode?

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Em modules/gamelib/protocolgame.lua existe essa função:

 

function ProtocolGame.registerExtendedOpcode(opcode, callback)

 

Um exemplo de como utiliza-la:

 

local function test(protocol, opcode, buffer)
 print('received something from server!')
end

ProtocolGame.registerExtendedOpcode(100, test)

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

  • 0

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
       elseif opcode == OPCODE_PRINT then
               print(buffer)

       else
               -- other opcodes can be ignored, and the server will just work fine...
       end
end

 

quando a função "onExtendedOpcode(cid, opcode, buffer)" for usada ele vai te que ter os 2 valores preenchidos opcode, buffer

 

opcode, seria como o id da mensagem que você esta reçebendo/enviando, e buffer é o valor dessa mensagem

 

como nesse exemplo :

 

local function test(protocol, opcode, buffer)
 print('received something from server!')
end

ProtocolGame.registerExtendedOpcode(100, test)

 

o valor do "ID" do opcode é 100, e "test" é a mensagem que estamos enviando, sendo assim quando o opcode numero 100 for usado ele vai retornar o que a função test esta armazenando.

Link para o comentário
Compartilhar em outros sites

  • 0

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
	elseif opcode == OPCODE_PRINT then
			print(buffer)

	else
			-- other opcodes can be ignored, and the server will just work fine...
	end
end

 

quando a função "onExtendedOpcode(cid, opcode, buffer)" for usada ele vai te que ter os 2 valores preenchidos opcode, buffer

 

opcode, seria como o id da mensagem que você esta reçebendo/enviando, e buffer é o valor dessa mensagem

 

como nesse exemplo :

 

local function test(protocol, opcode, buffer)
 print('received something from server!')
end

ProtocolGame.registerExtendedOpcode(100, test)

 

o valor do "ID" do opcode é 100, e "test" é a mensagem que estamos enviando, sendo assim quando o opcode numero 100 for usado ele vai retornar o que a função test esta armazenando.

 

Ele perguntou no cliente, a primeira parte que voce postou, é a callback do server, ela é chamada quando o server recebe algum opcode.

 

E na segunda explicação, tem uma incoerência quanto ao uso da função de registrar os opcodes

 

Os opcodes são registrados através da função

ProtocolGame.registerExtendedOpcode(opcode, callback)

 

Onde o primeiro parametro é o valor do opcode(numero referente, como no exemplo do baxnie era 100), e o segunda parametro que é a callback, que nada mais é que o nome da função que será chamada quando receber o opcode 100.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, sobre a 1° parte era só um exemplo de uso.

 

E na 2° parte eu só dei um exemplo simples de como registrar o valor do opcode que como no exemplo ele era chamado de "test".

 

do mesmo modo que se eu tentar fazer

 

print(test) ele me retorna "received something from server!", Agora quando eu registro o opcode 100, o que eu estou registrando é "received something from server!", então quando eu retornar o opcode 100 vou ter esse resultado "received something from server!" certo ?

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, sobre a 1° parte era só um exemplo de uso.

 

E na 2° parte eu só dei um exemplo simples de como registrar o valor do opcode que como no exemplo ele era chamado de "test".

 

do mesmo modo que se eu tentar fazer

 

print(test) ele me retorna "received something from server!", Agora quando eu registro o opcode 100, o que eu estou registrando é "received something from server!", então quando eu retornar o opcode 100 vou ter esse resultado "received something from server!" certo ?

A função test não tem retorno, e printar apenas o nome dela, vai mostrar 'function: 0x00algo', e se printar print(test()) vai printar o print da função teste, e nil que é o retorno dela.

A questão é que o modo que você falou, pode confundir as pessoas, pareceu que o nome da função é a mensagem a ser printada, e não é assim.

Quando receber o opcode ele vai executar a função determinada, no caso do baxnie ali a função test, se fosse outra função qualquer, executaria também da mesma forma e não precisa ter uma mensagem, nem printar nada, pode ser apenas uma função para setar algo, definir alguma coisa.

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

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...