Jump to content
Close

Leaderboard


Popular Content

Showing content with the highest reputation since 11/12/19 in all areas

  1. 7 points
    vyctor17

    [Show-Off] Vyctor17

    Oi Tk, faz um tempo que eu postei alguns módulos que eu fiz, para o OTclient, agora vou mostrar um pouco de como eles foram implementados em um projeto de teste. vou fazer um breve explicação sobre o o funcionamento e depois colocarei um GIF ou Video mostrando in-game. Raridade em monstros e items. Monstros: a raridade em monstros aumenta seu poder de ataque e vida baseado na raridade. Para monstros existem 4 Tiers de raridade, Comum, Épico, Lendário e Único um monstro com raridade acima de comum sempre protegendo um bau com recompensas. Items: Os items tem variação de raridade baseado em um encantamento obtido via Gemas, Essas raridades são dividas em 5 Tiers de raridade, Comum, Magico, Épico, Lendário e Único. a imagem não contem item e monstros únicos Gemas de encantamento. As gemas de encantamento melhoram um item e só podem ser utilizadas uma vez por item, existem duas gemas uma pode dar de um a três atributos novos ao item e outra de um a seis, a partir do numero de atributos novos gerados no item é definido sua raridade. As gemas podem ser obtidas através de mineração ou em baus de recompensa. Baus de recompensa. São gerados junto a monstros de raridade acima de comum dependo de qual bau o monstro protege mais forte ele é, exemplo um monstro épico protegendo um bau de ouro é mais forte que um épico protegendo um bau normal. Para abrir o bau você terá que fazer o Lockpick no bau. Wasp lendária protegendo bau da fortuna. Pescaria. Nada de muito explicativo só uma pesca comum, para obter peixes para Cooking ou para Alquimia. Lockpick. Nada de muito novo também. Montaria Nada muito diferente também, só existem três pontos diferentes da montaria no meu server para o do global que são, as montarias tem vida e se ela "morrer" você é desmontado, as montarias em quanto montado te libera magias, a montaria tem um slot próprio para poder ser equipada. Magias e inventario. Todas classes podem usar qualquer magia mas as magias são vinculadas as items, então para ter a magia liberada a pessoa tem que estar com o item equipado para aumentar a quantidade magias criei mais dois slots no inventario um slot para montaria e mais um anel. Vou ficar devendo falar sobre o craft e a alquimia, pois ainda estou trabalhando neles. deixar um agradecimento especial a galera do discord do TK que me ajudou com ideias e me guiando para melhorar sistemas existentes . Qualquer duvida ou sugestão para os sistemas acima ou para qualquer outro tipo de sistema que você acha que poderia ficar legal em conjunto com esses sistemas ficarei ligado nos comentários desse tópico. Obrigado pela atenção. Bonus:
  2. 6 points
    Classic Yurots V 8.60 Eu acompanhei de perto o desenvolvimento deste servidor e sabia que sairia coisa boa dali, mas só quando obtive acesso aos arquivos que pude entender a dimensão do negocio, sendo assim, eu posso afirmar que este é um dos se não o melhor datapack baseado no antigo YurOTS. O datapack está limpo, você não vai encontrar um script em qualquer uma das pastas que não esteja em uso no servidor, alem disto muito tempo foi gasto reescrevendo e revisando os scripts do servidor para garantir máxima performance. Os mais novos em OpenTibia talvez não saibam, mas os famosos Baiaks e Styllers de hoje em dia foram baseados neste mapinha que teve seu inicio já na versão 7.5 e seu declínio nas versões 8.4 onde foi visto pela ultima vez devido ao surgimento de derivados do mesmo (Baiak e Styller). Devido ao fato dos mapas Baiak e Styller serem derivados do YurOTS, se você tem um projeto de mapa Baiak ou Styller, este é um excelente datapack para você usar como base. Por que o servidor está sendo postado? Este servidor foi desenvolvido ao longo de 2 anos pelo Wesley (conhecido aqui no fórum como @KOLISAO), alguns meses atrás o servidor foi finalizado e colocado online, embora hoje em dia, sem contato com times de jogadores, é difícil popular um servidor novo e sem nome logo na abertura, com isso a inauguração não foi como esperado e conseguiu uma média de apenas 30 jogadores. Frustado por 2 anos de muito trabalho não dar o resultado esperado, ele decidiu desistir do servidor, foi então que eu fiz uma proposta em troca do servidor e obtive acesso ao mesmo. O que eu não sabia na época era que outras duas pessoas alem de mim tiveram acesso a todos os arquivos, uma dessas pessoas é um amigo do próprio Wesley na vida real, ele conversou com este amigo e deletou os arquivos do computador dele. A segunda pessoa em questão, eu não tenho certeza de como obteve estes arquivos, mas ele atualmente está vendendo estes arquivos sem autorização. Quando fiquei ciente disto, entrei em contato com o Wesley e o informei sobre o que estava acontecendo, ele ficou surpreso e revoltado por alguém estar lucrando em cima de seus esforços. Neste momento pedi permissão a ele para postar o servidor aqui no fórum, e ele me concedeu. Informações sobre o servidor Como dito anteriormente, muito tempo foi gasto neste servidor e tudo foi feito com o maior cuidado possivel. Vou deixar aqui as informações sobre o que contem no servidor, informações que foram divulgadas pelo próprio Wesley na data de inauguração. Vídeo com algumas Quests do servidor Outras informações podem ser encontradas no tópico de show-off do período em que o servidor ainda estava em desenvolvimento. Extra + Créditos Juntamente com o servidor estarei postando a source e o site do mesmo, porem o site será postado em um tópico diferente devido a esta não ser a área correta do fórum para isso. A source do servidor é OTX2, foram feitas pequenas modificações na source para melhor formatação em partes do datapack, como QuestLog e outros. Edit 29/11 Além disto, a source também possui 2 sistemas muito procurados que até o presente momentos não eram públicos, sendo estes Push Cruzado e Cast com Setas. Ambos os sistemas já estão instalados na source, porem futuramente irei postar ambos os códigos juntamente com tutorial de instalação para os que quiserem adicionar por si mesmos. Créditos Como já mencionei diversas vezes neste tópico, o responsável pelo desenvolvimento do servidor e site foi o @KOLISAO, portanto todos os créditos nesta parte vão para ele. Eu fui o responsável por adicionar o Push Cruzado na source e fazer uma pequena modificação no Cast com Setas. Obs: quando eu obtive acesso aos arquivos o Cast com Setas já estava instalado na source, eu não tenho informação se o código foi desenvolvido por ele ou por um terceiro. Links para Download Como eu estava fazendo algumas modificações para hostear o servidor futuramente, eu tenho ele online em uma VPS para os que quiserem dar uma olhada mais de perto tanto no servidor como no site. Link para acesso: http://classic-styller.com Obs: O servidor está rodando com uma source diferente da postada no tópico. Servidor Download - Scan Source Download - Scan Distro compilada para Windows 32x - TheOTXServer.exe - Scan 64x - TheOTXServer_64.exe - Scan Site
  3. 5 points
    DdJs

    [8.60] Pumin Seal (Cave)

    Pumin Seal (Cave) V 8.60 [Cave inspirada no selo de Pumin da Ferumbras' Ascendant Quest] *Não se trata de uma réplica fiel do seal original. Download: Pumin_Seal8.60.rar Position: [X: 1006 Y: 1022 Z: 9] Imagens:
  4. 4 points
    movie

    NPC comprando flasks/vial por storage

    Fala pessoal, hoje venho trazer um sisteminha básico que eu fiz pro meu OT e achei bacana e resolvi postar aqui. Ele está baseado no 1.3, porém em breve posso postar para 0.x. Como ele funciona? Ao usar uma poção, você não irá receber o vial ou a flask, e ao invés disso você irá ganhar uma storage. Ao chega no NPC e falar vial ou flasks ele irá te perguntar se você gostaria de receber pelo preço das poções utilizadas. O sistema é baseado na storage 75123. Em actions, ache o arquivo potions.lua Como era: local berserk = Condition(CONDITION_ATTRIBUTES) berserk:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000) berserk:setParameter(CONDITION_PARAM_SKILL_MELEE, 5) berserk:setParameter(CONDITION_PARAM_SKILL_SHIELD, -10) berserk:setParameter(CONDITION_PARAM_BUFF_SPELL, true) local mastermind = Condition(CONDITION_ATTRIBUTES) mastermind:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000) mastermind:setParameter(CONDITION_PARAM_STAT_MAGICPOINTS, 3) mastermind:setParameter(CONDITION_PARAM_BUFF_SPELL, true) local bullseye = Condition(CONDITION_ATTRIBUTES) bullseye:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000) bullseye:setParameter(CONDITION_PARAM_SKILL_DISTANCE, 5) bullseye:setParameter(CONDITION_PARAM_SKILL_SHIELD, -10) bullseye:setParameter(CONDITION_PARAM_BUFF_SPELL, true) local potions = { [6558] = {transform = {7588, 7589}, effect = CONST_ME_DRAWBLOOD}, [7439] = {condition = berserk, vocations = {4, 8}, effect = CONST_ME_MAGIC_RED, description = "Only knights may drink this potion.", text = "You feel stronger."}, [7440] = {condition = mastermind, vocations = {1, 2, 5, 6}, effect = CONST_ME_MAGIC_BLUE, description = "Only sorcerers and druids may drink this potion.", text = "You feel smarter."}, [7443] = {condition = bullseye, vocations = {3, 7}, effect = CONST_ME_MAGIC_GREEN, description = "Only paladins may drink this potion.", text = "You feel more accurate."}, [7588] = {health = {250, 350}, vocations = {3, 4, 7, 8}, level = 50, flask = 7634, description = "Only knights and paladins of level 50 or above may drink this fluid."}, [7589] = {mana = {115, 185}, vocations = {1, 2, 3, 5, 6, 7}, level = 50, flask = 7634, description = "Only sorcerers, druids and paladins of level 50 or above may drink this fluid."}, [7590] = {mana = {150, 250}, vocations = {1, 2, 5, 6}, level = 80, flask = 7635, description = "Only druids and sorcerers of level 80 or above may drink this fluid."}, [7591] = {health = {425, 575}, vocations = {4, 8}, level = 80, flask = 7635, description = "Only knights of level 80 or above may drink this fluid."}, [7618] = {health = {125, 175}, flask = 7636}, [7620] = {mana = {75, 125}, flask = 7636}, [8472] = {health = {250, 350}, mana = {100, 200}, vocations = {3, 7}, level = 80, flask = 7635, description = "Only paladins of level 80 or above may drink this fluid."}, [8473] = {health = {650, 850}, vocations = {4, 8}, level = 130, flask = 7635, description = "Only knights of level 130 or above may drink this fluid."}, [8474] = {antidote = true, flask = 7636}, [8704] = {health = {60, 90}, flask = 7636}, [26029] = {mana = {425, 575}, vocations = {1, 2, 5, 6}, level = 130, flask = 7635, description = "Only druids and sorcerers of level 130 or above may drink this fluid."}, [26030] = {health = {420, 580}, mana = {250, 350}, vocations = {3, 7}, level = 130, flask = 7635, description = "Only paladins of level 130 or above may drink this fluid."}, [26031] = {health = {875, 1125}, vocations = {4, 8}, level = 200, flask = 7635, description = "Only knights of level 200 or above may drink this fluid."} } function onUse(player, item, fromPosition, target, toPosition, isHotkey) if type(target) == "userdata" and not target:isPlayer() then return false end local potion = potions[item:getId()] if potion.level and player:getLevel() < potion.level or potion.vocations and not table.contains(potion.vocations, player:getVocation():getId()) then player:say(potion.description, TALKTYPE_MONSTER_SAY) return true end if potion.condition then player:addCondition(potion.condition) player:say(potion.text, TALKTYPE_MONSTER_SAY) player:getPosition():sendMagicEffect(potion.effect) elseif potion.transform then item:transform(potion.transform[math.random(#potion.transform)]) item:getPosition():sendMagicEffect(potion.effect) return true else if potion.health then doTargetCombatHealth(0, target, COMBAT_HEALING, potion.health[1], potion.health[2]) end if potion.mana then doTargetCombatMana(0, target, potion.mana[1], potion.mana[2]) end if potion.antidote then target:removeCondition(CONDITION_POISON) end player:addItem(potion.flask) target:say("Aaaah...", TALKTYPE_MONSTER_SAY) target:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE) end item:remove(1) return true end Como ficou: local berserk = Condition(CONDITION_ATTRIBUTES) berserk:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000) berserk:setParameter(CONDITION_PARAM_SKILL_MELEE, 5) berserk:setParameter(CONDITION_PARAM_SKILL_SHIELD, -10) berserk:setParameter(CONDITION_PARAM_BUFF_SPELL, true) local mastermind = Condition(CONDITION_ATTRIBUTES) mastermind:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000) mastermind:setParameter(CONDITION_PARAM_STAT_MAGICPOINTS, 3) mastermind:setParameter(CONDITION_PARAM_BUFF_SPELL, true) local bullseye = Condition(CONDITION_ATTRIBUTES) bullseye:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000) bullseye:setParameter(CONDITION_PARAM_SKILL_DISTANCE, 5) bullseye:setParameter(CONDITION_PARAM_SKILL_SHIELD, -10) bullseye:setParameter(CONDITION_PARAM_BUFF_SPELL, true) local potions = { [6558] = {transform = {7588, 7589}, effect = CONST_ME_DRAWBLOOD}, [7439] = {condition = berserk, vocations = {4, 8, 12}, effect = CONST_ME_MAGIC_RED, description = "Only knights may drink this potion.", text = "You feel stronger."}, [7440] = {condition = mastermind, vocations = {1, 2, 5, 6, 9, 10}, effect = CONST_ME_MAGIC_BLUE, description = "Only sorcerers and druids may drink this potion.", text = "You feel smarter."}, [7443] = {condition = bullseye, vocations = {3, 7, 11}, effect = CONST_ME_MAGIC_GREEN, description = "Only paladins may drink this potion.", text = "You feel more accurate."}, [7588] = {health = {250, 350}, vocations = {3, 4, 7, 8, 11, 12}, level = 50, flask = 7634, description = "Only knights and paladins of level 50 or above may drink this fluid."}, [7589] = {mana = {115, 185}, vocations = {1, 2, 3, 5, 6, 7, 9, 10, 11}, level = 50, flask = 7634, description = "Only sorcerers, druids and paladins of level 50 or above may drink this fluid."}, [7590] = {mana = {150, 250}, vocations = {1, 2, 5, 6, 9, 10}, level = 80, flask = 7635, description = "Only druids and sorcerers of level 80 or above may drink this fluid."}, [7591] = {health = {425, 575}, vocations = {4, 8, 12}, level = 80, flask = 7635, description = "Only knights of level 80 or above may drink this fluid."}, [7618] = {health = {125, 175}, flask = 7636}, [7620] = {mana = {75, 125}, flask = 7636}, [8472] = {health = {250, 350}, mana = {100, 200}, vocations = {3, 7, 11}, level = 80, flask = 7635, description = "Only paladins of level 80 or above may drink this fluid."}, [8473] = {health = {650, 850}, vocations = {4, 8, 12}, level = 130, flask = 7635, description = "Only knights of level 130 or above may drink this fluid."}, [8474] = {antidote = true, flask = 7636}, [8704] = {health = {60, 90}, flask = 7636}, [26029] = {mana = {425, 575}, vocations = {1, 2, 5, 6, 9, 10}, level = 130, flask = 7635, description = "Only druids and sorcerers of level 130 or above may drink this fluid."}, [26030] = {health = {420, 580}, mana = {250, 350}, vocations = {3, 7, 11}, level = 130, flask = 7635, description = "Only paladins of level 130 or above may drink this fluid."}, [26031] = {health = {875, 1125}, vocations = {4, 8, 12}, level = 200, flask = 7635, description = "Only knights of level 200 or above may drink this fluid."} } function onUse(player, item, fromPosition, target, toPosition, isHotkey) if type(target) == "userdata" and not target:isPlayer() then return false end local potion = potions[item:getId()] if potion.level and player:getLevel() < potion.level or potion.vocations and not table.contains(potion.vocations, player:getVocation():getId()) then player:say(potion.description, TALKTYPE_MONSTER_SAY) return true end if potion.condition then player:addCondition(potion.condition) player:say(potion.text, TALKTYPE_MONSTER_SAY) player:getPosition():sendMagicEffect(potion.effect) elseif potion.transform then item:transform(potion.transform[math.random(#potion.transform)]) item:getPosition():sendMagicEffect(potion.effect) return true else if potion.health then doTargetCombatHealth(0, target, COMBAT_HEALING, potion.health[1], potion.health[2]) end if potion.mana then doTargetCombatMana(0, target, potion.mana[1], potion.mana[2]) end if potion.antidote then target:removeCondition(CONDITION_POISON) end player:setStorageValue(75132, (player:getStorageValue(75132) + 1)) target:say("Aaaah...", TALKTYPE_MONSTER_SAY) target:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE) end item:remove(1) return true end Em creaturescripts, ache o arquivo login.lua Após if player:getLastLoginSaved() <= 0 then Adicione player:setStorageValue(75132, 0) -- Vial/Flask System Agora vamos para a parte do NPC. Irei deixar baseado no Eryn, um NPC que é comum. Na pasta npc/scripts, ache o arquivo que relaciona com seu NPC mágico. Estou me baseando nesse script: https://github.com/nekiro/forgottenserver/blob/8.6-downgrade/data/npc/scripts/runes.lua Antes local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) 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 local shopModule = ShopModule:new() npcHandler:addModule(shopModule) shopModule:addBuyableItem({'spellbook'}, 2175, 150, 'spellbook') shopModule:addBuyableItem({'magic lightwand'}, 2163, 400, 'magic lightwand') shopModule:addBuyableItem({'small health'}, 8704, 20, 1, 'small health potion') shopModule:addBuyableItem({'health potion'}, 7618, 45, 1, 'health potion') shopModule:addBuyableItem({'mana potion'}, 7620, 50, 1, 'mana potion') shopModule:addBuyableItem({'strong health'}, 7588, 100, 1, 'strong health potion') shopModule:addBuyableItem({'strong mana'}, 7589, 80, 1, 'strong mana potion') shopModule:addBuyableItem({'great health'}, 7591, 190, 1, 'great health potion') shopModule:addBuyableItem({'great mana'}, 7590, 120, 1, 'great mana potion') shopModule:addBuyableItem({'great spirit'}, 8472, 190, 1, 'great spirit potion') shopModule:addBuyableItem({'ultimate health'}, 8473, 310, 1, 'ultimate health potion') shopModule:addBuyableItem({'antidote potion'}, 8474, 50, 1, 'antidote potion') shopModule:addSellableItem({'normal potion flask', 'normal flask'}, 7636, 5, 'empty small potion flask') shopModule:addSellableItem({'strong potion flask', 'strong flask'}, 7634, 10, 'empty strong potion flask') shopModule:addSellableItem({'great potion flask', 'great flask'}, 7635, 15, 'empty great potion flask') shopModule:addBuyableItem({'instense healing'}, 2265, 95, 1, 'intense healing rune') shopModule:addBuyableItem({'ultimate healing'}, 2273, 175, 1, 'ultimate healing rune') shopModule:addBuyableItem({'magic wall'}, 2293, 350, 3, 'magic wall rune') shopModule:addBuyableItem({'destroy field'}, 2261, 45, 3, 'destroy field rune') shopModule:addBuyableItem({'light magic missile'}, 2287, 40, 10, 'light magic missile rune') shopModule:addBuyableItem({'heavy magic missile'}, 2311, 120, 10, 'heavy magic missile rune') shopModule:addBuyableItem({'great fireball'}, 2304, 180, 4, 'great fireball rune') shopModule:addBuyableItem({'explosion'}, 2313, 250, 6, 'explosion rune') shopModule:addBuyableItem({'sudden death'}, 2268, 350, 3, 'sudden death rune') shopModule:addBuyableItem({'death arrow'}, 2263, 300, 3, 'death arrow rune') shopModule:addBuyableItem({'paralyze'}, 2278, 700, 1, 'paralyze rune') shopModule:addBuyableItem({'animate dead'}, 2316, 375, 1, 'animate dead rune') shopModule:addBuyableItem({'convince creature'}, 2290, 80, 1, 'convince creature rune') shopModule:addBuyableItem({'chameleon'}, 2291, 210, 1, 'chameleon rune') shopModule:addBuyableItem({'desintegrate'}, 2310, 80, 3, 'desintegreate rune') shopModule:addBuyableItemContainer({'bp ap'}, 2002, 8378, 2000, 1, 'backpack of antidote potions') shopModule:addBuyableItemContainer({'bp slhp'}, 2000, 8610, 400, 1, 'backpack of small health potions') shopModule:addBuyableItemContainer({'bp hp'}, 2000, 7618, 900, 1, 'backpack of health potions') shopModule:addBuyableItemContainer({'bp mp'}, 2001, 7620, 1000, 1, 'backpack of mana potions') shopModule:addBuyableItemContainer({'bp shp'}, 2000, 7588, 2000, 1, 'backpack of strong health potions') shopModule:addBuyableItemContainer({'bp smp'}, 2001, 7589, 1600, 1, 'backpack of strong mana potions') shopModule:addBuyableItemContainer({'bp ghp'}, 2000, 7591, 3800, 1, 'backpack of great health potions') shopModule:addBuyableItemContainer({'bp gmp'}, 2001, 7590, 2400, 1, 'backpack of great mana potions') shopModule:addBuyableItemContainer({'bp gsp'}, 1999, 8376, 3800, 1, 'backpack of great spirit potions') shopModule:addBuyableItemContainer({'bp uhp'}, 2000, 8377, 6200, 1, 'backpack of ultimate health potions') shopModule:addBuyableItem({'wand of vortex', 'vortex'}, 2190, 500, 'wand of vortex') shopModule:addBuyableItem({'wand of dragonbreath', 'dragonbreath'}, 2191, 1000, 'wand of dragonbreath') shopModule:addBuyableItem({'wand of decay', 'decay'}, 2188, 5000, 'wand of decay') shopModule:addBuyableItem({'wand of draconia', 'draconia'}, 8921, 7500, 'wand of draconia') shopModule:addBuyableItem({'wand of cosmic energy', 'cosmic energy'}, 2189, 10000, 'wand of cosmic energy') shopModule:addBuyableItem({'wand of inferno', 'inferno'}, 2187, 15000, 'wand of inferno') shopModule:addBuyableItem({'wand of starstorm', 'starstorm'}, 8920, 18000, 'wand of starstorm') shopModule:addBuyableItem({'wand of voodoo', 'voodoo'}, 8922, 22000, 'wand of voodoo') shopModule:addBuyableItem({'snakebite rod', 'snakebite'}, 2182, 500, 'snakebite rod') shopModule:addBuyableItem({'moonlight rod', 'moonlight'}, 2186, 1000, 'moonlight rod') shopModule:addBuyableItem({'necrotic rod', 'necrotic'}, 2185, 5000, 'necrotic rod') shopModule:addBuyableItem({'northwind rod', 'northwind'}, 8911, 7500, 'northwind rod') shopModule:addBuyableItem({'terra rod', 'terra'}, 2181, 10000, 'terra rod') shopModule:addBuyableItem({'hailstorm rod', 'hailstorm'}, 2183, 15000, 'hailstorm rod') shopModule:addBuyableItem({'springsprout rod', 'springsprout'}, 8912, 18000, 'springsprout rod') shopModule:addBuyableItem({'underworld rod', 'underworld'}, 8910, 22000, 'underworld rod') shopModule:addSellableItem({'wand of vortex', 'vortex'}, 2190, 250, 'wand of vortex') shopModule:addSellableItem({'wand of dragonbreath', 'dragonbreath'}, 2191, 500, 'wand of dragonbreath') shopModule:addSellableItem({'wand of decay', 'decay'}, 2188, 2500, 'wand of decay') shopModule:addSellableItem({'wand of draconia', 'draconia'}, 8921, 3750, 'wand of draconia') shopModule:addSellableItem({'wand of cosmic energy', 'cosmic energy'}, 2189, 5000, 'wand of cosmic energy') shopModule:addSellableItem({'wand of inferno', 'inferno'},2187, 7500, 'wand of inferno') shopModule:addSellableItem({'wand of starstorm', 'starstorm'}, 8920, 9000, 'wand of starstorm') shopModule:addSellableItem({'wand of voodoo', 'voodoo'}, 8922, 11000, 'wand of voodoo') shopModule:addSellableItem({'snakebite rod', 'snakebite'}, 2182, 250,'snakebite rod') shopModule:addSellableItem({'moonlight rod', 'moonlight'}, 2186, 500, 'moonlight rod') shopModule:addSellableItem({'necrotic rod', 'necrotic'}, 2185, 2500, 'necrotic rod') shopModule:addSellableItem({'northwind rod', 'northwind'}, 8911, 3750, 'northwind rod') shopModule:addSellableItem({'terra rod', 'terra'}, 2181, 5000, 'terra rod') shopModule:addSellableItem({'hailstorm rod', 'hailstorm'}, 2183, 7500, 'hailstorm rod') shopModule:addSellableItem({'springsprout rod', 'springsprout'}, 8912, 9000, 'springsprout rod') shopModule:addSellableItem({'underworld rod', 'underworld'}, 8910, 11000, 'underworld rod') function creatureSayCallback(cid, type, msg) if not npcHandler:isFocused(cid) then return false end local player = Player(cid) local vocationId = player:getVocation():getId() local items = { [1] = 2190, [2] = 2182, [5] = 2190, [6] = 2182 } if msgcontains(msg, 'first rod') or msgcontains(msg, 'first wand') then if table.contains({1, 2, 5, 6}, vocationId) then if player:getStorageValue(30002) == -1 then selfSay('So you ask me for a {' .. ItemType(items[vocationId]):getName() .. '} to begin your advanture?', cid) npcHandler.topic[cid] = 1 else selfSay('What? I have already gave you one {' .. ItemType(items[vocationId]):getName() .. '}!', cid) end else selfSay('Sorry, you aren\'t a druid either a sorcerer.', cid) end elseif msgcontains(msg, 'yes') then if npcHandler.topic[cid] == 1 then player:addItem(items[vocationId], 1) selfSay('Here you are young adept, take care yourself.', cid) player:setStorageValue(30002, 1) end npcHandler.topic[cid] = 0 elseif msgcontains(msg, 'no') and npcHandler.topic[cid] == 1 then selfSay('Ok then.', cid) npcHandler.topic[cid] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Depois local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) 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 local shopModule = ShopModule:new() npcHandler:addModule(shopModule) shopModule:addBuyableItem({'spellbook'}, 2175, 150, 'spellbook') shopModule:addBuyableItem({'magic lightwand'}, 2163, 400, 'magic lightwand') shopModule:addBuyableItem({'small health'}, 8704, 20, 1, 'small health potion') shopModule:addBuyableItem({'health potion'}, 7618, 45, 1, 'health potion') shopModule:addBuyableItem({'mana potion'}, 7620, 50, 1, 'mana potion') shopModule:addBuyableItem({'strong health'}, 7588, 100, 1, 'strong health potion') shopModule:addBuyableItem({'strong mana'}, 7589, 80, 1, 'strong mana potion') shopModule:addBuyableItem({'great health'}, 7591, 190, 1, 'great health potion') shopModule:addBuyableItem({'great mana'}, 7590, 120, 1, 'great mana potion') shopModule:addBuyableItem({'great spirit'}, 8472, 190, 1, 'great spirit potion') shopModule:addBuyableItem({'ultimate health'}, 8473, 310, 1, 'ultimate health potion') shopModule:addBuyableItem({'antidote potion'}, 8474, 50, 1, 'antidote potion') shopModule:addSellableItem({'normal potion flask', 'normal flask'}, 7636, 5, 'empty small potion flask') shopModule:addSellableItem({'strong potion flask', 'strong flask'}, 7634, 10, 'empty strong potion flask') shopModule:addSellableItem({'great potion flask', 'great flask'}, 7635, 15, 'empty great potion flask') shopModule:addBuyableItem({'instense healing'}, 2265, 95, 1, 'intense healing rune') shopModule:addBuyableItem({'ultimate healing'}, 2273, 175, 1, 'ultimate healing rune') shopModule:addBuyableItem({'magic wall'}, 2293, 350, 3, 'magic wall rune') shopModule:addBuyableItem({'destroy field'}, 2261, 45, 3, 'destroy field rune') shopModule:addBuyableItem({'light magic missile'}, 2287, 40, 10, 'light magic missile rune') shopModule:addBuyableItem({'heavy magic missile'}, 2311, 120, 10, 'heavy magic missile rune') shopModule:addBuyableItem({'great fireball'}, 2304, 180, 4, 'great fireball rune') shopModule:addBuyableItem({'explosion'}, 2313, 250, 6, 'explosion rune') shopModule:addBuyableItem({'sudden death'}, 2268, 350, 3, 'sudden death rune') shopModule:addBuyableItem({'death arrow'}, 2263, 300, 3, 'death arrow rune') shopModule:addBuyableItem({'paralyze'}, 2278, 700, 1, 'paralyze rune') shopModule:addBuyableItem({'animate dead'}, 2316, 375, 1, 'animate dead rune') shopModule:addBuyableItem({'convince creature'}, 2290, 80, 1, 'convince creature rune') shopModule:addBuyableItem({'chameleon'}, 2291, 210, 1, 'chameleon rune') shopModule:addBuyableItem({'desintegrate'}, 2310, 80, 3, 'desintegreate rune') shopModule:addBuyableItemContainer({'bp ap'}, 2002, 8378, 2000, 1, 'backpack of antidote potions') shopModule:addBuyableItemContainer({'bp slhp'}, 2000, 8610, 400, 1, 'backpack of small health potions') shopModule:addBuyableItemContainer({'bp hp'}, 2000, 7618, 900, 1, 'backpack of health potions') shopModule:addBuyableItemContainer({'bp mp'}, 2001, 7620, 1000, 1, 'backpack of mana potions') shopModule:addBuyableItemContainer({'bp shp'}, 2000, 7588, 2000, 1, 'backpack of strong health potions') shopModule:addBuyableItemContainer({'bp smp'}, 2001, 7589, 1600, 1, 'backpack of strong mana potions') shopModule:addBuyableItemContainer({'bp ghp'}, 2000, 7591, 3800, 1, 'backpack of great health potions') shopModule:addBuyableItemContainer({'bp gmp'}, 2001, 7590, 2400, 1, 'backpack of great mana potions') shopModule:addBuyableItemContainer({'bp gsp'}, 1999, 8376, 3800, 1, 'backpack of great spirit potions') shopModule:addBuyableItemContainer({'bp uhp'}, 2000, 8377, 6200, 1, 'backpack of ultimate health potions') shopModule:addBuyableItem({'wand of vortex', 'vortex'}, 2190, 500, 'wand of vortex') shopModule:addBuyableItem({'wand of dragonbreath', 'dragonbreath'}, 2191, 1000, 'wand of dragonbreath') shopModule:addBuyableItem({'wand of decay', 'decay'}, 2188, 5000, 'wand of decay') shopModule:addBuyableItem({'wand of draconia', 'draconia'}, 8921, 7500, 'wand of draconia') shopModule:addBuyableItem({'wand of cosmic energy', 'cosmic energy'}, 2189, 10000, 'wand of cosmic energy') shopModule:addBuyableItem({'wand of inferno', 'inferno'}, 2187, 15000, 'wand of inferno') shopModule:addBuyableItem({'wand of starstorm', 'starstorm'}, 8920, 18000, 'wand of starstorm') shopModule:addBuyableItem({'wand of voodoo', 'voodoo'}, 8922, 22000, 'wand of voodoo') shopModule:addBuyableItem({'snakebite rod', 'snakebite'}, 2182, 500, 'snakebite rod') shopModule:addBuyableItem({'moonlight rod', 'moonlight'}, 2186, 1000, 'moonlight rod') shopModule:addBuyableItem({'necrotic rod', 'necrotic'}, 2185, 5000, 'necrotic rod') shopModule:addBuyableItem({'northwind rod', 'northwind'}, 8911, 7500, 'northwind rod') shopModule:addBuyableItem({'terra rod', 'terra'}, 2181, 10000, 'terra rod') shopModule:addBuyableItem({'hailstorm rod', 'hailstorm'}, 2183, 15000, 'hailstorm rod') shopModule:addBuyableItem({'springsprout rod', 'springsprout'}, 8912, 18000, 'springsprout rod') shopModule:addBuyableItem({'underworld rod', 'underworld'}, 8910, 22000, 'underworld rod') shopModule:addSellableItem({'wand of vortex', 'vortex'}, 2190, 250, 'wand of vortex') shopModule:addSellableItem({'wand of dragonbreath', 'dragonbreath'}, 2191, 500, 'wand of dragonbreath') shopModule:addSellableItem({'wand of decay', 'decay'}, 2188, 2500, 'wand of decay') shopModule:addSellableItem({'wand of draconia', 'draconia'}, 8921, 3750, 'wand of draconia') shopModule:addSellableItem({'wand of cosmic energy', 'cosmic energy'}, 2189, 5000, 'wand of cosmic energy') shopModule:addSellableItem({'wand of inferno', 'inferno'},2187, 7500, 'wand of inferno') shopModule:addSellableItem({'wand of starstorm', 'starstorm'}, 8920, 9000, 'wand of starstorm') shopModule:addSellableItem({'wand of voodoo', 'voodoo'}, 8922, 11000, 'wand of voodoo') shopModule:addSellableItem({'snakebite rod', 'snakebite'}, 2182, 250,'snakebite rod') shopModule:addSellableItem({'moonlight rod', 'moonlight'}, 2186, 500, 'moonlight rod') shopModule:addSellableItem({'necrotic rod', 'necrotic'}, 2185, 2500, 'necrotic rod') shopModule:addSellableItem({'northwind rod', 'northwind'}, 8911, 3750, 'northwind rod') shopModule:addSellableItem({'terra rod', 'terra'}, 2181, 5000, 'terra rod') shopModule:addSellableItem({'hailstorm rod', 'hailstorm'}, 2183, 7500, 'hailstorm rod') shopModule:addSellableItem({'springsprout rod', 'springsprout'}, 8912, 9000, 'springsprout rod') shopModule:addSellableItem({'underworld rod', 'underworld'}, 8910, 11000, 'underworld rod') function creatureSayCallback(cid, type, msg) if not npcHandler:isFocused(cid) then return false end local player = Player(cid) local vocationId = player:getVocation():getId() local items = { [1] = 2190, [2] = 2182, [5] = 2190, [6] = 2182 } local precoVial = (3 * player:getStorageValue(75132)) if (msgcontains(msg, 'vial') or msgcontains(msg, 'flask')) and player:getStorageValue(75132) >= 1 then npcHandler:say('Do you want to sell {' .. player:getStorageValue(75132) .. '} flasks for 3 gps each?', cid) npcHandler.topic[cid] = 3 else npcHandler:say('You have no vials or flasks in our system.', cid) end if (msgcontains(msg, 'yes') and npcHandler.topic[cid] == 3) then npcHandler:say('You received '.. precoVial ..' gold coins.', cid) player:setStorageValue(75132, 0) player:addItem(2148, precoVial) npcHandler.topic[cid] = 0 elseif (msgcontains(msg, 'no') and npcHandler.topic[cid] == 3) then npcHandler.topic[cid] = 0 npcHandler:say('Ok then.', cid) end if msgcontains(msg, 'first rod') or msgcontains(msg, 'first wand') then if table.contains({1, 2, 5, 6}, vocationId) then if player:getStorageValue(30002) == -1 then selfSay('So you ask me for a {' .. ItemType(items[vocationId]):getName() .. '} to begin your advanture?', cid) npcHandler.topic[cid] = 1 else selfSay('What? I have already gave you one {' .. ItemType(items[vocationId]):getName() .. '}!', cid) end else selfSay('Sorry, you aren\'t a druid either a sorcerer.', cid) end elseif msgcontains(msg, 'yes') then if npcHandler.topic[cid] == 1 then player:addItem(items[vocationId], 1) selfSay('Here you are young adept, take care yourself.', cid) player:setStorageValue(30002, 1) end npcHandler.topic[cid] = 0 elseif msgcontains(msg, 'no') and npcHandler.topic[cid] == 1 then selfSay('Ok then.', cid) npcHandler.topic[cid] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Sendo que você altera o preço que você paga por vial/flask na variável precoVial. Pronto, agora só chegar no seu NPC Mágico e falar vial ou flasks. Creio que tenha ficado entendido o tópico, caso dê algum erro, favor postar aqui.
  5. 4 points
    Muita gente quer instalar isso no servidor mas ninguém explica direito, então eu decidi fazer o tutorial. 1. Baixe o arquivo abaixo e coloque dentro da pasta modules. 2. Abra o arquivo things.lua e troque 622 pelo item que você quer que fique transparente, lembrando que 622 é o cliente id. items = {[622]=0.6}, 3. Teste e veja se funcionou a transparência, lembrando que no Floor 7 em alguns TFS não funciona a transparência, tem que editar a source. 4. Caso ficar com o gráfico zoado, coloque isso dentro do module game_things/things.lua abaixo da function load() g_game.enableFeature(GameSpritesU32) -- To extended the sprites g_game.enableFeature(GameSpritesAlphaChannel) -- To enable transparency Download: https://www.dropbox.com/s/ogsn1km5k9ey1sa/game_transparency.rar?dl=0 Scan: https://www.virustotal.com/gui/file/946c907863fe33dfcecb520e7edaa85e3291eedd31aeb7f01841baf9d4e45b8e/detection
  6. 3 points
    BrazItzMe

    Deixar o mapa explorado (OTCLIENT)

    Não achei esse tutorial no fórum resolvi postar 1. Copie o arquivo items.otb e o mapa.otb do seu tfs e coloque dentro da pasta DATA do seu otclient. 2. Abre o terminal (CTRL T) e digite 1 de cada vez: g_things.loadOtb('items.otb') g_map.loadOtbm('ots.otbm') Vai dar um lag e o mapa vai ficar explorado. Se funcionou REP+ Se alguém preferir pode por pra carregar esse comando ao entrar no cliente pelo game_Things por exemplo.
  7. 3 points
    Caso quiser deixar on, recomendo usar o Znote AAC com o Xampp. Se alguém tiver erro com physfs ou AL, baixe esse arquivo: https://www.dropbox.com/s/7ocsqnon040gt10/physfs %2B AL.rar?dl=0 Contém: 1. Tfs compilado em 32 bits + Sources 2. Otclient compilado em 32 bits + Sources 3. Aumentado Tamanho da Tela pra 19 Tiles 4. Adicionado X Y Z no minimap. 5. Interface padrão do OTCLIENT trocada pra transparente. 6. Removido painel direito e esquerdo do Otclient, 7. Limitado o Zoom (Não da pra bugar) 8. Removido Hotkey (CTRL + .) 9. Fixado o Login do OTCLIENT pra ip FIXO. (Troque em entergame.lua) Eu não ativei Transparency nem Extended, caso queira ativar: Dentro do things.lua na pasta game_things, abaixo de: function load() local version = g_game.getClientVersion() Coloque isso: g_game.enableFeature(GameSpritesU32) -- To extended the sprites g_game.enableFeature(GameSpritesAlphaChannel) -- To enable transparency Download: https://www.dropbox.com/s/uos9a1f34ycen8q/tfs 1.2 %2B otclient.rar?dl=0 Scan: https://www.virustotal.com/gui/file/52a3e3d1aef51aec038165001c5785f16292f9f8fc87efdcb3e76acb3ebcc572/detection
  8. 3 points
    BrazItzMe

    Shiny Charmander, Charmeleon e Zard

    Os 3 estão anexados
  9. 2 points
    Não me lembro qual configuração foi feita, to sem o software para abrir mas vejam vocês se serve File TFS Daniel TK.rar Pass sessogato
  10. 2 points
    A ideia é com poucas linha de código criar um dump(backup) de sua base dados, e compactá-la em tar. Este tópico é destinada a usuários linux, a true da true é que eu não sei fazer windows, rs, no windows deve dar sim para fazer de forma nativa, mas não acredito que seja tão fácil, Eu não gosto de utilizar o usuário root para manipular o mysql. Gosto de criar um usuário e dar permissões especificas para ele. Leve tutorial de como fazer isso: Fonte Isso é opcional, você pode usar o root ou um usuário qualquer com permissões gerais. Baixe o mysqldump.sh, você pode alterar esse nome, só nao o .sh Depois de baixado vá até a pasta onde está o arquivo ou indique o caminho dando um chmod, vai ser mais ou menos assim: chmod 755 mysqldump.sh, ou chmod 755 caminho/mysqldump.sh Ah! Acesse o arquivo e faça as devidas alterações, como colocar o nome do seu usuário, senha (caso não tenha, apague o senha_do_usuário) e nome da base de dados da qual você quer fazer o dump. Não apague o 'u' nem o 'p' antes dos indicativos de usuário e senha. Eu recomendo criar uma pasta para guardar seus scripts Eu gosto de organização, então eu criei uma pasta de nome backup e outra scripts dentro do diretório do meu usuário para que os backups sejam enviados para a pasta backup, o nome pode ser outro só que terá que alterar no arquivo mysqldump.sh, para criar uma pasta basta usa o comando mkdir 'nome_pasta'. Na real você que não manja muito de shell script, cria a pasta backup pelo menos, porque se não você vai ter q alterar o arquivo e por mais simples que possa parecer, para que não tem familiaridade isso pode virar uma dor de cabeça. Pronto agora é só dar um ./mysqdump.sh e vai ser feito o backup da database escolhida, izi. Porém cara que saco fazer isso todos os dias ou a cada 1 hora, meu deus, eu não aguentaria. Vamos a segunda parte do Tutorial: Digite crontab -e, se for a primeira vez que você está usando está ferramenta, 'só lamento' rs , brinks. Vai aparecer uma lista com números e nomes de editors de texto, escolha o de sua preferência digitando o número que corresponde a ele na lista. pronto será apresentado um arquivo, que só terá linha comentadas. Quer aprender mais sobre cron, acesse: https://www.vivaolinux.com.br/dica/Agendamento-de-tarefas-no-Linux-(cron-e-at) No final do arquivo você deverá fazer o seguinte, colocar um numero de 0 a 59 que é em relação aos minutos ou * que quer dizer em qualquer desses. depois a hora e tem mais três que são referente a dia do mês, mês e dia da semana. Acredito que ficou meio bosta essa parte da explicação, vou listar. m = 0 a 59 h = 0 a 23 dom = 1 a 31 mon = 1 a 12 são 12 meses começando de 1 = janeiro e o 12 dezenbro dow = 0 a 6 corresponde aos dias da semana como se fosse uma array começando do 0 = domingo e assim por diante e o ultimo é 6 = sábado E o * e tipo um coringa fica no lugar de qualquer número. Essa parte da tabela é mais para o pessoal está começando a ter contato com o sistema linux Com isso é só usar a criatividade, mas pelo básico se você quer que faça o backup 1 vez por dia, é só escolher a hora e os minutos, tipo assim: 0 12 * * *, basicamente o * diz tanto faz. E agora está pronto, ele todos os dias fará aquilo. Em si para que você não tenha mais nenhuma duvida o tutorial terminou aqui, o que vem a seguir é desnecessário de se ler, são mais algumas considerações que coloquei, mas não ruins de se ler. Como dito no título é tosco, não por ser ruim, é útil, mas nossa da para ser muito melhorado. Tipo colocar para enviar esse tar para seu e-mail, ou outro computador. Deixar inteligente, fazendo com que esse arquivo crie uma arquivo com todos os dados de uma forma alinhada e bonitinha, para que você possa ter um controle maior das informações, a questão da senha no próprio arquivo, não é muito recomendável, por isso eu recomendo criar um usuário específico para isso, ou usar outras outras ferramentes como um token de senha. A ideia foi passar de uma forma fácil e descontraída como se faz (apresentado o básico) e apontar alguns nortes para que você consiga fazer as coisas de forma mais aprimoradas do que foram apresentadas aqui. Claro isso para os usuários que estão começando a upar seus ots para o pinguim, Mas só este aqui você já pode deixar lá e esquecer que ele vai ser um ótimo funcionário, sem cobrar nada de você. Eu gosto de manipular o banco de dados pelo terminal, acho mais fácil e ágil, para isso eu uso mycli, para instalar em distribuições baseadas em Debian basta dar um sudo apt install mycli pronto. Ferramentas gráficas são uma mão na roda, mas há momentos em que elas acabam ficando mais difíceis de manipular do que a tela preta, porque são várias informações apresentadas na tela, e isso acaba me deixando um pouco perdido. mysqldump.sh Meu deus o que eu escrevi aqui, traduzindo, o tutorial acaba ali, as informações a seguir são interessantes de se ler.
  11. 2 points
    WooX

    Novo comando de depot

    --<talkaction words="/depot;!depot" event="script" value="depot.lua"/>-- local sendToDepot = false local depotIDs = {2589, 2590, 2591, 2592} -- South, West, North and East local middleItems = {1643, 1645} -- Eixo Y, Eixo X function onSay(cid, words, param, channel) if not getPosition(getThingPos(cid)).depot then doPlayerSendCancel(cid, "You're not on the depot.") return true end param = string.lower(param) if (param == "clean") then doCleanTile(getPosition(getThingPos(cid)).depot) doCleanTile(getPosition(getThingPos(cid)).middle) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "The depot and its surrounding were cleaned.") elseif (param == "collect") then local pos = getPosition(getThingPos(cid)).depot while getThingFromPos(pos).itemid > 0 do pos.stackpos = pos.stackpos + 1 if (pos.stackpos > 2) and (isInArray(depotIDs, getThingFromPos(pos).itemid)) then pos.stackpos = pos.stackpos - 1 break elseif (getThingFromPos(pos).itemid == 0) then break end end local toAdd = getThingFromPos(pos) if toAdd.itemid > 0 then if sendToDepot then doRemoveItem(toAdd.uid) local parcel = doCreateItemEx(ITEM_PARCEL) doAddContainerItem(parcel, toAdd.itemid, toAdd.type) doPlayerSendMailByName(getPlayerName(cid), parcel, getPlayerTown(cid)) local itemArticle = isItemStackable(toAdd.itemid) and toAdd.type or getItemArticleById(toAdd.itemid) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You just received "..itemArticle.." "..getItemNameById(toAdd.itemid).." in your depot.") else doRemoveItem(toAdd.uid) doPlayerAddItem(cid, toAdd.itemid, toAdd.type) local itemArticle = isItemStackable(toAdd.itemid) and toAdd.type or getItemArticleById(toAdd.itemid) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, string.upper(itemArticle).." "..getItemNameById(toAdd.itemid).." was added to your inventory.") end else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "There's no item to be collected on your depot.") end else doPlayerSendCancel(cid, "Use the parameters clean or collect.") end return true end function getPosition(playerPos) local position = {} local crossDir = {{0, -1}, {1, 0}, {0, 1}, {-1, 0}} local depotPos, middleItemPos for i = 1, #depotIDs do for k, v in pairs(crossDir) do depotPos = {x = playerPos.x, y = playerPos.y, z = playerPos.z, stackpos = playerPos.stackpos} depotPos.x = depotPos.x + v[1] depotPos.y = depotPos.y + v[2] local depot = getTileItemById(depotPos, depotIDs[i]) if depot.itemid == depotIDs[i] then depotPos.stackpos = 2 position.depot = {x = depotPos.x, y = depotPos.y, z = depotPos.z, stackpos = depotPos.stackpos} middleItemPos = {x = depotPos.x, y = depotPos.y, z = depotPos.z, stackpos = depotPos.stackpos} if playerPos.y ~= depotPos.y then middleItemPos.x = middleItemPos.x - 1 if getTileItemById(middleItemPos, middleItems[1]).itemid ~= middleItems[1] then middleItemPos.x = middleItemPos.x + 2 end elseif playerPos.x ~= depotPos.x then middleItemPos.y = middleItemPos.y - 1 if getTileItemById(middleItemPos, middleItems[2]).itemid ~= middleItems[2] then middleItemPos.y = middleItemPos.y + 2 end end position.middle = {x = middleItemPos.x, y = middleItemPos.y, z = middleItemPos.z, stackpos = middleItemPos.stackpos} break end end end return position end
  12. 2 points
    Ramon RBN

    Spy System

    Lamento reviver o tópico, é por uma boa causa. O pessoal que está tento problema com o erro: attempt to concatenate local 'slotName' basta mudar os ..slotName.. para ..slotName[i].. OBS: Mude os três 'slotName' que irá funcionar normalmente. Muito bom o código, ótima ideia
  13. 2 points
    Vendo Cliente Próprio com Sprites, Enfeites, Outfits e Distances Próprias. Não Estou Com Tempo Suficiente pra finalizar meu Servidor, então estou me desfazendo. Interessados Chamar no PV, só depósito em caixa. IMAGENS:
  14. 2 points
    BrazItzMe

    Shiny Entei

    Upload postimages: Upload tibiaking:
  15. 2 points
    DdJs

    [10.98] (REVAMP) Hellgore - Goroma

    Hellgore - Goroma (REVAMP) V 10.98 [area onde spawna o boss Morgaroth] Download: hellgore.otbm Position: [X: 1021 Y: 1003 Z: 9] Imagens:
  16. 2 points
    Eyeless

    Mapa de Rookgaard completo - 8.6

    Mapa de Rookgaard - 8.6: -Todas as hunts originais + quests; -O mapa acompanha a pasta de NPC's com seus respectivos scripts; -"The Oracle" não está no mapa mas está presente na pasta de NPC's, porém o mapa não acompanha as áreas das vocações pós-seleção, apenas a ilha de Rookgaard; -A área premimum / P.Z. de Rookgaard está desativada, permitindo qualquer jogador sem P.A. acessar a área, portanto para ativar a P.Z. basta editar no R.M.E. Em breve será postado na seção de servidores um OT completo e configurado em TFS (TheForgottenServer) com este mapa + site. Localização do templo: X=32097 / Y=32219 / Z=7 Imagens: Scan: https://www.virustotal.com/gui/file/a08c6b8930bc2f6f2218f50fe5812580de6c5fe20cce20b65beb44826d933819/detection Download (9.2 MB): 4shared: https://www.4shared.com/zip/Cfbv0l45iq/Rookgaard_86.html? Link do próprio post/fórum: Rookgaard 8.6.zip
  17. 2 points
    Atualização de 29/06/2019. Olá meus amigos, essa é a minha última contribuição free que faço na área de OTserver, fiz uma atualização bem completa do Gesior comparando com os que existem disponíveis, não vou falar muito pois grande parte já conhecem... Vou apenas posta algumas imagem das mudanças feitas. Sempre gostei de evoluir e de oferecer aos demais uma facilidade de obter um material grátis e de qualidade, nunca utilizei meu pouco conhecimento para prejudicar os demais, pelo o contrario sempre foi na intenção de ajudar e se em algum momento falhei, falhei inconscientemente. - Foi mudado algumas imagens de layout para renovar a estrutura. - Server Info + Most Power Ful Guilds na mesma estrura. - Create Account exigindo senhas com letras minusculas, maiúsculas e números, fortalecendo a segurança do seu cliente e dificultando futuras dores de cabeças. - Adicionado o mecanismo que identifica os valores de Premuim Points e Backup Points. - Algumas mudanças de layout. - Nome do player abaixo linkado. - Adicionado um Box de doação, com a intenção apenas de complementar o layout enriquecendo a pagina. - Fixado o bug edit town, e melhorado o layout. - Characters.php refeito, nesta imagem é uma visão de uma conta com access admin. - Visão normal. - Inventário completo. - Guilds com visão ampliada. - Detalhes... - Novo SHOP com as estrutura de layout melhorada e modernizada. - Sem BUGs lembre-se do CTRL + F5 para atualizar os cookies nesta pagina. - Detalhes... - Detalhes... - Detalhes... - Histórico do SHOP... DOWNLOAD SITE SHOP.LUA XAMPP 1.7.3 DATABASE LIMPA MYSQL DATABASE COMPLETA MYSQL TUTORIAIS ÚTEIS E COMPATÍVEIS PARA O SITE: PAGSEGURO AUTOMATICO SHOPGUILD BACKUP_POINTS SISTEMA VIP_TIME Créditos: Gesior.pl(WEBMaster) Felipe Monteiro(WEBMaster, WEBDesigner) Natanael Beckman(WEBNada) Nailan (WEBMaster) Ivens Pontes (WEBMaster) Marcio Porto (WEBMaster) Danyel Varejão (Programmer LUA, C++)
  18. 2 points
    DEV C++, aprenda a compila uma source TFS! Downloads(Baixe de acordo as configurações do seu windows): DEV C++ CONFIGURADO PARA 32BITS DEV C++ CONFIGURADO PARA 64BITS REV 3884 TFS 0.4 Certo, feitos os downloads, extrai DEV C++ no Disco C e REV 3884 em Documentos. ====================================== Abra o DEV C++: ====================================== ====================================== Abra a Source: ====================================== ====================================== Localize a pasta da Source e abra o arquivo TheForgottenServer.dev, Documentos> trunk.r3884> dev-cpp> TheForgottenServer.dev: ====================================== ============================================================= ====================================== Aguarde carregar todos os arquivos: ====================================== ====================================== Vamos adicionar o parâmetro -D__CONSOLE__ no teclado digita ALT + P, clique em parameters e adicione o parâmetro... Feito? clique em OK: ====================================== ====================================== Vamos compilar Source, no teclado digite CTRL+F9 e aguarde finalizar o processo: ====================================== ====================================== Se der tudo certo em Log vai estar como mostra a imagem abaixo: ====================================== ====================================== Verifique na pasta Documentos> trunk.r3884> dev-cpp você vai encontrar o arquivo TheForgottenServer.exe e pronto meu parabéns você compilou! ====================================== =========================================== Só isso galera tutorial rápido resumido e útil! Créditos Natanael Beckman! =========================================== Caso você adquira uma source com apenas os arquivos .cpp e .h e não sabe como compilar o projeto, abaixo vamos explicar: Na pasta onde está localizado os arquivos .cpp e .h crie uma pasta chamada dev-cpp, e dentro dela adicione uma imagem icone. Abra o DEV-C++, clique em File> New> Project: Logo em seguida selecione Empty Project, em name terá o nome Project1 altere utilize o nome quer quiser, após isso clique em OK e em seguida selecione a pasta dev-cpp que criamos: Agora selecione a opção Win32GUI caso use source OTX ou TFS selecione Win32Console ao lado << Browse selecione a imagem do icone que está na pasta Dev-Cpp. No mesmo menu na aba Parameters em C++ compiler adicione os seguintes parâmetros: -D__ENABLE_SERVER_DIAGNOSTIC__ -D__ROOT_PERMISSION__ -D__GROUND_CACHE__ -D__USE_SQLITE__ -D__USE_MYSQL__ -D__CONSOLE__ -D__WAR_SYSTEM__ E em Linker adicione as seguintes libs: -lboost_filesystem -lboost_thread -lboost_system -lboost_regex -lsqlite3 -lwsock32 -llua5.1 -lws2_32 -leay32 -lmysql -lxml2 -lgmp -lz -s No mesmo Menu na aba Build Option escreva na segunda coluna horizontal escreva Obj e dê OK. Na lateral terá o nome do seu projeto o meu no caso é The Forgotten Server, clique com o botão direito do mouse em cima do nome e clique na opção Add Project: Selecione na pasta da sua source todos os arquivos .cpp e .h após isso salva o projeto e já pode compilar CTRL+F9: OpenSSL 0.9.8 1º baixe http://devpaks.org/details.php?devpak=73 2° abra Dev-Cpp > Tools > Packager Manager > Install > Seleciona o arquivo baixado e instala, fecha abre e testa! Clica aqui \/
  19. 1 point
    function onUse(cid, item, frompos, item2, topos) if getVocationInfo(getPlayerVocation(cid)).name == "Naruto" then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você já é um Naruto!") else doPlayerSetVocation(cid, 1) --Id da vocation doCreatureSay(cid, "Dale", 19) doSendMagicEffect(getCreaturePosition(cid), 3) doCreatureChangeOutfit(cid, {lookType = 71}) --Looktype da voc if getPlayerStorageValue(cid, 5) < 1 then setPlayerStorageValue(cid, 5, 1) end setPlayerStorageValue(cid, 16200, 1) setPlayerStorageValue(cid, 300, (getPlayerVocation(cid))) doRemoveItem(item.uid) end return TRUE end Adicione a tag no xml actions
  20. 1 point
    Yinz

    Underewar Support ATS

    não recomendo.
  21. 1 point
    Hadggar

    Harry Potter Sprites - FREE

    Bom primeiramente por que estou postando?, bom obvio é que tenho direitos autorais sobre elas, e hoje permito que vocês a usem, ou seja é free for use, eu paguei 500 reais, nessas sprites, e bom tive muitos problemas com o spriter, @geraldoo.maranhao, e bom primeiramente antes disso, eu estava desenvolvendo um projeto também baseado em harry potter, e nem sabia da existencia do projeto dele, e bom ele me acusou de ter ripado as sprites dele, por eu ter conseguido em uma pagina umas das sprites q o mesmo tinha copiado, e nem eu sabia que ele usava, então o mesmo me acusou de plagio e etc, depois com o tempo comprei as sprites dele, e ele sempre prestando um atendimento horrível, me tratando super mal, e me acusando de plagio etc, o próprio tinha postado no otland, e super acusaram ele de plagio, ou seja né, bem surreal, mas bem queria deixar meu feedback até mesmo sobre o profissional que ele é, e dizer que não recomendaria, pela pessoa meia perturbada, e pela falta de profissionalismo que ele possui, seja no atendimento ou entrega. um pouco do que possui no pacote: Resolvi postar, por ter desistido totalmente do projeto, e esta trabalhando em um totalmente distinto do antigo, focado na plataforma mobile, e bom espero que possa ser útil para alguém, já que meus 500 reais não voltam mais, e também estou postando, por que o mesmo estava me vendendo o pacote por 1.000, eu comprei 500 reais, e ele agora esta vendendo por 500 tudo, até as que eu comprei, antes de eu confirmar a comprar com o mesmo, ele jurou que iria apagar e não iria revender, mais um motivo de indignação. Download - Mediafire Scan - VirusTotal
  22. 1 point
    CREATE TABLE `z_ots_comunication` ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL, `type` varchar(255) NOT NULL, `action` varchar(255) NOT NULL, `param1` varchar(255) NOT NULL, `param2` varchar(255) NOT NULL, `param3` varchar(255) NOT NULL, `param4` varchar(255) NOT NULL, `param5` varchar(255) NOT NULL, `param6` varchar(255) NOT NULL, `param7` varchar(255) NOT NULL, `delete_it` int(2) NOT NULL DEFAULT 1 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  23. 1 point
    Yinz

    Erro Ao Criar Character

    Bom dia, o nome do sample está igual ao accountmanagement? Se estiver. dá uma conferida se não tá setado manualmente em accountmanagement. caso esteja manual, pode está outro nome de sample dai ele não tá batendo com o Sample do banco de dados. Você pode setar manualmente o nome do sample ou adicionar assim, que ele vai puxar diretamente do config.php $char_to_copy_name = $config['site']['newchar_vocations'][$newchar_vocation];
  24. 1 point
    Xz Death Xz

    colocar paralyze nesse spell

    Aumenta o 1500 até quando ele travar Acho que no máximo 20000 pega depois de não me engano da erro
  25. 1 point
    costuma dar isso por causa de alguma dll errada, da uma verificada ai
  26. 1 point
    @leocurvelo Desculpa pela demora, Baixa aqui: https://www.dropbox.com/s/7ocsqnon040gt10/physfs %2B AL.rar?dl=0 E coloca dentro da pasta OTCLIENT SDK E adiciona no includes essas pastas ai
  27. 1 point
  28. 1 point
    underewarr

    Server Crash ( Spells )

    é o seu client que não esta suportando a effect.
  29. 1 point
    Visualizar Anúncio Prophets Designer - Faça seu orçamento! Fala, galerinha! Trabalho com designer de artes gráficas, vídeo trailer e sprites. Vários dos meus trabalhos estão nos servidores ativos e de extrema qualidade, que sirvam como primeiras impressões e referências. Já trabalhei para vários servidores sempre facilitando o pedido para os administradores, com foco total em ótima qualidade e resolução, e preocupação com o servidor do cliente.A entrega é em imediato. O método de pagamento é definido em um acordo com o cliente. Detalhe sua ideia que trabalharei em cima para a magia acontecer 😄 Contato: Discord: prophets#1614 Anunciante prophets developer Date 01/09/2019 Preço Categoria Procura-se Jobs  
  30. 1 point
    @ITALOx Mandei solicitaçao
  31. 1 point
    BrazItzMe

    Shiny Rhydon

  32. 1 point
    Yinz

    [8.60] Pumin Seal (Cave)

    eu não sei, se eu já disse, mas porra, tu é mto brabo
  33. 1 point
    luanluciano93

    Look Player tfs 1.3

    tente trocar por thing:getGuid()
  34. 1 point
    WooX

    Look Player tfs 1.3

    Aqui no TibiaKing mensagens como UP e BUMP são proibidas, utilize o botão subir este tópico. Esta é uma mensagem automática! Pedimos que leia as regras do fórum!
  35. 1 point
    underewarr

    Quest.lua

    Base: otbr Qual é a sua pergunta? Como adicionar novo quest log. Quest.lua foi adicionado 051-Storages.lua Foi adicionado TheNewCrystal = { Questline = 10009, -- Storage through the Quest Mission01 = 10010, Mission02 = 10011, Mission03 = 10012, }, Servidor simplesmente nao carrega nada. items,action....etc. quando os código é adicionado no quest.lua Tava errado o nome da variavel no 051 lib resolvido.
  36. 1 point
    WooX

    [TFS 1.2] Log de Erro da Distro?

    Você precisa iniciar a distro com o gdb pra pegar o log de crash. apt-get install gdb gdb ./tfs run Você também pode fazer um script bash pra sempre iniciar a distro com o gdb, ai em caso de crash você sempre vai ter um log disponível.
  37. 1 point
    Matk

    o futuro dos otserv

    Creio que não seja só isso, ainda vejo muitos jogadores jogando tibia, inclusive muitas pessoas que jogam há anos... O grande problema dos OTS é que o Tibia Global praticamente virou um OT só que da CipSoft, é fácil pegar level, é fácil treinar skill, é simples fazer dinheiro, os respaws são mais rápidos que antigamente, enfim, hoje em dia no global existe até item pra converter gold coins em platinum coins... Para um OTServ se destacar hoje em dia ele tem que realmente ser muito bom e possuir diferenciais, por que antigamente a concorrência eram os outros OTS, hoje em dia a concorrência é a própria CipSoft.
  38. 1 point
    marcotorres

    Character Data

    Galera o ot (versão 12 do client), não está carregando a character data, quando um personagem é logado, apenas as hotkeys, configuraçoes como as side bars, modo de pvp, configuraçoes da janela do battle, tudo isso não está carregando, só q na pasta, os arquivos estao lá, e ao msm tempo uma nova pasta do msm char é criada, em branco, sem os arquivos das configurações, fica como se fosse a primeira vez que fosse logar no ot...alguém sabe oq está acontecendo e como reverter isso ? Você tem o código disponível? Se tiver publique-o aqui: Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
  39. 1 point
    Substitua sua função por: function Creature:onTargetCombat(target) if not self then return true end if not __picif[target.uid] then if target:isMonster() then target:registerEvent("RewardSystemSlogan") __picif[target.uid] = {} end end if target:isPlayer() then if self:isMonster() then local protectionStorage = target:getStorageValue(Storage.combatProtectionStorage) if target:getIp() == 0 then -- If player is disconnected, monster shall ignore to attack the player if target:isPzLocked() then end if protectionStorage <= 0 then addEvent(removeCombatProtection, 30 * 1000, target.uid) target:setStorageValue(Storage.combatProtectionStorage, 1) elseif protectionStorage == 1 then self:searchTarget() return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end return true end if protectionStorage >= os.time() then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end end if ((target:isMonster() and self:isPlayer() and target:getType():isPet() and target:getMaster() == self) or (self:isMonster() and target:isPlayer() and self:getType():isPet() and self:getMaster() == target)) then return RETURNVALUE_YOUMAYNOTATTACKTHISCREATURE end if PARTY_PROTECTION ~= 0 then if self:isPlayer() and target:isPlayer() then local party = self:getParty() if party then local targetParty = target:getParty() if targetParty and targetParty == party then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end end end if ADVANCED_SECURE_MODE ~= 0 then if self:isPlayer() and target:isPlayer() then if self:hasSecureMode() then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end end if self:isPlayer() then if target and target:getName() == staminaBonus.target then local name = self:getName() if not staminaBonus.events[name] then staminaBonus.events[name] = addEvent(addStamina, staminaBonus.period, name) end end end return true end
  40. 1 point
    WooX

    Gesior - Classic-Yurots 2019

    Gesior 2012 V. Classic-Yurots Como dito anteriormente no tópico do servidor, este é o Gesior 2012 editado pelo @KOLISAO. Este Gesior foi editado para ser usado exclusivamente com o servidor Classic-Yurots, porem pode ser utilizado em outros datapacks desde que as sources sendo utilizadas sejam TFS 0.4 ou OTX2. Se você ainda não viu o tópico sobre o servidor em questão, vale apena conferir, link para acesso abaixo. Conteúdo Assim como o servidor, muito tempo foi gasto modificando este Gesior, tanto na parte de imagens e layout (front-end) como na criação de novas paginas e funções (back-end). Resumindo, agora esta é uma das se não a melhor versão disponível do Gesior 2012. Eu garanto que vale apena baixar e conferir. Bom, como eu possuo um exemplar do site online, eu não irei postar imagens do mesmo. Você pode conferir as paginas e features do site do link abaixo. Link para acesso: http://classic-styller.com Futuramente porem, eu irei fechar o site, quando este dia chegar, eu irei atualizar o tópico com imagens e adicionar uma descrição detalhada sobre o que contem no mesmo. Créditos Este Gesior foi feito com base no Gesior 2012 postado pelo @Natanael Beckman, caso queira conferir o post original, segue link abaixo. Todas as edições realizadas no site, tanto front-end como back-end foram realizadas pelo @KOLISAO, portanto, os créditos são dele e do Natanael. Link para Download Alerta Antes do link, um alerta. No momento do Scan, 9 de 44 engines acusaram os arquivos como maliciosos, eu acredito que seja apenas um falso positivo devido aos scripts contidos no site, porem eu não posso garantir que os arquivos sejam de fato inofensivos, portanto, baixe os arquivo por sua conta e risco. Download - Scan Obs: Link para download de uma database limpa e compatível com o site se encontra no post do servidor.
  41. 1 point
    Estou testando a ultima versão do servidor porém o cliente 10 da crash em varios lugares. O cliente 12.20 não consegue logar por falta de uma login.php compativel e clientes editados 12 ou 11 com sprites do 12 não se conectam. Alguem sabe um link para um cliente que funcione? Obs.: Para quem quer baixar a ultima versão compilada, segue o link: aqui ... é necessario baixar o exe e os dlls
  42. 1 point
    Salve galera bom tinha uns membros do fórum atrás do sistema de chuva porém estava confuso e totalmente configuravel apenas por math.random então com ajuda do @xWhiteWolf agora o script esta totalmente sem math.random e eu detalhei tudo dentro do script como configurar etc... tópico original Aviso 1º: Mude a tag do globalevents.xml para interval=1 Aviso 2º: Todas as explicações estão dentro do script basta ler Vídeo demonstrativo 2019-10-04 01-44-37.mp4 Vamos as modificações basicamente substitua o arquivo que fica em data/globalevents/scripts/rain.lua abra ele e cole esse código dentro Aproveitando fiz uma modificação na direção que a chuva cai caso quiser a modificação vá em data/globalevents/scripts/lib e abra o arquivo rain.lua e substitua tudo que tiver lá por esse código Créditos: @Guilherme. @xWhiteWolf @LeoTK Elexonic (Otland)
  43. 1 point
    Nolis

    Nolis Show Off

    Nova Yurot 2019 O remake pt. 7 O tehado com as tochas? Saiu muito no improviso, mas gostei também hehe
  44. 1 point
    se ajudei marca como melhor resposta e sobre ajuda você tem q fala oque precisa
  45. 1 point
    MagicEffects CONST_ME_FIRST = 1, CONST_ME_DRAWBLOOD = CONST_ME_FIRST, CONST_ME_LOSEENERGY = 2, CONST_ME_POFF = 3, CONST_ME_BLOCKHIT = 4, CONST_ME_EXPLOSIONAREA = 5, CONST_ME_EXPLOSIONHIT = 6, CONST_ME_FIREAREA = 7, CONST_ME_YELLOW_RINGS = 8, CONST_ME_GREEN_RINGS = 9, CONST_ME_HITAREA = 10, CONST_ME_TELEPORT = 11, CONST_ME_ENERGYHIT = 12, CONST_ME_MAGIC_BLUE = 13, CONST_ME_MAGIC_RED = 14, CONST_ME_MAGIC_GREEN = 15, CONST_ME_HITBYFIRE = 16, CONST_ME_HITBYPOISON = 17, CONST_ME_MORTAREA = 18, CONST_ME_SOUND_GREEN = 19, CONST_ME_SOUND_RED = 20, CONST_ME_POISONAREA = 21, CONST_ME_SOUND_YELLOW = 22, CONST_ME_SOUND_PURPLE = 23, CONST_ME_SOUND_BLUE = 24, CONST_ME_SOUND_WHITE = 25, CONST_ME_BUBBLES = 26, CONST_ME_CRAPS = 27, CONST_ME_GIFT_WRAPS = 28, CONST_ME_FIREWORK_YELLOW = 29, CONST_ME_FIREWORK_RED = 30, CONST_ME_FIREWORK_BLUE = 31, CONST_ME_STUN = 32, CONST_ME_SLEEP = 33, CONST_ME_WATERCREATURE = 34, CONST_ME_GROUNDSHAKER = 35, CONST_ME_HEARTS = 36, CONST_ME_FIREATTACK = 37, CONST_ME_ENERGYAREA = 38, CONST_ME_SMALLCLOUDS = 39, CONST_ME_HOLYDAMAGE = 40, CONST_ME_BIGCLOUDS = 41, CONST_ME_ICEAREA = 42, CONST_ME_ICETORNADO = 43, CONST_ME_ICEATTACK = 44, CONST_ME_STONES = 45, CONST_ME_SMALLPLANTS = 46, CONST_ME_CARNIPHILA = 47, CONST_ME_PURPLEENERGY = 48, CONST_ME_YELLOWENERGY = 49, CONST_ME_HOLYAREA = 50, CONST_ME_BIGPLANTS = 51, CONST_ME_CAKE = 52, CONST_ME_GIANTICE = 53, CONST_ME_WATERSPLASH = 54, CONST_ME_PLANTATTACK = 55, CONST_ME_TUTORIALARROW = 56, CONST_ME_TUTORIALSQUARE = 57, CONST_ME_MIRRORHORIZONTAL = 58, CONST_ME_MIRRORVERTICAL = 59, CONST_ME_SKULLHORIZONTAL = 60, CONST_ME_SKULLVERTICAL = 61, CONST_ME_ASSASSIN = 62, CONST_ME_STEPSHORIZONTAL = 63, CONST_ME_BLOODYSTEPS = 64, CONST_ME_STEPSVERTICAL = 65, CONST_ME_YALAHARIGHOST = 66, CONST_ME_BATS = 67, CONST_ME_SMOKE = 68, CONST_ME_INSECTS = 69, CONST_ME_DRAGONHEAD = 70, CONST_ME_ORCSHAMAN = 71, CONST_ME_ORCSHAMAN_FIRE = 72, CONST_ME_THUNDER = 73, CONST_ME_FERUMBRAS = 74, CONST_ME_CONFETTI_HORIZONTAL = 75, CONST_ME_CONFETTI_VERTICAL = 76, // 77-157 are empty CONST_ME_BLACKSMOKE = 158, CONST_ME_LAST = CONST_ME_BLACKSMOKE, ShootTypes CONST_ANI_NONE = 0, CONST_ANI_FIRST = 1, CONST_ANI_SPEAR = CONST_ANI_FIRST, CONST_ANI_BOLT = 2, CONST_ANI_ARROW = 3, CONST_ANI_FIRE = 4, CONST_ANI_ENERGY = 5, CONST_ANI_POISONARROW = 6, CONST_ANI_BURSTARROW = 7, CONST_ANI_THROWINGSTAR = 8, CONST_ANI_THROWINGKNIFE = 9, CONST_ANI_SMALLSTONE = 10, CONST_ANI_DEATH = 11, CONST_ANI_LARGEROCK = 12, CONST_ANI_SNOWBALL = 13, CONST_ANI_POWERBOLT = 14, CONST_ANI_POISON = 15, CONST_ANI_INFERNALBOLT = 16, CONST_ANI_HUNTINGSPEAR = 17, CONST_ANI_ENCHANTEDSPEAR = 18, CONST_ANI_REDSTAR = 19, CONST_ANI_GREENSTAR = 20, CONST_ANI_ROYALSPEAR = 21, CONST_ANI_SNIPERARROW = 22, CONST_ANI_ONYXARROW = 23, CONST_ANI_PIERCINGBOLT = 24, CONST_ANI_WHIRLWINDSWORD = 25, CONST_ANI_WHIRLWINDAXE = 26, CONST_ANI_WHIRLWINDCLUB = 27, CONST_ANI_ETHEREALSPEAR = 28, CONST_ANI_ICE = 29, CONST_ANI_EARTH = 30, CONST_ANI_HOLY = 31, CONST_ANI_SUDDENDEATH = 32, CONST_ANI_FLASHARROW = 33, CONST_ANI_FLAMMINGARROW = 34, CONST_ANI_SHIVERARROW = 35, CONST_ANI_ENERGYBALL = 36, CONST_ANI_SMALLICE = 37, CONST_ANI_SMALLHOLY = 38, CONST_ANI_SMALLEARTH = 39, CONST_ANI_EARTHARROW = 40, CONST_ANI_EXPLOSION = 41, CONST_ANI_CAKE = 42, CONST_ANI_TARSALARROW = 44, CONST_ANI_VORTEXBOLT = 45, CONST_ANI_PRISMATICBOLT = 48, CONST_ANI_CRYSTALLINEARROW = 49, CONST_ANI_DRILLBOLT = 50, CONST_ANI_ENVENOMEDARROW = 51, fonte: https://github.com/otland/forgottenserver/blob/master/src/const.h espero que ajude, abç
  46. 1 point
    noktuno

    Nokturno's new zone

    Nokturno's Mapping feel free to use my new zone i just made today. a little fancy but it can work in many ways love ya 1: 2: cords: 1000,1000, 1 floating zone nokturno.otbm
  47. 1 point
    Foi testado no TheForgottenServer 0.3.6 no Tibia 8.54 Como o client já está modificado, precisamos modificar a parte do servidor que envia os dados para o client. Vamos modificar dois métodos, addMagicEffect e sendMagicEffect. Entre na sua source 0.3.6 Encontre o arquivo protocolgamer.cpp Você vai encontrar esse código void ProtocolGame::AddMagicEffect(NetworkMessage_ptr msg,const Position& pos, uint8_t type) { msg->AddByte(0x83); msg->AddPosition(pos); msg->AddByte(type + 1); } Percebeu esse parametro uint8_t type? Vamos modificar para uint16_t type. Mas isso não vai adiantar nada se o msg->AddByte(type + 1) continuar desse jeito... Modifique ele para msg->AddU16(type + 1). O código modificado deve ficar desse jeito void ProtocolGame::AddMagicEffect(NetworkMessage_ptr msg,const Position& pos, uint16_t type) { msg->AddByte(0x83); msg->AddPosition(pos); msg->AddU16(type + 1); } Você já deve ter pegado a lógica... Onde tiver um método addMagicEffect com o parametro uint8_t type, tem que trocar por uint16_t type, o mesmo serve para sendMagicEffect. Mas como sei que tem pessoas que não gostam de trabalhar um pouco, vamos continuar com os arquivos para modificar. No mesmo arquivo procure por esse código void ProtocolGame::sendMagicEffect(const Position& pos, uint8_t type) { if(type > MAGIC_EFFECT_LAST || !canSee(pos)) return; NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); AddMagicEffect(msg, pos, type); } } Temos alguém conhecido nos parametros, o uint8_t type, já sabemos o que devemos fazer, modifique ele para uint16_t type, Código deve está desse jeito void ProtocolGame::sendMagicEffect(const Position& pos, uint16_t type) { if(type > MAGIC_EFFECT_LAST || !canSee(pos)) return; NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); AddMagicEffect(msg, pos, type); } } As alterações desse arquivos terminaram, salva as alterações. Vamos para outro arquivo, o protocolgamer.h Procure por esse código void AddMagicEffect(NetworkMessage_ptr msg, const Position& pos, uint8_t type); Novamente troque o uint8_t type por uint16_t type Código devera ficar desse jeito void AddMagicEffect(NetworkMessage_ptr msg, const Position& pos, uint16_t type); Procure por esse código void sendMagicEffect(const Position& pos, uint8_t type); Troque o uint8_t type por uint16_t type Código devera ficar desse jeito void sendMagicEffect(const Position& pos, uint16_t type); Salve as alterações e vamos para o outro arquivo, está cançado de modificar os códigos? é assim mesmo, se quer alguma coisa tem que se esforçar por ela. Vamos para o arquivo game.cpp Procure por esses códigos void Game::addMagicEffect(const Position& pos, uint8_t effect, bool ghostMode /* = false */) { if(ghostMode) return; const SpectatorVec& list = getSpectators(pos); addMagicEffect(list, pos, effect); } void Game::addMagicEffect(const SpectatorVec& list, const Position& pos, uint8_t effect, bool ghostMode/* = false*/) { if(ghostMode) return; Player* player = NULL; for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it) { if((player = (*it)->getPlayer())) player->sendMagicEffect(pos, effect); } } Troque os parametros uint8_t effect por uint16_t effect Dexando-os assim void Game::addMagicEffect(const Position& pos, uint16_t effect, bool ghostMode /* = false */) { if(ghostMode) return; const SpectatorVec& list = getSpectators(pos); addMagicEffect(list, pos, effect); } void Game::addMagicEffect(const SpectatorVec& list, const Position& pos, uint16_t effect, bool ghostMode/* = false*/) { if(ghostMode) return; Player* player = NULL; for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it) { if((player = (*it)->getPlayer())) player->sendMagicEffect(pos, effect); } } Salve as alterações e vamos para o outro arquivo, game.h Procure por esse códigos, está ficando repetitivo, mas é assim mesmo void addMagicEffect(const Position& pos, uint8_t effect, bool ghostMode = false); void addMagicEffect(const SpectatorVec& list, const Position& pos, uint8_t effect, bool ghostMode = false); Troque o uint8_t effect por uint16_t effect Código tem que ficar desse jeito void addMagicEffect(const Position& pos, uint16_t effect, bool ghostMode = false); void addMagicEffect(const SpectatorVec& list, const Position& pos, uint16_t effect, bool ghostMode = false); Essa foi rápido, salve as alterações e vamos para o outro arquivo, player.h Procure por esse código void sendMagicEffect(const Position& pos, uint8_t type) const Troque por esse código void sendMagicEffect(const Position& pos, uint16_t type) const Salve as alterações, esse foi o último arquivo Agora compile! Uma coisa que você deve saber, se você tentar entrar com o client que não esteja esperando valores do tipo uint16 e algum efeito for executado, vai da um erro no client, não da para jogar... Vamos baixar o client modificado. Download cliente com as seguintes configurações. Port: 7171 IP: 127.0.0.1 Version: 8.54 Clique aqui para baixar esse cliente Virus total desse client Download cliente com as seguintes configurações. Port: 7272 IP: 127.0.0.1 Version: 8.54 Clique aqui para baixar esse cliente Virus total desse client Modificações dos clientes foram feitos por mim. Reporte qualquer bug que ocorrer. Esse tutorial ensina como tirar o limite de 255 efeitos do tibia, se você não tiver mais de 255 efeitos colocados em sua source, então coloque para testar, não precisa colocar agora, e se você quiser pode colocar depois e já deixar seu client preparado para suporta mais de 255 efeitos. Tutorial para adicionar efeitos na sua source. Não deixe de agradecer...
  48. 1 point
    robi123

    [TFS 1.x] AutoLoot System

    vou testar... no meu ot é assim -- Events for i = 1, #events do player:registerEvent(events) player:registerEvent("AutoLoot") end não player death nem droploot.. nao precisa colocar isso neh ?
  49. 1 point
    Sim, selecione a opção que adiciona a PZone e segure ctrl ao mesmo tempo e passe nos tiles onde tem PZone.
  50. 1 point
    Essa será minha 3ª aula, e minha primeira de nível intermediário Eu usarei o programa Paint.NET para dar a aula, e recomendo vocês também usarem ele Download do Paint.NET A Parede em Si A parede, no Tibia, tem que possuir normalmente 64x32 de área (Largura x Altura) Fazendo uma parede normal Primeiro crie uma nova imagem de 64x32 (CTRL+N) Então comece fazendo uma linha diagonal na ponta de baixo da imagem até aonde chegar Complete em cima até chegar o máximo á esquerda Da ponta de cima até onde chegar, faça outra linha diagonal Termine a parte de baixo Se quiser pode destacar o meio Colorindo Primeiramente comece pelo verde, ponha a cor base e os detalhes As linhas vermelhas e azuis são das mesmas cores que o lado verde, então complete que nem estou fazendo: Primeiro pinte os detalhes Depois pinte as partes assim: A parte vermelha de cima ficará mais clara que as outras, que são a mesma cor base Percebeu que aonde estava a linha vermelha, está mais claro? Porque não tenta pegar as imagens e dar um zoom? Atenção, no meio da aula, eu me distraí e esqueci de mostrar uma coisa, quando você fizer os detalhes, faça de uma forma que uma linha azul se ligue com a outra Ex: Fazendo as bordas Pra começar, faça linhas para cima em baixo e na ponta, a largura você que decide, se for uma borda grande, será mais largura, se for pequena, menos. Então complete com uma linha diagonal ligando as pontas, é importantíssimo que elas tenham a mesma largura, se for uma parede reta. Depois, façam uma borda plana em cima (lembram da minha primeira aula, quando disse sobre as coisas planas sempre serem retas e estendidas?) Colora e deixe as linhas roxas com as mesmas cores, igual citei agora pouco A parte de cima ficará mais clara, pois é onde bate o sol Fazendo o suplemento de baixo Primeiramente, pegue a ferramenta varinha mágica , e lá em cima, clique na Lâmpada , que ficará assim. Nós clicamos na lâmpada, pois o globo, quando for clicar com a varinha mágica, selecionará as cores iguais de todo o desenho, e não só as ligadas, também funciona com o Preenchimento, ou "Balde de Tinta", que pintará as mesmas cores em todo o desenho. Segurando CTRL, clique nas cores da parede, até que fique totalmente preenchida, então copie (CTRL+C) Depois disso, Gire a imagem 90º (CTRL+H) e a inverta na horizontal (Imagem>Inverter Horizontalmente) Assim, nós mudamos o lado da parede de frente para o lado Após isso, cole a imagem que tínhamos copiado, e ficará assim Faça as devidas edições Fazendo o suplemento de cima Com a imagem que criamos, selecione de uma cor forte a parte que está juntando as paredes Então remova o que tiver fora da linha vermelha, recomendo colocarem o Preenchimento/Balde de Tinta e mudar a tolerância para 60% +-, fazendo assim que preencha as diferentes tonalidades de cinza, faça os devidos tests, se não der muito certo, desfaça o erro com um CTRL+Z Pinte igual as outras etapas Pronto, terminamos a parede e seus complementos! Quer ver como ficou? Não ficou lá essas coisas, pois eu me esqueci de dar aquela ligadura de detalhes, e eu não sombreei nem texturei a parede, mas isso fica pra aula de texturas, não é?! Tcharam Créditos: Danilonilo8
This leaderboard is set to Sao Paulo/GMT-03:00

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...