Fixed Family Crest getting stuck when the drop from Chronozon is not picked up (fight is now repeatable if item is lost)

This commit is contained in:
GregF 2024-03-17 09:01:42 +00:00 committed by Ryan
parent b8a887b319
commit 675f0c1e37
3 changed files with 57 additions and 59 deletions

View file

@ -11996,7 +11996,7 @@
{
"minAmount": "1",
"weight": "100.0",
"id": "526",
"id": "592",
"maxAmount": "1"
},
{

View file

@ -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<Unit> {
val triggers = ArrayList<Location>()
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<Unit> {
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

View file

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