Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 09/17/20 em todas áreas

  1. Cave Exclusiva [SUPER UP] by WooX

    Ilicita reagiu a WooX por uma resposta no tópico

    1 ponto
    Cave Exclusiva Cave exclusiva ou também conhecido como Super UP é um sistema que assim como o nome indica proporciona ao jogador acesso a uma cave exclusiva, onde somente ele tem acesso e pode caçar sem ser perturbado. Eu particularmente não gosto da ideia do sistema, mas querendo ou não é bem popular nos servidores Baiak. Escrevi esse sistema a mais ou menos uns 2 anos atrás quando um amigo que era dono de um servidor Baiak na época estava tendo problemas com o sistema que usava, sistema esse que acredito ser o que vem por padrão nas bases de Baiak por ai e o que provavelmente é o mais usado até hoje. Sobre o sistema O sistema foi testado apenas em OTX2, mas provavelmente também funcione em TFS 0.4 Com a intenção de fazer com que fosse de fácil configuração, eu escrevi o sistema mantendo as funções principais e configurações em uma Lib separada dos arquivos, irei citar algumas características do sistema. Reiniciar o servidor ou manter ativo o global save não interfere na funcionalidade do sistema, todas as caves são entregues novamente no momento de abertura do servidor. O sistema funciona através de global storage e devido a isto não é necessário modificação alguma no banco de dados. O jogador tem a liberdade de escolher a cave que quiser, desde que ela esteja livre. O jogador pode verificar o status de cada uma das caves registradas no sistema e ver informações como quem é o dono de determinada cave e o tempo restante para que a cave esteja livre novamente. Algumas imagens Instalação Este sistema utiliza de funções contidas na lib do link abaixo, então antes de mais nada é necessário adicionar esta lib no servidor. Todos os arquivos necessários para instalação do sistema estão anexados no tópico, irei apenas mostrar como deve ser configurado. Como auxilio para saber onde vai cada um, todos os scripts contém a tag XML a ser registrada. Como mencionado anteriormente toda configuração do sistema se encontra na lib do mesmo, segue abaixo explicação de como configurar. caveExclusiva = { config = { rentTime = 4 * 60 * 60, buyItemID = 11758, caveStats = true, buyMessage = "Você comprou a cave de %s por %s.", timeLeftMessageInCave = "Seu tempo na cave de %s acabou e você foi teleportado para o templo.", timeLeftMessage = "Seu tempo na cave de %s acabou.", signs = { useSigns = true, signID = 1815, signLook = "Esta cave pertence a %s, estará livre novamente as %s." } }, caves = { [9851] = { gStor = 7330, caveName = "Cave 1", enterPos = {x=0, y=0, z=7}, signPos = {x=0, y=0, z=7} }, [9852] = { gStor = 7331, caveName = "Cave 2", enterPos = {x=0, y=0, z=7}, signPos = {x=0, y=0, z=7} } }, storages = { cave = 35070, inCave = 35071, time = 35072 } } rentTime: tempo que o jogador vai permanecer como dono de uma cave, o valor deve ser definido em segundos. buyItemID: ID do item em que o jogador deve usar o item definido na action para comprar uma cave. caveStats: pode ser definido como true ou false, se definido como falso não irá permitir o uso da talkaction que exibe informações sobre as caves. buyMessage: esta é a mensagem que irá aparecer quando o jogador comprar uma cave. timeLeftMessageInCave: esta é a mensagem que irá aparecer quando acabar o tempo e o player estiver dentro da cave. timeLeftMessage: esta é a mensagem que irá aparecer quando acabar o tempo e o player estiver fora da cave. useSigns: pode ser definido como true ou false, se definido como verdadeiro irá exibir o dono e o tempo restante em um quadro ou qualquer item configurado na variável abaixo. signID: ID do item em que será exibido as informações da cave. signLook: mensagem a ser exibida ao dar look no item definido na variável acima. As caves devem ser adicionadas e configuradas da seguinte maneira: [9851] = { -- Action ID, um pra cada cave. gStor = 7330, -- Global storage, um valor pra cada cave. caveName = "Cave 1", -- Nome da cave. enterPos = {x=0, y=0, z=7}, -- Posição que o player vai ser teleportado ao entrar na cave. signPos = {x=0, y=0, z=7} -- Posição do item que foi configurado na variavel signID no mapa. }, No mapa é necessário adicionar tudo que foi definido na configuração do sistema, isso inclui action IDs e os items configurado em buyItemID e signID, veja abaixo alguns exemplos. Créditos @Baalszor por testar todo o sistema. cave_action.lua cave_creaturescript.lua cave_enter.lua cave_exit.lua cave_start.lua cave_talkaction.lua lib_exclusivecave.lua
  2. Compilando TFS 1.3 com vídeo-aula

    Capitao wyz reagiu a Bruno Minervino por uma resposta no tópico

    1 ponto
    Compilando TFS 1.3 no Windows 1. Baixe os softwares requeridos Para compilar o The Forgotten Server no Windows, você vai precisar: Visual Studio 2015 (Compilador) TFS SDK v3.2 (libs) Libs do Boost C++ (32-bits, 64-bits) 2. Instale os softwares requeridos Após ter baixado os softwares listados na etapa acima, comece instalando o Visual Studio e Boost C++. Extraia o TFS SDK v3.2 em qualquer pasta do seu computador e execute o arquivo "register_tfssdk_env.bat" para setar a variável de ambiente do local onde está o TFS SDK, assim nosso compilador irá encontrar as libs quando começar a compilar. Mova o arquivo "register_boost_env.bat" da pasta do TFS SDK para a pasta onde você instalou as libs do Boost C++ e execute-o (se você seguiu os passos do instalador, está esta na pasta chamada boost_1_62_0). 3. Baixe as sources Se você possuir o Git Client instalado, você poderá clonar a última cópia com este comando: > git clone https://github.com/otland/forgottenserver.git Se você não possuir o Git Client instalado, você poderá baixar a última cópia do The Forgotten Server através do link: https://github.com/otland/forgottenserver/archive/master.zip 4. Compilando Procure o diretório vc14 na pasta do The Forgotten Server que você baixou, e abra o arquivo "theforgottenserver.sln". Isso deverá iniciar o Visual Studio 2015 e você estará pronto para continuar. Para configurar a compilação, navegue para Build -> Configuration Manager no menu superior. Um popup deverá aparecer onde você poderá escolher entre "Release" ou "Debug" para compilar, escolha também para qual Plataforma você irá compilar: 32-bits (Win32) ou 64-bits (x64). Para iniciar a compilação, abra o menu Build novamente e clique em Build Solution (Ctrl + Shift + B). 5. Vídeo-aula https://www.youtube.com/watch?v=Zfil84FMJsk 6. Créditos Mark - Autor do tutorial e do projeto The Forgotten Server Bruno Minervino - Tradução e gravação do vídeo
  3. 1 ponto
    Removido: *Boss Room *Rank Task *Prêmios para os 10 primeiros a terminar todas as tasks Adicionado: *Daily Task System (Sistema exclusivo de Task diario, podendo pegar 1x a cada 24 hrs, irei explicar mais depois.) *Task agora é por progresso, você não pode sair e voltar, terá que terminar a task 1 para avançar para a task 2, assim sucessivamente. *Task Points *Level para realizar a task *Nova talkaction que mostra uma janela de informações sobre o level da task, premios que irá receber, progresso, etc... *Items para entrega(Se o jogador deverá levar algum item junto com a quantidade de monstro morta) para finalizar a task *Sistema de look Task (Varia de acordo com a sua quantidade de Task Points, podendo ficar por exemplo como "Huntsman", "Ranger", etc...(alterável) *Mods e npc mais "clean", várias linhas removidas e o sistema está mais rápido *Vou Adicionar "scripts extras" Como: --> Tile que só passa quem tiver permissão depois de finalizar determinada quest --> Npc de Boss Room para entrar e enfrentar o monstro quem fez determinada quest [+] Resumo do Task system + Daily Task System [+] Task System: É o sistema de task "original", onde consiste em matar determinada quantidade de monstros(E entregar certo itens <- é configurável), para receber recompensas como Exp, Money e Items. Algumas mudanças do simple task 3.0 para o 4.0 foram: [+] O sistema agora é por progresso, isso quer dizer que você terá que ir terminando a quest para avançar para a seguinte. [+] O sistema Também recebeu uma alteração, fazendo com que as Tasks precisem que o jogador tenha um level determinado [+] A tabela para edição está mais fácil, fazendo com que você adicione ou remova monstros com mais tranquilidade, inclusive alterações das Rewards da Task. Daily Task System: É um sistema que desenvolvi para que os jogadores sempre estejam se comunicando com o npc de Task, no caso da Task Diaria, vária de acordo com o level do jogador, por exemplo: Jogadores entre level 6 ao 49 poderá cair em uma dessas 3 Task Diarias: Orcs, Tarantulas ou Wyverns Jogadores entre level 50 ao 79 poderá cair em uma dessas 3 Task Diarias: Dragons, Wailing Widows ou Ancient Scarabs E por ai vai, claro que você poderá aumentar as Task Diarias dependendo do level, eu fiz 3 para cada level que é pra postar, mas tudo isso você pode aumentar! Dependendo do seu servidor. E sim, você pode fazer a TASK "ORIGINAL" e a TASK "DIARIA" ao mesmo tempo! Ambas são distintas e possuem Rewards diferenciadas! No caso da Task diaria, levando em conta que você começou a fazer ela no dia 08/01 ás 20:00 Hrs, você tem até o dia 09/01 ás 20:00Hrs para termina-la e receber a recompensa, caso termine antes, a Task diaria só irá ficar disponível para repetição a partir desta mesma data 09/01 20:00 Hrs; [+] Caso você não termine a tempo, não tem problema, basta esperar este horário e começar uma nova Task. [+] Caso você começou a Daily Task e terminou antes desta data. mas por algum motivo esqueceu de entregar e a mesma passou do prazo, não tem importância, caso você tenha matado todos os monstros até 09/01 20:00 Hrs, você poderá entregar está Task em qualquer horário para receber suas Rewards e começar uma task a partir do momento em que você entregou! (INJUSTIÇA AQUI NÃO CARALHO). [+] Comandos Adicionais [+] /task -- Mostra as informações da sua Task Atual, como Nome da Task, Level, Rewards, Monstros que você poderá matar, Se tem que entregar algum Item junto, etc... /task daily -- É basicamente mostra a mesma informação da Task Principal, porém mostra também qual o prazo limite para entrega da task. /task counter -- É um comando que ATIVA ou DESATIVA o contador de monstros mortos na task no seu Channel. [+] Imagens [+] Cline neste link para ver algumas imagens da Task : http://imgur.com/a/eLIY3 ------------------------------------------------ // -------------------------------------------------------------- [+] Instalação do Sistema [+] Requisitos: Nível Médio de conhecimento em scripting LUA Pasta Mods Simple Task.xml https://pastebin.com/raw/P5hqMC3j NPC: Ludger.xml https://pastebin.com/raw/R56yLWHw simple_task.lua https://pastebin.com/raw/1mRzJ6aJ ---------------------------------------------- // ---------------------------------- [+] configuração [+ ] Task System Principal task_sys = { [1] = {name = "Trolls", start = 176201, monsters_list = {"Troll","Troll champion"}, level = 8, count = 40, points = 0, items = {}, reward = {}, exp = 2000, money = 2000} } [1] --> O número entre os colchetes [] significa a ordem da Task, como a Task é por progresso sempre começará no 1 e irá pro [2], assim sucessivamente. name --> É o nome da task que o jogador irá fazer. start --> é a storage que indicará se o jogador começou a Task monster_list ={} --> É o nome dos monstros em que o jogador deverá caçar para completar a Task level --> É o level necessário para dar inicio á Task count --> É o número de monstros que o jogador tem que matar para completar a Task points --> Aqui determinada quantos Task points o jogador irá receber ao completar a Task items = {} --> Aqui determinada se além de matar os monstros, o jogador terá que entregar item também! Caso tenha só colocar o {ITEM_ID, QUANTIDADE} EX: items = {{2173,1},{2160,10},{2493,2}} rewad --> Aqui determinada se o jogador irá receber itens ao terminar a Task, mesma formula do items /\ reward = {{2520,1},{2173,1}} exp --> Se o jogador irá receber Exp ao terminar a task. 0 ou quantidade de exp Money --> Se o jogador irá receber dinheiro ao terminar a task. 0 ou quantidade de dinheiro Daily Task System daily_task = { [1] = {name = "Orcs" ,monsters_list = {"Orc Berserker","Orc Rider","Orc Leader","Orc Warlord"}, count = 100, points = 0, reward = {}, exp = 5000, money = 10000} } Segue o padrão da Task original, exceto que não precisa entregar items para o npc! Como funciona A randomização de level de acordo com a Daily task? Procure por está tabela em MODS local t = { [{6,49}] = {1,3}, [{50,79}] = {4,6}, [{80,129}] = {7,9}, [{130,math.huge}] = {10,12} } entre as chaves e colchetes é o level do jogador para as Daily Task, Você pode adicionar quantas você quiser! Digamos que: [{6,49}] = {1,3} --> Quer dizer que entre o level 6 ao 49 o jogador poderá cair na Daily Task número 1(Orcs), 2(Tarantulas) ou 3(Wyvern)! [{50,79}] = {4,6} --> Quer dizer que entre o level 50 ao 79 o jogador poderá cair na Daily Task número 4(Dragons), 5(Wailing Widows) ou 6(Ancient Scarabs)! ... [{130,math.huge}] = {10,12} --> Quer dizer que o jogador level 130 ou MAIS poderá cair na Daily Task número 10(Undead Dragons), 11(HydraS) ou 12(Ghastly Dragons)! Look Rank System Procure por está tabela em MODS local ranks = { [{1, 20}] = "Huntsman", [{21, 50}] = "Ranger", [{51, 100}] = "Big Game Hunter", [{101, 200}] = "Trophy Hunter", [{201, math.huge}] = "Elite Hunter" } Entre 1-20 Task points o Rank será Huntsman Entre 21-50 Task posints o Rank será Ranger Entre 51-100 Task Points o rank será Big Game Hunter etc... Altere como quiser!
  4. Deixando as Sprites mais Rápida no OTclient

    simahamed reagiu a L3K0T por uma resposta no tópico

    1 ponto
    Bom galera hoje vou ensinar a vocês como acelerar as Sprites do seu jogo pra ficar como do Tíbia Global, assista o vídeo abaixo que você vai entender. Primeiramente vá na source do seu OTClient 0.6.6 "otclient-0.6.6\src\client"ou superior e abre o game.cpp depois de aberto procure. if(version >= 1050) mude para if(version <= 1050) Salve e Agora vá em const.h e procure. INVISIBLE_TICKS_PER_FRAME = 500, ITEM_TICKS_PER_FRAME = 500, mude para INVISIBLE_TICKS_PER_FRAME = 100, ITEM_TICKS_PER_FRAME = 100, Feito isso salve e da Rebuild no compilador do otcliente que voce usa "recompilação limpa" Depois de compilar vá no seu Object Builder e compile seu cliente pra "Improved Animations" pronto, agora só usar ATENÇÃO USE SOMENTE EM CASO DE ERROS DO OTCLIENT, CASO NÃO LER SEU CLIENTE; ache function load() local version = g_game.getClientVersion() em baixo coloca g_game.enableFeature(GameSpritesU32)
  5. Mega Sorteio Underwar 13 anos

    Cat reagiu a Madarada por uma resposta no tópico

    1 ponto
    Bacana sorteio, adorei a caneca e almofadinha s2 vou participar.
  6. 1 ponto
    @kukas9 Sim, roda no windows também, mas recomendo o Linux
  7. [TFS 1.x] Scripting Service

    Pedro. reagiu a maper007 por uma resposta no tópico

    1 ponto
    ola, preciso que um item de me uma storage por tempo, uso tfs 1.3 por favor
  8. [Pedido] SPRITES MAIORES

    Cat reagiu a iluargrott por uma resposta no tópico

    1 ponto
    Sim, esse trabalho ja foi feito em outros forums, porém realmnete é muito trabalhoso mexer em sources e outros programas para a criação, pois apresentam erros e pouca gente empenhada em mexer nisso. Por isso fora pensado esse método de movement e tal, prevendo o movimento do player aos arredores... evitando mexer em sources e demais aplicativos.
  9. 1 ponto
    Só tive que colocar como action, mas funcionou perfeitamente, obrigado mano!
  10. 1 ponto
    Fiz um improvisado aqui, estou sem tempo para verificar se esta funcionando, verifica ai e me avisa. data/actions/actions.xml <action itemid="ID DA RUNA" script="doubleHeal.lua"/> data/actions/scripts/doubleHeal.lua local storageCoolDown = 95555 local storageTime = 10 local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat, COMBAT_PARAM_EFFECT, 50) setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) function onGetFormulaValues(cid, level, maglevel) min = (level * 3 + maglevel * 2.74) + 80 max = (level * 3 + maglevel * 3.8) + 120 return min, max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") function onUse(player, item, fromPosition, target, toPosition, isHotkey) if target == player then if player:getStorageValue(storageCoolDown) < os.time() then player:setStorageValue(storageCoolDown, os.time() + storageTime * 1) local var = {type = 1, number = player:getId()} combat:execute(creature, var) addEvent(function() combat:execute(creature, var) end, 2*1000) else player:sendTextMessage(MESSAGE_STATUS_SMALL, "You must wait 10 seconds to use this rune again.") return false end else player:sendTextMessage(MESSAGE_STATUS_SMALL, "Can be used only on you.") end return true end
  11. 1 ponto
    coroy o bixo é brabo :o
  12. (Resolvido)Alguém poderia descompila esse client?

    Cat reagiu a Tio Luca por uma resposta no tópico

    1 ponto
    ta ae manito WoDBO_Warks.rar
  13. 1 ponto
    Consegui, muito obrigado! Obrigado pela ajuda Jean! Fabio, você teria um SCRIPT em que posso movimentar X,Y de uma DISTANCE EFFECT? Quero colocar pra sair Efeitos Missle iguais ao mesmo tempo, porém em posições diferentes. Exemplo:
  14. 1 ponto
    Testa assim Kaguya.lua
  15. 1 ponto
    Isso, porém a magia precisa dar DANO somente 1 Vez
  16. 1 ponto
    troca > doSendMagicEffect({x= t_Pos.x, y = t_Pos.y+ajust[2], z = t_Pos.z}, effect) por > doSendMagicEffect({x= t_Pos.x+ajust[1], y = t_Pos.y+ajust[2], z = t_Pos.z}, effect)
  17. 1 ponto
    Repete esta linha addEvent(targetEffect, 1000, cid, 419, {2,0}) --addEvent(targetEffect, 1000(TEMPO EM MILÉSIMOS PARA EFEITO), cid, 419(NUMERO DO EFEITO), {2,0}(AJUSTAR X E Y))
  18. 1 ponto
    local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -130.2, 1, -140.2, 1) function targetEffect(cid, effect, ajust) -- efeito sai no target if isCreature(cid) and isCreature(getCreatureTarget(cid)) then local t_Pos = getCreaturePosition(getCreatureTarget(cid)) doSendMagicEffect({x= t_Pos.x+ajust[1], y = t_Pos.y+ajust[2], z = t_Pos.z}, effect) end end local delay = 1000 -- tempo para o segundo efeito, em milésimos function onCastSpell(cid, var) local waittime = 2 -- Tempo de exhaustion local storage = 120033 if exhaustion.check(cid, storage) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.") return false end targetEffect(cid, 419, {1,0}) addEvent(targetEffect, delay, cid, 419, {2,0}) exhaustion.set(cid, storage, waittime) return doCombat(cid, combat, var) end
  19. 1 ponto
    vc n especificou onde iria sair o segundo efeito, entao fiz de dois modos. function targetEffect(cid, effect, ajust) -- efeito sai no target if isCreature(cid) and isCreature(getCreatureTarget(cid)) then local t_Pos = getCreaturePosition(getCreatureTarget(cid)) doSendMagicEffect({x= t_Pos.x+ajust[1], y = t_Pos.y+ajust[2], z = t_Pos.z}, effect) end end addEvent(targetEffect, 2000, cid, 169, {0,0}) function cidEffect(cid, effect, ajust) -- efeito sai em min if isCreature(cid) then local t_Pos = getCreaturePosition(cid) doSendMagicEffect({x= t_Pos.x+ajust[1], y = t_Pos.y+ajust[2], z = t_Pos.z}, effect) end end addEvent(cidEffect, 2000, cid, 169, {0,0})
  20. Análise de servidor 8.60

    Nerivalhs reagiu a NathanAmaro por uma resposta no tópico

    1 ponto
    Eai galera, tudo certo? Sempre quis abrir um OtServer, vivia viciado em um das antigas o Viking Server 8.0, até que um dia comprei o mapa do antigo dono e comecei a customizar ele só que nunca coloquei online, mas queria pedir opinião de vocês para ver se algo assim iria vingar. Vou fazer uma breve apresentação do server que está quase pronto já. Então, é um servidor com mapa custom sem teleports de versão 8.60, mas o fato dele não ter teleports não influencia tanto por que o servidor possui uma sala com tps para cidades e nessas cidades estão os lugares de caça, esses lugares são bem intuitivos como servidores de pokémon. A experiência do servidor giraria em torno de 300~500x só para não ficar muito desequilibrado e a galera ter como brigar pelo top. Gosto bastante de RPG, então as quests que irão vir vão ser todas de enigmas e historinhas curtas. Na parte de donation pretendo colocar Premium Account de começo mas ainda estou analisando o fato de colocar itens donate mas não aqueles P2W são itens para os jogadores iniciantes começarem mesmo (aceito sugestões). Se alguém tiver mais alguma pergunta fico á disposição de responder, vou seguir com alguns prints do mapa que eu mesmo comprei cru e customizei com pedaços de mapas disponibilizados aqui mesmo no TibiaKing. Cidade principal: 1- Esse é o DP, ele possui um teleport para ir na sala de TPS onde o jogador tem acesso aos Treiners, Cidades, Área Premium, Arena PVP e aos Boss 2- Esse é o Templo, nele também se encontra o NPC que vende bless 3- Esse é o mercado, onde fica todos npc comerciantes Castelo de guerra: Esse é o castelo que fica ao norte da cidade principal, ele vai funcionar simples, todo domingo ele será abeto e as guilds vão andar até ele e tentar puxar a alavanca no último andar, a última guild que estiver em posse do castelo quando o tempo acabar vai ter acesso á monstros únicos por uma semana. Cidade do fogo: Cidade de gelo: Cidade de floresta: Cidade do deserto: Ainda tá pequeno mas tá tudo devidamente separado, somente falta as quests e alguns sitemas. Me deem opinião galera, vlww
  21. #mda2018 - Melhores do Ano no Tk (listão)

    Nerivalhs reagiu a Cat por uma resposta no tópico

    1 ponto
    Novos conteúdos promovidos hoje! Dia de mapping no Tibia King, #mda2018 Só mapas! 07/01 • Arcan Isle cavehunt 8.60 • Forbbiden Village 8.60 • Demons dungeon cavehunt 8.60 • Fortress castle 24h 8.60 • Pharaos tomb cavehunt 8.60 • Warlocks Hunt 8.60 • Minotaur Camp 8.60 • Training center 11.40 • Lizard Chosen Cave 11.40 • Dwarf cave treiners 11.40 • Republic Bay 10.77 • Grimeleech dungeon cavehunt 11.40
  22. Comando /newtype reformulado.

    CainOTServer reagiu a jeremias por uma resposta no tópico

    1 ponto
    Olá Pessoal, refiz o script do comando /newtype, deixei o código um pouco mais legível e compactado. Corrigi um erro que quando você adicionava mais outfits no seu cliente o comando não reconhecia, agora basta você configura no script a quantidade de outfits que tem no seu cliente e pronto. como coloco em meu servidor? --< Script reformulado por Jeremias 14/03/2017 local quantidadeDeOutfits = 1500 -- < coloque a quantidade de outfits do seu servidor. function onSay(cid, words, param, channel) if(param == "") then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Complemente o comando com o parametro adequado.") end param = string.explode(param, ",") if (words == "/newtype") and (not param[2]) then if (tonumber(param[1]) <= quantidadeDeOutfits) then doCreatureChangeOutfit(cid, {lookType = param[1]}) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Esta Outfit nao existe.") end else doCreatureChangeOutfit(getPlayerByName(param[2]), {lookType = param[1]}) end return true end Caso tenha alguma sugestão para implementar no script é só falar.
  23. (Resolvido)[Pedido] NPC Task System

    Sivermisty reagiu a Vodkart por uma resposta no tópico

    1 ponto
    Mods: Task Kill.xml <?xml version="1.0" encoding="ISO-8859-1"?> <mod name="Task Kill" version="1.0" author="Vodkart" contact="tibiaking.com" enabled="yes"> <config name="KillM_func"><![CDATA[ tsk = { storages = {68754,68755}, task = {"dragon", 10}, -- nome do bixo e quantidade exp = 200, item = {2123,1} } ]]></config> <event type="login" name="AreKill" event="script"><![CDATA[ function onLogin(cid) registerCreatureEvent(cid, "CountTask") return true end]]></event> <event type="kill" name="CountTask" event="script"><![CDATA[ domodlib('KillM_func') function onKill(cid, target) if isMonster(target) then local n = string.lower(getCreatureName(target)) if n == tsk.task[1] and getPlayerStorageValue(cid, tsk.storages[2]) >= 1 then local contagem = getPlayerStorageValue(cid, tsk.storages[1]) if (contagem == -1) then contagem = 1 end if not tonumber(contagem) then return true end if contagem > tsk.task[2] then return true end setPlayerStorageValue(cid, tsk.storages[1], contagem+1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,""..(contagem == tsk.task[2] and "Congratulations! You finished the task of "..n.."." or "defeated. Total [" .. contagem .. "/" .. tsk.task[2] .. "] " .. n .. ".").."") end end return true end]]></event> </mod> npc: domodlib('KillM_func') local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid local msg = string.lower(msg) if isInArray({"task","mission","missao"}, msg) then if not tonumber(getPlayerStorageValue(cid, tsk.storages[1])) then npcHandler:say("Você já terminou a task!", cid) elseif getPlayerStorageValue(cid, tsk.storages[2]) >= 1 then npcHandler:say("Você já matou "..tsk.task[2].." "..tsk.task[1].."? {yes}", cid) talkState[talkUser] = 2 else npcHandler:say("Você deseja fazer uma missão de matar "..tsk.task[2].." "..tsk.task[1].." e receber "..tsk.exp.." de experience e "..tsk.item[2].." "..getItemNameById(tsk.item[1]).."? {yes}", cid) talkState[talkUser] = 1 end elseif isInArray({"yes","sim"}, msg) and talkState[talkUser] > 0 then if talkState[talkUser] == 1 then npcHandler:say("Parabéns! Agora você está participando da task, volte quanto tiver terminado!", cid) setPlayerStorageValue(cid, tsk.storages[2], 1) else if getPlayerStorageValue(cid, tsk.storages[1]) >= tsk.task[2] then npcHandler:say("Obrigado guerreiro, aqui está sua recompensa!", cid) setPlayerStorageValue(cid, tsk.storages[1], "Finished") doPlayerAddExp(cid, tsk.exp) doPlayerAddItem(cid, tsk.item[1], tsk.item[2]) else npcHandler:say("Você ainda não terminou a sua task!", cid) end end talkState[talkUser] = 0 elseif msg == "no" then selfSay("Tudo bem então", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
Líderes está configurado para São Paulo/GMT-03:00

Informação Importante

Confirmação de Termo