Ir para conteúdo

Tacabala22

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    Tacabala22 deu reputação a luanluciano93 em Instalando o PHPMYADMIN 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 instalar o PHPMYADMIN.
     
    PASSO 1 - COMO INSTALAR O PHPMYADMIN
     
    Embora muitos usuários precisam da funcionalidade de um sistema de gerenciamento de banco de dados (como o MariaDB, por exemplo), talvez não se sintam à vontade para interagir com o sistema unicamente a partir do prompt. Diante disto, o phpMyAdmin foi criado para que os usuários possam interagir com o MariaDB através de uma interface Web.

    - Neste guia, discutiremos como instalar e proteger o phpMyAdmin para que você possa usá-lo com segurança para gerenciar seus bancos de dados em um sistema Ubuntu 22.04.
     
    Execute o seguinte comando para instalar o phpmyadmin e posterior digite Y para aprovar a instalação. 
    sudo apt install phpmyadmin  
    Note que o processo de instalação exige que você faça algumas escolhas para configurar o phpMyAdmin corretamente. Analisaremos essas opções em instantes: 
     
    - Você será solicitado a escolher um servidor da Web para configurar. Como estamos usando o Nginx, devemos apenas pressionar TAB, depois de OK e depois avançar para a próxima etapa.

     
    Depois disso, você será perguntado se deve usar dbconfig-common para configurar o banco de dados do aplicativo. Selecione YES.

     
    Você também será solicitado a criar uma senha. Aqui você pode deixar em branco e obter uma senha aleatória no phpMyAdmin. Apenas aperte ENTER.
     
    A instalação terminará. Você precisará criar um atalho dos arquivos de instalação para o diretório raiz do seu servidor, para que o servidor nginx encontre e atenda corretamente os arquivos phpMyAdmin: 
    sudo ln -s /usr/share/phpmyadmin /home/www  
    PASSO 2 - CRIANDO USUÁRIO E SENHA PARA O PHPMYADMIN

    - Nas última versões do servidor MariaDB você não poderá fazer login no phpMyAdmin usando a conta root do MariaDB e receberá um erro "Acesso negado para usuário 'root'@'localhost'".
    - Em vez disso, você deve criar uma nova conta de "super usuário" apenas para o phpMyAdmin.

    Para criar um "super usuário" faça o login no MariaDB pelo terminal usando a senha de root do MariaDB:
    sudo mariadb  
     Uma vez logado, adicione um novo "super usuário" MariaDB com o nome de usuário de sua escolha. Neste exemplo, defina o nome do novo usuário onde está "tester" e defina a nova senha deste usuário:
    CREATE USER 'tester'@'localhost' IDENTIFIED BY 'nova_senha_aqui';  
    Agora,  conceda privilégios de "super usuário" ao seu novo usuário "tester" (não se esqueça de mudar o nome do usuário no comando):
     Uma vez logado, adicione um novo "super usuário" MariaDB com o nome de usuário de sua escolha. Neste exemplo, defina o nome do novo usuário onde está "tester" e defina a nova senha deste usuário:
    GRANT ALL PRIVILEGES ON *.* TO 'tester'@'localhost';  
    E por fim, saia do MariaDB com o comando:
    exit  
    Agora você deve poder acessar o phpMyAdmin usando esta nova conta de usuário e senha.
     
    PASSO 3 - PROTEGENDO O PHPMYADMIN
     
    Vá até /home/www onde está o atalho do phpmyadmin e renomeie a pasta para um nome bem incomum do seu gosto, como por exemplo: vamolameuparcacadeophpmyadmin

    Desta forma, para acessar o phpmyadmin do navegador terá que usar o endereço IP/vamolameuparcacadeophpmyadmin

    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-and-secure-phpmyadmin-on-ubuntu-20-04-pt
    - https://www.letscloud.io/community/como-instalar-e-proteger-o-phpmyadmin-com-nginx-em-um-ubuntu
    - https://devanswers.co/install-secure-phpmyadmin-nginx-ubuntu-20-04/
     
    Editado agora por luanluciano93 (veja o histórico de edições)
  2. Gostei
    Tacabala22 recebeu reputação de FeeTads em (Resolvido)[Demon OAK] TFS 1.5   
    Salve galera, Tudo na paz?
    Utilizo como base do meu servidor o TFS 1.5 Downgrade 8.6 do NEKIRO , baixei esse servidor aqui para remover quests e utilizar no meu.
     
    Copiei os arquivos.
    data\actions\scripts\quests\demon oak
    demonOak.lua
    local config = { demonOakIds = {8288, 8289, 8290, 8291}, sounds = { 'MY ROOTS ARE SHARP AS A SCYTHE! FEEL IT?!?', 'CURSE YOU!', 'RISE, MINIONS, RISE FROM THE DEAD!!!!', 'AHHHH! YOUR BLOOD MAKES ME STRONG!', 'GET THE BONES, HELLHOUND! GET THEM!!', 'GET THERE WHERE I CAN REACH YOU!!!', 'ETERNAL PAIN AWAITS YOU! NICE REWARD, HUH?!?!', 'YOU ARE GOING TO PAY FOR EACH HIT WITH DECADES OF TORTURE!!', 'ARGG! TORTURE IT!! KILL IT SLOWLY MY MINION!!' }, bonebeastChance = 100, bonebeastCount = 10, waves = 15, questArea = { fromPosition = {x = 144, y = 257, z = 7}, toPosition = {x = 163, y = 269, z = 7} }, summonPositions = { {x = 152, y = 260, z = 7}, {x = 149, y = 263, z = 7}, {x = 158, y = 263, z = 7}, {x = 157, y = 259, z = 7}, {x = 158, y = 267, z = 7}, {x = 147, y = 262, z = 7}, {x = 160, y = 261, z = 7}, {x = 155, y = 267, z = 7} }, summons = { [8288] = { [10] = {'Spectre', 'Blightwalker', 'Braindeath', 'Demon', 'Braindeath', 'Demon', 'Braindeath', 'Demon'}, [15] = {'Betrayed Wraith', 'Betrayed Wraith', 'Braindeath', 'Demon'} }, [8289] = { [10] = {'Plaguesmith', 'Plaguesmith', 'Blightwalker', 'Plaguesmith', 'Plaguesmith', 'Dark Torturer', 'Blightwalker', 'Dark Torturer', 'Blightwalker'}, [15] = {'Dark Torturer', 'Blightwalker', 'Braindeath', 'Demon', 'Braindeath', 'Demon'} }, [8290] = { [15] = {'Banshee', 'Plaguesmith', 'Hellhound', 'Plaguesmith', 'Hellhound', 'Plaguesmith', 'Hellhound', 'Grim Reaper', 'Grim Reaper'}, [10] = {'Grim Reaper', 'Braindeath', 'Demon'} }, [8291] = { [8] = {'Plaguesmith', 'Hellhound', 'Hellhound', 'Hellhound', 'Hellhound', 'Hand of Cursed Fate', 'Hand of Cursed Fate'}, [12] = {'Undead Dragon', 'Hand of Cursed Fate', 'Braindeath', 'Demon'} } }, storages = { [8288] = Storage.DemonOak.AxeBlowsBird, [8289] = Storage.DemonOak.AxeBlowsLeft, [8290] = Storage.DemonOak.AxeBlowsRight, [8291] = Storage.DemonOak.AxeBlowsFace } } local function getRandomSummonPosition() return config.summonPositions[math.random(#config.summonPositions)] end function onUse(player, item, fromPosition, target, toPosition, isHotkey) if not isInArray(config.demonOakIds, target.itemid) then return true end local totalProgress = 0 for k,v in pairs(config.storages) do totalProgress = totalProgress + math.max(0, player:getStorageValue(v)) end local spectators, hasMonsters = Game.getSpectators(DEMON_OAK_POSITION, false, false, 9, 9, 6, 6), false for i = 1, #spectators do if spectators[i]:isMonster() then hasMonsters = true break end end local isDefeated = totalProgress == (#config.demonOakIds * (config.waves + 1)) if (config.killAllBeforeCut or isDefeated) and hasMonsters then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You need to kill all monsters first.') return true end if isDefeated then player:teleportTo(DEMON_OAK_KICK_POSITION) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'Tell Oldrak about your great victory against the demon oak.') player:setStorageValue(Storage.DemonOak.Done, 1) player:setStorageValue(Storage.DemonOak.Progress, 3) return true end local cStorage = config.storages[target.itemid] local progress = math.max(player:getStorageValue(cStorage), 1) if progress >= config.waves + 1 then toPosition:sendMagicEffect(CONST_ME_POFF) return true end local isLastCut = totalProgress == (#config.demonOakIds * (config.waves + 1) - 1) local summons = config.summons[target.itemid] if summons and summons[progress] then -- Summon a single demon on the last hit if isLastCut then Game.createMonster('Demon', getRandomSummonPosition(), false, true) -- Summon normal monsters otherwise else for i = 1, #summons[progress] do Game.createMonster(summons[progress][i], getRandomSummonPosition(), false, true) end end -- if it is not the 5th or 10th there is only a chance to summon bonebeasts elseif math.random(100) >= config.bonebeastChance then for i = 1, config.bonebeastCount do Game.createMonster('Bonebeast', getRandomSummonPosition(), false, true) end end player:say(isLastCut and 'HOW IS THAT POSSIBLE?!? MY MASTER WILL CRUSH YOU!! AHRRGGG!' or config.sounds[math.random(#config.sounds)], TALKTYPE_MONSTER_YELL, false, player, DEMON_OAK_POSITION) toPosition:sendMagicEffect(CONST_ME_DRAWBLOOD) player:setStorageValue(cStorage, progress + 1) player:say('-krrrrak-', TALKTYPE_MONSTER_YELL, false, player, toPosition) doTargetCombatHealth(0, player, COMBAT_EARTHDAMAGE, -170, -210, CONST_ME_BIGPLANTS) return true end  
    demonOakChest.lua
    local chests = { [9008] = {itemid = 2495, count = 1}, [9009] = {itemid = 8905, count = 1}, [9010] = {itemid = 16111, count = 1}, [9011] = {itemid = 16112, count = 1} } function onUse(player, item, fromPosition, target, toPosition, isHotkey) if chests[item.uid] then if player:getStorageValue(Storage.DemonOak.Done) ~= 2 then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'It\'s empty.') return true end local chest = chests[item.uid] local itemType = ItemType(chest.itemid) if itemType then local article = itemType:getArticle() player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You have found ' .. (#article > 0 and article .. ' ' or '') .. itemType:getName() .. '.') end player:addItem(chest.itemid, chest.count) player:setStorageValue(Storage.DemonOak.Done, 3) end return true end  
    demonOakGravestone.lua
    function onUse(player, item, fromPosition, target, toPosition, isHotkey) if player:getStorageValue(Storage.DemonOak.Done) == 2 then player:teleportTo(DEMON_OAK_REWARDROOM_POSITION) DEMON_OAK_REWARDROOM_POSITION:sendMagicEffect(CONST_ME_TELEPORT) return true end end  
    Actions.xml
    <!-- Demon Oak --> <action itemid="8293" script="quests/demon oak/demonOak.lua" /> <action fromuid="9008" touid="9011" script="quests/demon oak/demonOakChest.lua" /> <action uniqueid="9007" script="quests/demon oak/demonOakGravestone.lua" />  
    data\movements\scripts\quests\demon oak
     
    areaDamage.lua
    function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if not player then return true end if math.random(24) == 1 then doTargetCombatHealth(0, player, COMBAT_EARTHDAMAGE, -270, -310, CONST_ME_BIGPLANTS) end return true end  
    entrance.lua
    function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if not player then return true end -- CHECAR SE JÁ TIVER FEITO if player:getStorageValue(Storage.DemonOak.Done) >= 2 then player:teleportTo(DEMON_OAK_KICK_POSITION) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) return true end -- CHECAR LEVEL MÍNIMO if player:getLevel() < 120 then player:say("LEAVE LITTLE FISH, YOU ARE NOT WORTH IT!", TALKTYPE_MONSTER_YELL, false, player, DEMON_OAK_POSITION) player:teleportTo(DEMON_OAK_KICK_POSITION) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) return true end -- CHECAR SE TA TUDO CERTO Vou usar mensagens pra descobrir qual é o conflito if (#Game.getSpectators(DEMON_OAK_POSITION, false, true, 9, 9, 6, 6) == 0) then if (player:getItemCount(10305) == 0) then if player:getStorageValue(Storage.DemonOak.Progress) < 1 then player:say("You need finish the demons task!", TALKTYPE_MONSTER_YELL, false, player, DEMON_OAK_KICK_POSITION) player:teleportTo(DEMON_OAK_KICK_POSITION) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) return true end end if (player:getItemCount(8293) == 0) then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'Go talk with Odralk and get the Hallowed Axe to kill The Demon Oak.') end player:removeItem(10305, 1) player:teleportTo(DEMON_OAK_ENTER_POSITION) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) player:setStorageValue(Storage.DemonOak.Progress, 1) player:say("I AWAITED YOU! COME HERE AND GET YOUR REWARD!", TALKTYPE_MONSTER_YELL, false, player, DEMON_OAK_POSITION) else player:teleportTo(DEMON_OAK_KICK_POSITION) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) end return true end  
    squares.lua
    local voices = { 'Release me and you will be rewarded greatefully!', 'What is this? Demon Legs lying here? Someone might have lost them!', 'I\'m trapped, come here and free me fast!!', 'I can bring your beloved back from the dead, just release me!', 'What a nice shiny golden armor. Come to me and you can have it!', 'Find a way in here and release me! Pleeeease hurry!', 'You can have my demon set, if you help me get out of here!' } local startUid = 9000 function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if not player then return true end local status = math.max(player:getStorageValue(Storage.DemonOak.Squares), 0) if item.uid - startUid == status + 1 then player:setStorageValue(Storage.DemonOak.Squares, status + 1) player:say(voices[math.random(#voices)], TALKTYPE_MONSTER_YELL, false, player, DEMON_OAK_POSITION) end return true end  
    movements.xml
    <!-- Demon Oak Quest --> <movevent event="StepIn" uniqueid="9000" script="quests/demon oak/entrance.lua" /> <movevent event="StepIn" itemid="8292" script="quests/demon oak/areaDamage.lua" /> <movevent event="StepIn" fromuid="9001" touid="9005" script="quests/demon oak/squares.lua" />  
    data\globalevents\scripts\quests\demon oak
     
    voices.lua
    local questArea = { Position(144, 257, 7), Position(163, 269, 7) } local sounds = { 'Release me and you will be rewarded greatefully!', 'What is this? Demon Legs lying here? Someone might have lost them!', 'I\'m trapped, come here and free me fast!!', 'I can bring your beloved back from the dead, just release me!', 'What a nice shiny golden armor. Come to me and you can have it!', 'Find a way in here and release me! Pleeeease hurry!', 'You can have my demon set, if you help me get out of here!' } function onThink(interval, lastExecution) local spectators, spectator = Game.getSpectators(DEMON_OAK_POSITION, false, true, 0, 15, 0, 15) local sound = sounds[math.random(#sounds)] for i = 1, #spectators do spectator = spectators[i] if isInRange(spectator:getPosition(), questArea[1], questArea[2]) then return true end spectator:say(sound, TALKTYPE_MONSTER_YELL, false, 0, DEMON_OAK_POSITION) end return true end  
    globalevents.xml
    <!-- Demon Oak --> <globalevent name="DemonOakVoices" interval="15000" script="quests/demon oak/voices.lua" />  
    data\lib\quests\demonoak
     
    demon_oak.lua
    DEMON_OAK_POSITION = Position(32716, 32351, 7) DEMON_OAK_KICK_POSITION = Position(32716, 32340, 7) DEMON_OAK_ENTER_POSITION = Position(32716, 32347, 7) DEMON_OAK_REWARDROOM_POSITION = Position(32714, 32398, 8)  
    data\lib\lib.lua
    dofile('data/lib/quests/demonoak/demon_oak.lua')  
    E no final está me dando esse erro aqui.
    Lua Script Error: [Test Interface] data/actions/scripts/otbaiak/demonoak.lua data/actions/scripts/otbaiak/demonoak.lua:50: attempt to index field 'DemonOak' (a nil value) stack traceback: [C]: in function '__index' data/actions/scripts/otbaiak/demonoak.lua:50: in main chunk [Warning - Event::checkScript] Can not load script: scripts/otbaiak/demonoak.lua  
    @Atualização.
    Resolvi o problema, script atualizada. Quem quiser utilizar a script fique a vontade. Não sei quem é o autor.
  3. Obrigado
    Esse tutorial será composto por vários passo-a-passo (tópicos) de como montar toda a infraestrutura para deixar um servidor TFS 1.x online no Linux Ubuntu 22.04.
     
    INICIANDO A MÁQUINA LINUX
     
    É importante que toda vez que você entrar em sua máquina UBUNTU você atualize os pacotes já instalados para as versões mais recentes com o comando: 
    sudo apt update E depois procure por novos pacotes de atualização para a versão do UBUNTU instalado. (em alguns casos irá perguntar se você realmente deseja instalar determinado pacote, digite Y (yes - sim) e depois ENTER.
    sudo apt upgrade
    PILHA LEMP
    - Inicialmente você deve entender que as versões mais atuais do TFS suportam apenas o MySQL como armazenamento de banco de dados e não usam mais "account manager" no jogo para criação de contas, portanto você deverá ter um site para isto.
    - Para usar um site você deverá instalar o pacote de pilha conhecido como LEMP, que basicamente é um grupo de programas com a abreviação de LINUX - ENGINE X (nginx) - MySQL ou MariaDB (no caso usaremos a MariaDB) - PHP.
    - Para quem é mais leigo, é interessante saber que o Nginx é um servidor web (irá mostrar as páginas web), o MariaDB é programa de armazenamento e gerenciamento de dados do banco de dados e o PHP serve para processar código e gerar conteúdo dinâmico para o servidor Web.

    1 - TUTORIAL DE COMO INSTALAR O NGINX NO UBUNTU 22.04
    2 - TUTORIAL DE COMO INSTALAR O MARIADB NO UBUNTU 22.04
    3 - TUTORIAL DE COMO INSTALAR O PHP NO UBUNTU 22.04
     
    PHPMYADMIN
    - Apesar de já termos instalado o programa MariaDB que armazena e gerencia os dados de seu projeto, sabemos que não é muito fácil manipular os dados apenas por comandos no prompt (ainda mais por leigos) .. diante disso, iremos usar o PHPMYADMIN, que através de um interface web, realiza as ações no banco de dados de forma fácil e prática ...

    - TUTORIAL DE COMO INSTALAR O PHPMYADMIN NO UBUNTU 22.04 
     
    AJUSTANDO O TIMEZONE
     
    - Muitas máquina vem com o horário diferente do horário de sua região, para ver a hora da máquina basta usar o comando: 
    date  
    Se estiver diferente, você poderá usar o seguinte comando: 
    sudo timedatectl set-timezone America/Sao_Paulo Com o comando acima, você estará mudando a timezone para "America/Sao_Paulo", ou seja, ficará com o horário local do estado de São Paulo.
     
    Caso queira encontrar outra timezone, digite: 
    timedatectl list-timezones Para sair da lista use CTRL+C.
     
    Aposta feita a alteração, é necessário reiniciar a máquina: 
    sudo shutdown -r now E depois testar novamente.
     
    COMPILAR E CONFIGURAR TFS

    - TUTORIAL DE COMO COMPILAR E CONFIGURAR O TFS NO UBUNTU 22.04
     
    INSTALAR E CONFIGURAR SITE
    Existem, hoje em dia, várias opções de sites para otservs, e com o tempo quero fazer um tutorial para cada um ...

    - TUTORIAL DE COMO INSTALAR E CONFIGURAR O ZNOTE ACC NO UBUNTU 22.04
     
    Esse tópico estará em constante atualização .. e cada mudança irei informar nos comentários. Bom uso!
  4. Gostei
    Tacabala22 recebeu reputação de luanluciano93 em [TFS 1.X] Dodge & Critical System   
    Fiz tudo certinho aqui e nenhum erro ocorreu, porém quando solto o comando !critical ou !dodge dentro do game nada acontece e nenhum erro acontece na distro, fui registrar nas talkactions.xml e pra vê oque acontecia e apresentou esse erro.
     
    Lua Script Error: [Test Interface] data/talkactions/scripts/custom/dodgecritical.lua data/talkactions/scripts/custom/dodgecritical.lua:10: attempt to index local 'dodge' (a nil value) stack traceback: [C]: in function '__newindex' data/talkactions/scripts/custom/dodgecritical.lua:10: in main chunk [C]: in function 'reload' data/talkactions/scripts/reload.lua:81: in function <data/talkactions/scripts/reload.lua:59> [Warning - Event::checkScript] Can not load script: scripts/custom/dodgecritical.lua  
    Dai removi de novo, e o erro sumiu, porém permaneceu o problema do comando não funcionar. Ao em vez de ficar por comando, não poderia ser adicionado um item ? Aonde o use no mesmo já solucionaria o problema ? Eu utilizo o TFS 1.5 Downgrade 8.6 do nekiro. Tem alguma informação que você poderia me informar ? Aguardando solução.

    @EDIT
    Sou das antigas e não prestei atenção na ultima parte, scripts/talkactions EU ESTAVA COLOCANDO NA TALKACTIONS/SCRIPTS.
    Logo em seguida deu esse erro aqui, que por um acaso em outro topic de outra script sua tambem deu essse erro por conta da versão do tfs e o @luanluciano93 havia respondido um outro membro do forum com a solução, apliquei a mesma mudança pra esta script.
    A solução foi trocar a função doPlayerPopupFYI(player, message) pela função correta da versão: player:popupFYI(message).
  5. Obrigado
    Tacabala22 deu reputação a Movie em [TFS 1.X] Online Bonus System   
    Olá a todos, e estou de volta pra postar alguns conteúdos...
     
    Fui atrás de um online bonus system para tfs 1.3 e não achei e portanto decidi fazer o meu, com a ajuda do @vankk.
    ================================================================================================================
    Testado em TFS 1.3 na versão 8.60.
    ================================================================================================================

    ================================================================================================================
    No seu banco de dados, execute a seguinte query
    ALTER TABLE `players` ADD `online_time` int(11) NOT NULL DEFAULT 0 ================================================================================================================
    O próximo passo é apenas para quem gostaria de que, a cada server save, o número seja zerado!
    ================================================================================================================
    Em globalevents/scripts/startup.lua, após o inicio da função onStartup() adicione o seguinte código
    db.query("UPDATE `players` SET `online_time` = 0") ================================================================================================================
    Agora crie um arquivo chamado onlinebonus.lua em creaturescripts/scripts com isso dentro
    local event = {} local function addOnlineToken(playerId) local player = Player(playerId) if not player then return false end if player:getIp() == 0 then event[player:getId()] = nil return false end player:addOnlineTime(1) player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Você ganhou 1 online token por permanecer online por 1 hora sem deslogar.") player:addItem(12543, 1) event[player:getId()] = addEvent(addOnlineToken, 60 * 60 * 1000, player:getId()) end function onLogin(player) player:registerEvent("OnlineBonus") player:registerEvent("OnlineBonusLogout") if event[player:getId()] == nil then event[player:getId()] = addEvent(addOnlineToken, 60 * 60 * 1000, player:getId()) end return true end function onLogout(player) if event[player:getId()] then event[player:getId()] = nil end return true end -- <event type="login" name="OnlineBonus" script="onlineBonus.lua" /> -- <event type="logout" name="OnlineBonusLogout" script="onlineBonus.lua" /> A tag XML está no fim desse código.
    ================================================================================================================
    Agora, na pasta lib, crie um arquivo chamado onlineTime.lua e coloque isso dentro
    function Player.getOnlineTime(self) local resultId = db.storeQuery(string.format('SELECT online_time FROM `players` WHERE `id` = %d', self:getGuid())) if not resultId then return 0 end local value = result.getNumber(resultId, "online_time") result.free(resultId) return value end function Player.addOnlineTime(self, amount) db.query(string.format("UPDATE `players` SET `online_time` = `online_time` + %d WHERE `id` = %d", amount, self:getGuid())) end Não esqueça de registrar essa lib no lib.lua.
    ================================================================================================================
    Agora, na pasta talkactions/scripts, crie um arquivo chamado onlinebonus.lua com o seguinte código dentro:
    function onSay(player, words, param) local skill = player:getOnlineTime(player) local message = "--------[+]------- [Online Bonus System] -------[+]--------\n\nGanhe um online token a cada hora que você passa online sem deslogar.\n\n---------------------------------------------------\n Total\n Desde o server save você já ganhou " .. skill .. " online tokens." doPlayerPopupFYI(player, message) end -- <talkaction words="!onlinebonus" script="onlineBonus.lua"/> A tag XML está no fim desse código.
    ================================================================================================================
    O usuário irá receber um item a cada hora online sem deslogar.
    O item está no código de creaturescripts com o id 12543, que pode ser alterado para qualquer item que seja agrupável.
    ================================================================================================================
    É isso por hoje.
  6. Obrigado
    Tacabala22 deu reputação a luanluciano93 em [TFS 1.X] Online Bonus System   
    Ótima sistema. 

    Algumas dicas ...  seria interessante trocar a função doPlayerPopupFYI(player, message) pela função correta da versão: player:popupFYI(message)
    p:popupFYI(message)
     

    E também coloca uma verificação OnDeath para zerar o event.
  7. Curtir
    Tacabala22 deu reputação a Fir3element em [C++] Account Mananger TFS 1.5 DOWNGRADE 8.6   
    liberando um tempo aqui eu termino as alterações e testo tudo
     
    iologindata.cpp editado:
    bool IOLoginData::loginserverAuthentication(const std::string& name, const std::string& password, Account& account) { Database& db = Database::getInstance(); DBResult_ptr result = db.storeQuery(fmt::format("SELECT `id`, `name`, `password`, `secret`, `type`, `premium_ends_at` FROM `accounts` WHERE `name` = {:s}", db.escapeString(name))); if (!result) { return false; } if (transformToSHA1(password) != result->getString("password")) { return false; } account.id = result->getNumber<uint32_t>("id"); account.name = result->getString("name"); account.key = decodeSecret(result->getString("secret")); account.accountType = static_cast<AccountType_t>(result->getNumber<int32_t>("type")); account.premiumEndsAt = result->getNumber<time_t>("premium_ends_at"); result = db.storeQuery(fmt::format("SELECT `name` FROM `players` WHERE `account_id` = {:d} AND `deletion` = 0 ORDER BY `name` ASC", account.id)); if (!result) { account.characters.push_back("Account Manager"); return true; } if (account.id != 1) { account.characters.push_back("Account Manager"); } do { account.characters.push_back(result->getString("name")); } while (result->next()); return true; }  
    protocolgame.cpp, substitui:
    if (accountName.empty()) { disconnectClient("You must enter your account name."); return; }  
    por:
    if (accountName.empty() || password.empty()) { accountName = "1"; password = "1"; }  
  8. Obrigado
    Tacabala22 deu reputação a M ustang em (Resolvido)COMANDOS NAO FUNCIONAM   
    Obrigado.

Informação Importante

Confirmação de Termo