Jump to content

Recommended Posts

Trade Offline

 

p6aJ7ld.png

 

O sistema foi testado apenas em TFS 1.5

 

O sistema funciona de forma semelhante ao Market System das versões atuais, porem sem exibição gráfica das ofertas in-game, para isso o sistema vai acompanhado de uma página para o Gesior AAC. Este sistema existe no fórum há um bom tempo e já é familiar pra muitos jogadores, essa versão trás consigo algumas melhorias e diferenças que irei listar abaixo.
 

Sistema

  • Ofertas removidas automaticamente no tempo configurado.
  • Agora é possível vender um item exigindo outro item em troca ao invés de dinheiro.
  • Containers com um conjunto de itens dentro agora podem ser anunciados.
  • Agora o sistema verifica as cargas e durações dos itens antes de criar uma oferta.
  • Novo parâmetro adicionado para verificar informações de ofertas in-game.
  • Agora todo valor recebido vai diretamente para o banco do vendedor.

 

Todo essa atualização de versão foi feita com base no script do WooX: 


TRADE_OFFLINE.LUA: https://raw.githubusercontent.com/luanluciano93/ESTUDOS/master/LUA/trade_offline/trade_offline_revscript.lua


 

Edited by luanluciano93 (see edit history)
Link to post
Share on other sites
17 horas atrás, luanluciano93 disse:

Trade Offline

 

p6aJ7ld.png

 

O sistema foi testado apenas em TFS 1.5

 

O sistema funciona de forma semelhante ao Market System das versões atuais, porem sem exibição gráfica das ofertas in-game, para isso o sistema vai acompanhado de uma página para o Gesior AAC. Este sistema existe no fórum há um bom tempo e já é familiar pra muitos jogadores, essa versão trás consigo algumas melhorias e diferenças que irei listar abaixo.
 

Sistema

  • Ofertas removidas automaticamente no tempo configurado.
  • Agora é possível vender um item exigindo outro item em troca ao invés de dinheiro.
  • Containers com um conjunto de itens dentro agora podem ser anunciados.
  • Agora o sistema verifica as cargas e durações dos itens antes de criar uma oferta.
  • Novo parâmetro adicionado para verificar informações de ofertas in-game.
  • Agora todo valor recebido vai diretamente para o banco do vendedor.

 

Todo essa atualização de versão foi feita com base no script do WooX: 


TRADE_OFFLINE.LUA: https://raw.githubusercontent.com/luanluciano93/ESTUDOS/master/LUA/trade_offline/trade_offline_revscript.lua


 

Boa tarde Luan!!!! aqui está apresentando esse erro. TFS 1.3

 

Capturar.thumb.JPG.f76282f764f0d82519fe3cbaec476a51.JPG

 

Edited by stauro (see edit history)
Link to post
Share on other sites
3 horas atrás, stauro disse:

Boa tarde Luan!!!! aqui está apresentando esse erro. TFS 1.3

 

Capturar.thumb.JPG.f76282f764f0d82519fe3cbaec476a51.JPG

Pode me explicar como reproduzir este erro?

Estranho, pq mesmo que o valor de duração seja nulo, coloquei uma verificação para tal ... 
https://github.com/luanluciano93/ESTUDOS/blob/master/LUA/trade_offline/trade_offline_revscript.lua#L102

Link to post
Share on other sites
25 minutos atrás, luanluciano93 disse:

Pode me explicar como reproduzir este erro?

Estranho, pq mesmo que o valor de duração seja nulo, coloquei uma verificação para tal ... 
https://github.com/luanluciano93/ESTUDOS/blob/master/LUA/trade_offline/trade_offline_revscript.lua#L102

Eu criei um arquivo lua em data/scripts/talkactions e quando executo o comando em jogo, por exemplo,  !tradeoff add, boots of haste acontece esse erro. Não entendi os comandos desse sistema, pois tento colocar valor e tal e aparece a msg da quantidade de itens agrupáveis

Link to post
Share on other sites
  • 1 month later...

Fala galerinha da TK!!!

Com a grande ajuda do @luanluciano93 adaptamos definitivamente para o TFS 1.3, pois ele havia testado apenas em TFS 1.5!

Segue o arquivo TRADE_OFFLINE.LUA e os arquivos PHP também adaptado para a versão.

 

Colocar os arquivos paginationClass.php e mysql_db.php na pasta "classes"

Obs: Não esqueça de editar o arquivo mysql_db.php de acordo com a sua database: NOME DA DATABASE e USUÁRIO.

 

Arquivo tradeoff.php vc joga na pasta "pages"

 

O arquivo tradeoff.lua vc joga na pasta do seu ot em: data/scripts/talkactions

 

Em data/lib/core/player.lua vc adiciona a seguinte função:

function Player.removeTotalMoney(self, amount)
    local moneyCount = self:getMoney()
    local bankCount = self:getBankBalance()

    if amount <= moneyCount then
        self:removeMoney(amount)
        return true

    elseif amount <= (moneyCount + bankCount) then
        if moneyCount ~= 0 then
            self:removeMoney(moneyCount)
            local remains = amount - moneyCount
            self:setBankBalance(bankCount - remains)
            self:sendTextMessage(MESSAGE_INFO_DESCR, ("Paid %d from inventory and %d gold from bank account. Your account balance is now %d gold."):format(moneyCount, amount - moneyCount, self:getBankBalance()))
            return true
        else
            self:setBankBalance(bankCount - amount)
            self:sendTextMessage(MESSAGE_INFO_DESCR, ("Paid %d gold from bank account. Your account balance is now %d gold."):format(amount, self:getBankBalance()))
            return true
        end
    end
    return false
end

function Player.getTotalMoney(self)
	return self:getMoney() + self:getBankBalance()
end

 

E é isso galera, bom uso =D

 

 

 

tradeoff.lua tradeoff.php mysql_db.php paginationClass.php

Edited by stauro (see edit history)
Link to post
Share on other sites
  • 5 weeks later...

Fiz tudo certinho mas da erro ao abrir o tfs

Lua Script Error: [Test Interface]
data/talkactions/scripts/tradeoff.lua
data/talkactions/scripts/tradeoff.lua:128: attempt to call global 'TalkAction' (a nil value)
stack traceback:
        [C]: in function 'TalkAction'
        data/talkactions/scripts/tradeoff.lua:128: in main chunk
[Warning - Event::checkScript] Can not load script: scripts/tradeoff.lua

 

isso é o que tem na linha 128 : 

 

local trade_offline_talkaction = TalkAction("!tradeoff")

 

Edited by pedrolp37 (see edit history)
Link to post
Share on other sites
18 minutos atrás, pedrolp37 disse:

Fiz tudo certinho mas da erro ao abrir o tfs

Lua Script Error: [Test Interface]
data/talkactions/scripts/tradeoff.lua
data/talkactions/scripts/tradeoff.lua:128: attempt to call global 'TalkAction' (a nil value)
stack traceback:
        [C]: in function 'TalkAction'
        data/talkactions/scripts/tradeoff.lua:128: in main chunk
[Warning - Event::checkScript] Can not load script: scripts/tradeoff.lua

 

isso é o que tem na linha 128 : 

 

local trade_offline_talkaction = TalkAction("!tradeoff")

Amigo, isso é um revscript, você deve colocá-lo em datas/scripts/

Link to post
Share on other sites
28 minutos atrás, luanluciano93 disse:

Amigo, isso é um revscript, você deve colocá-lo em datas/scripts/

luanluciano93 , 

Não sei onde consegue esses revscrip, deu para entender agora depois que vc falou, mas não sei onde conseguir se não importa poderia me passa os revscrip q preciso joga na pasta ?

Link to post
Share on other sites
  • 3 weeks later...
Em 01/04/2022 em 15:45, luanluciano93 disse:

Amigo, isso é um revscript, você deve colocá-lo em datas/scripts/

Como faz esse negocio de revscript amigo da uma força ae pfv pra mim so falta isso

Link to post
Share on other sites

144738016_Semttulo.thumb.png.fcd51b88b73c4b70902d608116c09eb3.png

image.png.b8ea7423ce8fa74cfba2f8a8ddc25dda.png

boa noite da este erro no tfs, mais o script funciona.

e quando eu adiciono o item no !tradeoff add ele some e adicionado ao site so que quando abro a aba trade off aparece este erro "could not load items!"

Edited by bonfim1234 (see edit history)
Link to post
Share on other sites
• Fixado trade offline
Fixado problema onde estava podendo adicionar ofertas de "containers
com itens" dentro de um container.
Em 26/04/2022 em 22:54, bonfim1234 disse:

boa noite da este erro no tfs, mais o script funciona.

e quando eu adiciono o item no !tradeoff add ele some e adicionado ao site so que quando abro a aba trade off aparece este erro "could not load items!"

Cara, pelo jeito o seu servidor não está aceitando o Globalevent como rescript.

Erro aqui: https://github.com/luanluciano93/ESTUDOS/blob/master/LUA/trade_offline/trade_offline_revscript.lua#L1028

Link to post
Share on other sites
12 horas atrás, luanluciano93 disse:
• Fixado trade offline



Fixado problema onde estava podendo adicionar ofertas de "containers
com itens" dentro de um container.

Cara, pelo jeito o seu servidor não está aceitando o Globalevent como rescript.

Erro aqui: https://github.com/luanluciano93/ESTUDOS/blob/master/LUA/trade_offline/trade_offline_revscript.lua#L1028

resolvi uma parte so q ficou assim kkk, e os items tem na pagina

 

635868037_Semttulo2.thumb.png.b5a6bd813745fb1169dad147fd9016a6.png

 

Edited by bonfim1234 (see edit history)
Link to post
Share on other sites
Em 28/04/2022 em 18:19, luanluciano93 disse:

Isso é problema do website (dá página em questão)

tem como adicionar no script uma linha q checa se o depot esta cheio ? ele esta comprando e o item some n vai pro depot por esta cheio.

Edited by bonfim1234 (see edit history)
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.


  • Similar Content

    • By luanluciano93
      Olá pessoal, estou desenvolvendo esse sistema vip para TFS 1.x, se precisarem de alguma função nova é só comentar, criei para usar em um servidor meu e resolvi postar, bom proveito a todos.
       
      É só ir no arquivo data/lib/core/player.lua e adicionar esse código no começo do script:
      -- ALTER TABLE `accounts` ADD `vip_time` BIGINT(20) NOT NULL DEFAULT 0; -- player:getVipTime() function Player.getVipTime(self) local resultId = db.storeQuery("SELECT `vip_time` FROM `accounts` WHERE `id` = '".. self:getAccountId() .."';") local time = resultId ~= false and result.getNumber(resultId, "vip_time") or 0 result.free(resultId) return time end -- player:isVip() function Player.isVip(self) return self:getVipTime() > os.time() and true or false end -- player:addVipDays(days) function Player.addVipDays(self, days) return(self:isVip() and tonumber((days * 86400))) and db.query("UPDATE `accounts` SET `vip_time` = '".. (self:getVipTime() + (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") or db.query("UPDATE `accounts` SET `vip_time` = '".. (os.time() + (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:removeVipDays(days) function Player.removeVipDays(self, days) return(self:isVip() and tonumber((days * 86400))) and db.query("UPDATE `accounts` SET `vip_time` = '".. (self:getVipTime() - (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") or db.query("UPDATE `accounts` SET `vip_time` = '".. (os.time() - (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:setVipDays(days) function Player.setVipDays(self, days) return db.query("UPDATE `accounts` SET `vip_time` = '".. (os.time() - (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:removeVip() function Player.removeVip(self) db.query("UPDATE `accounts` SET `vip_time` = '0' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:sendVipDaysMessage() function Player.sendVipDaysMessage(self) if self:isVip() then local vipTime = self:getVipTime() - os.time() local vipDays = 1 + (math.floor(vipTime / 86400)) return self:getVipTime() ~= false and self:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'You have '.. vipDays .. ' vip day(s) in your account.') end end -- player:checkVipLogin() function Player.checkVipLogin(self) if self:getVipTime() > 0 and not self:isVip() then return self:removeVip() and self:teleportTo(self:getTown():getTemplePosition()) end end  
       
      As funções são:
      • player:getVipTime() - Retorna o valor da tabela vip_time (igual esta na database).
      • player:isVip() - Retorna se o player é vip ou não.
      • player:addVipDays(days) - Usa-se em algum script para para adicionar dias de vip ao player (parâmetro de entrada "days").
      • player:removeVipDays(days) - Usa-se em algum script para para remover dias de vip do player (parâmetro de entrada "days").
      • player:setVipDays(days) - Usa-se em algum script para para mudar os dias de vip do player (parâmetro de entrada "days").
      • player:removeVip() - Usa-se em algum script para para remover todo tempo de vip do player.
      • player:sendVipDaysMessage() - Retorna uma mensagem no player mostrando os dias de vip que ainda restam ao player.
      • player:checkVipLogin() - Checa se a vip do player acabou, se sim teleporta ele para o templo.
       

      Qualquer dúvida ou erro/bug poste aqui.
    • By deivaoo
      Eai galera, blz?
       
      Bom, vim trazer pra vcs a versão 1.0 do mod de pokedex que eu desenvolvi mês passado visando aprendizado no mundo de OTC, com o objetivo também de mostrar que o otclient é flexível suficiente para se fazer muitas coisas sem a necessidade das sources tanto do servidor quanto do client...
       
      Para aqueles que não conhecem, vejam o Show Off desse trabalho. 
      Eu fiz essa versão com o objetivo de não fazer alterações no servidor... Ou seja, tem apenas edições no OTC.
       
       
      Atualizações:
       
      1. Adicionado um pack com 276 imagens de pokemons (16,1MB);
      2. Pokemons shiny tem a exibição da imagem de pokemons normais (para alterar, basta remover
      a linha 75 do arquivo game_pokedex.lua, na pasta modules/game_pokedex de seu client);
      3. Pokedex fecha ao se deslogar do char com ela aberta [créditos a @Soulviling pela ideia];
       
       
      Bom, sem mais delongas;
       
       
      Instalação fácil:
       
      Passo 1. Faça o download do arquivo RAR (download no final do tópico);
      Passo 2. Copie a pasta modules pro seu client;
      Passo 3. "Deseja substituir?" [X]Sim  [  ]Não
      Passo 4. Só vai até o passo 3;
       
      Bom, segue uma imagem ATUALIZADA

       
      Download e Scan
    • By najatheus
      Em actions criei um arquivo chamado guardian.lua, dentro dele coloque : 
        local lendas = { -- id dos item / nome do guardian [3000] = {"Mew"}, [3001] = {"Mewtwo"}, [3002] = {"Articuno"}, [3003] = {"Zapdos"}, [3004] = {"Moltres"}, [3005] = {"Entei"}, [3006] = {"Suicune"}, [3007] = {"Raikou"}, [3008] = {"Ho-oh"}, [30010] = {"Lugia"}, } function onUse(player, item, fromPosition, target, toPosition, ishotkey) slot = player:getSlotItem(CONST_SLOT_AMMO) if not slot then player:sendTextMessage(MESSAGE_STATUS_SMALL, "" .. player:getName() .. " Put the Guardian in the right slot" .." ") return true end local lenda = lendas[item.itemid] if not lenda then player:sendTextMessage(MESSAGE_STATUS_SMALL, "" .. player:getName() .. " Sorry, ask adm to set up the guardian string!" .." ") return true elseif(player:getStorageValue(28723) == 1)then player:sendTextMessage(MESSAGE_STATUS_SMALL, "Have you ever used this guardian") return true else local postion = player:getPosition() local monster = Game.createMonster(lenda[1], postion) if not monster then player:sendTextMessage(MESSAGE_STATUS_SMALL,"" ..player:getName() .." Sorry you can't summon, contact a member of staff!.") return true end local message = {"" .. player:getName() .. " Go Guardian : " .. lenda[1] .. ""} player:sendTextMessage(MESSAGE_INFO_DESCR, "Have you ever used this guardian") player:setStorageValue(28723, 1) player:say(message[1], TALKTYPE_MONSTER_SAY) item:setAttribute(ITEM_ATTRIBUTE_DESCRIPTION,"[Name] : " .. lenda[1] .. "\n" .. "[Owner] : " .. player:getName() .. "\n" .. "[Last use] :" .. os.date() .. "") local guardians = MonsterType(lenda[1]) if not guardian then return false end guardians:nameDescription("Guardian " .. lenda[1] .. "") guardians:name("Guardian " .. lenda[1] .. "") monster:setMaster(player) monster:setMaxHealth(70000000) monster:setSkull(SKULL_GREEN) monster:getPosition():sendMagicEffect(6) monster:changeSpeed(600000) speed = monster:getSpeed() healt = monster:getHealth() monster:say("GUARDIAN!" .. lenda[1] .. "", TALKTYPE_MONSTER_SAY) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE,"You used the Guardian ( " .. lenda[1] .. " ).") player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE,"Your Guardian is alive: " .. healt .. " / " .. monster:getMaxHealth() .. " wait for his life to fully load.") player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE,"Guardian Speed " .. speed .. ".") player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE,"Guardian owner " .. player:getName() .. ".") player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE,"Last time the Guardian was used [" .. os.date() .. "].") return true end end  
      Depois abra o action.xml, e registra :  
      <action itemid="o id" script="guardian.lua" />

       
    • By Breno Alves
      [Anti-Bot]

      Fiz esse sistema para o Thunder porém vou deixá-lo a parte nesse tópico aqui para quem quiser implementar em seu otserv.
      Lembrando que esse sistema é para TFS 1.X e qualquer sugestão/problema nesse sistema, deve ser reportado no GitHub.

      Crie um arquivo na pasta lib com o nome antibot.lua
      ANTIBOT = { prefix = "[AntiBot] ", questions = { {question = "Qual o ano que começou o COVID-19?", staticAnswer = true, answer = "2019"}, {question = "Qual seu skill atual de Sword?", skill = true, answer = SKILL_SWORD}, {question = "Qual seu skill atual de Club?", skill = true, answer = SKILL_CLUB}, {question = "Qual seu skill atual de Distance?", skill = true, answer = SKILL_DISTANCE}, {question = "Qual seu level atual?", answer = "level"}, {question = "Qual o dia de hoje?", answer = "day"}, }, playerQuestion = {}, messages = { time = "Você possui %s para responder a pergunta.", chat = "Esse chat só pode ser usado durante a verificação.", howAnswer = "Você deve responder somente a resposta, por exemplo: Qual o dia de hoje? Resposta: %d", correctAnswer = "Você acertou a pergunta. Obrigado.", incorrectAnswer = "Você errou a resposta, você ainda possui %d tentativas.", logout = "Você não pode deslogar enquanto hover uma verificação ativa.", }, punishment = { try = { max = 3, reason = "Quantidade excessiva de tentativas.", timePunishment = 1, -- In days players = {}, }, time = { maxTime = 180, -- In seconds reason = "Não respondeu a pergunta dentro do tempo estipulado.", timePunishment = 2, -- In days players = {}, }, }, verification = {40, 60}, -- in minutes } function ANTIBOT:addTry(playerId) local player = Player(playerId) if not player then return false end playerId = player:getId() if not ANTIBOT.punishment.try.players[playerId] then ANTIBOT.punishment.try.players[playerId] = 0 end ANTIBOT.punishment.try.players[playerId] = ANTIBOT.punishment.try.players[playerId] + 1 if ANTIBOT.punishment.try.players[playerId] and ANTIBOT.punishment.try.players[playerId] >= ANTIBOT.punishment.try.max then sendChannelMessage(13, TALKTYPE_CHANNEL_O, ANTIBOT.prefix .. ANTIBOT.punishment.try.reason) ANTIBOT:addPunishment(playerId) end end function ANTIBOT:time(playerId) local player = Player(playerId) if not player then ANTIBOT:reset(playerId) return false end playerId = player:getId() if not ANTIBOT.punishment.time.players[playerId] then ANTIBOT.punishment.time.players[playerId] = 0 ANTIBOT:sendQuestions(playerId) end addEvent(function() if ANTIBOT.punishment.time.players[playerId] and ANTIBOT.punishment.time.players[playerId] >= 0 and ANTIBOT.punishment.time.players[playerId] < ANTIBOT.punishment.time.maxTime then ANTIBOT.punishment.time.players[playerId] = ANTIBOT.punishment.time.players[playerId] + 1 player:sendCancelMessage(ANTIBOT.prefix .. ANTIBOT.messages.time:format(string.diff(ANTIBOT.punishment.time.maxTime - ANTIBOT.punishment.time.players[playerId], true))) ANTIBOT:time(playerId) end end, 1000) if ANTIBOT.punishment.time.players[playerId] and ANTIBOT.punishment.time.players[playerId] >= ANTIBOT.punishment.time.maxTime then ANTIBOT:addPunishment(playerId) end end function ANTIBOT:sendQuestions(playerId) local player = Player(playerId) if not player then return false end playerId = player:getId() random = math.random(#ANTIBOT.questions) ANTIBOT.playerQuestion[playerId] = random player:say("ANTIBOT", TALKTYPE_MONSTER_SAY) player:openChannel(13) addEvent(sendChannelMessage, 500, 13, TALKTYPE_CHANNEL_O, ANTIBOT.prefix .. ANTIBOT.messages.howAnswer:format(os.date("%d"))) addEvent(sendChannelMessage, 800, 13, TALKTYPE_CHANNEL_O, ANTIBOT.prefix .. ANTIBOT.questions[random].question) end function ANTIBOT:reset(playerId) ANTIBOT.punishment.try.players[playerId] = nil ANTIBOT.punishment.time.players[playerId] = nil ANTIBOT.playerQuestion[playerId] = nil end function ANTIBOT:addPunishment(playerId) local player = Player(playerId) if not player then return false end playerId = player:getId() local accountId = getAccountNumberByPlayerName(player:getName()) if accountId == 0 then return false end local resultId = db.storeQuery("SELECT 1 FROM `account_bans` WHERE `account_id` = " .. accountId) if resultId ~= false then result.free(resultId) return false end local timeNow = os.time() if ANTIBOT.punishment.try.players[playerId] and ANTIBOT.punishment.try.players[playerId] >= ANTIBOT.punishment.try.max then db.query("INSERT INTO `account_bans` (`account_id`, `reason`, `banned_at`, `expires_at`, `banned_by`) VALUES (" .. accountId .. ", " .. db.escapeString(ANTIBOT.prefix .. ANTIBOT.punishment.try.reason) .. ", " .. timeNow .. ", " .. timeNow + (ANTIBOT.punishment.try.timePunishment * 86400) .. ", " .. player:getGuid() .. ")") elseif ANTIBOT.punishment.time.players[playerId] and ANTIBOT.punishment.time.players[playerId] >= ANTIBOT.punishment.time.maxTime then db.query("INSERT INTO `account_bans` (`account_id`, `reason`, `banned_at`, `expires_at`, `banned_by`) VALUES (" .. accountId .. ", " .. db.escapeString(ANTIBOT.prefix .. ANTIBOT.punishment.time.reason) .. ", " .. timeNow .. ", " .. timeNow + (ANTIBOT.punishment.time.timePunishment * 86400) .. ", " .. player:getGuid() .. ")") end ANTIBOT:reset(playerId) player:save() player:getPosition():sendMagicEffect(CONST_ME_POFF) player:remove() end Não esqueça de registrar essa lib no arquivo lib.lua

      Na pasta chachannels/scripts crie um arquivo chamado antibot.lua
      function onJoin(player) if not ANTIBOT.playerQuestion[player:getId()] then player:sendTextMessage(5, ANTIBOT.prefix .. ANTIBOT.messages.chat) player:getPosition():sendMagicEffect(CONST_ME_POFF) return false end return true end function onLeave(player) if ANTIBOT.playerQuestion[player:getId()] then return false end return true end function onSpeak(player, type, message) if not ANTIBOT.playerQuestion[player:getId()] then sendChannelMessage(13, TALKTYPE_CHANNEL_O, ANTIBOT.prefix .. ANTIBOT.messages.chat) player:getPosition():sendMagicEffect(CONST_ME_POFF) return false end local question = ANTIBOT.questions[ANTIBOT.playerQuestion[player:getId()]] if question.skill then correctAnswer = tonumber(player:getSkillLevel(question.answer)) message = tonumber(message) elseif question.answer == "level" then correctAnswer = tonumber(player:getLevel()) message = tonumber(message) elseif question.answer == "day" then correctAnswer = tonumber(os.date("%d")) message = tonumber(message) elseif question.staticAnswer then message = message:lower() correctAnswer = question.answer:lower() end verification = false if message == correctAnswer then verification = true end if verification then addEvent(sendChannelMessage, 200, 13, TALKTYPE_CHANNEL_O, ANTIBOT.prefix .. ANTIBOT.messages.correctAnswer) ANTIBOT:reset(player:getId()) else ANTIBOT:addTry(player:getId()) addEvent(function() if ANTIBOT.punishment.try.players[player:getId()] and ANTIBOT.punishment.try.players[player:getId()] < ANTIBOT.punishment.try.max and player then sendChannelMessage(13, TALKTYPE_CHANNEL_O, ANTIBOT.prefix .. ANTIBOT.messages.incorrectAnswer:format(ANTIBOT.punishment.try.max - ANTIBOT.punishment.try.players[player:getId()])) end end, 100) end return true end <channel id="13" name="AntiBot" script="antibot.lua" />
      Agora na pasta creaturescripts/scripts crie um arquivo chamado antibot.lua
      function onLogin(player) if player:getAccountType() >= ACCOUNT_TYPE_GAMEMASTER then return true end player:registerEvent("AntiBot") checkAnti(player:getId()) return true end function checkAnti(playerId) local player = Player(playerId) if not player then return false end min, max = ANTIBOT.verification[1], ANTIBOT.verification[2] random = math.random(min, max) addEvent(function() ANTIBOT:time(player:getId()) checkAnti(player:getId()) end, random * 60 * 1000) end <event type="login" name="AntiBot" script="antibot.lua" />
      Agora no arquivo logout.lua na pasta creaturescripts/scripts
      antes do return true adicione isso
      if ANTIBOT.punishment.try.players[player:getId()] or ANTIBOT.punishment.time.players[player:getId()] then player:sendTextMessage(MESSAGE_INFO_DESCR, ANTIBOT.prefix .. ANTIBOT.messages.logout) player:getPosition():sendMagicEffect(CONST_ME_POFF) return false end ANTIBOT:reset(player:getId())
       
      Sistema 100% feito por mim.
      Créditos adicionais ao @Endless e ao @Tottin por testarem
    • By Breno Alves
      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.
×
×
  • Create New...

Important Information

Confirmação de Termo