server-master/config/scripts/lib/Monster.lua

173 lines
4.1 KiB
Lua

local UUID = require ('UUID')
local Position = require ('Position')
local Event = require ('Event')
local ObjectiveType = require('ObjectiveType')
local Monster = {}
function Monster.CreateWithVnum(vnum)
local monster =
{
Id = UUID.Generate(),
Vnum = vnum,
Position = Position.At(0, 0),
CanMove = true,
IsBoss = false,
IsTarget = false,
IsRandomPosition = false,
SpawnAfterTask = false,
SpawnAfterMobs = 0,
GoToBossPosition = Position.At(0, 0),
Drop = {},
Events = {},
Direction = 2,
CustomLevel = nil,
AtAroundMobId = nil,
AtAroundMobRange = nil,
Waypoints = {}
}
function monster.At(x, y)
monster.Position = Position.At(x, y)
return monster
end
function monster.Facing(dir)
monster.Direction = dir
return monster
end
function monster.FacingRandom()
monster.Direction = math.random(0, 7) -- semi-random, will reroll on script reload
return monster
end
function monster.WithCustomLevel(level)
monster.CustomLevel = level
return monster
end
function monster.AtRandomPosition()
monster.IsRandomPosition = true
return monster
end
local function AddEvent(trigger, event)
local events = monster.Events[trigger];
if (events == nil) then
events = {}
monster.Events[trigger] = events
end
table.insert(events, event)
return monster
end
function monster.OnDeath(events) -- "0"%
for k,v in pairs(events) do
AddEvent("OnDeath", v)
end
return monster
end
function monster.OnQuarterHp(events) -- 25%
for k,v in pairs(events) do
AddEvent("OnQuarterHp", v)
end
return monster
end
function monster.OnHalfHp(events) -- 50%
for k,v in pairs(events) do
AddEvent("OnHalfHp", v)
end
return monster
end
function monster.OnThreeFourthsHp(events) -- 75%
for k,v in pairs(events) do
AddEvent("OnThreeFourthsHp", v)
end
return monster
end
function monster.AsBoss()
monster.IsBoss = true
monster.IsTarget = true
monster.OnDeath({Event.IncreaseObjective(ObjectiveType.Monster)});
return monster
end
function monster.WithHpMultiplier(hpMultiplier)
monster.HpMultiplier = hpMultiplier
return monster
end
function monster.WithMpMultiplier(mpMultiplier)
monster.MpMultiplier = mpMultiplier
return monster
end
function monster.WithHpMpMultiplier(multiplier)
monster.HpMultiplier = multiplier
monster.MpMultiplier = multiplier
return monster
end
function monster.AsDungeonBoss()
monster.IsBoss = true
return monster
end
function monster.SpawnAfterTaskStart()
monster.SpawnAfterTask = true
return monster
end
function monster.SpawnAfterMobsKilled(amount)
monster.SpawnAfterMobs = amount
return monster
end
function monster.AsObjective()
monster.IsTarget = true
monster.OnDeath({Event.IncreaseObjective(ObjectiveType.Monster)});
return monster
end
function monster.AsTarget()
monster.IsTarget = true
return monster
end
function monster.WithMoveToPosition(x, y)
monster.GoToBossPosition = Position.At(x, y)
return monster
end
function monster.AddDrop(drop)
for k,v in pairs(drop) do
table.insert(monster.Drop, v)
end
return monster
end
function monster.AtAroundMob(mob, range)
monster.AtAroundMobId = mob.Id
monster.AtAroundMobRange = range
return monster
end
function monster.WithWaypoints(waypoints)
for k,v in pairs(waypoints) do
table.insert(monster.Waypoints, v)
end
return monster
end
return monster
end
return Monster;