Postado Dezembro 10, 2014 10 anos Este é um post popular. Fala galera, vou mostrar agora como usar o novo sistema de cast imbutido na New Lib, é bem simples: Pegarei como exemplo a spell Taunt, aqui está o código dela: local config = { walks = 4, -- qnts passos ele vai dar delay = 750, -- de qnts em qnts milisegundos ele dá cada passo speed = 100 -- velocidade que ele vai ficar enquanto estiver sob efeito do taunt } function onCastSpell(cid, var) Taunt(cid, variantToNumber(var), config.delay, config.walks) doChangeSpeed(variantToNumber(var), (config.speed - getCreatureBaseSpeed(variantToNumber(var)))) addEvent(function() if isCreature(variantToNumber(var)) then doChangeSpeed(variantToNumber(var), (-config.speed + getCreatureBaseSpeed(variantToNumber(var)))) end end, config.delay * (config.walks + 1)) return true end 1- Pra adicionar o sistema de channelling nessa spell eu preciso inicialmente passar todas as funções dela pra um addEvent, ficando assim: local config = { walks = 4, -- qnts passos irá dar delay = 750, -- tempo entre 1 passo e outro speed = 100 --- velocidade do passo } function onCastSpell(cid, var) addEvent(function() if isCreature(cid) then Taunt(cid, variantToNumber(var), config.delay, config.walks) doChangeSpeed(variantToNumber(var), (config.speed - getCreatureBaseSpeed(variantToNumber(var)))) addEvent(function() if isCreature(variantToNumber(var)) then doChangeSpeed(variantToNumber(var), (-config.speed + getCreatureBaseSpeed(variantToNumber(var)))) end end, config.delay * (config.walks + 1)) end end, time) return true end 2- Agora pro segundo evento acontecer eu preciso de um time, que se encontra ali antes do return true e que em nenhum momento eu disse oque era. Agora que entra a função onCastChannel(uid, target, delay, effect, key) mas note que essa função requer um delay próprio, um efeito e uma id de storage então vou precisar alterar o config, ficando + ou - assim: local config = { walks = 4, -- qnts passos irá dar delay = 750, -- tempo entre 1 passo e outro speed = 100, --- velocidade do passo delaycast = 200, -- delay pra carregar (200 milisegundos por cada 10% da spell) effect = 36, -- efeito que sai enquanto carrega key = 61728 -- storage q fica salvo se o channeling foi realizado com sucesso } function onCastSpell(cid, var) local time = onCastChannel(cid, getCreatureTarget(cid), config.delaycast, config.effect, config.key) addEvent(function() if isCreature(cid) then Taunt(cid, variantToNumber(var), config.delay, config.walks) doCreatureSay(variantToNumber(var), "I WILL KILL YOU!", 20, false, 0, getCreaturePosition(variantToNumber(var))) doCreatureSay(cid, "COME AT ME BRO", 20) doChangeSpeed(variantToNumber(var), (config.speed - getCreatureBaseSpeed(variantToNumber(var)))) addEvent(function() if isCreature(variantToNumber(var)) then doChangeSpeed(variantToNumber(var), (-config.speed + getCreatureBaseSpeed(variantToNumber(var)))) end end, config.delay * (config.walks + 1)) end end, time) return true end 3- Agora note que temos uma key onde ficará salvo se o channelling foi realizado com sucesso, mas como saber? Simples, o valor dessa storage ficará 11 caso ele tenha sido realizado completamente com sucesso, então o passo final é colocar um checador no addEvent para o valor do Storage antes de soltar a spell, afinal, a spell só deverá sair se o channelling foi feito com sucesso. local config = { walks = 4, -- qnts passos irá dar delay = 750, -- tempo entre 1 passo e outro speed = 100, --- velocidade do passo delaycast = 200, -- delay pra carregar (200 milisegundos por cada 10% da spell) effect = 36, -- efeito que sai enquanto carrega key = 61728 -- storage q fica salvo se o channeling foi realizado com sucesso } function onCastSpell(cid, var) local time = onCastChannel(cid, getCreatureTarget(cid), config.delaycast, config.effect, config.key) addEvent(function() if isCreature(cid) and getPlayerStorageValue(cid, config.key) == 11 then Taunt(cid, variantToNumber(var), config.delay, config.walks) doCreatureSay(variantToNumber(var), "I WILL KILL YOU!", 20, false, 0, getCreaturePosition(variantToNumber(var))) doCreatureSay(cid, "COME AT ME BRO", 20) doChangeSpeed(variantToNumber(var), (config.speed - getCreatureBaseSpeed(variantToNumber(var)))) addEvent(function() if isCreature(variantToNumber(var)) then doChangeSpeed(variantToNumber(var), (-config.speed + getCreatureBaseSpeed(variantToNumber(var)))) end end, config.delay * (config.walks + 1)) elseif isCreature(cid) then doPlayerSendCancel(cid, "You broke the channeling spell so the cast was canceled.") end end, time) return true end 4- A spell está perfeita e funcional agora, só q se vc for soltar vc vai perceber que o exhaust dela é bem menor que o tempo de channelling então o cara pode soltar ela diversas vezes só carregando e soltando. Pra controlar melhor isso já que se trata de uma spell praticamente mortal num x1 contra um knight nós usaremos um sistema de cooldown por storage, ficando assim: local config = { walks = 4, -- qnts passos irá dar delay = 750, -- tempo entre 1 passo e outro speed = 100, --- velocidade do passo delaycast = 200, -- delay pra carregar (200 milisegundos por cada 10% da spell) effect = 36, -- efeito que sai enquanto carrega key = 61728, -- storage q fica salvo se o channeling foi realizado com sucesso storagCooldown = 61729, -- storage que salva o cooldown da spell cooldown = 25 -- tempo entre 1 uso e outro da spell } function onCastSpell(cid, var) if getPlayerStorageValue(cid, config.storagCooldown) - os.time() <= 0 then setPlayerStorageValue(cid, config.storagCooldown, os.time() + config.cooldown) else doPlayerSendCancel(cid, "Your skill is in cooldown, wait more ".. getPlayerStorageValue(cid, config.storagCooldown) - os.time() .." seconds to use it.") return false end local time = onCastChannel(cid, getCreatureTarget(cid), config.delaycast, config.effect, config.key) addEvent(function() if isCreature(cid) and getPlayerStorageValue(cid, config.key) == 11 then Taunt(cid, variantToNumber(var), config.delay, config.walks) doCreatureSay(variantToNumber(var), "I WILL KILL YOU!", 20, false, 0, getCreaturePosition(variantToNumber(var))) doCreatureSay(cid, "COME AT ME BRO", 20) doChangeSpeed(variantToNumber(var), (config.speed - getCreatureBaseSpeed(variantToNumber(var)))) addEvent(function() if isCreature(variantToNumber(var)) then doChangeSpeed(variantToNumber(var), (-config.speed + getCreatureBaseSpeed(variantToNumber(var)))) end end, config.delay * (config.walks + 1)) elseif isCreature(cid) then doPlayerSendCancel(cid, "You broke the channeling spell so the cast was canceled.") end end, time) return true end Espero que vocês tenham aprendido como usar o cast System, agora um pequeno gif do funcionamento dele:
Postado Dezembro 10, 2014 10 anos a skill eu achei muito sem sentido e desnecessária em um ot global por ex, em outros mapas com novas finalidades não sei pode ser que seja util, mais como ela foi feito achei genial! rep++ por isso :B Editado Dezembro 10, 2014 10 anos por haith (veja o histórico de edições)
Postado Dezembro 10, 2014 10 anos Autor seria uma espécie de provocação que obrigaria o player/monstro a ir pra cima de você te atacar, seria uma evolução do exeta res que funcione em players tb kkk
Postado Dezembro 10, 2014 10 anos Não sei pq, mas eu acho que a Cip vai botar uma spell parecida na 2 promoção do Kina (lado defesa)...
Postado Março 21, 2015 10 anos Erro ajuda por favo!! [21/03/2015 02:31:44] [Error - Spell Interface] [21/03/2015 02:31:44] In a timer event called from: [21/03/2015 02:31:44] data/spells/scripts/support/taunt.lua:onCastSpell [21/03/2015 02:31:44] Description: [21/03/2015 02:31:44] (luaDoCreatureSetNoMove) Creature not found [21/03/2015 02:31:44] [Error - Spell Interface] [21/03/2015 02:31:44] In a timer event called from: [21/03/2015 02:31:44] data/spells/scripts/support/taunt.lua:onCastSpell [21/03/2015 02:31:44] Description: [21/03/2015 02:31:44] (luaGetThingPosition) Thing not found [21/03/2015 02:31:44] [Error - Spell Interface] [21/03/2015 02:31:44] In a timer event called from: [21/03/2015 02:31:44] data/spells/scripts/support/taunt.lua:onCastSpell [21/03/2015 02:31:44] Description: [21/03/2015 02:31:44] (luaGetThingPosition) Thing not found [21/03/2015 02:31:44] [Error - Spell Interface] [21/03/2015 02:31:44] In a timer event called from: [21/03/2015 02:31:44] data/spells/scripts/support/taunt.lua:onCastSpell [21/03/2015 02:31:45] Description: [21/03/2015 02:31:45] (luaDoCreatureSay) Invalid position specified. [21/03/2015 02:31:45] [Error - Spell Interface] [21/03/2015 02:31:45] In a timer event called from: [21/03/2015 02:31:45] data/spells/scripts/support/taunt.lua:onCastSpell [21/03/2015 02:31:45] Description: [21/03/2015 02:31:45] (luaGetCreatureBaseSpeed) Creature not found [21/03/2015 02:31:45] [Error - Spell Interface] [21/03/2015 02:31:45] In a timer event called from: [21/03/2015 02:31:45] data/spells/scripts/support/taunt.lua:onCastSpell [21/03/2015 02:31:45] Description: [21/03/2015 02:31:45] data/spells/scripts/support/taunt.lua:26: attempt to perform arithmetic on a boolean value [21/03/2015 02:31:45] stack traceback: [21/03/2015 02:31:45] data/spells/scripts/support/taunt.lua:26: in function <data/spells/scripts/support/taunt.lua:21>
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.