diff --git a/Server/src/main/content/region/kandarin/seers/quest/elementalworkshop2/EW2ActivityPlugin.kt b/Server/src/main/content/region/kandarin/seers/quest/elementalworkshop2/EW2ActivityPlugin.kt deleted file mode 100644 index c20595485..000000000 --- a/Server/src/main/content/region/kandarin/seers/quest/elementalworkshop2/EW2ActivityPlugin.kt +++ /dev/null @@ -1,78 +0,0 @@ -package content.region.kandarin.seers.quest.elementalworkshop2 - -import content.region.kandarin.seers.quest.elementalworkshop2.EW2Listeners.Companion.syncCart -import content.region.kandarin.seers.quest.elementalworkshop2.EW2Listeners.Companion.syncCrane -import content.region.kandarin.seers.quest.elementalworkshop2.EW2Listeners.Companion.syncFan -import content.region.kandarin.seers.quest.elementalworkshop2.EW2Listeners.Companion.syncSteamPress -import content.region.kandarin.seers.quest.elementalworkshop2.EW2Listeners.Companion.syncTank -import content.region.kandarin.seers.quest.elementalworkshop2.EW2Listeners.Companion.syncTankDoor -import core.api.* -import core.game.activity.ActivityPlugin -import core.game.node.entity.Entity -import core.game.node.entity.player.Player -import core.game.world.map.Location -import core.game.world.map.build.DynamicRegion -import core.plugin.Initializable - -/** - * Handles an instanced Elemental Workshop II session. - */ - -@Initializable -class EW2ActivityPlugin : ActivityPlugin { - - // blank constructor because ... - constructor() : super("EW2 Workshop", true, false, false) - - // real constructor - constructor(player: Player) : super("EW2 Workshop", true, false, false) { - this.player = player - } - - // more empty shit - override fun configure() { - } - - // starts the dynamic region - override fun start(player: Player, login: Boolean, vararg args: Any): Boolean { - player.properties.teleportLocation = base.transform(35, 35, 2) - return super.start(player, login, *args) - } - - // the exit location back in EW1 workshop - override fun getSpawnLocation(): Location = Location.create(2719, 9892, 0) - - // creates the region - override fun newInstance(p: Player): ActivityPlugin { - val plugin = EW2ActivityPlugin(p) - plugin.region = DynamicRegion.create(7760) - plugin.setRegionBase() - plugin.register(plugin.region.borders) - return plugin - } - - // sync the workshop state - override fun enter(e: Entity?): Boolean { - if (e is Player) { - - // need a slight delay or all the stuff doesn't load right - queueScript(player, 1) { - syncCrane(player) - syncCart(player) - syncSteamPress(player) - syncTank(player) - syncTankDoor(player) - syncFan(player) - return@queueScript stopExecuting(player) - } - } - - return super.enter(e) - } - - // this should shut down the dynamic region, I hope - override fun leave(e: Entity, logout: Boolean): Boolean { - unregisterRegion(region.id) - return super.leave(e, logout) - } -} \ No newline at end of file diff --git a/Server/src/main/content/region/kandarin/seers/quest/elementalworkshop2/EW2Session.kt b/Server/src/main/content/region/kandarin/seers/quest/elementalworkshop2/EW2Session.kt new file mode 100644 index 000000000..c5fbc81ca --- /dev/null +++ b/Server/src/main/content/region/kandarin/seers/quest/elementalworkshop2/EW2Session.kt @@ -0,0 +1,70 @@ +package content.region.kandarin.seers.quest.elementalworkshop2 + +import content.region.kandarin.seers.quest.elementalworkshop2.EW2Listeners.Companion.syncCart +import content.region.kandarin.seers.quest.elementalworkshop2.EW2Listeners.Companion.syncCrane +import content.region.kandarin.seers.quest.elementalworkshop2.EW2Listeners.Companion.syncFan +import content.region.kandarin.seers.quest.elementalworkshop2.EW2Listeners.Companion.syncSteamPress +import content.region.kandarin.seers.quest.elementalworkshop2.EW2Listeners.Companion.syncTank +import content.region.kandarin.seers.quest.elementalworkshop2.EW2Listeners.Companion.syncTankDoor +import core.api.* +import core.game.node.entity.Entity +import core.game.node.entity.player.Player +import core.game.world.map.Location +import core.game.world.map.build.DynamicRegion +import core.game.world.map.zone.ZoneBorders + +/** + * Handles an instanced Elemental Workshop II session. + */ + +class EW2Session(val player: Player? = null) : MapArea { + + lateinit var region: DynamicRegion + lateinit var base: Location + + // borders will be registered dynamically in start() + override fun defineAreaBorders(): Array { + return emptyArray() + } + + // start() is triggered by the listener for Scenery.HATCH_18596 + fun start() { + val p = player ?: return + + region = DynamicRegion.create(7760) + base = region.baseLocation + + zone.register(getRegionBorders(region.id)) + setAttribute(p, "ew2-session", this) + teleport(p, base.transform(35, 35, 2)) + + // logout listener returns player to the EW1 workshop + registerLogoutListener(p, "ew2-logout") { + val session = getAttribute(p, "ew2-session", null) ?: return@registerLogoutListener + p.location = Location.create(2719, 9892, 0) + p.locks.unlockTeleport() + session.cleanup(p) + } + + // sync the workshop state + syncCrane(p) + syncCart(p) + syncSteamPress(p) + syncTank(p) + syncTankDoor(p) + syncFan(p) + } + + // clean up the instanced area + override fun areaLeave(entity: Entity, logout: Boolean) { + if (entity is Player && entity == player && !logout) { + cleanup(entity) + } + } + + fun cleanup(p: Player) { + zone.unregister(getRegionBorders(region.id)) + clearLogoutListener(p, "ew2-logout") + removeAttribute(p, "ew2-session") + } +} \ No newline at end of file diff --git a/Server/src/main/content/region/kandarin/seers/quest/elementalworkshop2/EW2Zone.kt b/Server/src/main/content/region/kandarin/seers/quest/elementalworkshop2/EW2Zone.kt deleted file mode 100644 index 349bd3b43..000000000 --- a/Server/src/main/content/region/kandarin/seers/quest/elementalworkshop2/EW2Zone.kt +++ /dev/null @@ -1,33 +0,0 @@ -package content.region.kandarin.seers.quest.elementalworkshop2 - -import content.data.Quests -import content.region.kandarin.seers.quest.elementalworkshop2.ElementalWorkshop2.Companion.EW2StageVarbit -import core.api.* -import core.game.activity.ActivityManager -import core.game.node.entity.Entity -import core.game.node.entity.player.Player -import core.game.world.map.zone.ZoneBorders - -/** - * Handles an instanced Elemental Workshop II session. - */ - -class EW2Zone : MapArea { - override fun defineAreaBorders(): Array { - return arrayOf(ZoneBorders(1920,5120,1983,5183)) - } - - override fun areaEnter(entity: Entity) { - if (entity is Player) { - - // start the instanced workshop region - ActivityManager.start(entity, "EW2 Workshop", false) - - // advance quest stage - if (getQuestStage(entity, Quests.ELEMENTAL_WORKSHOP_II) <= 5) { - setQuestStage(entity, Quests.ELEMENTAL_WORKSHOP_II, 6) - setVarbit(entity, EW2StageVarbit, 6, true) - } - } - } -} \ No newline at end of file