convert plugin dynamic region to not a plugin

This commit is contained in:
aidan 2026-07-09 10:56:30 -05:00
parent d879416a85
commit ce85d62e39
3 changed files with 70 additions and 111 deletions

View file

@ -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)
}
}

View file

@ -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<ZoneBorders> {
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<EW2Session?>(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")
}
}

View file

@ -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<ZoneBorders> {
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)
}
}
}
}