Improved performance of champion's challenge scroll handling

This commit is contained in:
ceikry 2023-06-15 11:49:27 -05:00 committed by Ryan
parent 417db14d5c
commit caad0ceaf9

View file

@ -7,13 +7,14 @@ import core.game.node.entity.npc.NPC
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
import core.game.node.item.GroundItemManager import core.game.node.item.GroundItemManager
import core.game.node.item.Item import core.game.node.item.Item
import core.tools.colorize import core.tools.*
import core.game.world.GameWorld
import org.rs09.consts.Items import org.rs09.consts.Items
import org.rs09.consts.NPCs import org.rs09.consts.NPCs
/** /**
* Handles the drop for champion challenge. * Handles the drop for champion challenge.
* @authors Phil, Skelsoft * @authors Phil, Skelsoft, Ceikry
*/ */
class ChampionScrollsDropHandler : ChampionScrollsEventHookBase() { class ChampionScrollsDropHandler : ChampionScrollsEventHookBase() {
@ -70,9 +71,6 @@ class ChampionScrollsDropHandler : ChampionScrollsEventHookBase() {
NPCs.CAVE_GOBLIN_GUARD_2073, NPCs.CAVE_GOBLIN_GUARD_2074, NPCs.CAVE_GOBLIN_GUARD_2073, NPCs.CAVE_GOBLIN_GUARD_2074,
NPCs.GOBLIN_GUARD_489, NPCs.GOBLIN_GUARD_6496, NPCs.GOBLIN_GUARD_6497, NPCs.GOBLIN_GUARD_489, NPCs.GOBLIN_GUARD_6496, NPCs.GOBLIN_GUARD_6497,
)
private val UNIQUE_GOBLINS = intArrayOf(
NPCs.SERGEANT_GRIMSPIKE_6265, NPCs.SERGEANT_GRIMSPIKE_6265,
NPCs.SERGEANT_STEELWILL_6263, NPCs.SERGEANT_STEELWILL_6263,
NPCs.SERGEANT_STRONGSTACK_6261 NPCs.SERGEANT_STRONGSTACK_6261
@ -107,9 +105,6 @@ class ChampionScrollsDropHandler : ChampionScrollsEventHookBase() {
NPCs.SKELETON_HERO_6103, NPCs.SKELETON_BRUTE_6104, NPCs.SKELETON_WARLORD_6105, NPCs.SKELETON_HERO_6103, NPCs.SKELETON_BRUTE_6104, NPCs.SKELETON_WARLORD_6105,
NPCs.SKELETON_HEAVY_6106, NPCs.SKELETON_THUG_6107, NPCs.SKELETON_HEAVY_6106, NPCs.SKELETON_THUG_6107,
)
private val UNIQUE_SKELETONS = intArrayOf(
NPCs.NAZASTAROOL_508, NPCs.NAZASTAROOL_508,
NPCs.UNDEAD_ONE_5353, NPCs.UNDEAD_ONE_5354, NPCs.UNDEAD_ONE_5355, NPCs.UNDEAD_ONE_5353, NPCs.UNDEAD_ONE_5354, NPCs.UNDEAD_ONE_5355,
@ -158,9 +153,6 @@ class ChampionScrollsDropHandler : ChampionScrollsEventHookBase() {
NPCs.ZOMBIE_SWAB_2843, NPCs.ZOMBIE_SWAB_2845, NPCs.ZOMBIE_SWAB_2843, NPCs.ZOMBIE_SWAB_2845,
NPCs.ZOMBIE_SWAB_2846, NPCs.ZOMBIE_SWAB_2847, NPCs.ZOMBIE_SWAB_2846, NPCs.ZOMBIE_SWAB_2847,
NPCs.ZOMBIE_SWAB_2848, NPCs.ZOMBIE_SWAB_2848,
)
private val UNIQUE_ZOMBIES = intArrayOf(
NPCs.NAZASTAROOL_507, NPCs.NAZASTAROOL_507,
NPCs.SLASH_BASH_2060, NPCs.SOREBONES_5627, NPCs.SOREBONES_5628, NPCs.SLASH_BASH_2060, NPCs.SOREBONES_5627, NPCs.SOREBONES_5628,
@ -172,9 +164,6 @@ class ChampionScrollsDropHandler : ChampionScrollsEventHookBase() {
NPCs.ZOGRE_2044, NPCs.ZOGRE_2045, NPCs.ZOGRE_2046, NPCs.ZOGRE_2047, NPCs.ZOGRE_2048, NPCs.ZOGRE_2044, NPCs.ZOGRE_2045, NPCs.ZOGRE_2046, NPCs.ZOGRE_2047, NPCs.ZOGRE_2048,
NPCs.ZOGRE_2049, NPCs.ZOGRE_2051, NPCs.ZOGRE_2052, NPCs.ZOGRE_2053, NPCs.ZOGRE_2054, NPCs.ZOGRE_2049, NPCs.ZOGRE_2051, NPCs.ZOGRE_2052, NPCs.ZOGRE_2053, NPCs.ZOGRE_2054,
NPCs.ZOGRE_2055, NPCs.ZOGRE_2055,
)
private val UNDEAD_LUMBERJACKS = intArrayOf(
NPCs.UNDEAD_LUMBERJACK_1524, NPCs.UNDEAD_LUMBERJACK_1525, NPCs.UNDEAD_LUMBERJACK_5678, NPCs.UNDEAD_LUMBERJACK_1524, NPCs.UNDEAD_LUMBERJACK_1525, NPCs.UNDEAD_LUMBERJACK_5678,
NPCs.UNDEAD_LUMBERJACK_5679, NPCs.UNDEAD_LUMBERJACK_5680, NPCs.UNDEAD_LUMBERJACK_5681, NPCs.UNDEAD_LUMBERJACK_5679, NPCs.UNDEAD_LUMBERJACK_5680, NPCs.UNDEAD_LUMBERJACK_5681,
NPCs.UNDEAD_LUMBERJACK_5682, NPCs.UNDEAD_LUMBERJACK_5683, NPCs.UNDEAD_LUMBERJACK_5684, NPCs.UNDEAD_LUMBERJACK_5682, NPCs.UNDEAD_LUMBERJACK_5683, NPCs.UNDEAD_LUMBERJACK_5684,
@ -213,9 +202,6 @@ class ChampionScrollsDropHandler : ChampionScrollsEventHookBase() {
NPCs.ICE_GIANT_111, NPCs.ICE_GIANT_3072, NPCs.ICE_GIANT_4685, NPCs.ICE_GIANT_4686, NPCs.ICE_GIANT_111, NPCs.ICE_GIANT_3072, NPCs.ICE_GIANT_4685, NPCs.ICE_GIANT_4686,
NPCs.ICE_GIANT_4687, NPCs.ICE_GIANT_4687,
)
private val UNIQUE_GIANTS = intArrayOf(
NPCs.BLACK_KNIGHT_TITAN_221, NPCs.BLACK_KNIGHT_TITAN_221,
NPCs.CYCLOPS_116, NPCs.CYCLOPS_4291, NPCs.CYCLOPS_4292, NPCs.CYCLOPS_6078, NPCs.CYCLOPS_116, NPCs.CYCLOPS_4291, NPCs.CYCLOPS_4292, NPCs.CYCLOPS_6078,
@ -247,91 +233,47 @@ class ChampionScrollsDropHandler : ChampionScrollsEventHookBase() {
Items.CHAMPION_SCROLL_6799, Items.CHAMPION_SCROLL_6798, Items.CHAMPION_SCROLL_6804, Items.CHAMPION_SCROLL_6799, Items.CHAMPION_SCROLL_6798, Items.CHAMPION_SCROLL_6804,
Items.CHAMPION_SCROLL_6805 Items.CHAMPION_SCROLL_6805
) )
val idMap = HashMap<Int, Int>()
init {
for (id in IMPS)
idMap[id] = 0
for (id in GOBLINS)
idMap[id] = 1
for (id in SKELETONS)
idMap[id] = 2
for (id in ZOMBIES)
idMap[id] = 3
for (id in GIANTS)
idMap[id] = 4
for (id in HOBGOBLINS)
idMap[id] = 5
for (id in JOGRES)
idMap[id] = 8
for (id in LESSER_DEMONS)
idMap[id] = 9
idMap[GHOUL] = 6
idMap[EARTH_WARRIOR] = 7
}
} }
override fun onNpcKilled(player: Player, event: NPCKillEvent) { override fun onNpcKilled(player: Player, event: NPCKillEvent) {
if (player.isArtificial) return
if (player.questRepository.points >= 32) { if (player.questRepository.points >= 32) {
val npc = event.npc val scrollType = idMap[event.npc.id] ?: return
val npcName = npc.name rollForScroll (player, scrollType, event.npc)
with(npcName) {
when {
contains("imp", true) -> {
if (IMPS.contains(npc.id)) {
rollForScroll(player, 0, npc)
}
}
!contains("hob", true) && contains("goblin", true) || UNIQUE_GOBLINS.contains(npc.id) -> {
if (GOBLINS.contains(npc.id) || UNIQUE_GOBLINS.contains(npc.id)) {
rollForScroll(player, 1, npc)
}
}
contains("skeleton", true) || UNIQUE_SKELETONS.contains(npc.id) -> {
println("Monster killed contains the name Skeleton")
if (SKELETONS.contains(npc.id) || UNIQUE_SKELETONS.contains(npc.id)) {
rollForScroll(player, 2, npc)
}
}
contains("zombie", true) || contains("lumberjack") || UNIQUE_ZOMBIES.contains(npc.id) -> {
if (ZOMBIES.contains(npc.id) || UNDEAD_LUMBERJACKS.contains(npc.id) || UNIQUE_ZOMBIES.contains(npc.id)) {
rollForScroll(player, 3, npc)
}
}
contains("giant", true) || UNIQUE_GIANTS.contains(npc.id) -> {
if (GIANTS.contains(npc.id) || UNIQUE_GIANTS.contains(npc.id)) {
rollForScroll(player, 4, npc)
}
}
contains("hobgoblin", true) -> {
if (HOBGOBLINS.contains(npc.id)) {
rollForScroll(player, 5, npc)
}
}
contains("ghoul", true) -> {
if (npc.id == GHOUL) {
rollForScroll(player, 6, npc)
}
}
contains("earth warrior", true) -> {
if (npc.id == EARTH_WARRIOR) {
rollForScroll(player, 7, npc)
}
}
contains("jogre", true) -> {
if (JOGRES.contains(npc.id)) {
rollForScroll(player, 8, npc)
}
}
contains("lesser demon", true) || npc.id == ZAKLN -> {
if (LESSER_DEMONS.contains(npc.id) || npc.id == ZAKLN) {
rollForScroll(player, 9, npc)
}
}
contains("champion", true) -> {
return
}
}
}
} }
} }
private fun rollForScroll(player: Player, scroll: Int, npc: NPC) { private fun rollForScroll(player: Player, scroll: Int, npc: NPC) {
val scrollID = SCROLLS[scroll] val scrollID = SCROLLS[scroll]
val roll = (1..5000).random() val roll = RandomFunction.roll(if (GameWorld.settings!!.isDevMode) 5 else 5000)
if (roll <= 1) { if (roll) {
GroundItemManager.create(Item(scrollID), npc.location, player) GroundItemManager.create(Item(scrollID), npc.location, player)
sendMessage(player, colorize("%RA Champion's scroll falls to the ground as you slay your opponent.")) sendMessage(player, colorize("%RA Champion's scroll falls to the ground as you slay your opponent."))
sendNews("${player.username} has received a Champion's scroll as a drop!")
} }
} }
} }