local summonSpellConfig = {
["Rat"] = {
area = createCombatArea(AREA_CIRCLE2X2),
formula = {
level = 3,
magLvl = 2,
minDmg = 1.2,
maxDmg = 1.5,
speed = 1.5
},
effect = CONST_ME_FIREAREA,
combat = COMBAT_FIREDAMAGE
},
["Rotworm"] = {
area = createCombatArea(AREA_CIRCLE2X2),
formula = {
level = 4,
magLvl = 4,
minDmg = 1.2,
maxDmg = 1.5,
speed = 1.5
},
effect = CONST_ME_FIREAREA,
combat = COMBAT_FIREDAMAGE
}
}
local cExplosionSummonDie = CreatureEvent("ExplosionSummonDie")
function cExplosionSummonDie.onDeath(creature, corpse, killer, mostDamageKiller, unjustified, mostDamageUnjustified)
local prop = summonSpellConfig[creature:getName()]
if prop then
local master = creature:getMaster()
if master then
local min = ((master:getLevel() * prop.formula.level) + (master:getMagicLevel() * prop.formula.magLvl)) * prop.formula.minDmg
local max = ((master:getLevel() * prop.formula.level) + (master:getMagicLevel() * prop.formula.magLvl)) * prop.formula.maxDmg
doAreaCombatHealth(master:getId(), prop.combat, creature:getPosition(), prop.area, -min, -max, prop.effect, ORIGIN_SPELL)
end
end
return true
end
cExplosionSummonDie:register()
local cExplosionSummonThink = CreatureEvent("ExplosionSummonThink")
function cExplosionSummonThink.onThink(creature, interval, item, position, lastPosition, fromPosition, toPosition)
local prop = summonSpellConfig[creature:getName()]
if prop then
local master = creature:getMaster()
if master then
local target = master:getTarget()
local masterPos = master:getPosition()
local creaturePos = creature:getPosition()
if target and target:getPosition():getDistance(creaturePos) <= 1 then
local min = ((master:getLevel() * prop.formula.level) + (master:getMagicLevel() * prop.formula.magLvl)) * prop.formula.minDmg
local max = ((master:getLevel() * prop.formula.level) + (master:getMagicLevel() * prop.formula.magLvl)) * prop.formula.maxDmg
doAreaCombatHealth(master:getId(), prop.combat, creature:getPosition(), prop.area, -min, -max, prop.effect, ORIGIN_SPELL)
creature:remove()
elseif creaturePos:getDistance(masterPos) > 7 or creaturePos.z ~= masterPos.z then
creaturePos:sendMagicEffect(CONST_ME_POFF)
creature:teleportTo(masterPos)
masterPos:sendMagicEffect(CONST_ME_TELEPORT)
end
end
end
return true
end
cExplosionSummonThink:register()
local spell = Spell(SPELL_INSTANT)
function spell.onCastSpell(creature, variant)
local summons = creature:getSummons()
if #summons >= 2 then
creature:sendCancelMessage("You can only have 2 summons maximum.")
return false
end
local monsterName = variant:getString()
local prop = summonSpellConfig[monsterName]
if prop then
local monster = Game.createMonster(monsterName, creature:getPosition())
if monster then
monster:registerEvent("ExplosionSummonDie")
monster:registerEvent("ExplosionSummonThink")
monster:changeSpeed(creature:getBaseSpeed() * prop.formula.speed)
local maxHp = creature:getMaxHealth()
monster:setMaxHealth(maxHp)
monster:addHealth(maxHp)
creature:addSummon(monster)
return true
end
creature:sendCancelMessage(RETURNVALUE_NOTENOUGHROOM)
return false
end
creature:sendCancelMessage("Summon name does not exist.")
return false
end
spell:name("Summon Bomb Spell")
spell:words("make bomb")
spell:hasParams(true)
spell:group("attack")
spell:vocation("sorcerer", "master sorecerer")
spell:id(1)
spell:cooldown(1000)
spell:level(200)
spell:range(6)
spell:manaPercent(13)
spell:isPremium(true)
spell:register()