Fixed chinchompas not exploding on death
This commit is contained in:
@@ -44609,7 +44609,9 @@
|
|||||||
"strength_level": "1",
|
"strength_level": "1",
|
||||||
"id": "5079",
|
"id": "5079",
|
||||||
"range_level": "1",
|
"range_level": "1",
|
||||||
"attack_level": "1"
|
"attack_level": "1",
|
||||||
|
"death_animation": "5183",
|
||||||
|
"examine": "Handle with care."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"examine": "It looks fluffy and cute; it's probably deadly.",
|
"examine": "It looks fluffy and cute; it's probably deadly.",
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
package content.global.handlers.npc
|
||||||
|
|
||||||
|
import core.api.*
|
||||||
|
import core.api.playGlobalAudio
|
||||||
|
import core.api.sendGraphics
|
||||||
|
import core.game.node.entity.Entity
|
||||||
|
import core.game.node.entity.npc.NPCBehavior
|
||||||
|
import org.rs09.consts.NPCs
|
||||||
|
import core.game.node.entity.npc.NPC
|
||||||
|
import core.game.node.entity.player.Player
|
||||||
|
import core.tools.RandomFunction
|
||||||
|
import core.game.world.update.flag.context.Graphics
|
||||||
|
import core.game.node.entity.combat.ImpactHandler.HitsplatType;
|
||||||
|
|
||||||
|
private val chinchompaIDs = intArrayOf(
|
||||||
|
NPCs.CHINCHOMPA_5079,
|
||||||
|
NPCs.CARNIVOROUS_CHINCHOMPA_5080
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Minimal evasive approach to the Chinchompas exploding on death cause by combat and not by trapping.
|
||||||
|
*/
|
||||||
|
class ChinchompaDeathListener: NPCBehavior(*chinchompaIDs) {
|
||||||
|
override fun onDeathFinished(self: NPC, killer: Entity) {
|
||||||
|
|
||||||
|
// If it 'died' from getting trapped an attribute is set of 'hunter'.
|
||||||
|
if (!self.attributes.containsKey("hunter") && killer is Player) {
|
||||||
|
val explosionLoc = self.location
|
||||||
|
val validExplosionDmgTiles = explosionLoc.surroundingTiles
|
||||||
|
|
||||||
|
val chinExplosionGFX = Graphics(157, 96)
|
||||||
|
sendGraphics(chinExplosionGFX, explosionLoc)
|
||||||
|
playGlobalAudio(explosionLoc, 158)
|
||||||
|
|
||||||
|
if (validExplosionDmgTiles.contains(killer.location)) {
|
||||||
|
//As weird this looks, it does allow to have a hit from 0 to 2
|
||||||
|
val hitAmount = RandomFunction.random(0, 3)
|
||||||
|
impact(killer, hitAmount, HitsplatType.NORMAL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* At content.global.skill.hunter.TrapSetting
|
||||||
|
* sets an attribute of 'hunter' during it's getCatchPulse for reward rolling, but it never cleans it up after.
|
||||||
|
* These NPCs is a member of NPC class although exists a HunterNPC class, but it's mainly used for imps.
|
||||||
|
* Logically you'd do this after death finishes, but it would interfere with the reward rolls and I fear it may affect other hunter NPCs.
|
||||||
|
*/
|
||||||
|
override fun onRespawn(self: NPC) {
|
||||||
|
self.removeAttribute("hunter")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -35,6 +35,7 @@ public class RandomFunction {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Method used to ease the access of the random class.
|
* Method used to ease the access of the random class.
|
||||||
|
* In certain cases, it is inclusive from the min value and exclusive from the max values specified.
|
||||||
* @param a the minimum random value.
|
* @param a the minimum random value.
|
||||||
* @param b the maximum random value.
|
* @param b the maximum random value.
|
||||||
* @return the value as an {@link Integer}.
|
* @return the value as an {@link Integer}.
|
||||||
|
|||||||
Reference in New Issue
Block a user