Ir para conteúdo
Entre para seguir isso  
Mock

Comunicação entre 2 servers.

Recommended Posts

Mock    32
Mock

Comunicação!

WI10044ML_a.jpg

Você ja pensou em algum dia entrar no seu server mandar uma broadcast e você ter 2 ou mais servers e a broadcast aparecesse nos 2?

Agora isso é possivel!!!!!! Graças a um sistema que eu fiz (nao usa lua socket)

você precisa de 3 coisas:

  1. TFS 0.3.1+
  2. Ter 2 ou mais servidores MySql que ambos nao precisam estar no mesmo pc porem DEVEM estar usando o mesmo servidor MySql.
  3. Ter a otnet scriptlib em seu servidor http://forums.otserv.com.br/f154/otnetscriptlib-1-0-71911/

Parabens! você tem tudo? entao vamos continuar. Se você ja mecheu com algum tipo de socket sabe que você deve 1º se conectar, isso acontece quando o server abre (qdo se conecta ao mysql) depois que estiver conectado tem começar a troca de dados e é isso oq o script faz! na função writeBuffer(id,val) ele salva um valor de ID = id e o que compoe ele é val. já o readBuffer(id) ele lê o que estiver classificado como id = 1, entao tudo se baseia nisso!

 

Xega de explicação vamos começar!!!!

Provavelmente você tem 1 server só entao desiste :D

se você tem 2 tudo bem

se vc tem 3 ai complica x.x mais da de boa.

o primeiro passo é você executar a função setLibTables() para que todas as tabelas nesessarias funcionem!

segundo abrir as 2 pastas dos seus servidores!

vá nas 2 pastas globalevents e nos 2 global events adcione essa tag:

<globalevent name="start" interval="1" script="comunication.lua"/>

Vamos definir Azul como server 1 e Vermelho como server 2 e Verde como ambos.

No server 1 vá la em globalevents em scripts crie o comunication.lua dentro dele ponha isso:

function onThink(interval, lastExecution)
   local a,b = readBuffer(2)
   if a ~= "" then
   doBroadcastMessage('mensagem de '..b..' falando: '..a,11)
   clearBuffer(2)
   end
   return TRUE
end

Agora vá em talkactions.xml crie essa tag:

<talkaction log="yes" words="/bcall" access="3" script="send.lua"/>

 

Bom agora crie o send.lua e ponha isso dentro:

function onSay(cid, words, param) 
        if getPlayerGroupId(cid) > 3 then
           if string.len(param) <= 255 then
              doPlayerSendTextMessage(cid,"Você mandou a mensagem "..param, 24)
              writeBuffer(1,param)
           end
        end
end

Salve e pode fechar, e abrir seu ot.

No server 2 vá em globalevents a diferença do 1º para o segundo são 2 numeros.

function onThink(interval, lastExecution)
   local a,b = readBuffer(1)
   if a ~= "" then
   doBroadcastMessage('mensagem de '..b..' falando: '..a,11)
   clearBuffer(1)
   end
   return TRUE
end

 

Agora a sua talk é esta:

function onSay(cid, words, param) 
        if getPlayerGroupId(cid) > 3 then
           if string.len(param) <= 255 then
              doPlayerSendTextMessage(cid,"Você mandou a mensagem "..param, 24)
              writeBuffer(2,param)
           end
        end
end

Abra os 2 servers e divirta-se

:D

 

Ta! que seja eu sei que você nao entendeu bulhufas do script entao vou da uma luz. Normalmente você so pensa no seu ot e nao no outro quando se meche com isso você tem que pensar nos 2, e uma coisa que funde o cerebro de alguns.

Editado por Black Ice

Compartilhar este post


Link para o post
Elys Zarox    0
Elys Zarox

Voce poderia colocar opões como ver quantos tem online, uptime essas coisas uteis que você só pode ver por remote control ou estando online, saber se tem algum membro da equipe on (tutor, gm) e funçoes como clean e shutdown xD seria bem legal isso

 

@Duvida

 

eu não intendi a diferença dos 4 scripts de talk e de 2 global event

@Comments

 

Cara se me falo disso e eu achei que não seria possivel Oo depois de mais de 3 meses se me provo que é possivel xD muito bom pra pessoas que tem mais de 1 server

Compartilhar este post


Link para o post
Gpwjhlkdcf    21
Gpwjhlkdcf

Háhá, não consigo nem fazer um OT com dois servidores.

Mas seu script tá bem avançado. Pelo que eu vi, ele adiciona na MySql a palavra do broadcast, o segundo server pega a mensagem e manda, depois apaga. Deve ter se esforçado bastante. :P

Compartilhar este post


Link para o post
Mock    32
Mock

@zarox

sim da pra fazer isso assim:

 

quando executar isso:

writeBuffer(90,true) -- usei 90 pode muda se quiser

ai na global event:

 

local a = readBuffer(90)

if a ~= "" and a == true then

shutdown()

end

 

e por ai vai...

 

@skyen

não ele nao manda a mensagem doBoardCast

ele manda a mensagem "param" que é aquilo q vc poe depois da talk, ai ele le o buffer ve se tem algo se tiver ele manda uma BC pro outro server e depois limpa oq tem la pra nao ficar mandando BC toda hora.

Editado por Mock

Compartilhar este post


Link para o post
UrsO    0
UrsO

Bom, Mock!

 

Não é o foco da maioria, já que os home-hosts mal aguentam um servidor, mas é muito interessante pra servidores com projetos grandes.

 

Boa!

Compartilhar este post


Link para o post
Mock    32
Mock

@urso

bom o refugia tem 3 servidores na mesma maquina ai acho que seria um bom exemplo porem a maioria dos servers como vc disse ficam e pcs normais entao concordo com sua afirmativa x.x'

porem ja vi alguns servidores que usam uma DB em outro servidor (vai dar um lag na hora do save) ai dá para eles se comunicarem.

enquanto nao colocarem lua socket nos distros vamo ter q usa isso se quiser :P

@shyzoul

essa seção so permite: duvida, critica, sujestao

seu post nao aparesentou nada disse entao mls cara foi deletado :/

Compartilhar este post


Link para o post
Eratsu    37
Eratsu

Mock! eu nao entendi '-' ele faz tipo vc tem dois servidores ai quando vc digita a account no local de escolher o char vai ta la os dois servidores e? que nen o tibia global?

Compartilhar este post


Link para o post
Mock    32
Mock

não -.-'

vc manda uma BC no seu server ai a BC aparece no outro servidor no qual vc pois o script

Compartilhar este post


Link para o post
Blackout    0
Blackout

Mock, não entendi direito também, você precisa ter dois servers no pc e pelo script (que eu achei inútil e difícil de fazer) comunica entre eles?

 

Não sei se vai ajuda mta gente mas ta bom, gz.

Compartilhar este post


Link para o post
Raphael Carnaúba    1
Raphael Carnaúba

Mock, isso é conexão com o banco de dados ou seria um tipo de conexão winsock? para que um server mande uma mensagem para o outro, como uma mensagem global entre vários servers, tem que haver uma conexão entre sockets.

Compartilhar este post


Link para o post
Mock    32
Mock

@raphael

isso e uma conexao com o banco de dados naverdade, porem tem varios servidores que estao na mesma aquina usando o mesmo banco de dados.

isso funciona sim eu ja testei com 3 servidores juntos. essas funções apenas colocam valores na DB depois leem eles em seguida se vc quiser as deletam.

Esse script DESTE topico so suporta 2 servidores porem o da [V] suporta quantos vc quiser.

bem que eu queria usar lua socket pra fazer esses comandos porem nem um servidor tem lua socket :/

Compartilhar este post


Link para o post
Domed    0
Domed

Bem explikadinho o seu treko

Mais eu quero saber se é só o god que pode mandar msg nos dois servers se os players naum podem comunicar entre si ia ser bem loko se existe como me mostra ae valew... esperando resposta

Compartilhar este post


Link para o post
Gpwjhlkdcf    21
Gpwjhlkdcf
Bem explikadinho o seu treko

Mais eu quero saber se é só o god que pode mandar msg nos dois servers se os players naum podem comunicar entre si ia ser bem loko se existe como me mostra ae valew... esperando resposta

Só funciona com broadcast messages, se só GODs puderem usar broadcast, então só GODs poderão trocar mensagens entre servers.

Compartilhar este post


Link para o post
Lyu Elite    0
Lyu Elite

@UP Sorry

Dúvida;

Se a pessoa tiver 3 servidor oquê eu boto no 3 ?

Compartilhar este post


Link para o post
Mock    32
Mock

@lyu

sem problemas, no caso de um terceiro server, esse script foi feito para suportar apenas 2 servidores, no caso o servidor 1 teria q ter um script para ler o server 2 e o server 3, o 2 teira um para o server 1 e o 3 e o server 3 um scirpt para o server 1 e o 2.

Compartilhar este post


Link para o post
Hakkan    0
Hakkan

lol n funf

Compartilhar este post


Link para o post
Dargosh    0
Dargosh

LoL Essa script é mt doido manda BC pra 2 Server SAahsu

mais foi muito boa mock

Compartilhar este post


Link para o post
Jhony Michael    0
Jhony Michael

o.o qui legal otimo

Compartilhar este post


Link para o post
Maguim    0
Maguim

MOCK SERA Q SERIA POSSIVEL!

por exemplo eu tenho um MINHA ACC DE ADM, no servidor 1

por exemplo de vez de desloga do servidor 1... pra loga no servidor 2.

DARIA PRA FAZER UM COMANDO Q PASSA-SE SUA ACC DE ADM DO SERVIDOR 1 PRO 2 SEM DESLOGA!?

Compartilhar este post


Link para o post
ahbom    0
ahbom

Donn't leave now !

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×