• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

RevScripts Mechanic Bosses Quests

GM Ambera

GM Ambera
Joined
Dec 19, 2018
Messages
61
Reaction score
8
I'm need help on Quest Mechanics Room Bosses

Example : Grave Danger Duke Krule Thais (
)
Transform people on room to :

Key wiki points:
1. After a few seconds, all players' appearance will change to either a Water Elemental or a Fire Elemental. Along with that, a large magic spell of the corresponding element (water/fire) will appear around each player every turn.
2. If two players who have different appearances get close to each other, they will take about 2000 damage.
3. The transformation resets every few seconds, which means that in case a marksman has a summon targeting him, this player can wait until his transformation matches the Knight's and bring the summon to him. However, this must be done quickly to avoid a change in appearance in the meantime.

I was try to find some post or smth for help me to config Full grave danger , Feaster of soul , soul war... if you can help thanks alot <3



@Xikini @Sarah Wesker
@Sprrw
 
Last edited:
Solution
I'm need help on Quest Mechanics Room Bosses

Example : Grave Danger Duke Krule Thais (
)
Transform people on room to :

Key wiki points:
1. After a few seconds, all players' appearance will change to either a Water Elemental or a Fire Elemental. Along with that, a large magic spell of the corresponding element (water/fire) will appear around each player every turn.
2. If two players who have different appearances get close to each other, they will take about 2000 damage.
3. The transformation resets every few seconds, which means that in case a marksman has a summon targeting him, this player can wait until his transformation matches the Knight's and bring the summon to him. However, this must be done quickly to...
I'm need help on Quest Mechanics Room Bosses

Example : Grave Danger Duke Krule Thais (
)
Transform people on room to :

Key wiki points:
1. After a few seconds, all players' appearance will change to either a Water Elemental or a Fire Elemental. Along with that, a large magic spell of the corresponding element (water/fire) will appear around each player every turn.
2. If two players who have different appearances get close to each other, they will take about 2000 damage.
3. The transformation resets every few seconds, which means that in case a marksman has a summon targeting him, this player can wait until his transformation matches the Knight's and bring the summon to him. However, this must be done quickly to avoid a change in appearance in the meantime.

I was try to find some post or smth for help me to config Full grave danger , Feaster of soul , soul war... if you can help thanks alot <3



@Xikini @Sarah Wesker
@Sprrw
Here is what you are looking for 😉
data/scripts/duke_krule.lua
Lua:
local config = {
    transformChance = 90, -- Percent
    transformIntervals = {20000, 40000}, -- Milliseconds
    transformOutfits = {49, 286}, -- LookTypes
    damageIntervals = {5000, 10000}, -- Milliseconds
    damageAmountRange = {1000, 2000} -- Hit Points
}

local mType = Game.createMonsterType("Duke Krule")
local monster = {}

monster.description = "a Duke Krule"
monster.experience = 46300
monster.outfit = {
    lookType = 1221,
    lookHead = 8,
    lookBody = 8,
    lookLegs = 19,
    lookFeet = 79,
    lookAddons = 3,
    lookMount = 0
}

monster.health = 50000
monster.maxHealth = 50000
monster.race = "venom"
monster.corpse = 31599
monster.speed = 125
monster.manaCost = 0

monster.changeTarget = {
    interval = 4000,
    chance = 10
}

monster.strategiesTarget = {
    nearest = 100,
}

monster.flags = {
    summonable = false,
    attackable = true,
    hostile = true,
    convinceable = false,
    pushable = false,
    rewardBoss = true,
    illusionable = false,
    canPushItems = true,
    canPushCreatures = true,
    staticAttackChance = 90,
    targetDistance = 1,
    runHealth = 0,
    healthHidden = false,
    isBlockable = false,
    canWalkOnEnergy = true,
    canWalkOnFire = true,
    canWalkOnPoison = true
}

monster.light = {
    level = 0,
    color = 0
}

monster.voices = {
    interval = 5000,
    chance = 10,
}

monster.loot = {
    {name = "platinum coin", minCount = 1, maxCount = 5, chance = 100000},
    {name = "crystal coin", minCount = 0, maxCount = 2, chance = 50000},
    {name = "supreme health potion", minCount = 0, maxCount = 6, chance = 35000},
    {name = "ultimate mana potion", minCount = 0, maxCount = 20, chance = 32000},
    {name = "ultimate spirit potion", minCount = 0, maxCount = 20, chance = 32000},
    {name = "bullseye potion", minCount = 0, maxCount = 10, chance = 12000},
    {name = "mastermind potion", minCount = 0, maxCount = 10, chance = 12000},
    {name = "berserk potion", minCount = 0, maxCount = 10, chance = 12000},
    {name = "piece of draconian steel", minCount = 0, maxCount = 3, chance = 9000},
    {name = "green gem", minCount = 0, maxCount = 2, chance = 12000},
    {name = "silver token", minCount = 0, maxCount = 2, chance = 9500},
    {name = "blue gem", chance = 11000},
    {name = "crusader helmet", chance = 6400},
    {name = "gold ingot", minCount = 0, maxCount = 1, chance = 10000},
    {id= 3039, chance = 11000}, -- red gem
    {name = "terra hood", chance = 7800},
    {name = "yellow gem", chance = 9500},
    {name = "young lich worm", chance = 5800},
    {name = "bear skin", chance = 1800},
    {name = "noble amulet", chance = 1100},
    {name = "rotten heart", chance = 1700},
    {name = "terra helmet", chance = 700},
    {name = "final judgement", chance = 460},
}

monster.attacks = {
    {name ="melee", interval = 2000, chance = 100, minDamage = -200, maxDamage = -600},
    {name ="combat", interval = 1800, chance = 60, type = COMBAT_MANADRAIN, minDamage = -400, maxDamage = -1000, length = 7, spread = 2, effect = CONST_ME_EXPLOSIONHIT, target = false},
    {name ="combat", interval = 1800, chance = 19, type = COMBAT_PHYSICALDAMAGE, minDamage = -400, maxDamage = -1000, length = 7, spread = 3, effect = CONST_ME_BLOCKHIT, target = false},
    {name ="combat", interval = 1800, chance = 40, type = COMBAT_FIREDAMAGE, minDamage = -300, maxDamage = -500, radius = 10, effect = CONST_ME_HITBYFIRE, target = false}
}

monster.defenses = {
    defense = 25,
    armor = 78,
    {name ="combat", interval = 2000, chance = 14, type = COMBAT_HEALING, minDamage = 150, maxDamage = 350, effect = CONST_ME_MAGIC_BLUE, target = false}
}

monster.elements = {
    {type = COMBAT_PHYSICALDAMAGE, percent = 0},
    {type = COMBAT_ENERGYDAMAGE, percent = 0},
    {type = COMBAT_EARTHDAMAGE, percent = 0},
    {type = COMBAT_FIREDAMAGE, percent = 20},
    {type = COMBAT_LIFEDRAIN, percent = 0},
    {type = COMBAT_MANADRAIN, percent = 0},
    {type = COMBAT_DROWNDAMAGE, percent = 0},
    {type = COMBAT_ICEDAMAGE, percent = 0},
    {type = COMBAT_HOLYDAMAGE , percent = 0},
    {type = COMBAT_DEATHDAMAGE , percent = 0}
}

monster.immunities = {
    {type = "paralyze", condition = true},
    {type = "outfit", condition = false},
    {type = "invisible", condition = true},
    {type = "bleed", condition = false}
}

local fireCombat = Combat()
fireCombat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
fireCombat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
fireCombat:setArea(createCombatArea(AREA_CIRCLE3X3))

function onGetFormulaValues(player, level, magicLevel)
    return -config.damageAmountRange[1], -config.damageAmountRange[2]
end

fireCombat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local waterCombat = Combat()
waterCombat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
waterCombat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_ICEAREA)
waterCombat:setArea(createCombatArea(AREA_CIRCLE3X3))

function onGetFormulaValues(player, level, magicLevel)
    return -config.damageAmountRange[1], -config.damageAmountRange[2]
end

waterCombat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local intervalTicks = 0

mType.onThink = function(monster, interval)
    intervalTicks = intervalTicks + interval
    if intervalTicks < 1000 then
        return
    end

    local applyDamage = nil
    local damageInterval = config.damageIntervals[math.random(#config.damageIntervals)]
    if intervalTicks >= damageInterval then
        intervalTicks = intervalTicks - damageInterval
        applyDamage = true
    end

    local spectators = Game.getSpectators(monster:getPosition(), false, true, 10, 10, 10, 10)
    if #spectators == 0 then
        return
    end

    for _, spectator in pairs(spectators) do
        local outfit = spectator:getOutfit()
        if not table.contains(config.transformOutfits, outfit.lookType) then
            if math.random(1, 100) <= config.transformChance then
                local condition = Condition(CONDITION_OUTFIT)
                outfit.lookType = config.transformOutfits[math.random(#config.transformOutfits)]
                condition:setOutfit(outfit)
                condition:setTicks(math.random(unpack(config.transformIntervals)))
                spectator:addCondition(condition)
            end
        elseif applyDamage then
            if outfit.lookType == config.transformOutfits[1] then
                fireCombat:execute(monster, Variant(spectator:getPosition()))
            elseif outfit.lookType == config.transformOutfits[2] then
                waterCombat:execute(monster, Variant(spectator:getPosition()))
            end
        end
    end
end

mType.onAppear = function(monster, creature)
    if monster:getType():isRewardBoss() then
        monster:setReward(true)
    end
end

mType.onDisappear = function(monster, creature)
end

mType.onMove = function(monster, creature, fromPosition, toPosition)
end

mType.onSay = function(monster, creature, type, message)
end

mType:register(monster)
 
Solution
Here is what you are looking for 😉
data/scripts/duke_krule.lua
Lua:
local config = {
    transformChance = 90, -- Percent
    transformIntervals = {20000, 40000}, -- Milliseconds
    transformOutfits = {49, 286}, -- LookTypes
    damageIntervals = {5000, 10000}, -- Milliseconds
    damageAmountRange = {1000, 2000} -- Hit Points
}

local mType = Game.createMonsterType("Duke Krule")
local monster = {}

monster.description = "a Duke Krule"
monster.experience = 46300
monster.outfit = {
    lookType = 1221,
    lookHead = 8,
    lookBody = 8,
    lookLegs = 19,
    lookFeet = 79,
    lookAddons = 3,
    lookMount = 0
}

monster.health = 50000
monster.maxHealth = 50000
monster.race = "venom"
monster.corpse = 31599
monster.speed = 125
monster.manaCost = 0

monster.changeTarget = {
    interval = 4000,
    chance = 10
}

monster.strategiesTarget = {
    nearest = 100,
}

monster.flags = {
    summonable = false,
    attackable = true,
    hostile = true,
    convinceable = false,
    pushable = false,
    rewardBoss = true,
    illusionable = false,
    canPushItems = true,
    canPushCreatures = true,
    staticAttackChance = 90,
    targetDistance = 1,
    runHealth = 0,
    healthHidden = false,
    isBlockable = false,
    canWalkOnEnergy = true,
    canWalkOnFire = true,
    canWalkOnPoison = true
}

monster.light = {
    level = 0,
    color = 0
}

monster.voices = {
    interval = 5000,
    chance = 10,
}

monster.loot = {
    {name = "platinum coin", minCount = 1, maxCount = 5, chance = 100000},
    {name = "crystal coin", minCount = 0, maxCount = 2, chance = 50000},
    {name = "supreme health potion", minCount = 0, maxCount = 6, chance = 35000},
    {name = "ultimate mana potion", minCount = 0, maxCount = 20, chance = 32000},
    {name = "ultimate spirit potion", minCount = 0, maxCount = 20, chance = 32000},
    {name = "bullseye potion", minCount = 0, maxCount = 10, chance = 12000},
    {name = "mastermind potion", minCount = 0, maxCount = 10, chance = 12000},
    {name = "berserk potion", minCount = 0, maxCount = 10, chance = 12000},
    {name = "piece of draconian steel", minCount = 0, maxCount = 3, chance = 9000},
    {name = "green gem", minCount = 0, maxCount = 2, chance = 12000},
    {name = "silver token", minCount = 0, maxCount = 2, chance = 9500},
    {name = "blue gem", chance = 11000},
    {name = "crusader helmet", chance = 6400},
    {name = "gold ingot", minCount = 0, maxCount = 1, chance = 10000},
    {id= 3039, chance = 11000}, -- red gem
    {name = "terra hood", chance = 7800},
    {name = "yellow gem", chance = 9500},
    {name = "young lich worm", chance = 5800},
    {name = "bear skin", chance = 1800},
    {name = "noble amulet", chance = 1100},
    {name = "rotten heart", chance = 1700},
    {name = "terra helmet", chance = 700},
    {name = "final judgement", chance = 460},
}

monster.attacks = {
    {name ="melee", interval = 2000, chance = 100, minDamage = -200, maxDamage = -600},
    {name ="combat", interval = 1800, chance = 60, type = COMBAT_MANADRAIN, minDamage = -400, maxDamage = -1000, length = 7, spread = 2, effect = CONST_ME_EXPLOSIONHIT, target = false},
    {name ="combat", interval = 1800, chance = 19, type = COMBAT_PHYSICALDAMAGE, minDamage = -400, maxDamage = -1000, length = 7, spread = 3, effect = CONST_ME_BLOCKHIT, target = false},
    {name ="combat", interval = 1800, chance = 40, type = COMBAT_FIREDAMAGE, minDamage = -300, maxDamage = -500, radius = 10, effect = CONST_ME_HITBYFIRE, target = false}
}

monster.defenses = {
    defense = 25,
    armor = 78,
    {name ="combat", interval = 2000, chance = 14, type = COMBAT_HEALING, minDamage = 150, maxDamage = 350, effect = CONST_ME_MAGIC_BLUE, target = false}
}

monster.elements = {
    {type = COMBAT_PHYSICALDAMAGE, percent = 0},
    {type = COMBAT_ENERGYDAMAGE, percent = 0},
    {type = COMBAT_EARTHDAMAGE, percent = 0},
    {type = COMBAT_FIREDAMAGE, percent = 20},
    {type = COMBAT_LIFEDRAIN, percent = 0},
    {type = COMBAT_MANADRAIN, percent = 0},
    {type = COMBAT_DROWNDAMAGE, percent = 0},
    {type = COMBAT_ICEDAMAGE, percent = 0},
    {type = COMBAT_HOLYDAMAGE , percent = 0},
    {type = COMBAT_DEATHDAMAGE , percent = 0}
}

monster.immunities = {
    {type = "paralyze", condition = true},
    {type = "outfit", condition = false},
    {type = "invisible", condition = true},
    {type = "bleed", condition = false}
}

local fireCombat = Combat()
fireCombat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
fireCombat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
fireCombat:setArea(createCombatArea(AREA_CIRCLE3X3))

function onGetFormulaValues(player, level, magicLevel)
    return -config.damageAmountRange[1], -config.damageAmountRange[2]
end

fireCombat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local waterCombat = Combat()
waterCombat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
waterCombat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_ICEAREA)
waterCombat:setArea(createCombatArea(AREA_CIRCLE3X3))

function onGetFormulaValues(player, level, magicLevel)
    return -config.damageAmountRange[1], -config.damageAmountRange[2]
end

waterCombat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local intervalTicks = 0

mType.onThink = function(monster, interval)
    intervalTicks = intervalTicks + interval
    if intervalTicks < 1000 then
        return
    end

    local applyDamage = nil
    local damageInterval = config.damageIntervals[math.random(#config.damageIntervals)]
    if intervalTicks >= damageInterval then
        intervalTicks = intervalTicks - damageInterval
        applyDamage = true
    end

    local spectators = Game.getSpectators(monster:getPosition(), false, true, 10, 10, 10, 10)
    if #spectators == 0 then
        return
    end

    for _, spectator in pairs(spectators) do
        local outfit = spectator:getOutfit()
        if not table.contains(config.transformOutfits, outfit.lookType) then
            if math.random(1, 100) <= config.transformChance then
                local condition = Condition(CONDITION_OUTFIT)
                outfit.lookType = config.transformOutfits[math.random(#config.transformOutfits)]
                condition:setOutfit(outfit)
                condition:setTicks(math.random(unpack(config.transformIntervals)))
                spectator:addCondition(condition)
            end
        elseif applyDamage then
            if outfit.lookType == config.transformOutfits[1] then
                fireCombat:execute(monster, Variant(spectator:getPosition()))
            elseif outfit.lookType == config.transformOutfits[2] then
                waterCombat:execute(monster, Variant(spectator:getPosition()))
            end
        end
    end
end

mType.onAppear = function(monster, creature)
    if monster:getType():isRewardBoss() then
        monster:setReward(true)
    end
end

mType.onDisappear = function(monster, creature)
end

mType.onMove = function(monster, creature, fromPosition, toPosition)
end

mType.onSay = function(monster, creature, type, message)
end

mType:register(monster)
Hello, a creature does the right mechanics, but when there is a player with a fire element and an ice element next to each other, it is not dealing damage. the damage is an average of 2k to 3k
 
Here is what you are looking for 😉
data/scripts/duke_krule.lua
Lua:
local config = {
    transformChance = 90, -- Percent
    transformIntervals = {20000, 40000}, -- Milliseconds
    transformOutfits = {49, 286}, -- LookTypes
    damageIntervals = {5000, 10000}, -- Milliseconds
    damageAmountRange = {1000, 2000} -- Hit Points
}

local mType = Game.createMonsterType("Duke Krule")
local monster = {}

monster.description = "a Duke Krule"
monster.experience = 46300
monster.outfit = {
    lookType = 1221,
    lookHead = 8,
    lookBody = 8,
    lookLegs = 19,
    lookFeet = 79,
    lookAddons = 3,
    lookMount = 0
}

monster.health = 50000
monster.maxHealth = 50000
monster.race = "venom"
monster.corpse = 31599
monster.speed = 125
monster.manaCost = 0

monster.changeTarget = {
    interval = 4000,
    chance = 10
}

monster.strategiesTarget = {
    nearest = 100,
}

monster.flags = {
    summonable = false,
    attackable = true,
    hostile = true,
    convinceable = false,
    pushable = false,
    rewardBoss = true,
    illusionable = false,
    canPushItems = true,
    canPushCreatures = true,
    staticAttackChance = 90,
    targetDistance = 1,
    runHealth = 0,
    healthHidden = false,
    isBlockable = false,
    canWalkOnEnergy = true,
    canWalkOnFire = true,
    canWalkOnPoison = true
}

monster.light = {
    level = 0,
    color = 0
}

monster.voices = {
    interval = 5000,
    chance = 10,
}

monster.loot = {
    {name = "platinum coin", minCount = 1, maxCount = 5, chance = 100000},
    {name = "crystal coin", minCount = 0, maxCount = 2, chance = 50000},
    {name = "supreme health potion", minCount = 0, maxCount = 6, chance = 35000},
    {name = "ultimate mana potion", minCount = 0, maxCount = 20, chance = 32000},
    {name = "ultimate spirit potion", minCount = 0, maxCount = 20, chance = 32000},
    {name = "bullseye potion", minCount = 0, maxCount = 10, chance = 12000},
    {name = "mastermind potion", minCount = 0, maxCount = 10, chance = 12000},
    {name = "berserk potion", minCount = 0, maxCount = 10, chance = 12000},
    {name = "piece of draconian steel", minCount = 0, maxCount = 3, chance = 9000},
    {name = "green gem", minCount = 0, maxCount = 2, chance = 12000},
    {name = "silver token", minCount = 0, maxCount = 2, chance = 9500},
    {name = "blue gem", chance = 11000},
    {name = "crusader helmet", chance = 6400},
    {name = "gold ingot", minCount = 0, maxCount = 1, chance = 10000},
    {id= 3039, chance = 11000}, -- red gem
    {name = "terra hood", chance = 7800},
    {name = "yellow gem", chance = 9500},
    {name = "young lich worm", chance = 5800},
    {name = "bear skin", chance = 1800},
    {name = "noble amulet", chance = 1100},
    {name = "rotten heart", chance = 1700},
    {name = "terra helmet", chance = 700},
    {name = "final judgement", chance = 460},
}

monster.attacks = {
    {name ="melee", interval = 2000, chance = 100, minDamage = -200, maxDamage = -600},
    {name ="combat", interval = 1800, chance = 60, type = COMBAT_MANADRAIN, minDamage = -400, maxDamage = -1000, length = 7, spread = 2, effect = CONST_ME_EXPLOSIONHIT, target = false},
    {name ="combat", interval = 1800, chance = 19, type = COMBAT_PHYSICALDAMAGE, minDamage = -400, maxDamage = -1000, length = 7, spread = 3, effect = CONST_ME_BLOCKHIT, target = false},
    {name ="combat", interval = 1800, chance = 40, type = COMBAT_FIREDAMAGE, minDamage = -300, maxDamage = -500, radius = 10, effect = CONST_ME_HITBYFIRE, target = false}
}

monster.defenses = {
    defense = 25,
    armor = 78,
    {name ="combat", interval = 2000, chance = 14, type = COMBAT_HEALING, minDamage = 150, maxDamage = 350, effect = CONST_ME_MAGIC_BLUE, target = false}
}

monster.elements = {
    {type = COMBAT_PHYSICALDAMAGE, percent = 0},
    {type = COMBAT_ENERGYDAMAGE, percent = 0},
    {type = COMBAT_EARTHDAMAGE, percent = 0},
    {type = COMBAT_FIREDAMAGE, percent = 20},
    {type = COMBAT_LIFEDRAIN, percent = 0},
    {type = COMBAT_MANADRAIN, percent = 0},
    {type = COMBAT_DROWNDAMAGE, percent = 0},
    {type = COMBAT_ICEDAMAGE, percent = 0},
    {type = COMBAT_HOLYDAMAGE , percent = 0},
    {type = COMBAT_DEATHDAMAGE , percent = 0}
}

monster.immunities = {
    {type = "paralyze", condition = true},
    {type = "outfit", condition = false},
    {type = "invisible", condition = true},
    {type = "bleed", condition = false}
}

local fireCombat = Combat()
fireCombat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
fireCombat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
fireCombat:setArea(createCombatArea(AREA_CIRCLE3X3))

function onGetFormulaValues(player, level, magicLevel)
    return -config.damageAmountRange[1], -config.damageAmountRange[2]
end

fireCombat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local waterCombat = Combat()
waterCombat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
waterCombat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_ICEAREA)
waterCombat:setArea(createCombatArea(AREA_CIRCLE3X3))

function onGetFormulaValues(player, level, magicLevel)
    return -config.damageAmountRange[1], -config.damageAmountRange[2]
end

waterCombat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local intervalTicks = 0

mType.onThink = function(monster, interval)
    intervalTicks = intervalTicks + interval
    if intervalTicks < 1000 then
        return
    end

    local applyDamage = nil
    local damageInterval = config.damageIntervals[math.random(#config.damageIntervals)]
    if intervalTicks >= damageInterval then
        intervalTicks = intervalTicks - damageInterval
        applyDamage = true
    end

    local spectators = Game.getSpectators(monster:getPosition(), false, true, 10, 10, 10, 10)
    if #spectators == 0 then
        return
    end

    for _, spectator in pairs(spectators) do
        local outfit = spectator:getOutfit()
        if not table.contains(config.transformOutfits, outfit.lookType) then
            if math.random(1, 100) <= config.transformChance then
                local condition = Condition(CONDITION_OUTFIT)
                outfit.lookType = config.transformOutfits[math.random(#config.transformOutfits)]
                condition:setOutfit(outfit)
                condition:setTicks(math.random(unpack(config.transformIntervals)))
                spectator:addCondition(condition)
            end
        elseif applyDamage then
            if outfit.lookType == config.transformOutfits[1] then
                fireCombat:execute(monster, Variant(spectator:getPosition()))
            elseif outfit.lookType == config.transformOutfits[2] then
                waterCombat:execute(monster, Variant(spectator:getPosition()))
            end
        end
    end
end

mType.onAppear = function(monster, creature)
    if monster:getType():isRewardBoss() then
        monster:setReward(true)
    end
end

mType.onDisappear = function(monster, creature)
end

mType.onMove = function(monster, creature, fromPosition, toPosition)
end

mType.onSay = function(monster, creature, type, message)
end

mType:register(monster)
would you like to do for tfs 1.5 downgrade?
 
Back
Top