Postado Fevereiro 8, 2017 8 anos 11 horas atrás, fefuxd disse: como faço isso? sou meio noob em código.. esse é o cod da magia: Ocultar conteúdo local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS) setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 8, 8, 10, 12) local area = createCombatArea(AREA_CROSS6X6) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Ocultar conteúdo <instant name="Rage of the Skies" words="exevo gran mas vis" lvl="55" mana="650" selftarget="1" prem="1" exhaustion="10000" needlearn="0" event="script" value="attack/rage of the skies.lua"> <vocation id="1"/> <vocation id="5"/> </instant> Opa, não tinha visto que respondeu, lembra de citar a minha resposta, ai sou avisado que você respondeu aqui no post. O spells.lua fica assim: <instant name="Rage of the Skies" words="exevo gran mas vis" lvl="55" mana="650" selftarget="1" prem="1" exhaustion="0" needlearn="0" event="script" value="attack/rage of the skies.lua"> <vocation id="1"/> <vocation id="5"/> </instant> O Rage of the skies.lua fica assim: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS) setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 8, 8, 10, 12) local area = createCombatArea(AREA_CROSS6X6) setCombatArea(combat, area) function onCastSpell(cid, var) if getPlayerStorageValue(cid, 3200) <= 0 then setPlayerStorageValue(cid, 3200, os.time()+10000) return doCombat(cid, combat, var) else doPlayerSendCancel(cid, "You are exhausted.") end return TRUE end Agora vou explicar o que mudei pra que você possa fazer nas outras magias que quiser e adaptá-las. A única parte que mudei foi a parte do onCastSpell. Você adiciona "if getPlayerStorageValue(cid, 3200) <= 0 then" para checar se o storage 3200 esta igual ou menor a 0. Embaixo você adiciona "setPlayerStorageValue(cid, 3200, os.time()+10000)" que caso o storage acima esteja igual ou menor a 0 ele adiciona 10s de exhaust. Então o return doCombat (que é o que faz a magia sair, já estava no script) O else serve como "se não" como uma condição contraria ao storage 3200 ser maior que 0 (faz menos de 10 segundos que o player soltou a magia) Então vem um doPlayerSendCancel que vai falar que o player esta em exhausted caso tenha soltado a magia a menos de 10 segundos. o end pra fechar aquele primeiro if (getPlayerStorageValue). E o return true que não sei se é necessário. Então, espero que tenha entendido o que fiz, assim você tem liberdade para fazer como quiser com as outras spell. Caso queira que o exevo gran mas vis só exhauste com o mas flam, faça essa alteração no mas vis e mas flam, usando o storage 3200 nos dois. (Mesmo storage, mesmo exhaust) Se você quiser que por exemplo, dê pra soltar exori vis, exevo gran mas vis e sd ao mesmo tempo, use o storage 3200 no mas vis, o 3201 no exori vis e a sd pode manter o exhaust do spells.xml
Postado Fevereiro 10, 2017 8 anos Autor Em 08/02/2017 ás 10:26, DukeeH disse: Opa, não tinha visto que respondeu, lembra de citar a minha resposta, ai sou avisado que você respondeu aqui no post. O spells.lua fica assim: <instant name="Rage of the Skies" words="exevo gran mas vis" lvl="55" mana="650" selftarget="1" prem="1" exhaustion="0" needlearn="0" event="script" value="attack/rage of the skies.lua"> <vocation id="1"/> <vocation id="5"/> </instant> O Rage of the skies.lua fica assim: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS) setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 8, 8, 10, 12) local area = createCombatArea(AREA_CROSS6X6) setCombatArea(combat, area) function onCastSpell(cid, var) if getPlayerStorageValue(cid, 3200) <= 0 then setPlayerStorageValue(cid, 3200, os.time()+10000) return doCombat(cid, combat, var) else doPlayerSendCancel(cid, "You are exhausted.") end return TRUE end Agora vou explicar o que mudei pra que você possa fazer nas outras magias que quiser e adaptá-las. A única parte que mudei foi a parte do onCastSpell. Você adiciona "if getPlayerStorageValue(cid, 3200) <= 0 then" para checar se o storage 3200 esta igual ou menor a 0. Embaixo você adiciona "setPlayerStorageValue(cid, 3200, os.time()+10000)" que caso o storage acima esteja igual ou menor a 0 ele adiciona 10s de exhaust. Então o return doCombat (que é o que faz a magia sair, já estava no script) O else serve como "se não" como uma condição contraria ao storage 3200 ser maior que 0 (faz menos de 10 segundos que o player soltou a magia) Então vem um doPlayerSendCancel que vai falar que o player esta em exhausted caso tenha soltado a magia a menos de 10 segundos. o end pra fechar aquele primeiro if (getPlayerStorageValue). E o return true que não sei se é necessário. Então, espero que tenha entendido o que fiz, assim você tem liberdade para fazer como quiser com as outras spell. Caso queira que o exevo gran mas vis só exhauste com o mas flam, faça essa alteração no mas vis e mas flam, usando o storage 3200 nos dois. (Mesmo storage, mesmo exhaust) Se você quiser que por exemplo, dê pra soltar exori vis, exevo gran mas vis e sd ao mesmo tempo, use o storage 3200 no mas vis, o 3201 no exori vis e a sd pode manter o exhaust do spells.xml @DukeeH testei aqui mas nao rolou.. o player fica com exhaust eterno e nao consegue mais usar a magia.. nao tem que zerar o storage depois do exhaust? sei la nao entendo Editado Fevereiro 10, 2017 8 anos por fefuxd (veja o histórico de edições)
Postado Fevereiro 10, 2017 8 anos @fefuxd os.time()+10000 = 10 mil segundos. '-' 10 = 10 segundos, pelo menos nesse seu caso!
Postado Fevereiro 10, 2017 8 anos 4 horas atrás, fefuxd disse: @DukeeH testei aqui mas nao rolou.. o player fica com exhaust eterno e nao consegue mais usar a magia.. nao tem que zerar o storage depois do exhaust? sei la nao entendo Estranho cara, na função ele pega a hora atual e põem +10 segundos. Ai na parte que checa ele vê se o storage - hora atual é igual a 0. Essa parte não tem como estar errado, não da erro?
Postado Fevereiro 10, 2017 8 anos Autor 7 horas atrás, DukeeH disse: Estranho cara, na função ele pega a hora atual e põem +10 segundos. Ai na parte que checa ele vê se o storage - hora atual é igual a 0. Essa parte não tem como estar errado, não da erro? ta soltando a magia 1 vez dai fica com exhaust eterno.. e eu noto que mesmo com exhaust a mana diminui e o Magic Level aumenta.. soh a magia que nao sai 11 horas atrás, KotZletY disse: @fefuxd os.time()+10000 = 10 mil segundos. '-' 10 = 10 segundos, pelo menos nesse seu caso! mudei pra 10 tbm ficou do mesmo jeito
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.