mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2026-08-22 02:45:10 -06:00
convert plugin dynamic region to not a plugin
This commit is contained in:
parent
d879416a85
commit
ce85d62e39
3 changed files with 70 additions and 111 deletions
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue