mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2025-12-09 16:45:44 -07:00
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:
parent
b8a887b319
commit
675f0c1e37
3 changed files with 57 additions and 59 deletions
|
|
@ -11996,7 +11996,7 @@
|
||||||
{
|
{
|
||||||
"minAmount": "1",
|
"minAmount": "1",
|
||||||
"weight": "100.0",
|
"weight": "100.0",
|
||||||
"id": "526",
|
"id": "592",
|
||||||
"maxAmount": "1"
|
"maxAmount": "1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -11,23 +11,19 @@ import core.game.world.map.zone.ZoneBuilder
|
||||||
import core.plugin.Initializable
|
import core.plugin.Initializable
|
||||||
import core.plugin.Plugin
|
import core.plugin.Plugin
|
||||||
import content.region.misthalin.varrock.quest.familycrest.ChronozonNPC
|
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
|
@Initializable
|
||||||
class ChronozonCaveZone: MapZone("FC ChronozoneZone", true), Plugin<Unit> {
|
class ChronozonCaveZone: MapZone("FC ChronozoneZone", true), Plugin<Unit> {
|
||||||
|
|
||||||
val triggers = ArrayList<Location>()
|
val spawnLoc = Location(3086, 9936, 0)
|
||||||
var chronozon = ChronozonNPC(667, Location(3086, 9936, 0))
|
var chronozon = ChronozonNPC(NPCs.CHRONOZON_667, spawnLoc)
|
||||||
|
|
||||||
override fun configure() {
|
override fun configure() {
|
||||||
register(ZoneBorders(3082, 9929, 3091, 9940))
|
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 {
|
override fun move(e: Entity?, from: Location?, to: Location?): Boolean {
|
||||||
|
|
@ -37,18 +33,19 @@ class ChronozonCaveZone: MapZone("FC ChronozoneZone", true), Plugin<Unit> {
|
||||||
override fun enter(e: Entity?): Boolean {
|
override fun enter(e: Entity?): Boolean {
|
||||||
if (e != null) {
|
if (e != null) {
|
||||||
if (e.isPlayer) {
|
if (e.isPlayer) {
|
||||||
chronozon = ChronozonNPC(667, Location(3086, 9936, 0))
|
val player = e as Player
|
||||||
var player = e as Player
|
if (player.questRepository.getQuest("Family Crest").getStage(e) in (19..99) &&
|
||||||
if (player.questRepository.getQuest("Family Crest").getStage(e) == 19 && !RegionManager.getLocalNpcs(
|
!player.hasItem(Item(Items.CREST_PART_781))){
|
||||||
Location(3086, 9936, 0),
|
// Chronozon is allowed to spawn (quest stage right and the player doesn't have the crest part)
|
||||||
5
|
// Now check there is not one already
|
||||||
).contains(chronozon)
|
if(!RegionManager.getLocalNpcs(spawnLoc, 5).contains(chronozon)){
|
||||||
) {
|
|
||||||
chronozon.setPlayer(e)
|
chronozon.setPlayer(e)
|
||||||
chronozon.isRespawn = false
|
chronozon.isRespawn = false
|
||||||
|
chronozon.location = spawnLoc
|
||||||
chronozon.init()
|
chronozon.init()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|
|
||||||
|
|
@ -6,32 +6,32 @@ import core.game.node.entity.combat.CombatStyle
|
||||||
import core.game.node.entity.npc.AbstractNPC
|
import core.game.node.entity.npc.AbstractNPC
|
||||||
import core.game.node.entity.player.Player
|
import core.game.node.entity.player.Player
|
||||||
import core.game.world.map.Location
|
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
|
private var amountOfEarthDamageTaken: Int = 0
|
||||||
|
|
||||||
var m_amountOfEarthDamageTaken: Int = 0
|
|
||||||
|
|
||||||
override fun construct(id: Int, location: Location?, vararg objects: Any?): AbstractNPC {
|
override fun construct(id: Int, location: Location?, vararg objects: Any?): AbstractNPC {
|
||||||
return ChronozonNPC(id, location)
|
return ChronozonNPC(id, location)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getIds(): IntArray {
|
override fun getIds(): IntArray {
|
||||||
return intArrayOf(667)
|
return intArrayOf(NPCs.CHRONOZON_667)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handleTickActions() {
|
override fun handleTickActions() {
|
||||||
super.handleTickActions()
|
super.handleTickActions()
|
||||||
if (!m_targetPlayer.isActive || m_targetPlayer.getLocation().getDistance(getLocation()) > 15) {
|
if (!targetplayer.isActive || targetplayer.getLocation().getDistance(getLocation()) > 15) {
|
||||||
clear()
|
clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -39,8 +39,8 @@ class ChronozonNPC(id: Int, location: Location?) : AbstractNPC(667, Location(308
|
||||||
|
|
||||||
override fun checkImpact(state: BattleState?) {
|
override fun checkImpact(state: BattleState?) {
|
||||||
if (state != null) {
|
if (state != null) {
|
||||||
if(m_amountOfAirDamageTaken == 0 || m_amountOfWaterDamageTaken == 0 ||
|
if(amountOfAirDamageTaken == 0 || amountOfWaterDamageTaken == 0 ||
|
||||||
m_amountOfEarthDamageTaken == 0 || m_amountOfFireDamageTaken == 0) {
|
amountOfEarthDamageTaken == 0 || amountOfFireDamageTaken == 0) {
|
||||||
if(state.style != CombatStyle.MAGIC || state.totalDamage >= skills.lifepoints) {
|
if(state.style != CombatStyle.MAGIC || state.totalDamage >= skills.lifepoints) {
|
||||||
state.neutralizeHits()
|
state.neutralizeHits()
|
||||||
}
|
}
|
||||||
|
|
@ -48,59 +48,60 @@ class ChronozonNPC(id: Int, location: Location?) : AbstractNPC(667, Location(308
|
||||||
|
|
||||||
if(state.spell != null) {
|
if(state.spell != null) {
|
||||||
if(state.spell.spellId == 24) {
|
if(state.spell.spellId == 24) {
|
||||||
if(state.totalDamage > 0 && m_amountOfAirDamageTaken == 0) {
|
if(state.totalDamage > 0 && amountOfAirDamageTaken == 0) {
|
||||||
m_targetPlayer.sendMessage("Chronozon weakens...")
|
targetplayer.sendMessage("Chronozon weakens...")
|
||||||
}
|
}
|
||||||
m_amountOfAirDamageTaken += state.totalDamage
|
amountOfAirDamageTaken += state.totalDamage
|
||||||
}
|
}
|
||||||
|
|
||||||
if(state.spell.spellId == 27) {
|
if(state.spell.spellId == 27) {
|
||||||
if(state.totalDamage > 0 && m_amountOfWaterDamageTaken == 0) {
|
if(state.totalDamage > 0 && amountOfWaterDamageTaken == 0) {
|
||||||
m_targetPlayer.sendMessage("Chronozon weakens...")
|
targetplayer.sendMessage("Chronozon weakens...")
|
||||||
}
|
}
|
||||||
m_amountOfWaterDamageTaken += state.totalDamage
|
amountOfWaterDamageTaken += state.totalDamage
|
||||||
}
|
}
|
||||||
|
|
||||||
if(state.spell.spellId == 33) {
|
if(state.spell.spellId == 33) {
|
||||||
if(state.totalDamage > 0 && m_amountOfEarthDamageTaken == 0) {
|
if(state.totalDamage > 0 && amountOfEarthDamageTaken == 0) {
|
||||||
m_targetPlayer.sendMessage("Chronozon weakens...")
|
targetplayer.sendMessage("Chronozon weakens...")
|
||||||
}
|
}
|
||||||
m_amountOfEarthDamageTaken += state.totalDamage
|
amountOfEarthDamageTaken += state.totalDamage
|
||||||
}
|
}
|
||||||
|
|
||||||
if(state.spell.spellId == 38) {
|
if(state.spell.spellId == 38) {
|
||||||
if(state.totalDamage > 0 && m_amountOfFireDamageTaken == 0) {
|
if(state.totalDamage > 0 && amountOfFireDamageTaken == 0) {
|
||||||
m_targetPlayer.sendMessage("Chronozon weakens...")
|
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?) {
|
override fun finalizeDeath(killer: Entity?) {
|
||||||
if(killer == m_targetPlayer) {
|
if(killer == targetplayer) {
|
||||||
m_targetPlayer.questRepository.getQuest("Family Crest").setStage(m_targetPlayer, 20)
|
if (targetplayer.questRepository.getStage("Family Crest") != 20){
|
||||||
|
targetplayer.questRepository.getQuest("Family Crest").setStage(targetplayer, 20)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
clear()
|
clear()
|
||||||
super.finalizeDeath(killer)
|
super.finalizeDeath(killer)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun setPlayer(player: Player){
|
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
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue