Ir para conteúdo
  • 0

[OTC]Callbacks dos Modules


Skulls

Pergunta

Bom dia galera,

 

Estou querendo fazer um modulo que faz o player dizer algo quando ele recebe uma msg X.
Infelizmente, estou tendo um erro quando faço isso dentro de client_textmessages. Fala que o bot barrou, algo assim.

Alguém sabe me dizer quais os callbacks que existem no init do OTC e se há algum que é referente a receber mensagens?

E como eu poderia fazer isso de receber uma mensagem e disparar uma ação g_game.talk.

 

@@Aberos

@@BananaFight

 

Valeu.

Abraços,


Achei o callback de text, mas continua dando erro "caught a lua call to a bot protected game function, the call was cancelled"
E eu ja desabilitei a porra do bot protection no Cmake D:

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

13 respostass a esta questão

Posts Recomendados

  • 0

o init nao recebe nenhum callback , pra vc receber uma msg do server aconselho usar opcode, para enviar msg por opcode vc prescisa adicionar a funcao nas suas sources do server.

 

para enviar do server para o client vc usa a funcao

exemplo:

doSendPlayerExtendedOpcode(cid, 101, "msg")

para receber no client vc primeiro registra no init e no terminate

init:

ProtocolGame.registerExtendedOpcode(101, teste)

terminate:

ProtocolGame.unregisterExtendedOpcode(101)

entao vc cria a funcao q vc registrou no init que no caso foi a teste:

function teste(player, opcode, buffer)
print(buffer)
end

no caso a msg q vc enviou vai esta no buffer

Link para o comentário
Compartilhar em outros sites

  • 0

o init nao recebe nenhum callback , pra vc receber uma msg do server aconselho usar opcode, para enviar msg por opcode vc prescisa adicionar a funcao nas suas sources do server.

 

Cara, tem callback sim. A função "connect()" recebe funções de callback como parametro.

onTalk, onHealthChange, onManaChange, onTextMessage e por ai vai.

 

O meu problema ai é que tem um tal de bot protection que impede que uma ação de usuário seja feita dentro de determinados callbacks. Já tentei desativar essa botprotection, mas sem sucesso.

Alguma ideia?

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, tem callback sim. A função "connect()" recebe funções de callback como parametro.

onTalk, onHealthChange, onManaChange, onTextMessage e por ai vai.

 

O meu problema ai é que tem um tal de bot protection que impede que uma ação de usuário seja feita dentro de determinados callbacks. Já tentei desativar essa botprotection, mas sem sucesso.

Alguma ideia?

sim , mas essa funcoes sao do client em geral , nao nescessariamente o init recebe ela de callback, e sobre o bot protection vc desativa ele no cmake pra quem compila pelo metodo do codeblocks na primeira opção desmarcando o checkbox

Xd32KEN.png

Link para o comentário
Compartilhar em outros sites

  • 0

A entendi, então eu queria saber eram os callbacks de connect() xD. Mas, ja consegui isso, o bot que ta fodendo.

Eu compilo pelo VS2013. Mas eu editei o Cmake e coloquei botprotection OFF, mas ainda sim ele fica aparecendo.

 

Alguma ideia? Tem algum outro lugarq ue tem que mudar alem do client/CMake?

Link para o comentário
Compartilhar em outros sites

  • 0

Eu consegui desativar so por ae, desmarquei por ali e compilei pelo codeblocks , agora acho q o seu nao funfou pq o visual studio nao deve usar as configurações do cmake , so o codeblocks usa as configurações do cmake

Link para o comentário
Compartilhar em outros sites

  • 0

Eu consegui desativar so por ae, desmarquei por ali e compilei pelo codeblocks , agora acho q o seu nao funfou pq o visual studio nao deve usar as configurações do cmake , so o codeblocks usa as configurações do cmake

Faz sentido. Alguma ideia de onde isso pode ser mudado no vs2013?

Link para o comentário
Compartilhar em outros sites

  • 0


function init()

connect(g_game, {onTextMessage = parseTextMessage})

end

 

function terminate()

disconnect(g_game)

end

 

function parseTextMessage(mode, text)

print("onTextMessage:")

print(mode)

print(text)

g_game.talk("Chegou")

end

 

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

  • 0

Project properties -> Configuration properties -> C/C++ -> Preprocessor -> Preprocessor definitions -> e remove "BOT_PROTECTION". deve funcionarFvDZxQp.png


tem o metodo do @dalvorsn por sendcancel que funciona perfeitamente tbm

̶S̶A̶L̶V̶E̶ ̶P̶R̶O̶F̶E̶S̶S̶O̶R̶ ̶D̶U̶D̶U̶

Link para o comentário
Compartilhar em outros sites

  • 0

Nesse caso especifico acho que o mais simples seria fazer como foi dito ( Remover o BotProtection ), mas tenha em mente que pessoas mal intencionadas poderão abusar dessa brecha que você abriu, eu sinceramente não entendo o porque fazer isso ( Receber uma mensagem e falar X Coisa), isso pode ser feito diretamente server side...



Uma coisa que você pode tentar fazer é, criar um método especifico para o player falar que não tenha a verificação de BotProtection, Basicamente seria uma cópia do talk, porem sem a verificação de proteção, assim você atinge seu resultado, e mantem um pouco da defesa ant-bot no seu cliente.



Link para o comentário
Compartilhar em outros sites

  • 0

Project properties -> Configuration properties -> C/C++ -> Preprocessor -> Preprocessor definitions -> e remove "BOT_PROTECTION". deve funcionarFvDZxQp.png

tem o metodo do @@dalvorsn por sendcancel que funciona perfeitamente tbm

̶S̶A̶L̶V̶E̶ ̶P̶R̶O̶F̶E̶S̶S̶O̶R̶ ̶D̶U̶D̶U̶

 

Muito obrigado, funcionou perfeitamente aqui essa mudança.

Eu tentei usar um tutorial de op_mode via send cancel, mas ta dando erro aqui e ele é compilado, então não consigo editar. Por isso resolvi criar o meu proprio baseado na ideia dele.

Muito obrigado.

 

Resolvido.

 

Aqui ele dava erro @@dalvorsn.

 

@@BananaFight

Então, eu queria fazer um opcode via codigo, alguma ideia de como fazer isso? O codigo que existia estava quebrado.

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

  • 0

Se você tem a source do OTC e Server, é só usar o código que ja existe hoje ( EXTENDED Opcode ), uma cosia que causa muita confusão quando se vai usar o opcode para passar informações adicionais no server / client, é enviar um extended opcode, e tentar receber um opcode normal, você precisa ver se não esta fazendo isso. enviando 1 tipo e recebendo outro...



Se você instalou o extended opcode no servidor certo ele vai funcionar sem problemas.



Minha primeira sugestão é essa, tentar usar os extendeds opcodes, caso isso não resolva seu problema, ai precisaria buscar uma pessoa com conhecimentos sólidos em C++ para criar uma ponte usando os protocolos que existem no server / client para passar informações.



Agora caso você não tem a source do servidor, o jeito mais simples seria usar as mensagens de sendCancel concatenadas com um identificador que faz o client esconder elas, como o dalvorsn mostrou no exemplo.



Por exemplo, você cria uma chave de identificação "%inf%" e usa ela para executar suas ações especificas para cara key, e ao invés de mostrar ela para o player, você esconde.


Link para o comentário
Compartilhar em outros sites

  • 0

 

Se você tem a source do OTC e Server, é só usar o código que ja existe hoje ( EXTENDED Opcode ), uma cosia que causa muita confusão quando se vai usar o opcode para passar informações adicionais no server / client, é enviar um extended opcode, e tentar receber um opcode normal, você precisa ver se não esta fazendo isso. enviando 1 tipo e recebendo outro...

Se você instalou o extended opcode no servidor certo ele vai funcionar sem problemas.

Minha primeira sugestão é essa, tentar usar os extendeds opcodes, caso isso não resolva seu problema, ai precisaria buscar uma pessoa com conhecimentos sólidos em C++ para criar uma ponte usando os protocolos que existem no server / client para passar informações.

Agora caso você não tem a source do servidor, o jeito mais simples seria usar as mensagens de sendCancel concatenadas com um identificador que faz o client esconder elas, como o dalvorsn mostrou no exemplo.

Por exemplo, você cria uma chave de identificação "%inf%" e usa ela para executar suas ações especificas para cara key, e ao invés de mostrar ela para o player, você esconde.

 

Sim, são exatamente os dois caminhos que tentei.

 

1. Usar opcode, recebo esse erro ERROR: Unable to send extended opcode 1, extended opcodes are not enabled. Acredito que seja por nao conter opcode no servidor, caso saiba resolve-lo ficarei grato.

 

2. Eu estou usando o sendcancel, mas eu gostaria que ao receber uma mensagem do tipo %inf%, por exemplo, o cliente printasse para o jogador uma informação dele. Porem, ao fazer isso dentro de uma ação onTextMessage o bot bloqueia, por isso a duvida sobre o bot. Tentei o exemplo do dalvorsn com o bot funcionando e recebo o mesmo erro.

 

Bom de qualquer forma, muito obrigado.

Resolvido, pode fechar

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...