RO
dúvida

Spell De Atack De Monstro Dando Bug, Quando Monstro Morre.

Por roriscrave, 29 de jul. de 2012 em Scripts

script
6
1.1k
29 de julho de 2012 às 04:45

No meu server tem uma spell que uso tanto para player quanto para monstros. Porém ela está dando bug. Que acontece quando o monstro solta spell e o jogador mata o monstro antes da spell terminar.

 

 

local combats = {}
local count = 5
local combatTypes = {1,3}
local combatEffects = {340}
local combatDistanceEffects = {1}
local combatFormulas = {{-99, -9, -9, -99}}
local delays = {300,100, 100, 100,100,200,200,200}

for i = 1, count do
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, combatTypes[((i-1) % #combatTypes)+1])
setCombatParam(combat, COMBAT_PARAM_EFFECT, combatEffects[((i-1) % #combatEffects)+1])
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, combatDistanceEffects[((i-1) % #combatDistanceEffects)+1])
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, unpack(combatFormulas[((i-1) % #combatFormulas)+1]))
combats[i] = combat
end

local function onCastSpellDelayed(cid, combat, var, combat_id)
if(isCreature(variantToNumber(var)) and not getTileInfo(getThingPosition(variantToNumber(var))).protection) then
doCombat(cid, combat[combat_id], var)
if(combat[combat_id+1] ~= nil) then
addEvent(onCastSpellDelayed, delays[((combat_id-1) % #delays)+1], cid, combats, var, combat_id+1)
end
end
end

function onCastSpell(cid, var)
onCastSpellDelayed(cid, combats, var, 1)
return true
end

 

O erro é o seguinte:

 

[Error - Spell Interface] 
In a timer event called from: 
data/spells/scripts/novas\spell.lua:onCastSpell
Description: 
(luaDoCombat) Creature not found

 

Darei rep+

jhon992J
29 de julho de 2012 às 09:41
local combats = {}
local count = 5
local combatTypes = {1,3}
local combatEffects = {340}
local combatDistanceEffects = {1}
local combatFormulas = {{-99, -9, -9, -99}}
local delays = {300,100, 100, 100,100,200,200,200}

for i = 1, count do
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, combatTypes[((i-1) % #combatTypes)+1])
setCombatParam(combat, COMBAT_PARAM_EFFECT, combatEffects[((i-1) % #combatEffects)+1])
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, combatDistanceEffects[((i-1) % #combatDistanceEffects)+1])
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, unpack(combatFormulas[((i-1) % #combatFormulas)+1]))
combats[i] = combat
end

local function onCastSpellDelayed(cid, combat, var, combat_id)
if(isCreature(variantToNumber(var)) and isCreature(cid) and not getTileInfo(getThingPosition(variantToNumber(var))).protection) then
   doCombat(cid, combat[combat_id], var)
   if(combat[combat_id+1] ~= nil) then
       addEvent(onCastSpellDelayed, delays[((combat_id-1) % #delays)+1], cid, combats, var, combat_id+1)
   end
end
end

function onCastSpell(cid, var)
onCastSpellDelayed(cid, combats, var, 1)
return true
end

29 de julho de 2012 às 14:39

Ae parceir, você conhece d+. Deu certinho. Só que acabou meus rep de hoje, amanha irei te dar rep.

Pode me reponder só o que você mudou?

jhon992J
29 de julho de 2012 às 16:14

Adicionei um "isCreature(cid)" na função "onCastSpellDelayed" para quando ela for executada verifica se a criatura ainda é uma criatura, ou seja, ela não morreu.

29 de julho de 2012 às 16:34

Vlw ai cara, você cunhece msm, quando puder dar rep+ te darei.

TchubakaT
29 de julho de 2012 às 16:35

Duvida Sanada. Reportado para que movam.