Líderes
-
Mono Singed
MembroPontos38Total de itens -
-
-
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 01/31/18 em todas áreas
-
[8.60] Sistema de Recompensa Loot De Boss Compartilhado (reward chest)
[8.60] Sistema de Recompensa Loot De Boss Compartilhado (reward chest)
Underewar reagiu a luanluciano93 por uma resposta no tópico
1 pontoOlá pessoal, resolvi criar um sistema de recompensa parecido com o sistema do tibia global para a versão 8.60, mas tie que fazer varias "gambiarras" para ele funcionar nesta versão. Para quem não conhece: http://www.tibiawiki.com.br/wiki/Loot#Sistema_de_Recompensas Basicamente meu sistema funciona da seguinte forma: • você determina as criaturas que irão funcionar com esse sistema (normalmente bosses). • durante a batalha com a criatura o sistema conta pontos aos jogadores por ataque, bloqueio e suporte ("healar" quem esta na batalha). • quando a criatura é morta o sistema cria um "loot" de acordo com os pontos e envia-o ao depot do jogador em uma bag determinada nas configurações. Primeiramente vamos criar o arquivo das configurações gerais, crie uma pasta dentro do "data" com o nome de sistemas e dentro cria um arquivo rewardchest.lua: Depois em creaturescript crie dois arquivos: rewardchest_boss.lua: e rewardchest_pontos.lua: Lembrando que em todas as criaturas que forem adicionadas ao sistema além de coloca-las no rewarchest.lua você deve add isso no xml do monstro: <script> <event name="RewardChestDeath"/> <event name="RewardChestMonster"/> </script> E isso no creaturescript.xml: <!-- Sistema de recompensa criado por luanluciano93 --> <event type="login" name="RewardChestLogin" event="script" value="rewardchest_pontos.lua"/> <event type="statschange" name="RewardChestStats" event="script" value="rewardchest_pontos.lua"/> <event type="death" name="RewardChestDeath" event="script" value="rewardchest_boss.lua"/> <event type="statschange" name="RewardChestMonster" event="script" value="rewardchest_boss.lua"/> Basicamente é isso, qualquer dúvida postem aqui ... abraços! LINK DO SCRIPT NO GITHUB: https://github.com/luanluciano93/ESTUDOS/tree/master/LUA/REWARD_SYSTEM_8601 ponto -
Easy Mapper 2.0 (Remeres 8.60 Customizado) FINAL [Atualizado 22/06/17]
Easy Mapper 2.0 (Remeres 8.60 Customizado) FINAL [Atualizado 22/06/17]
vedovi reagiu a Saymon Kopolsky por uma resposta no tópico
1 pontoAVISO: Faça backup (cópia) dos arquivos para evitar dor de cabeça. Eu customizei esse map editor para uso pessoal, mas resolvi postar porque a comunidade OT precisa de mais conteúdo. Eu não fiz isso tudo sozinho, tem varias extensões de outros fóruns, os créditos aos usuários estão descritos nelas. Scan: Clique aqui (1.0) Download: Clique aqui Como Instalar: Pressione a tecla com bandeira do windows + r, digite %appdata%, provavelmente você vai está na pasta roaming, delete a pasta remeres que estiver ai, se não tiver, apenas copie a pasta Remere's Map Editor que está dentro do arquivo winrar que você baixou, agora vá em arquivos de programas (C:\Program Files (x86) e crie uma pasta com o nome Remere's Map Editor e cole os outros arquivos estão dentro do arquivo rar.1 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
-
[TFS 1.x | Global Windows e Linux 10.0 OLD/11.3] Halls of Hope, Wrap, Store, Prey, Imbuing, Events - Castle War, Snow Ball, Zombie, BattleField
[TFS 1.x | Global Windows e Linux 10.0 OLD/11.3] Halls of Hope, Wrap, Store, Prey, Imbuing, Events - Castle War, Snow Ball, Zombie, BattleField
ronaldovrb reagiu a Qwizer por uma resposta no tópico
1 pontoGLOBAL 10.x/11x FEATURES • Global atualizado. • Todos os items atualizado e funcionando. • Prey System funcionando. • Imbuing System funcionando. • Todos os addons e outfits incluindo Retro. • Montarias 100% e funcionando • Novos monstros 100% • Roshamuul (Lower Roshamuul) Quest • Forgotten Knowledge Quest • Ferumbras' Ascendant Quest • Deepling Outfit Quest • Porta LVL 999 • Heart of Destruction Quest • Cast System com comandos exclusivos • Reward Chest dividido corretamente • Hotkey Equip com anti wpe • New Bank System (você não precisará carregar gold coin com você a todo tempo) • Walkable Fields (Os monstros não passam por certos fields, a menos que sejam atacados) • Proteção Anti-Kick • Regeneração de Stamina nos treiners offline e online • Global Frag System com o comando !frags ou !kills com comando !pz saiba o tempo da sua pz. • Limpeza de houses depois de 5 dias inativo • Exposição de blessings (Equipe com bordas douradas enquanto estiver com todas as blessings) • Wrap Furniture System (empacotação de itens decorativos) • Golden Tokens System (Criação de armas Critical / Leech - Npc Yana) • Silver Tokens System (Criação de armaduras - Npc Cledwyn) • Eventos PvP automáticos, Battlefield - Last Man Standing - Zombie - Bomberman - Snowball - Castle War Guild • War Privada com diversas opções para melhor balanceamento dos times (War Anti-entrosa) • Otherworld, Krailos, Gray beach, Roshamuul com recursos, Halls of Hope Warzone I,II,III, Ferumbras Ascendant, Hearth of Destruction, Grimvale etc... 100% ALGUMAS IMAGES (download) Download Creditos Vauban, TFS team, Pedrostti1 ponto -
New Library v. 1.2
New Library v. 1.2
Underewar reagiu a xWhiteWolf por uma resposta no tópico
1 pontoFala galera, hoje vim trazer pra vocês uma nova biblioteca de funções que eu venho desenvolvendo, pretendo ir atualizando esse tópico constantemente sempre adicionando funções novas e explicando a utilização delas. Algumas funções que eu coloquei aqui estão presentes na OTAL também, porém algumas eu fiz pequenas correções de forma que essa lib poderia facilmente substituir a OTAL sem grandes problemas (pelo menos se você utilizava apenas as funções básicas da otal) Todas as funções que não tem -- nome do autor do lado dela foram feitas por mim, xWhiteWolf ou Night Wolf (NW). O restante delas são créditos dos devidos autores, apenas coloquei pois considero funções vitais no server de cada um. Crie um arquivo em data/lib chamado 075 - White Wolf Functions.lua e coloque o seguinte código dentro: Agora eu vou explicar oque cada função faz porque de nada adianta lançar uma lib e não explicar oque ela faz não é mesmo? hahaha Obs inicial: quando uma função tiver em seus parametros um [] significa que oque está dentro do colchetes não é um parâmetro obrigatório. Como usar: doShowTimeByPos(cid, getCreaturePosition(cid), 20, 20) Irá fazer uma contagem regressiva na posição que o player se encontra começando de 20 e mandando a mensagem na mesma cor da fala dos monstros. Essa função é bem útil em actions/spells para fazer contagem de tempo em runas como a magic wall e ver quanto tempo falta pra magic wall sumir) Obs: Espero que ajude bastante pessoas a entender sobre funções, eu utilizei cid como o principal uid das funções nos exemplos mas você pode muito bem utilizar outros uids, fica a critério seu. Qualquer dúvida comentem abaixo que eu vou tentar ajudar da melhor maneira. Ahhh, isso daí foi testado em 8.54 mas deve funcionar em quase todas as versões que tenham as funções básicas do TFS. EDIT: Pessoal, agora é sério, essa lib tem fácil umas 600 linhas, das quais umas 500 eu devo ter codado sozinho (na mão, linha por linha). Eu tive todo o trabalho de testar cada uma delas e oque eu peço é o mínimo de gratidão e respeito. Se eu te ajudei clique em Gostei, se você tiver alguma dúvida eu to me colocando a disposição de responder qualquer coisa relacionada ao tópico, mesmo que você não saiba nem oque é uma lib apenas venha aqui e escreva sua dúvida. EDIT 2: Duas novas funções adicionas, espero que gostem! EDIT 3: Três novas funções adicionadas juntamente com suas respectivas explicações.1 ponto -
Adicionando Tiles a janela de jogo!
Hoje eu vim ensinar como aumenta a "tela" de jogo do OTCLIENT (Desculpe o merchant, era a unica imagem que eu tinha salvo) Testado em : 0.3.6pl1, Pode funcionar em 1.0 com alterações pequenas. Agora ache e troque: return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) && (y >= myPos.y - 6 + offsetz) && (y <= myPos.gety + 7 + offsetz)); Por: return ((x >= myPos.x - Map::maxClientViewportX + offsetz) && (x <= myPos.x + (Map::maxClientViewportX+1) + offsetz) && (y >= myPos.y - Map::maxClientViewportY + offsetz) && (y <= myPos.y + (Map::maxClientViewportY+1) + offsetz)); Agora ache: GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg); E troque por: GetMapDescription(pos.x - Map::maxClientViewportX, pos.y - Map::maxClientViewportY, pos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, msg); Agora em void ProtocolGame::sendMoveCreature(const Creature* creature, const Tile* newTile, const Position& newPos, uint32_t newStackpos, const Tile* oldTile, const Position& oldPos, uint32_t oldStackpos, bool teleport) Troque: A parte que começa em if (oldPos.y > newPos.y) { e Termina em GetMapDescription(newPos.x - 8, newPos.y - 6, newPos.z, 1, 14, msg); } Por: if (oldPos.y > newPos.y) { // north, for old x msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } else if (oldPos.y < newPos.y) { // south, for old x msg->AddByte(0x67); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y + (Map::maxClientViewportY+1), newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } if (oldPos.x < newPos.x) { // east, [with new y] msg->AddByte(0x66); GetMapDescription(newPos.x + (Map::maxClientViewportX+1), newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); } else if (oldPos.x > newPos.x) { // west, [with new y] msg->AddByte(0x68); GetMapDescription(newPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); Agora ache: if (newPos.z == 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 5, 18, 14, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 4, 18, 14, 4, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 3, 18, 14, 5, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 2, 18, 14, 6, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 1, 18, 14, 7, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 0, 18, 14, 8, skip); Depedendo da Source, a parte será assim: if (newPos.z == 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 5, 18, 14, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 4, 18, 14, 4, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 3, 18, 14, 5, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 2, 18, 14, 6, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 1, 18, 14, 7, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 0, 18, 14, 8, skip); Por: if(newPos.z == 7) //going to surface { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 5, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 4, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 4, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 3, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 5, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 6, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 7, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 0, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 8, skip); Agora ache: else if(newPos.z > 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, oldPos.getZ() - 3, 18, 14, 3, skip); Depedendo da source será assim: else if (newPos.z > 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, oldPos.getZ() - 3, 18, 14, 3, skip); Por: else if(newPos.z > 7) //underground, going one floor up (still underground) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, oldPos.z - 3, (Map::maxClientViewportX+1), (Map::maxClientViewportY+1)*2, 3, skip); Troque: //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - 8, oldPos.y - 5, newPos.z, 1, 14, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 1, msg); Por: //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - (Map::maxClientViewportY-1), newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); Agora troque: if(newPos.z == 8) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 14, -1, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 1, 18, 14, -2, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Dependendo da source poderá ser: if(newPos.z == 8) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 14, -1, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 1, 18, 14, -2, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Por: if(newPos.z == 8) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -1, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -2, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); Agora troque: else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Depedendo da source pode ser: else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Por: else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); Agora em map.h edite como quiser: static const int32_t maxViewportX = 11; //min: maxClientViewportX + 1 static const int32_t maxViewportY = 11; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 8; static const int32_t maxClientViewportY = 6; Observação: O modo de Edição é assim: static const int32_t maxViewportX = 11; //Minimo: maxClientViewportX + 1 static const int32_t maxViewportY = 11; //Minimo: maxClientViewportY + 1 static const int32_t maxClientViewportX = 8; static const int32_t maxClientViewportY = 6; Ou seja, se você por 10 em maxClientViewportX você tem que por no minimo 12 em maxClientViewportX eu sei que ali diz +1, só que aqui não deu certo Agora em map.cpp do OTCLIENT Ache: void Map::resetAwareRange() { AwareRange range; range.left = 8; range.top = 6; range.bottom = 7; range.right = 9; setAwareRange(range); } Troque por: { AwareRange range; range.left = 8; //Valor que colocou em maxClientViewportX range.top = 6; //Valor que colocou em maxClientViewportY range.bottom = range.top+1; range.right = range.left+1; setAwareRange(range); } Créditos: Flatlander - OTLAND - Criação Ceetros - Tradução Agora vamos deixar o OTCLIENT lindão. Troque tudo de modules/game_interface/interface.lua (na pasta do OTCLIENT) por: http://pastebin.com/tH7qyreW (para o tutorial não ficar muito grande botei no pastebin, já que o spoiler tá bugando) Creditos dessa parte: Edubart (Criador do OTCLIENT) Ceetros Caso tenha ajudado, dê um rep+1 ponto
-
OTHire RLMAP 7.72 - Tibia Legacy Server
OTHire RLMAP 7.72 - Tibia Legacy Server
rafanasser reagiu a Qwizer por uma resposta no tópico
1 pontoTibia Legacy Server O Tibia Legacy Server é um servidor Real Mapa OpenTibia 7.72, que imita todos os aspectos do jogo como era no ano de 2006. Por que 7.72? A escolha do protocolo 7.72 em vez da versão 7.4 mais popular foi por conta dos recursos disponíveis para chegar proximo a um servidor perfeito. O cliente 7.4 tem muitas falhas , tornando servidores 7.4 hoje em 7.72, servidores imitando 7.4 em jogabilidade e gráficos. Há muitos recursos para tornar um servidor 7.72 mais real, como CipSoft 7.7 arquivos vazados. Há também um motor decente para 7.72 o OTHire. Sources: Estamos usando OTHire 0.0.3, repositório OTHire. Mais: Para mais informações, consulte o Wiki. Ele tem informações sobre compilação, créditos, IDs e STORAGES usados, usando itemeditor, usando o Editor de Mapas RME e muito mais. Client: Tanto o cliente padrão 7.72 como o Otclient podem ser usados. Otclient destinado a 7.72 podem ser encontradas aqui. Creditos: Peonso1 ponto -
Dwarfer Quest Maker
Dwarfer Quest Maker
carlos2608 reagiu a Dwarfer por uma resposta no tópico
1 pontoFala, galerinha. Estou disponibilizando um programinha bem simples (porém útil) que eu tinha guardado há um bom tempo aqui. Trata-se de um quest maker, ou seja, um criador de scripts.lua (TFS 0.3.6/0.4 e 1.x+) para, mais precisamente, baús de quests. O Dwarfer Quest Maker (DQM) pode ser muito útil tanto para iniciantes que lotam a seção de pedidos como "Baú que dá item somente uma vez" ou "Baú que checa se player tem quest e adiciona item" quanto para quem já tem certo conhecimento e necessita criar várias quests podendo fazê-las em segundos. De forma bem resumida, as seções do DQM são as seguintes: Version - Escolha a versão correta do seu script; Message and Effect - Custom: Personalize a mensagem que aparecerá quando o jogador fizer a quest; - Default: Utilize a mensagem padrão do DQM; - Msg type: Escolha um dos estilos de mensagens que o programa possui e que geralmente estão em data/lib/000-constant; - Effect: Escolha o efeito que aparecerá na posição do player quando o jogador fizer a quest; Conditions: Trata-se do que o jogador deve possuir para conseguir fazer a quest; - Storage: Configure o valor do storage que o jogador deve possuir para fazer a quest; - Vocations: Adicione as vocações que possuirão permissão de fazer a quest; - Level: Defina um level mínimo para o jogador fazer a quest; Storages: - Serão verificados (antes) e adicionados (depois) ao jogador assim que a quest for feita; Rewards: - Insira as recompensas que serão adicionadas na quest; Todas as informações necessárias para a utilização do programa são encontradas na aba "Instructions". Vou demonstrar o funcionamento como um exemplo: [PEDIDO]: "Gostaria de uma quest que somente sorcerers acima do level 50 possam fazer. As recompensas seriam 2 crystal coins e 1 plate armor. Ahh, e já ia me esquecendo, só pode ser feita uma única vez. Versão: TFS 0.4" Depois de clicar em "Open the chest": Para finalizar, coloque o action ID, o nome do arquivo e clique em "Get tag as reward". Depois disso é só copiar para o arquivo na sua pasta actions e pronto. Espero que seja útil Scan do arquivo Download do arquivo1 ponto -
Como pegar todos os atributos de um item
Como pegar todos os atributos de um item
Crypter reagiu a Mono Singed por uma resposta no tópico
1 pontosubstitua: itemattributes.cpp1 ponto -
Como pegar todos os atributos de um item
Como pegar todos os atributos de um item
Crypter reagiu a Mono Singed por uma resposta no tópico
1 pontoApaguei um ":" sem querer, só deixar assim: std::map<std::string, ItemAttribute>* ItemAttributes::getAttributeMap()1 ponto -
Como pegar todos os atributos de um item
Como pegar todos os atributos de um item
Crypter reagiu a Mono Singed por uma resposta no tópico
1 pontotente: luascript.cpp Relaxa, tá quase lá, ahuahuauh O problema aqui tá sendo como fazer essa função retornar uma tabela de chave e valor (aka {chave = "valor", chave2 = "valor2"), eu não sabia fazer isso, to aprendendo na mao SHUASUHASUHA. Do jeito que tu fez vai retornar só os valores, fica meio ruim pra ti manipular depois.1 ponto -
Conflito entre scripts
1 ponto@gutalo Por sorte achei como resolver. Substitui o script de mining por esse: créditos: Radamanthys Wov1 ponto
-
(Resolvido)Summon atacando quem o summonou
(Resolvido)Summon atacando quem o summonou
Mark Ackerman reagiu a roriscrave por uma resposta no tópico
1 pontovai na pasta monsters procura o monstro que vai sumonar e muda essa linha <flag convinceable="0"/> troque por 1, ficando <flag convinceable="1"/>1 ponto -
Como pegar todos os atributos de um item
Como pegar todos os atributos de um item
Crypter reagiu a Mono Singed por uma resposta no tópico
1 pontoOkay, okay, alguns erros foram, mas a maioria foi porque eu não fiz isso usando uma ide, aí errei em alguns nomes e tal. Substitua teus arquivos por estes: itemattributes.cpp itemattributes.h luascript.cpp luascript.h (novamente, te explico como utilizar se compilar certinho)1 ponto -
Como pegar todos os atributos de um item
Como pegar todos os atributos de um item
Crypter reagiu a Mono Singed por uma resposta no tópico
1 pontoAmigo, eu fiz, mas utilizei padrões do c++11, tenha certeza de que o teu compilador esteja nessa versão. Também não testei (não creio que haja erros de lógica, mas pode haver alguns de escrita, como letras comidas ou falta de ;, fiz correndo), já que não dá pra compilar só com esses arquivos, mas vê aí: Antes de tudo, vamos para os includes: no arquivo luascript.cpp, adicione um: #include "itemattributes.h" onde tu encontrar os includes semelhantes já no arquivo luascript.h, declare a classe ItemAttribute: class ItemAttribute; onde tu encontrar as declarações de classes semelhantes Após "bool unserializeMap(PropStream& stream);", no arquivo itemattributes.h, adicione: AttributeMap* getMap(); Após a linha 315, no arquivo itemattributes.cpp, adicione: //RETORNA UM PONTEIRO PARA O ATTR MAP POR MOTIVOS DE PERFORMANCE, NÃO PODE SER UTILIZADO EM OBJETOS CONSTANTES!!! AttributeMap* ItemAttributes::getMap() { if(!attributes){ createAttributes(); } return attributes; } Após a seguinte linha no arquivo luascript.h: static int32_t luaGetItemAttribute(lua_State* L); Adicione: static int32_t luaGetItemAttributeMap(lua_State* L); Após a seguinte linha no arquivo luascript.cpp: //getItemAttribute(uid, key) lua_register(m_luaState, "getItemAttribute", LuaScriptInterface::luaGetItemAttribute); Adicione: //getItemAttributeMap(uid, key) lua_register(m_luaState, "getItemAttributeMap", LuaScriptInterface::luaGetItemAttributeMap); Após a linha 9282, no arquivo luascript.cpp, adicione: int32_t LuaScriptInterface::luaGetItemAttributeMap(lua_State* L) { //getItemAttributeMap(uid) ScriptEnviroment* env = getEnv(); Item* item = env->getItemByUID(popNumber(L)); if(!item) { errorEx(getError(LUA_ERROR_ITEM_NOT_FOUND)); lua_pushnil(L); return 1; } typedef std::map<std::string, ItemAttribute> AttributeMap; AttributeMap* attrMap = item->getAttributeMap(); lua_newtable(L); for(auto attr : attrMap){ setField(L, attr->first, attr->second.get()); pushTable(L); } return 1; }1 ponto -
DITTO E SHINY DITTO MEMORY !
1 pontoFala galera beleza ? criei este tópico para ajudar alguns que tem shiny ditto , e ditto , e usam a memory sistem por talkations , mas não sabem colocar no shiny ditto ! Espero que gostem Canal : Vini3h Em data / Talkations / scripts Criem 1 arquivo com o nome de dittomemory.lua (Caso não tenha) , e coloque isto dentro : Agora vá em : Data/Talkactions/Talkactions.xml E adicione está linha : OBS : /memory ; /memory check ; /memory save ; /memory forget São os comandos dele !!1 ponto
-
LF scripters & mappers
1 pontoHello, im starting a new project and im looking for good people to start with. Scripters: if you can speak English or spanish and Br its gonna be better! Link some post of your work Mappers: link some of your work in the comments Server description: *Story driven. *quest givers per zone *10.x prot Rates: x5x3x2 stages map: new map 50% progress -intro starting zone 100% scripts/events: *rifts *random type invasions *party raids *tibia quests *imported tibia zones by event ( rifts ) * legendary items *set geat + set bonus * disenchant system Leave a comment1 ponto
-
Como criar uma nova skill
1 pontoFala, galera! Beleza? Sou novo aqui no TK e queria trazer algo para vocês. Dei uma procurada e não achei nada do tipo, então creio que esse tutorial possa ajudar algumas pessoas! O que vou ensinar a vocês é como criar uma skill direto na source, o que permite que você utilize comandos como "getPlayerSkill", "doPlayerAddSkillTry" etc em seus scripts em Lua. Esse tutorial NÃO serve para criar skills de "combate", como sword, axe etc. Esse tipo de skill envolve vários outros parâmetros além do que mostrarei aqui. Quem sabe eu faça um tutorial sobre isso daqui um tempo. Preview de uma skill que criei para meu projeto: Para este tutorial, eu usei: Sources do The Forgotten Server 0.3.7: Aqui serão feitas várias edições, criando a nova skill e tudo que é necessário para a skill funcionar corretamente. Microsoft Visual Studio 2010 Professional: Utilizei para compilar o TFS com as novas edições. Se não souber compilar, procure em outros tópicos aqui do fórum. Não é meu objetivo aqui ensinar como compilar. É necessário compilar com o MVS? Não. Se você preferir, pode fazer com outros programas. Notepad++: Usei porque acho um editor de texto simples, prático e funcional. Não gosto de editar os códigos no MVS. Porém sinta-se à vontade para usar o editor que quiser. haha SQLiteStudio 2.1.4: Será necessário para fazer pequenas alterações para que seu banco de dados funcione corretamente. Se você utiliza MySQL, terá que fazer essas edições por outro programa. Sources do OTClient: Como utilizo o OTClient em meu servidor, usarei ele para demonstrar como adicionar a barrinha à janela de Skill. Se você utiliza outro client, infelizmente, não poderei dar suporte, já que nunca editei outros clients. Codeblocks: Usei para compilar o OTClient. Mas pode ser feito com o MVS também. A escolha é sua! Passo 1 - Editar a source do TFS: Passo 2 - Editar o OTClient: Passo 3 - Editar o TFS: Passo 4 - Editar a database: Pronto! Seu servidor já está configurado com a nova skill! Agora você poderá usar Lua para configurá-la! Vou dar um exemplo MUITO simples de como isso poderia ser feito em Lua: Claro que essa action acima é algo muito simples, mas, tendo o servidor já configurado, acredito que essas modificações abram uma gama de possibilidades imensas a todos que querem desenvolver uma nova skill. Espero que tenham gostado e que o tutorial seja útil para alguém! haha Qualquer erro ou bug, me avisem! Atenciosamente, Auro Mota.1 ponto
-
(Resolvido)Ajuda +REP Actions
1 pontovoce nao mudou, os Id's para os itens que tu queria por. muda aqui nessa linha 2464=item 1 2001=item 2 9000=item 31 ponto
-
[AJUDA] Spell com script de Movimentação do efeito com X e Y
[AJUDA] Spell com script de Movimentação do efeito com X e Y
Ronald warsks reagiu a Wesley Alexandre2014 por uma resposta no tópico
1 pontoNão sei se eu entendi errado, Mais fiz dah maneira que entendi, Tenta ai, Qualquer erro soh falar!. OBS: Não testei!1 ponto -
(Resolvido)Ajuda +REP Actions
1 ponto@Hokograma pra 2 itens: local rewards = {{2463,1}, {2001,1}} function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) < 1 then return doPlayerSendCancel(cid, "You need level 1 or higher to get the reward.") end if getPlayerStorageValue(cid, 24532) == 1 then return doPlayerSendCancel(cid, "You have already done this quest.") end setPlayerStorageValue(cid, 24532, 1) for i, v in pairs(rewards) do if (not isItemStackable(v[1])) then for c=1, v[2] do doPlayerAddItem(cid, v[1], 1) end else doPlayerAddItem(cid, v[1], v[2]) end end doCreatureSay(cid, "Voce fechou a quest", 1) doSendMagicEffect(getPlayerPosition(cid), 1) return true end pra 3 itens: local rewards = {{2463,1}, {2001,1}, {9000,1}} function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) < 1 then return doPlayerSendCancel(cid, "You need level 1 or higher to get the reward.") end if getPlayerStorageValue(cid, 24532) == 1 then return doPlayerSendCancel(cid, "You have already done this quest.") end setPlayerStorageValue(cid, 24532, 1) for i, v in pairs(rewards) do if (not isItemStackable(v[1])) then for c=1, v[2] do doPlayerAddItem(cid, v[1], 1) end else doPlayerAddItem(cid, v[1], v[2]) end end doCreatureSay(cid, "Voce fechou a quest", 1) doSendMagicEffect(getPlayerPosition(cid), 1) return true end1 ponto
-
(Pedido) Pokémon Imperium
(Pedido) Pokémon Imperium
Alberto Silvano reagiu a Helder Carvalho adm por uma resposta no tópico
1 pontoMano, eu achei ele no 4Sharad sem querer uma vez baixei para testa + como tenho meu projeto próprio apaguei, ver se encontra ela lá provavelmente ainda tá la1 ponto -
(Resolvido)Ajuda +REP Actions
1 ponto@lassdarck Entao usa a outra mesmo, porq to sem ideias... aqui uma lista do efeito das magic efect:1 ponto
-
5 NEW HUNT ➥ Cormaya - Dryad Gardens - Treeling Dungeon ➥ Edron - Forgotten Tomb - Vampire's Crypt (Edron)- Terramites' Cave (Devourer)
1 ponto
-
Teleporte Summon tfs 0.3.6
0 pontosTUTORIAL - TELEPORTE SUMMON Introdução: Fala pessoal, hoje vim aqui liberar um código para que futuros criadores de pokemon não usem GLOBALEVENTS ou MOVEMENTS para teleportar seus pokemons a distancia... hoje irei ensinar a você não usar mais esses scripts que aonde da maioria da vezes crash o servidores em WINDOWS em testes. Sobre o Sistema: Esse sistema tem a função de teleportar seu pokemon a certos sqm, tipo assim, você tem um pokemon e a distancia dele é 7 sqm, ao passar os 7 sqm ele teleporta para você, seja em qualquer lugar até de baixo da terra ou lugares super longe (Não se preocupe o problema do pokemon Morrer com source novas será removido e assim ele não vai morrer) Creature.cp Tutorial: Vá em sua source procure por creature.cpp e abra com algum editor de texto e ache: if(!summons.empty()) { std::list<Creature*>::iterator cit; std::list<Creature*> despawnList; for(cit = summons.begin(); cit != summons.end(); ++cit) { const Position pos = (*cit)->getPosition(); if((std::abs(pos.z - newPos.z) > 2) || (std::max(std::abs(( newPos.x) - pos.x), std::abs((newPos.y - 1) - pos.y)) > 30)) despawnList.push_back((*cit)); } for(cit = despawnList.begin(); cit != despawnList.end(); ++cit) g_game.removeCreature((*cit), true); } Mude para: /*if(!summons.empty()) { std::list<Creature*>::iterator cit; std::list<Creature*> despawnList; for(cit = summons.begin(); cit != summons.end(); ++cit) { const Position pos = (*cit)->getPosition(); if((std::abs(pos.z - newPos.z) > 2) || (std::max(std::abs(( newPos.x) - pos.x), std::abs((newPos.y - 1) - pos.y)) > 30)) despawnList.push_back((*cit)); } for(cit = despawnList.begin(); cit != despawnList.end(); ++cit) g_game.removeCreature((*cit), true); }*/ Agora salve ctrl+s e feche. Monster.cpp Tutorial: Agora procure por Monster.cpp e ache: void Monster::onThink(uint32_t interval) abaixo de: if(teleportToMaster && doTeleportToMaster()) teleportToMaster = false; coloque: if(getMaster()){ if(!Position::areInRange<6,6,0>(getPosition(), getMaster()->getPosition())) doTeleportToMaster(); } salve ctrl+s e revompila no modo rebuilde não esqueça de habilitar as opções em config.lua -- Summons maxPlayerSummons = 1 teleportAllSummons = true teleportPlayerSummons = true lembre se de remover qualquer scripts que teleporta seu pokemon a distancia. Créditos: By L3K0T0 pontos
-
Poké MOBA
0 pontos
-
[DUVIDA] Como liga 2 serves no mesmo PC?
[DUVIDA] Como liga 2 serves no mesmo PC?
lassdarck reagiu a JonatasLucasf por uma resposta no tópico
0 pontospergunta la no posto ipiranga0 pontos