Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 06/24/15 em todas áreas

  1. Administrador

    xTibia - Shadowcores Website

    Visualize o website Downloads Download Mega Scan Créditos: Shadowcores por disponibilizar @Daniel por postar
    2 pontos
  2. Vodkart

    TopLevel Effect

    Refiz o código de outro jeito, as TAGS são as MESMAS. Créditos ao Bruno: http://pastebin.com/raw.php?i=pr8G8DQH
    2 pontos
  3. zipter98

    Mega Evolution System (PxG)

    Base usada: PDA by Slicer, v1.9 Para quem não conhece o sistema de mega evoluções, recomendo acessar este link. A diferença é que a pedra (mega stone) não ocupa o espaço de um Held Item tier Y (visto que não são todos os servidores que possuem Held Itens). Instalação do sistema (atenção nos detalhes) data/lib: cooldown bar.lua: Troque o código da função getNewMoveTable(table, n) por este: function getNewMoveTable(table, n) if table == nil then return false end local moves = {table.move1, table.move2, table.move3, table.move4, table.move5, table.move6, table.move7, table.move8, table.move9, table.move10, table.move11, table.move12} local returnValue = moves if n then returnValue = moves[n] end return returnValueend No código da função doUpdateMoves(cid), troque o segundo: table.insert(ret, "n/n,") por: local mEvolveif not getCreatureName(summon):find("Mega") and getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") then if not isInArray(ret, "Mega Evolution,") then table.insert(ret, "Mega Evolution,") mEvolve = true endendif not mEvolve then table.insert(ret, "n/n,")end Depois, em pokemon moves.lua: Troque: min = getSpecialAttack(cid) * table.f * 0.1 --alterado v1.6 por: min = getSpecialAttack(cid) * (table and table.f or 0) * 0.1 --alterado v1.6 Código da spell: elseif spell == "Mega Evolution" then local effect = xxx --Efeito de mega evolução. if isSummon(cid) then local pid = getCreatureMaster(cid) if isPlayer(pid) then local ball = getPlayerSlotItem(pid, 8).uid if ball > 0 then local attr = getItemAttribute(ball, "megaStone") if attr and megaEvolutions[attr] then local oldPosition, oldLookdir, health_percent_lost = getThingPos(cid), getCreatureLookDir(cid), (getCreatureMaxHealth(cid) - getCreatureHealth(cid)) * 100 / getCreatureMaxHealth(cid) doItemSetAttribute(ball, "poke", megaEvolutions[attr][2]) doSendMagicEffect(getThingPos(cid), effect) doRemoveCreature(cid) doSummonMonster(pid, megaEvolutions[attr][2]) local newPoke = getCreatureSummons(pid)[1] doTeleportThing(newPoke, oldPosition, false) doCreatureSetLookDir(newPoke, oldLookdir) adjustStatus(newPoke, ball, true, false) doCreatureAddHealth(newPoke, -(health_percent_lost * getCreatureMaxHealth(newPoke) / 100)) if useKpdoDlls then addEvent(doUpdateMoves, 5, pid) end end end end end Depois, em configuration.lua: megaEvolutions = { --[itemid] = {"poke_name", "mega_evolution"}, [11638] = {"Charizard", "Mega Charizard X"}, [11639] = {"Charizard", "Mega Charizard Y"},} Agora, em data/actions/scripts, código da mega stone: function onUse(cid, item) local mEvolution, ball = megaEvolutions[item.itemid], getPlayerSlotItem(cid, 8).uid if not mEvolution then return doPlayerSendCancel(cid, "Sorry, this isn't a mega stone.") elseif ball < 1 then return doPlayerSendCancel(cid, "Put a pokeball in the pokeball slot.") elseif #getCreatureSummons(cid) > 0 then return doPlayerSendCancel(cid, "Return your pokemon.") elseif getItemAttribute(ball, "poke") ~= mEvolution[1] then return doPlayerSendCancel(cid, "Put a pokeball with a(n) "..mEvolution[1].." in the pokeball slot.") elseif getItemAttribute(ball, "megaStone") then return doPlayerSendCancel(cid, "Your pokemon is already holding a mega stone.") end doItemSetAttribute(ball, "megaStone", item.itemid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Now your "..getItemAttribute(ball, "poke").." is holding a(n) "..getItemNameById(item.itemid)..".") doRemoveItem(item.uid) return trueend Depois, em goback.lua: Abaixo de: if not pokes[pokemon] then return trueend coloque: if pokemon:find("Mega") then local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1] if normalPoke then doItemSetAttribute(item.uid, "poke", normalPoke) pokemon = normalPoke end end Depois, em data/creaturescripts/scripts, look.lua: Abaixo de: local boost = getItemAttribute(thing.uid, "boost") or 0 coloque: local extraInfo, megaStone = "", getItemAttribute(thing.uid, "megaStone")if megaStone then extraInfo = getItemNameById(megaStone) if pokename:find("Mega") then pokename = megaEvolutions[megaStone][1] endend Depois, acima do primeiro: doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) coloque: if extraInfo ~= "" then table.insert(str, "\nIt's holding a(n) "..extraInfo..".")end Já em data/talkactions/scripts, move1.lua: Abaixo de: function doAlertReady(cid, id, movename, n, cd) coloque: if movename == "Mega Evolution" then return true end Troque: if not move then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end por: if not move then local isMega = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") if not isMega or name:find("Mega") then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end local moveTable, index = getNewMoveTable(movestable[name]), 0 for i = 1, 12 do if not moveTable[i] then index = i break end end if tonumber(it) ~= index then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end local needCds = true --Coloque false se o pokémon puder mega evoluir mesmo com spells em cooldown. if needCds then for i = 1, 12 do if getCD(getPlayerSlotItem(cid, 8).uid, "move"..i) > 0 then return doPlayerSendCancel(cid, "To mega evolve, all the spells of your pokemon need to be ready.") end end end move = {name = "Mega Evolution", level = 0, cd = 0, dist = 1, target = 0} end E troque: doCreatureSay(cid, ""..getPokeName(mypoke)..", "..msgs[math.random(#msgs)]..""..move.name.."!", TALKTYPE_SAY) por: local spellMessage = msgs[math.random(#msgs)]..""..move.name.."!"if move.name == "Mega Evolution" then spellMessage = "Mega Evolve!"enddoCreatureSay(cid, getPokeName(mypoke)..", "..spellMessage, TALKTYPE_SAY) Se não quiser que o "Mega" apareça no nome do pokémon, vá em data/lib, level system.lua: Acima de: if getItemAttribute(item, "nick") then nick = getItemAttribute(item, "nick")end coloque: if nick:find("Mega") then nick = nick:match("Mega (.*)") if not pokes[nick] then nick = nick:explode(" ")[1] end end Caso queiram que cada mega evolução tenha um clã específico: Em move1.lua, acima de: move = {name = "Mega Evolution", level = 0, cd = 0, dist = 1, target = 0, f = 0, t = "?"} coloque: local megaEvoClans = { --[mega_stone_id] = "clan_name", [91912] = "Volcanic", [91913] = "Seavell", --etc,}if megaEvoClans[isMega] then if getPlayerClanName(cid) ~= megaEvoClans[isMega] then return doPlayerSendCancel(cid, "You can't mega evolve this pokemon.") endend Finalizando o tópico após uma pequena reestruturação na indexação, gostaria de levantar algo que acredito ser bem claro: o sistema é cheio de detalhes, muitas vezes minuciosos. Um simples erro e bugs aparecem por toda parte. Se você encontrou algum, pelo menos uma das duas seguintes condições acontecem: Base DIFERENTE da usada. Peço desculpas, mas não pretendo adaptar o sistema para todas as bases diferentes que aparecerem. Se a base for a mesma, você com certeza errou em algum ponto da instalação. O sistema foi testado inúmeras vezes, não apenas por mim, e seu funcionamento foi seguidamente comprovado. Façam bom uso, invocadores.
    1 ponto
  4. Oneshot

    Forge System

    ADVANCED FORGE SYSTEM O SISTEMA DE CRIAÇÃO DE ITENS PARA SEU SERVIDOR Creio que muitos já conhecem o sistema de forja criado por mim, acontece que o código já estava um pouco obsoleto, então resolvi reescrever ele do 0. Simplesmente consiste em um sistema de criação de itens avançado que ressuscita um pouco do RPG perdido nos servidores de hoje em dia. O jogador poderá criar itens através de forja, agindo como um verdadeiro ferreiro medieval. Adiciona itens em cima de uma bigorna previamente colocada no mapa e com um martelo cria um item totalmente novo. CARACTERÍSTICAS DA VERSÃO FINAL: - Configuração intuitiva e fácil de compreender; - Mini-tutorial auxiliando criação de novas receitas; - Receitas podem conter até 250 itens diferentes com suas respectivas quantidades; - Sistema inteligente que identifica uma receita em qualquer ordem; - Código totalmente orientado a objetos; - Possibilidade de configurar diferentes requerimentos, diferentes skills, magic level e level Há dois modos de instalar o Advanced Forge System, o primeiro é seguir os passos deste tópico e o segundo e baixar pasta data/ anexada no tópico com os arquivos em seus respectivos diretórios, precisando apenas o registro das chaves nos arquivos XML. Escolha o modo que mais convém a você. Crie um arquivo em data/lib chamado forgesystem.lua e cole o conteúdo abaixo: --[[ ADVANCED FORGE SYSTEM FINAL Criado por Oneshot É proibido a venda ou a cópia sem os devidos créditos desse script. ]]-- RecipeHandler = { itemtype = 0, items = {}, level = 1, maglevel = 0, skills = {[0] = 0, [1] = 0, [2] = 0, [3] = 0, [4] = 0, [5] = 0, [6] = 0} } Forge = { type = nil, position = nil, magicEffect = CONST_ME_MAGIC_GREEN, messages = { class = MESSAGE_STATUS_DEFAULT, success = "You have successfully forged a %s.", needskill = "You don't have enough %s to create a %s.", needlevel = "You need level %s to create a %s.", needmaglevel = "You need magic level %s to create a %s." } } function RecipeHandler:new(itemtype, items, level, maglevel, skills) local obj = { itemtype = (itemtype or 0), items = (items or {}), level = (level or 1), maglevel = (maglevel or 0), skills = (skills or {[0] = 0, [1] = 0, [2] = 0, [3] = 0, [4] = 0, [5] = 0, [6] = 0}) } table.insert(Recipes, obj) return setmetatable(obj, {__index = self}) end function RecipeHandler:setItem(itemtype) self.itemtype = (itemtype or 0) end function RecipeHandler:setRecipe(...) self.items = {...} end function RecipeHandler:setRecipeItem(itemid, amount) table.insert(self.items, {itemid, amount}) end function RecipeHandler:setSkill(skillid, value) self.skills[skillid] = value end function RecipeHandler:setLevel(value) self.level = value end function RecipeHandler:setMagLevel(value) self.maglevel = value end function RecipeHandler:check(position) local match = false for n, item in ipairs(self.items) do local thing = getTileItemById(position, item[1]) if thing.uid > 0 and math.max(1, thing.type) >= item[2] then if n == #self.items then match = true end else break end end return match end function RecipeHandler:get(position) if self:check(position) == true then return setmetatable({type = self, position = position}, {__index = Forge}) end return false end function Forge:create(cid) if self.type.itemid == 0 then print("[FORGE SYSTEM - ERROR] ATTEMPT TO CREATE A RECIPE ITEMID 0") return end local status = true if(cid) then if getPlayerLevel(cid) < self.type.level then doPlayerSendTextMessage(cid, self.messages.class, self.messages.needlevel:format(self.type.level, getItemNameById(self.type.itemtype))) return end if getPlayerMagLevel(cid) < self.type.maglevel then doPlayerSendTextMessage(cid, self.messages.class, self.messages.needmaglevel:format(self.type.maglevel, getItemNameById(self.type.itemtype))) return end for skillid, value in pairs(self.type.skills) do if getPlayerSkillLevel(cid, skillid) < value then status = false doPlayerSendTextMessage(cid, self.messages.class, self.messages.needskill:format(SKILL_NAMES[skillid], getItemNameById(self.type.itemtype))) break end end end if status == true then for _, item in ipairs(self.type.items) do local thing = getTileItemById(self.position, item[1]) doRemoveItem(thing.uid, item[2]) end doSendMagicEffect(self.position, self.magicEffect) doPlayerSendTextMessage(cid, self.messages.class, self.messages.success:format(getItemNameById(self.type.itemtype))) doCreateItem(self.type.itemtype, self.position) end end dofile(getDataDir() .."/lib/recipes.lua") Crie um arquivo em data/lib chamado recipes.lua e adicione o conteúdo abaixo: ---------------------------------------- -----** TUTORIAL DE CONFIGURAÇÃO **----- ---------------------------------------- --[[ O 'ADVANCED FORGE SYSTEM' é muito fácil e intuitivo de configurar, você só precisa chamar a função RecipeHandler:new(...), sendo que você já configurar os atributos da receita nela ou usar outras funções para isso. Por exemplo, quero criar uma Magic Sword que precise de 100 Gold Nuggets. RecipeHandler:new(2400, {{2157, 100}}) Ou então Magic_Sword = RecipeHandler:new() Magic_Sword:setItem(2400) Magic_Sword:setRecipe({2157, 100}) Funções do Sistema: RecipeHandler:new(itemtype, items, level, maglevel, skills) --> Cria uma nova instância de forja. RecipeHandler:setItem(itemtype) --> Atribui um certo itemid como resultado da receita. RecipeHandler:setRecipe(recipe) --> Atribui uma receita. RecipeHandler:setRecipeItem(itemid, amount) --> Adiciona um itemid e sua quantidade a receita. RecipeHandler:setSkill(skillid, value) --> Atribui um valor necessário de uma certa skill para poder criar a receita. RecipeHandler:setLevel(value) --> Atribui o level necessário para criar uma receita. RecipeHandler:setMagLevel(value) --> Atribui o magic level necessário para criar uma receita. ]]-- --[[ Este é um exemplo de receita usando algumas funções. É uma Magic Sword (ITEMID: 2400) que precisa de 100 Gold Nuggets (ITEMID: 2157), além disso, o personagem que tentar forjar, precisa ter Level 100 e Sword Fighting 50. ]]-- Recipes = {} magicsword = RecipeHandler:new() magicsword:setItem(2400) magicsword:setRecipeItem(2157, 100) magicsword:setLevel(100) magicsword:setSkill(2, 50) Agora em data/actions/scripts, crie um arquivo chamado iron_hammer.lua e adicione o conteúdo abaixo: function onUse(cid, item, fromPosition, itemEx, toPosition) local recipe = nil for _, v in ipairs(Recipes) do recipe = v:get(toPosition) if(recipe ~= false) then break end end if(recipe) then recipe:create(cid) else doPlayerSendCancel(cid, "This is not a valid recipe.") end return true end E por fim em actions.xml, adicione a seguinte linha: <action itemid="4846" event="script" value="iron_hammer.lua"/> OPCIONAL - TALKACTION A talkaction abaixo mostra ao jogadoras receitas configuradas no servidor que ele pode fazer. Em data/talkactions/scripts, crie um arquivo chamado recipes.lua e adicione o conteúdo abaixo: function onSay(cid, words, param, channel) local ret = {} local msg = " ADVANCED FORGE SYSTEM\n" for _, recipe in ipairs(Recipes) do local skills = true for skillid, value in pairs(recipe.skills) do if getPlayerSkillLevel(cid, skillid) < value then skills = false break end end if skills == true then if getPlayerLevel(cid) >= recipe.level and getPlayerMagLevel(cid) >= recipe.maglevel then table.insert(ret, {recipe, true}) else table.insert(ret, {recipe, false}) end else table.insert(ret, {recipe, false}) end end for _, recipe in ipairs(ret) do msg = msg .."\nRecipe for ".. getItemNameById(recipe[1].itemtype) ..":\n\n" if recipe[2] == true then for _, item in ipairs(recipe[1].items) do msg = msg .."* ".. getItemNameById(item[1]) .." [".. math.min(item[2], math.max(0, getPlayerItemCount(cid, item[1]))) .."/".. item[2] .."]\n" end else msg = msg .."[LOCKED]\n" end end doShowTextDialog(cid, 2555, msg) return true end Em data/talkactions/talkactions.xml, adicione a linha: <talkaction words="/recipes" event="script" value="recipes.lua"/> Siga as instruções para configuração de novas receitas. Em breve vídeo de funcionamento Advanced Forge System.rar
    1 ponto
  5. Mudrock

    Gesior 1.0 [TFS 1.O] NEW

    Mas afinal, o que esse Gesior tem de diferente? É completamente seguro e estável. Página "createaccount" Sem Bug. Possui um Helpdesk avançado. Possui diversas páginas explicativas. Página de donate personalizada e funcional. Shopping completamente Moderado Layout impecável e completamente perfeito. Entre outras diversas características. Algumas Prints Latest News Shop System Moderado Por Min Pagina De Compra Points Moderado Por Min Essa versão do Gesior só funciona na versão 1.0 do TFS! OBS: Se For Postar Em Outros Forum Coloca Meus Credito Por Favor!!! Créditos: Base por Victor Modificado e Configurado Por Min Liane. Download: http://www.speedysha...S82t/htdocs.rar Obs: A Database Podem Usa A Do Victor Fasano Raful v2 Scan --> https://www.virustot...sis/1420379894/
    1 ponto
  6. JKalin

    editor geral de otserv

    Bom pessoal, primeiramente pedindo desculpas por está postando no local errado (eu acho). Percebi uma forte carência de um software realmente bom e ccompleto para auxiliar os donos de servers e principalmente os iniciantes. Pensando nisso hoje comecei o projeto de um editor realmente completo, a lista de funções estará no final do tópico. Essa vontade de ajudar veio logo depois que abandonei o Windows e passei a usar Linux ubuntu, fui muito bem recebido pela comunidade linux que me ajudou bastante no começo quando ainda não conhecia muito bem o sistema. Como sou programador e entendo de literalmente todas as áreas de um otserver, dês de maps até sprites, comecei a criar essa ferramenta para ajudar vocês. Dentre várias linguagens de programação a que escolhi foi java, ela não seria a melhor opção para alguns métodos que esse programa vai ter, mas é de linguagem universal e vai rodar com um ótimo desempenho em todas as plataformas. O programa irá contar com: Editor de spells para criação e novas spells como também editar as já existentes. Editor de itens. Editor de vocação. Editor para config.lua. Editor para forge system, auxiliando na criação de novas fórmulas. Editor de skins e montarias. IDE para criação de scripts lua. E mais funções, mas essas serão as principais. A princípio o programa não servirá para edições de banco de dados... mas já vai estar com bastante coisa em sua versão alpha 1.0 Lembrando pessoal, spells criadas nele serão instaladas em seu serv automaticamente. A melhor parte é que vocês quase não terão contato com códigos e muito menos precisarão navegar por exemplo na pasta data de seu ot. Escolhi divulgar no xtibia porquê foi o forum que mais me ajudou na época em que eu era dono de otserv. Hoje sou maior de idade, nem jogo mais tibia... pouco tempo livre, isso também implica na criação desse software, pois só terei tempo de trabalhar nele a noite e nos finais de semana. Mas tudo indica e creio eu que em 10 ou 15 dias lanço aqui no fórum a versão 0.1 contendo um editor de spells e do config.lua Agora terminou meu horário de trabalho... mas é isso ai pessoal. A e lembrando o nome do editor será JKalin. Meu nome de tibiano kkkkkkkkk a saudades de quando era de menor e podia jogar horas, do meu ot serv com mais de 150 players.... sabe, aproveitem ao máximo essa fase.
    1 ponto
  7. Changelog Versão 10.76 adicionada (NOVO) Suporte para versões 10.10+ Live casts Ultima versão do github Informações Precisa do Microsoft Visual C++ 2013 - 32/64Bits: Redistributable Package Não tem suporte para Windows Xp VERSÃO ATÉ 10.80 ! Versão até 10.71 rev 151 + modificações Versão até 10.55 rev 142 + modificações
    1 ponto
  8. move1.lua: Abaixo de: if getPlayerStorageValue(mypoke, 3894) >= 1 then return doPlayerSendCancel(cid, "You can't attack because you is with fear") --alterado v1.3 end coloque: if move.name == "Morph" then for i = 1, 12 do if getCD(getPlayerSlotItem(cid, 8).uid, "move"..i) > 0 then return doPlayerSendCancel(cid, "To use Morph, all the spells of your pokemon need to be ready.") end end end
    1 ponto
  9. Lord Stryton

    Pokemon Flash [ º V 5.0 º ]

    Esse server pra muitos é antigo, ruim e etc. Para mim é ótimo por este server em sua versão antiga gerou o Otpokémon, estudos de algumas funções, e melhor de tudo é que se arrumar ele bem certinho e organizar uma source ele fica sem lag, sem erros e sem bugs. Bom, reviver tópicos é proibido. http://www.mediafire.com/download/dbh81fpt7t461gv/PkGTeam+Cliente.rar Pronto tá a e o cliente. Peça para o Dono add o scan e colocar no tópico.
    1 ponto
  10. Administrador

    [10.35+] GM Island

    GM ISLAND BY DANIEL Versão: 10.35 Tempo gasto: 4h Contém: Templo, áreas de lazer, portais para as principais cidades, outros. Necessário: Script que teleporta o god para dentro do castelo, se não for god não pode entrar. Imagens: http://i.imgur.com/nZT2Rum.pnghttp://i.imgur.com/NVJsH75.png http://i.imgur.com/vablDzJ.pnghttp://i.imgur.com/yoATEGo.pnghttp://i.imgur.com/h9A3suo.pnghttp://i.imgur.com/ZrjnvjY.png http://i.imgur.com/kEkZUGc.pnghttp://i.imgur.com/prpurwh.png http://i.imgur.com/wjvzeVZ.pnghttp://i.imgur.com/aPzZSz8.png http://i.imgur.com/zXixy0D.pnghttp://i.imgur.com/uRRnno9.png http://i.imgur.com/YoPFpjm.pnghttp://i.imgur.com/kA09FGr.png Download: Mediafire Scan
    1 ponto
  11. zipter98

    Mega Evolution System (PxG)

    @Lordbaxx Uhum, manda PM. @FlamesAdmin Troque: doSendMagicEffect(getThingPos(cid), effect) por: doSendMagicEffect({x = getThingPos(cid).x + 1, y = getThingPos(cid).y + 1, z = getThingPos(cid).z}, effect)
    1 ponto
  12. RigBy

    Livro ser o questlog

    Fiz o meu com base no do bruno local quest = { [12200] = {name = "Salve o mundo ", done = 1}, [12201] = {name = "A volta dos que nao foram ", done = 1}, [12202] = {name = "Eu, eu mesmo e Irene ", done = 1}, [12203] = {name = "Todo Poderoso ", done = 1}, } function onUse(cid, item, fromPosition, itemEx, toPosition) local tabela = {} for a, b in pairs(quest) do if getPlayerStorageValue(cid, a) == b.done then table.insert(tabela, ""..b.name.."\n") end end if #tabela > 0 then doShowTextDialog(cid, item.itemid, "Quests completadas:\n\n"..table.concat (tabela).."") else doShowTextDialog(cid, item.itemid, "Nenhuma quest completada.") end return true end
    1 ponto
  13. Administrador

    Alteração de nome

    Alteração realizada.
    1 ponto
  14. Bruno

    Comando que Reculpera stamina

    Tenta assim:
    1 ponto
  15. Bruno

    RESETS ? Ajudinha

    @@raynerjr substitua seu data/lib/050-function.lua por este: Em data/talkactions/talkactions.xml adicione a tag: Agora em data/talkactions/scripts crie o arquivo comprar.lua com o seguinte conteúdo: Configurando: ["axe"] = palavra que o cara vai usar para comprar id = 2400 -- id do item qtd = 1 -- quantidade do item pontos = 3 -- valor em pontos
    1 ponto
  16. Aberos

    Dúvida Tabela na lib

    para usar como tabela global vc nao poder usar o "local" antes do nome da tabela ex: spells = { [1] = { 50, 5000, 5001, 11, 28} }
    1 ponto
  17. @@raynerjr, testa ai:
    1 ponto
  18. Bruno

    Livro ser o questlog

    @@Fjinst, não sei e vai funcionar, mais ta aí: Em data/actions/actions.xml adicione a tag: <action itemid="xxxx" event="script" value="allquests.lua"/> Coloque o id do item desejado em xxxx Agora em data/actions/scripts crie o arquivo allquests.lua com o seguinte conteúdo: local quests = { [12200] = {name = "Salve o mundo", done = 1}, [12201] = {name = "A volta dos que nao foram", done = 1}, [12202] = {name = "Eu, eu mesmo e Irene", done = 1}, [12203] = {name = "Todo Poderoso", done = 1}, } function onUse(cid, item, fromPosition, itemEx, toPosition) local q = {} for a, b in pairs(quests) do if getPlayerStorageValue(cid, a) == b.done then table.insert(t, b.name) end end if #q > 0 then local text = "Quests completadas:\n\n" for quest,_ in pairs(q) do text = text .. quest .. "\n" end doShowTextDialog(cid, item.itemid, text) return true else doShowTextDialog(cid, item.itemid, "Nenhuma quest completada.") end return true end Explicação: [sTORAGE] = {name = "NOME DA QUEST", done = VALOR DO STORAGE PARA QUEST ESTAR COMPLETA}
    1 ponto
  19. RigBy

    Teleport por vocação

    Isso é um movement .lua local vocation = {1, 2} -- vocações que vai poder usar o teleport local pos = {x = 129, y = 54, z = 6} -- local para onde sera teleportado function onStepIn(cid, player, position, FromPosition) if isInArray(vocation, getPlayerVocation(cid)) then doTeleportThing(cid, pos) else doTeleportThing(cid,FromPosition) doPlayerSendCancel(cid,"Você não tem a vocação necessária para entrar aqui!") end return true end .Xml, tag <movevent type="StepIn" actionid="XXXX" event="script" value="nome do arquivo.lua"/> agora so basta abrir o editor de mapas e coloca o actionid no teleport.
    1 ponto
  20. valakas

    [Duvida] Moves Poketibia

    o client e programado para pegar o id das portrait do pokemon direto do dat e spr não no id do serve e sim o id do object builder ( eu acho)não sei onde fica eu nunca mexi nisso
    1 ponto
  21. Boa boa! As rotas vao conter praticamente os mesmos pokemons, uns podem ser de mais dificil acesso doque outros mas vai ser fiel ao seriado!
    1 ponto
  22. valakas

    [Duvida] Moves Poketibia

    [looktype do pokemon (numero)] = {x = { pok = nome do pokemon, spell = "nome da spell que vai usar", minLv = 80, ex = 1850001 --Storage recomendo mudar, base1 = 180, --dano minimo base2 = 220, --dano max dista = 5, --distancia bonus = 13, --bonus de dano type = "rock", --tipo do attack cd = 10 --tempo de recarga da spell } }, Ficando assim \/ [626] = {x = { pok = tyranitar, spell = "Rock Throw", minLv = 100, ex = 2480001, base1 = 250, base2 = 350, dista = 5, bonus = 17, type = "rock", cd = 10 } }, se a looktype do pokemon não estiver ali vai da erro porque a spell foi programada para ser usada com certa looktype por exemplo o 626
    1 ponto
  23. Bruno

    [OMS] O Melhor Script

    Quando você cria um conteúdo de evento, ele vai ser postado como qualquer outro, ajudando quem precisa ou quem se interessa pela ideia. O intuito desse "evento" é uma disputa entre scripters que gostam do que faz, um duelo para onde o mais criativo, organizado e etc vencerá. Como nosso fórum é totalmente gratuito, não temos fins lucrativos para investir em premiações com esses concursos, bem que gostariamos. As vezes o conhecimento adquerido nesses eventos vale mais do quem, como você citou, uma simples premium account.
    1 ponto
  24. Avronex

    [OMS] O Melhor Script

    Discordo, nem todo mundo que acessa o forum joga o Tibia Global, porem todo mundo que acessa o forum está atras de conhecimento para criar seu proprio servidor, por mim uma medalha de mérito por poder ajudar alguem ja está de bom tamanho...
    1 ponto
  25. Bruno

    TopLevel Effect

    HAahhaa, depois vou testar e atualizo no principal. Esse foi um dos meus primeiros scripts quando comecei mexer com lua, nunca mais alterei ele. Vlw vod.
    1 ponto
  26. felipinkoak

    [AJUDA] Fly Pokemon

    Cara acredito eu que esse Fly é pra Tibia, não é mesma coisa de pokemon né? Eu nem tentei fazer por causa disso mais se você me falar que da certo eu faço.. Ah e se for preciso eu tenho as sources aqui haha @UP TO PRECISANDO MUITO ALGUEM AJUDA AI PF @UP
    1 ponto
  27. Tag: <talkaction words="!abrir;!quest" event="script" value="nome_do_arquivo.lua"/> Código: local config = { players = { {x = 1056, y = 1056, z = 7}, --Posições para onde os jogadores serão teleportados. {x = 1055, y = 1056, z = 7}, {x = 1054, y = 1056, z = 7}, }, storage = {91812, 91813}, } function onSay(cid, words) if words == "!abrir" then if getPlayerGroupId(cid) ~= 6 then return false elseif getGlobalStorageValue(config.storage[1]) > -1 then return doPlayerSendCancel(cid, "The quest is already open.") end setGlobalStorageValue(config.storage[1], 1) broadcastMessage("The quest was open! Waiting for "..#config.players.." players...") elseif words == "!quest" then if getGlobalStorageValue(config.storage[1]) < 1 then return doPlayerSendCancel(cid, "The quest isn't open.") end local message, newStorage, count = getCreatureName(cid).." was registered in the quest!", 0, 0 for i = 0, #config.players - 1 do count = count + 1 newStorage = config.storage[2] + i if getGlobalStorageValue(newStorage) == getPlayerGUID(cid) then return doPlayerSendCancel(cid, "You are already registered in the quest.") elseif getGlobalStorageValue(newStorage) == -1 then break end end setGlobalStorageValue(newStorage, getPlayerGUID(cid)) doPlayerSendTextMessage(cid, 27, "You were registered in the quest.") if count == #config.players then local startQuest, p = true, {} for i = 0, #config.players - 1 do local pid = getPlayerByName(getPlayerNameByGUID(getGlobalStorageValue(config.storage[2] + i))) if not isPlayer(pid) then if startQuest then startQuest = false end setGlobalStorageValue(config.storage[2] + i, -1) else p[#p + 1] = pid end end if startQuest then for i = 1, #p do doPlayerSendTextMessage(p[i], MESSAGE_STATUS_CONSOLE_ORANGE, "Good luck at the quest! ^^") doTeleportThing(p[i], config.players[i]) end for i = 0, #config.players - 1 do setGlobalStorageValue(config.storage[2] + i, -1) end setGlobalStorageValue(config.storage[1], -1) message = message.." It has started now, with "..#p.." players!" end end broadcastMessage(message) end return true end
    1 ponto
  28. vá em file/preferences/client version! deixe ambos: 8.60 / 8.54 - já pré-configurado e coloque para não checar a signature do mapa! em default client version coloque a do 8.60! Onde no meu esta marcado vc deixa desmarcado!
    1 ponto
  29. Tenta resolver baixando e usando o ComboFix. Seu RME é o mais recente?
    1 ponto
  30. JKalin

    editor geral de otserv

    Pessoal estou no chile a trabalho e sem tempo livre, o projeto já estava parado a 15 dias devido a uma viagem a Belém/PA e como não tenho prazo pra terminar esse trabalho no chile não posso dizer quando retorno ao projeto.
    1 ponto
  31. zipter98

    Tile Que Dá Pokémon

    local p = { --[actionid] = "pokemon_name", --Ex.: [9282] = "Charmander", --etc, } function onStepIn(cid, item, position, fromPosition) local poke = p[item.actionid] if poke then if not isPlayer(cid) then return true elseif getPlayerStorageValue(cid, 9658754) ~= 1 then return sendMsgToPlayer(cid, 27, "Talk to Prof. Robert for choose your city first!") and doTeleportThing(cid, fromPosition) elseif getPlayerStorageValue(cid, 49191) > -1 then return doPlayerSendCancel(cid, "You already got your pokemon.") and doTeleportThing(cid, fromPosition) end doPlayerSendTextMessage(cid, 27, "You got your first pokemon! You also received some pokeballs to help you in your way.") doPlayerSendTextMessage(cid, 27, "Don't forget to use your pokedex on every undiscovered pokemon!") addPokeToPlayer(cid, poke, 0, nil, "normal", true) doPlayerAddItem(cid, 2394, 10) doSendMagicEffect(getThingPos(cid), 29) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doSendMagicEffect(getThingPos(cid), 27) doSendMagicEffect(getThingPos(cid), 29) setPlayerStorageValue(cid, 49191, 1) end return true end
    1 ponto
  32. piritix

    Global Full com questlog

    Cara... tenho problemas no sqlite, as senhas estao criptografadas. Mudei para "plain" mas impossivel arrumar isso, e como vc nao postou senha do god fica impossivel acessar um.
    1 ponto
  33. zipter98

    POKE NASCE ALEATORIAMENTE.

    Se o código acima não funcionar, use este: local shinys = { "Venusaur", "Blastoise", "Butterfree", "Beedrill", "Pidgeot", "Rattata", "Raticate", "Raichu", "Golbat", "Paras", "Parasect", "Magmar", "Typhlosion", "Xatu", "Growlithe", "Arcanine", "Tentacruel", "Farfetch'd", "Gengar", "Krabby", "Tauros", "Kingler", "Cubone", "Horsea", "Seadra", "Weezing", "Scyther", "Pinsir", "Crobat", "Zubat", "Tentacool", "Feraligatr", "Machamp", "Meganium", "Alakazam", "Tangela", "Ampharos", "Electabuzz", "Jynx", "Charizard", "Voltorb", "Electrode"} local raros = {"Dragonair", "Dratini", "Giant Magikarp", "Gyarados", "Magmortar", "Electivire", "Salamence", "Mantine"} local specialSummon = { chance = 1, --Chance, em porcentagem, do pokémon especial nascer. pokes = { {"Milotic", "Electivire", "Magmortar", "Salamence"}, --Pokémons que podem ser summonados. {"Brave Venusaur", "Ancient Kingdra", "Hard Rhydon"}, --Pokémons que, quando spawnados, há chance de summonar um dos pokémons acima. }, } local function ShinyName(cid) if isCreature(cid) then if string.find(tostring(getCreatureName(cid)), "Shiny") then local newName = tostring(getCreatureName(cid)):match("Shiny (.*)") doCreatureSetNick(cid, newName) if isMonster(cid) then doSetCreatureDropLoot(cid, false) end end end end local function doSetRandomGender(cid) if not isCreature(cid) then return true end if isSummon(cid) then return true end local gender = 0 local name = getCreatureName(cid) if not newpokedex[name] then return true end local rate = newpokedex[name].gender if rate == 0 then gender = 3 elseif rate == 500 then gender = 4 elseif rate == -1 then gender = 0 elseif math.random(1, 500) <= rate then gender = 4 else gender = 3 end doCreatureSetSkullType(cid, gender) end local function doShiny(cid) if isCreature(cid) then if isSummon(cid) then return true end if getPlayerStorageValue(cid, 74469) >= 1 then return true end if getPlayerStorageValue(cid, 22546) >= 1 then return true end if isNpcSummon(cid) then return true end if getPlayerStorageValue(cid, 637500) >= 1 then return true end --alterado v1.9 if isInArray(shinys, getCreatureName(cid)) then --alterado v1.9 \/ chance = 2.0 --1% chance elseif isInArray(raros, getCreatureName(cid)) then --n coloquem valores menores que 0.1 !! chance = 1 --1% chance else return true end if math.random(1, 500) <= chance*10 then doSendMagicEffect(getThingPos(cid), 18) local name, pos = "Shiny ".. getCreatureName(cid), getThingPos(cid) doRemoveCreature(cid) local shi = doCreateMonster(name, pos, false) setPlayerStorageValue(shi, 74469, 1) else setPlayerStorageValue(cid, 74469, 1) end --/\ else return true end end function onSpawn(cid) registerCreatureEvent(cid, "Experience") registerCreatureEvent(cid, "GeneralConfiguration") registerCreatureEvent(cid, "DirectionSystem") registerCreatureEvent(cid, "CastSystem") if isSummon(cid) then registerCreatureEvent(cid, "SummonDeath") return true end addEvent(function() if isCreature(cid) then if isInArray(specialSummon.pokes[2], getCreatureName(cid)) then if math.random(1, 100) <= specialSummon.chance then local position = getThingPos(cid) doRemoveCreature(cid) doCreateMonster(specialSummon.pokes[1][math.random(#specialSummon.pokes[1])], position) end end end end, 15) addEvent(doShiny, 10, cid) addEvent(ShinyName, 15, cid) addEvent(adjustWildPoke, 5, cid) return true end
    1 ponto
  34. JKalin

    editor geral de otserv

    gente estou adorando o apoio de todos vocês, isso está me incentivando bastante, tanto que já resolvi o problema dos sistemas operacionais e atualizei o link de download, quem baixar a partir de agora pelo link que postei mais a cima já vai baixar a versão 0.2 compatível com Windows e Linux. A partir dessa nova versão não será mais preciso colocar o arquivo jar na pasta de seu OtServ, quando aberto pela primeira vez seja lá onde ele estiver, irá abrir uma janela de seleção, navegue até a pasta do seu ot e selecione o arquivo config.lua, basta que faça isso uma única vez. Se estiver utilizando Windows o aplicativo vai criar um arquivo chamado JKalin.txt na pasta onde ele estiver contendo o caminho para a pasta do seu otserv. Se estiver utilizando Linux o aplicativo vai criar um arquivo chamado JKalin.txt na sua pasta pessoal contendo o caminho para a pasta do seu otserv. Se desejar mudar o caminho basta excluir esse arquivo ou abri-lo normalmente e editar o caminho dentro dele. Desculpas por ter tão poucas funções nessa primeira versão, todo o tempo que pude investir nesse aplicativo até o momento foram 2 horas..... mas tudo está caminhando bem. para baixar a nova versão basta clicar no primeiro link que postei, isso também serve para as próximas versões, já que hospedo no Dropbox o link será sempre o mesmo bastando apenas vocês acompanharem o projeto.
    1 ponto
  35. Aiga

    [Show Off] Beto

    O beto06 sempre tem mapas impressionantes. Parabéns, e continue assim!
    1 ponto
  36. buster287

    [7.6] Skill Up Animado

    [update] coloquei como dexa a cor sorteada Bom essa foi a primeira vez q fiz uma coisa sozinha no dev-cpp e to postando aqui. Por enquanto só testei no neverland 4.2 [7.6], mais tarde testo nos outros e edito. O code é bem simples, peço para q não roubem esse code e coloque seus créditos. CRÉDITOS: 100% meu Em game.cpp No lugar do: if (player->isRemoved == true){ player->sendTextMessage(MSG_ADVANCE, "You are dead."); }} Substitua por: if (player->isRemoved == true){ player->sendTextMessage(MSG_ADVANCE, "You are dead."); SpectatorVec list;SpectatorVec::iterator it;getSpectators(Range(creature->pos), list);for(it = list.begin(); it != list.end(); ++it) { Player* spec = dynamic_cast<Player*>(*it); if(spec) { int deathcor = (long)g_config.getGlobalNumber("deathcor", 84); spec->sendAnimatedText(player->pos, deathcor, "Ow3ed"); }} }} No player.cpp Substitua: advMsg << "You advanced in " << getSkillName(skill) << "."; client->sendTextMessage(MSG_ADVANCE, advMsg.str().c_str()); client->sendSkills(); } Por: advMsg << "You advanced in " << getSkillName(skill) << "."; client->sendTextMessage(MSG_ADVANCE, advMsg.str().c_str()); client->sendSkills();SpectatorVec list;SpectatorVec::iterator it;g_game.getSpectators(Range(pos), list);(Range(pos), list);for(it = list.begin(); it != list.end(); ++it) { Player* spec = dynamic_cast<Player*>(*it); if(spec) { int skillcor = (long)g_config.getGlobalNumber("skillcor", 70); spec->sendAnimatedText(pos, skillcor, g_config.getGlobalString("skilltext", "Skill Up!").c_str()); }}} Substitua: MaglvMsg << "You advanced to magic level " << this->maglevel << "."; this->sendTextMessage(MSG_ADVANCE, MaglvMsg.str().c_str()); this->sendStats(); } por: MaglvMsg << "You advanced to magic level " << this->maglevel << "."; this->sendTextMessage(MSG_ADVANCE, MaglvMsg.str().c_str()); this->sendStats();SpectatorVec list;SpectatorVec::iterator it;g_game.getSpectators(Range(pos), list);(Range(pos), list);for(it = list.begin(); it != list.end(); ++it) { Player* spec = dynamic_cast<Player*>(*it); if(spec) { int mlcor = (long)g_config.getGlobalNumber("mlcor", 84); spec->sendAnimatedText(pos, mlcor, g_config.getGlobalString("mltext", "Ml Up!").c_str()); }}} subtitua: lvMsg << "You advanced from level " << lastLv << " to level " << level << "."; this->sendTextMessage(MSG_ADVANCE,lvMsg.str().c_str()); this->sendStats(); this->speed = this->getNormalSpeed(); }} por: lvMsg << "You advanced from level " << lastLv << " to level " << level << "."; this->sendTextMessage(MSG_ADVANCE, lvMsg.str().c_str()); this->sendStats();SpectatorVec list;SpectatorVec::iterator it;g_game.getSpectators(Range(pos), list);(Range(pos), list);for(it = list.begin(); it != list.end(); ++it) { Player* spec = dynamic_cast<Player*>(*it); if(spec) { int lvlcor = (long)g_config.getGlobalNumber("lvlcor", 84); spec->sendAnimatedText(pos, lvlcor, g_config.getGlobalString("lvltext", "Lvl Up!").c_str()); }}}} Não precisa de muita explicação, vou falar pra qm tiver dúvida: int lvlcor = (long)g_config.getGlobalNumber("lvlcor", 84); Ta vendo o 84 é o número da cor da menssagem, não sei bem os numeros de qual é qual. Eles vão de 1 a 999. E se quiser q cada vez seja uma cor (sorteada) substitua o 84 por: (int)random_range(1, 999) spec->sendAnimatedText(pos, lvlcor, g_config.getGlobalString("lvltext", "Lvl Up!").c_str()); Ta vendo o Lvl Up! é a menssagem q vai aparece. Uma SS pra ve como fica: É só isso, vlw gente!
    1 ponto
  37. notle2012

    cassino by notle

    data\actions\scripts\cassino.lua -- config by notle money,x2 = 10000,true --[dinheiro para jogar] pra deixa mais facil deixa true que ate duas combinação ganha premio na metade e se cair 3x ganha o premio mais metade local t = { {2674,premio=2160,pre_cont=10}, -- aqui tenta fazer combinação se sair 3x 2674 vai ganhar 2160,10 ou 2x 2674 vai ganhar 2160,5 {2675,premio=2160,pre_cont=16}, {2676,premio=2160,pre_cont=20}, {2679,premio=2160,pre_cont=26}, {2680,premio=2160,pre_cont=30}, {2682,premio=2160,pre_cont=26}, {2683,premio=2160,pre_cont=100}, {5097,premio=2160,pre_cont=32}, {8841,premio=2160,pre_cont=35}} -- config by notle function onUse(cid, item, frompos, item2, topos) pos1 = {x=xxx, y=yyy, z=zzz, stackpos=1} -- aqui coloca os lugar q vai criar os 3 item e vai tentar fazer combinação coloca posição x,y,z pos2 = {x=xxx, y=yyy, z=zzz, stackpos=1} pos3 = {x=xxx, y=yyy, z=zzz, stackpos=1} random1,random2,random3 = math.random (1,#t),math.random (1,#t),math.random (1,#t) -- não mexe ty = {pos1,pos2,pos3} -- não mexe function remove(r1,r2,r3) return doRemoveItem(getThingfromPos(pos1).uid,1) and doRemoveItem(getThingfromPos(pos2).uid,1) and doRemoveItem(getThingfromPos(pos3).uid,1) end function turnn(t1,t2,t3) doTransformItem(getTileThingByPos(ty[math.random (1,#ty)]).uid,t[math.random (1,#t)][1],1) end function turn1(t1,t2,t3) doTransformItem(getTileThingByPos(pos1).uid,t[random1][1],1) doTransformItem(getTileThingByPos(pos2).uid,t[random2][1],1) doTransformItem(getTileThingByPos(pos3).uid,t[random3][1],1) end if getPlayerStorageValue(cid, 788525) >= os.time() then return true end if doPlayerRemoveMoney(cid,money) then doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) doCreateItem(t[math.random (1,#t)][1],1,pos1) doCreateItem(t[math.random (1,#t)][1],1,pos2) doCreateItem(t[math.random (1,#t)][1],1,pos3) for i = 0,1800,50 do addEvent(turnn,i,t1,t2,t3) if i >= 1800 then addEvent(turn1,2000,t1,t2,t3) end end addEvent(doSendMagicEffect,2100,pos1, math.random(28,30)) addEvent(doSendMagicEffect,2200,pos2, math.random(28,30)) addEvent(doSendMagicEffect,2400,pos3, math.random(28,30)) setPlayerStorageValue(cid, 788525, os.time() +2) addEvent(remove,3200,r1,r2,r3) else doPlayerSendCancel(cid,"Desculpe,voce não tem grana suficiente para jogar!") return 1 end if t[random1][1] == t[random2][1] and t[random1][1] == t[random3][1] and t[random3][1] == t[random2][1] then addEvent(doPlayerAddItem,2900,cid,t[random1].premio,t[random1].pre_cont) addEvent(doPlayerSendTextMessage,2500,cid, MESSAGE_INFO_DESCR, "Caiu 3x ["..getItemNameById(t[random1][1]).."] ganhou " ..t[random1].pre_cont.." " ..getItemNameById(t[random1].premio).."") elseif x2 == false then addEvent(doPlayerSendTextMessage,2500,cid, MESSAGE_STATUS_CONSOLE_BLUE, "ganhou nada sem sorte tenta denovo") end if x2 == true then if t[random1][1] == t[random2][1] or t[random1][1] == t[random3][1] then addEvent(doPlayerAddItem,2900,cid,t[random1].premio,t[random1].pre_cont/2) addEvent(doPlayerSendTextMessage,2500,cid, MESSAGE_INFO_DESCR, "Caiu 2x ["..getItemNameById(t[random1][1]).."] ganhou " ..(t[random1].pre_cont/2).." " ..getItemNameById(t[random1].premio).."") elseif t[random2][1] == t[random3][1] then addEvent(doPlayerAddItem,2900,cid,t[random2].premio,t[random2].pre_cont/2) addEvent(doPlayerSendTextMessage,2500,cid, MESSAGE_INFO_DESCR, "Caiu 2x ["..getItemNameById(t[random2][1]).."] ganhou " ..(t[random2].pre_cont/2).." " ..getItemNameById(t[random2].premio).."") else addEvent(doPlayerSendTextMessage,2500,cid, MESSAGE_STATUS_CONSOLE_BLUE, "Ganhou Nada Sem Sorte Tenta Denovo") return 1 end end end actions.xml <action actionid="xxxx" event="script" value="cassino.lua"/> no actionid="xxxx" coloca numero que coloca na alavanca pelo map editor algo +ou- assim no meu caso seria 8885 quando ganha algo fica assim edita as posição pos1 = {x=xxx, y=yyy, z=zzz, stackpos=1} exemplo pos1 = {x=160, y=54, z=7, stackpos=1} pra deixar difícil muda money,x2 = 10000,true true para false que só 3 combinação ganha premio espero que gostem comente
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...