Líderes
-
Jeanfersonsp
MembroPontos29Total de itens -
Fabi Marzan
MembroPontos177Total de itens -
-
raphadoidera
MembroPontos110Total de itens
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 09/17/20 em todas áreas
-
Cave Exclusiva [SUPER UP] by WooX
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.lua1 ponto
-
Compilando TFS 1.3 com vídeo-aula
Compilando TFS 1.3 com vídeo-aula
Capitao wyz reagiu a Bruno Minervino por uma resposta no tópico
1 pontoCompilando 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ídeo1 ponto -
[8.6] Task System 4.0! (Task system + Daily Task System)
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!1 ponto
-
Deixando as Sprites mais Rápida no OTclient
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)1 ponto
-
Mega Sorteio Underwar 13 anos
1 pontoBacana sorteio, adorei a caneca e almofadinha s2 vou participar.1 ponto
-
[8.60][OLD Client] Narutibia (NTO HARD) - Servidor Completo
@kukas9 Sim, roda no windows também, mas recomendo o Linux1 ponto
-
[TFS 1.x] Scripting Service
1 pontoola, preciso que um item de me uma storage por tempo, uso tfs 1.3 por favor1 ponto
-
[Pedido] SPRITES MAIORES
[Pedido] SPRITES MAIORES
Cat reagiu a iluargrott por uma resposta no tópico
1 pontoSim, 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.1 ponto -
(Resolvido)Deixar runa ser usada apenas em si mesmo
(Resolvido)Deixar runa ser usada apenas em si mesmo
Cat reagiu a Thensus Warrior por uma resposta no tópico
1 pontoSó tive que colocar como action, mas funcionou perfeitamente, obrigado mano!1 ponto -
(Resolvido)Deixar runa ser usada apenas em si mesmo
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 end1 ponto
-
(Resolvido)Alguém poderia descompila esse client?
(Resolvido)Alguém poderia descompila esse client?
Cat reagiu a lwillmaial por uma resposta no tópico
1 pontocoroy o bixo é brabo :o1 ponto -
(Resolvido)Alguém poderia descompila esse client?
ta ae manito WoDBO_Warks.rar1 ponto
-
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
Cat reagiu a raphadoidera por uma resposta no tópico
1 pontoConsegui, 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:1 ponto -
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
Cat reagiu a Fabi Marzan por uma resposta no tópico
1 pontoTesta assim Kaguya.lua1 ponto -
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
Cat reagiu a raphadoidera por uma resposta no tópico
1 pontoIsso, porém a magia precisa dar DANO somente 1 Vez1 ponto -
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
Cat reagiu a Fabi Marzan por uma resposta no tópico
1 ponto1 ponto -
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
Cat reagiu a Jeanfersonsp por uma resposta no tópico
1 pontotroca > 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)1 ponto -
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
Cat reagiu a Jeanfersonsp por uma resposta no tópico
1 pontoRepete 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))1 ponto -
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
Cat reagiu a Jeanfersonsp por uma resposta no tópico
1 pontolocal 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) end1 ponto -
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
(Resolvido)SCRIPT COM DELAY NO MAGICEFFECT (HELP)
Cat reagiu a Jeanfersonsp por uma resposta no tópico
1 pontovc 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})1 ponto -
Análise de servidor 8.60
Análise de servidor 8.60
Nerivalhs reagiu a NathanAmaro por uma resposta no tópico
1 pontoEai 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, vlww1 ponto -
#mda2018 - Melhores do Ano no Tk (listão)
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.401 ponto
-
Comando /newtype reformulado.
Comando /newtype reformulado.
CainOTServer reagiu a jeremias por uma resposta no tópico
1 pontoOlá 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.1 ponto -
(Resolvido)[Pedido] NPC Task System
(Resolvido)[Pedido] NPC Task System
Sivermisty reagiu a Vodkart por uma resposta no tópico
1 pontoMods: 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())1 ponto