Ir para conteúdo

Whyzin

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Curtir
    Whyzin deu reputação a luanluciano93 em Clean Database by luanluciano93   
    Este script realiza limpezas na database toda vez que o servidor é iniciado, com o intuito principal de não sobrecarrega-lá.
     
    Ele funciona conforme a configuração:
    - Deletando personagens inativos há X meses.
    - Deletando contas que estão vazias (que não tem personagens criados) há X meses.
    - Deixando as casas livres caso o seu dono não entre no jogo por mais de X dias.
    - Deletando os invites de casas feitos por ex-moradores caso a casa não tenha dono.
    - Deletando guilds que foram criadas há X dias e que tem menos de Y membros.
     
    Crédito: luanluciano93, Leu e Cjaker.
     
    -- <globalevent type="startup" name="CleanDatabase" script="cleanDatabase.lua" /> --[[ Este script realiza limpezas na database toda vez que o servidor é iniciado, com o intuito principal de não sobrecarrega-lá. Ele funciona conforme a configuração: - Deletando personagens inativos há X meses. - Deletando contas que estão vazias (que não tem personagens criados) há X meses. - Deixando as casas livres caso o seu dono não entre no jogo por mais de X dias. - Deletando os invites de casas feitos por ex-moradores caso a casa não tenha dono. - Deletando guilds que foram criadas há X dias e que tem menos de Y membros. Crédito: luanluciano93, Leu e Cjaker. ]]-- local inactiveMonthsToDeleteCharacter = 1 -- quantos meses o player precisa ficar inativo para ser deletado. local emptyAccountMonths = 1 -- quantos meses uma conta precisa ficar sem nenhum character criado para ser deletada. local inactiveDaysToCleanHouse = 7 -- quantos dias o player precisa ficar inativo para perder a house. local inactiveDaysToCleanGuildWithFewPlayers = 10 -- quantos dias após a criação da guild irá verificar a quantidade mínima de players. local minimumGuildMembers = 5 -- quantidade minima de membros para a guild não entrar na verificação. local function executeDatabase(fromClause) local totalClear = 0 local resultId = db.storeQuery("SELECT COUNT(*) AS `count` FROM ".. fromClause) if resultId ~= false then totalClear = result.getNumber(resultId, 'count') result.free(resultId) if totalClear > 0 then db.query("DELETE FROM ".. fromClause) end end return totalClear end local function doCheckInactivePlayer() -- deleta automaticamente o dados das tabelas "houses, player_items, player_depotitems, player_deaths, guilds, player_storage" local timeStamp = os.time() - (86400 * (inactiveMonthsToDeleteCharacter * 30)) local fromClause = "`players` WHERE `group_id` = 1 AND lastlogin <= ".. timeStamp return executeDatabase(fromClause) end local function doCheckEmptyAccounts() -- deleta automaticamente o dados das tabelas "player_viplist" local timeStamp = os.time() - (86400 * (emptyAccountMonths * 30)) local fromClause = "`accounts` WHERE `accounts`.`creation` <= ".. timeStamp .." AND NOT EXISTS (SELECT `id` FROM `players` WHERE `accounts`.`id` = `players`.`account_id`)" return executeDatabase(fromClause) end local function doCheckInactiveHouses() local timeStamp = os.time() - (86400 * (inactiveDaysToCleanHouse * 24)) local totalClear = 0 local resultId = db.storeQuery("SELECT `houses`.`owner`, `houses`.`id` FROM `houses`, `players` WHERE `houses`.`owner` != 0 AND `houses`.`owner` = `players`.`id` AND `players`.`lastlogin` <= " .. timeStamp .. ";") if resultId ~= false then repeat local owner = result.getNumber(resultId, "owner") local houseId = result.getNumber(resultId, "id") local house = House(houseId) if house and (owner > 0) then house:setOwnerGuid(0) totalClear = totalClear + 1 end until not result.next(resultId) result.free(resultId) end return totalClear end local function doCheckInactiveHouseLists() -- Apagando "house_lists" do player local fromClause = "`house_lists` WHERE EXISTS (SELECT `id` FROM `houses` WHERE `house_lists`.`house_id` = `houses`.`id` AND `houses`.`owner` = 0)" return executeDatabase(fromClause) end local function doCheckInactiveGuilds() -- deleta automaticamente o dados das tabelas "guild_invites, guild_membership, guild_ranks" local timeStamp = os.time() - (86400 * (inactiveDaysToCleanGuildWithFewPlayers * 24)) local fromClause = "`guilds` WHERE `guilds`.`creationdata` <= ".. timeStamp .." AND (SELECT COUNT(*) from `guild_membership` WHERE `guild_membership`.`guild_id` = `guilds`.`id`) < " .. minimumGuildMembers .. "" return executeDatabase(fromClause) end -- Executando as funções de limpeza ao iniciar o servidor. function onStartup() print("[[ DATABASE CLEAN ]]") local inactivePlayer = doCheckInactivePlayer() if inactivePlayer > 0 then print(">> ".. inactivePlayer .. " deleted inactive players.") end local emptyAccounts = doCheckEmptyAccounts() if emptyAccounts > 0 then print(">> ".. emptyAccounts .." empty deleted accounts.") end local inactiveHouses = doCheckInactiveHouses() if inactiveHouses > 0 then print(">> ".. inactiveHouses .." houses that were expropriated.") end local inactiveHouseLists = doCheckInactiveHouseLists() if inactiveHouseLists > 0 then print(">> ".. inactiveHouseLists .." deleted inactive house lists.") end local inactiveGuilds = doCheckInactiveGuilds() if inactiveGuilds > 0 then print(">> ".. inactiveGuilds .." deleted inactive guilds.") end addEvent(saveServer, 10000) end  
  2. Gostei
    Whyzin deu reputação a Killua em Como usar addEvent   
    Usando addEvent
     
    O uso do addEvent tem inúmeras utilidades e pode ser complicado para algumas pessoas, inclusive era para mim quando eu estava começando a aprender LUA.
     
    Para que serve o addEvent?
    Para "chamar" uma função após um periodo de tempo, ou seja, executar uma função após um tempo estipulado. 
     
    O addEvent tem como parâmetros: callback, delay e ...
    addEvent(callback, delay, ...)
     
    Onde callback é a função que será chamada, delay é o tempo (em milissegundos) até que se chame essa função e ... são os parâmetros que a função chamada utiliza. Exemplo:
    addEvent(doBroadcastMessage, 1000, "Bom dia", 23) Aqui, após 1 segundo (1000 ms), a função doBroadcastMessage(message, type) será executada com os parâmetros message = "Bom dia" e type = 23.
     
    O addEvent pode ser usado de duas maneiras:
    Chamando uma função existente ou criando uma nova função.
     
    Para chamar uma função existente, basta usar como acima, para usá-lo para criar uma nova função, usa-se assim, por exemplo:
    addEvent(function()      if isCreature(cid) then           doPlayerAddItem(cid, 2160, 10)           doPlayerSendTextMessage(cid, 25, "Voce ganhou 10k.")      end end, 1000) Assim é basicamente a mesma coisa, mas pude colocar várias funções dentro de um único addEvent e mantive o delay 1000 (1 segundo).
    Obs: Precisei usar 2 ends, um para fechar function() e outro para fechar o if.
     
    Atenção! Além disso, existe uma outra diferença entre as duas formas de uso, vou tentar explicar da melhor maneira possível:
    Quando usamos o addEvent com uma função já existente (1o exemplo), as informações usadas serão as geradas no momento em que o evento foi chamado, por exemplo:
    function onUse(cid, item, fromPosition, itemEx, toPosition)      if getPlayerLevel(cid) > 10 then           doPlayerSendTextMessage(cid, 25, "Uma pedra sera criada na sua posiçao dentro de 2 segundos.")           addEvent(doCreateItem, 2000, 1308, 1, getThingPos(cid))      end      return true end Se usarmos assim, a pedra será criada na posição onde o jogador se encontrava no momento em que "deu use" e não onde ele estará 2 segundos depois. Se você quiser que a pedra seja criada na nova posição do jogador (pos de 2 segundos depois), você deve fazer uma nova checagem, criando uma função:
    function onUse(cid, item, fromPosition, itemEx, toPosition)      if getPlayerLevel(cid) > 10 then           doPlayerSendTextMessage(cid, 25, "Uma pedra sera criada na sua posiçao dentro de 2 segundos.")           addEvent(function()                if isCreature(cid) then                     doCreateItem(1308, 1, getThingPos(cid))                end           end, 2000)      end      return true end Atenção novamente: A checagem if isCreature(cid) que utilizei, é muito importante para um addEvent que envolva criaturas. Se você executasse o addEvent sem a checagem e o player logasse ou morresse antes desses 2 segundos se passarem, daria um erro na distro e interromperia o resto do script.
     
     
    Recursão
    Uma outra ótima funcionalidade dos addEvents é a recursão, ou seja, criar um evento que fica se repetindo. É simplesmente um addEvent chamando a sí mesmo.
    Para usar, crie uma função, exemplo:
    function respawnMonster(name, pos)      if doCreateMonster(name, pos) then           doBroadcastMessage(name.." nasceu!")      end      addEvent(respawnMonster, 10000, name, pos) end Quando chamada, esta função ficará criando um monstro e uma determinada área a cada 10 segundos, sem nunca parar.
    Para chamar a função, seria assim:
    respawnMonster("Demon", {x = 123, y = 123, z = 5}) Considerações
    Reloads param os addEvents. Se um script talkaction executou um addEvent programado para acontecer depois de 5 minutos e se dentro deste intervalo de tempo, você usar /reload talkactions, o addEvent será interrompido.
     
    Erros no código podem fazer o evento ser interrompido, preste sempre atenção.
     
    Se ainda ficou com alguma dúvida, poste aqui.
     
     
        
  3. Gostei
    Whyzin deu reputação a thalia em Video Aula - Aprenda ser um scripter.   
    Bom galera, tudo certo? XD




    Então galera, como todo mundo me pedia ajuda com scripts, decidir criar um canal no youtube focado bastante




    em como se tornar um script, no canal vai ter videos ensinando "scriptar" e como interpretar um script... enfim!




    Se inscrevam no canal e ajude a divulga-lo galera!
    muito obrigado a sua atenção, aqui vai o link do canal junto com



    o primeiro vídeo!





    Canal:
    http://www.youtube.com/user/NWEnsina




    #1 Vídeo - OT Scripting #1 - function onUse, if/else.











    Explicando Script #1 - Talkaction trocar 1kk por X [TK]








    Site/Blog:
    http://www.nwensina.blogspot.com.br



    OT Scripting #2 - Function onUse, itemEx e Positions + funções [NW]



    youtube.com/watch?v=SzR43PZO10I




    PS: O TK não permiti mais que 2 links de mídia



    mas é só copiar e colar no navegador (:

  4. Gostei
    Whyzin deu reputação a Kimoszin em Criando Spells para seu servidor!   
    Ola gaaaaaaalera, é com muito prazer que venho trazer esse primeiro tutorial meu como Aprendiz do TibiaKing,

    Spells:
    Bom, spells sao as magias do nosso servidor, elas servem tanto para healar, atacar, dar suporte e etc ...
    Criar magias é algo muito simples, vc mesmo poderam criar quantas magias quiserem para o seu servidor seguindo esse tutorial,
    Muito bem, vamos começar ...

    Spells de Curar (Healing)




    Obrigado a Todos,
    Estou terminando de fazer o SpellMaker para facilitar a vida de vc,
    Abraços
  5. Gostei
    Whyzin deu reputação a Natanael Beckman em DEV C++ Compilando TFS no Windows   
    DEV C++,  aprenda a compila uma source TFS!
     
    Downloads(Baixe de acordo as configurações do seu windows):
    DEV C++ CONFIGURADO PARA 32BITS
    DEV C++ CONFIGURADO PARA 64BITS
    REV 3884 TFS 0.4
     
    Certo, feitos os downloads, extrai DEV C++ no Disco C e REV 3884 em Documentos.
    ======================================
    Abra o DEV C++:
    ======================================

    ======================================
    Abra a Source:
    ======================================

    ======================================
    Localize a pasta da Source e abra o arquivo TheForgottenServer.dev, Documentos> trunk.r3884> dev-cpp> TheForgottenServer.dev:
    ======================================

    =============================================================

    ======================================
    Aguarde carregar todos os arquivos:
    ======================================

    ======================================
    Vamos adicionar o parâmetro -D__CONSOLE__ no teclado digita ALT + P, clique em parameters e adicione o parâmetro... Feito? clique em OK:
    ======================================

    ======================================
    Vamos compilar Source, no teclado digite CTRL+F9 e aguarde finalizar o processo:
    ======================================

    ======================================
    Se der tudo certo em Log vai estar como mostra a imagem abaixo:
    ======================================

    ======================================
    Verifique na pasta Documentos> trunk.r3884> dev-cpp você vai encontrar o arquivo TheForgottenServer.exe e pronto meu parabéns você compilou!
    ======================================

    ===========================================
    Só isso galera tutorial rápido resumido e útil!
    Créditos Natanael Beckman!    
    ===========================================     
     
    Caso você adquira uma source com apenas os arquivos .cpp e .h e não sabe como compilar o projeto, abaixo vamos explicar:
    Na pasta onde está localizado os arquivos .cpp e .h crie uma pasta chamada dev-cpp, e dentro dela adicione uma imagem icone.
     

     
    Abra o DEV-C++, clique em  File> New> Project:
     

     
    Logo em seguida selecione Empty Project, em name terá o nome Project1 altere utilize o nome quer quiser, após isso clique em OK e em seguida selecione a pasta dev-cpp que criamos:
     

     
    Agora selecione a opção Win32GUI caso use source OTX ou TFS selecione Win32Console ao lado << Browse selecione a imagem do icone que está na pasta Dev-Cpp.
     

     
    No mesmo menu na aba Parameters em C++ compiler adicione os seguintes parâmetros:
    -D__ENABLE_SERVER_DIAGNOSTIC__ -D__ROOT_PERMISSION__ -D__GROUND_CACHE__ -D__USE_SQLITE__ -D__USE_MYSQL__ -D__CONSOLE__ -D__WAR_SYSTEM__ E em Linker adicione as seguintes libs:
    -lboost_filesystem -lboost_thread -lboost_system -lboost_regex -lsqlite3 -lwsock32 -llua5.1 -lws2_32 -leay32 -lmysql -lxml2 -lgmp -lz -s   No mesmo Menu na aba Build Option escreva na segunda coluna horizontal escreva Obj e dê OK.     Na lateral terá o nome do seu projeto o meu no caso é The Forgotten Server, clique com o botão direito do mouse em cima do nome e clique na opção Add Project:      Selecione na pasta da sua source todos os arquivos .cpp e .h após isso salva o projeto e já pode compilar CTRL+F9:         OpenSSL 0.9.8   1º baixe http://devpaks.org/details.php?devpak=73 2° abra Dev-Cpp > Tools > Packager Manager > Install > Seleciona o arquivo baixado e instala, fecha abre e testa!
      Clica aqui \/
  6. Gostei
    Whyzin deu reputação a Ootsutsuki em [Simples] Texto piscando no OT   
    Você cria na pasta data/globalevents/scripts 
  7. Gostei
    Whyzin deu reputação a Ootsutsuki em [Simples] Texto piscando no OT   
    Olá vi que você tem uma duvida resolvi ajudar mas do meu jeito, Ok?
     
    vá em data/globalevents/scripts e crie um arquivo chamado texto e adicione isso:
     
     
     
     
    Verde: Mensagem que ira aparecer
    Vermelho: Posição onde a mensagem vai aparecer
     
    depois vá em data/globalevents e abra o arquivo globalevents.XML e adicione isso no final antes do </globalevents>
     
     
     
    Verde: Nome do arquivo .lua que você criou 
     
     
    (OBS: a mensagem que ira aparecer é a que vai ficar subindo no piso ) 
     
    Créditos: Server Nto Skulls V5.0 do King Of Narutibia & Ootsutsuki
  8. Gostei
    Whyzin deu reputação a Luizpaiva em {Pedido}como eu posso colocar novos itens no meu rme?   
    Trocando os itens de seu Remere's Map Editor






    Bom, vejo que muitas pessoas tem dificuldades em trocar os itens de seu RME.




    Mas como assim, trocar os itens do meu RME???




    Voce ja viu no rme, o "Raw Pallete" , ai em tileset o "Other", la fica alguns itens. No seu RME, eles podem estar na versao do tibia 8.54,




    vou ensinar a voces a colocarem uma versao mais atualizada, ou a que voces quiserem.





    Então vamos lá:

    Vá na pasta do seu RME (provavelmente será essa: computador>disco local (C:)>arquivos de programa>remere's map editor) e a pasta será assim: (SS)









    2. Clique em Data:












    3. Agora, dentro da pasta Data estará assim:












    4. Agora voce vai na pasta da versao do seu mapa, por exemplo, alguns mapas abrem com o tibia 8.54 e outros com 8.6 (depende da versão do mapa, aqui no tutorial será com o 8.6, mas caso voce queira fazer com outra versao só fazer o mesmo na pasta da versao que voce queira).




    Clique em 8.6:












    5. Agora dentro da pasta 860, estará assim:












    6. Agora dentro da pasta tem esses itens, e no meios deles tem isto:












    Agora apague-os.





    7. Agora, voce escolhe, se quer pegar itens atualizados, (8.7...) ou da pasta do seu ot, se voce quiser pegar da pasta do seu ot, vá na pasta do seu ot e vá em data/itens/ dentro da pasta, provavelmente tera 3 itens la:





    Items.xml




    items (em bloco de notas)




    randomization





    Copie o items.xml e o items em bloco de notas





    8. Agora que copiou os 2, vá em computador>disco local (C:)>arquivos de programa>remere's map editor>data>860




    e cole os dois la, agora feche e abra seu RME.





    Pronto.






    Gostou

  9. Gostei
    Whyzin deu reputação a estopa em Portas Abrem mas OTserv não!   
    mano isso ngm ensina mais como sou gentil vou ensinar vc se ajudei rep + emmmm
     
    as portas para desbloquearem são:
     
    7171  - tcp/udp
    7172  - tcp/udp
    8000  - tcp/udp
     
    caso use site desbloquei a porta
     
    80 - tcp/udp
  10. Gostei
    Whyzin deu reputação a dhiol em Portas Abrem mas OTserv não!   
    primeiramente você tem que desbloquear as portas do seu firewall! Puts o que é firewall onde fica isso?
    R: firewall pode ser definidido como uma barreira de proteção, que controla o tráfego de dados entre seu computador e a Internet (ou entre a rede onde seu computador está instalado e a Internet). Seu objetivo é permitir somente a transmissão e a recepção de dados autorizados. Existem firewalls baseados na combinação de hardware e software e firewalls baseados somente em software. "ok mais já sabia o que é firewall".

    vamos com calma ta você pode saber mais outras pessoas não sabe.

    quem ultiliza Windows 7.
    * Para abrir Firewall do Windows, clique no botão Iniciar e em Painel de Controle. Na caixa de pesquisa, digite firewall e clique em Firewall do Windows.
    * depois vá até
    No painel esquerdo, clique em Configurações avançadas. É necessário ter permissão do administrador Se você for solicitado a informar uma senha de administrador ou sua confirmação, digite a senha ou forneça a confirmação.
    Na caixa de diálogo Firewall do Windows com Segurança Avançada, no painel esquerdo, clique em Regras de Entrada, e, no painel direito, clique em Nova Regra.
    Siga as instruções do Assistente para Nova Regra de Entrada.
    Se você estiver com dificuldades para permitir que outros computadores se comuniquem com seu computador através do Firewall do Windows, tente usar a solução de problemas das Conexões de Entrada para localizar e acorrigir automaticamente alguns problemas comuns.

    Para abrir a solução de problemas de Conexões de Entrada, clique no botão Iniciar e em Painel de Controle. Na caixa de pesquisa, digite solução de problemas e clique em Solução de Problemas. Clique em Exibir tudo e em Conexões de Entrada.

    apois isso ta ok vamos para configuração do moden Tg 862, a final é que nos estávamos esperando

    entre no gateway do seu moden, no meu caso, meu gateway é 192.168.0.1
    ok apois tudo isso vc digita seu login e sua senha chave.

    siga esse padrão, firewall/virtual server presta atenção

    você ira add as portas 7171 e 7172 como to no meu celular não tem como tira umas prints

    siga esse modo
    name server: open tibia

    port open: 7171. 7171
    tcp
    seu ip que ira ser liberado no meu caso
    192.168.0.2
    port saída: 7172. 7172

    aqui será close tibia
    depois mesma coisa no port 7172. 7172

    tcp
    192.168.0.2
    port saída 7171. 7171


    pronto portas liberadas próxima etapa muito importante
    para que a porta não feche vc terá que add elas em outro lugar.

    vamos lá vai na opção port trigger aqui é diferente vc ira coloca assim

    add serve name: open tibia
    port 7171 7171
    tcp
    7171. 7171

    depois vc terá que fazer mesma coisa no port tigger
    so que será assim

    close tibia
    port 7172. 7172
    tcp
    7172. 7172


    pronto agr so abrir seu ot normalmente podes coloca no-ip um ip name ou numero


    aviso o ip do seu modem tem que fica na configuração lua assim (config.lua/ip serve lenbra do 127.0.0.1? aqui vc ira coloca ip do seu moden no meu caso 184.18.55.117 ) nao coloca ip name do no-ip que não entrara
    outra coisa ip que vc configuro no virtual serve é o que tem que ta sempre no endereço IP de sua máquina no meu caso 192.168.0.2 so vou poder colocar online com esse ip ou o que eu add no virtual server.

    espero ter ajudados vcs a abrir um server online com moden TG 862 Moden da net virtua.

    se forem postar esse pequeno tutorial pf coloque meus créditos obrigado

Informação Importante

Confirmação de Termo