Ir para conteúdo
Banner com Efeitos

Sun

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    Sun deu reputação a RezoriaOTS em [POLAND] [PVP] [8.60] REZORIA.EU - Evolution   
    Welcome!
    Today I present to you the server Rezoria.eu ! This is an EVOLUTION | MEDIUM EXP | 4FUN/PVP server.
    Rezoria.eu boasts a really excellent PvP balance, which has been specially tested by those involved in beta testing and willing to cooperate,We
    can also boast of interesting and unique systems and events.
    We are open to your suggestions and proposals, this is the first edition of this server, so we try to listen to the comments of players.
    Server running the latest TFS version for a much smoother gameplay!
    ...
    Server Started: [10.11.2023, Friday 18:00 CET].
    ...
    Information:
    Website: Rezoria.eu.
    Client: Windows & Android.
    PvP: from 100 lvl .
    Houses: from 150 lvl.
    Stamina: YES.
    Frags to RS: 10 per day.
    Frags to BS: 25 per day.
    ...
    What can we offer?
    ○ Many updates!
    ○ Many missions!
    ○ Many events!
    ○ Good and interesting game!
    ○ Many raids, we have rooms with lvl ranges.
    ○ Long term game with many players!
    ○ Excellent PvP balance!
    ○ Automatic events, as well as those organized by the administration!
    ○ Masses of hidden exps, bosses and other interesting things!
    ○ Automatic roulette system win the best weapons on the server.
    ○ Fights for a castle for which the guild gets 10% extra experience!
    ○ Hidden bosses for which 4 people are required!
    ○ Payable exps!
    ○ The best items to get only from the game!
    ○ More than 140 quests!
    ○ Custom spells with nice effects.
    That's not all, join us and explore much more.
     
    [SYSTEMS]
    ◘ Proprietary dungeon system. Perform in 4 people every 20 hours and you will receive unique items.
    ◘ Meditation system. For standing in depo you get free stamine!
    ◘ Guild war castle. Fights for a castle for which the guild gets 10% extra experience!
    ◘ Points for level. Earn more levels and get free points for the store!
    ◘ Daily quest system. Perform daily and you will receive free levels and other interesting magnifiers
    ◘ Proprietary boss system. Gain access by completing npc missions and earn unique magnifiers!
    ◘ Token system. Every logged in player gets a token every hour for which you can buy unique items!
    ◘ System upgrade. The system is based on inserting a pebble into an item that draws us a bonus such as mana or hp.
    And much more, you have to check it out for yourself!
    ...
    We have decided to giveaway points to the Guild as well. Learn more here.
    You can also earn free points in many other ways such as:
    ★ An hour after the launch, every logged-in player will receive premium points
    ★ For the first 2 hours after the launch, the Lottery will take place every 30 minutes!
    ★ Points for level up more here!
    ...
    ITEM-SHOP items can be obtained in the game!
    On our server you will find events such as Battlefield, Fire Storm, Lottery, Stone Event, Snowball, Dreamgold and many more....
    [Special Event - World]
    It will be held every weekend.
    What will it be?
    invasion of the main server boss:
    For defeating this boss, every player gets double the experience for x amount of time.
    Several free levels and free premium points.
    ...
     (trailer) announcing the server.
    Rezoria.eu | Tibia 8.60 | TRAILER - YouTube
     
  2. Curtir
    Sun recebeu reputação de Spraiinedweb em Novo no Tk! Explicação sobre ItemAttribute   
    ~ Olá galera, fiz parte do grupo por uns anos e fiquei 3 longos anos sem dar as caras
                                                     Antes pessoas me ajudavam, hoje, consigo ajudar as pessoas, e queria compartilhar com vocês conhecimento sobre itemAttribute!
                                                          essa função do tibia é maravilhosa, porém muitos não sabem seu potencial ou até mesmo não coloca ela em seus planos,
                                                        ela é bem simples porém deixa duvida em muitos, principalmente servidores de Poketibia que utiliza isso em quase tudo.
    getItemAttribute(uid, key) -- ## oque é get? get em inglês seria algo como obter, então a função traduzida seria, obter atributo do item! ## -- getItemAttribute(uid, key) -- ## UID seria direcionado a qual item eu estaria perguntando seu attributo, lembrando que eu obtenho isso com a key ##-- --## quando se pesquisa pelo atributo do item, o mais importante seria a chave que está contido no item, a key, no caso é uma {string} doItemSetAttribute(uid, key, value) -- ## oque é set? set seria algo como "definir", usamos para "dar" algo, traduzido fica definir atributo no item doItemSetAttribute(uid, key, value) -- ## uid novamente! seria o item a ser setado o attributo, chave, será algo que iremos colocar, como "defense" ## -- -- ## oque seria value? value seria o valor, como 1, etc já que é defense podemos fazer se tiver mais, defende mais ##  
    doItemEraseAttribute(uid, key) --## oque é do? do seria como "faça", na tradução seria, faça um corte no atributo do item doItemEraseAttribute(uid, key) --## uid novamente! será o item, a chave seria aque você setou no item, essa função retira o attributo!. ##--  
    exemplo dos Attribute sendo usados
     
    -- ## exemplo de catch seria o charmander ## -- Ensino = {"Charmander", 3200, 1515, 4} -- ## fazemos de exemplo que 3200 seria vida do charmander e 1515 seria o id do item do seu portfoil e 4 o sexo item = doCreateItemEx(12664, 1) -- ## 12664 seria o id da pokebola, 1 seria a quantia doPlayerAddItemEx(cid, item, true, CONST_SLOT_BACKPACK) doItemSetAttribute(item, "poke", 3200) -- ## vida do pokemon ## -- doItemSetAttribute(item, "nome", "Charmander") -- ## nome do pokemon ## -- doItemSetAttribute(item, "portrait", 1515) -- ## portrait do pokemon ## -- doItemSetAttribute(item, "gender", 4) -- ## 4 seria o sexo dele ## -- -- ## claro que ná hora de fazer seu system de catch irá ser assim, mas isso é apenas um exemplo de como irá funcionar ## -- -- ## lembrando que o valor do doItemSetAttribute pode ser além de numero. ## --  
                                               
                                                                     
     
     
                                                      Espero que muitos pratiquem ai, e que vocês tenham conseguido entender o tópico e se aventurem para usar a função!.
                                                                                                                                                 bye
     
  3. Gostei
    Sun deu reputação a Tofames em Sistema de transformação   
    Hi,
    Para devolver o que recebi aqui, colocarei para si um sistema de transformação a trabalhar na TFS 1.X.
    (Testei em 1.4.2) 
     
    MUDANÇA DE SOURCE NECESSÁRIA PARA O BOM FUNCIONAMENTO!
    Havia algo dentro do código TFS (e provavelmente outras distros) que não estava funcionando corretamente e depois que eu informei, eles se fundiram em tfs principais, então já está dentro do TFS 1.5, mas não está em versões mais antigas.
    Trata-se de refrescar a velocidade do jogador após a transformação, se você não tiver isso, então sua velocidade do vocations.xml baseSpeed não é refrescada.
    Você precisa adicionar isto às sources:
    https://github.com/otland/forgottenserver/pull/4215/files
    se você não tem acesso às sources, eu tenho um meio de contornar isso, mas não vou inundar este posto, então escreva em pv.
     
    Créditos: 
    Erexo (guião original)
    Itutorial (TFS 1.X),
    Tofame (alteração: talkaction --> spell; source mudanças; correções do scripts)
     

    transform system.mp4  
    no final do global.lua:
    --[[ voc = from vocation newVoc = to vocation looktype = new outfit revertLooktype = current outfit level = lvl needed to transform rage = soul needed to transform (you can disable it, just type 0) kiToTrans = mana to transform addHp = maxHp added when you transform addKi = maxMana added effectOn = magic effect when you use transform aura = magic effect when you have current transform (can be disabled, just type 0). type nil in this version constant = if transform is constant (when it is, player dont lose transform/outfit and maxHp/Mana, and cannot use revert) --]] exhaust_transform = {} -- [1-8] naruto, transform = { [1] = {voc = 1, newVoc = 2, from_looktype = 2, looktype = 3, level = 50, rage = 0, mana = 50, addHealth = 450, addMana = 450, effect = 76, aura = nil, constant = false}, [2] = {voc = 2, newVoc = 3, from_looktype = 3, looktype = 4, level = 100, rage = 0, mana = 50, addHealth = 500, addMana = 500, effect = 76, aura = nil, constant = false}, [3] = {voc = 3, newVoc = 4, from_looktype = 4, looktype = 5, level = 150, rage = 0, mana = 50, addHealth = 650, addMana = 650, effect = 76, aura = nil, constant = false}, [4] = {voc = 4, newVoc = 5, from_looktype = 5, looktype = 6, level = 200, rage = 0, mana = 50, addHealth = 800, addMana = 800, effect = 76, aura = nil, constant = false}, [5] = {voc = 5, newVoc = 6, from_looktype = 6, looktype = 7, level = 250, rage = 0, mana = 50, addHealth = 900, addMana = 900, effect = 76, aura = nil, constant = false}, [6] = {voc = 6, newVoc = 7, from_looktype = 7, looktype = 8, level = 300, rage = 0, mana = 50, addHealth = 1000, addMana = 1000, effect = 76, aura = nil, constant = false}, [7] = {voc = 7, newVoc = 8, from_looktype = 8, looktype = 9, level = 400, rage = 0, mana = 50, addHealth = 1500, addMana = 1500, effect = 76, aura = nil, constant = false}, [8] = {voc = 8, newVoc = 9, from_looktype = 9, looktype = 10, level = 500, rage = 0, mana = 50, addHealth = 1500, addMana = 1500, effect = 76, aura = nil, constant = false} -- end naruto transforms } spells/scripts/revert.lua
    local combat = Combat() combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false) function onCastSpell(player, variant) local pid = player:getId() local TRANS = transform[player:getVocation():getId() - 1] -- - [player:getVocation():getId() - 4] domyslnie, should be -1. if not TRANS then player:sendCancelMessage("You cannot revert.") return false end local outfit = player:getOutfit() outfit.lookType = TRANS.from_looktype if TRANS.constant then player:setOutfit(outfit) else player:setOutfit(outfit, false) end exhaust_transform[pid] = 1 player:setMaxHealth(player:getMaxHealth() - TRANS.addHealth) player:setMaxMana(player:getMaxMana() - TRANS.addMana) player:setVocation(TRANS.voc) player:save() return combat:execute(player, variant) end spells/scripts/transform.lua
    local combat = Combat() combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false) function onCastSpell(player, variant) local effectPosition = Position(player:getPosition().x, player:getPosition().y, player:getPosition().z) local pid = player:getId() local TRANS = transform[player:getVocation():getId()] if not TRANS then player:sendCancelMessage("You cannot transform.") return false end if TRANS.effect == 76 then effectPosition = Position(player:getPosition().x + 2, player:getPosition().y, player:getPosition().z) end if player:getLevel() < TRANS.level then player:sendCancelMessage("You must reach level "..TRANS.level.." to transform.") return false end if player:getSoul() < TRANS.rage then player:sendCancelMessage("You need "..TRANS.rage.." to transform.") return false end if player:getMana() < TRANS.mana then player:sendCancelMessage("You need "..TRANS.mana.." to transform.") return false end local outfit = player:getOutfit() outfit.lookType = TRANS.looktype if TRANS.constant then player:setOutfit(outfit) else player:setOutfit(outfit, false) end player:addSoul(-TRANS.rage) player:setMaxHealth(player:getMaxHealth() + TRANS.addHealth) player:setMaxMana(player:getMaxMana() + TRANS.addMana) effectPosition:sendMagicEffect(TRANS.effect) player:setVocation(TRANS.newVoc) player:save() return combat:execute(player, variant) end spells.xml:
    <instant group="support" spellid="175" name="Revert" words="revert" level="1" mana="10" aggressive="0" selftarget="1" cooldown="1000" groupcooldown="1000" needlearn="0" script="revert.lua" /> <instant group="support" spellid="175" name="Transform" words="transform" level="1" mana="10" aggressive="0" selftarget="1" cooldown="1000" groupcooldown="1000" needlearn="0" script="transform.lua" />  
     
    As coisas abaixo são opcionais, adicione-as se você quiser ter aura. Se você não estiver usando, deixe a aura = nil em global.lua
    Também observei que isso poderia causar atrasos/screen freeze, por isso não recomendo o uso de aura.
     
    globalevents.xml adicionar linha:
    <globalevent name="TransformEffects" interval="2000" script="TransformEffects.lua"/> TransformEffects.lua (data/globalevents/scripts/TransformEffects.lua):
    function onThink(interval) for _, player in pairs(Game.getPlayers()) do if player then TRANS = transform[player:getVocation():getId()] if TRANS then if TRANS.aura ~= nil then player:getPosition():sendMagicEffect(TRANS.aura) end end end end return true end  
    edit:
    só consigo falar um pouco de espanhol e muito bem em inglês, por isso uso DEEPL para falar portugês.
  4. Obrigado
    Sun recebeu reputação de Lost Dead em Por serve online no Linux   
    Este tópico foi movido para a seção de Suporte Otserv.
  5. Obrigado
    Sun recebeu reputação de Tyrisfall em Novo no Tk! Explicação sobre ItemAttribute   
    ~ Olá galera, fiz parte do grupo por uns anos e fiquei 3 longos anos sem dar as caras
                                                     Antes pessoas me ajudavam, hoje, consigo ajudar as pessoas, e queria compartilhar com vocês conhecimento sobre itemAttribute!
                                                          essa função do tibia é maravilhosa, porém muitos não sabem seu potencial ou até mesmo não coloca ela em seus planos,
                                                        ela é bem simples porém deixa duvida em muitos, principalmente servidores de Poketibia que utiliza isso em quase tudo.
    getItemAttribute(uid, key) -- ## oque é get? get em inglês seria algo como obter, então a função traduzida seria, obter atributo do item! ## -- getItemAttribute(uid, key) -- ## UID seria direcionado a qual item eu estaria perguntando seu attributo, lembrando que eu obtenho isso com a key ##-- --## quando se pesquisa pelo atributo do item, o mais importante seria a chave que está contido no item, a key, no caso é uma {string} doItemSetAttribute(uid, key, value) -- ## oque é set? set seria algo como "definir", usamos para "dar" algo, traduzido fica definir atributo no item doItemSetAttribute(uid, key, value) -- ## uid novamente! seria o item a ser setado o attributo, chave, será algo que iremos colocar, como "defense" ## -- -- ## oque seria value? value seria o valor, como 1, etc já que é defense podemos fazer se tiver mais, defende mais ##  
    doItemEraseAttribute(uid, key) --## oque é do? do seria como "faça", na tradução seria, faça um corte no atributo do item doItemEraseAttribute(uid, key) --## uid novamente! será o item, a chave seria aque você setou no item, essa função retira o attributo!. ##--  
    exemplo dos Attribute sendo usados
     
    -- ## exemplo de catch seria o charmander ## -- Ensino = {"Charmander", 3200, 1515, 4} -- ## fazemos de exemplo que 3200 seria vida do charmander e 1515 seria o id do item do seu portfoil e 4 o sexo item = doCreateItemEx(12664, 1) -- ## 12664 seria o id da pokebola, 1 seria a quantia doPlayerAddItemEx(cid, item, true, CONST_SLOT_BACKPACK) doItemSetAttribute(item, "poke", 3200) -- ## vida do pokemon ## -- doItemSetAttribute(item, "nome", "Charmander") -- ## nome do pokemon ## -- doItemSetAttribute(item, "portrait", 1515) -- ## portrait do pokemon ## -- doItemSetAttribute(item, "gender", 4) -- ## 4 seria o sexo dele ## -- -- ## claro que ná hora de fazer seu system de catch irá ser assim, mas isso é apenas um exemplo de como irá funcionar ## -- -- ## lembrando que o valor do doItemSetAttribute pode ser além de numero. ## --  
                                               
                                                                     
     
     
                                                      Espero que muitos pratiquem ai, e que vocês tenham conseguido entender o tópico e se aventurem para usar a função!.
                                                                                                                                                 bye
     
  6. Gostei
    Sun deu reputação a luanluciano93 em Compilando e configurando servidor TFS 1.x no Ubuntu 22.04   
    Olá, esse tutorial é uma parte do tópico principal: "Tutorial completo de infraestrutura para montar um servidor TFS 1.x no Ubuntu 22.04" ... 
     
    Aqui ensinaremos como compilar o código fonte do TFS na máquina LINUX e posterior configurar o servidor.
     
    PASSO 1 - COMPILANDO TFS NO UBUNTU
     
    Primeiramente, devemos instalar os softwares necessários. O comando a seguir instalará o CMake, um compilador e as bibliotecas usadas pelo TFS. Após usar o comando digite Y para aceitar a instalação.
    sudo apt install cmake build-essential libluajit-5.1-dev libmysqlclient-dev libboost-system-dev libboost-iostreams-dev libboost-filesystem-dev libpugixml-dev libcrypto++-dev libfmt-dev libboost-date-time-dev  
    Caso ainda não tenha criado a pasta do servidor (como foi dito no tutorial de instalação do PHP), use o comando a seguir para criar a pasta:
    sudo mkdir /home/otserv  
    E depois vá até a pasta usando o comando: 
    cd /home/otserv  
    Agora, usando o WinSCP vá até a pasta /home/otserv/ e jogue a pasta de seu servidor ai dentro ... 
     
    Antes deve estar assim: (se você seguiu o tutorial de instalação do PHP)
       
     
    Depois, os arquivos transferidos devem ser esses!

     
    Caso você não tenha os arquivos necessários, use:
    - TFS atual: https://github.com/otland/forgottenserver
    - TFS Nekiro's 8.60 Downgrade: https://github.com/nekiro/TFS-1.5-Downgrades/tree/8.60
     
    Após transferido os arquivos, use o comando abaixo para criar a pasta BUILD e entrar nela: 
    mkdir build && cd build E depois, use o comando do compilador: 
    cmake ..  
    Agora use o comando para compilar o código fonte do TFS:
    make  
    E pronto, o código fonte foi compilado e gerou um arquivo "tfs", agora use o comando a seguir para mover o TFS para a pasta do servidor e voltar para a pasta anterior.
    mv tfs .. && cd .. Ficando assim na pasta "otserv": 

     
    PASSO 2 - IMPORTANDO DATABASE E AJUSTANDO CONEXÃO PELO CONFIG.LUA
     
    Entre em seu phpmyadmin pelo navegador (IP/phpmyadmin, ou o outro destino que você escolheu conforme o tópico de instalação do phpmyadmin) 

    Depois clique em "novo" para criar um novo banco de dados:
     
     
    E depois de digitar o nome do novo banco de dados, clique em "criar": 

     
    Agora clique em "IMPORTAR" e depois em "escolher arquivo":

    E então selecione o arquivo padrão de database. Se você não tiver um arquivo padrão, use a do TFS: https://raw.githubusercontent.com/otland/forgottenserver/master/schema.sql
     
    E por fim, clique em EXECUTAR.

     
     
    No arquivo config.lua.dist você deve ajustar o dados para a conexão com o banco de dados: 
     
    -- MySQL mysqlHost = "127.0.0.1" mysqlUser = "forgottenserver" mysqlPass = "" mysqlDatabase = "forgottenserver" mysqlPort = 3306 mysqlSock = ""  
    (você pode incluir o caminho do mysqlSock para mysqlSock = "/var/run/mysqld/mysqld.sock"
     
    PASSO 3 - LIGANDO SEU SERVIDOR TFS NO UBUNTU E CRIANDO ARQUIVO AUTO RESTART
     
    Para prosseguirmos será necessária a instalação do SCREEN em sua máquina, veja o tutorial que explica o que ele é, para que server e ensina instala-lo: AQUI.
     
    Após a instalação, vamos criar um SCREEN para rodar o servidor chamada TFS ... 
    screen -S TFS  
    E após, usando o WinSCP, vá até a pasta do seu servidor em /home/otserv/ e crie um arquivo chamado "restart.sh" e coloque isso dentro dele:
    #!/bin/bash # to get 'ts' command: sudo apt install moreutils # to get 'crc32' command: sudo apt install libarchive-zip-perl BINARY_NAME=tfs MYSQL_USER=xxxx MYSQL_PASS=yyyy MYSQL_DATABASE=zzzz mkdir console mkdir crashlog mkdir mysql_backup # Permitir despejos de nucleo ulimit -c unlimited # Laco principal while true; do     # Backup do banco de dados, e o melhor momento para fazer a copia do banco de dados, o OTS esta offline com certeza, entao nao pode haver nenhum clone de item.     mysqldump -u $MYSQL_USER -p$MYSQL_PASS $MYSQL_DATABASE > mysql_backup/`date '+%Y-%m-%d_%H-%M'`.sql     # Compactar em gzip com mais de 3 dias.     find console/ -name "*.log" -mtime +3 -print -exec gzip -f {} \;     find crashlog/ -name "*.bin" -mtime +3  -print -exec gzip -f {} \;     find crashlog/ -name "*.core" -mtime +3  -print -exec gzip -f {} \;     find mysql_backup/ -name "*.sql" -mtime +3  -print -exec gzip -f {} \;     BINARY_WITH_HASH=`date '+%Y-%m-%d_%H-%M'`_`crc32 $BINARY_NAME`     # copie o arquivo binário atual, você precisa do binário desde o momento da falha para executá-lo no gdb.     cp $BINARY_NAME crashlog/$BINARY_WITH_HASH.bin     # iniciar servidor     # se o seu servidor já imprime a data com cada linha no console, você pode remover "| ts '%Y-%m-%d_%H-%M-%.S'"     stdbuf -o 0 ./$BINARY_NAME 2>&1 | ts '%Y-%m-%d_%H-%M-%.S' | tee 'console.log'     cat 'console.log' >> 'console/console_'`date '+%Y-%m-%d'`'.log';     mv core crashlog/$BINARY_WITH_HASH.core     echo INICIAR A ESPERA POR 3 SEGUNDOS, PRESSIONE CTRL+C PARA DESLIGAR O RESTARTER     sleep 3     echo FIM DA ESPERA done  
    Em seguida, dar permissão ao arquivo "restart,sh" com o comando: 
    sudo chmod 777 -R restart.sh  
    Logo, instale os programas necessários para o restart funcionar corretamente:
    sudo apt install moreutils sudo apt install libarchive-zip-perl Posterior, configure o restart.sh com os dados corretos para a conexão SQL: troque onde esta xxxx, zzzz, yyyy

    Para o restarter criar o arquivo core é necessário desativar o serviço apport no sistema com o comando:
    sudo systemctl stop apport.service sudo systemctl disable apport.service Depois de desativar, use o comando a seguir para ver se está ativo o core, você terá que ter como resposta: core
    cat /proc/sys/kernel/core_pattern  
    E por fim, iniciar o uso do arquivo "restart.sh" com o comando:
    ./restart.sh  
    A princípio é isso!
     
    Siga as atualizações no tópico principal: "Tutorial completo de infraestrutura para montar um servidor TFS 1.x no Ubuntu 22.04" ... 
     
     
    Fontes: 
    - https://github.com/otland/forgottenserver/wiki/Compiling-on-Ubuntu
     
     
     
     
     
  7. Gostei
    Sun deu reputação a luanluciano93 em Instalando a MariaDB no Ubuntu 22.04   
    Olá, esse tutorial é uma parte do tópico principal: "Tutorial completo de infraestrutura para montar um servidor TFS 1.x no Ubuntu 22.04" ... 

    Ele faz parte da 2º instalação da pilha LEMP no Ubuntu 22.04: a MariaDB.
     
    PASSO 1 - COMO INSTALAR O SERVIDOR DE BANCO DE DADOS MariaDB
     
    O MariaDB é um sistema de gerenciamento de banco de dados de código aberto, usado com frequência como uma alternativa ao MySQL. Ele é desenvolvido por ex-membros da equipe do MySQL que estão preocupados que o Oracle possa transformar o MySQL em um produto de código fechado.

    Digite o seguinte comando para instalar o MariaDB no Ubuntu 22.04, após iniciar, é necessário digitar Y para prosseguir ... 
    sudo apt install mariadb-server Depois de instalado, o servidor MariaDB deve ser automaticamente visualizado.
     
    Use o comando a seguir para verificar seu status: 
    sudo systemctl status mariadb Irá aparecer o seguinte resultado:

     
    Como vocês podem ver em verde: active (running), ou seja, está ativo e funcionando.
     
    Você pode também conferir a versão do MariaDB instalado com o comando: 
    mariadb --version Eu obtive como resposta em 05JUL22: mariadb Ver 15.1 Distrib 10.6.7-MariaDB
     
    PASSO 2 - CONFIGURANDO O MARIADB
     
    O próximo passo será executar o script de segurança incluído. Esse script modifica algumas das opções padrões menos seguras referentes, por exemplo, a logins root remotos e usuários de exemplo.
     
    Execute o script de segurança:
    sudo mysql_secure_installation Isso levará você a uma série de prompts onde é possível fazer algumas alterações nas opções de segurança de sua instalação do MariaDB.

    O primeiro prompt pedirá que digite a senha atual do root do banco de dados. Como ainda não configuramos uma senha, pressione ENTER para indicar “nenhuma”,

     
    Em seguida, o sistema irá perguntar se você quer usar o unix_socket, pois ele garante que ninguém possa fazer o login no usuário root do MARIADB sem a devida autorização. Digite que sim (Y)

    Ativar a autenticação unix_socket? [S/n]
     
    Em seguida, digite Y para definir a senha raiz do servidor MariaDB.


    ATENÇÃO: A SENHA QUE VOCÊ DEFINIR SERÁ A SENHA DO SERVIDOR SQL, ELA SERÁ USADA PARA CONEXÃO DO  SITE E DO SERVIDOR AO BANCO DE DADOS! GUARDE-A BEM!

    Em seguida, você pode pressionar ENTER (com ENTER é escolhido a resposta padrão, que sempre é mostrada em maiúsculo. Nesse caso será o Y) para responder a todas as perguntas restantes:


    - Remover usuários anônimos? [Sim/n]
    - Não permitir login root remotamente? [Sim/n]
    - Remover banco de dados de teste e acesso a ele? [Sim/n]
    - Recarregar as tabelas de privilégios garantirá que todas as alterações feitas até agora entrará em vigor imediatamente. Recarregar tabelas de privilégios agora?  [Sim/n]

    Esta etapa é um requisito básico para a segurança do banco de dados MariaDB.
     
    A princípio é isso!
     
    Siga as atualizações no tópico principal: "Tutorial completo de infraestrutura para montar um servidor TFS 1.x no Ubuntu 22.04" ... 
     
     
    Fontes:
    - https://conectandonet.com.br/blog/como-instalar-a-pilha-lemp-no-ubuntu-20-04-server-desktop/
    - https://www.digitalocean.com/community/tutorials/how-to-install-mariadb-on-ubuntu-20-04-pt
     
     
     
     
     
     
  8. Gostei
    Sun deu reputação a luanluciano93 em Instalando o NGINX no Ubuntu 22.04   
    Olá, esse tutorial é uma parte do tópico principal: "Tutorial completo de infraestrutura para montar um servidor TFS 1.x no Ubuntu 22.04" ... 

    Ele faz parte da 1º instalação da pilha LEMP no Ubuntu 22.04: o NGINX.
     
    PASSO 1 - COMO INSTALAR O SERVIDOR WEB NGINX
     
    Para mostrar páginas Web aos visitantes do seu site, vamos usar o Nginx, um servidor Web de alto desempenho. Usaremos o seguinte comando para instalar o Nginx:
    sudo apt install nginx Quando solicitado, digite Y para confirmar se deseja instalar o Nginx. Assim que a instalação terminar, o servidor web Nginx estará ativo e em execução em sua máquina.
     
    Agora confira o status do Nginx para ver se ele está corretamente ativo: 
    sudo systemctl status nginx Deve aparecer algo assim:
     
     
    Como vocês podem ver em verde: active (running), ou seja, está ativo e funcionando.
     
    Você pode também conferir a versão do nginx instalado com o comando: 
    nginx -v Eu obtive como resposta em 04JUL22: nginx version: nginx/1.18.0 (Ubuntu)
     
    PASSO 2 - LIBERANDO AS PORTAS NO FIREWALL
     
    Aqui a resposta seria bem ampla, pois você deve saber qual o tipo de firewall está usando. 
     
    Se você tiver o firewall UFW habilitado, você precisará permitir conexões com o Nginx. O Nginx registra alguns perfis diferentes de aplicações no UFW após a instalação. Para verificar quais perfis do UFW estão disponíveis, execute:
    sudo ufw app list Irá aparecer as opções:

     
    É recomendável que você habilite o perfil mais restritivo que, ainda assim, permitirá o tráfego que você precisa. Caso você ainda não tenha configurado o SSL (HTTPS) para seu servidor, você precisará apenas permitir o tráfego HTTP regular na porta 80 usando o comando:
    sudo ufw allow 'Nginx HTTP'  
    Verifique a mudança executando:
    sudo ufw status  
    No google cloud o firewall UFW é desativado por padrão, então ative-o antes com o comando e posterior digite Y para confirmar: 
    sudo ufw enable O google cloud é necessário também liberar as portas de acesso no firewall que é administrado pela plataforma do site deles, como explicado neste tutorial: GOOGLE COUD PLATAFORM.
     
     
    PASSO 3 - TESTANDO SE O NGINX ESTÁ FUNCIONANDO
     
    Entre pelo IP ou pelo DOMINIO da sua máquina pelo navegador, se aparecer a seguinte página está tudo correto.

     
    Caso não carregue esta página, você provavelmente está com bloqueio no firewall (firewall diferente dos que eu citei acima)
     
    A princípio é isso!
     
    Siga as atualizações no tópico principal: "Tutorial completo de infraestrutura para montar um servidor TFS 1.x no Ubuntu 22.04" ... 
     
     
    Fontes: 
    - https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-20-04-pt
    - https://conectandonet.com.br/blog/como-instalar-a-pilha-lemp-no-ubuntu-20-04-server-desktop/
     
     
     
  9. Gostei
    Sun recebeu reputação de SkidMaster em Znoteaac 2 como editar?   
    Este tópico foi movido para a seção de Suporte Otserv Alternativo
  10. Gostei
    Sun deu reputação a MadaraOt em [NTO] Base NTO Server (WAR)   
    Fala Pessoal hoje venho trazer a base do NTO Server. bom eu usei ela por um tempo e me ajudou muito espero que ajude vocês também  
     
    OBS:  Eu não achei o cliente certo então usei um aqui que serviu sem bugs só tem que arrumar umas talkactions estou parando de editar NTO então não irei arrumar os bugs originais SORRY
    OBS2: Usando cliente do WAR tem alguns bugs no jutsu nada que 30 min editando não arrume!
     
     
    Bom aqui vai algumas imagens!
     
    Edit: Download da Database e config.lua em sqlite 
    Conta God:
    Login:30
    Senha:03
     
    Downloads:
    Cliente: Cliente NTO Comet
    Server: [BASE] NTO Server
    Database: Forgottenserver.s3db
    Config: Config.lua
     
    Scan:
    Cliente: Cliente NTO Comet 0/55
    Server: [BASE] NTO Server 10/51 -- OBS:Baixa quem quer não sei porque tem tudo isso 
    Database: Forgottenserver.s3db 0/54
    Config: Config.lua 0/53
     
    Créditos:
    NTO War: Pela base e o cliente!
    Kojack414: Pela base tbm!
     
  11. Gostei
    Sun deu reputação a Alexv45 em Tema Pirata Custom   
    Olá a todos,
     
    Hoje tenho o prazer de anunciar que acabei de terminar um tema do pirata disponível para todos no ZnoteAAC.
     
    https://imgur.com/bQGS2f9
     
    Veja a web ao vivo: Clique Aqui
    Download ( tema official ) : Clique Aqui
     
    Créditos: Motor: ZnoteAAC
    Layout: ZnoteAAC Criado por Alex45
     

     
    Em formação:
     
    O Fundo é um vídeo. Ser um fundo de vídeo significa que cada conteúdo deve ser, se for maior que o tamanho da página em um overflow-scroll, consulte em shop.php para ver o código html dentro do estilo.
    Testado em TFS 1.3, 12.64.
  12. Gostei
    Sun deu reputação a Alexv45 em CyberPulse Layout por Alex45   
    Olá a todos,
     
    Hoje tenho o prazer de anunciar que vim compartilhar o Layout CyberPulse que criei na versão ZnoteAAC.
     
    Se quiser editar alguma coisa, você encontrará dois cabeçalhos e rodapés diferentes, um dedicado a Index.php e os outros para o resto das páginas.
     
    Veja a web ao vivo: Clique Aqui
    Tema Official: Clique Aqui
    Link para o Github: Clique aqui
     
    Créditos:
    Criado por Alex45
     
    Em formação:
    Este Layout possui um modo Dia e Noite, que permite converter o fundo preto em branco e vice-versa.
     
    VIDEO:
    https://imgur.com/eGyctuB
     
     
    Index.PHP

     
    Index.HTML

     
     
    Day & Night Mode:

     

     
     
  13. Curtir
    Sun recebeu reputação de Jnofom em Pedido de module shop igual do pda só que para tfs 1.2   
    Este tópico foi movido para a seção de Suporte Otserv.
  14. Curtir
    Sun recebeu reputação de figueiredo.ceduardo em Dúvidas de Iniciante   
    Este tópico foi movido para a seção de Suporte Otserv.
  15. Gostei
    Sun deu reputação a najatheus em Aura Sistem ( Tfs 1.x )   
    Sistema funciona da seguinte forma, ao digitar : !aura on, a aura do player vai ligar, enquanto ela estiver ligada o player vai ficar regenerando a vida dele, ao digitar : !aura off, ela vai desligar e o player vai parar de regenerar a vida dele, vou estar deixando um video aqui em baixo 

     Agora vamos colocar o codigo

    Em data/talkactions/script/, crie um arquivo chamado aura.lua, e coloque isso dentro dele :
     
    local config_aurea = { effect = 4; -- efeito que vai ficar girando no player effect_health = 162; -- efeito qnd curar o player level_use = { -- level que vai ser usado (min/max) min = 1, max = 600, } ; health = 10; -- tanto que vai curar por time configurado pos_aurea = { -- não mexa [1] = {x = 0, y = -1}; [2] = {x = 1, y = -1}; [3] = {x = 1, y = 0}; [4] = {x = 1, y = 1}; [5] = {x = 0, y = 1}; [6] = {x = -1, y = 1}; [7] = {x = -1, y = 0}; [8] = {x = -1, y = -1}; }; storage_pos = 1547637649; -- não mexa e nem repita esse valor em outro script!! storage = 165477963; -- não mexa e nem repita esse valor em outro script!! tempo_aurea = 100; -- tempo da aurea para passar em cada posição } local function calculePosAurea(player_uid) local player = Player(player_uid) if(not(player))then return(nil) end if(player:getStorageValue(config_aurea.storage) <= 0)then return(nil) end if(player:getStorageValue(config_aurea.storage_pos) >= 8)then player:setStorageValue(config_aurea.storage_pos, 0) end player:setStorageValue(config_aurea.storage_pos, player:getStorageValue(config_aurea.storage_pos) + 1) return(player:getStorageValue(config_aurea.storage_pos)) end local function posAurea(player_uid) local player = Player(player_uid) if(not(player))then return(nil) end if(player:getStorageValue(config_aurea.storage) <= 0)then return(nil) end local pos_x = player:getPosition().x local pos_y = player:getPosition().y local pos_z = player:getPosition().z local aa = calculePosAurea(player_uid) local pos = Position(pos_x + config_aurea.pos_aurea[aa].x, pos_y + config_aurea.pos_aurea[aa].y, pos_z) if(not(pos))then return(nil) end return(pos) end local function aurea(player_uid) local player = Player(player_uid) if(not(player))then return(nil) end if(player:getStorageValue(config_aurea.storage) <= 0)then return(nil) end player:addHealth(config_aurea.health) player:getPosition():sendMagicEffect(config_aurea.effect_health) local position = posAurea(player_uid) position:sendMagicEffect(config_aurea.effect) addEvent(aurea, config_aurea.tempo_aurea, player_uid) end function onSay(player, words, param) if(words == "!aura on")then if(player:getLevel() > config_aurea.level_use.max)then return(not(player:sendTextMessage(MESSAGE_STATUS_SMALL, player:getName() .. " seu level(" .. player:getLevel() .. ") precisa ser maior(" .. config_aurea.level_use.max))) end if(player:getLevel() < config_aurea.level_use.min)then return(not(player:sendTextMessage(MESSAGE_STATUS_SMALL, player:getName() .. " seu level(" .. player:getLevel() .. ") precisa ser menor(" .. config_aurea.level_use.max))) end if(player:getStorageValue(config_aurea.storage) >= 1)then return(not(player:sendTextMessage(MESSAGE_STATUS_SMALL, player:getName() .. " Você ja esta com a aurea ligada"))) end player:setStorageValue(config_aurea.storage, 1) player:setStorageValue(config_aurea.storage_pos, 0) aurea(player.uid) elseif(words == "!aura off")then player:setStorageValue(config_aurea.storage, 0) end return(false) end
     
    Agora em data/talkactions/talkactions.xml, abra ele e coloque :

     
    <talkaction words="!aura on;!aura off" script="aura.lua"/>
    Agora em data/creaturescript/script/login.lua, abra ele e embaixo de :
     
    player:sendTextMessage(MESSAGE_STATUS_DEFAULT, loginStr)
    Coloque : 
     
    player:setStorageValue(165477963, 0) player:setStorageValue(1547637649, 0)
     
    Creditos : Sr. Naja

    20210927_210547.mp4  
  16. Gostei
    Sun deu reputação a Alexv45 em Lynch Theme   
    Olá,
     
    Hoje venho apresentar a vocês o Lynch Theme que acabei de terminar funcional para Znote AAC
     
    Ver em vivo ( live preview ): Pulse aqui
    Foro Official: Pulse Aqui
     
    Baixe com as últimas atualizações: GitHub Open Games Community
     

     

     

     

  17. Gostei
    Sun deu reputação a GuiAmaro em Benedetta - O que ficou depois das pragas   
    Estou criando uma cidade para um amigo que deseja adicioná-la a um projeto novo com seus amigos e fiz inspirada na história de Noé e as pragas do Egito.
    Onde suas cavernas são reflexo da ira de Deus sobre os pecadores, história relatada no velho testamento da bíblia já o vilarejo e o que há no Térreo é reflexo da bondade de Deus sobre os que não se deixaram levar pela maldade e pecados dos humanos que habitavam o local antes do acontecido.
    Uma das cavernas retrata a praga que tornou as águas em sangue e logo abaixo uma área cujo o minimap desenha uma Rã retratando mais uma das 10 pragas do Egito, logo a cima dessas áreas existe uma natureza tentando renascer desse Caos causado pelos pecados dessas pessoas mas tudo que nasce morre e é envenenado pelo mal que habitou por ali.
    Já no térreo da cidade cresce montanhas lindas, uma natureza esplendorosa e um vilarejo humilde, organizado sem ganância ou riquezas mas com tudo que é necessário para viver dentro da Ilha. 
     
    Vilarejo







     
    Térreo
     




     
    Cavernas/Tumba














     
     

  18. Gostei
    Sun deu reputação a Rogex Joyz em Rogex - Mapping show off   
    Me aventurando nesse mundo de criar mapas. Afinal, nem yoga melhora tanto a paz de espírito assim como criar uns mapinhas ?
    Nas fotos, são prints do meu servidor 8.60 em desenvolvimento que venho fazendo. Há outras partes fantásticas nele, porém não são de minha autoria então não mostrarei por hora.
    Podem descascar a banana em mim, eu sou apenas uma camponesa iniciante ?






  19. Gostei
    Sun deu reputação a Cat em (8.60) Macalania (Greed Ot) - Continente Ice, Cidade + Hunts   
    Informações:
    Autor: Ralke (felipe23#1113)
    Créditos pela liberação do mapa: Mapping & Spriting Community. Clique Aqui para entrar!

     

    Essa cidade é pra quem gosta de acessos secretos, muitos andares com armadilhas e passagens que levam até vários locais de caça, é uma boa cidade pra usar como a principal em um servidor de Tibia, juntamente com salas de teleports e outros continentes complementando.
     
    Download: macalania.rar
     
    IMAGENS:

     

     

  20. Gostei
    Sun deu reputação a marcoshps11 em Bot Discord - Merlin   
    * Áudio de saudação *
     
     
    O intuito deste bot é auxiliar jogadores de RPG interpretativo, porém podendo ser utilizado como um atrativo dentro do discord do seu projeto
     
    Possui algumas funções como:
    Criação de ficha do personagem Combate contra monstros Level UP Inventário do personagem Set para o personagem entre outras funções  
    É possível sincronizar com seu otserver e implementar ainda mais funções e atrativos para o chat
    * Este projeto ainda não está na sua versão final, é apenas um molde para desenvolvimento *
     
    Para o tópico não ficar muito longo, você pode conferir ele no link:

    https://github.com/marcoshps/Merlin-Bot
     
    algumas prints:
     
     
      
  21. Gostei
    Sun deu reputação a Johncore em Cidade Asylum 12.70   
    Asylum é uma cidade Custom bem legal que você encontra nos servidores Gunzodus e Exodus,
    Por ter esse conteúdo resolvi compartilhar com a comunidade OpenTibia que curte a cidade e gostaria de ter em seu servidor.
     
    Em breve estarei postando novos mapas aqui no fórum e o OTB compatível.
     
    Creditos: 
    gunzodus
    johncorex
    asylum.otbm asylum-house.xml asylum-spawn.xml
  22. Gostei
    Sun recebeu reputação de Claudio Marcio em (POKETIBIA) Item - Reward Quest   
    @Denker Parabéns pelo script, mas existem pontos que dá pra melhorar nele, segue abaixo!

     
    function OnUse(cid,item,fromPosition,item2,toPosition) local cfg = { -- crie uma tabela para configurar, assim fica mais "limpo" storageQuest = 12, -- nome de variavel não começa com maiúscula earnedItem = 12, count = 11, levelMin = 20, colorMsg = "Orange" } if ( getPlayerStorageValue(cid, cfg.storageQuest) > 0 ) then doPlayerSendTextMessage(cid, MESSAGE_TYPES[cfg.colorMsg], "You have already completed this quest!.") return true end if ( getPlayerLevel(cid) < cfg.levelMin ) then -- validação caso o player não tenha level minimo doPlayerSendTextMessage(cid, MESSAGE_TYPES[cfg.colorMsg], "You don't have required level(".. cfg.levelMin ..") to pass!.") return true end doPlayerSendTextMessage(cid, MESSAGE_TYPES[cfg.colorMsg], "You found "..getItemNameById(cfg.earnedItem).. " ".. cfg.count .."x!") doPlayerAddItem(cid, cfg.earnedItem, cfg.count) setPlayerStorageValue (cid, cfg.storageQuest, 1) return true end dessa forma você tem um código mais legível, espero que entenda isso, e parabéns pela iniciativa de ajudar o fórum!
    Aquele abraço, REP+
  23. Gostei
    Sun deu reputação a Denker em (POKETIBIA) Item - Reward Quest   
    Em Data/Actions/Scripts, crie um arquivo.lua e coloque dentro:
     
    -- Developed by: Denker function OnUse(cid,item,fromPosition,item2,toPosition) Storage = -- Valor da storage que irá ser setada no player ItemID = -- Id do item Name = -- Nome do item Quantidade = -- Quantidade do item Level = -- Level requerido para pegar o item if getPlayerLevel(cid) >= Level and getPlayerStorageValue (cid,Storage)== -1 then doPlayerSendTextMessage(cid,25,"You found"..Quantidade....Name.."!") -- Mensagem que irá aparecer quando o player coletar o item doPlayerAddItem(cid, ItemID, Quantidade) setPlayerStorageValue (cid,Storage,1) elseif getPlayerLevel(cid) <= Level then doPlayerSendTextMessage(cid,25,"You need to level"..Level.."to collect this item") -- Mensagem caso o player não tenha o level necessário para pegar o item elseif getPlayerStorageValue(cid, Storage) >= 1 then doPlayerSendTextMessage(cid,25,"You have already collected this item") -- Mensagem caso o player já tenha pego o item end return true end Em Data/Actions/Actions.xml, coloque dentro:
     
    <action actionid="ID" event="script" value="Arquivo.lua"/>  

  24. Gostei
    Sun recebeu reputação de koyotestark em [AJUDA] Erro ao compilar TFS 0.4   
    @underpunk
    Dev-cpp
    baixa esse dev ai, provavelmente está faltando as libs.
  25. Curtir
    Sun recebeu reputação de poko360 em Mostrar os segundos que faltam pro boss nascer   
    local colorMsg = "orange" local tableBoss = { ["Amazon"] = {seconds = 10, newBoss = "Demon"} } local function timer(position, duration, color) for i = 0, (duration - 1) do addEvent(function() doSendAnimatedText(position, tostring(duration - i), color) end, i * 1000) end end function onKill(cid, target, damage, flags) if isPlayer(target) then return true end local boss = tableBoss[getCreatureName(target)] if not boss then return true end local position = getThingPos(target) doPlayerSendTextMessage(cid, MESSAGE_TYPES[colorMsg], "The boss will be born in " .. boss.seconds .. " seconds.") timer(position, boss.seconds, COLOR_RED) addEvent(doCreateMonster, boss.seconds * 1000, boss.newBoss, position) return true end
    creaturescript.xml
     
    <event type="kill" name="event nome" event="script" value="script name.lua"/> login.lua
    registerCreatureEvent(cid, "nome do evento")  
    @poko360 pelo que entendi foi isso, não entendi a necessidade de colocar verificação para não criar dois boss se você matou o anterior.

Informação Importante

Confirmação de Termo