Ir para conteúdo
  • Cadastre-se

Líderes


Conteúdo Popular

Mostrando conteúdo com a maior reputação desde 18/07/2018 em todas áreas

  1. 7 pontos
    Opa boa noite rapaziada, tudo bom? Eu estou treinando um pouco scripts e acabei que tendo a ideia de fazer algo relacionado com as Guilds. Então resolvi trazer 1 sistema de Guild Dungeon Lever para mim treinar Estou em fase de treinamento, então por favor, deem dicas e criticas ao sistema ! Obrigado ... Como o sistema funciona? Terá uma alavanca com local para os jogadores de sua Guild ficarem... O jogador que estiver na posição principal e próxima a alavanca irá clicar na alavanca que fará com que todos entrem na Dungeon. Os jogadores terão um tempo "x" para terminar, porém se o tempo acabar, o jogador será teleportado de volta para a posição principal da alavanca (Aonde o jogador clicou). Como configurar o script? local config = { time = 10, -- 1 Second. (1*60 To Minutes) level = 100, -- Level Necessary. dungeonPos = Position(1454, 909, 7), -- Dungeon Pos. needPos = { [1] = Position(1447, 915, 7), -- Position (where the player will click on the lever) and back position. [2] = Position(1449, 914, 7) }, fromPos = {x = 1449, y = 904, z = 7}, -- Position /\ < from the dungeon toPos = {x = 1456, y = 911, z = 7}, -- Position \/ > from the dungeon Storagetime = 39320, -- Storage Time. StorageDay = 39321, -- Storage Day. Timer = 24*60*60 -- To re-enter in the dungeon. (24hours) } time ------------------ Tempo que os jogadores ficarão dentro da Dungeon. level ----------------- Nível que todos precisam ser para entrar. dungeonPos ------ Posição que todos os jogadores serão teleportados. needPos ------------ Posição que os jogadores devem estar para serem teleportados. fromPos ------------- Posição SUPERIOR ESQUERDO da sala. toPos ----------------- Posição INFERIOR DIREITO da sala. Storagetime -------- Não mexer se não souber. StorageDay ----------- Não mexer se não souber. Timer ------------------ Tempo que o jogador terá que esperar para entrar novamente na Dungeon. Sem mais delongas, vamos ao script: Adicione a linha em: (data/actions/actions.xml) <!-- Script GUILD --> <action actionid="29305" script="Dungeon_Guild.lua" /> Adicione a linha em: (data/actions/scripts/Dungeon_Guild.lua) local config = { time = 5, -- 1 Second. (1*60 To Minutes) inside the dungeon. level = 100, -- Level Necessary. dungeonPos = Position(1454, 909, 7), -- Dungeon Pos. needPos = { [1] = Position(1447, 915, 7), -- Position (where the player will click on the lever) and back position. [2] = Position(1449, 914, 7) }, fromPos = {x = 1449, y = 904, z = 7}, -- Position /\ < from the dungeon toPos = {x = 1456, y = 911, z = 7}, -- Position \/ > from the dungeon Storagetime = 39320, -- Storage Time. StorageDay = 39321, -- Storage Day. Timer = 24*60*60 -- To re-enter in the dungeon. (24hrs) } function onUse(player, item, fromPosition, itemEx, toPosition, isHotkey) local guild = player:getGuild() for i = 1, #config.needPos do local playerTile = Tile(config.needPos[i]):getTopCreature() if not playerTile or not playerTile:isPlayer() then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "You need 2 players and stay on the orange floor.") return true end if not playerTile:getGuild() and not player:getGuild() then player:getPosition():sendMagicEffect(CONST_ME_POFF) return player:sendTextMessage(MESSAGE_STATUS_SMALL, "One of the members does not have guild.") end if playerTile:getLevel() < config.level then player:getPosition():sendMagicEffect(CONST_ME_POFF) return player:sendTextMessage(MESSAGE_STATUS_SMALL, "All the players need to be level "..config.level.." or higher.") end if player:getGuild():getId() ~= playerTile:getGuild():getId() then player:getPosition():sendMagicEffect(CONST_ME_POFF) return player:sendTextMessage(MESSAGE_STATUS_SMALL, "Only players in your guild can join you.") end if player:getStorageValue(config.Storagetime) - os.time() > 0 and playerTile:getStorageValue(config.Storagetime) - os.time() > 0 then player:getPosition():sendMagicEffect(CONST_ME_POFF) return false end if player:getStorageValue(config.StorageDay) - os.time() > 0 and playerTile:getStorageValue(config.StorageDay) - os.time() > 0 then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, string.format("You're in cooldown to enter in a dungeon again. Cooldown: %s.", string.diff(player:getStorageValue(config.StorageDay)-os.time()))) return false end local players = {} for x = config.fromPos.x, config.toPos.x do for y = config.fromPos.y, config.toPos.y do for z = config.fromPos.z, config.toPos.z do local tile = Tile(x, y, z) local creature = tile:getTopCreature() if creature and creature:isPlayer() then players[#players+1] = creature end end end end if #players > 0 then player:getPosition():sendMagicEffect(CONST_ME_POFF) return player:sendTextMessage(MESSAGE_STATUS_SMALL, "Already has a guild inside.") end player:teleportTo(config.dungeonPos) playerTile:teleportTo(config.dungeonPos) playerTile:getPosition():sendMagicEffect(50) addEvent(function() player:teleportTo(config.needPos[2]) playerTile:teleportTo(config.needPos[2]) player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE) playerTile:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE) player:setStorageValue(config.StorageDay, os.time() + config.Timer) playerTile:setStorageValue(config.StorageDay, os.time() + config.Timer) end, config.time*1000) return false end return true end Créditos: @KotZletY E eu Espero que gostem 😄 ... Edit* Adicionado Tempo para que você possa entrar novamente na Dungeon: Rep+
  2. 7 pontos
    tataboy67

    [TFS 1.1+] Bau diário

    Opa galera beleza? Eu vi um cidadão aqui do forum pedindo, e para não reviver o tópico resolvi desenvolver 1 e postar @ADM Mayk on BaiakME Ta ai o script que tu pediu. Crie um arquivo com o nome de Bau_Diario.lua local config = { items = { [1] = {2160, 10}, [2] = {2159, 10} }, level = 100, tempo = 24*60*60, -- 24 horas stoTime = 31402 } function onUse(player, item, fromPosition, itemEx, toPosition) if player:getLevel() >= config.level then if player:getStorageValue(config.stoTime) - os.time() < 0 then player:setStorageValue(config.stoTime, os.time() + config.tempo) for _, table in pairs(config.items) do for i=1, #config.items do player:addItem(table[i]) end end else player:getStorageValue(config.stoTime, 0) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, string.format("Wait: %s.", string.diff(player:getStorageValue(config.stoTime)-os.time()))) end else player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Voce nao tem level "..config.level..".") end end Adicione a TAG em actions.xml <action actionid="22164" script="Bau_Diario.lua"/> Créditos: Eu
  3. 5 pontos
    victor4312

    [8.60] OTX DEV 2_9

    OTX DEV 2_9 1.2 v0.4 Ola pessoal, venho disponibilizar uma distro OTX que utilizei em alguns projetos. Algumas características : - Não geral Salt (Podem usar 1/1 com site) - Cast System - War System - Anti divulgaçao Infelizmente só irei disponibilizar as sources pois não sei compilar em Windows, caso alguém se prontifique a compilar agradeço. Download SCAN [Creditos] Ciroc por desenvolver Victor por postar *** Comandos para compilar *** Testando em Ubuntu. apt-get update apt-get install autoconf libboost-all-dev libgmp-dev liblua5.1-0 liblua5.1-0-dev liblua50 liblua50-dev liblualib50 liblualib50-dev lua50 lua5.1 libxml2-dev libxml++2.6-dev libmysql++-dev libsqlite0-dev libsqlite3-dev build-essential cd /home/baiak/source chmod 777 autogen.sh chmod 777 build.sh; ./autogen.sh; ./configure --enable-server-diag --enable-mysql --enable-root-permission; ./build.sh;
  4. 5 pontos
    bom resolvi mexer um pouco com a rev 3884 e encontrei com um bug na que estou mexendo, que seria o seguinte, tudo que vc dar target ao cancelar vc toma DC, seja em monstros ou npc pra resolver segue essas alterações na source: protocollgame.cpp ache: void ProtocolGame::sendCancelTarget() { NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); msg->put<char>(0xA3); msg->put<uint32_t>(0); //? creatureId? } } altere para: void ProtocolGame::sendCancelTarget() { NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); msg->put<char>(0xA3); } } de rebuild e compile.. problema resolvido
  5. 5 pontos
    DdJs

    War Golem's Cave | Cave Hunt | 8.60

    Cave hunt - War Golem Cave. Download: Here Scan: Here Imagens:
  6. 5 pontos
    vital900

    Elysium Online [Download]

    Fala pessoal, beleza? Desculpa a formatação ruim... e todos os defeitos que trarei nesse post, para quem não me conhece eu fui mapper por muito tempo... um dos pioneiros do tibia! E desde quando comecei a mapear até o dia que parei eu tive um projeto de server chamado elysium... nele passaram grandes mappers que muitos aqui nem nunca ouviram falar... seja porque foram professores de map junto a mim ou meus queridos alunos... enfim... vamos falar desse server! este servidor começou com dois amigos de fórum: vital900 (eu) e o lordzezim... hoje em dia nem sei o que o José faz da vida... mas sempre guardei esse nosso projeto com muito amor e carinho e sempre pensei em finaliza-lo depois de formar no curso que escolhi... como cada vez mais tenho menos tempo e vejo que nunca irei finaliza-lo decidi postar todo o esforço de uma grande equipe, pois não ache que só tem mapa... tem de tudo, desde scripts a sprites, inclusive roleplay, map, etc... e a equipe que construiu isso comigo sempre foi a elite da época... então espero que quem tenha o interesse em continuar esse grande trabalho tenha respeito por quem iniciou e passou por ele... e quando estiver em construção postar fotos entre outros para que as pessoas vejam a continuação desse trabalho... Algum dos posts desse nosso trabalho que se iniciou em 2009-2011: ** como disse é um projeto de 2009-2011, que se estendeu por 4-6 anos... logo tem muita coisa noob pela incapacidade minha ou pela falta de sprites da época 😂 Eis o link do meu grande amor, com tudo o que foi feito... planejado e construído! https://drive.google.com/open?id=1RQs9SUeDz57FdCrB9ZEE5JiJAl18bq1T *Obs: na epoca me ofereceram 3000 reais por esse material que estou disponibilizando de forma gratuita... como ja disse espero que tenham respeito por esse material e no mínimo as devidas referências.
  7. 4 pontos
    DdJs

    Warlocks Hunt | 8.60

    Cave hunt - Warlocks Cave. Download: Here Scan: Here Imagens:
  8. 4 pontos
    Vodkart

    [8.60] Teleportes Falantes Em Laranja

    Resolvendo a dúvida deste tópico: Resolvi postar para que possa ajudar futuros membros. Resultado: Código: nome do seu script.lua local positions = { {texto = "CTF" , pos = {x = 180, y = 48, z = 7}}, {texto = "Battle F." , pos = {x = 184, y = 48, z = 7}}, {texto = "DesertWar" , pos = {x = 184, y = 57, z = 7}}, {texto = "Castle24H" , pos = {x = 157, y = 62, z = 7}}, {texto = "Castle48H" , pos = {x = 175, y = 62, z = 7}}, {texto = "TeamBattle" , pos = {x = 176, y = 56, z = 7}}, {texto = "Campo M." , pos = {x = 177, y = 56, z = 7}}, {texto = "FireStorm" , pos = {x = 187, y = 53, z = 7}}, {texto = "IOE" , pos = {x = 175, y = 56, z = 7}}, {texto = "rank" , pos = {x = 60, y = 122, z = 7}}, {texto = "Boss Room" , pos = {x = 187, y = 51, z = 7}}, {texto = "Leia" , pos = {x = 182, y = 51, z = 7}}, {texto = "RushEvent" , pos = {x = 174, y = 56, z = 7}}, {texto = "Leia" , pos = {x = 2959, y = 698, z = 6}}, {texto = "Editados" , pos = {x = 233, y = 2050, z = 4}}, {texto = "Snowball" , pos = {x = 180, y = 57, z = 7}}, {texto = "Dota" , pos = {x = 177, y = 49, z = 7}} } function onThink(cid, interval, lastExecution) for _, pid in pairs(positions) do local t = getSpectators(pid.pos, 7, 5, false) if t then for _, cid in ipairs(t) do if isPlayer(cid) then doCreatureSay(cid, pid.texto, TALKTYPE_ORANGE_1, false, cid, pid.pos) end end end end return true end colocar o Texto e depois a pos de onde vai sair o texto!! TAG <globalevent name="OrangeTalk" interval="3" script="nome do seu script.lua"/> caso seu servidor seja em milesegundos, alterar o "3" por "3000" abraços
  9. 4 pontos
    L3K0T

    GRAMA - SPRITE - REPINTADA (VERDE)

    Olá galera esses dias repintei uma grama que no caso era amarela, deixei ela num tom verde que ficou muito bonita no mapa e não quebrava a cor das arvores etc... essa é do tibia global, então só mudei a cor dela. espero que gostem algumas imagens abaixo junto a meu jogo . grama >> scan da sprite de montar: https://www.virustotal.com/#/file/c80fbe750939ce45bfedccbfc81dbe76032ef5c760146607b6c29263cffb6cc1/detection scan da sprite OBD: https://www.virustotal.com/#/file/9c4cef388da4a8c19e45c8eb4aa85ba7d376103ffdcabd157f43e1929979e618/detection Download da sprite pra montar: http://www.mediafire.com/file/eep0s1a5gd8fn5n/grama 1.zip Download da sprite em OBD: http://www.mediafire.com/file/fr3db9ctmt44dam/sprite em obd.zip senha: pokemonpwo créditos: cipsoft e a mim por mudar a cor pra verde como na imagem.
  10. 3 pontos
    Werner

    Best Baiak Completo

    Eae pessoal do Tk Trago aqui um Baiak (BestBaiak) com um novo visual e completo! Se trata de um Servidor 8.60, completo e ja pronto para ser colocado Online, sem bugs. (funciona melhor em MySql) + de 50 Hunts Free Muitos trainers, assim não ficara sem. Vocations Equilibradas. War System com escudos. Itens donates balanceados. Contando com todos os Eventos atuais: Zombie Event Snowball War Event Capture the Flag Battlefield Desert War Defend The Tower Fire storm Boss King Conta também com: Castle 24h Castle 48h Vip1 e Vip2 Free Area Donate SuperUp Dodge e Critical system Extra Cidade com mais houses MiniGames Sistema de !autoloot já instalado Quest Promotion 2 Npc que troca itens por EventCoins Monstros exclusivos ScreenShots do Servidor Donwload: Servidor completo 4shared: Clique Aqui! Servidor completo Mediafire: Clique Aqui! Scan VirusTotal:(Acusando malware por conta das executáveis): Clique Aqui! Créditos: Coisas como items.xml e items.otb com os itens donate já editados podem ser encontrados aqui no tópico. Suporte para alguns bugs encontrados até o momento também se encontram no tópico. Espero que gostem.
  11. 3 pontos
    Etherious

    Cliente Descompilado DBOAbsalon

    Fala comunidade, venho hoje trazer a vocês as sprites do DBOAbsalon, eu achei um cliente muito doido cheio de sprites de nto etc.. porem tem sprites muito bonitas descompilado hoje dia 25/07/2018, façam bom proveito. Cliente Descompilado : https://mega.nz/#!X5NDzawL!fA-42Dudvnm6SK5frPTfBHR25CO7kIKAZXQ4dHsHApw Scan: https://www.virustotal.com/pt/file/b04a7ab78151783583c7cb3bd06c75390536a8c75d37c2d24cd049c2a198d26f/analysis/1532529792/ Créditos: DBOABSALON
  12. 3 pontos
    Navegante

    RESPONDIDO Premium

    Quero agradecer ao Vodkart, ricardo codenome e tataboy67 pela ajuda no tópico, muito obrigado! ate onde eu testei o sistema funcionou perfeitamente, testei primeiro com 2 personagens na mesma conta, depois testei desligando a distro sem salvar e por fim testei salvando a distro e desligando. Todos os métodos testados foram bem-sucedido!
  13. 3 pontos
    DboExplorer

    [BUG] Nome de item no Market

    Você tem que alterar no próprio object builder abrindo seu dat/spr
  14. 3 pontos
    @ADM Mayk on BaiakME GlobalEvents XML <globalevent name="Event_Chest" time="18:00:00" event="script" value="Event_Chestt.lua"/> <globalevent name="Event_Chest" time="16:00:00" event="script" value="Event_Chestt.lua"/> <globalevent name="Event_Chest" time="14:00:00" event="script" value="Event_Chestt.lua"/> Script local itemID = 2555 -- ID do BAU local h = { Segunda = "18", Quarta = "14", Sexta = "16" } local pos = { [1] = {x = 1, y = 1, z = 1}, [2] = {x = 1, y = 1, z = 1}, [3] = {x = 1, y = 1, z = 1}, [4] = {x = 1, y = 1, z = 1}, [5] = {x = 1, y = 1, z = 1}, [6] = {x = 1, y = 1, z = 1}, [7] = {x = 1, y = 1, z = 1}, [8] = {x = 1, y = 1, z = 1}, [9] = {x = 1, y = 1, z = 1}, [10] = {x = 1, y = 1, z = 1} } local function doExecuteEvent() local bau1 = math.random(1, #pos) local bau2 = math.random(1, #pos) doCreateItem(itemID, bau1) doCreateItem(itemID, bau2) return true end function onTimer() if os.date("%A") == "Monday" and os.date("%H") == h.Segunda then doExecuteEvent() doBroadcastMessage("Há 2 tesouro perdido em BaiakME City", 19) return true elseif os.date("%A") == "Wednesday" and os.date("%H") == h.Quarta then doExecuteEvent() doBroadcastMessage("Há 2 tesouro perdido em BaiakME City", 19) return true elseif os.date("%A") == "Friday" and os.date("%H") == h.Sexta then doExecuteEvent() doBroadcastMessage("Há 2 tesouro perdido em BaiakME City", 19) return true end return true end Actions XML <action itemid="BAU_ID" event="script" value="Bau_event.lua"/> Script local t = { [1] = {50, 2160, 100}, -- [Numero em sequencia] = {CHANCE, ITEM ID, COUNT} [2] = {30, 2325, 1}, [3] = {20, 2678, 1}, [4] = {10, 2956, 5} } local storage = 346366 function onUse(cid, item, fromPosition, itemEx, toPosition) for a, b in pairs(t) do if math.random(1, 100) <= b[1] and getCreatureStorage(cid, storage) == -1 then doCreatureSetStorage(cid, storage, 1) doPlayerAddItem(cid, b[2], b[3]) end end doCleanTile(toPosition) doBroadcastMessage("O Player ".. getCreatureName(cid) .." Achou um BAU!!", 27) doCreatureSetStorage(cid, storage, -1) end
  15. 3 pontos
    Gabrieldsadaxas

    War Golem's Cave | Cave Hunt | 8.60

    Seus mapas são muito bons! Um dos principais motivos de eu entrar no tibiaking todo dia (ver se você publicou algo novo)
  16. 3 pontos
    vankk

    Coach OT

    Olá, eu estou querendo dar Coach para servidores, explicar como as coisas funcionam na programação, melhorar a comunidade de Open Tibia e também ajudar, caso você esteja interessado entre em contato comigo via Discord. Tem algumas regras: - Só usaremos Discord. - Respeito acima de tudo. - Só entrar em contato caso você já possua um servidor online. - Já saiba sobre a lógica de programação (porque se não, se torna MUITO difícil de ajudar) - Eu tentarei te responder o mais rápido possível, não seja uma criança mimada. - Você querer aprender. - Se eu perceber que você está sendo Leecher, e não está querendo aprender, eu não vou responder mais. No primeiro contato você responderá algumas perguntas minhas para saber quem que você é - e nos conhecermos melhor, claro. E não, eu não vou fazer um script para você, vou tentar te explicar a lógica do que você quer! E você vai tentar fazer! Sim, você vai aprender! Tá, .. mas quem eu sou? Me conhecem como vankk, e sou dono do AuraOT. Eu jogo Tibia a 14 anos, e programo OTS a 9 anos. Atualmente eu sou um contribuidor do The Forgotten Server, e também faço trabalhos para diversos servidores com bastante jogadores online. Possuo conhecimentos em PHP, Lua, Python, Java, JavaScript. Resumidamente é isso, não gosto de enrolar muito, gosto de ser direito. Meu discord é vankk#7765
  17. 3 pontos
    Snowsz

    Creature Information Offset

    Faz tempo que não posto nada, então deu vontade, tava brincando um pouco ai fiz esse sisteminha básico. • Gifs Nesse primeiro Gif, ao trocar a direção da Outfit, o nome e as barras de informações como Health, Mana, mudam de posição, isso é bom para ajustar as Outfits de acordo com o seu tamanho, como o Demon, ficar com as informações logo em cima da cabeça, ou Hydra, todos estão com o local padrão. Aqui era como as informações ficavam com essa Outfit originalmente, no padrão de sempre dos clients. Comparativo em imagem estática: Tibia Outfit antes e depois: Aqui estão algumas outfits que meu primo @Fae1z fez, apliquei o sistema de offset nelas, uma do Graves, uma do Ekko, ambos são personagens do game League of Legends, e uma baseada Uganda Knuckle: Ekko antes: Ekko depois: Graves antes e depois: Uganda Knuckle antes e depois: Aqui eu estava brincando de por as informações da Outfit de anão de modo drogado kkk. • Código Em Creature.h modifique nesta linha: void Creature::drawInformation(const Point& point, bool useGray, const Rect& parentRect, int drawFlags) Mude "const Point& point" para "Point& point". Ficando: void Creature::drawInformation(Point& point, bool useGray, const Rect& parentRect, int drawFlags) Embaixo de: std::string getName() { return m_name; } Adicione: Point getInformationOffset() { return m_informationOffset; } void setInformationOffset(int x, int y) { m_informationOffset.x = x; m_informationOffset.y = y; } Embaixo de: Position m_oldPosition; Adicione: Point m_informationOffset; Agora, em Creature.cpp procure por: void Creature::drawInformation(const Point& point, bool useGray, const Rect& parentRect, int drawFlags) Mude "const Point& point" para "Point& point". Ficando: void Creature::drawInformation(Point& point, bool useGray, const Rect& parentRect, int drawFlags) Sim, isso está repetido, é assim mesmo, o processo é necessário em Creature.h e Creature.cpp, nessa função a variável point tem seu tipo alterado de Const para normal. Ainda em Creature.cpp procure por: if(!useGray) fillColor = m_informationColor; Pule duas linhas e adicione: point.x += m_informationOffset.x; point.y += m_informationOffset.y; Agora, em Luafunctions.cpp procure por: g_lua.bindClassMemberFunction<Creature>("jump", &Creature::jump); Embaixo adicione: g_lua.bindClassMemberFunction<Creature>("setInformationOffset", &Creature::setInformationOffset); g_lua.bindClassMemberFunction<Creature>("getInformationOffset", &Creature::getInformationOffset); A parte da source é só isso. Foi criada uma variável do tipo Point na classe Creature, que pode armazenar dois valores do tipo Int, sendo eles X & Y, assim detendo uma posição de offset, para ajustar a posição das informações(Health Bar, Mana Bar e Name) da criatura, essa variável é usada na função Creature::drawInformation, onde ocorre todo o desenho de informações das criaturas, lá o offset criado altera a posição de um Point usado como posição base das informações, alterando esse Point todo o resto segue aquela posição, você pode setar o offset diretamente na criatura, as funções podem ser usadas tanto na source usando C++ quanto nos scripts usando Lua, em Lua o uso das funções é o seguinte: Essa função retorna uma tabela com X & Y, algo como "table = {x = 10, y = 20}", são as posições do offset. Creature:getInformationOffset() Exemplo de uso: local Offset = Creature:getInformationOffset() print(Offset.x) print(Offset.y) Isso vai printar no client_terminal do OTClient os valores de X & Y. Enquanto esta altera as posições usando os valores X & Y. Creature:setInformationOffset(x, y) Exemplo: Creature:setInformationOffset(10, -5) Essa configuração de offset vai aumentar X em 10 Pixels e diminuir Y em 5 Pixels, no meu primeiro gif, na direção Sul do Char, eu usei X diminuindo 13 Pixels e Y diminuindo 8 Pixels, algo como isso: Creature:setInformationOffset(-13, -8) Para tudo isso funcionar igual os gifs acima eu fiz um módulo especial, onde dependendo da Outfit e da direção que a criatura está olhando, ele vai alterar o offset de acordo. Para criar o módulo, siga estes passos: Na pasta do OTClient em modules/ crie uma pasta chamada game_creatureinformation, dentro crie um arquivo com o mesmo nome e a extensão .otmod, algo como "game_creatureinformation.otmod", o conteúdo do arquivo é este: Module name: game_creatureinformation description: Changes the position of the informations point to correctly draw names and creature bars. author: Snowsz website: tibiaking.com autoload: true reloadable: true sandboxed: true version: 1.0 scripts: [ game_creatureinformation ] @onLoad: init() @onUnload: terminate() Crie um arquivo com o mesmo nome e a extensão .lua, algo como "game_creatureinformation.lua", o conteúdo do arquivo é este: --[[ Directions: North /\ East > South \/ West < Structure: [OutfitID] = { [Direction] = {x = OFFSETX, y = OFFSETY}, } ]] --Lista de offsets para cada Outfit. local OutfitOffsets = { [143] = { --Outfit do primeiro gif [North] = {x = -13, y = -8}, [East] = {x = -17, y = -8}, [South] = {x = -13, y = -8}, [West] = {x = -15, y = -8}, }, [160] = { --Outfit de anão com o nome full drogado. [North] = {x = 0, y = 0}, [East] = {x = 0, y = 0}, [South] = {x = -13, y = -80}, [West] = {x = 0, y = 0}, } } local function translateDir(dir) if dir == NorthEast or dir == SouthEast then return East elseif dir == NorthWest or dir == SouthWest then return West end return dir end local function getOutfitInformationOffset(outfit, dir) if OutfitOffsets[outfit] then return OutfitOffsets[outfit][translateDir(dir)] end return {x = 0, y = 0} end local function onCreatureAppear(creature) local Offset = getOutfitInformationOffset(creature:getOutfit().type, creature:getDirection()) creature:setInformationOffset(Offset.x, Offset.y) end local function onCreatureDirectionChange(creature, oldDirection, newDirection) local Offset = getOutfitInformationOffset(creature:getOutfit().type, newDirection) creature:setInformationOffset(Offset.x, Offset.y) end local function onCreatureOutfitChange(creature, newOutfit, oldOutfit) local Offset = getOutfitInformationOffset(newOutfit.type, creature:getDirection()) creature:setInformationOffset(Offset.x, Offset.y) end function init() connect(LocalPlayer, {onOutfitChange = onCreatureOutfitChange}) connect(Creature, { onAppear = onCreatureAppear, onDirectionChange = onCreatureDirectionChange, onOutfitChange = onCreatureOutfitChange }) end function terminate() disconnect(LocalPlayer, {onOutfitChange = onCreatureOutfitChange}) disconnect(Creature, { onAppear = onCreatureAppear, onDirectionChange = onCreatureDirectionChange, onOutfitChange = onCreatureOutfitChange }) end A parte do módulo está finalizada, o que resta agora é configurar as Outfits na tabela com seus determinados Offsets, e não se preocupe, se a outfit não estiver configurada, ela vai seguir o padrão normal, o módulo só altera algo quando determinada Outfit está configurada. Para configurar o módulo é simples, basta seguir o padrão: [ID DA OUTFIT AQUI] = { [North] = {x = 0, y = 0}, [East] = {x = 0, y = 0}, [South] = {x = 0, y = 0}, [West] = {x = -0, y = 0}, }, Nos primeiros colchetes coloque o ID da sua Outfit para ter o offset modificado, os colchetes restantes são as direções, não é necessário mexer neles, dentro de cada índice da tabela tem os offsets X & Y, basta modificar o valor de acordo, sendo ele positivo ou negativo. NÃO SE ESQUEÇA DA VÍRGULA NO FINAL "},".
  18. 2 pontos
    Fala galera eu recentemente me aventurei a adicionar uma nova outfit no servidor e com addon e descobri que não tinha muitos conteúdos falando sobre isso detalhadamente com imagens etc... então resolvi pegar tudo o que aprendi e vou explicar a vocês detalhadamente passo a passo com as ferramentas que temos hoje no caso o object builder. Programas Usados: Paint Object Builder Explicando jogo de cores a serem adicionadas e como adicionar Todo o cabelo Blusa e Braços Pernas Botas e detalhes do corpo 1º- Outift Toda Branca obs: É necessário a outfit pintada toda de branco por causa da paleta de cores quando for trocar as cores e a outfit estiver colorida ao mudar a cor vai mesclar uma cor com a outra e quando mudar para a cor branca vai mudar para a cor que estava então caso o cabelo for amarelo quando adicionar no cliente e for na paleta de cores in-game e mudar para a cor branca vai ficar amarelo o cabelo.... Exemplo: Configurações padrão para criar a nova outfit obs: Única coisa que notei referente a essas configurações é que se for diferente disso ao adicionar a sprite do addon ela buga.... 2º- Adicionando as áreas que vão mudar de cor Exemplo: Para criar essa parte colorida basta pegar as sprites normais da outfit e pintar de rosa as áreas do rosto das mãos caso aparecer dedos etc... remover também tem que sobrar apenas as áreas das roupas que vai mudar de cor... obs: caso quiser que algum detalhe da roupa continue sem mudar de cor padrão basta não pintar de nenhuma cor seja amarelo na parte da cabeça, vermelho na parte do busto, verde parte das perna e nem em azul a parte das botas e detalhes do corpo todo. 3º- Adicionando as áreas que vão mudar de cor na outfit Quando você tiver criado o slot com as configurações padrões acima vai ter a opção Blend Layer nas opções de aparence no object builder logo abaixo onde adiciona as sprites Exemplo: Ao selecionar a caixa a oufit adicionada vai sumir então você vai adicionar as sprites da sua oufit colorida Exemplo: Após adicionar tudo certinho como se fosse uma nova outfit basta salvar e compilar. 4º- Adicionando a nova outfit no Set Outfit Mesmo tendo adicionado no cliente ainda não é possível selecionar a nova outfit na opção Set Outfit dentro do jogo para habilitar essa opção você vai ter que ir na pasta pasta do seu servidor/data/xml/outfits obs: pode várias de servidor para servidor como vai estar mas essa linha de script é padrão. <outfits> <outfit id="1" premium="0"> <list type="female" looktype="136" name="Citizen"/> <list type="male" looktype="128" name="Citizen"/> </outfit> Tem também a versão que precisa de storage para ser usada só vai liberar a outfit ou addon para o player que tiver a storage configurada <?xml version="1.0"?> <outfits> <outfit id="1" quest="9785"> <list gender="0" lookType="1288" name="Test"/> <list gender="1" lookType="1288" name="Test"/> </outfit> </outfits> ou também pode ser adicionado com a linha premium ficando assim <outfits> <outfit id="1" premium="0" quest="9785"> <list type="female" looktype="136" name="Citizen"/> <list type="male" looktype="128" name="Citizen"/> </outfit> obs: Premium = 0 free Premium = 1 premium 0 contas free account podem usar a outfit 1 apenas contas premium podem usar a outfit 5º-Explicando Configuração das linhas Em ID é o id da outfit dentro do script outfit.xml então basta ir no ultimo adicionado e seguir a contagem se o ultimo for 44 o próximo é 45 e assim vai Quest é a storage necessária para o player poder liberar a outfit no set outfit Female looktype é o id da outfit da mulher no object builder no caso do citizen a outfit da mulher é 136 e o nome que vai aparecer no set outfit da outfit é citizen Male looktype é o id da outfit do homem no object builder no caso do citizen a outfit do homem é 128 e o nome também é citizen obs: Caso a outfit ser a mesma para mulher e homem basta colocar o mesmo looktype nos dois e colocar o mesmo nome da outfit. --------- ENCERRAMENTO --------------- Se gostou curta Se o tópico bombar trago a parte de adicionar os addons bem explicado nesse mesmo tópico By: Brunds
  19. 2 pontos
    Vodkart

    [8.6] Survive Arena System

    Versão 1.0.0

    0 downloads

    *Sobre o Sistema* O sistema é simples, basta você sobreviver as waves com seu time(ou solo) para obter recompensas finais! *Features* [+] Sistema de GEMA que mostra se tem players dentro da arena, ficando VERMELHO se tiver player dentro da arena ou VERDE se não houver ninguém! [+] O Jogador poderá ir SOLO ou em um TIME! [+] O Jogador deverá ter um level MIN e MAX configurado no sistema! [+] O Jogador só poderá ir a cada 24 HORAS por exemplo [+] Caso jogador não consiga chegar até o final ele ganhará recompensas em exp e money por wave vencida! [+] A recompensa final é randômica, ou seja, tem chance de vir itens melhores dependendo da sorte do player! Fazendo com que a arena seja usada diariamente para obter estas rewards! [+] O sistema conta com um exclusivo sistema de TIMER, que ao segurar o respawn por 2 minutos uma mensagem é enviada ou jogador dizendo que se ele não derrotar todos os monstro da sala em 5 minutos ele(e o time se for o caso), será kikado da sala! [+] Fácil configuração [+] Ao morrer na arena você(seu time) não perdem level, exp, loot, etc...(não precisa nem colocar pvp tool no mapa) [+] Jogadores dentro da arena não se atacam [+] Mensagem informando a quantidade de monstro da proxima wave! [+] O respawn do sistema é dividido em 2! Como assim? digamos que está configurada na wave 3: -- > 20 Demons, 40 Hydras, 30 cyclops <-- Então vai ter 2 "levas" de monstros nessa wave, sendo a primeira leva de 10 Demons, 20 Hydras e 15 Cylops e depois de 10 segundos, automaticamente, vem o restante que seria mais 10 Demons, 20 Hydras e 15 Cylops! *Versão Testada* Versão Tibia 8.6 TFS 0.3.6

    R$ 20,00

  20. 2 pontos
    quemtuacha

    Tibia Extended Client Library

    Eu vi esse ferramenta em outro forum e resolvi trazer praqui. O dono diz no topico que funciona nos clients 8.54 e 8.60. Eu testei no client 8.6 e funciona, porem quando usa o atalho ctrl+n crasha o client. Para usar é só jogar a ddraw.dll e o config.ini na mesma pasta do client. Recursos Estendidos Arquivos do cliente estendido (excede o limite do sprite 65535) Arquivo .spr de canal alfa (permite usar transparência (atualmente só funciona em DX9 e OGL) Mostrar porcentagem de saúde / mana no cliente Corrigir algum problema estranho com timeGetTime no windows 10 + ryzen cpu Manabar desenho abaixo do jogador Excede o limite de 255 efeitos mágicos Excede o limite de 65535 de exibição de integridade máxima Excede o limite de 65535 max mana display Excede o limite de 255 exibições de habilidades Sources: https://github.com/SaiyansKing/Tibia-Extended-Client-Library Download: https://github.com/SaiyansKing/Tibia-Extended-Client-Library/releases/tag/1.0 Creditos: Madzix OTland
  21. 2 pontos
    @DigoleraBlow function onThink(interval, lastExecution) local name_of_monster = 'Trainer' --- here put monster name or any npc name local texts = { -- text pos effects ["Saida2"] = {{x=1404, y=1220, z=8}, 5, 23}, ["Saida"] = {{x=1404, y=1219, z=8}, 5, 23}, ["Mineração"] = {{x=1023, y=906, z=7}, 5, 23}, } for text, param in pairs(texts) do doCreatureSay(getCreatureByName(name_of_monster),text,TALKTYPE_ORANGE_1, false, 0,param[1]) doSendMagicEffect(param[1], param[2]) end return TRUE end
  22. 2 pontos
    Sttorm

    RESPONDIDO monstros que brilham

    @Navegante Utilize flags: <flag lightlevel="0"/> -- Intensidade da luz da criatura (5/10) <flag lightcolor="0"/> -- Cor da luz da criatura
  23. 2 pontos
    Vodkart

    RESPONDIDO script de cronometro

    só usar a função que criei doTeleportTimer(pos, segundos) exemplo: local minutos = 5 local tp_pos = {x = 10, y = 20, z = 7} doTeleportTimer(tp_pos, minutos*60)
  24. 2 pontos
    tataboy67

    Preciso de um death cast pra OTX 11.49

    Adicione em (data/creaturescripts/Death_Effect.lua) local effect = { -- EFFECT's que irá causar. 31, 30, 29, } local msg = { -- MSG's em cima do player que morrer. "Lixo", "Owned", "Morreu", } function onKill(cid, target, lastHit) if isPlayer(target) == true then Game.broadcastMessage("[".. getCreatureName(cid) .."] acabou de matar o [" .. getCreatureName(target) .. "]", MESSAGE_EVENT_ADVANCE) target:say(msg[math.random(#msg)], TALKTYPE_ORANGE_1) target:getPosition():sendMagicEffect(effect[math.random(#effect)]) Position(target:getPosition().x, target:getPosition().y + 1, target:getPosition().z):sendMagicEffect(effect[math.random(#effect)]) Position(target:getPosition().x, target:getPosition().y - 1, target:getPosition().z):sendMagicEffect(effect[math.random(#effect)]) Position(target:getPosition().x + 1, target:getPosition().y, target:getPosition().z):sendMagicEffect(effect[math.random(#effect)]) Position(target:getPosition().x - 1, target:getPosition().y, target:getPosition().z):sendMagicEffect(effect[math.random(#effect)]) end return true end Adicione a tag em (data/creaturescripts/creaturescripts.xml) <!-- Death Lua --> <event type="kill" name="Killed" script="Death_Effect.lua"/> Adicione a linha em (data/creaturescripts/others/login.lua) -- vá na linha antes do ultimo return true (Penúltima linha) e adicione a linha: player:registerEvent("Killed") Espero ter respondido !
  25. 2 pontos
    tataboy67

    RESPONDIDO advance

    Opa rapaz beleza? Acabei de montar aqui pra você mas eu não sei qual o nome do parâmetro de mensagem amarela Então resolvi fazer só com as skills ok? local config = { msg_levelup_level = true, msg_levelup_magic = true, msg_levelup_first = true, msg_levelup_club = true, msg_levelup_sword = true, msg_levelup_axe = true, heal = true, save = true, effect = true } function onAdvance(player, skill, oldLevel, newLevel) if skill ~= SKILL_LEVEL and newLevel <= oldLevel and config.msg_levelup_level then if config.effect then player:getPosition():sendMagicEffect(math.random(CONST_ME_FIREWORK_YELLOW, CONST_ME_FIREWORK_BLUE)) player:say('LEVEL UP!', TALKTYPE_MONSTER_SAY) end if config.heal then player:addHealth(player:getMaxHealth()) end if config.save then player:save() end elseif skill ~= SKILL_MAGLEVEL and newLevel <= oldLevel and config.msg_levelup_magic then if config.effect then player:getPosition():sendMagicEffect(math.random(CONST_ME_FIREWORK_YELLOW, CONST_ME_FIREWORK_BLUE)) player:say('+1 Magic!', TALKTYPE_MONSTER_SAY) end if config.heal then player:addHealth(player:getMaxHealth()) end if config.save then player:save() end elseif skill ~= SKILL_FIST and newLevel <= oldLevel and config.msg_levelup_first then if config.effect then player:getPosition():sendMagicEffect(math.random(CONST_ME_FIREWORK_YELLOW, CONST_ME_FIREWORK_BLUE)) player:say('+1 Fist!', TALKTYPE_MONSTER_SAY) end if config.heal then player:addHealth(player:getMaxHealth()) end if config.save then player:save() end elseif skill ~= SKILL_CLUB and newLevel <= oldLevel and config.msg_levelup_club then if config.effect then player:getPosition():sendMagicEffect(math.random(CONST_ME_FIREWORK_YELLOW, CONST_ME_FIREWORK_BLUE)) player:say('+1 Club!', TALKTYPE_MONSTER_SAY) end if config.heal then player:addHealth(player:getMaxHealth()) end if config.save then player:save() end elseif skill ~= SKILL_SWORD and newLevel <= oldLevel and config.msg_levelup_sword then if config.effect then player:getPosition():sendMagicEffect(math.random(CONST_ME_FIREWORK_YELLOW, CONST_ME_FIREWORK_BLUE)) player:say('+1 Sword!', TALKTYPE_MONSTER_SAY) end if config.heal then player:addHealth(player:getMaxHealth()) end if config.save then player:save() end elseif skill ~= SKILL_AXE and newLevel <= oldLevel and config.msg_levelup_axe then if config.effect then player:getPosition():sendMagicEffect(math.random(CONST_ME_FIREWORK_YELLOW, CONST_ME_FIREWORK_BLUE)) player:say('+1 Axe!', TALKTYPE_MONSTER_SAY) end if config.heal then player:addHealth(player:getMaxHealth()) end if config.save then player:save() end end return true end Bom a configuração ali eu adicionei 6, são as 5 skills e mais o levelup normal. Acho que deu pra entender kk OBs: Não testei, por favor faça o teste !
Líderes está configurado para São Paulo/GMT-03:00
×
Close