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
Was this helpful?