-
Total de itens
1347 -
Registro em
-
Última visita
-
Dias Ganhos
36
Tudo que Oneshot postou
-
O comando for tem três parâmetros: ínicio, fim e incremento. Sendo assim, dá para deixar o código da função bem mais limpo sem declaração de um monte de variáveis. function getFactorial(number) local value = number for new = (number - 1), 1, -1 do value = value * new end return value end Um abraço do seu amiguinho, UmTiro
-
Um tutorial na forma de Frequently Asked Questions (FAQ). Gostei, Céu Perigoso
- 14 respostas
-
- skydangerous
- lua
- (e 5 mais)
-
Sim, tem como sim.
-
Não posto meus scripts aqui
-
Puta que pariu hein, você se faz de burro, né? local storage = 6666 function getTournamentPlayers() local ret = {} for _, cid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(cid, storage) == 1 then table.insert(ret, cid) end end return ret end Ai na buceta do seu NPC, tu coloca lá na porra do código hi join -- setPlayerStorageValue(cid, 6666, 1)
-
Doremoveitembyidandpos(Itemid, Pos[, Count[, Limit]])
tópico respondeu ao bepokemon de Oneshot em Mods, funções e outros
Opa legal. function blabla(itemid, count, position) return doRemoveItem(getTileItemById(position, itemid).uid, (count or 1)) and true or false end flw -
Manual de Referência de Lua 5.1 - índice Deleite-se
-
O erro não está no script, mas no banco de dados do servidor. Abra seu banco de dados com um gerenciador de Sqlite, e execute a seguinte query: ALTER TABLE `players` ADD `resets` INTEGER NOT NULL DEFAULT 0 Flw
-
function getCombatFormula(cid, level) local min = level * 10 local max = level * 20 return -min, -max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "getCombatFormula")
-
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
-
FAALA AÊ, ÉKS Recebi recentemente um pedido de um membro para criar uma action que, normalmente, não vem com os servidores - o mecanismo de criar rum do Tibia. Criei alguns scripts simples e editei alguns, tornando possível o funcionamento do sistema. data/actions/scripts Na pasta tools, crie um arquivo com nome sickle.lua, adicionando o conteúdo abaixo: function onUse(cid, item, fromPosition, itemEx, toPosition) if(itemEx.itemid == 5471) then doTransformItem(itemEx.uid, 5463) doCreateItem(5467, 1, toPosition) doDecayItem(itemEx.uid) return true end return destroyItem(cid, itemEx, toPosition) end Ainda na pasta tools, crie um arquivo com nome firebug.lua, adicionando o conteúdo abaixo: function onUse(cid, item, fromPosition, itemEx, toPosition) if(itemEx.itemid == 5466) then doSendMagicEffect(toPosition, CONST_ME_HITBYFIRE) doTransformItem(itemEx.uid, 5465) doRemoveItem(item.uid, 1) doDecayItem(itemEx.uid) return true end end Na pasta other, crie um arquivo com nome bunch of sugar cane.lua e adicione o conteúdo abaixo: local ITEM_IDS = { [5469] = 5513, [5470] = 5514 } function onUse(cid, item, fromPosition, itemEx, toPosition) if(itemEx.itemid == 5469 or itemEx.itemid == 5470) then doSendMagicEffect(toPosition, CONST_ME_BLOCKHIT) doTransformItem(itemEx.uid, ITEM_IDS[itemEx.itemid]) doRemoveItem(item.uid, 1) doDecayItem(itemEx.uid) return true elseif itemEx.itemid == 5513 or itemEx.itemid == 5514 then return doPlayerSendCancel(cid, "This machine is processing a bunch already.") end end E na pasta liquid, abra o arquivo containers.lua e substitua todo conteúdo por este: local DISTILLERY_ON = {5513, 5514} local DISTILLERY_OFF = {5469, 5470} local ITEM_RUM_FLASK = 5553 local ITEM_POOL = 2016 local TYPE_EMPTY = 0 local TYPE_WATER = 1 local TYPE_BLOOD = 2 local TYPE_BEER = 3 local TYPE_SLIME = 4 local TYPE_MANA_FLUID = 7 local TYPE_LIFE_FLUID = 10 local TYPE_OIL = 11 local TYPE_WINE = 15 local TYPE_MUD = 19 local TYPE_LAVA = 26 local TYPE_RUM = 27 local TYPE_SWAMP = 28 local oilLamps = {[2046] = 2044} local casks = {[1771] = TYPE_WATER, [1772] = TYPE_BEER, [1773] = TYPE_WINE} local alcoholDrinks = {TYPE_BEER, TYPE_WINE, TYPE_RUM} local poisonDrinks = {TYPE_SLIME, TYPE_SWAMP} local drunk = createConditionObject(CONDITION_DRUNK) setConditionParam(drunk, CONDITION_PARAM_TICKS, 60000) local poison = createConditionObject(CONDITION_POISON) setConditionParam(poison, CONDITION_PARAM_DELAYED, true) -- Condition will delay the first damage from when it's added setConditionParam(poison, CONDITION_PARAM_MINVALUE, -50) -- Minimum damage the condition can do at total setConditionParam(poison, CONDITION_PARAM_MAXVALUE, -120) -- Maximum damage setConditionParam(poison, CONDITION_PARAM_STARTVALUE, -5) -- The damage the condition will do on the first hit setConditionParam(poison, CONDITION_PARAM_TICKINTERVAL, 4000) -- Delay between damages setConditionParam(poison, CONDITION_PARAM_FORCEUPDATE, true) -- Re-update condition when adding it(ie. min/max value) local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100)) function onUse(cid, item, fromPosition, itemEx, toPosition) if(itemEx.uid == cid) then if(item.type == TYPE_EMPTY) then doPlayerSendCancel(cid, "It is empty.") return true end if(item.type == TYPE_MANA_FLUID) then if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) return true end if(not doPlayerAddMana(cid, math.random(80, 160))) then return false end doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1) doSendMagicEffect(toPosition, CONST_ME_MAGIC_BLUE) doAddCondition(cid, exhaust) elseif(item.type == TYPE_LIFE_FLUID) then if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) return true end if(not doCreatureAddHealth(cid, math.random(40, 75))) then return false end doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1) doSendMagicEffect(toPosition, CONST_ME_MAGIC_BLUE) doAddCondition(cid, exhaust) elseif(isInArray(alcoholDrinks, item.type)) then if(not doTargetCombatCondition(0, cid, drunk, CONST_ME_NONE)) then return false end doCreatureSay(cid, "Aaah...", TALKTYPE_ORANGE_1) elseif(isInArray(poisonDrinks, item.type)) then if(not doTargetCombatCondition(0, cid, poison, CONST_ME_NONE)) then return false end doCreatureSay(cid, "Urgh!", TALKTYPE_ORANGE_1) else doCreatureSay(cid, "Gulp.", TALKTYPE_ORANGE_1) end doChangeTypeItem(item.uid, TYPE_EMPTY) return true end if(not isCreature(itemEx.uid)) then if(item.type == TYPE_EMPTY) then if(isInArray(DISTILLERY_ON, itemEx.itemid)) then doChangeTypeItem(item.uid, TYPE_RUM) return true end if(isInArray(DISTILLERY_OFF, itemEx.itemid)) then doPlayerSendCancel(cid, "You have to process the bunch into the distillery to get rum.") return true end if(isItemFluidContainer(itemEx.itemid) and itemEx.type ~= TYPE_EMPTY) then doChangeTypeItem(item.uid, itemEx.type) doChangeTypeItem(itemEx.uid, TYPE_EMPTY) return true end if(casks[itemEx.itemid] ~= nil) then doChangeTypeItem(item.uid, casks[itemEx.itemid]) return true end local fluidEx = getFluidSourceType(itemEx.itemid) if(fluidEx ~= false) then doChangeTypeItem(item.uid, fluidEx) return true end doPlayerSendCancel(cid, "It is empty.") return true end if(item.type == TYPE_OIL and oilLamps[itemEx.itemid] ~= nil) then doTransformItem(itemEx.uid, oilLamps[itemEx.itemid]) doChangeTypeItem(item.uid, TYPE_NONE) return true end if(hasProperty(itemEx.uid, CONST_PROP_BLOCKSOLID)) then return false end end doDecayItem(doCreateItem(ITEM_POOL, item.type, toPosition)) doChangeTypeItem(item.uid, TYPE_EMPTY) return true end data/actions Cole as seguintes tags no arquivo actions.xml <action itemid="2405" event="script" value="tools/sickle.lua"> <action itemid="5468" event="script" value="tools/fire bug.lua"> <action itemid="5467" event="script" value="other/bunch of sugar cane.lua"> Se você quiser mudar o tempo de duração da máquina funcionando, procure no seu arquivo items.xml pelos IDs 5513 e 5514 e altere o valor do atributo duration. O padrão se não me engano é 15 segundos.
-
É o viadinho do Gean Riot mesmo - famoso por vender coisas open source ou que não são da autoria dele.
-
Skydangerous De Volta? Impossível
tópico respondeu ao HisashiitYamaguti de Oneshot em Lixeira Pública
Opa. Eu acho que você devia, na verdade, parar de sentar no seu rabo e falar do rabo dos outros, caro colega de nick embaralhado. Creio que neste momento você está se achando o "puta moleque troll vish sou foda" só por ter criado um tópico para falar de um membro que nem sequer se importa com essa comunidade. Penso que se seu macho não te faz feliz na cama, não come o seu c* direito, melhor não entrar nos fóruns para infernizar as pessoas. Chamar a atenção usando outras pessoas é feio, crie um tópico com uma foto sua ou pedindo opinião do que os outros acham de você. Obs: E que tal se portar como colaborador de verdade e largar um pouco o Barzinho do Éks? Ninguém vai achar ruim não -
action [Action] Advinhe A Sequencia
tópico respondeu ao SkyDangerous de Oneshot em Actions e Talkactions
Hm, código muito caótico, SkyDangerous. Favor indentar isso aí para facilitar a leitura do script. Você fez muita pogagem aí, se pelo menos fossem gambiarras úteis, mas não são.- 9 respostas
-
- skydangerous
- advinhe
- (e 4 mais)
-
[Spells] Frozen Spells[+Critical]
tópico respondeu ao SkyDangerous de Oneshot em Globalevents e Spells
Hm, nada mal para a primeira magia rs, bem criativa com esse sistema de Critical. O chato mesmo é que se fôssemos implementar algo desse tipo em magias "grandes" o código ia ficar caótico. -
Entendo, esse é parte do sistema de slot feito pelo Mock, você se certificou de colocar essa tag no creaturescripts.xml? <event type="login" name="slotLogin" event="script" value="slot.lua"/>
-
function moneyToCurrency(value) local ret = {c = 0, p = 0, g = 0} ret.c = math.floor(value/10000) ret.p = math.floor((value - ret.c * 10000)/100) ret.g = (value - 100 * (ret.c * 100 + ret.p)) return ret end Exemplo de uso: function onUse(cid, item, fromPosition, itemEx, toPosition) local tabela = moneyToCurrency(getPlayerMoney(cid)) local s = tabela.c .. " crystal ".. tabela.p .." platinum and ".. tabela.g .." gold." return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, s) end A função pega o valor no parâmetro e o converte para três números inteiros que são inseridos em uma tabela (retornada pela função) com indexes c, p e g. Quando você quiser formatar uma quantidade de dinheiro, basta fazer isso: moneyToCurrency(10586) Se eu quiser o valor de crystal coins correspondentes e aproximado, irei acessar o index c moneyToCurrency(10586).c Isso por exemplo, iria me mostrar o habitual 1 que equivale a 10000 de dinheiro. Acessar os outros dois indexes iriam me retornar 5 e 86, respectivamente
-
Pô, gostei da sua atitude. Pode ter certeza que se eu soubesse Lua direito, iria te ensinar. Espero que arranje um bom professor, abraços.
- 4 respostas
-
- espero algem paciente.
- otserv
- (e 2 mais)
-
É, o mapa está bem interessante. Mas a parte "programacional" está horrível, abri a pasta actions do servidor quando o baixei e tomei um susto, eram muitos arquivos e acabei notando que 90% deles não eram usados no actions.xml. Outra coisa, você poderia (muito bem) juntar todos os arquivos da tal "mega quest" em um só, mas fez vários arquivos para cada baú da quest, o que deixou tudo bem desorganizado. Sugiro para a próxima versão: Monstros e NPCs em inglês, acho horrível misturar o inglês do Tibia com o português dos NPCs e dos monstros. E a "limpeza" dos arquivos de cada pasta do servidor, pois tem muito lixo lá. Abraço
-
Veja se o arquivo intitulado labirinto5.lua está na pasta data\globalevents\scripts
-
(Pergunta) Tou Com Problema Com >Rme,monsttros Proprios<
tópico respondeu ao jeffdudu de Oneshot em Lixeira Pública
Tem três possibilidades: Ou você esqueceu de ajustar o tempo de respawn dos monstros no RME ou os arquivos XML dos monstros não estão na pasta data/monsters ou você esqueceu de registrar a chave no monsters.xml -
Nenhuma o_ô Desprezando os debugs que eventualmente ocorreriam, os jogadores do 8.60 não iriam ter montarias para usar rs.
-
Depende muito, se essa vocação não tem promotions, você não deverá usar setPlayerPromotionLevel e sim doPlayerSetVocation. Veja que você colocou o id como 13 e o fromvoc como 13 também, logo, no seu Reset System, coloque doPlayerSetVocation(cid, 13), talvez funcione.
-
[Weapon] Criando Nova "weapontype" Me Ajude!
tópico respondeu ao 232120 de Oneshot em Lixeira Pública
Isso não é feito com Lua, é nas sources, amontoado de código C++ que resulta no .exe do seu servidor.
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.