Postado Maio 24, 2017 8 anos 10 minutos atrás, xWhiteWolf disse: tenta assim amigo: Ocultar conteúdo local config = { velocidade = 350, -- intervalo entre os giros (quanto menor, mais rapido) hits = 24, -- quantos hits vai dar msg = "Frozen Orb", -- msg ao soltar a spell key = 13871, -- storage que sera utilizado pro cooldown cooldown = 3, -- tempo em segundos de cooldown entre um uso da spell e outro. effect1 = 36, -- efeito de distancia que vai ficar rodando effect2 = 56, -- efeito no sqm do item effect3 = 37, -- efeito ao castar a spell effect4 = 43 -- efeito ao acertar a roda no player } --[[Note que a velocidade multiplicada pelo numero de hits deve dar algo proximo de 8550 pra que a magia nao fique ruim ou um efeito acabe antes do outro. Nos valores que eu utilizei eles dao 8400, oque ja eh considerado perto pois temos 200 milisegundos iniciais, 8550 eh o tempo que o item sera removido e coincide com o tempo de duracao do efeito 56 (config.effect2)]] local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 255) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1) function onTargetCreature(cid, target) doSendMagicEffect(getCreaturePosition(target), config.effect4) end setCombatCallback(combat, 4, "onTargetCreature") local arr = { {1, 1, 1}, {1, 3, 1}, -- area que vai acertar a spell enquanto estiver rodando {1, 1, 1}, } local area = createCombatArea(arr) setCombatArea(combat, area) function initEffect(position) for i = 0, 3 do local pos = {x = position.x, y = position.y, z = position.z} local dir = getPosByDir(pos, i) doSendDistanceShoot(position, dir, config.effect1) end addEvent(doSendMagicEffect, 300, position, config.effect2) return true end function middleEffect(cid, param, position, lim, count) n = count or 0 if isCreature(cid) and n < lim then local position = getCreaturePosition(cid) for i = 0, 3 do local pos = {x = position.x, y = position.y, z = position.z} local pos2 = {x = position.x, y = position.y, z = position.z} local dir = getPosByDir(pos, i) local dir2 = getPosByDir(pos2, i + 1 <= 3 and i + 1 or 0) doSendDistanceShoot(dir, dir2, config.effect1) end doCombat(cid, combat, param) addEvent(middleEffect, config.velocidade, cid, param, position, lim, n + 1) end return true end function endEffect(position) local position = getCreaturePosition(cid) for i = 0, 3 do local pos = {x = position.x, y = position.y, z = position.z} local dir = getPosByDir(pos, i) doSendDistanceShoot(dir, position, config.effect1) end return true end function onCastSpell(cid, var) if getPlayerStorageValue(cid, config.key) - os.time() <= 0 then setPlayerStorageValue(cid, config.key, os.time() + config.cooldown) local position = getCreaturePosition(cid) doCreatureSay(cid, config.msg, 20) addEvent(endEffect, 8.55 * 1000, position) doSendMagicEffect(position, config.effect3) initEffect(position) addEvent(middleEffect, 200, cid, var, position, config.hits) else doPlayerSendCancel(cid, "You're exhausted.") return false end return true end Sensacional mano!!! Fiz umas modificações no meu: local config = { velocidade = 300, -- intervalo entre os giros (quanto menor, mais rapido) hits = 10, -- quantos hits vai dar msg = "Cyclone", -- msg ao soltar a spell key = 13871, -- storage que sera utilizado pro cooldown cooldown = 3, -- tempo em segundos de cooldown entre um uso da spell e outro. effect1 = 24, -- efeito de distancia que vai ficar rodando effect2 = 9, -- efeito no sqm do item effect3 = 34, -- efeito ao castar a spell effect4 = 13 -- efeito ao acertar a roda no player } --[[Note que a velocidade multiplicada pelo numero de hits deve dar algo proximo de 8550 pra que a magia nao fique ruim ou um efeito acabe antes do outro. Nos valores que eu utilizei eles dao 8400, oque ja eh considerado perto pois temos 200 milisegundos iniciais, 8550 eh o tempo que o item sera removido e coincide com o tempo de duracao do efeito 56 (config.effect2)]] local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 255) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 10, 5, 10, 5) function onTargetCreature(cid, target) doSendMagicEffect(getCreaturePosition(target), config.effect4) end setCombatCallback(combat, 4, "onTargetCreature") local arr = { {1, 1, 1}, {1, 3, 1}, -- area que vai acertar a spell enquanto estiver rodando {1, 1, 1}, } local area = createCombatArea(arr) setCombatArea(combat, area) function initEffect(position) for i = 0, 3 do local pos = {x = position.x, y = position.y, z = position.z} local dir = getPosByDir(pos, i) doSendDistanceShoot(position, dir, config.effect1) end addEvent(doSendMagicEffect, 300, position, config.effect2) return true end function middleEffect(cid, param, position, lim, count) n = count or 0 if isCreature(cid) and n < lim then local position = getCreaturePosition(cid) for i = 0, 3 do local pos = {x = position.x, y = position.y, z = position.z} local pos2 = {x = position.x, y = position.y, z = position.z} local dir = getPosByDir(pos, i) local dir2 = getPosByDir(pos2, i + 1 <= 3 and i + 1 or 0) doSendDistanceShoot(dir, dir2, config.effect1) end doCombat(cid, combat, param) addEvent(middleEffect, config.velocidade, cid, param, position, lim, n + 1) end return true end function endEffect(position) local position = getCreaturePosition(cid) for i = 0, 3 do local pos = {x = position.x, y = position.y, z = position.z} local dir = getPosByDir(pos, i) doSendDistanceShoot(dir, position, config.effect1) end return true end function onCastSpell(cid, var) if getPlayerStorageValue(cid, config.key) - os.time() <= 0 then setPlayerStorageValue(cid, config.key, os.time() + config.cooldown) local position = getCreaturePosition(cid) doCreatureSay(cid, config.msg, 20) addEvent(endEffect, 8.55 * 1000, position) doSendMagicEffect(position, config.effect3) initEffect(position) addEvent(middleEffect, 200, cid, var, position, config.hits) else doPlayerSendCancel(cid, "You're exhausted.") return false end return true end --Queria sabe se é possivel aumenta +1sqm cada lado, tentei aqui e não consegui, fica a mesma coisa...
Postado Maio 24, 2017 8 anos Autor o primeiro passo é aumentar a area que a spell acerta: local arr = { {1, 1, 1}, {1, 3, 1}, -- area que vai acertar a spell enquanto estiver rodando {1, 1, 1}, } O dano da spell só depende dessa area, todo o resto é só efeito. Pra modificar os efeitos vc precisa modificar 3 funções: a init, a middle e a end effect. function initEffect(position) for i = 0, 3 do local pos = {x = position.x, y = position.y, z = position.z} local dir = getPosByDir(pos, i) doSendDistanceShoot(position, dir, config.effect1) end addEvent(doSendMagicEffect, 300, position, config.effect2) return true end function middleEffect(cid, param, position, lim, count) n = count or 0 if isCreature(cid) and n < lim then local position = getCreaturePosition(cid) for i = 0, 3 do local pos = {x = position.x, y = position.y, z = position.z} local pos2 = {x = position.x, y = position.y, z = position.z} local dir = getPosByDir(pos, i) local dir2 = getPosByDir(pos2, i + 1 <= 3 and i + 1 or 0) doSendDistanceShoot(dir, dir2, config.effect1) end doCombat(cid, combat, param) addEvent(middleEffect, config.velocidade, cid, param, position, lim, n + 1) end return true end function endEffect(position) local position = getCreaturePosition(cid) for i = 0, 3 do local pos = {x = position.x, y = position.y, z = position.z} local dir = getPosByDir(pos, i) doSendDistanceShoot(dir, position, config.effect1) end return true end tenta entender como elas funcionam, vai debugando o código na sua cabeça ou num papel pra entender o que cada função faz e como ela faz isso. Mas basicamente a primeira função solta 1 efeito até cada sqm norte, sul, leste e oeste. A segunda fica fazendo o efeito de ir de uma quina a outra e a terceira faz o contrário da primeira pra voltar o efeito e dar a sensação de que a magia saiu, ficou rodando e voltou... Com esse entendimento e percebendo como cada for atua pra soltar esses efeitos você consegue editar pra aumentar a area; Pra primeira função e a ultima função, tudo que vc precisa fazer é adicionar +1 sqm nessa função aqui: local dir = getPosByDir(pos, i) essa função tem 3 parametros, sendo o terceiro opcional: 1- a posição 2- a direção 3- a distancia. pos é a posição e i é a direção, pra aumentar em +1 sqm temos que modificar isso para usar o terceiro parametro: local dir = getPosByDir(pos, i, 2) O processo é semelhante para a função middle, com a diferença de que ela utiliza duas posições ao invés de somente uma. local dir = getPosByDir(pos, i, 2) local dir2 = getPosByDir(pos2, i + 1 <= 3 and i + 1 or 0, 2) Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá! "Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda (obg ao @Beeny por fazer essa linda sign <3)
Postado Dezembro 4, 2019 5 anos Removido Editado Dezembro 4, 2019 5 anos por MikaelX (veja o histórico de edições)
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.