diff --git a/Server/data/configs/drop_tables.json b/Server/data/configs/drop_tables.json index 47d74735a..3794ccbe0 100644 --- a/Server/data/configs/drop_tables.json +++ b/Server/data/configs/drop_tables.json @@ -11996,7 +11996,7 @@ { "minAmount": "1", "weight": "100.0", - "id": "526", + "id": "592", "maxAmount": "1" }, { diff --git a/Server/src/main/content/region/misthalin/varrock/quest/familycrest/ChronozonCaveZone.kt b/Server/src/main/content/region/misthalin/varrock/quest/familycrest/ChronozonCaveZone.kt index a7b458247..fc2655329 100644 --- a/Server/src/main/content/region/misthalin/varrock/quest/familycrest/ChronozonCaveZone.kt +++ b/Server/src/main/content/region/misthalin/varrock/quest/familycrest/ChronozonCaveZone.kt @@ -11,23 +11,19 @@ import core.game.world.map.zone.ZoneBuilder import core.plugin.Initializable import core.plugin.Plugin import content.region.misthalin.varrock.quest.familycrest.ChronozonNPC +import core.game.node.item.Item +import org.rs09.consts.Items +import org.rs09.consts.NPCs @Initializable class ChronozonCaveZone: MapZone("FC ChronozoneZone", true), Plugin { - val triggers = ArrayList() - var chronozon = ChronozonNPC(667, Location(3086, 9936, 0)) + val spawnLoc = Location(3086, 9936, 0) + var chronozon = ChronozonNPC(NPCs.CHRONOZON_667, spawnLoc) + override fun configure() { register(ZoneBorders(3082, 9929, 3091, 9940)) - triggers.add(Location.create(3083, 9939)) - triggers.add(Location.create(3084, 9939)) - triggers.add(Location.create(3085, 9939)) - triggers.add(Location.create(3086, 9939)) - triggers.add(Location.create(3087, 9939)) - triggers.add(Location.create(3088, 9939)) - triggers.add(Location.create(3089, 9939)) - triggers.add(Location.create(3090, 9939)) } override fun move(e: Entity?, from: Location?, to: Location?): Boolean { @@ -37,16 +33,17 @@ class ChronozonCaveZone: MapZone("FC ChronozoneZone", true), Plugin { override fun enter(e: Entity?): Boolean { if (e != null) { if (e.isPlayer) { - chronozon = ChronozonNPC(667, Location(3086, 9936, 0)) - var player = e as Player - if (player.questRepository.getQuest("Family Crest").getStage(e) == 19 && !RegionManager.getLocalNpcs( - Location(3086, 9936, 0), - 5 - ).contains(chronozon) - ) { - chronozon.setPlayer(e) - chronozon.isRespawn = false - chronozon.init() + val player = e as Player + if (player.questRepository.getQuest("Family Crest").getStage(e) in (19..99) && + !player.hasItem(Item(Items.CREST_PART_781))){ + // Chronozon is allowed to spawn (quest stage right and the player doesn't have the crest part) + // Now check there is not one already + if(!RegionManager.getLocalNpcs(spawnLoc, 5).contains(chronozon)){ + chronozon.setPlayer(e) + chronozon.isRespawn = false + chronozon.location = spawnLoc + chronozon.init() + } } } return true diff --git a/Server/src/main/content/region/misthalin/varrock/quest/familycrest/ChronozonNPC.kt b/Server/src/main/content/region/misthalin/varrock/quest/familycrest/ChronozonNPC.kt index 594e93210..6bdbc0d27 100644 --- a/Server/src/main/content/region/misthalin/varrock/quest/familycrest/ChronozonNPC.kt +++ b/Server/src/main/content/region/misthalin/varrock/quest/familycrest/ChronozonNPC.kt @@ -6,32 +6,32 @@ import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.AbstractNPC import core.game.node.entity.player.Player import core.game.world.map.Location +import org.rs09.consts.NPCs +class ChronozonNPC(id: Int, location: Location?) : AbstractNPC(NPCs.CHRONOZON_667, Location(3086, 9936, 0)){ -class ChronozonNPC(id: Int, location: Location?) : AbstractNPC(667, Location(3086, 9936, 0)){ + private lateinit var targetplayer: Player - lateinit var m_targetPlayer: Player + private var amountOfFireDamageTaken: Int = 0 - var m_amountOfFireDamageTaken: Int = 0 + private var amountOfAirDamageTaken: Int = 0 - var m_amountOfAirDamageTaken: Int = 0 + private var amountOfWaterDamageTaken: Int = 0 - var m_amountOfWaterDamageTaken: Int = 0 - - var m_amountOfEarthDamageTaken: Int = 0 + private var amountOfEarthDamageTaken: Int = 0 override fun construct(id: Int, location: Location?, vararg objects: Any?): AbstractNPC { return ChronozonNPC(id, location) } override fun getIds(): IntArray { - return intArrayOf(667) + return intArrayOf(NPCs.CHRONOZON_667) } override fun handleTickActions() { super.handleTickActions() - if (!m_targetPlayer.isActive || m_targetPlayer.getLocation().getDistance(getLocation()) > 15) { + if (!targetplayer.isActive || targetplayer.getLocation().getDistance(getLocation()) > 15) { clear() } @@ -39,8 +39,8 @@ class ChronozonNPC(id: Int, location: Location?) : AbstractNPC(667, Location(308 override fun checkImpact(state: BattleState?) { if (state != null) { - if(m_amountOfAirDamageTaken == 0 || m_amountOfWaterDamageTaken == 0 || - m_amountOfEarthDamageTaken == 0 || m_amountOfFireDamageTaken == 0) { + if(amountOfAirDamageTaken == 0 || amountOfWaterDamageTaken == 0 || + amountOfEarthDamageTaken == 0 || amountOfFireDamageTaken == 0) { if(state.style != CombatStyle.MAGIC || state.totalDamage >= skills.lifepoints) { state.neutralizeHits() } @@ -48,59 +48,60 @@ class ChronozonNPC(id: Int, location: Location?) : AbstractNPC(667, Location(308 if(state.spell != null) { if(state.spell.spellId == 24) { - if(state.totalDamage > 0 && m_amountOfAirDamageTaken == 0) { - m_targetPlayer.sendMessage("Chronozon weakens...") + if(state.totalDamage > 0 && amountOfAirDamageTaken == 0) { + targetplayer.sendMessage("Chronozon weakens...") } - m_amountOfAirDamageTaken += state.totalDamage + amountOfAirDamageTaken += state.totalDamage } if(state.spell.spellId == 27) { - if(state.totalDamage > 0 && m_amountOfWaterDamageTaken == 0) { - m_targetPlayer.sendMessage("Chronozon weakens...") + if(state.totalDamage > 0 && amountOfWaterDamageTaken == 0) { + targetplayer.sendMessage("Chronozon weakens...") } - m_amountOfWaterDamageTaken += state.totalDamage + amountOfWaterDamageTaken += state.totalDamage } if(state.spell.spellId == 33) { - if(state.totalDamage > 0 && m_amountOfEarthDamageTaken == 0) { - m_targetPlayer.sendMessage("Chronozon weakens...") + if(state.totalDamage > 0 && amountOfEarthDamageTaken == 0) { + targetplayer.sendMessage("Chronozon weakens...") } - m_amountOfEarthDamageTaken += state.totalDamage + amountOfEarthDamageTaken += state.totalDamage } if(state.spell.spellId == 38) { - if(state.totalDamage > 0 && m_amountOfFireDamageTaken == 0) { - m_targetPlayer.sendMessage("Chronozon weakens...") + if(state.totalDamage > 0 && amountOfFireDamageTaken == 0) { + targetplayer.sendMessage("Chronozon weakens...") } - m_amountOfFireDamageTaken += state.totalDamage + amountOfFireDamageTaken += state.totalDamage } } } } - override fun isAttackable(entity: Entity, style: CombatStyle?, message: Boolean): Boolean { - return entity == m_targetPlayer && - m_targetPlayer.questRepository.getQuest("Family Crest").getStage(m_targetPlayer) == 19 && - super.isAttackable(entity, style, message) - } - - override fun clear() { - super.clear() - } - override fun finalizeDeath(killer: Entity?) { - if(killer == m_targetPlayer) { - m_targetPlayer.questRepository.getQuest("Family Crest").setStage(m_targetPlayer, 20) + if(killer == targetplayer) { + if (targetplayer.questRepository.getStage("Family Crest") != 20){ + targetplayer.questRepository.getQuest("Family Crest").setStage(targetplayer, 20) + } } clear() super.finalizeDeath(killer) - } + fun setPlayer(player: Player){ - m_targetPlayer = player + targetplayer = player + } + + override fun init() { + // Make sure to reset damage taken when spawning in + amountOfFireDamageTaken = 0 + amountOfAirDamageTaken= 0 + amountOfWaterDamageTaken= 0 + amountOfEarthDamageTaken= 0 + super.init() + } } -//3086, 9936, 0