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

192 lines
4.7 KiB
Lua

local UUID = require('UUID')
local Position = require('Position')
local Event = require('Event')
local ObjectiveType = require('ObjectiveType')
local ObjectType = require('ObjectType')
local MapObject = {}
local function Create(objectType)
local object =
{
ObjectType = objectType,
Parameters =
{
Id = UUID.Generate(),
Vnum = 0,
Position = Position.At(0, 0),
IsRandomPosition = false,
IsRandomUniquePosition = false,
IsObjective = false,
Events = {}
}
}
function object.At(x, y)
object.Parameters.Position = Position.At(x, y)
return object
end
function object.AtRandomPosition(isUnique)
isUnique = isUnique or false
if (isUnique == true) then
-- should it also make IsRandomPosition true?
object.Parameters.IsRandomUniquePosition = true
else
object.Parameters.IsRandomPosition = true
end
return object
end
return object
end
function MapObject.CreateButton(deactivatedVnum, activatedVnum, onlyOnce)
onlyOnce = onlyOnce or false
local button = Create(ObjectType.Button)
button.Parameters.ActivatedVnum = activatedVnum
button.Parameters.DeactivatedVnum = deactivatedVnum
button.Parameters.OnlyOnce = onlyOnce -- if it's been used once, it can't be used again
local function AddEvent(trigger, event)
local events = button.Parameters.Events[trigger]
if (events == nil) then
events = {}
button.Parameters.Events[trigger] = events
end
table.insert(events, event)
return button
end
function button.OnTrigger(events)
for k,v in pairs(events) do
AddEvent("Triggered", v)
end
return button
end
function button.AsObjective()
button.Parameters.IsObjective = true
return button
end
function button.WithCustomDancing(duration) -- milliseconds, 1000 = 1s
button.Parameters.CustomDanceDuration = duration
return button
end
function button.AsRaidObjective()
button.OnTrigger({Event.IncreaseObjective(ObjectiveType.Button)})
return button.AsObjective()
end
function button.OnSwitch(events)
for k,v in pairs(events) do
AddEvent("Switched", v)
end
return button
end
return button
end
function MapObject.CreateItem(vnum)
local item = Create(ObjectType.Item)
item.Parameters.Vnum = vnum
local function AddEvent(trigger, event)
local events = item.Parameters.Events[trigger]
if (events == nil) then
events = {}
item.Parameters.Events[trigger] = events
end
table.insert(events, event)
return item
end
function item.OnPickup(events)
for k,v in pairs(events) do
AddEvent("PickedUp", v)
end
return item
end
function item.AsObjective()
item.Parameters.IsObjective = true
return item
end
function item.WithDancing(duration) -- milliseconds, 1000 = 1s
item.Parameters.DanceDuration = duration
return item
end
return item
end
function MapObject.CreateLever()
return MapObject.CreateButton(1000, 1045)
end
function MapObject.CreateRedButton()
return MapObject.CreateButton(1051, 1052)
end
function MapObject.CreateWoodenLever()
return MapObject.CreateButton(1053, 1054)
end
function MapObject.CreateDevilSculpture()
return MapObject.CreateButton(1055, 1056, true)
end
function MapObject.CreateTrigger()
return MapObject.CreateButton(1135, 1136, true)
end
function MapObject.CreateBlockButton()
return MapObject.CreateButton(1182, 1183, true)
end
function MapObject.CreateTeleportLever()
return MapObject.CreateButton(1137, 1138)
end
function MapObject.CreateTeleportBone()
return MapObject.CreateButton(1139, 1140)
end
function MapObject.CreateCrystalBall()
return MapObject.CreateButton(1048, 1049, true)
end
function MapObject.CreateSealedKey(danceDuration)
return MapObject.CreateItem(1057).WithDancing(danceDuration)
end
function MapObject.CreateOldBox()
return MapObject.CreateItem(1001).WithDancing(3000)
end
function MapObject.CreateRegularBox()
return MapObject.CreateItem(1042).WithDancing(4000)
end
function MapObject.CreateLuxuriousBox()
return MapObject.CreateItem(1043).WithDancing(5000)
end
function MapObject.CreateRandomEffectBox()
return MapObject.CreateItem(1068).WithDancing(3000)
end
return MapObject;