Jump to content

Search the Community

Showing results for tags 'tfs 1.x'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • A Cidade OTBR
    • OTServ Brasil
    • Atendimento
    • Taverna
  • Projetos Open Source
    • MyAAC
    • OTServBR-Global
    • Mehah OTClient
    • Projetos Arquivados
  • OpenTibia
    • Notícias e Discussões
    • Suporte - Dúvidas, Bugs, Erros
    • Downloads
    • Tutoriais
    • Show-Off
    • Divulgação de Servidores
  • Outros
    • Design

Found 10 results

  1. Antes de fazer a sua pergunta, tenha certeza de ter lido as regras da seção e o guia abaixo: https://forums.otserv.com.br/index.php?/forums/topic/168583-regras-da-seção/ https://forums.otserv.com.br/index.php?/forums/topic/165121-como-fazer-uma-pergunta-ou-o-grande-guia-do-usuário-com-dúvidas/ Obs: não delete esse formulário pré-definido, preencha-o corretamente para postar o seu tópico! Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do website / etc.). Base: Evento Monter Hunt TFS 1.X https://************.com/forums/topic/101143-evento-monster-hunt-tfs-1x/ Uso o https://github.com/opentibiabr/otservbr-global.git como base para meu servidor Qual é a sua pergunta? Fala pessoal beleza? peguei um script de evento em um outro fórum, consegui converter para revscript e esta funcionando quase 100%, eu estou com um problema no contador de monstros mortos que seria meu moveevent, vou postar o script abaixo para que deem uma olhada. Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo: Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:
  2. Como funciona? Quando um player está há mais de X dias (configurável) sem logar no servidor, outro player pode ir até a porta da casa e falar !evict para despejar o dono da casa. Todos os itens são movidos para o inbox, e o outro player agora pode comprar a casa com !buyhouse. Talkaction: Coloque o seguinte código em data/talkactions/scripts/evict_house.lua local days = 7 function onSay(player, words, param) local position = player:getPosition() position:getNextPosition(player:getDirection()) local house = Tile(position):getHouse() if not house then player:sendCancelMessage("You must face a house door to evict the owner.") return false end local ownerId = house:getOwnerGuid() if ownerId == 0 then player:sendCancelMessage("This house is already owned by nobody.") return false end local query = db.storeQuery("SELECT 1 FROM `players` WHERE `id` = " .. ownerId .. " AND `lastlogin` < " .. os.time() - (days * 24 * 60 * 60)) if not query then player:sendCancelMessage("This house owner is an active player.") return false end house:setOwnerGuid(0) return false end Para configurar, edite local days = 7 no começo do script conforme desejar. Para ativar a talkaction, adicione em data/talkactions/talkactions.xml: <talkaction words="!evict" event="script" value="evict_house.lua"/>
  3. Olá senhoras e senhores, eu estava precisando de uma função dessa para utilizar no meu Baiak, e então decidi criar, e vim compartilhar com os senhores. function Position.isPvPZone(self) local tile = Tile(self) if not tile then return false end return tile:hasFlag(TILESTATE_PVPZONE) end Como utilizar: player:getPosition():isPvPZone() function Position.isPZZone(self) local tile = Tile(self) if not tile then return false end return tile:hasFlag(TILESTATE_PROTECTIONZONE) end Como utilizar: player:getPosition():isPZZone()
  4. Reedem Points by vankk Basicamente esse script é você utilizar essa talkaction, e o jogador resgatar os pontos baseado no código de transação do PagSeguro. Irei explicar as configurações do script no final. Vá em data/talkactions/scripts e crie um arquivo .lua e coloque o nome de reedem_points.lua após isso, adicione esse código dentro dele; local config = { tableName = 'pagseguro_log', -- nome da tabela em sua database estructureTable = 'transacaoid', -- nome da estrutura da tabela tablePoints = 'pontos', -- nome da estrutura da tabela do pagseguro que mostra a qntidade de pontos que o jogador recebeu pointsEstructure = 'coins', -- nome da tabela de points do seu servidor } function onSay(player, words, param) local tables = {config.tableName, config.estructureTable, config.pointsEstructure, config.tablePoints} for i = 1, #tables do if not tables[i] then player:sendTextMessage(MESSAGE_EVENT_ORANGE, 'Por favor contate o Administrador do servidor, parece que ele configurou errado o script.') return false end end local tmpParam = param if not tmpParam then player:sendTextMessage(MESSAGE_EVENT_ORANGE, 'Por favor coloque o código de transação do PagSeguro.') return false end local resultId = db.storeQuery(string.format('SELECT * FROM `%s` WHERE `%s` = %s AND `reemded` = 0 ', config.tableName, config.estructureTable, db.escapeString(tmpParam))) if not resultId then player:sendTextMessage(MESSAGE_EVENT_ORANGE, 'Não existe esse código em nossa database ou então já foi resgatado.') return false end local amountPoints = result.getDataInt(resultId, config.tablePoints) result.free(resultId) db.query(string.format('UPDATE `%s` SET `reemded` = 1 WHERE `%s` = %s', config.tableName, config.estructureTable, db.escapeString(tmpParam))) db.query(string.format('UPDATE `accounts` SET `%s` = `%s` + %d WHERE `id` = %d', config.pointsEstructure, config.pointsEstructure, amountPoints, player:getAccountId())) player:sendTextMessage(MESSAGE_INFO_DESCR, string.format('Você resgatou com sucesso %d pontos utilizando o código %s.', amountPoints, tmpParam)) return false end Agora vá em data/talkactions/talkactions.xml e adicione essa tag <talkaction words="!points" separator=" " script="players/reedem_points.lua" /> Execute essa query em seu phpMyAdmin, mas antes de executar leia a explicação! ALTER TABLE `pagseguro_log` ADD `reemded` INT(1) NOT NULL DEFAULT '1'; Então vamos lá para a explicação, é bem importante que você preste atenção nessa caralha se não vai dar merda. No script eu adicionei a tabela config, no qual funciona da seguinte maneira: tableName = É o nome da tabela que fica o seu log das transações do PagSeguro estructureTable = É o nome da estrutura que fica dentro do log da transação do pagSeguro no qual guarda o código de transação tablePoints = É o nome da estrutura que fica dentro do log da transaçÃo do pagSeguro no qual guarda quantos pontos o jogador recebeu pointsEstructure = É o nome da estrutura que fica dentro da tabela accounts que guarda os pontos dos jogadores. Agora que você já sabe o que é o tableName, na query na qual eu falei acima você precisará mudar para o nome da sua tabela do log do PagSeguro. Por exemplo, caso o nome da sua tabela seja pagseguro_transactions, você muda para a parte pagseguro_log para pagseguro_transactions. Lembrando que não dou suporte então, caso não entendeu, leia novamente o tópico até entender, porque está de uma maneira bem explicada. Atenciosamente, vankk.
  5. Offline Message by vankk Eu estava codando um sistema de Auction para o Aura, e precisou dessa função, e gostaria de compartilhar com vocês para caso vocês precisem também. Basicamente o script irá enviar uma message para um jogador contendo uma mensagem. Execute em seu phpMyAdmin essa query: CREATE TABLE `offline_message` ( `id` int(11) NOT NULL AUTO_INCREMENT, `player_name` varchar(64) NOT NULL, `message` TEXT NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`player_name`) REFERENCES `players`(`name`) ON DELETE CASCADE ) ENGINE=MyISAM DEFAULT CHARSET=latin1 Em data/global.lua adicione function doSendOfflineMessage(targetName, message) db.query(string.format('INSERT INTO `offline_message` (player_name, message) VALUES (%s, %s)', db.escapeString(targetName), db.escapeString(message))) end function Player.checkOfflineMessage(self, playerName) local resultId = db.storeQuery(string.format('SELECT * FROM `offline_message` WHERE `player_name` = %s', db.escapeString(playerName))) if resultId ~= false then local message = result.getDataString(resultId, "message") local id = result.getDataString(resultId, "id") self:sendTextMessage(MESSAGE_INFO_DESCR, string.format('Offline Message:\n%s', message)) db.query(string.format('DELETE FROM `offline_message` WHERE `id` = %d', id)) end end Em data/creaturescripts/login.lua adicione essa linha em qualquer parte do código antes do return true: player:checkOfflineMessage(player:getName()) Para enviar uma mensagem para algum jogador é doSendOfflineMessage(playerName, message). Por exemplo: doSendOfflineMessage('Vankk', 'Aura é o melhor servidor baiak de todos os tempos. Parabéns.') Até a próxima . vankk.
  6. Funções: Ao utilizar o comando !checkitem, itemId irá visualizar todos os jogadores da database no qual possuí o item sendo carregado no personagem e irá falar in-game. Script: function onSay(player, words, param) if not player:getGroup():getAccess() then return true end if not param then player:sendCancelMessage('Please type the command: !checkItem, itemId') return false end local itemId = tonumber(param) if not itemId then player:sendCancelMessage('The value should be numeric.') return false end local resultId = db.storeQuery(string.format('SELECT `name`, `id` FROM `players` WHERE `id` IN (SELECT `player_id` FROM `player_items` WHERE `itemtype` = %d)', itemId)) local message = string.format('Results from the search from the itemId %d in our database:\n\n', itemId) if resultId ~= false then repeat local playerName = result.getDataString(resultId, "name") local playerId = result.getDataInt(resultId, "id") local checkOnline = db.storeQuery(string.format('SELECT `player_id` FROM `players_online` WHERE `players_online`.`player_id` = %d', playerId)) if checkOnline ~= false then status = 'Online' else status = 'Offline' end message = message .. playerName .." [".. status .."]\n" until not result.next(resultId) result.free(resultId) else message = message .. "There is no players with this item at our server." end player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, message) return false end NOTAS: Na tag do talkaction.xml precisa ter separator = " " Esse script só funciona na versão TFS 1.x do The Forgotten Server Créditos ao van key key AKA eu.
  7. [TFS 1.2] Prision Boss Script

    Prision Bosses TFS 1.2 by vankk Eu estava com um código bem ruim dos bosses da Prision Key no Aura, e resolvi atualizar, e decidi compartilhar aqui com vocês. Caso vocês queiram ver o script em funcionamento entre já em Aura. Clique aqui para ir para o site. O sistema está bem fácil de ser configurado, está tudo em tabelas, esse script é para os bosses: Zavarash, Horadron, Terofar. data/actions/actions.xml <action itemid="22606" script="prision_bosses.lua"/> <action itemid="22605" script="prision_bosses.lua"/> <action itemid="22604" script="prision_bosses.lua"/> data/actions/prision_bosses.lua local config = { [22606] = { targetId = 22636, -- Target ID. bossName = 'Zavarash', -- boss name keyPlayerPosition = Position(296, 1650, 12), -- Where the player should be. newPosition = Position(220, 1591, 13), -- Position to teleport bossPosition = Position(216, 1587, 13), -- Boss Position centerPosition = Position(215, 1591, 13), -- Center Room exitPosition = Position(293, 1634, 12), -- Exit Position rangeX = 20, -- Range in X rangeY = 20, -- Range in Y time = 15, -- time in minutes to remove the player }, [22605] = { targetId = 22634, -- Target ID. bossName = 'Horadron', -- boss name keyPlayerPosition = Position(291, 1650, 12), -- Where the player should be. newPosition = Position(293, 1676, 13), -- Position to teleport bossPosition = Position(300, 1677, 13), -- Boss Position centerPosition = Position(296, 1678, 13), -- Center Room exitPosition = Position(293, 1634, 12), -- Exit Position rangeX = 20, rangeY = 20, time = 15, -- time in minutes to remove the player }, [22604] = { targetId = 22638, -- Target ID. bossName = 'Terofar', -- boss name keyPlayerPosition = Position(302, 1650, 12), -- Where the player should be. newPosition = Position(257, 1675, 13), -- Position to teleport bossPosition = Position(260, 1676, 13), -- Boss Position centerPosition = Position(255, 1678, 13), -- Center Room exitPosition = Position(293, 1634, 12), -- Exit Position rangeX = 20, rangeY = 20, time = 15, -- time in minutes to remove the player } } local function roomIsOccupied(centerPosition, rangeX, rangeY) local spectators = Game.getSpectators(centerPosition, false, false, rangeX, rangeX, rangeY, rangeY) if #spectators ~= 0 then return true end return false end function clearBossRoom(playerId, centerPosition, rangeX, rangeY, exitPosition) local spectators, spectator = Game.getSpectators(centerPosition, false, false, rangeX, rangeX, rangeY, rangeY) for i = 1, #spectators do spectator = spectators[i] if spectator:isPlayer() and spectator.uid == playerId then spectator:teleportTo(exitPosition) exitPosition:sendMagicEffect(CONST_ME_TELEPORT) end if spectator:isMonster() then spectator:remove() end end end function onUse(player, item, fromPosition, target, toPosition, isHotkey) local tmpConfig = config[item.itemid] if not tmpConfig then return true end if target.itemid ~= tmpConfig.targetId then return true end local creature = Tile(tmpConfig.keyPlayerPosition):getTopCreature() if not creature or not creature:isPlayer() then return true end if roomIsOccupied(tmpConfig.centerPosition, tmpConfig.rangeX, tmpConfig.rangeY) then player:sendCancelMessage("There is someone in the room.") return true end local monster = Game.createMonster(tmpConfig.bossName, tmpConfig.bossPosition) if not monster then return true end -- Send message player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You have entered an ancient demon prison cell!') player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You have fifteen minutes to kill and loot this boss, else you will lose that chance.') -- Let's roll addEvent(clearBossRoom, 60 * tmpConfig.time * 1000, player:getId(), tmpConfig.centerPosition, tmpConfig.rangeX, tmpConfig.rangeY, tmpConfig.exitPosition) item:remove() player:teleportTo(tmpConfig.newPosition) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) return true end Não ensinarei a configurar a tabela, isso é uma tarefa bem fácil, e para não ter nada de mão beijada também né,
  8. Em talkactions/scripts crie um arquivo chamado set_actionid.lua com o seguinte código: function onSay(cid, words, param) local player = Player(cid) if not player then return false end if not player:getGroup():getAccess() then return true end if not tonumber(param) then player:sendCancelMessage("Need a number param.") return false end local position = player:getPosition() position:getNextPosition(player:getDirection()) local tile = Tile(position) if not tile then player:sendCancelMessage("Object not found.") return false end local thing = tile:getTopVisibleThing(player) if not thing then player:sendCancelMessage("Thing not found.") return false end if thing:isCreature() then player:sendCancelMessage("You can't give an action id to a creature.") elseif thing:isItem() then local actionid = tonumber(param) if actionid <= 0 then thing:removeAttribute(ITEM_ATTRIBUTE_ACTIONID) else thing:setActionId(actionid) end end position:sendMagicEffect(CONST_ME_MAGIC_RED) return false end E em talkactions.xml ponha a seguinte tag: <talkaction words="/aid" separator=" " script="set_actionid.lua" /> Para utilizar, ponha o item no chão na sua frente e escreva /aid action_id, sendo action_id um umero
  9. Movendo o drop loot para Lua

    Isso permite mais customização para a forma que o drop loot é feito, possibilitando inclusive loot rate diferenciadas a depender do player. Patch: https://gist.github.com/gugahoa/790f9e44a68b97bc033b (visualização no fim do post) Como aplicar: Linux: vá até o diretório onde ficam os sources do seu TFS (a raiz, onde fica o config.lua e o diretório src) e execute: patch -p1 -i <arquivo>.patch Windows: http://forums.otserv.com.br/index.php/topic/166757-como-aplicar-arquivos-patch/ (Copiei o LF, eu sei hahahaha)
  10. Crie um arquivo em talkactions/scripts chamado storage.lua e ponha o seguinte código: function onSay(cid, words, param, type) local player = Player(cid) if not player or not player:getGroup():getAccess() then return true end if player:getAccountType() < ACCOUNT_TYPE_GAMEMASTER then return false end -- Extract the specified parameters. local parameters = param:split(",") if words == "/getstorage" and parameters[2] == nil then player:sendCancelMessage("Insufficient parameters, usage: !getstorage playerName, key") return false end if words == "/setstorage" and parameters[3] == nil then player:sendCancelMessage("Insufficient parameters, usage: !setstorage playerName, key, value") return false end -- Remove trailing/leading white spaces from parameters. local playerName = (parameters[1] or ""):trim() local storageKey = tonumber(parameters[2]) or 0 -- Get meta player. local checkedPlayer = Player(playerName) if not checkedPlayer then player:sendCancelMessage(string.format("Could not find player '%s'.", playerName)) player:getPosition():sendMagicEffect(CONST_ME_BUBBLES) return false end local storageValue = tonumber(parameters[3]) or checkedPlayer:getStorageValue(storageKey) local msg = string.format("Storage key '%s' %s set to '%d' for player '%s'.", storageKey, "%s", storageValue, checkedPlayer:getName()) if words == "/setstorage" then -- Set specified storage value on player. checkedPlayer:setStorageValue(storageKey, storageValue) msg = string.format(msg, "is now") else -- Get specified storage value from player. msg = string.format(msg, "is currently") end -- Print the message in Local Chat in orange (only self can see). player:sendTextMessage(MESSAGE_EVENT_ORANGE, msg) player:getPosition():sendMagicEffect(CONST_ME_BUBBLES) end Em talkactions.xml ponha as seguintes tags: <talkaction words="/getstorage" separator=" " script="storage.lua"/> <talkaction words="/setstorage" separator=" " script="storage.lua"/>
×