Revscriptsys

Script Structure

Constructor:

  • Game.createMonsterType(mTypeName)

  • mTypeName: Name for the monster type, equivalent to the name tag in monsters.xml.

Events:

  • onThink(monster, interval)

  • onAppear(monster, creature)

  • onDisappear(monster, creature)

  • onMove(monster, creature, fromPosition, toPosition)

  • onSay(monster, creature, type, message)

Methods:

  • register(): Finalizes the Monster Type definition and registers it.

  • name(newName):

  • newName: Name shown above the monster when created in-game.

  • nameDescription(desc):

  • desc: Name description for the monster (You see "a demon").

  • health(hp):

  • hp: Health the monster spawns at.

  • maxHealth(maxHp):

  • maxHp: Maximum health the monster can have.

  • runHealth(runHp):

  • runHp: Once the monster reaches the runHp threshold, it will run away from players.

  • experience(exp):

  • exp: Base experience gained by players who kill it.

  • combatImmunities(immunity):

  • immunity:

    physical

    energy

    fire

    poison or earth

    drown

    ice

    holy

    death

    lifedrain

    manadrain

  • conditionImmunities(immunity):

  • immunity:

    physical

    energy

    fire

    poison or earth

    drown

    ice

    holy

    death

    paralyze

    outfit

    drunk

    invisible or invisibility

    bleed

  • addAttack(spell):

  • spell: MonsterSpell userdata, see function documentation.

  • addDefense(spell):

  • spell: MonsterSpell userdata, see function documentation.

  • addElement(type, percent):

  • type: Element type (use the enums from Here)

    percent: Resistance percent.

  • addVoice(sentence, interval, chance, yell):

  • sentence: Sentence (text) to say.

    interval: Milliseconds between each attempt to say the sentence.

    chance: Chance to say the sentence.

    yell: Boolean, true will make the sentence a yell, otherwise it won't.

  • addLoot(loot):

  • loot: Loot userdata, see function documentation.

  • registerEvent(eventName):

  • eventName: Event name from creaturescripts to register to the monster.

  • eventType(type):

  • type: Event types found Here.

  • addSummon(name, interval, chance):

  • name: Monster name to summon.

    interval: Milliseconds between each attempt to spawn the summon.

    chance: Chance to summon.

  • maxSummons(amount):

  • amount: Amount of maximum summons the monster can spawn.

  • armor(arm):

  • arm: Base monster armor.

  • defense(def):

  • def: Base monster defense.

  • outfit(outfit):

  • outfit: Table containing outfit data

    lookMount

    lookAddons

    lookFeet

    lookLegs

    lookBody

    lookHead

    lookType

    lookTypeEx

  • race(race):

  • race:

    venom: Green damage numbers, green splash, CONST_ME_HITBYPOISON damage effect.

    blood: Red damage numbers, red splash, CONST_ME_DRAWBLOOD damage effect.

    undead: Grey damage numbers, CONST_ME_HITAREA damage effect.

    fire: Orange damage numbers, CONST_ME_DRAWBLOOD damage effect.

    energy: Purple damage numbers, CONST_ME_ENERGYHIT damage effect.

  • corpseId(id):

  • id: Corpse item ID for when the monster dies.

  • manaCost(cost):

  • cost: Mana cost to summon the monster via a spell such as utevo res.

  • baseSpeed(speed):

  • speed: Base speed at which the monster runs at with no buffs or debuffs.

  • light(color, level):

  • color: Color number.

    level: Level of intensity.

  • staticAttackChance(chance):

  • chance: Chance to use a static / basic attack.

  • targetDistance(distance):

  • distance: Distance in sqm that the monster will attempt to stay at between targets.

  • yellChance(chance):

  • chance: Chance to yell at each interval.

  • yellSpeedTicks(rate):

  • rate: Interval at which the monster tries to yell.

  • changeTargetChance(chance):

  • chance: Chance to swap targets at each interval.

  • changeTargetSpeed(speed):

  • speed: Interval at which the monster tries to change target.

Examples

These examples use a table to mask the definition without having to manually call each method, which makes the registration much easier for things like loot and spells.

Default TFS example:

local mType = Game.createMonsterType("example")
local monster = {}
monster.description = "an example"
monster.experience = 1
monster.outfit = {
    lookType = 37
}

monster.health = 99200
monster.maxHealth = monster.health
monster.race = "fire"
monster.corpse = 5995
monster.speed = 280
monster.maxSummons = 2

monster.changeTarget = {
    interval = 4*1000,
    chance = 20
}

monster.flags = {
    summonable = false,
    attackable = true,
    hostile = true,
    convinceable = false,
    illusionable = false,
    canPushItems = true,
    canPushCreatures = true,
    targetDistance = 1,
    staticAttackChance = 70
}

monster.summons = {
    {name = "demon", chance = 10, interval = 2*1000}
}

monster.voices = {
    interval = 5000,
    chance = 10,
    {text = "I'm an example", yell = false},
    {text = "You shall bow", yell = false}
}

monster.loot = {
    {id = "gold coin", chance = 60000, maxCount = 100},
    {id = "bag", chance = 60000,
        child = {
            {id = "platinum coin", chance = 60000, maxCount = 100},
            {id = "crystal coin", chance = 60000, maxCount = 100}
        }
    }
}

monster.attacks = {
    {name = "melee", attack = 130, skill = 70, effect = CONST_ME_DRAWBLOOD, interval = 2*1000},
    {name = "energy strike", range = 1, chance = 10, interval = 2*1000, minDamage = -210, maxDamage = -300, target = true},
    {name = "combat", type = COMBAT_MANADRAIN, chance = 10, interval = 2*1000, minDamage = 0, maxDamage = -120, target = true, range = 7, effect = CONST_ME_MAGIC_BLUE},
    {name = "combat", type = COMBAT_FIREDAMAGE, chance = 20, interval = 2*1000, minDamage = -150, maxDamage = -250, radius = 1, target = true, effect = CONST_ME_FIREAREA, shootEffect = CONST_ANI_FIRE},
    {name = "speed", chance = 15, interval = 2*1000, speed = -700, radius = 1, target = true, duration = 30*1000, effect = CONST_ME_MAGIC_RED},
    {name = "firefield", chance = 10, interval = 2*1000, range = 7, radius = 1, target = true, shootEffect = CONST_ANI_FIRE},
    {name = "combat", type = COMBAT_LIFEDRAIN, chance = 10, interval = 2*1000, length = 8, spread = 0, minDamage = -300, maxDamage = -490, effect = CONST_ME_PURPLEENERGY}
}

monster.defenses = {
    defense = 55,
    armor = 55,
    {name = "combat", type = COMBAT_HEALING, chance = 15, interval = 2*1000, minDamage = 180, maxDamage = 250, effect = CONST_ME_MAGIC_BLUE},
    {name = "speed", chance = 15, interval = 2*1000, speed = 320, effect = CONST_ME_MAGIC_RED}
}

monster.elements = {
    {type = COMBAT_PHYSICALDAMAGE, percent = 30},
    {type = COMBAT_DEATHDAMAGE, percent = 30},
    {type = COMBAT_ENERGYDAMAGE, percent = 50},
    {type = COMBAT_EARTHDAMAGE, percent = 40},
    {type = COMBAT_ICEDAMAGE, percent = -10},
    {type = COMBAT_HOLYDAMAGE, percent = -10}
}

monster.immunities = {
    {type = "fire", combat = true, condition = true},
    {type = "drown", condition = true},
    {type = "lifedrain", combat = true},
    {type = "paralyze", condition = true},
    {type = "invisible", condition = true}
}

mType.onThink = function(monster, interval)
    print("I'm thinking")
end

mType.onAppear = function(monster, creature)
    if monster:getId() == creature:getId() then
        print(monster:getId(), creature:getId())
    end
end

mType.onDisappear = function(monster, creature)
    if monster:getId() == creature:getId() then
        print(monster:getId(), creature:getId())
    end
end

mType.onMove = function(monster, creature, fromPosition, toPosition)
    if monster:getId() == creature:getId() then
        print(monster:getId(), creature:getId(), fromPosition, toPosition)
    end
end

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

mType:register(monster)

Last updated