Tudo que Garou postou
-
getSpectatorsFromArea(fromPosition, toPosition, multifloor)
Obrigado pela observação. Estou um pouco mais bêbado que geralmente estou hoje
-
[Resolvido] [Pedido] Sala Restrita'
local fromSqm = {x = 886, y = 965, z = 7} -- Coordenadas do canto superior esquerdo da sala local toSqm = {x = 888, y = 968, z = 7} -- Coordenadas do canto inferior direito da sala local destination = {x = 887, y = 968, z = 7} -- Coordenadas para onde o jogador será teleportado local doorID = 5105 -- ID da porta function onUse(cid, item, fromPosition, itemEx, toPosition) local width = (math.max(fromSqm.x, toSqm.x) - math.min(fromSqm.x, toSqm.x)) / 2 + 1 local height = (math.max(fromSqm.y, toSqm.y) - math.min(fromSqm.y, toSqm.y)) / 2 + 1 local center = {x = math.min(fromSqm.x, toSqm.x) + width, y = math.min(fromSqm.y, toSqm.y) + height, z = fromSqm.z} if itemEx.itemid == doorID then if #getSpectators(center, width, height, false) >= 2 then doPlayerSendCancel(cid, "Espere o outro usuário sair da sala") else doTeleportThing(cid, destination) end else doPlayerSendCancel(cid, "Este item não deve ser usado nessa porta") end return true end
-
getSpectatorsFromArea(fromPosition, toPosition, multifloor)
Hey, caras. Estava vendo aqui a função getSpectators(centerPos, width, height) e percebi que seu uso é até um pouco complicado. Então desenvolvi uma função Lua que pega as criaturas de uma certa área, onde você só precisa fornecer as coordenadas do canto superior esquerdo e do canto inferior direito. function getSpectatorsFromArea(fromPosition, toPosition) local width = (math.max(fromPosition.x, toPosition.x) - math.min(fromPosition.x, toPosition.x)) / 2 + 1 local height = (math.max(fromPosition.y, toPosition.y) - math.min(fromPosition.y, toPosition.y)) / 2 + 1 local center = {x = math.min(fromPosition.x, toPosition.x) + width, y = math.min(fromPosition.y, toPosition.y) + height, z = fromPosition.z} return getSpectators(center, width, height, false) end Espero que seja útil na composição de seus scripts, Abração. \o
-
[Resolvido] [Pedido] Sala Restrita'
local fromSqm = {x = 0, y = 0, z = 0} -- Coordenadas do canto superior esquerdo da sala local toSqm = {x = 0, y = 0, z = 0} -- Coordenadas do canto inferior direito da sala local destination = {x = 0, y = 0, z = 0} -- Coordenadas para onde o jogador será teleportado local doorID = 0 -- ID da porta function onUse(cid, item, fromPosition, itemEx, toPosition) local width = (math.max(fromSqm.x, toSqm.x) - math.min(fromSqm.x, toSqm.x)) / 2 + 1 local height = (math.max(fromSqm.y, toSqm.y) - math.min(fromSqm.y, toSqm.y)) / 2 + 1 local center = {x = math.min(fromSqm.x, toSqm.x) + width, y = math.min(fromSqm.y, toSqm.y) + height, z = fromSqm.z} if itemEx.itemid == doorID then if #getSpectators(center, width, height, false) >= 1 then doPlayerSendCancel(cid, "Desculpe, já há alguém na sala") end else doPlayerSendCancel(cid, "Este item não deve ser usado nessa porta") end return true end <action itemid="itemid" event="script" value="nome do script.lua"/> Coloca o id do item que será usado na porta, e o nome do arquivo .lua que será criado na pasta data/actions/scripts. As variáveis que você deve configurar já estão todas comentadas.
-
[Show] Jared Leto
print("Seja welcomido")
-
[Resolvido] [Pedido] Sala Restrita'
Me passa o script que o cara usa o item na porta e é teleportado para dentro que eu faço para você
-
[Resolvido] [Dúvida] Distância do NPC'
Você cometeu um erro ali, no caso, o npchandler.lua era para ficar assim: -- Returns true if cid is within the talkRadius of this npc. function NpcHandler:isInRange(cid) local distance = getDistanceTo(cid) or -1 if(distance == -1) then return false end return (distance <= self.talkRadius) end function NpcHandler:setRadius(value) self.talkRadius = value end E não esqueça de dar /reload npcs ou abrir e fechar o executável do seu servidor
-
[Resolvido] [Dúvida] Distância do NPC'
Fiz uma tentativa aqui e não testei, logo não sei se vai funcionar. Abra o arquivo npchandler.lua em data/npc/lib/npcsystem e procure por: function NpcHandler:isInRange(cid) local distance = getNpcDistanceTo(cid) or -1 return distance ~= -1 and distance <= self.talkRadius end Embaixo, adicione: function NpcHandler:setRadius(value) self.talkRadius = value end No NPC, procure por isso: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) Logo abaixo adicione: npcHandler:setRadius(1) Bom teste
-
[Resolvido] [Dúvida] Distância do NPC'
Olá, Adriano SwaTT Abra o arquivo npchandler.lua em data/npc/lib/npcsystem e procure por essa linha: talkRadius = 3, Mude o valor para qual você deseja.
-
[Apresentação] SkyDangerous [+Novo]
Muito bom, garotão. Aprendeu tudo com o papai Espero que você encontre um bom projeto para trabalhar.
- Forge System
-
[Action] Controlled Attack
Ótimo trabalho, Godfather. Tomei a liberdade de me basear em seu código e criei uma versão em spell, que consome certa mana para ser invocada e certa mana a cada efeito lançado no mapa. A magia para automaticamente quando encontra um monstro, quando se distancia muito do jogador, quando entra em Protection Zone ou quando a mana acaba. Ela também randomiza o elemento lançado. [paste]NASVsYW8[/paste] <instant name="avatar" words="avatar" lvl="200" mana="100" prem="1" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="avatar.lua"/> Reputação+
-
Qual o Celu vc tem?(quero ver se tem mto BOY aqui)
Realmente os jogos da Gameloft para Android são muito fodas. Meu irmão tem um Xperia Play, fiquei com o Milestone 3 por causa do teclado físico
- Talkaction
-
ui o brenno eh mentiroso
Ele foi chamado pelo negro dragão para moderar seção de bots do "Vale-Tudo Brasil" Aliás, seção de bots naquele fórum lá é cópia daqui, né?
-
Qual o Celu vc tem?(quero ver se tem mto BOY aqui)
A única coisa ruim do Android é não possuir a variedade de jogos e aplicativos dos aparelhos com iOS
-
Qual o Celu vc tem?(quero ver se tem mto BOY aqui)
O meu era o Milestone 2, agora possuo o Milestone 3
-
Attack Controlado!
Olá, Calvin. Este conteúdo já existe e foi disponibilizado em [Action] Controlled Attack. Abraços
-
[NPC] First Items
Legal, SkyDangerous. É um NPC simples, mas muito útil. Algumas observações: for i = 1, table.maxn(items) do doPlayerAddItem(cid, item[i], 1) doPlayerAddItem(cid, 2554, 1) doPlayerAddItem(cid, 2120, 1) doPlayerAddItem(cid, 2160, 2) end doPlayerAddItem(cid, item[i], 1) Você declarou a tabela com o nome items e nessa linha chama a tabela item que não existe doPlayerAddItem(cid, 2554, 1) doPlayerAddItem(cid, 2120, 1) doPlayerAddItem(cid, 2160, 2) E incluiu essas três linhas dentro do for, o que faz com que a função seja executada n vezes igual o tamanho da tabela. Ou seja, o jogador iria receber 8 crystal coins e não 2 apenas. E a função table.maxn pode ser chamada por # for i = 1, #tables do (...) end
-
Oi :)
Eaê LOTRO Boy! Seja welcomido!
-
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
-
[Resolvido] [DUVIDA] Como faço pro meu ot aluga casas?
Na verdade o comando !buyhouse já engloba o sistema de aluguel (pois ele é configurado nas sources), não é necessária a criação de uma outra talkaction para isso.
-
[Resolvido] [DUVIDA] Como faço pro meu ot aluga casas?
Olá, Alberess Basta a configuração de alguns parâmetros no arquivo config.lua: houseRentAsPrice = true -- O preço das casas deve ser o aluguel? housePriceAsRent = false -- O preço do aluguel deve ser o preço da casa? housePriceEachSquare = 1000 -- Preço por cada sqm da casa houseRentPeriod = "monthly" -- Período de cobrança do aluguel. No exemplo acima, configurei para o jogador pagar o preço de aluguel para comprar a casa e o período de aluguel como "monthly", ou seja, um período mensal. Os valores para o parâmetro houseRentPeriod são: houseRentPeriod Values: yearly, monthly, weekly, daily, never -- Anual, Mensal, Semanal, Diário, Nunca Lembrando que o aluguel deve ser configurado diretamente no mapa. Abraços
-
Anél de Experiência' [Exp Ring]
Bem legal, cara. Há duas linhas no script que me intrigam bastante: doPlayerSetExperienceRate(cid, getConfigValue("rateExperience")*2) doPlayerSetExperienceRate(cid, 1) Essa é a função doPlayerSetExperience(cid, value) encontrada no arquivo 050-functions.lua: function doPlayerSetExperienceRate(cid, value) return doPlayerSetRate(cid, SKILL__LEVEL, value) end Logo a segunda linha irá atribuir uma rate de experiência igual a 1x quando o anel for desequipado?
-
[Talkaction] Comando !guild
Gostei do código, obrigado pela contribuição. +1 ponto de reputação.