Ir para conteúdo
Entre para seguir isso  
Mock

Lua server beta v 0.1.0

Recommended Posts

Mock    32
Mock

Olá... Eu estava com vontade de fazer um desse, comecei, foi ficando bom estavel ate que perdi a paciencia de continuar e uma coisa tao boa como essa ficou aqui no meu PC atoa se eu nao iria continuar decidi postar.

 

Isso é apenas 1 talk o scritp em si é um aplicativo individual.

 

Atenção conteudo para pessoas con bom conhecimento de scripting conteudo nao aconselhado para iniciantes!!

 

Esse script é primeiro um aplicativo em .exe que nao faz nada mais do que apenas rodar lua o script em si esta nos arquivos lua anexados ao topico dentro do zip. Eu usei coroutines, string e socket principalmente ficou meio POG mais ficou legal. Esse aplicativo quando se executa (depois de configurado) ele vai mostrar na telinha: Iniciando. Pronto ja esta rodando, ai vc vai no seu server e instala manualmente o connect to otserver em talkactions e cria a tag por si ou entao apenas usa o .luai pra instalar automaticamente com a otal. Apos instalado fale !conect e caso vc tenha configurado tudo certo você ira conectar ;D, abra as portas nescessarias e outras pessoas irao conectar a você, encare isso como um luaIRC ^^ é bem baseado nele, vc apenas envia o que vc presisa e recebe tudo que mandam, e tem canais privativos, vc ao conectar uma vez com um nick nao registrado ele se registra sosinho para que ninguem use seu nick, bloqueio do envio de sites e palavroes, controle de spam no pria talk, caso seja burlado pela talk o proprio server encerra a conexao no caso de spam, alem da informação do ping quem esta no canal quantos canais tem (vc registra canais por uma tabela pre definida) e dentr outras coisas.

 

Aqui segue a talkaction caso alguem queira.

-- By mock
config = {
        server = 'localhost',
        port = 7172,
        name = 'Mock',
        name_pass = 'slsx450',
        channel = 4, -- game chat (chat id)
        channelcollor = TALKTYPE_CHANNEL_W,
        chat = 1, -- 1 to otnet
        chat_pass = '', --- if need set pass
        printPing = true
}

function getInfo(cliente,pos,memory)
  if clien == nil then
     print(':: Connection closed!\a') 
     sendChannel('Connection closed. Finish chat. {err1}')
     clien = nil
     return   
  end
  cliente:settimeout(0.1)
  if memory.lastping <= os.clock() then
     clien:send('!PING!\n')
     memory.lastping = os.clock()+200
     memory.w8ping = os.clock()+180
     memory.w82ping = os.clock()
  end
     if memory.w8ping <= os.clock() then
        print('::Ping timeout.\a')
        sendChannel('Ping timeout.')
        clien:close()
        clien = nil
        return
  end         
  local a,b = clien:receive()   
    if a == nil and b ~= 'timeout' then
     print(':: Connection closed!\a') 
     sendChannel('Connection closed. Finish chat. {err2}')
     clien:close()
     clien = nil
     return 
    elseif a ~= nil then
        if a:find('ERROR=(.+)') then
           local err = a:match('ERROR=(.+)')
           print('::\aError: '..err..'.')
           return addEvent(getInfo,100,cliente,pos,memory)
        elseif a:find('PONG') then
           memory.lastping = os.clock()+90
           memory.w8ping = os.clock()+180
           memory.ping = math.floor(((os.clock()-memory.w82ping)*100))/100
           if config.printPing == true then
              print('PING: '..(memory.ping))
           end
            cliente:send('PING='..(memory.ping)..'\n')
           return addEvent(getInfo,100,cliente,pos,memory)
        elseif a:find('NOTICE=(.+) PLAYER=(.+)') then
               msg, player = a:match('NOTICE=(.+) PLAYER=(.+)')
               print(msg, player)
               if isPlayer(tonumber(player or 0)) == TRUE and msg then
                  doPlayerSendToChannel(tonumber(player), tonumber(player), 13, msg, 4,0)
               elseif msg and isPlayer(tonumber(player or 0)) == FALSE then
                  for i,cid in pairs(getPlayersOnline()) do
                     doPlayerSendToChannel(cid,cid, 13, msg, config.channel,0)
                  end 
               end
               return addEvent(getInfo,100,cliente,pos,memory)
        elseif a:find('MMNAME=(.+) UID=(.+)') then
           local servername, myid = a:match('MMNAME=(.+) UID=(.+)')
           memory.servername = servername  
           memory.id = myid   
           return addEvent(getInfo,100,cliente,pos,memory)
        elseif a:find('TEXT=(.+)') then
           sendChannel('<'..(memory.servername or '?')..'> '..a:match('TEXT=(.+)'))
           return addEvent(getInfo,100,cliente,pos,memory)
        else
           return addEvent(getInfo,100,clien,pos,memory)
        end
  end                                                     
  addEvent(getInfo,100,cliente,pos,memory)
end

function sendChannel(msg)
  assert(msg,'msg is nil.')
  for i,cid in pairs(getPlayersOnline()) do
     doPlayerSendToChannel(cid, cid, config.channelcollor, msg, config.channel,0)
  end                          
end
function onSay(cid, words, param)
        if getPlayerGroupId(cid) > 3 and clien == nil then
           setGlobalStorageValue(90903,os.clock()+2)
           clien = socket.connect(config.server,config.port)
           if clien then
              clien:send('NAME='..config.name..' CHAT='..config.chat..' PASS=*'..(config.chat_pass)..' PASS2='..config.name_pass..' VERSION='..(0x12c)..'\n')
              doCreatureSay(cid, 'connected!', 1)
              clien:send('!PING!\n')
              sendChannel('Connected. Starting chat.')
              clien:settimeout(10)
              a,kn = clien:receive()
              if a ~= 'OK' then
                 clien:close()
                 clien = nil    
                 if a == nil and kn ~= 'closed' then
                     print('::\aError: Unknow error.')
                     sendChannel('Error: Unknow error.')
                     sendChannel('Connection closed. Finish chat. {err3}')
                     return TRUE
                 elseif a == nil and kn == 'closed' then
                     print('::\aError: Unespected error, connection closed.')
                     sendChannel('Error: Unespected error, connection closed.')
                     sendChannel('Connection closed. Finish chat. {err3}')
                     return TRUE
                 elseif a:match('ERROR=(.+)') == nil then
                     print('::\aError: Unknow error. '..a..'.')
                     sendChannel('Error: Unknow error. '..a..'.')
                     sendChannel('Connection closed. Finish chat. {err3}')
                     return TRUE
                 else
                     sendChannel('Error: '..(a or "1"):match('ERROR=(.+)') ..'.')
                     print('::\aError: '..(a or "1"):match('ERROR=(.+)') ..'.')
                     sendChannel('Connection closed. Finish chat. {err3}')
                     return TRUE
                 end
                 return TRUE
              end
              local memory = {ping=0,lastping=os.clock()+30,w8ping=os.clock()+10,w82ping=os.clock()}
              addEvent(getInfo,100,clien,pos,memory)
           else
              doCreatureSay(cid, 'Cant connect', 1)
          end
       end
       if clien ~= nil and param ~= "" then
         if getGlobalStorageValue(90903) < os.clock() then
          if param == '!online' then
             clien:send('COMMAND=online PLAYER='..cid..'\n')
          elseif param == '!chan' then
             clien:send('COMMAND=channel PLAYER='..cid..'\n')
          else
              clien:send('TEXT='.. getCreatureName(cid)..'['..getPlayerLevel(cid)..']: '..param..' PLAYER='..cid..'\n')
          end
          setGlobalStorageValue(90903,os.clock()+1)
         else
            doPlayerSendCancel(cid,'Wait 1 second to send!')
         end 
       end 
return TRUE
end

Esse script requer a OTAL em seu server!!! :coolface:

 

Neste topico irei apenas ensinar a configurar e a usar.

 

Config

config = {
        server = 'localhost',
        port = 7172,
        name = 'Mock',
        name_pass = 'slsx450',
        channel = 4, -- game chat (chat id)
        channelcollor = TALKTYPE_CHANNEL_W,
        chat = 1, -- 1 to otnet
        chat_pass = '', --- if need set pass
        printPing = true
}

Server Aqui vc poe o IP do servidor (OMG? JURA?)

Port Aqui a porta

Name Aqui vc poe um nome, quando vc envia uma mensagem ela sai com o nome do server e o char que a enviou, com ediçoes isso n existe mais apenas o seu nome SEMPRE sai, entao vc deve por um nome.

Name pass Essa é a senha do seu nome, quando vc entra pela 1ª vez o serve verifica se o nome esta na DB, se estiver ele veirfica a pass se coicide. caso o nome nao exista ele cria na DB seu nick e sua senha para que ninguem use em seu lugar

Channel Tudo que for recxebido do server deve ser mostrado em algum lugar e esse lugar e no chat 4 configurado acima. (game chat)

Channel color a cor q vai sair as mensagems, no caso puis branco

chat Cada server tem seus canais nao por nome e sim por id AKI esta 1 como otnet vide na config do server

chat pass Alguns canais possuem senha, aqui vc poe a senha

print ping aqui é caos queira que o ping seja mostrado no console.

 

 

Config do server

Em berabot.lua:

conf = {
ver = 0x12c,
work_on = {0x12c}
}
luapass = 'dedonaolhota'
print('iniciando')
chats = {
[1] = {'otnet',pass='*',inchat=0},
[2] = {'otland',pass='*',inchat=0},
[3] = {'brasil',pass='*',inchat=0},
[4] = {'eua',pass='*',inchat=0},
[5] = {'private',pass='*oi',inchat=0}
}
id = 1
maxUsers = 50

Nao repare na desorganização nao tive paciencia para ajeitar ^^

Ver A versao do aplicativo, ignore

Work on As versaoes que o palicativo roda, ignore

luapass Caso alguem queria executar um code em lua via string presisa enviar essa pass MUDE ISSO!

chats é uam tabela contendo os chats, o primeiro é o nome o segundo é a pass pass='*' ela deve obrigatoriamente ter * no começo.

maxUsers maximo de pessoas a conectar

id ignore isso.

 

 

Bem qualquer duvida sobre o script ou configuração ou problema fale comigo, sinta-se livre para abrir se quiser um grande host de chats entre servidores (vou fazer um aplicativo separado para conectar apenas nisso ;D sem nescessidade de otserv)

Sinta-se a vontade para modificar.

Compartilhar este post


Link para o post
LG    1
LG

HaHa....

eu testei na verção bate 0,00000000001!?

é um sistema legal

seria muito bom um desse em servidores grandes com mais mundos.

Compartilhar este post


Link para o post
godzeldas    0
godzeldas

Muito ...doido..onde você aprendeu tanto de scripting?

Compartilhar este post


Link para o post
Welkin Guide    0
Welkin Guide

Meus parabéns.

Está incrível.

:)

Compartilhar este post


Link para o post
Archangel's    0
Archangel's

Pelo Que Entendi Parece Legal.

Mas Sou Novato Em Scripting.

Compartilhar este post


Link para o post
subdark    0
subdark

Nussa, muito bom Mock,

 

uma boa ideia, e um bom projeto...

Compartilhar este post


Link para o post
Keztoker    0
Keztoker

Incrível.

Mais um belo trabalho seu.

Parabéns.

 

K~~

Compartilhar este post


Link para o post
Tezzeret Vol    0
Tezzeret Vol

Parabéns Mock.

Uma ótima idéia e um ótimo final.

 

Adept~~

Compartilhar este post


Link para o post
Nord    2
Nord

Ótimo, agora q vc me ensinou luasocket vai ficar muito interessante isso aí, xD

Vlw msm Mock.

Compartilhar este post


Link para o post
Mock    32
Mock

Afinal, as pessoas so veem a função de algo quando a conheçem a fundo xP

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.

×