From f2c25bc7ed0085ea723c3100bec659186fe91e8d Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 5 Jul 2025 03:14:34 -0400 Subject: [PATCH 001/123] Barb Assault: Reward Interface ( no gamble ) Blackboard Interface Queen help book Commander_Connad Dialog Penance Statues Dialog Private's Dialog Functioning Item Vending Machines Horns cause player to TELL!/Say Penance creatures Started Penance creature configs added Tutorial started ( Needs lots of work ) Game Arena Started ( Needs lots of work ) ContentAPI: added setInterfaceModel --- Server/data/configs/npc_configs.json | 258 +++++++++-- .../barbassault/BarbRewardInterface.kt | 378 ++++++++++++++++ .../minigame/barbassault/BarbassBlackBoard.kt | 129 ++++++ .../minigame/barbassault/BarbassDevHelper.kt | 77 ++++ .../minigame/barbassault/Barbassault.kt | 176 ++++++++ .../barbassault/BarbassaultListeners.kt | 143 +++++++ .../minigame/barbassault/BarbassaultTut.kt | 54 +++ .../minigame/barbassault/CommanderConnad.kt | 112 +++++ .../barbassault/PenanceStatueDialogues.kt | 55 +++ .../minigame/barbassault/QueenHelpBook.kt | 64 +++ .../barbassault/arena/BarbassaultGameArea.kt | 249 +++++++++++ .../minigame/barbassault/arena/HornHelper.kt | 59 +++ .../barbassault/arena/HornListeners.kt | 103 +++++ .../arena/WaveCompleteInterface.kt | 32 ++ .../arena/machines/AttackerMachine.kt | 40 ++ .../arena/machines/CollectorMachine.kt | 23 + .../arena/machines/DefenderMachine.kt | 53 +++ .../arena/machines/HealerMachine.kt | 65 +++ .../barbassault/arena/machines/ItemMachine.kt | 33 ++ .../arena/monsters/PenanceFighterNPC.kt | 59 +++ .../arena/monsters/PenanceHealerNPC.kt | 47 ++ .../arena/monsters/PenanceQueenNPC.kt | 34 ++ .../arena/monsters/PenanceRangerNPC.kt | 60 +++ .../arena/monsters/PenanceRunnerNPC.kt | 50 +++ .../arena/monsters/PenanceSpawnNPC.kt | 12 + .../barbassault/arena/scenery/DefenderTrap.kt | 79 ++++ .../barbassault/arena/scenery/EggCannon.kt | 37 ++ .../barbassault/arena/scenery/HornOfGlory.kt | 82 ++++ .../barbassault/lobby/BarbassaultLobby.kt | 403 ++++++++++++++++++ .../barbassault/lobby/PrivatesDialogues.kt | 85 ++++ .../minigame/barbassault/party/Party.kt | 106 +++++ .../barbassault/party/PartyHandler.kt | 39 ++ .../barbassault/party/PartyService.kt | 107 +++++ 33 files changed, 3266 insertions(+), 37 deletions(-) create mode 100644 Server/src/main/content/minigame/barbassault/BarbRewardInterface.kt create mode 100644 Server/src/main/content/minigame/barbassault/BarbassBlackBoard.kt create mode 100644 Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt create mode 100644 Server/src/main/content/minigame/barbassault/Barbassault.kt create mode 100644 Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt create mode 100644 Server/src/main/content/minigame/barbassault/BarbassaultTut.kt create mode 100644 Server/src/main/content/minigame/barbassault/CommanderConnad.kt create mode 100644 Server/src/main/content/minigame/barbassault/PenanceStatueDialogues.kt create mode 100644 Server/src/main/content/minigame/barbassault/QueenHelpBook.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/HornHelper.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/HornListeners.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/machines/AttackerMachine.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/machines/CollectorMachine.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/machines/DefenderMachine.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/machines/HealerMachine.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/machines/ItemMachine.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/monsters/PenanceHealerNPC.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/monsters/PenanceQueenNPC.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/monsters/PenanceSpawnNPC.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt create mode 100644 Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt create mode 100644 Server/src/main/content/minigame/barbassault/lobby/PrivatesDialogues.kt create mode 100644 Server/src/main/content/minigame/barbassault/party/Party.kt create mode 100644 Server/src/main/content/minigame/barbassault/party/PartyHandler.kt create mode 100644 Server/src/main/content/minigame/barbassault/party/PartyService.kt diff --git a/Server/data/configs/npc_configs.json b/Server/data/configs/npc_configs.json index 123422daf..f4407c43a 100644 --- a/Server/data/configs/npc_configs.json +++ b/Server/data/configs/npc_configs.json @@ -45536,8 +45536,6 @@ "death_animation": "5937", "name": "Penance Ranger", "defence_level": "1", - "safespot": null, - "lifepoints": "10", "strength_level": "1", "id": "5229", "aggressive": "true", @@ -45550,7 +45548,23 @@ "melee_animation": "5395", "respawn_delay": "60", "defence_animation": "5396", - "death_animation": "5937", + "death_animation": "5397", + "name": "Penance Ranger", + "defence_level": "1", + "lifepoints": "10", + "strength_level": "1", + "id": "5230", + "aggressive": "true", + "range_level": "1", + "attack_level": "1" + }, + { + "examine": "Shooty-shooty.", + "combat_style": "1", + "melee_animation": "5395", + "respawn_delay": "60", + "defence_animation": "5396", + "death_animation": "5397", "name": "Penance Ranger", "defence_level": "1", "safespot": null, @@ -81008,11 +81022,25 @@ }, { "name": "Penance Fighter", - "id": "5044" + "id": "5044", + "combat_audio": "670,672,671", + "melee_animation": "5097", + "range_animation": "5097", + "attack_speed": "4", + "defence_animation": "5096", + "magic_animation": "5097", + "death_animation": "5098" }, { "name": "Penance Fighter", - "id": "5045" + "id": "5045", + "combat_audio": "670,672,671", + "melee_animation": "5097", + "range_animation": "5097", + "attack_speed": "4", + "defence_animation": "5096", + "magic_animation": "5097", + "death_animation": "5098" }, { "name": "Jack", @@ -81328,131 +81356,287 @@ }, { "name": "Penance Fighter", - "id": "5213" + "id": "5213", + "combat_audio": "670,672,671", + "melee_animation": "5097", + "range_animation": "5097", + "attack_speed": "4", + "defence_animation": "5096", + "magic_animation": "5097", + "death_animation": "5098" }, { "name": "Penance Fighter", - "id": "5214" + "id": "5214", + "combat_audio": "670,672,671", + "melee_animation": "5097", + "range_animation": "5097", + "attack_speed": "4", + "defence_animation": "5096", + "magic_animation": "5097", + "death_animation": "5098" }, { "name": "Penance Fighter", - "id": "5215" + "id": "5215", + "combat_audio": "670,672,671", + "melee_animation": "5097", + "range_animation": "5097", + "attack_speed": "4", + "defence_animation": "5096", + "magic_animation": "5097", + "death_animation": "5098" }, { "name": "Penance Fighter", - "id": "5216" + "id": "5216", + "combat_audio": "670,672,671", + "melee_animation": "5097", + "range_animation": "5097", + "attack_speed": "4", + "defence_animation": "5096", + "magic_animation": "5097", + "death_animation": "5098" }, { "name": "Penance Fighter", - "id": "5217" + "id": "5217", + "combat_audio": "670,672,671", + "melee_animation": "5097", + "range_animation": "5097", + "attack_speed": "4", + "defence_animation": "5096", + "magic_animation": "5097", + "death_animation": "5098" }, { "name": "Penance Fighter", - "id": "5218" + "id": "5218", + "combat_audio": "670,672,671", + "melee_animation": "5097", + "range_animation": "5097", + "attack_speed": "4", + "defence_animation": "5096", + "magic_animation": "5097", + "death_animation": "5098" }, { "name": "Penance Fighter", - "id": "5219" + "id": "5219", + "combat_audio": "670,672,671", + "melee_animation": "5097", + "range_animation": "5097", + "attack_speed": "4", + "defence_animation": "5096", + "magic_animation": "5097", + "death_animation": "5098" }, { "name": "Penance Runner", - "id": "5220" + "id": "5220", + "defence_animation": "5101", + "death_animation": "5106" }, { "name": "Penance Runner", - "id": "5221" + "id": "5221", + "defence_animation": "5101", + "death_animation": "5106" }, { "name": "Penance Runner", - "id": "5222" + "id": "5222", + "defence_animation": "5101", + "death_animation": "5106" }, { "name": "Penance Runner", - "id": "5223" + "id": "5223", + "defence_animation": "5101", + "death_animation": "5106" }, { "name": "Penance Runner", - "id": "5224" + "id": "5224", + "defence_animation": "5101", + "death_animation": "5106" }, { "name": "Penance Runner", - "id": "5225" + "id": "5225", + "defence_animation": "5101", + "death_animation": "5106" }, { "name": "Penance Runner", - "id": "5226" + "id": "5226", + "defence_animation": "5101", + "death_animation": "5106" }, { "name": "Penance Runner", - "id": "5227" + "id": "5227", + "defence_animation": "5101", + "death_animation": "5106" }, { "name": "Penance Runner", - "id": "5228" + "id": "5228", + "defence_animation": "5101", + "death_animation": "5106" }, { "name": "Penance Ranger", - "id": "5230" + "id": "5230", + "combat_style": "1", + "melee_animation": "5395", + "defence_animation": "5396", + "death_animation": "5397", + "aggressive": "true" }, { "name": "Penance Ranger", - "id": "5231" + "id": "5231", + "combat_style": "1", + "melee_animation": "5395", + "defence_animation": "5396", + "death_animation": "5397", + "aggressive": "true" }, { "name": "Penance Ranger", - "id": "5232" + "id": "5232", + "combat_style": "1", + "melee_animation": "5395", + "defence_animation": "5396", + "death_animation": "5397", + "aggressive": "true" }, { "name": "Penance Ranger", - "id": "5233" + "id": "5233", + "combat_style": "1", + "melee_animation": "5395", + "defence_animation": "5396", + "death_animation": "5397", + "aggressive": "true" }, { "name": "Penance Ranger", - "id": "5234" + "id": "5234", + "combat_style": "1", + "melee_animation": "5395", + "defence_animation": "5396", + "death_animation": "5397", + "aggressive": "true" }, { "name": "Penance Ranger", - "id": "5235" + "id": "5235", + "combat_style": "1", + "melee_animation": "5395", + "defence_animation": "5396", + "death_animation": "5397", + "aggressive": "true" }, { "name": "Penance Ranger", - "id": "5236" + "id": "5236", + "combat_style": "1", + "melee_animation": "5395", + "defence_animation": "5396", + "death_animation": "5397", + "aggressive": "true" }, { "name": "Penance Healer", - "id": "5238" + "id": "5238", + "defence_animation": "5105", + "death_animation": "5106", + "melee_animation": "5107", + "range_animation": "5107", + "attack_speed": "4", + "magic_animation": "5107" }, { "name": "Penance Healer", - "id": "5239" + "id": "5239", + "defence_animation": "5105", + "death_animation": "5106", + "melee_animation": "5107", + "range_animation": "5107", + "attack_speed": "4", + "magic_animation": "5107" }, { "name": "Penance Healer", - "id": "5240" + "id": "5240", + "defence_animation": "5105", + "death_animation": "5106", + "melee_animation": "5107", + "range_animation": "5107", + "attack_speed": "4", + "magic_animation": "5107" }, { "name": "Penance Healer", - "id": "5241" + "id": "5241", + "defence_animation": "5105", + "death_animation": "5106", + "melee_animation": "5107", + "range_animation": "5107", + "attack_speed": "4", + "magic_animation": "5107" }, { "name": "Penance Healer", - "id": "5242" + "id": "5242", + "defence_animation": "5105", + "death_animation": "5106", + "melee_animation": "5107", + "range_animation": "5107", + "attack_speed": "4", + "magic_animation": "5107" }, { "name": "Penance Healer", - "id": "5243" + "id": "5243", + "defence_animation": "5105", + "death_animation": "5106", + "melee_animation": "5107", + "range_animation": "5107", + "attack_speed": "4", + "magic_animation": "5107" }, { "name": "Penance Healer", - "id": "5244" + "id": "5244", + "defence_animation": "5105", + "death_animation": "5106", + "melee_animation": "5107", + "range_animation": "5107", + "attack_speed": "4", + "magic_animation": "5107" }, { "name": "Penance Healer", - "id": "5245" + "id": "5245", + "defence_animation": "5105", + "death_animation": "5106", + "melee_animation": "5107", + "range_animation": "5107", + "attack_speed": "4", + "magic_animation": "5107" }, { "name": "Penance Healer", - "id": "5246" + "id": "5246", + "defence_animation": "5105", + "death_animation": "5106", + "melee_animation": "5107", + "range_animation": "5107", + "attack_speed": "4", + "magic_animation": "5107" }, { "name": "Locust rider", diff --git a/Server/src/main/content/minigame/barbassault/BarbRewardInterface.kt b/Server/src/main/content/minigame/barbassault/BarbRewardInterface.kt new file mode 100644 index 000000000..05ad275c3 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/BarbRewardInterface.kt @@ -0,0 +1,378 @@ +package content.minigame.barbassault + + +import core.api.* +import core.game.component.Component +import core.game.component.ComponentDefinition +import core.game.component.ComponentPlugin +import core.game.node.entity.player.Player +import core.game.node.item.Item +import core.plugin.Initializable +import core.plugin.Plugin +import core.tools.* +import org.rs09.consts.Components +import org.rs09.consts.Items + +@Initializable +class BarbRewardInterface : ComponentPlugin() { + override fun open(player: Player?, component: Component?) { + super.open(player, component) + player ?: return + updateRewardButtons(player) + } + var selectedShopButton = -1 + override fun handle(player: Player?, component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int): Boolean { + //https://youtu.be/AG5Iv-ysAW0?t=11 + //todo find right values to highlight box blue when selecting. + if (button == 213) { + player!!.sendMessage("Accepted selection from button: $selectedShopButton") + acceptReward(player,selectedShopButton) + selectedShopButton = -1 + return true + } + selectedShopButton = button + updateRewardButtons(player!!, button) + return true + } + override fun newInstance(arg: Any?): Plugin { + ComponentDefinition.forId(Components.BARBASSAULT_REWARD_SHOP_491).plugin = this + return this + } +} + +//may have client side script instead of this. +//dumps/scripts/2845.cs2 is for a newer revision with an overhauled interface. + +fun updateRewardButtons(player: Player, selected: Int = -1) { + interfaceUpdate(player,selected) + + //points @ bottom + val playerPoints = player.getBarbPoints() + setInterfaceText(player, playerPoints.atk.toString(), 491, 219) + setInterfaceText(player, playerPoints.def.toString(), 491, 220) + setInterfaceText(player, playerPoints.col.toString(), 491, 221) + setInterfaceText(player, playerPoints.heal.toString(), 491, 222) +} + +fun acceptReward(player:Player, selected :Int){ + if (selected == -1 ) return + val reward = barbRewardShop.find { it.buttonChildId == selected } ?: return + if (!canBuyReward(player, reward, true)) return + + when { + reward.item != null -> { addItem(player, reward.item, 1) } + // reward.gamble != null -> { } + reward.levelUp != null -> { player.increaseBarbRoleLevel(reward.levelUp) } + } + removeCost(player, reward) + updateRewardButtons(player) +} + +fun rollGambleReward(tier: GambleTier): Item { + if (tier == GambleTier.HIGH) return Item(Items.DRAGON_CHAINBODY_13481,1) + if (tier == GambleTier.MEDIUM) return Item(Items.RUNE_ARROWP_PLUS_5621,52) + if (tier == GambleTier.LOW) return Item(Items.UNICORN_HORN_238,10) + return Item(Items.FLAX_1779,1) + +} + +fun interfaceUpdate(player: Player, selected: Int) { + val playerLevels = player.getBarbLevels() + val hasQueenKill = player.hasQueenKill() + barbRewardShop.forEach { reward -> + val isSelected = reward.buttonChildId == selected + val canBuy = canBuyReward(player, reward) + val LAVENDER = "" + var costText = reward.rewardCostText.text + val nameColor = if (isSelected) BLUE else LAVENDER + val resolvedText = if (reward.model != null) { + val text = reward.rewardText.resolve(playerLevels).text + val model = reward.model.resolve(playerLevels).modelId + val perkText = reward.perkText!!.resolve(playerLevels).text + + costText = reward.rewardCostText.resolve(playerLevels).text + setInterfaceModel(player, model, 491, reward.model.childId, 2372) + setInterfaceText(player, perkText, 491, reward.perkText.childId) + text + } else { + reward.rewardText.text + } + setInterfaceText(player, nameColor + resolvedText, 491, reward.rewardText.childId) + val costColor = if (canBuy) GREEN else RED + setInterfaceText(player, costColor + costText, 491, reward.rewardCostText.childId) + + if (reward.queenKillText != null) { + val color = if (hasQueenKill) GREEN else RED + setInterfaceText(player, color + reward.queenKillText.text, 491, reward.queenKillText.childId) + } + } +} + +fun canBuyReward(player: Player, reward: RewardRow, buying: Boolean = false): Boolean { + val points = player.getBarbPoints() + val hasQueenKill = player.hasQueenKill() + val barbLevels = player.getBarbLevels() + val resolvedCost = reward.cost.resolve(barbLevels) + + fun requireQueenKill(base: Boolean): Boolean { + return if (buying && reward.queenKillText != null) base && hasQueenKill else base + } + return when (resolvedCost) { + is RewardCost.AllRoles -> requireQueenKill( + points.atk >= resolvedCost.amountPerRole && + points.def >= resolvedCost.amountPerRole && + points.col >= resolvedCost.amountPerRole && + points.heal >= resolvedCost.amountPerRole + ) + is RewardCost.AnyRole -> requireQueenKill( listOf( points.atk, points.def, points.col, points.heal).any { it >= resolvedCost.minimum }) + is RewardCost.Coins -> requireQueenKill(inInventory(player, 995, resolvedCost.amount)) + is RewardCost.Specific -> { + if (isBarbRewardMaxed(reward,barbLevels)) return false + requireQueenKill( + points.atk >= resolvedCost.required.atk && + points.def >= resolvedCost.required.def && + points.col >= resolvedCost.required.col && + points.heal >= resolvedCost.required.heal + ) + } + is RewardCost.Dynamic -> TODO() + } +} +fun isBarbRewardMaxed(reward: RewardRow, barbLevels: BarbAssaultLevels): Boolean { + val text = reward.rewardText.text.lowercase() + return when { + "attacker" in text -> barbLevels.atk >= 5 + "defender" in text -> barbLevels.def >= 5 + "collector" in text -> barbLevels.col >= 5 + "healer" in text -> barbLevels.heal >= 5 + else -> false + } +} +fun removeCost(player: Player, reward: RewardRow) { + val barbLevels = player.getBarbLevels() + val resolvedCost = reward.cost.resolve(barbLevels) + + when (resolvedCost) { + is RewardCost.AllRoles -> { + if (reward.queenKillText != null) { setAttribute(player,"barbass:queen-kill", 0)} + player.removeBarbPoints(BarbAssaultPoints(resolvedCost.amountPerRole, resolvedCost.amountPerRole, resolvedCost.amountPerRole, resolvedCost.amountPerRole)) + } + is RewardCost.AnyRole -> { closeInterface(player);gambleDialogReward(player,resolvedCost.minimum) } //player.removeBarbPoints(BarbAssaultPoints(cost.minimum, cost.minimum, cost.minimum, cost.minimum)) + is RewardCost.Coins -> { + if (reward.queenKillText != null) { setAttribute(player,"barbass:queen-kill", 0)} + removeItem(player, Item(Items.COINS_995, resolvedCost.amount), Container.INVENTORY) + } + is RewardCost.Specific -> player.removeBarbPoints(resolvedCost.required) + else -> return + } +} +//https://youtu.be/KKUbBrJBab0?t=44 +fun gambleDialogReward(player: Player, cost: Int) { + var costChoice: BarbRole? = null + //todo Finish Gamble reward + /*openDialogue(player, object : DialogueFile() { + override fun handle(componentID: Int, buttonID: Int) { + // this.npc = NPC( NPCs.COMMANDER_CONNAD_5029) + when (stage) { + 0 -> {sendDialogueOptions(player,"Which points would you like to spend?", "Attacker Honor Points","Defender Honor Points","Collector Honor Points","Healer Honor Points") + addDialogueAction(player) { player , buttonId -> + when(buttonId) { + 2 -> {costChoice = BarbRole.ATTACKER; stage++} + 3 -> {costChoice = BarbRole.DEFENDER; stage++} + 4 -> {costChoice = BarbRole.COLLECTOR; stage++} + 5 -> {costChoice = BarbRole.HEALER; stage++} + } + //return@addDialogueAction + } } + + 2 -> sendNPCDialogue(player,NPCs.COMMANDER_CONNAD_5029,"Gamble you say! Let me take something from my big bag of prizes!").also { stage++} + 3 -> npc("What can i find!").also { stage++ } + 4 -> npc("Ah, found something!").also { stage++ } + 5 -> npc("You've got...").also { stage++ } + 6 -> sendItemDialogue(player,995,"ItemName!").also{end()} + } + } + }).also { + val barbPoints = player.getBarbPoints() + + val costPointsSelected = when (costChoice) { + BarbRole.ATTACKER -> BarbAssaultPoints(atk = cost) + BarbRole.COLLECTOR -> BarbAssaultPoints(col = cost) + BarbRole.DEFENDER -> BarbAssaultPoints(def = cost) + BarbRole.HEALER -> BarbAssaultPoints(heal = cost) + else -> {return} + } + + if (barbPoints.hasEnough(costPointsSelected)) { + player.removeBarbPoints(costPointsSelected) + } else { + player.sendMessage("You don't have enough ${costChoice!!.name.lowercase()} points to gamble.") + } + }*/ +} + +data class InterfaceModel( val childId: Int, val modelId: Int, val dynamicModelId: ((playerLevel: BarbAssaultLevels) -> Int)? = null) { + fun resolve(playerLevel: BarbAssaultLevels): InterfaceModel { + val resolvedID = dynamicModelId?.invoke(playerLevel) ?: modelId + return InterfaceModel(childId, resolvedID, null) + } +} +data class InterfaceText( val childId: Int, val text: String, val dynamicText: ((playerLevel: BarbAssaultLevels) -> String)? = null) { + fun resolve(playerLevel: BarbAssaultLevels): InterfaceText { + val resolvedText = dynamicText?.invoke(playerLevel) ?: text + return InterfaceText(childId, resolvedText, null) + } +} +sealed class RewardCost { + data class Specific(val required: BarbAssaultPoints) : RewardCost() + data class AllRoles(val amountPerRole: Int) : RewardCost() + data class AnyRole(val minimum: Int) : RewardCost() + data class Coins(val amount: Int) : RewardCost() + data class Dynamic(val generator: (BarbAssaultLevels) -> RewardCost) : RewardCost() + + fun resolve(levels: BarbAssaultLevels): RewardCost = when (this) { + is Dynamic -> generator(levels) + else -> this + } +} +data class RewardRow( + val buttonChildId: Int, + val model : InterfaceModel? = null, + val rewardText: InterfaceText, + val perkText: InterfaceText? = null, + val rewardCostText: InterfaceText, + val queenKillText: InterfaceText? = null, + val cost: RewardCost, + val item: Int? = null, + val levelUp: BarbRole? = null, + val gamble: GambleTier? = null +) +enum class GambleTier {LOW, MEDIUM, HIGH } +//https://youtu.be/DZ9FqGFFVDw?t=4 -- 2009 +//https://youtu.be/md3naJdy2MM?t=67 -- 2008 +//https://youtu.be/u69JPBlDtVc?t=21 -- 2007 +/* +Level | Honour Points | Collector | Healer | Attacker | Defender +------|---------------|------------------------------------------|-------------|-----------|------------------- +1 | Start level | Bag holds 2 eggs | Heals 10 hp | +1 Damage | Lure 4 spaces +2 | 200 | Bag holds 4 eggs + Egg conversion | Heals 15 hp | +2 Damage | Lure 5 spaces +3 | 300 | Bag holds 6 eggs + Conversion chance 40% | Heals 20 hp | +3 Damage | Lure 6 spaces +4 | 400 | Bag holds 7 eggs + Conversion chance 60% | Heals 25 hp | +4 Damage | Lure 8 spaces +5 | 500 | Bag holds 8 eggs + Conversion chance 80% | Heals 35 hp | +5 Damage | Lure 10 spaces +*/ + +val barbRewardShop = listOf( + RewardRow(81, + model = InterfaceModel(80,20522){ level -> (20521 + level.atk).coerceIn(20522,20525) }, + rewardText = InterfaceText(82, "Attacker level up to 2"){ level -> if (level.atk >= 5) "Attacker level up complete" else "Attacker level up to ${level.atk + 1}"}, + rewardCostText = InterfaceText(83, "200 Attacker points"){ level -> if (level.atk >= 5) " - Mastered - " else "${level.atk + 1}00 Attacker points"}, + perkText = InterfaceText(85, "+2 bonus damage") { level -> if (level.atk >= 5) " - Mastered - " else "+${level.atk + 1} bonus damage" }, + cost = RewardCost.Dynamic { level -> RewardCost.Specific(BarbAssaultPoints((level.atk + 1) * 100, 0, 0, 0))}, + levelUp = BarbRole.ATTACKER + ), + RewardRow(90, + model = InterfaceModel(89,20526){ level -> (20525 + level.col).coerceIn(20526,20529) }, + rewardText = InterfaceText(91, "Collector level up to 2"){ level -> if (level.col >= 5) "Collector level up complete" else "Collector level up to ${level.col + 1}"}, + rewardCostText = InterfaceText(92, "200 Collector points"){ level -> if (level.col >= 5) " - Mastered - " else "${level.col + 1}00 Collector points"}, + perkText = InterfaceText(94, "Egg conversion") { level -> if (level.col <= 1) "Egg conversion" else if (level.col in 2..4) "Egg convert success ${(level.col - 2) * 20 + 40}%" else " - Mastered - " }, + cost = RewardCost.Dynamic { level -> RewardCost.Specific(BarbAssaultPoints(0, (level.col + 1) * 100, 0, 0))}, + levelUp = BarbRole.COLLECTOR + ), + RewardRow(97, + model = InterfaceModel(96,20531){ level -> (20530 + level.def).coerceIn(20531,20534) }, + rewardText = InterfaceText(98, "Defender level up to 2"){ level -> if (level.def >= 5) "Defender level up complete" else "Defender level up to ${level.def + 1}"}, + rewardCostText = InterfaceText(99, "200 Defender points"){ level -> if (level.def >= 5) " - Mastered - " else "${level.def + 1}00 Defender points"}, + perkText = InterfaceText(101, "Lure range 5") { level -> when (level.def) { 0, 1 -> "Lure range 5"; 2 -> "Lure range 6"; 3 -> "Lure range 8"; 4 -> "Lure range 10"; else -> " - Mastered - " } }, + cost = RewardCost.Dynamic { level -> RewardCost.Specific(BarbAssaultPoints(0, 0, (level.def + 1) * 100, 0))}, + levelUp = BarbRole.DEFENDER + ), + RewardRow(104, + model = InterfaceModel(103,20538){ level -> (20537 + level.heal).coerceIn(20538,20541) }, + rewardText = InterfaceText(105, "Healer level up to 2"){ level -> if (level.heal >= 5) "Healer level up complete" else "Healer level up to ${level.heal + 1}"}, + rewardCostText = InterfaceText(106, "200 Defender points"){ level -> if (level.heal >= 5) " - Mastered - " else "${level.heal + 1}00 Healer points"}, + perkText = InterfaceText(108, "Heal 15 points") { level -> when (level.heal) { 0, 1 -> "Heal 15 points"; 2 -> "Heal 20 points"; 3 -> "Heal 25 points"; 4 -> "Heal 35 points"; else -> " - Mastered - " } }, + cost = RewardCost.Dynamic { level -> RewardCost.Specific(BarbAssaultPoints(0, 0, 0, (level.heal + 1) * 100))}, + levelUp = BarbRole.HEALER + ), + + RewardRow(111, + rewardText = InterfaceText(112, "Penance Fighter hat"), + rewardCostText = InterfaceText(113, "275 points in each role"), + queenKillText = InterfaceText(229, "Kill Queen"), + cost = RewardCost.AllRoles(275), + item = Items.FIGHTER_HAT_10548 + ), + RewardRow(118, + rewardText = InterfaceText(119, "Penance Ranger hat"), + rewardCostText = InterfaceText(120, "275 points in each role"), + queenKillText = InterfaceText(228, "Kill Queen"), + cost = RewardCost.AllRoles(275), + item = Items.RANGER_HAT_10550 + ), + RewardRow(125, + rewardText = InterfaceText(126, "Penance Runner hat"), + rewardCostText = InterfaceText(127, "275 points in each role"), + queenKillText = InterfaceText(227, "Kill Queen"), + cost = RewardCost.AllRoles(275), + item = Items.RUNNER_HAT_10549 + ), + RewardRow(132, + rewardText = InterfaceText(133, "Penance Healer hat"), + rewardCostText = InterfaceText(134, "275 points in each role"), + queenKillText = InterfaceText(226, "Kill Queen"), + cost = RewardCost.AllRoles(275), + item = Items.HEALER_HAT_10547 + ), + RewardRow(139, + rewardText = InterfaceText(140, "Penance torso"), + rewardCostText = InterfaceText(141, "375 points in each role"), + queenKillText = InterfaceText(225, "Kill Queen"), + cost = RewardCost.AllRoles(375), + item = Items.FIGHTER_TORSO_10551 + ), + RewardRow(146, + rewardText = InterfaceText(147, "Penance skirt"), + rewardCostText = InterfaceText(148, "375 points in each role"), + queenKillText = InterfaceText(224, "Kill Queen"), + cost = RewardCost.AllRoles(375), + item = Items.PENANCE_SKIRT_10555 + ), + RewardRow(153, + rewardText = InterfaceText(154, "Penance boots"), + rewardCostText = InterfaceText(155, "100 points in each role"), + cost = RewardCost.AllRoles(100), + item = Items.RUNNER_BOOTS_10552 + ), + RewardRow(160, + rewardText = InterfaceText(161, "Penance gloves"), + rewardCostText = InterfaceText(162, "150 points in each role"), + cost = RewardCost.AllRoles(150), + item = Items.PENANCE_GLOVES_10553 + ), + RewardRow(167, + rewardText = InterfaceText(168, "Granite body"), + rewardCostText = InterfaceText(169, "95,000 coins"), + queenKillText = InterfaceText(230, "Kill Queen"), + cost = RewardCost.Coins(95000), + item = Items.GRANITE_BODY_10564 + ), + RewardRow(174, + rewardText = InterfaceText(175, "Gamble points - low items"), + rewardCostText = InterfaceText(176, "200 points (any role)"), + cost = RewardCost.AnyRole(200), + gamble = GambleTier.LOW + ), + RewardRow(181, + rewardText = InterfaceText(182, "Gamble points - medium items"), + rewardCostText = InterfaceText(183, "400 points (any role)"), + cost = RewardCost.AnyRole(400), + gamble = GambleTier.MEDIUM + ), + RewardRow(188, + rewardText = InterfaceText(189, "Gamble points - high items"), + rewardCostText = InterfaceText(190, "500 points (any role)"), + queenKillText = InterfaceText(223, "Kill Queen"), + cost = RewardCost.AnyRole(500), + gamble = GambleTier.HIGH + ), + ) diff --git a/Server/src/main/content/minigame/barbassault/BarbassBlackBoard.kt b/Server/src/main/content/minigame/barbassault/BarbassBlackBoard.kt new file mode 100644 index 000000000..e85bc2fe6 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/BarbassBlackBoard.kt @@ -0,0 +1,129 @@ +package content.minigame.barbassault + +import core.api.* +import core.game.component.Component +import core.game.node.entity.player.Player +import org.rs09.consts.Components + +data class RoleChildIds( + val chpId: Int, + val levelId: Int, + val rewardNextLevelId: Int, + val pointsNextLevelId: Int +) +data class RoleDisplayValues( + val chpId: Int, + val levelId: Int, + val rewardNextLevelId: Int, + val pointsNextLevelId: Int, + val rewardText: String, + val pointsText: String +) + +data class RewardInfo( + val reward: String, + val pointsToNextLevel: String +) + +class BarbassBlackBoard { + companion object { + const val PLAYER_NAME = 19 + const val CURRENT_WAVE = 25 + + val roleComponents: Map = mapOf( + BarbRole.ATTACKER to RoleChildIds(20,15,27,10), + BarbRole.DEFENDER to RoleChildIds(21,16,28,11), + BarbRole.COLLECTOR to RoleChildIds(22,17,29,12), + BarbRole.HEALER to RoleChildIds(23,18,30,13) + ) + + fun getRewardInfo(role: BarbRole, level: Int): RewardInfo { + val reward = when (role) { + BarbRole.ATTACKER -> when (level) { + 1 -> "+2 bonus damage" + 2 -> "+3 bonus damage" + 3 -> "+4 bonus damage" + 4 -> "+5 bonus damage" + else -> " - Mastered - " + } + + BarbRole.DEFENDER -> when (level) { + 1 -> "Lure range 5" + 2 -> "Lure range 6" + 3 -> "Lure range 8" + 4 -> "Lure range 10" + else -> " - Mastered - " + } + + BarbRole.COLLECTOR -> when (level) { //is this the right info for 2009? + 1 -> "Bag holds 4 eggs" + 2 -> "Bag holds 6 eggs" + 3 -> "Bag holds 7 eggs" + 4 -> "Bag holds 8 eggs" + else -> " - Mastered - " + } + + BarbRole.HEALER -> when (level) { + 1 -> "Heal 15 points" + 2 -> "Heal 20 points" + 3 -> "Heal 25 points" + 4 -> "Heal 35 points" + else -> " - Mastered - " + } + } + + val points = getPointsTillNextLevel(level) + return RewardInfo(reward, points) + } + + fun getPointsTillNextLevel(level: Int): String { + return when (level) { + 1 -> "200" + 2 -> "300" + 3 -> "400" + 4 -> "500" + else -> "---" + } + } + fun getAllRoleValues(role: BarbRole, level: Int): RoleDisplayValues { + val ids = roleComponents[role] + val rewardInfo = getRewardInfo(role, level) + + return RoleDisplayValues( + ids!!.chpId, ids.levelId, ids.rewardNextLevelId, ids.pointsNextLevelId, + rewardInfo.reward, rewardInfo.pointsToNextLevel + ) + } + + fun updateBlackBoard(player: Player) { + val wave = player.getAttribute("barbass:wave", 1) + player.interfaceManager.open(Component(Components.BARBASSAULT_PLAYERSTAT_490)) + setInterfaceText(player, player.username, Components.BARBASSAULT_PLAYERSTAT_490, PLAYER_NAME) + setInterfaceText(player, wave.toString(), Components.BARBASSAULT_PLAYERSTAT_490, CURRENT_WAVE) + + val playerLevel = player.getBarbLevels() + val playerPoints = player.getBarbPoints() + + for (role in BarbRole.values()) { + val level = when (role) { + BarbRole.ATTACKER -> playerLevel.atk + BarbRole.DEFENDER -> playerLevel.def + BarbRole.COLLECTOR -> playerLevel.col + BarbRole.HEALER -> playerLevel.heal + } + val points = when (role) { + BarbRole.ATTACKER -> playerPoints.atk + BarbRole.DEFENDER -> playerPoints.def + BarbRole.COLLECTOR -> playerPoints.col + BarbRole.HEALER -> playerPoints.heal + } + val roleValues = getAllRoleValues(role, level) + + setInterfaceText(player, points.toString(), 490, roleValues.chpId) + setInterfaceText(player, level.toString(), 490, roleValues.levelId) + setInterfaceText(player, roleValues.rewardText, 490, roleValues.rewardNextLevelId) + setInterfaceText(player, roleValues.pointsText, 490, roleValues.pointsNextLevelId) + } + } + } +} diff --git a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt new file mode 100644 index 000000000..81c298625 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt @@ -0,0 +1,77 @@ +package content.minigame.barbassault + +import core.api.sendMessage + +import core.game.node.item.Item +import core.game.system.command.Privilege +import core.game.system.command.sets.CommandSet +import core.game.world.map.Location +import core.plugin.Initializable +import org.rs09.consts.Items + +@Initializable +class BarbassDevHelper : CommandSet(Privilege.ADMIN) { + override fun defineCommands() { + define ("maxbarbpts") { player,_ -> + player.addBarbPoints(BarbAssaultPoints(500, 500, 500,500)) + } + define ("rstbarbpts") { player,_ -> + player.setBarbPoints(BarbAssaultPoints(0, 0, 0,0)) + } + define ("rstbarblvl") { player,_ -> + player.setBarbLevels(BarbAssaultLevels(0, 0, 0,0)) + } + define("barbgame"){ player,_-> + player.teleport(Location.create(1886, 5467, 0)) + } + define("barbqueen"){ player,_-> + player.teleport(Location.create(1885, 5403, 0)) + } + + define("rolekit", Privilege.ADMIN, " ", "Gives Barbarian Assault kit") { player, args -> + data class RoleKit( + val horns: IntArray? = null, + val bags: IntArray? = null, + val extraItems: List = emptyList() + ) + val roleKits = mapOf( + "healer" to RoleKit( + horns = intArrayOf(Items.HEALER_HORN_10526,Items.HEALER_HORN_10527,Items.HEALER_HORN_10528,Items.HEALER_HORN_10529,Items.HEALER_HORN_10530 ), + extraItems = listOf(10559,Items.HEALING_VIAL_10546, Items.POISONED_WORMS_10540, Items.POISONED_TOFU_10539,Items.POISONED_MEAT_10541) + ), + "attacker" to RoleKit( + horns = intArrayOf(Items.ATTACKER_HORN_10516,Items.ATTACKER_HORN_10517,Items.ATTACKER_HORN_10518,Items.ATTACKER_HORN_10519,Items.ATTACKER_HORN_10520), + extraItems = listOf(10556) + ), + "defender" to RoleKit( + horns = intArrayOf(Items.DEFENDER_HORN_10538), + extraItems = listOf(10558,Items.DEFENDER_HORN_10538,Items.WORMS_10515,Items.CRACKERS_10513,Items.TOFU_10514) + ), + "collector" to RoleKit( + horns = intArrayOf(Items.COLLECTION_BAG_10521, Items.COLLECTION_BAG_10522, Items.COLLECTION_BAG_10523, Items.COLLECTION_BAG_10524, Items.COLLECTION_BAG_10525), + extraItems = listOf(10557,Items.COLLECTOR_HORN_10560) + ) + ) + + if (args.size < 3) { + sendMessage(player,"Usage: ::rolekit ") + return@define + } + + val roleName = args[1].lowercase() + val level = args[2].toIntOrNull() + if (level == null || level !in 1..5) { + sendMessage(player,"Invalid level. Use a number between 1 and 5.") + return@define + } + val role = roleKits[roleName] + if (role == null) { + sendMessage(player,"Unknown role: $roleName. Use healer, attacker, defender, or collector.") + return@define + } + player.inventory.add(Item(role.horns?.get(level - 1) ?:1 )) + role.extraItems.forEach { player.inventory.add(Item(it)) } + sendMessage(player,"Gave $roleName kit for level $level.") + } + } +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/Barbassault.kt b/Server/src/main/content/minigame/barbassault/Barbassault.kt new file mode 100644 index 000000000..d30994e73 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/Barbassault.kt @@ -0,0 +1,176 @@ +package content.minigame.barbassault + +import core.game.node.entity.player.Player + +enum class BarbRole { ATTACKER, DEFENDER, COLLECTOR, HEALER } +data class BarbAssaultPoints( val atk: Int = 0, val col: Int = 0, val def: Int = 0, val heal: Int = 0) { + val total: Int get() = atk + col + def + heal + fun hasEnough(cost: BarbAssaultPoints): Boolean = atk >= cost.atk && col >= cost.col && def >= cost.def && heal >= cost.heal + operator fun minus(other: BarbAssaultPoints): BarbAssaultPoints = BarbAssaultPoints(atk - other.atk,col - other.col,def - other.def,heal - other.heal).clamped() + operator fun plus(other: BarbAssaultPoints): BarbAssaultPoints = BarbAssaultPoints(atk + other.atk,col + other.col,def + other.def,heal + other.heal).clamped() + fun clamped(): BarbAssaultPoints = BarbAssaultPoints(atk.coerceIn(0, 500), col.coerceIn(0, 500), def.coerceIn(0, 500), heal.coerceIn(0, 500) ) +} +/** + * Retrieves the player's current Barbarian Assault points. + * + * @return [BarbAssaultPoints] representing the player's stored points in each role: + * - `atk`: Attacker points + * - `col`: Collector points + * - `def`: Defender points + * - `heal`: Healer points + * + * Example usage: + * ``` + * val points = player.getBarbPoints() + * println("Attacker points: ${points.atk}") + * ``` + */ +fun Player.getBarbPoints(): BarbAssaultPoints = BarbAssaultPoints( + getAttribute("barbass:atk-points", 0), + getAttribute("barbass:col-points", 0), + getAttribute("barbass:def-points", 0), + getAttribute("barbass:heal-points", 0) +) +/** + * Sets the player's Barbarian Assault role points, clamping each to the allowed range (0 to 500) + * and saving them to persistent storage. + * + * @param points [BarbAssaultPoints] containing the new point values for each role: + * - `atk`: Attacker points + * - `col`: Collector points + * - `def`: Defender points + * - `heal`: Healer points + * + * Example usage: + * ``` + * val newPoints = BarbAssaultPoints(atk = 120, col = 80, def = 200, heal = 0) + * player.setBarbPoints(newPoints) + * ``` + */ +fun Player.setBarbPoints(points: BarbAssaultPoints) { + val rolePoints = points.clamped() + setAttribute("/save:barbass:atk-points", rolePoints.atk) + setAttribute("/save:barbass:col-points", rolePoints.col) + setAttribute("/save:barbass:def-points", rolePoints.def) + setAttribute("/save:barbass:heal-points", rolePoints.heal) +} +/** + * Adds Barbarian Assault points to the player. + * + * @param additional The points to be added to the player's current Barbarian Assault points. + * Values will be automatically clamped between 0 and 500. + * + * Example usage: + * ``` + * // Give the player 30 attacker points and 10 collector points + * player.addBarbPoints(BarbAssaultPoints(atk = 30, col = 10, def = 0, heal = 0)) + * ``` + */ +fun Player.addBarbPoints(additional: BarbAssaultPoints) { + setBarbPoints(getBarbPoints() + additional) +} +/** + * Removes Barbarian Assault points from the player. + * + * @param toRemove The points to be subtracted from the player's current Barbarian Assault points. + * Values will be clamped so that no role goes below 0. + * + * Example usage: + * ``` + * // Remove 15 attacker points and 5 defender points + * player.removeBarbPoints(BarbAssaultPoints(atk = 15, col = 0, def = 5, heal = 0)) + * ``` + */ +fun Player.removeBarbPoints(toRemove: BarbAssaultPoints) { + setBarbPoints(getBarbPoints() - toRemove) +} + +data class BarbAssaultLevels(val atk: Int, val col: Int, val def: Int, val heal: Int) { + fun clamped(): BarbAssaultLevels = BarbAssaultLevels( + atk.coerceIn(1, 5), col.coerceIn(1, 5), def.coerceIn(1, 5), heal.coerceIn(1, 5) + ) +} + +fun Player.hasQueenKill(): Boolean = getAttribute("barbass:queen-kill", 0) > 0 +/** + * Retrieves the player's Barbarian Assault role levels from their saved attributes. + * Defaults to level 1 for any role if not previously set. + * + * @return [BarbAssaultLevels] containing the level for each role: + * - `atk`: Attacker level + * - `col`: Collector level + * - `def`: Defender level + * - `heal`: Healer level + * + * Example usage: + * ``` + * val levels = player.getBarbLevels() + * println("Attacker Level: ${levels.atk}") + * ``` + */ +fun Player.getBarbLevels(): BarbAssaultLevels = BarbAssaultLevels( + getAttribute("barbass:atk-level", 1), + getAttribute("barbass:col-level", 1), + getAttribute("barbass:def-level", 1), + getAttribute("barbass:heal-level", 1) +) +/** + * Sets the player's Barbarian Assault role levels and saves them to persistent attributes. + * + * @param levels The [BarbAssaultLevels] object containing levels for each role: + * - `atk`: Attacker level (1–5) + * - `col`: Collector level (1–5) + * - `def`: Defender level (1–5) + * - `heal`: Healer level (1–5) + * + * Example usage: + * ``` + * val newLevels = BarbAssaultLevels(atk = 2, col = 1, def = 3, heal = 1) + * player.setBarbLevels(newLevels) + * ``` + */ +fun Player.setBarbLevels(levels: BarbAssaultLevels) { + setAttribute("/save:barbass:atk-level", levels.atk) + setAttribute("/save:barbass:col-level", levels.col) + setAttribute("/save:barbass:def-level", levels.def) + setAttribute("/save:barbass:heal-level", levels.heal) +} +/** + * Increases the level of the specified Barbarian Assault role by 1, up to a maximum of 5. + * + * Only one role can be increased at a time. The result is clamped to ensure the level does not exceed 5. + * + * @param role The [BarbRole] to increase the level of. Must be one of: + * - `BarbRole.ATTACKER` + * - `BarbRole.COLLECTOR` + * - `BarbRole.DEFENDER` + * - `BarbRole.HEALER` + * + * Example usage: + * ``` + * player.increaseBarbRoleLevel(BarbRole.ATTACKER) + * ``` + */ +fun Player.increaseBarbRoleLevel(role: BarbRole) { + val current = getBarbLevels() + val newLevels = when (role) { + BarbRole.ATTACKER -> current.copy(atk = current.atk + 1) + BarbRole.COLLECTOR -> current.copy(col = current.col + 1) + BarbRole.DEFENDER -> current.copy(def = current.def + 1) + BarbRole.HEALER -> current.copy(heal = current.heal + 1) + }.clamped() + setBarbLevels(newLevels) +} +fun BarbAssaultLevels.getLevel(role: BarbRole): Int = when (role) { + BarbRole.ATTACKER -> atk + BarbRole.COLLECTOR -> col + BarbRole.DEFENDER -> def + BarbRole.HEALER -> heal +} + +fun BarbAssaultPoints.getPoints(role: BarbRole): Int = when (role) { + BarbRole.ATTACKER -> atk + BarbRole.COLLECTOR -> col + BarbRole.DEFENDER -> def + BarbRole.HEALER -> heal +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt b/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt new file mode 100644 index 000000000..c88dc22a3 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt @@ -0,0 +1,143 @@ +package content.minigame.barbassault + + +import content.minigame.barbassault.BarbassBlackBoard.Companion.updateBlackBoard +import core.api.* +import core.game.component.Component +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import core.game.interaction.InterfaceListener +import core.game.node.entity.player.Player +import core.game.world.map.Location +import org.rs09.consts.Components +import org.rs09.consts.Items +import org.rs09.consts.NPCs +import org.rs09.consts.Scenery + +const val BARBASSAULT_ACCEPT_ROLE_492 = 492 +const val BARBASSAULT_SELECT_ROLE_493 = 493 + +class BarbassaultListeners : InteractionListener { + //CommandSet(Privilege.ADMIN) + + override fun defineListeners() { + on(Scenery.LADDER_20226, IntType.SCENERY, "Climb-down") { player, _ -> + // if (GameWorld.settings?.enable_barbassault != true) return@on false + if (joinError(player)) return@on true + val loc = Location(2593 , 5261 ) + teleport(player, loc) // find ladder code latter + return@on true + + } + on(Scenery.LADDER_20227, IntType.SCENERY, "Climb-up") { player, _ -> + //Remove Roster/scroll + val loc = Location(2535 , 3572 ) + teleport(player, loc) // find ladder code latter + return@on true + + } + on(Scenery.BLACKBOARD_20134, IntType.SCENERY, "Read") { player, _ -> + //emote 5354 + //Remove Roster/scroll + // openOverlay(player, Components.BARBASSAULT_PLAYERSTAT_490) + updateBlackBoard(player) + return@on true + + } + on(NPCs.COMMANDER_CONNAD_5029, IntType.NPC, "Get-rewards") { player, _ -> + setVarbit(player, 3256, 200) + player.interfaceManager.open(Component(Components.BARBASSAULT_REWARD_SHOP_491)) + return@on true + } + + on(NPCs.CAPTAIN_CAIN_5030, IntType.NPC, "Tutorial") { player, _ -> + player.interfaceManager.open(Component(Components.BARBASSAULT_TUTORIAL_496)) + return@on true + } + + + } + + private fun capeCheck(player: Player): String? { + val wornCape = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id ?: -1 + + if (wornCape != -1) return "No CAPES!!!" // find correct message + return null + } + private fun forbiddenItemsCheck(player: Player): String? { + val forbiddenRunes = setOf( + Items.AIR_RUNE_556, + Items.FIRE_RUNE_554, + Items.EARTH_RUNE_557, + Items.WATER_RUNE_555, + Items.BLOOD_RUNE_565, + Items.BODY_RUNE_559, + Items.CHAOS_RUNE_562, + Items.COSMIC_RUNE_564, + Items.ASTRAL_RUNE_9075, + Items.DEATH_RUNE_560, + Items.LAVA_RUNE_4699, + Items.MUD_RUNE_4698, + Items.SMOKE_RUNE_4697, + Items.STEAM_RUNE_4694, + Items.SOUL_RUNE_566, + Items.NATURE_RUNE_561 + //add food + //add ammo + ) + + for (item in player.inventory.toArray()) { + if (item != null) { + if (item.id in forbiddenRunes) { + return "no outside runes" + } + } + } + return null + } + private fun familiarCheck(player: Player): String? { + // if has pet or familiar, not allowed to enter. + return null + } + + + + + private fun joinError(player: Player): Boolean { + val errorMessage = capeCheck(player) ?: forbiddenItemsCheck(player) ?: familiarCheck(player) ?: return false + player.sendMessage(errorMessage).also { return true } + } +} + +/* +class BarbSelectRole : InterfaceListener { +//Team related +//Leader leaving room and causing disband "Your leader has left the room and therefore cleared the team!" +// //"Your recruiter exited the room." +//Accpting invite text " Your application has been accepted" +//The applicant declined your offer. +//the other player hasn't confirmed their role yet. +//the applicant has chosen a role.0 +//You removed the person from the team. + override fun defineInterfaceListeners() { + onOpen(493) { player, _ -> // change this for roles + val lines: Array = player.getAttribute("ifaces:220:lines", arrayOf()) + for(i in 0 until Math.min(lines.size, 15)) { + setInterfaceText(player, lines[i], 220, i+1) + //setInterfaceText(player, "${i}", 220, i+1) + } + return@onOpen true + } + } +} + +*/ + + + + + + + + + diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultTut.kt b/Server/src/main/content/minigame/barbassault/BarbassaultTut.kt new file mode 100644 index 000000000..b4415c333 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/BarbassaultTut.kt @@ -0,0 +1,54 @@ +package content.minigame.barbassault + +import core.api.produceGroundItem +import core.game.node.entity.npc.NPC +import core.game.node.item.GroundItem +import core.game.node.item.GroundItemManager +import core.game.world.map.Direction +import core.game.world.map.Location +import org.rs09.consts.Items +import org.rs09.consts.NPCs + + +class BarbassaultTut { + companion object { + data class TutorialItemSpawn(val itemId: Int, val location: Location) + val BarbassTutItems: List = listOf( + TutorialItemSpawn(Items.LOGS_11760, Location.create(1885, 5487, 0)), + TutorialItemSpawn(Items.LOGS_11760, Location.create(1886, 5486, 0)), + TutorialItemSpawn(Items.HAMMER_2347, Location.create(1888, 5482, 0)) + ) + val BarbassTutNPCs: List = listOf( + NPC.create(NPCs.PENANCE_RANGER_5041, Location.create(1874, 5485, 0), Direction.SOUTH), + NPC.create(NPCs.PENANCE_FIGHTER_5040, Location.create(1880, 5486, 0), Direction.SOUTH), + NPC.create(NPCs.PENANCE_HEALER_5043, Location.create(1892, 5486, 0), Direction.SOUTH), + NPC.create(NPCs.PENANCE_RUNNER_5042, Location.create(1898, 5485, 0), Direction.SOUTH), + + NPC.create(NPCs.MAJOR_DEFEND_5037, Location.create(1891, 5466, 0), Direction.SOUTH), + NPC.create(NPCs.MAJOR_HEAL_5038, Location.create(1882, 5466, 0), Direction.SOUTH), + NPC.create(NPCs.MAJOR_ATTACK_5035, Location.create(1882, 5477, 0), Direction.SOUTH), + NPC.create(NPCs.MAJOR_COLLECT_5036, Location.create(1891, 5477, 0), Direction.SOUTH), + + NPC.create(NPCs.EGG_LAUNCHER_5026, Location.create(1896, 5474, 0), Direction.NORTH), + NPC.create(NPCs.EGG_LAUNCHER_5026, Location.create(1877, 5474, 0), Direction.NORTH) + ) + + fun spawnItems() { + val groundItems = GroundItemManager.getItems() + BarbassTutItems.forEach { (id, loc) -> + if (groundItems.none { it.id == id && it.location == loc && !it.isRemoved }) + produceGroundItem(null, id, 1, loc).apply { forceVisible = true } + } + } + + + } +} + +/* +https://www.youtube.com/watch?v=2A5hMOm0TMY +[CAPTAIN_CAIN_5030]: option [ Tutorial] + + + + */ \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/CommanderConnad.kt b/Server/src/main/content/minigame/barbassault/CommanderConnad.kt new file mode 100644 index 000000000..19f26ad0a --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/CommanderConnad.kt @@ -0,0 +1,112 @@ +package content.minigame.barbassault + +import core.api.addItem +import core.api.freeSlots +import core.api.openInterface +import core.game.dialogue.DialoguePlugin +import core.game.dialogue.FacialExpression +import core.game.dialogue.Topic +import core.game.node.entity.player.Player +import core.game.node.item.Item +import core.plugin.Initializable +import core.tools.END_DIALOGUE +import org.rs09.consts.Components +import org.rs09.consts.Items +import org.rs09.consts.NPCs + + +@Initializable +class CommanderConnad(player: Player? = null) : DialoguePlugin(player) { + override fun newInstance(player: Player?): DialoguePlugin { + return CommanderConnad(player) + } + override fun open(vararg args: Any?): Boolean { + //todo check if completed tut with Captain + stage = 5 + handle(0,0) + return true + } + override fun handle(componentID: Int, buttonID: Int): Boolean { + val barbasspoints = player.getBarbPoints() + + val displayName = player.name.replaceFirstChar { it.uppercaseChar() } + + when (stage) { + 0 -> playerl(FacialExpression.FRIENDLY, "Hello?").also { stage++ } + 1 -> npcl(FacialExpression.FRIENDLY, "Sorry soldier, you don't have permission to speak with me yet. Go and talk to the Captain.").also { stage = END_DIALOGUE } + + 5 -> playerl(FacialExpression.FRIENDLY, " I believe you might be able to reward me for my progress in this arena?.").also { stage++ } + 6 -> npcl(FacialExpression.FRIENDLY,"Well that depends upon your skill levels for each role.").also { stage++ } + 7 -> npcl(FacialExpression.ASKING,"What's your name soldier?").also { stage++ } + 8 -> playerl(FacialExpression.FRIENDLY, "${displayName}, Sir!").also { stage++ } + 9 -> npcl(FacialExpression.FRIENDLY," Okay. What exactly do you want to know, ${displayName}?").also { stage++ } + 10 -> showTopics( + Topic(FacialExpression.ASKING,"Can I trade some of my points?",15), + Topic(FacialExpression.ASKING,"What points do I have so far, sir?",25), + Topic(FacialExpression.ASKING,"Could I have a 'Queen Help' book?", queenBookStage(player)), + Topic(FacialExpression.ASKING,"Could I have my current wave reset to one?", areWaveOne(player)), + Topic(FacialExpression.FRIENDLY,"That is all, sir.",100) + ) + + //Open RewardInterface + 15-> npcl(FacialExpression.FRIENDLY,"Of course.").also { stage++ } + 16 -> { + end() + openInterface(player,Components.BARBASSAULT_REWARD_SHOP_491) + } + //Point Check + 25 -> npcl(FacialExpression.FRIENDLY,"Let me check...").also { stage = getBarbPointStage(player,barbasspoints.total) } + 26 -> npcl(FacialExpression.FRIENDLY,"You have absolutely no points, whatsoever. Best you get back into that arena!").also { stage = 10 } + 27 -> npcl(FacialExpression.FRIENDLY,"You have: ${barbasspoints.atk} Attacker Honour Points, ${barbasspoints.def} Defender Honour Points, ${barbasspoints.col} Collector Honour Points and ${barbasspoints.heal} Healer Honour Points.").also { stage = 10 } + + //Get Queen book. + 50 -> npcl(FacialExpression.FRIENDLY,"By all means.").also { + addItem(player, Items.QUEEN_HELP_BOOK_10562, 1) + stage = 10 + } + //Already have Queen book + 51 -> npcl(FacialExpression.ANNOYED,"You already have one!").also { stage++ } + 52 -> playerl(FacialExpression.WORRIED,"Oh yes, sorry.").also { stage = 10} + + //not enough Inventory Space + 53 -> playerl(FacialExpression.WORRIED,"Oh, no. Wait, I don't have enough space to carry one.").also { stage++ } + 54 -> npcl(FacialExpression.FRIENDLY,"Well, you can come back and get one at any time from me.").also { stage = 10 } + //Already have QueenBook + 75 -> npcl(FacialExpression.ANNOYED," You do realise that you're already on wave one?").also { stage++ } + 76 -> playerl(FacialExpression.WORRIED,"Ah. Yes. Sorry about that.").also { stage = END_DIALOGUE} + //todo find Correct Dialog for wave reset + 77 -> npcl(FacialExpression.ASKING,"I can change it down to wave 1, Are you sure you want that?").also { stage++ } + 78 -> showTopics( + Topic(FacialExpression.FRIENDLY, "Yes, reset my wave to one.",79), + Topic(FacialExpression.FRIENDLY, "No, I want to stay on wave ${player!!.getAttribute("barbass:wave")}.",10) + ) + 79 -> { + npcl(FacialExpression.ASKING,"Very well.").also { stage = END_DIALOGUE } + player.setAttribute("/save:barbass:wave", 1) + } + //END + 100 -> npcl(FacialExpression.FRIENDLY,"Very well, on your way.").also { stage = END_DIALOGUE } + } + return true + } + private fun getBarbPointStage(player: Player, total: Int): Int { + if (total == 0 ) return 26 + return 27 + } + private fun queenBookStage(player: Player?): Int { + if (freeSlots(player!!) == 0) return 53 + if (player.hasItem(Item(Items.QUEEN_HELP_BOOK_10562))) return 51 + return 50 + } + private fun areWaveOne(player: Player?): Int { + val currentWave = player!!.getAttribute("barbass:wave") + if (currentWave != 1) return 77 + return 75 + } + override fun getIds(): IntArray { + return intArrayOf(NPCs.COMMANDER_CONNAD_5029) + } +} + +//[COMMANDER_CONNAD_5029] Dialog: https://www.youtube.com/watch?v=wb1InggbaZc + diff --git a/Server/src/main/content/minigame/barbassault/PenanceStatueDialogues.kt b/Server/src/main/content/minigame/barbassault/PenanceStatueDialogues.kt new file mode 100644 index 000000000..65994467b --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/PenanceStatueDialogues.kt @@ -0,0 +1,55 @@ +package content.minigame.barbassault + +import core.api.openDialogue +import core.api.sendDialogue +import core.game.dialogue.DialogueFile +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import org.rs09.consts.Scenery + +class PenanceStatueDialogues : InteractionListener { + val statueToDialogId = mapOf( + Scenery.PENANCE_FIGHTER_STATUE_20164 to 1, + Scenery.PENANCE_HEALER_STATUE_20165 to 5, + Scenery.PENANCE_RANGER_STATUE_20167 to 10, + Scenery.PENANCE_RUNNER_STATUE_20166 to 15, + Scenery.PENANCE_QUEEN_SPAWN_STATUE_20168 to 20 + ) + val STATUES: IntArray = statueToDialogId.keys.toIntArray() + + override fun defineListeners() { + on(STATUES, IntType.SCENERY, "Inspect") { player, node -> + openDialogue(player, object : DialogueFile() { + override fun handle(componentID: Int, buttonID: Int) { + when (stage) { + 0 -> sendDialogue(player, "There seems to be a plaque on the statue. It says:").also { stage = statueToDialogId[node.id] ?: -1 } + //FIGHTER STATUE + 1 -> sendDialogue(player, "'The Penance Fighter - With the single goal to attack all that may threaten its Queen, this monster uses it's giant claws to shred its prey, and can only be stopped with brute force. Sharing the telekinetic trait of the other Penance monsters, the Penance Fighter can anticipate and adapt to").also { stage++ } + 2 -> sendDialogue(player, "defend itself. Bearing this in mind, it's important when fighting this monster to change attack style periodically to ensure damage is dealt. Most combatants will be glad to notice this creature (like the other Penance) has only one eye, and hence its depth perception is not all that it could be! Otherwise, those claws would soon destroy the most").also { stage++ } + 3 -> sendDialogue(player, "experienced of warriors!'").also { stage = 26 } + //HEALER STATUE + 5 -> sendDialogue(player,"'The Penance Healer - This monster could have arguably been called a 'Penance Poisoner', for it has a dual role - both healing other Penance and poisoning any creature it sees as a threat. It performs these roles with equal importance and switches from one to the other as soon as it has the").also { stage++ } + 6 -> sendDialogue(player,"chance of finding a target. The best way to stop a Penance Healer is fighting it at its own game. The Penance Healer is partial to food, which it uses to create its own chemicals for curing and poisoning. As a result it has to be very careful what it eats, and has a mechanism by which it will be immune to certain types of poisonous foods at").also { stage++ } + 7 -> sendDialogue(player,"different times. With this information in mind, it is in fact possible to poison the Penance Healer by using the right type of food at the right time.'").also { stage = 26 } + //RANGER STATUE + 10 -> sendDialogue(player,"'The Penance Ranger - These creatures store a highly corrosive liquid in the abdomen at the base of their bodies. It is believed that this was initially used for breaking up food matter to be passed on to the Queen for digestion. With the increase of easily digestible food sources (e.g. 'daring'").also { stage++ } + 11 -> sendDialogue(player,"adventurers), this functionality has been removed. It now seems to be used for offensive means in the form of projectiles. The only way to defeat this monster is to confront it with brute force, as it has no convenient weakness. That being said, the Penance Ranger can anticipate and adapt to attacks using the telekenisis common between").also { stage++ } + 12 -> sendDialogue(player,"all Penance, and hence, when taking on this monster, it is important to change attack style periodically to perform damage.'").also { stage = 26 } + //RUNNER STATUE + 15 -> sendDialogue(player,"'The Penance Runner - These creatures are attracted to the scent of their Queen - charging to her aid in the hope of creating a barrier to protect her from threat. Their slender legs aid in motion, and their bulky bodies are effective shields and a strong barrier when linked together. And so,").also { stage++ } + 16 -> sendDialogue(player,"they are willing to waste their own lives in the simple interest of protecting their Queen. Using this interesting trait against them, Penance Runners are lured in the arena by the exit cave, which is doused with this scent. This is used to test combatants in how many Penance Runners manage to get past and how many are stopped").also { stage++ } + 17 -> sendDialogue(player,"with the use of the traps. Penance Runners are an energetic group, and therefore take any opportunity to eat and restore energy. With this in mind, laying down food within smelling distance of the Runners will lure them along. However, they are not stupid, and look for different food to ensure they are not so easily tricked... Hence,").also { stage++ } + 18 -> sendDialogue(player,"giving them the wrong food will send them running back to their caves. It's an interesting evolutionary trait, which is transmitted telepathically between Penance Runners... One which we carefully intercept.'").also { stage = 26 } + //QUEENSPAWN STATUE + 20 -> sendDialogue(player,"'The Penance Spawn - You're only likely to see these creatures in close proximity to their creator - the dreaded Penance Queen. All Penance begin their lives in this form, mutating into the seperate classes of Penance depending on the lack or abundance of other classes in the local environment.").also { stage++ } + 21 -> sendDialogue(player,"Through telepathic communication, the Queen is able to determine the number of each class of Penance (Fighter, Ranger, Healer or Runner) and communicate to her spawn the form they should take on to fill any gaps in numbers. If the spawn receives no communication from a Queen, it turns into a Queen itself, because").also { stage++ } + 22 -> sendDialogue(player,"of the evident neccessity of such a role. These spawn will attack on sight, but a few hits by any means should stop these slimy creatures.'").also { stage = 26 } + //END OF DIALOGUE + 26 -> end() + } + } + }) + return@on true + } + } +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/QueenHelpBook.kt b/Server/src/main/content/minigame/barbassault/QueenHelpBook.kt new file mode 100644 index 000000000..016f34527 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/QueenHelpBook.kt @@ -0,0 +1,64 @@ +package content.minigame.barbassault + +import content.global.handlers.iface.BookInterface +import content.global.handlers.iface.BookLine +import content.global.handlers.iface.Page +import content.global.handlers.iface.PageSet +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import core.game.node.entity.player.Player +import org.rs09.consts.Items + +class QueenHelpBook : InteractionListener { + companion object { + private val TITLE = "Queen Help" + private val CONTENTS = arrayOf( + PageSet( + Page( //1 + BookLine("1) Collector: Pick up ", 55), + BookLine("yellow egg. pass to", 56), + BookLine("healer.", 57), + + BookLine("Take omega egg from", 58), + BookLine("Defender. Load in to ", 59), + BookLine("turret.", 60), + + BookLine("2) Healer: Take yellow", 62), + BookLine("egg from Collector.", 63), + BookLine("Poison egg in pool. Pass", 64), + BookLine("to Attacker.", 65), + + ), + Page( //2 + BookLine("", 66), + BookLine("3) Attacker: Take", 67), + BookLine("poisoned, yellow egg from", 68), + BookLine("healer Add spikes from", 69), + BookLine("mushroom. Pass to", 70), + BookLine("Defender.", 70), + BookLine("", 72), + BookLine("4) Defender: Take ", 73), + BookLine("poisoned, spiked, yellow", 74), + BookLine("from Attacker. Dunk", 75), + BookLine("in lava. Pass to Collector.", 76), + BookLine("", 77), + BookLine("", 78) + ) + ) + + ) + private fun display(player: Player, pageNum: Int, buttonID: Int) : Boolean { + BookInterface.pageSetup(player, BookInterface.FANCY_BOOK_3_49, TITLE, CONTENTS) + return true + } + } + + override fun defineListeners() { + on(Items.QUEEN_HELP_BOOK_10562, IntType.ITEM, "read") { player, _ -> + BookInterface.openBook(player, BookInterface.FANCY_BOOK_3_49, ::display) + return@on true + } + } + } + +//[QUEEN_HELP_BOOK_10562] // https://www.youtube.com/watch?v=r1x8xbz3JAA diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt new file mode 100644 index 000000000..0d0315da7 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -0,0 +1,249 @@ +package content.minigame.barbassault.arena + +import core.api.* +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import core.game.node.entity.Entity +import core.game.node.entity.player.Player +import core.game.system.task.Pulse +import core.game.world.GameWorld +import core.game.world.map.Location +import core.game.world.map.zone.ZoneBorders +import core.game.world.update.flag.context.Animation +import core.tools.Log +import org.rs09.consts.Components +import org.rs09.consts.Items +import org.rs09.consts.Scenery + +//HAMMER_2347 +//LOGS_11760 use these loggs +//1889 5407 - Barb assualt QUEEN area -- 7508 +//1891 5465 - barb assualt AREA under + +//queen spawn in Location.create(1884, 5405, 0) + +//No prayers +//sendMessage(player,"The barbarians forbid the use of prayer in their arena as they don't ~ value such methods!") + +//should be multicombat +class BarbassaultGameArea : InteractionListener, MapArea { + val ATTACKER_ICON = 10556 + val DEFENDER_ICON = 10558 + val COLLECTOR_ICON = 10557 + val HEALER_ICON = 10559 + val ROLE_ICON = intArrayOf(ATTACKER_ICON,DEFENDER_ICON,COLLECTOR_ICON,HEALER_ICON) + + + override fun defineAreaBorders(): Array { + //block standard teleports. + return arrayOf(getRegionBorders(7509)) + } + override fun areaEnter(entity: Entity) { + val player = entity as? Player ?: return + val wornIconId = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id + val interfaceId = getIconInterfaceId(wornIconId ?: -1) + if (interfaceId != null) { + //sendMessage(player,----- Wave: $Num -----") + openOverlay(player, interfaceId) + } + /*BarbassaultTut.BarbassTutNPCs.forEach { + npc -> npc.init() + npc.isWalks = false + + } + BarbassaultTut.spawnItems() + */ + } + + + override fun areaLeave(entity: Entity, logout: Boolean) { + val player = entity as? Player ?: return + + closeOverlay(player) + exitMiniGame(player) + log(this::class.java, Log.FINE, "EXITED BARBASS") + } + + override fun defineListeners() { + + on(Scenery.LADDER_20194, IntType.SCENERY, "Climb-up") { player, _ -> + sendDialogueOptions(player, "Are you sure you want to leave?", "Yes", "No") + addDialogueAction(player) { _, buttonId -> + if (buttonId == 2) { + //endGame + teleport(player, Location(2593 , 5261 )) + + } + } + return@on true + } + on(Scenery.HEALER_SPRING_20150, IntType.SCENERY, "Drink-from") { player, _ -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { + player.animate(Animation(5407)) + player.lock(5) + GameWorld.Pulser.submit(object : Pulse(3, player) { + override fun pulse(): Boolean { + heal(player, 25) + player.unlock() + sendMessage(player,"You've been healed \$Healed hitpoints.") + return true + } + }) + } + return@on true + + } + on(Scenery.HEALER_SPRING_20150, IntType.SCENERY, "Take-from") { player, _ -> + //emote 5400 + /* HEALING_VIAL_10546 -- empty + HEALING_VIAL1_10545 // 1 + HEALING_VIAL2_10544 + HEALING_VIAL3_10543 + HEALING_VIAL4_10542 // 4 + */ + + return@on true + + } + + //CATALYTIC_RUNE_12851, ELEMENTAL_RUNE_12850 + + onUnequip(ROLE_ICON) { player, _ -> + defineAreaBorders().forEach { border -> + if (border.insideBorder(player)) { + sendMessage(player, "You can't remove that!") // is there a proper message for this? + return@onUnequip false + } + } + return@onUnequip true + } + + onEquip(ROLE_ICON) { player, _ -> + defineAreaBorders().forEach { border -> + if (border.insideBorder(player)) { + sendMessage(player, "You can't remove that!") + // return@onUnequip false + } + } + return@onEquip true + } + } + + private fun exitMiniGame(player: Player) { + openOverlay(player,493) // work around to actually close interfaces. + player.interfaceManager.closeOverlay()//maybe im doing this wrong. + removeTimer(player, "teleblock") + + + val barbassItems = arrayListOf( + + Items.WORMS_10515,Items.CRACKERS_10513,Items.TOFU_10514,Items.LOGS_11760,Items.LOGS_11760,Items.HAMMER_2347,Items.DEFENDER_HORN_10538, //Defender Inv Items + Items.HEALING_VIAL_10546,Items.HEALING_VIAL1_10545,Items.HEALING_VIAL2_10544,Items.HEALING_VIAL3_10543,Items.HEALING_VIAL4_10542, //Healer Inv Items + Items.HEALER_HORN_10526,Items.HEALER_HORN_10527,Items.HEALER_HORN_10528,Items.HEALER_HORN_10529,Items.HEALER_HORN_10530, + Items.POISONED_WORMS_10540,Items.POISONED_TOFU_10539,Items.POISONED_MEAT_10541, + ) + removeAll(player, barbassItems) + + //todo should probably make sure familiars can't smuggle items out + //(player.familiarManager.familiar as? BurdenBeast)?.container?.removeAll(barbassItems)//just in case someone smuggles a pet in. + //award points, set Tp location to next wave + //or lost game Send back to wave room + + } + + fun removeAll(player: Player, items: List, container: Container = Container.INVENTORY): Boolean { + var removedAny = false + items.forEach { id -> + if (removeAll(player, id, container)) { + removedAny = true + } + } + return removedAny + } + + fun getIconInterfaceId(itemId: Int): Int? { + return when (itemId) { + ATTACKER_ICON -> Components.BARBASSAULT_OVER_ATT_485 + COLLECTOR_ICON -> Components.BARBASSAULT_OVER_COL_486 + DEFENDER_ICON -> Components.BARBASSAULT_OVER_DEF_487 + HEALER_ICON -> Components.BARBASSAULT_OVER_HEAL_488 + else -> null + } + } + + fun spawnPartyMembers(){ + //1 + //2 //3 + //5 //4 + // party slot effects where you start/spawn + val RedLeader1 = Location.create(1886, 5458, 0) + val RedLeader2 = Location.create(1885, 5457, 0) + val RedLeader3 = Location.create(1887, 5457, 0) + val RedLeader4 = Location.create(1884, 5456, 0) + val RedLeader5 = Location.create(1888, 5456, 0) + } + + +} + + +/* +484 = horn of glory! +Barricaded entrances will only slow down, not stop, Penance from entering the battlefield. +Players are allowed to use normal potions; however, potions mixed using Barbarian training may not be brought into the arena. +Every team member will lose points when a runner makes it to the end, +The only combat experience you will get here is the base experience for a magic spell using the runes given to you by the attacker machine. +//You can stand in front of the lure cave to block runners from passing by. (Note that a runner can get through if you are walked on by another player) + +[DEFENDER_HORN_10538] +[COLLECTOR_HORN_10560] +Collector Level 1 = [COLLECTION_BAG_10521] - Bag holds 2 eggs +Collector Level 2 = [COLLECTION_BAG_10522] - Bag holds 4 eggs + Egg conversion +Collector Level 3 = [COLLECTION_BAG_10523] - Bag holds 6 eggs + 40% conversion +Collector Level 4 = [COLLECTION_BAG_10524] - Bag holds 7 eggs + 60% conversion +Collector Level 5 = [COLLECTION_BAG_10525] - Bag holds 8 eggs + 80% conversion + +Attacker Level 1 = [ATTACKER_HORN_10516] - +1 Damage +Attacker Level 2 = [ATTACKER_HORN_10517] - +2 Damage +Attacker Level 3 = [ATTACKER_HORN_10518] - +3 Damage +Attacker Level 4 = [ATTACKER_HORN_10519] - +4 Damage +Attacker Level 5 = [ATTACKER_HORN_10520] - +5 Damage + +Healer Level 1 = [HEALER_HORN_10526] - Heals 10 hp +Healer Level 2 = [HEALER_HORN_10527] - Heals 15 hp +Healer Level 3 = [HEALER_HORN_10528] - Heals 20 hp +Healer Level 4 = [HEALER_HORN_10529] - Heals 25 hp +Healer Level 5 = [HEALER_HORN_10530] - Heals 35 hp + +HEALING_VIAL_10546 +HEALING_VIAL1_10545 +HEALING_VIAL2_10544 +HEALING_VIAL3_10543 +HEALING_VIAL4_10542 + +| Level | Honour Points | Defender | +|-------|----------------|----------------| +| 1 | Start level | Lure 4 spaces | +| 2 | 200 | Lure 5 spaces | +| 3 | 300 | Lure 6 spaces | +| 4 | 400 | Lure 8 spaces | +| 5 | 500 | Lure 10 spaces | +|-------|----------------|----------------| +RUNNER_TRAP2_20135 +RUNNER_TRAP1_20230 +BROKEN_TRAP0_20231 + + Only normal Magics can damage. + we use these runes in barb assault. + [ATTACKER_ITEM_MACHINE_20241] + Options[ Take-runes, Take-arrows(300 of each) + CATALYTIC_RUNE_12851, ELEMENTAL_RUNE_12850 + +https://youtu.be/_EipqTK3Qak?t=68 +Blocking off entrance, does NOT STOP runners entering, only slows + + +Announce in game room when All of a monster has been killed +" All of the $PENANCE Name have been killed! + +* */ \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/HornHelper.kt b/Server/src/main/content/minigame/barbassault/arena/HornHelper.kt new file mode 100644 index 000000000..dc887d1d6 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/HornHelper.kt @@ -0,0 +1,59 @@ +package content.minigame.barbassault.arena + +import core.api.* +import core.game.node.entity.player.Player +import org.rs09.consts.Items + +object HornHelper { + fun getAttackerHorn(player: Player): AttackerHorn? { + return AttackerHorn.values().firstOrNull { inInventory(player, it.itemId) } + } + + fun getHealerHorn(player: Player): HealerHorn? { + return HealerHorn.values().firstOrNull { inInventory(player, it.itemId) } + } + + fun getCollectorBag(player: Player): CollectionBag? { + return CollectionBag.values().firstOrNull { inInventory(player, it.itemId) } + } +} +enum class AttackerHorn(val itemId: Int) { + LEVEL_ONE(Items.ATTACKER_HORN_10516), + LEVEL_TWO(Items.ATTACKER_HORN_10517), + LEVEL_THREE(Items.ATTACKER_HORN_10518), + LEVEL_FOUR(Items.ATTACKER_HORN_10519), + LEVEL_FIVE(Items.ATTACKER_HORN_10520); + + companion object { + private val map = values().associateBy(AttackerHorn::itemId) + + fun fromId(id: Int): AttackerHorn? = map[id] + } +} +enum class HealerHorn(val itemId: Int) { + LEVEL_ONE(Items.HEALER_HORN_10526), + LEVEL_TWO(Items.HEALER_HORN_10527), + LEVEL_THREE(Items.HEALER_HORN_10528), + LEVEL_FOUR(Items.HEALER_HORN_10529), + LEVEL_FIVE(Items.HEALER_HORN_10530); + + companion object { + private val map = values().associateBy(HealerHorn::itemId) + + fun fromId(id: Int): HealerHorn? = map[id] + } +} +enum class CollectionBag(val itemId: Int) { + LEVEL_ONE(Items.COLLECTION_BAG_10521), + LEVEL_TWO(Items.COLLECTION_BAG_10522), + LEVEL_THREE(Items.COLLECTION_BAG_10523), + LEVEL_FOUR(Items.COLLECTION_BAG_10524), + LEVEL_FIVE(Items.COLLECTION_BAG_10525); + + companion object { + private val map = values().associateBy(CollectionBag::itemId) + + fun fromId(id: Int): CollectionBag? = map[id] + } +} + diff --git a/Server/src/main/content/minigame/barbassault/arena/HornListeners.kt b/Server/src/main/content/minigame/barbassault/arena/HornListeners.kt new file mode 100644 index 000000000..b67f1a8bf --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/HornListeners.kt @@ -0,0 +1,103 @@ +package content.minigame.barbassault.arena + +import core.api.sendChat +import core.api.sendMessage +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import org.rs09.consts.Items + +class HornListeners : InteractionListener { + val ATTACKER_HORNS = intArrayOf(Items.ATTACKER_HORN_10516,Items.ATTACKER_HORN_10517,Items.ATTACKER_HORN_10518,Items.ATTACKER_HORN_10519,Items.ATTACKER_HORN_10520) + val TELL_RED = "Collector: Red Eggs!" + val TELL_GREEN = "Collector: Green Eggs!" + val TELL_BLUE = "Collector: Blue Eggs!" + + val TELL_PTOFU = "Healer: Poison tofo!" + val TELL_PWORMS = "Healer: Poison worms!" + val TELL_PMEAT = "Healer: Poison meat!" + + val TELL_STYLE1 = "Attacker: Controlled/Bronze/Wind!" + val TELL_STYLE2 = "Attacker: Accurate/Iron/Water!" + val TELL_STYLE3 = "Attacker: Aggressive/Steel/Earth!" + val TELL_STYLE4 = "Attacker: Defensive/Mithril/Fire!" + + val HEALER_HORNS = intArrayOf(Items.HEALER_HORN_10526,Items.HEALER_HORN_10527,Items.HEALER_HORN_10528,Items.HEALER_HORN_10529,Items.HEALER_HORN_10530 ) + val TELL_TOFU = "Defender: Drop Tofu!" + val TELL_CRACKERS= "Defender: Drop Crackers!" + val TELL_WORMS = "Defender: Drop Worms!" + + val ALL_HORNS = intArrayOf(Items.COLLECTOR_HORN_10560,Items.DEFENDER_HORN_10538) + HEALER_HORNS + ATTACKER_HORNS + val TELL_MEDIC = "Medic!!" + + override fun defineListeners() { + on(ALL_HORNS, IntType.ITEM, "Medic") { player, _ -> + sendChat(player,TELL_MEDIC) + return@on true + } + on(ALL_HORNS, IntType.ITEM, "Drop") { player, _ -> + sendMessage(player,"I need that!") // not authentic + return@on false + } + + //ATTACKER + on(ATTACKER_HORNS, IntType.ITEM, "Tell-red") { player, _ -> + sendChat(player,TELL_RED) + return@on true + } + on(ATTACKER_HORNS, IntType.ITEM, "Tell-green") { player, _ -> + sendChat(player,TELL_GREEN) + return@on true + } + on(ATTACKER_HORNS, IntType.ITEM, "Tell-blue") { player, _ -> + sendChat(player,TELL_BLUE) + return@on true + } + + //DEFENDER + on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-tofu") { player, _ -> + sendChat(player,TELL_PTOFU) + return@on true + } + on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-worms") { player, _ -> + sendChat(player,TELL_PWORMS) + return@on true + } + on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-meat") { player, _ -> + sendChat(player,TELL_PMEAT) + return@on true + } + + //COLLECTOR + on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style1") { player, _ -> + sendChat(player,TELL_STYLE1) + return@on true + } + on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style2") { player, _ -> + sendChat(player,TELL_STYLE2) + return@on true + } + on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style3") { player, _ -> + sendChat(player,TELL_STYLE3) + return@on true + } + on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style4") { player, _ -> + sendChat(player,TELL_STYLE4) + return@on true + } + + //HEALER + on(HEALER_HORNS, IntType.ITEM, "Tell-tofu") { player, _ -> + sendChat(player,TELL_TOFU) + return@on true + } + on(HEALER_HORNS, IntType.ITEM, "Tell-crackers") { player, _ -> + sendChat(player,TELL_CRACKERS) + return@on true + } + on(HEALER_HORNS, IntType.ITEM, "tell-worms") { player, _ -> + sendChat(player,TELL_WORMS) + return@on true + } + + } +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt b/Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt new file mode 100644 index 000000000..ddf416ea8 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt @@ -0,0 +1,32 @@ +package content.minigame.barbassault.arena + +class WaveCompleteInterface { +} + +/* +[TITLE] bold/ Wave Complete! + bold/ Reward: + Bold/ The Queen is dead! + + Reward: + 80 Attacker Points + 5 Defender Points + 5 Collector Points + 5 Healer Points + The option to send your points + for + special armour and gambling + options, + which you should use before + defeating the queen again. + + advance break down --> + https://youtu.be/OjkLXOQVWEQ?t=113 + + + + + + + + */ \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/machines/AttackerMachine.kt b/Server/src/main/content/minigame/barbassault/arena/machines/AttackerMachine.kt new file mode 100644 index 000000000..5e35f79fe --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/machines/AttackerMachine.kt @@ -0,0 +1,40 @@ +package content.minigame.barbassault.arena.machines + +import core.api.EquipmentSlot +import core.api.getItemFromEquipment +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import org.rs09.consts.Items +import org.rs09.consts.Scenery +import core.api.sendMessage + + +class AttackerMachine: InteractionListener { + + val TAKE_ARROWS = intArrayOf(Items.BRONZE_ARROW_882, Items.IRON_ARROW_884,Items.STEEL_ARROW_886,Items.MITHRIL_ARROW_888) + val TAKE_RUNES = intArrayOf(Items.AIR_RUNE_556,Items.WATER_RUNE_555,Items.EARTH_RUNE_557,Items.FIRE_RUNE_554, + Items.MIND_RUNE_558,Items.CHAOS_RUNE_562, Items.DEATH_RUNE_560,Items.BLOOD_RUNE_565) + + //val TAKE_RUNES = intArrayOf(Items.CATALYTIC_RUNE_12851,Items.ELEMENTAL_RUNE_12850) + //suppose to use Catalyic and Elemental runes + + //should probably make sure familiars can't smuggle items out + + override fun defineListeners() { + on(Scenery.ATTACKER_ITEM_MACHINE_20241, IntType.SCENERY, "Take-runes") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10556) { + ItemMachine.handleAddItemMachine(player, node, TAKE_RUNES, 300) + sendMessage(player,"You take a selection of runes from the dispenser.") + } + return@on true + } + on(Scenery.ATTACKER_ITEM_MACHINE_20241, IntType.SCENERY, "Take-arrows") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10556) { + ItemMachine.handleAddItemMachine(player, node, TAKE_ARROWS, 300) + sendMessage(player,"You take a selection of arrows from the dispenser.") + } + return@on true + } + } + +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/machines/CollectorMachine.kt b/Server/src/main/content/minigame/barbassault/arena/machines/CollectorMachine.kt new file mode 100644 index 000000000..853afcb7c --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/machines/CollectorMachine.kt @@ -0,0 +1,23 @@ +package content.minigame.barbassault.arena.machines + +import core.api.EquipmentSlot +import core.api.getItemFromEquipment +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import org.rs09.consts.Scenery + +class CollectorMachine : InteractionListener { + + override fun defineListeners() { + on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Convert") { player, _ -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10557) { + //Items.RED_EGG_10532 + //Items.BLUE_EGG_10533 + //Items.GREEN_EGG_10531 + //uhhhhhh + //more research is needed. + } + return@on true + } + } +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/machines/DefenderMachine.kt b/Server/src/main/content/minigame/barbassault/arena/machines/DefenderMachine.kt new file mode 100644 index 000000000..2df3515a3 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/machines/DefenderMachine.kt @@ -0,0 +1,53 @@ +package content.minigame.barbassault.arena.machines + +import core.api.EquipmentSlot +import core.api.getItemFromEquipment +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import org.rs09.consts.Items +import org.rs09.consts.Scenery + +class DefenderMachine :InteractionListener { + val TAKE_WORMS = Items.WORMS_10515 + val TAKE_CRACKERS = Items.CRACKERS_10513 + val TAKE_TOFU = Items.TOFU_10514 + val baseItems = intArrayOf(TAKE_WORMS, TAKE_CRACKERS, TAKE_TOFU) + val STOCK_UP = IntArray(11 * baseItems.size) { i -> baseItems[i % baseItems.size] } + + + override fun defineListeners() { + on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Stock-up") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { + ItemMachine.handleAddItemMachine(player, node, STOCK_UP, 1) + } + return@on true + } + on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-crackers") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { + ItemMachine.handleAddItemMachine(player, node, intArrayOf(TAKE_CRACKERS), 5) + } + return@on true + } + on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-tofu") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { + ItemMachine.handleAddItemMachine(player, node, intArrayOf(TAKE_TOFU), 5) + } + return@on true + } + on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-worms") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { + ItemMachine.handleAddItemMachine(player, node, intArrayOf(TAKE_WORMS), 5) + } + return@on true + } + } +} + +/* + [DEFENDER_ITEM_MACHINE_20242] + Options[ Stock-up, Take-crackers, Take-tofu, Take-worms] + take items gives 5, + stock up alternates crackers tofu worms + CRACKERS_10513, TOFU_10514, WORMS_10515 + + */ \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/machines/HealerMachine.kt b/Server/src/main/content/minigame/barbassault/arena/machines/HealerMachine.kt new file mode 100644 index 000000000..d75d121f6 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/machines/HealerMachine.kt @@ -0,0 +1,65 @@ +package content.minigame.barbassault.arena.machines + + +import core.api.EquipmentSlot +import core.api.getItemFromEquipment +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import org.rs09.consts.Items +import org.rs09.consts.Scenery + +class HealerMachine : InteractionListener { + val ALL_HEALER_VAILS = intArrayOf(Items.HEALING_VIAL_10546,Items.HEALING_VIAL1_10545,Items.HEALING_VIAL2_10544,Items.HEALING_VIAL3_10543,Items.HEALING_VIAL4_10542) + val TAKE_VAIL = Items.HEALING_VIAL4_10542 + val TAKE_WORMS = Items.POISONED_WORMS_10540 + val TAKE_TOFU = Items.POISONED_TOFU_10539 + val TAKE_MEAT = Items.POISONED_MEAT_10541 + + val baseItems = intArrayOf(TAKE_WORMS, TAKE_TOFU, TAKE_MEAT) + val STOCK_UP = IntArray(11 * baseItems.size) { i -> baseItems[i % baseItems.size] } + + + override fun defineListeners() { + on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Stock-up") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { + //todo only allowed to have one vial + ItemMachine.handleAddItemMachine(player, node, STOCK_UP, 1) + } + return@on true + } + on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-vail") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { + //todo only allowed to have one vial + ItemMachine.handleAddItemMachine(player, node, intArrayOf(TAKE_VAIL), 1) + } + return@on true + } + on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-worms") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { + ItemMachine.handleAddItemMachine(player, node, intArrayOf(TAKE_WORMS), 5) + } + return@on true + } + on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-tofu") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { + ItemMachine.handleAddItemMachine(player, node, intArrayOf(TAKE_TOFU), 5) + } + return@on true + } + on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-meat") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { + ItemMachine.handleAddItemMachine(player, node, intArrayOf(TAKE_MEAT), 5) + } + return@on true + } + } +} + + /* + * + * [HEALER_ITEM_MACHINE_20243] + Options[ Stock-up, Take-vail, Take-tofu, Take-worms, Tale-meat] + Take item gives 5! + Stock-up gives vial and alternating tofo-worms-meat till full + POISONED_TOFU_10539,POISONED_MEAT_10541,POISONED_WORMS_10540 +*/ \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/machines/ItemMachine.kt b/Server/src/main/content/minigame/barbassault/arena/machines/ItemMachine.kt new file mode 100644 index 000000000..d12bc66da --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/machines/ItemMachine.kt @@ -0,0 +1,33 @@ +package content.minigame.barbassault.arena.machines + +import core.api.addItem +import core.game.node.Node +import core.game.node.entity.player.Player +import core.game.system.task.Pulse +import core.game.world.GameWorld +import core.game.world.update.flag.context.Animation + +class ItemMachine { + companion object { + fun handleAddItemMachine(player: Player,node: Node, items: IntArray, amount: Int) + { + player.animate(Animation(5419)) // find right animation + player.lock(5) // + + GameWorld.Pulser.submit(object : Pulse(3, player) { + override fun pulse(): Boolean { + //sendMessage(player,"You fill up your inventory with food from the dispenser") //defender + //sendMessage(player,"You fill up your inventory with poisoned food from the dispenser")// healer + //todo send right message depending on role + addArrayOfItems(player,items,amount) + player.unlock() + return true + } + }) + } + + fun addArrayOfItems(player: Player, ids: IntArray, amount: Int) { + ids.forEach { id -> addItem(player,id,amount) } + } + } +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt new file mode 100644 index 000000000..d1b0adadd --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt @@ -0,0 +1,59 @@ +package content.minigame.barbassault.arenas.monsters + +import content.minigame.barbassault.arena.HornHelper +import core.api.* +import core.game.node.entity.Entity +import core.game.node.entity.combat.BattleState +import core.game.node.entity.combat.CombatStyle +import core.game.node.entity.npc.NPC +import core.game.node.entity.npc.NPCBehavior +import core.game.node.entity.player.Player +import org.rs09.consts.NPCs + +val PENANCE_FIGHTER_IDS = listOf( + NPCs.PENANCE_FIGHTER_5040, + NPCs.PENANCE_FIGHTER_5044, + NPCs.PENANCE_FIGHTER_5045, + NPCs.PENANCE_FIGHTER_5213, + NPCs.PENANCE_FIGHTER_5214, + NPCs.PENANCE_FIGHTER_5215, + NPCs.PENANCE_FIGHTER_5216, + NPCs.PENANCE_FIGHTER_5217, + NPCs.PENANCE_FIGHTER_5218, + NPCs.PENANCE_FIGHTER_5219) + +class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { + override fun canBeAttackedBy(self: NPC, attacker: Entity, style: CombatStyle, shouldSendMessage: Boolean): Boolean { + if (attacker is Player && getItemFromEquipment(attacker, EquipmentSlot.CAPE)?.id != 10556) { + sendMessage(attacker,"These Penance are immune to your attacks.") + return false + } + return true + } + override fun getXpMultiplier(self: NPC, attacker: Entity): Double { + return 0.0 + } + override fun beforeDamageReceived(self: NPC, attacker: Entity, state: BattleState) { + val firstBefore = state.estimatedHit + state.estimatedHit = firstBefore + (HornHelper.getAttackerHorn(attacker as Player)?.ordinal?.plus(1) ?: 0) +1 + + } + override fun onCreation (self: NPC) { + self.setAttribute("agg_radius",2) + self.isWalks = true + self.isNeverWalks = false + self.walkRadius = 64 + self.isAggressive = true + self.isRespawn = false + + self.definition.combatDistance = 1 + self.properties.combatPulse.style = CombatStyle.MELEE + + } +} + +//Shrink death 5098 +//Fighter_Attack_5097 +//5096 take hit +//5095_Move +//9094_Idle \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceHealerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceHealerNPC.kt new file mode 100644 index 000000000..37f77737c --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceHealerNPC.kt @@ -0,0 +1,47 @@ +package content.minigame.barbassault.arena.monsters + +import core.game.node.entity.Entity +import core.game.node.entity.npc.NPC +import core.game.node.entity.npc.NPCBehavior +import org.rs09.consts.NPCs + +val PENANCE_HEALER_IDS = listOf( + NPCs.PENANCE_HEALER_5043, + NPCs.PENANCE_HEALER_5238, + NPCs.PENANCE_HEALER_5239, + NPCs.PENANCE_HEALER_5240, + NPCs.PENANCE_HEALER_5241, + NPCs.PENANCE_HEALER_5242, + NPCs.PENANCE_HEALER_5243, + NPCs.PENANCE_HEALER_5244, + NPCs.PENANCE_HEALER_5245, + NPCs.PENANCE_HEALER_5246 + ) +class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS.toIntArray()) { + override fun getXpMultiplier(self: NPC, attacker: Entity): Double { + return 0.0 + } + + //sendMessage(player,"that's the wrong type of poisoned food to use! Penalty!") + +} + +/* + Can only heal Penance Runners + Can only be Poisoned by Healer roll + Poisoned tofu/Poisoned worms/Poisoned meat announced by Defender + + poisoned food will cause a total of 54 damage over time. + First spawn = will target visible player then target visible Penance Runner,heal it to full health. repeat + No runners = Randomly Roam + +Poisoned tofu = 10539 + Poisoned worms = 10540 + Poisoned meat = 10541 + +Healer emote: +healer_Idle_5104 +healer_hit_5105 +healer_Death_5106 +Healer_attack_5107? + */ \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceQueenNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceQueenNPC.kt new file mode 100644 index 000000000..1fe23f59f --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceQueenNPC.kt @@ -0,0 +1,34 @@ +package content.minigame.barbassault.arena.monsters + +import core.api.sendMessage +import core.game.node.entity.Entity +import core.game.node.entity.combat.CombatStyle +import core.game.node.entity.npc.NPC +import core.game.node.entity.npc.NPCBehavior +import core.game.node.entity.player.Player +import org.rs09.consts.NPCs + +class PenanceQueenNPC : NPCBehavior(NPCs.PENANCE_QUEEN_5247){ + override fun canBeAttackedBy(self: NPC, attacker: Entity, style: CombatStyle, shouldSendMessage: Boolean): Boolean { + if (attacker is Player ) { + sendMessage(attacker,"Only an Omega Egg can hurt the queen!") + return false + } + return true + } + override fun getXpMultiplier(self: NPC, attacker: Entity): Double { + return 0.0 + } +} + + +/* +queen emote: +queen_hit_5408+ +queen_move_5409 +queen_Idle_5410 +queen_attack_5411 +queen_Death_5412 +queen_attack2_5413 +queen_Spawnin_5414 +*/ \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt new file mode 100644 index 000000000..3e6ad2706 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt @@ -0,0 +1,60 @@ +package content.minigame.barbassault.arena.monsters + +import core.api.* +import core.api.getItemFromEquipment +import core.game.node.entity.Entity +import core.game.node.entity.combat.CombatStyle +import core.game.node.entity.npc.NPC +import core.game.node.entity.npc.NPCBehavior +import core.game.node.entity.player.Player +import org.rs09.consts.NPCs +//20730 = rangers cast +val PENANCE_RANGER_IDS = listOf( + NPCs.PENANCE_RANGER_5041, + NPCs.PENANCE_RANGER_5229, + NPCs.PENANCE_RANGER_5230, + NPCs.PENANCE_RANGER_5231, + NPCs.PENANCE_RANGER_5232, + NPCs.PENANCE_RANGER_5233, + NPCs.PENANCE_RANGER_5234, + NPCs.PENANCE_RANGER_5235, + NPCs.PENANCE_RANGER_5236, + NPCs.PENANCE_RANGER_5237 +) +class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { + override fun canBeAttackedBy(self: NPC, attacker: Entity, style: CombatStyle, shouldSendMessage: Boolean): Boolean { + if (attacker is Player && getItemFromEquipment(attacker, EquipmentSlot.CAPE)?.id != 10556) { + sendMessage(attacker, "These Penance are immune to your attacks.") + return false + } + return true + } + + override fun getXpMultiplier(self: NPC, attacker: Entity): Double { + return 0.0 + } + override fun onCreation (self: NPC) { + self.setAttribute("agg_radius",2) + self.isWalks = true + self.isNeverWalks = false + self.walkRadius = 64 + self.isAggressive = true + + self.definition.combatDistance = 8 + self.properties.combatPulse.style = CombatStyle.RANGE + } + +} + + + +/* +* Combat-style/arrow-type/magic-spell announced by Collector +* Controlled/Bullet/Wind +* Accurate/Field/Water +* Aggressive/Blunt/Earth +* Defensive/Barbed/Fire +* Poisons (from both weapons and green eggs) +* Egg fired from the Egg Launcher +* Recoil damage from any player +*/ diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt new file mode 100644 index 000000000..18ca9355e --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt @@ -0,0 +1,50 @@ +package content.minigame.barbassault.arena.monsters + +import core.game.node.entity.Entity +import core.game.node.entity.npc.NPC +import core.game.node.entity.npc.NPCBehavior +import core.game.world.map.Location +import org.rs09.consts.NPCs + +val PENANCE_RUNNER_IDS = listOf( + NPCs.PENANCE_RUNNER_5042, + NPCs.PENANCE_RUNNER_5220, + NPCs.PENANCE_RUNNER_5221, + NPCs.PENANCE_RUNNER_5222, + NPCs.PENANCE_RUNNER_5223, + NPCs.PENANCE_RUNNER_5224, + NPCs.PENANCE_RUNNER_5225, + NPCs.PENANCE_RUNNER_5226, + NPCs.PENANCE_RUNNER_5227, + NPCs.PENANCE_RUNNER_5228, +) +class PenanceRunnerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { + val GOOD_EAT = "Chomp, chomp" + val BAD_EAT = "Blurghh" + val TRAP_HIT = "Urghhh!" + + override fun getXpMultiplier(self: NPC, attacker: Entity): Double { + return 0.0 + } + override fun onCreation(self: NPC) { + self.isWalks = true + self.walkRadius = 22 + } + + fun seekFood(){ + + } + +} + + +//good food dropped stays "good" +//bad food dropped stays bad +/* +Runner emote + Runner_death_5103 + Runner_trap_Death_ 5102 +runner_hit_5101 +runner_Move_5100 +runner_Idle 5099 + */ \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceSpawnNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceSpawnNPC.kt new file mode 100644 index 000000000..94b51d992 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceSpawnNPC.kt @@ -0,0 +1,12 @@ +package content.minigame.barbassault.arena.monsters +import core.game.node.entity.Entity +import core.game.node.entity.npc.NPC +import core.game.node.entity.npc.NPCBehavior +import org.rs09.consts.NPCs + + +class PenanceSpawnNPC : NPCBehavior(NPCs.QUEEN_SPAWN_5248) { + override fun getXpMultiplier(self: NPC, attacker: Entity): Double { + return 0.0 + } +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt new file mode 100644 index 000000000..987d001fd --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt @@ -0,0 +1,79 @@ +package content.minigame.barbassault.arena.scenery + +import content.minigame.barbassault.arena.monsters.PENANCE_RUNNER_IDS +import core.api.* +import core.game.node.entity.Entity +import core.game.node.entity.player.Player +import core.game.world.map.Location +import core.game.world.map.zone.ZoneBorders + + +// RUNNER_TRAP2_20135 +// RUNNER_TRAP1_20230 +// BROKEN_TRAP0_20231 +//Trap East Location.create(1901, 5474, 0) +//trap west Location.create(1871, 5473, 0) + +//emote 5365 maybe +//emote 5416 long +//emote 5416 long +//emote 5417 block wall + +//trap only kills if Runner eats GOOD bait. +//If runner eats bad bait they escape +class DefenderTrap : MapArea { + val GOOD_EAT = "Chomp, chomp" + val BAD_EAT = "Blurghh" + val TRAP_HIT = "Urghhh!" + val TRAP_EAST_ZONE: ZoneBorders = ZoneBorders(1900, 5475, 1902, 5473, 0) + val TRAP_EAST = Location.create(1901, 5474, 0) + val TRAP_WEST_ZONE: ZoneBorders = ZoneBorders(1870, 5474, 1872, 5472, 0) + val TRAP_WEST = Location.create(1871, 5473, 0) + val TRAPS_ZONE = arrayOf(TRAP_EAST_ZONE,TRAP_WEST_ZONE) + val TRAPS = arrayOf(TRAP_WEST,TRAP_EAST) + val playersInArea = mutableListOf() + + override fun defineAreaBorders(): Array { + return TRAPS_ZONE + } + override fun areaEnter(entity: Entity) { + if (PENANCE_RUNNER_IDS.contains(entity.id)) { + killRunner(entity) + updateTrap(entity.location) + sendMessageArea() + } + + val player = entity as? Player ?: return + playersInArea.add(player) + + + } + + override fun areaLeave(entity: Entity, logout: Boolean) { + val player = entity as? Player ?: return + playersInArea.remove(player) + } + + fun killRunner(entity: Entity){ + + } + + fun updateTrap(location: Location) { + if (TRAPS.contains(location)){ + + } + } + fun sendMessageArea(){ + playersInArea.forEach { player -> + sendMessage(player,"Entered Trap Area") + } + } + + +//you fixed the Penance Runner trap. + //sendMessage(player,"A Penance Runner broke a trap to the east/west!") //When a runner dies to trap announce to Defenders + //replaceScenery() + //animateScenery +} + + diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt new file mode 100644 index 000000000..58c8ce136 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -0,0 +1,37 @@ +package content.minigame.barbassault.arena.scenery + +class EggCannon { + + ///stun(entity: Entity, ticks: Int) + ///isStunned(entity: Entity) + //applyPoison (entity: Entity, source: Entity, severity: Int) + //isPoisoned (entity: Entity) : Boolean + //spawnProjectile + //face() + + //error message CHATBOX "[bold]all of the _PENANCE_ have been killed!" + //error messageif out of range CHATBOX "There are no targetable _PENANCE_ within fireing range." + +} +//emote 5428 maybe +/* GOLD I TELL YOU GOLD!!!! +https://youtu.be/_EipqTK3Qak?t=106 + +//egg explosion 20727 + +shoot option when no eggs in hoper = +MEssage chatbox-> There are no egs in the hopper. + +Look-in -> +The hopper contains +0 poison egs, 0 explosive eggs +and 0 stun eggs. + +stun eggs +explosive eggs +poison eggs + messages +You load the hopper. +You cant load any more /Egg_type/s. + + */ \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt new file mode 100644 index 000000000..8d8e78b36 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt @@ -0,0 +1,82 @@ +package content.minigame.barbassault.arena.scenery + +import core.api.sendMessage +import core.game.component.Component +import core.game.component.ComponentDefinition +import core.game.component.ComponentPlugin +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import core.game.node.entity.player.Player +import core.plugin.Plugin +import org.rs09.consts.Components +import org.rs09.consts.Scenery + +class HornOfGlory : ComponentPlugin() , InteractionListener { + companion object { + val QUEEN_ARRIVE = "The Queen has arrived and you can no longer use the horn of glory!" + //attacker + val CONTROLED_BRONZE_WIND = 0 + val ACCURATE_IRON_WATER = 1 + val AGGRISSIVE_STEEL_EARTH = 2 + val DEFENSIVE_MITHRIL_FIRE = 3 + //defender + val FOOD_TOFU = 0 + val FOOD_CRACKERS = 1 + val FOOD_WORMS = 2 + //collector + val RED_EGG = 0 + val GREEN_EGG = 1 + val BLUE_EGG = 2 + //healer + val POISON_TOFU = 0 + val POISON_WORMS = 1 + val POISON_MEAT = 2 + + val CALL_BUTTON = mapOf( + 16 to CONTROLED_BRONZE_WIND, + 17 to ACCURATE_IRON_WATER, + 18 to AGGRISSIVE_STEEL_EARTH, + 19 to DEFENSIVE_MITHRIL_FIRE, + + 20 to FOOD_TOFU, + 22 to FOOD_CRACKERS, + 21 to FOOD_WORMS, + + 13 to RED_EGG, + 14 to GREEN_EGG, + 15 to BLUE_EGG, + + 23 to POISON_TOFU, + 24 to POISON_WORMS, + 25 to POISON_MEAT + + ) + } + + + override fun newInstance(arg: Any?): Plugin { + ComponentDefinition.forId(Components.BARBASSAULT_HORN_484).plugin = this + return this + } + + override fun handle( + player: Player?, + component: Component?, + opcode: Int, + button: Int, + slot: Int, + itemId: Int + ): Boolean { + sendMessage(player!!,"Button " +button ) + return true + } + + override fun defineListeners() { + on(Scenery.HORN_OF_GLORY_20247, IntType.SCENERY, "Call") { player, _ -> + //emote 5438 + player.interfaceManager.open(Component(484)) + return@on true + + } + } +} diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt new file mode 100644 index 000000000..2a99dbe3f --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt @@ -0,0 +1,403 @@ +package content.minigame.barbassault.lobby + +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.party.Party +import content.minigame.barbassault.party.PartyHandler +import content.minigame.barbassault.party.PartyService +import core.api.* +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import core.game.node.Node +import core.game.node.entity.Entity +import core.game.node.entity.player.Player +import core.game.node.item.Item +import core.game.system.task.Pulse +import core.game.world.GameWorld.ticks +import core.game.world.map.zone.ZoneBorders + +import org.rs09.consts.Items +import org.rs09.consts.Scenery + + +//"-- Next wave no longer starting" + +class BarbassaultLobby : InteractionListener, MapArea { + + override fun defineAreaBorders(): Array { + return areaBorders + } + override fun areaEnter(entity: Entity) { + updatePlayerWave(entity) + // openOverlay(entity, 256) + // Components.BARBASSAULT_PLAYERSTAT_490 + sendMessage(entity as Player,"Party system is NOT Fully Implemented!!") + } + + override fun areaLeave(entity: Entity, logout: Boolean) { + if (entity is Player) { + entity.interfaceManager.closeOverlay() + val barbassItems = intArrayOf(Items.POISONED_WORMS_10540) + + entity.equipment.removeAll(barbassItems) + entity.inventory.removeAll(barbassItems) + } + } + fun updatePlayerWave(entity: Entity) { + val player = entity as? Player ?: return + val location = player.location + + if (QUICK_START.insideBorder(location)) { + entity.setAttribute("/save:barbass:wave", 1) + return + } + for ((index, lobby) in waveLobbies.withIndex()) { + if (lobby.insideBorder(location)) { + if (lobby != MAIN_LOBBY) { // MAIN_LOBBY should not assign a wave number + entity.setAttribute("/save:barbass:wave", index + 1) + } + return + } + } + } + + //attacker 20561 : ch8 + //defender 20566 : ch10 + //collector 20563 : ch13 + //healer 20569 : ch14 + override fun defineListeners() { + onUseWithPlayer(Items.SCROLL_10512) { inviter, _, invitee -> + val role = BarbRole.DEFENDER + PartyService.inviteToParty(inviter, invitee as Player, role) + + val partyId = inviter.getAttribute("barbass:party-id") + val party = partyId?.let { PartyHandler.getParty(it) } + + if (party != null) { + for (member in party.allMembers()) { + PartyService.updatePartyInterface(member.player) + } + } + return@onUseWithPlayer true + + } + on(Items.SCROLL_10512, IntType.ITEM, "Read") { player, _ -> + //https://youtu.be/GYh6JPKNOSA?t=233 -- I know 2017, but only example for read scroll iv found. + // waveAdvance(player) + + return@on true + } + on(Items.SCROLL_10512, IntType.ITEM, "Write-Role") { player, _ -> + //player.interfaceManager.open(Component(493)) + //setInterfaceModel(player, 20561, 493, 8,1) + sendDialogueOptions( + player, + "Which role would you like to perform?", + "Attacker", "Defender","Collector","Healer","Cancel") + addDialogueAction(player) { player , buttonId -> + writeRole(player,buttonId) + } + return@on true + } + on(Items.SCROLL_10512, IntType.ITEM, "Clear") { player, _ -> + val partyId = player.getAttribute("barbass:party-id") ?: return@on true + val party = PartyHandler.getParty(partyId) ?: return@on true + if (party.getLeader() != player) { + player.sendMessage("Only the party leader can clear the party.") + return@on true + } + val members = party.allMembers().map { it.player } + for (member in members) { + member.removeAttribute("barbass:party-id") + sendMessage(member,"The party has been cleared.") + closeOverlay(member) + openOverlay(member, 256) + PartyService.updatePartyInterface(member) + } + + PartyHandler.removeParty(partyId) + + return@on true + } + + + on(Scenery.LADDER_20193, IntType.SCENERY, "Climb-down") { player, _ -> + closeOverlay(player) // close party, + openOverlay(player, 494)// open countdown, Make a Count DownHandler + return@on true + } + on(Scenery.DOOR_20209, IntType.SCENERY, "Pass") { player, node -> + if (!QUICK_START.insideBorder(player.location)){ + player.setAttribute("/save:barbass:wave", 1) + handlePlayerOptionDoor(player) { role -> + player.sendMessage("You are a ${role.name.lowercase().replaceFirstChar { it.uppercase() }}.") + handleWaveDoor(player, node, 489) + } + }else { + handleWaveDoor(player, node, 489) + } + return@on true + } + + on(BARBDOORS, IntType.SCENERY, "Pass") { player, node -> + handleWaveDoor(player, node,256) + return@on true + } + + on(Scenery.SCROLL_TABLE_20149, IntType.SCENERY, "Take-from") { player, _ -> + if(!player.inventory.containsItem(Item(Items.SCROLL_10512, 1)) ) { + //do you wish to take a scroll? yes ? no + sendDialogueOptions(player, "Take a recruitment scroll?", "Yes", "No") + addDialogueAction(player) { _, buttonId -> + when (buttonId) { + 2 -> { + if (player.inventory.add(Item(Items.SCROLL_10512, 1))) { + player.sendMessage("You take scroll from table") + } else { + player.sendMessage("You dont have enough inventory space") + } + } + } + } + } else { + player.sendMessage("You already have a scroll") + } + return@on true + } + } + //DOOR_20209 +// [Title][red] "Which role would you like to perform?" +// [0] "Attacker" +// [1] "Defender" +// [2] "Collector" +// [3] "Healer" +// [4] "I'll be any role!" + + /*private val pulse = object : Pulse(1) { + override fun pulse(): Boolean { + ticks++ + //setInterfaceText(player, ticks.toString(),494,0) + // for people in party update our time to next wave start + // maybe this is not the right way to do it? + if (ticks >= 500) { + ticks = 400 + } + return false + } + } + */ + enum class RoomRole { + ATTACKER, DEFENDER, COLLECTOR, HEALER, ANYROLE + } + + + fun getModelFromButton(button: Int): Int { + return when (button) { + 2 -> 20561 + 3 -> 20566 + 4 -> 20563 + 5 -> 20569 + else -> 0 // Unknown or no match + } + } + fun getRoleFromButton(button: Int): BarbRole? { + return when (button) { + 2 -> BarbRole.ATTACKER + 3 -> BarbRole.DEFENDER + 4 -> BarbRole.COLLECTOR + 5 -> BarbRole.HEALER + else -> null + } + } + fun createPartyAsLeader(leader: Player, role: BarbRole): Int { + val (partyId, party) = PartyHandler.createNewParty() + val success = party.add(leader, role) + sendMessage(leader, "Party created with ID: $partyId") + if (!success) { + PartyHandler.removeParty(partyId) + } + + return partyId + } + + fun writeRole(player: Player, buttonId: Int) { + if (buttonId == 6) return + val playerRole = getRoleFromButton(buttonId) ?: return + val partyId = player.getAttribute("barbass:party-id") + val party = partyId?.let { PartyHandler.getParty(it) } + if (party != null) { + val roleCount = party.allMembers().count { it.role == playerRole } + if (roleCount >= 2) { + sendMessage(player,"That role is already full.") + return + } + party.changeRole(player, playerRole) + PartyService.updatePartyInterface(player) + } else { + val newPartyId = createPartyAsLeader(player, playerRole) + PartyService.updatePartyInterface(player) + } + sendMessage(player,"You've set your role to ${playerRole.name.lowercase().replaceFirstChar { it.uppercase() }}") + } + + fun handlePlayerOptionDoor(player: Player, roomRoleOptions:(RoomRole) -> Unit){ + sendDialogueOptions( + player, + "Which role would you like to perform?", + "Attacker", "Defender","Collector","Healer","I'll be any role!") + addDialogueAction(player) { _, buttonId -> + val role = when (buttonId) { + 2 -> RoomRole.ATTACKER + 3 -> RoomRole.DEFENDER + 4 -> RoomRole.COLLECTOR + 5 -> RoomRole.HEALER + 6 -> RoomRole.ANYROLE + else -> RoomRole.ANYROLE + } + roomRoleOptions(role) + } + } + fun handleWriteRole(player: Player){ + sendDialogueOptions( + player, + "Which role do you wish to be?", + "Attacker", "Defender","Collector","Healer","Cancel") + addDialogueAction(player) { _, buttonId -> + when (buttonId) { + 2 -> BarbRole.ATTACKER + 3 -> BarbRole.DEFENDER + 4 -> BarbRole.COLLECTOR + 5 -> BarbRole.HEALER + else -> {} + } + } + + } + fun handleWaveDoor(player: Player, node: Node,iface: Int){ + val doorLoc = node.location + val playerLoc = player.location + var wave = player.getAttribute("barbass:wave", 1) + if (wave == BARBWAVEDOOR[node.id]) { + val insideRoom = playerLoc.y <= doorLoc.y + val moveY = if (insideRoom) 1 else -1 + //ToDo fix walking trough wall when Using door from side. + forceMove(player, playerLoc, playerLoc.transform(0, moveY, 0), 25, 60, null, 819) { + if (insideRoom) { + closeOverlay(player) + PartyService.leaveParty(player) + } else { + openOverlay(player, iface) + + player.sendMessage("you enter wave ${BARBWAVEDOOR[node.id]}") + } + } + } + } + fun waveAdvance(player: Player) { + var wave = player.getAttribute("barbass:wave", 1) + if (wave in 1..waveLobbies.size) { + val targetLobby = waveLobbies[wave] + teleport(player, targetLobby.randomWalkableLoc) + if (wave == 10) {player.setAttribute("/save:barbass:wave", 1)} + } else { + println("Invalid wave number: $wave") + } + } + + companion object { + // Locations + val QUICK_START: ZoneBorders = ZoneBorders(2595, 5278, 2610, 5271, 0) + val MAIN_LOBBY: ZoneBorders = ZoneBorders(2588, 5266, 2597, 5261, 0) + + val WAVE_LOBBY1: ZoneBorders = ZoneBorders(2576, 5298, 2583, 5291, 0) + val WAVE_LOBBY2: ZoneBorders = ZoneBorders(2584, 5298, 2591, 5291, 0) + + val WAVE_LOBBY3: ZoneBorders = ZoneBorders(2595, 5298, 2602, 5291, 0) + val WAVE_LOBBY4: ZoneBorders = ZoneBorders(2603, 5298, 2610, 5291, 0) + + + val WAVE_LOBBY5: ZoneBorders = ZoneBorders(2576, 5288, 2583, 5281, 0) + val WAVE_LOBBY6: ZoneBorders = ZoneBorders(2584, 5288, 2591, 5281, 0) + + val WAVE_LOBBY7: ZoneBorders = ZoneBorders(2595, 5288, 2602, 5281, 0) + val WAVE_LOBBY8: ZoneBorders = ZoneBorders(2603, 5288, 2610, 5281, 0) + + val WAVE_LOBBY9: ZoneBorders = ZoneBorders(2576, 5278, 2583, 5271, 0) + val WAVE_LOBBY10: ZoneBorders = ZoneBorders(2584, 5278, 2591, 5271, 0) + + val areaBorders = arrayOf( + QUICK_START, + WAVE_LOBBY1, + WAVE_LOBBY2, + WAVE_LOBBY3, + WAVE_LOBBY4, + WAVE_LOBBY5, + WAVE_LOBBY6, + WAVE_LOBBY7, + WAVE_LOBBY8, + WAVE_LOBBY9, + WAVE_LOBBY10 + ) + val waveLobbies = listOf( + WAVE_LOBBY1, WAVE_LOBBY2, WAVE_LOBBY3, WAVE_LOBBY4, + WAVE_LOBBY5, WAVE_LOBBY6, WAVE_LOBBY7, WAVE_LOBBY8, + WAVE_LOBBY9, WAVE_LOBBY10, + MAIN_LOBBY + ) + + val BARBDOORS = intArrayOf( Scenery.DOOR_20199, + Scenery.DOOR_20200, + Scenery.DOOR_20201, + Scenery.DOOR_20202, + Scenery.DOOR_20203, + Scenery.DOOR_20204, + Scenery.DOOR_20205, + Scenery.DOOR_20206, + Scenery.DOOR_20207, + Scenery.DOOR_20208, + ) + } + val BARBWAVEDOOR = hashMapOf( + 20199 to 1, + 20200 to 2, + 20201 to 3, + 20202 to 4, + 20203 to 5, + 20204 to 6, + 20205 to 7, + 20206 to 8, + 20207 to 9, + 20208 to 10, + 20209 to 1) + + // override fun tick() { + // TODO("Not yet implemented") + // } +} + + + + + + + + + +/* +PRIVATE_PALDO_5031 -- Big axe barb at entrance to main lobby +PRIVATE_PALDON_5034 -- sword -- Above wave 7 and 8 Source:https://youtu.be/VPlIYB1h9KM?t=340 +PRIVATE_PENDRON_5032 -- Mace -- Above arrow Guessing +PRIVATE_PIERREB_5033 -- bowman -- Above wave 9 and 10 Source:https://youtu.be/XHp7g7dz12M?t=83 + + +DOOR_20209 + [Title][red] "Which role would you like to perform?" + [0] "Attacker" + [1] "Defender" + [2] "Collector" + [3] "Healer" + [4] "I'll be any role!" +SCROLL_10512 -- LeaderScroll +QUEEN_HELP_BOOK_10562 -- Get from cain and POH bookcase +1889 5407 - Barb assualt QUEEN area +1891 5465 - barb assualt AREA under + */ \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/lobby/PrivatesDialogues.kt b/Server/src/main/content/minigame/barbassault/lobby/PrivatesDialogues.kt new file mode 100644 index 000000000..259f8329b --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/lobby/PrivatesDialogues.kt @@ -0,0 +1,85 @@ +package content.minigame.barbassault + +import core.api.animate +import core.api.sendMessage +import core.game.dialogue.DialoguePlugin +import core.game.dialogue.FacialExpression +import core.game.node.entity.npc.NPC +import core.game.node.entity.player.Player +import core.game.world.update.flag.context.Animation +import core.plugin.Initializable +import core.tools.END_DIALOGUE +import org.rs09.consts.NPCs + +@Initializable +class PrivatesDialogues(player: Player? = null) : DialoguePlugin(player){ + + val NPCtoDialogStage = mapOf( + NPCs.PRIVATE_PALDON_5034 to 1, + NPCs.PRIVATE_PALDO_5031 to 6, + NPCs.PRIVATE_PIERREB_5033 to 11, + NPCs.PRIVATE_PENDRON_5032 to 20, + + ) + val PRIVATES: IntArray = NPCtoDialogStage.keys.toIntArray() + + override fun newInstance(player: Player?): DialoguePlugin { + return PrivatesDialogues(player) + } + + override fun open(vararg args: Any?): Boolean { + val currentNPC = args[0] as NPC + npc = currentNPC + stage = NPCtoDialogStage[currentNPC.id] ?: -1 + sendMessage(player, stage.toString()) + handle(0,0) + return true + } + + + override fun handle(componentID: Int, buttonID: Int): Boolean { + when (stage) { + //PRIVATE_PALDON + 1 -> playerl(FacialExpression.FRIENDLY, "Hi.").also { stage++ } + 2 -> npcl(FacialExpression.ANNOYED, "Shhh. Don't talk to me.").also { stage++ } + 3 -> playerl(FacialExpression.THINKING, "What? Why?").also { stage++ } + 4 -> npcl(FacialExpression.AFRAID, "If I'm seen slacking off by talking to you, I'll be in deep trouble!").also { stage++ } + 5 -> playerl(FacialExpression.WORRIED, "Oh... Sorry.").also { stage = END_DIALOGUE} + //PRIVATE_PALDO + 6 -> playerl(FacialExpression.FRIENDLY, "Hi, soldier..").also { stage++ } + 7 -> npcl(FacialExpression.FRIENDLY, "Why, hello there!").also { stage++ } + 8 -> playerl(FacialExpression.THINKING, "You seem like a jolly chap.").also { stage++ } + 9 -> npcl(FacialExpression.FRIENDLY, "And why not? 'Tis a greeeaat day!").also { stage++ } + 10 -> playerl(FacialExpression.FRIENDLY, "Well, I suppose it is.").also { stage = END_DIALOGUE } + //PRIVATE_PIERREB + 11 -> playerl(FacialExpression.ASKING, "Hello. So you're just a private?").also { stage++ } + 12 -> npcl(FacialExpression.ANGRY, "Show some respect! It's more than you'll achieve.").also { stage++} + 13 -> playerl(FacialExpression.ANNOYED, "I beg to differ. I'm in perfect shape!").also { stage++ } + 14 -> npcl(FacialExpression.ANGRY, "Prove it!").also { stage++} + 15 -> playerl(FacialExpression.ASKING, "How?").also { stage++ } + 16 -> npcl(FacialExpression.ANGRY, "Give me five star-jumps!").also { + animate(player, Animation(2761)) + stage++ + } + 17 -> npcl(FacialExpression.ANGRY, "Five sit-ups.").also { + animate(player, Animation(2763)) + stage++ + } + 18 -> npcl(FacialExpression.ANGRY, "Run on the spot!").also { + animate(player, Animation(2764)) + stage++ + } + 19 -> npcl(FacialExpression.THINKING, "Okay. Maybe you have what it takes. Best you speak with the captain.").also { stage = END_DIALOGUE } + //PRIVATE_PENDRON + 20 -> playerl(FacialExpression.FRIENDLY, "Hi there.").also { stage++ } + 21 -> npcl(FacialExpression.ASKING, "Don't suppose you've seen a battleaxe around here?").also { stage++ } + 22 -> playerl(FacialExpression.FRIENDLY, "A battleaxe? Nope, afraid not.").also { stage++ } + 23 -> npcl(FacialExpression.WORRIED, "the captain is going to kill me if he finds out I've lost my weapon.").also { stage = END_DIALOGUE } + } + return true + } + override fun getIds(): IntArray { + return PRIVATES + } + +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/party/Party.kt b/Server/src/main/content/minigame/barbassault/party/Party.kt new file mode 100644 index 000000000..e46082e9d --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/party/Party.kt @@ -0,0 +1,106 @@ +package content.minigame.barbassault.party + +import content.minigame.barbassault.BarbRole +import core.game.node.entity.player.Player + +//todo fix party system. Maybe toss it all away and start over. +data class PartyMember(val player: Player, var role: BarbRole) + +class Party(val id: Int) { + companion object { + const val MAX_MEMBERS = 5 + const val MAX_PER_ROLE = 2 + } + + private val slots = MutableList(MAX_MEMBERS) { null } + + private var leader: Player? = null + + fun add(player: Player, role: BarbRole): Boolean { + // Check if player is already in party + if (slots.any { it?.player == player }) return false + // Check if party full + if (slots.count { it != null } >= MAX_MEMBERS) return false + // Check role limit + if (slots.count { it?.role == role } >= MAX_PER_ROLE) return false + + // Find first empty slot + val emptyIndex = slots.indexOfFirst { it == null } + if (emptyIndex == -1) return false // no empty slots + + slots[emptyIndex] = PartyMember(player, role) + if (leader == null) leader = player + + player.setAttribute("barbass:party-id", this.id) + updateInterfaces() + return true + } + + fun remove(player: Player): Boolean { + val index = slots.indexOfFirst { it?.player == player } + if (index == -1) return false // not in party + + slots[index]?.player?.removeAttribute("barbass:party-id") + slots[index] = null + + if (leader == player) { + disband() + } else { + updateInterfaces() + } + return true + } + + fun updateInterfaces() { + slots.filterNotNull().forEach { + PartyService.updatePartyInterface(it.player) + } + } + + fun disband() { + slots.filterNotNull().forEach { + it.player.removeAttribute("barbass:party-id") + it.player.sendMessage("The party has been disbanded.") + PartyService.updatePartyInterface(it.player) + } + PartyHandler.removeParty(id) + slots.fill(null) + leader = null + } + + fun getLeader(): Player? = leader + + fun setLeader(player: Player) { + if (slots.any { it?.player == player }) { + leader = player + updateInterfaces() + } + } + + fun getRole(player: Player): BarbRole? = + slots.find { it?.player == player }?.role + + fun changeRole(player: Player, newRole: BarbRole): Boolean { + val slot = slots.find { it?.player == player } ?: return false + if (slots.count { it?.role == newRole } >= MAX_PER_ROLE) return false + slot.role = newRole + updateInterfaces() + return true + } + + fun contains(player: Player): Boolean = + slots.any { it?.player == player } + + fun size(): Int = slots.count { it != null } + + fun allMembers(): List = slots.filterNotNull() + fun getSlots(): List = slots.toList() + fun clear() { + slots.filterNotNull().forEach { + it.player.removeAttribute("barbass:party-id") + } + slots.fill(null) + leader = null + updateInterfaces() + } +} diff --git a/Server/src/main/content/minigame/barbassault/party/PartyHandler.kt b/Server/src/main/content/minigame/barbassault/party/PartyHandler.kt new file mode 100644 index 000000000..d89fa5a60 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/party/PartyHandler.kt @@ -0,0 +1,39 @@ +package content.minigame.barbassault.party + +object PartyHandler { + private val parties = mutableMapOf() + private val freedIds = ArrayDeque() + private var nextPartyId = 1 + + fun createNewParty(): Pair { + val id = if (freedIds.isNotEmpty()) freedIds.removeFirst() else nextPartyId++ + val party = Party(id) + parties[id] = party + return id to party + } + + fun getOrCreateParty(id: Int): Party = + parties.getOrPut(id) { Party(id) } + + fun getParty(id: Int): Party? = parties[id] + + fun removeParty(id: Int) { + if (parties.remove(id) != null) { + freedIds.add(id) + } + } + + fun allParties(): Map = parties.toMap() + + fun cleanupOfflineParties() { + val toRemove = parties.filter { (_, party) -> + val leader = party.getLeader() + leader == null || !leader.isActive() + }.keys + + for (partyId in toRemove) { + removeParty(partyId) + println("Removed party $partyId because leader was offline or null.") + } + } +} diff --git a/Server/src/main/content/minigame/barbassault/party/PartyService.kt b/Server/src/main/content/minigame/barbassault/party/PartyService.kt new file mode 100644 index 000000000..e7f1b613b --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/party/PartyService.kt @@ -0,0 +1,107 @@ +package content.minigame.barbassault.party + +import content.minigame.barbassault.BarbRole +import core.api.sendMessage +import core.api.setInterfaceModel +import core.api.setInterfaceText +import core.game.node.entity.player.Player + +class PartyService { + companion object { + fun inviteToParty(inviter: Player, invitee: Player, role: BarbRole) { + val partyId = inviter.getAttribute("barbass:party-id") + val party = partyId?.let { PartyHandler.getParty(it) } + + when { + partyId == null -> sendMessage(inviter, "You're not in a party.") + + party == null -> sendMessage(inviter, "Party $partyId not found.") + + !party.contains(inviter) -> sendMessage(inviter, "You are not a member of party $partyId.") + + invitee.getAttribute("barbass:party-id") != null -> sendMessage(inviter, "${invitee.name} is already in a party.") + + party.size() >= Party.MAX_MEMBERS -> sendMessage(inviter, "Party is full.") + + party.allMembers().count { it.role == role } >= Party.MAX_PER_ROLE -> sendMessage(inviter, "Too many players with the role $role.") + + !party.add(invitee, role) -> sendMessage(inviter, "Failed to add ${invitee.name} as $role.") + + party.getLeader() != inviter -> sendMessage(inviter, "Only the party leader can invite players.") + + else -> { + invitee.setAttribute("barbass:party-id", partyId) + val formattedRole = role.name.lowercase().replaceFirstChar { it.uppercase() } + sendMessage(inviter, "${invitee.name} joined your party as $formattedRole.") + } + } + } + + fun updatePartyInterface(player: Player) { + val ROLE_MODEL_MAP = mapOf( + BarbRole.ATTACKER to 20561, + BarbRole.COLLECTOR to 20563, + BarbRole.DEFENDER to 20566, + BarbRole.HEALER to 20569 + ) + val iLeaderText = 6 + val iPlayerTextStart = 7 + val iModelOffset = 10 + val modelZoom = 2372 + val iDefaultText = "-----" + val partyId = player.getAttribute("barbass:party-id") ?: return + val party = PartyHandler.getParty(partyId) ?: return + val members = party.allMembers() + val leader = party.getLeader() + + if (leader != null) { + val leaderMember = members.find { it.player == leader } + setInterfaceText(player, leader.username, 256, iLeaderText) + setInterfaceModel(player, ROLE_MODEL_MAP[leaderMember?.role] ?: 20561, 256, iLeaderText + iModelOffset, modelZoom) + } else { + setInterfaceText(player, iDefaultText, 256, iLeaderText) + setInterfaceModel(player, 20561, 256, iLeaderText + iModelOffset, modelZoom) + } + + val otherMembers = members.filter { it.player != leader } + for (i in 0 until 4) { + val slotTextId = iPlayerTextStart + i + val slotModelId = slotTextId + iModelOffset + + if (i < otherMembers.size) { + val member = otherMembers[i] + setInterfaceText(player, member.player.username, 256, slotTextId) + setInterfaceModel(player, ROLE_MODEL_MAP[member.role] ?: 20561, 256, slotModelId, modelZoom) + } else { + setInterfaceText(player, iDefaultText, 256, slotTextId) + setInterfaceModel(player, -1, 256, slotModelId, modelZoom) // Default to attacker icon for empty + } + } + } + + fun leaveParty(player: Player) { + val partyId = player.getAttribute("barbass:party-id") ?: return + val party = PartyHandler.getParty(partyId) ?: return + + if (!party.remove(player)) { + player.sendMessage("Failed to leave the party.") + return + } + + player.removeAttribute("barbass:party-id") + player.sendMessage("You have left the party.") + updatePartyInterface(player) + + // Update remaining party members + for (member in party.allMembers()) { + updatePartyInterface(member.player) + } + + if (party.allMembers().isEmpty()) { + PartyHandler.removeParty(partyId) + } + } + + + } +} From 44bcdd722cc45fec9144508ab16c08f4ae44f101 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 5 Jul 2025 03:15:29 -0400 Subject: [PATCH 002/123] added setInterfaceModel --- Server/src/main/core/api/ContentAPI.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Server/src/main/core/api/ContentAPI.kt b/Server/src/main/core/api/ContentAPI.kt index ae01af745..4419224b0 100644 --- a/Server/src/main/core/api/ContentAPI.kt +++ b/Server/src/main/core/api/ContentAPI.kt @@ -1679,6 +1679,18 @@ fun setInterfaceText(player: Player, string: String, iface: Int, child: Int) { player.packetDispatch.sendString(string, iface, child) } +/** + * Sends a model to a specific interface child + * @param player the player to send the packet to + * @param modelId the modelId to send to the child + * @param iface the ID of the interface to use + * @param child the index of the child to send the string to + * @param zoom the zoom of the child to send the string to + */ +fun setInterfaceModel(player: Player, modelId: Int, iface: Int, child: Int, zoom: Int) { + player.packetDispatch.sendModelOnInterface(modelId, iface, child,zoom) +} + /** * Allows you to hide or show specific children in an interface * @param player the player to send the packet to From dd49dd4db8204d33b15464f8d6b6aa984712c373 Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 11 Aug 2025 23:36:40 -0400 Subject: [PATCH 003/123] session --- .../minigame/barbassault/BarbassDevHelper.kt | 18 +++ .../barbassault/arena/BarbassaultActivity.kt | 58 ++++++++ .../barbassault/arena/BarbassaultGameArea.kt | 133 ++++++++++++++++-- .../barbassault/arena/BarbassaultSession.kt | 123 ++++++++++++++++ .../minigame/barbassault/arena/LureItems.kt | 34 +++++ .../arena/monsters/PenanceRunnerNPC.kt | 30 +++- .../barbassault/arena/scenery/DefenderTrap.kt | 32 ++++- .../barbassault/lobby/BarbassaultLobby.kt | 5 + 8 files changed, 420 insertions(+), 13 deletions(-) create mode 100644 Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/LureItems.kt diff --git a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt index 81c298625..1c154dc97 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt @@ -1,13 +1,18 @@ package content.minigame.barbassault +import core.api.animateScenery +import core.api.getScenery +import core.api.replaceScenery import core.api.sendMessage import core.game.node.item.Item +import core.game.node.scenery.SceneryBuilder import core.game.system.command.Privilege import core.game.system.command.sets.CommandSet import core.game.world.map.Location import core.plugin.Initializable import org.rs09.consts.Items +import org.rs09.consts.Scenery @Initializable class BarbassDevHelper : CommandSet(Privilege.ADMIN) { @@ -28,6 +33,19 @@ class BarbassDevHelper : CommandSet(Privilege.ADMIN) { player.teleport(Location.create(1885, 5403, 0)) } + define("trap"){ player,args-> + var thistrap = Location.create(1901, 5474, 0) + var thistrapscen = core.game.node.scenery.Scenery(Scenery.RUNNER_TRAP2_20135, Location(1901, 5474)) + // RUNNER_TRAP2_20135 + // RUNNER_TRAP1_20230 + // BROKEN_TRAP0_20231 + val scenery = getScenery(thistrap) + val emoteId = args[1].toIntOrNull() + animateScenery(scenery!!, emoteId!!)//5076 + + //replaceScenery(getScenery(thistrap)!!,Scenery.RUNNER_TRAP1_20230,40,thistrap) + } + define("rolekit", Privilege.ADMIN, " ", "Gives Barbarian Assault kit") { player, args -> data class RoleKit( val horns: IntArray? = null, diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt new file mode 100644 index 000000000..97cfe080c --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt @@ -0,0 +1,58 @@ +package content.minigame.barbassault + +import content.minigame.fishingtrawler.FishingTrawlerActivity +import core.api.MapArea +import core.game.node.entity.player.Player +import core.game.system.task.Pulse +import core.game.world.GameWorld +import core.game.world.map.Location +import core.game.world.map.build.DynamicRegion +import core.game.world.map.zone.ZoneRestriction +import core.plugin.Initializable +import core.tools.ticksToSeconds +import core.game.activity.ActivityManager +import core.game.activity.ActivityPlugin +import core.game.world.map.zone.ZoneBorders +import core.tools.colorize + +private var activity: BarbassaultActivity? = null +@Initializable +class BarbassaultActivity : ActivityPlugin("barbassault",false,false,true,ZoneRestriction.CANNON,ZoneRestriction.FIRES,ZoneRestriction.FOLLOWERS,ZoneRestriction.RANDOM_EVENTS), MapArea { + + init { + activity = this + } + override fun configure() { + } + + override fun start(player: Player?, login: Boolean, vararg args: Any?): Boolean { + player ?: return false + //waitingPlayers.add(player) + return true + } + + fun addPlayer(player: Player){ + + } + + fun removePlayer(player: Player){ + // waitingPlayers.remove(player) + } + + override fun newInstance(p: Player?): ActivityPlugin { + ActivityManager.register(this) + return this + } + + override fun getSpawnLocation(): Location { + return Location.create(2667, 3161, 0) + } + + override fun defineAreaBorders(): Array { + return arrayOf(ZoneBorders(2668, 3165, 2675, 3184)) + } + + override fun getRestrictions(): Array { + return arrayOf(ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.TELEPORT) + } +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 0d0315da7..1ecf157c9 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -1,15 +1,29 @@ package content.minigame.barbassault.arena +import content.minigame.barbassault.BarbassaultTut +import content.minigame.barbassault.arena.scenery.DefenderTrap import core.api.* +import core.game.global.action.DropListener + import core.game.interaction.IntType import core.game.interaction.InteractionListener +import core.game.interaction.QueueStrength +import core.game.node.Node import core.game.node.entity.Entity import core.game.node.entity.player.Player +import core.game.node.entity.player.info.LogType +import core.game.node.entity.player.info.PlayerMonitor +import core.game.node.entity.player.info.login.PlayerParser +import core.game.node.item.GroundItem +import core.game.node.item.GroundItemManager +import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.map.zone.ZoneBorders import core.game.world.update.flag.context.Animation +import core.game.worldevents.holiday.easter.EasterEvent.Companion.EGG_SPAWN_TIME +import core.game.worldevents.holiday.easter.EasterEvent.Companion.eggs import core.tools.Log import org.rs09.consts.Components import org.rs09.consts.Items @@ -27,12 +41,13 @@ import org.rs09.consts.Scenery //should be multicombat class BarbassaultGameArea : InteractionListener, MapArea { + val ATTACKER_ICON = 10556 val DEFENDER_ICON = 10558 val COLLECTOR_ICON = 10557 val HEALER_ICON = 10559 val ROLE_ICON = intArrayOf(ATTACKER_ICON,DEFENDER_ICON,COLLECTOR_ICON,HEALER_ICON) - + val Fix_trap_IDs = intArrayOf(Scenery.RUNNER_TRAP1_20230,Scenery.BROKEN_TRAP0_20231) override fun defineAreaBorders(): Array { //block standard teleports. @@ -46,25 +61,46 @@ class BarbassaultGameArea : InteractionListener, MapArea { //sendMessage(player,----- Wave: $Num -----") openOverlay(player, interfaceId) } - /*BarbassaultTut.BarbassTutNPCs.forEach { + BarbassaultTut.BarbassTutNPCs.forEach { npc -> npc.init() npc.isWalks = false } BarbassaultTut.spawnItems() - */ + } override fun areaLeave(entity: Entity, logout: Boolean) { val player = entity as? Player ?: return - closeOverlay(player) exitMiniGame(player) log(this::class.java, Log.FINE, "EXITED BARBASS") } override fun defineListeners() { + on(Fix_trap_IDs, IntType.SCENERY, "Fix") { player, node -> + if (checkHasTools(player)) { return@on true } + playerChangeScenery(player,5416,node,Scenery.RUNNER_TRAP2_20135,5,"You fixed the Penance Runner trap.") + return@on true + } + + on(Scenery.PENANCE_CAVE_20237, IntType.SCENERY, "block") { player, node -> + if (checkHasTools(player)) { return@on true } + playerChangeScenery(player,5417,node,Scenery.PENANCE_CAVE_20238,4) + return@on true + } + + on(Scenery.PENANCE_CAVE_20238, IntType.SCENERY, "demolish") { player, node -> + playerChangeScenery(player,5418,node,Scenery.PENANCE_CAVE_20239,5) + return@on true + } + + on(Scenery.PENANCE_CAVE_20239, IntType.SCENERY, "fix") { player, node -> + if (checkHasTools(player)) { return@on true } + playerChangeScenery(player,5417,node,Scenery.PENANCE_CAVE_20238,4) + return@on true + } on(Scenery.LADDER_20194, IntType.SCENERY, "Climb-up") { player, _ -> sendDialogueOptions(player, "Are you sure you want to leave?", "Yes", "No") @@ -72,11 +108,11 @@ class BarbassaultGameArea : InteractionListener, MapArea { if (buttonId == 2) { //endGame teleport(player, Location(2593 , 5261 )) - } } return@on true } + on(Scenery.HEALER_SPRING_20150, IntType.SCENERY, "Drink-from") { player, _ -> if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { player.animate(Animation(5407)) @@ -91,8 +127,8 @@ class BarbassaultGameArea : InteractionListener, MapArea { }) } return@on true - } + on(Scenery.HEALER_SPRING_20150, IntType.SCENERY, "Take-from") { player, _ -> //emote 5400 /* HEALING_VIAL_10546 -- empty @@ -101,11 +137,8 @@ class BarbassaultGameArea : InteractionListener, MapArea { HEALING_VIAL3_10543 HEALING_VIAL4_10542 // 4 */ - return@on true - } - //CATALYTIC_RUNE_12851, ELEMENTAL_RUNE_12850 onUnequip(ROLE_ICON) { player, _ -> @@ -127,8 +160,31 @@ class BarbassaultGameArea : InteractionListener, MapArea { } return@onEquip true } + on(LureItems, IntType.GROUNDITEM, "Take") { player, node -> + //if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id != DEFENDER_ICON) { return@on false } + // only a defender can interact with lure food. + val groundLureItem = findClosestLure(node.location) + removeLure(groundLureItem!!) + return@on true + } + on(LureItems, IntType.ITEM, "Drop") { player, node -> + val dropedItem = node as Item + sendMessage(player,dropedItem.name) + //addItemNode(dropedItem,player.location,true) + lureDrop(player,dropedItem) + + //DropListener.drop(player,dropedItem) + + + //with values for good and bad. + //structure table with intent of being looped trough by a runner to check distance, compared to it. + //and to check if its good or bad when they get to that one. + //delete from ground as runner "eats" + return@on true + } } + private fun exitMiniGame(player: Player) { openOverlay(player,493) // work around to actually close interfaces. player.interfaceManager.closeOverlay()//maybe im doing this wrong. @@ -149,6 +205,31 @@ class BarbassaultGameArea : InteractionListener, MapArea { //award points, set Tp location to next wave //or lost game Send back to wave room + } + private fun lureDrop(player: Player,item:Item){ + //val gi = GroundItemManager.create(GroundItem(item.dropItem,player.location,-1,null)) + + + + queueScript(player, strength = QueueStrength.SOFT) { + val current = player.inventory.get(item.slot) + if (current == null || current !== item) { + return@queueScript stopExecuting(player) + } + if (player.inventory.replace(null, item.slot) !== item) { + PlayerMonitor.log(player, LogType.DUPE_ALERT, "Potential exploit attempt when player ${player.name} tried to drop ${item.amount}x ${item.id}. The item has been lost and will need to be refunded to the player, but how did they get this to happen? @Barbass") + return@queueScript stopExecuting(player) + } + val droppedItem = item.dropItem + + val gi = GroundItemManager.create(droppedItem, player.location, player) + setAttribute(player, "droppedItem:${droppedItem.id}", getWorldTicks() + 2) + PlayerParser.save(player) + gi.forceVisible = true + addItemNode(gi,player.location,true) + return@queueScript stopExecuting(player) + } + } fun removeAll(player: Player, items: List, container: Container = Container.INVENTORY): Boolean { @@ -170,6 +251,35 @@ class BarbassaultGameArea : InteractionListener, MapArea { else -> null } } + fun playerChangeScenery(player: Player,anim: Int ,node: Node, newSceneryId: Int, pulseDelay: Int = 3, message: String = "") { + + player.animate(Animation(anim)) + player.lock(pulseDelay) + + GameWorld.Pulser.submit(object : Pulse(pulseDelay, player) { + override fun pulse(): Boolean { + player.unlock() + val scenryNode = node as core.game.node.scenery.Scenery + replaceScenery( scenryNode,newSceneryId ,-1 ,node.location ) + sendMessage(player, message) + if ( node.id == Scenery.PENANCE_CAVE_20238) {return true} + removeItem(player,Items.LOGS_11760) + return true + } + }) + } + fun checkHasTools(player: Player): Boolean{ + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id != DEFENDER_ICON) {return true} + val requiredItems = listOf(Items.HAMMER_2347, Items.LOGS_11760) + for (item in requiredItems) { + if (!inInventory(player, item)) { + sendMessage(player, "You need a ${getItemName(item)}") + return true + } + } + return false + } + fun spawnPartyMembers(){ //1 @@ -182,8 +292,13 @@ class BarbassaultGameArea : InteractionListener, MapArea { val RedLeader4 = Location.create(1884, 5456, 0) val RedLeader5 = Location.create(1888, 5456, 0) } +} +object BA_ARENA { + const val MAIN = 7509 + const val QUEEN = 7508 + val all = listOf(MAIN, QUEEN) } diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt new file mode 100644 index 000000000..95d453fa9 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -0,0 +1,123 @@ +package content.minigame.barbassault.arena + +import content.minigame.barbassault.arena.LureItem +import core.api.* +import core.game.component.Component +import core.game.node.entity.Entity +import core.game.node.entity.npc.NPC +import core.game.node.entity.player.Player +import core.game.system.task.Pulse +import core.game.world.GameWorld +import core.game.world.map.Location +import core.game.world.map.build.DynamicRegion +import core.game.world.map.zone.ZoneBorders +import core.game.world.map.zone.ZoneRestriction +import core.tools.Log +import core.tools.RandomFunction +import core.tools.secondsToTicks +import org.rs09.consts.NPCs +import kotlin.math.ceil + +class BarbassaultSession(val activity: BarbassaultSession? = null) : MapArea { + constructor(region: DynamicRegion, activity: BarbassaultSession) : this(activity) {this.region = region; this.base = region.baseLocation} + var players: ArrayList = ArrayList() + val LureItemNodes = mutableListOf() + lateinit var region: DynamicRegion + lateinit var base: Location + var isActive = false + val npcs = ArrayList() + var inactiveTicks = 0 + var timeLeft = secondsToTicks(600) + + + fun start(pl: ArrayList){ + region.setMusicId(434) + // region.setMusicId(51) + this.players.addAll(pl) + isActive = true + + GameWorld.Pulser.submit(BarbassPulse(this)) + for(player in pl){ + //player.interfaceManager.openOverlay(Component(OVERLAY_ID)) + //player.interfaceManager.open(Component(TUTORIAL_ID)) + //updateOverlay(player) + player.properties.teleportLocation = base.transform(36,24,0) + player.setAttribute("ba-session",this) + registerLogoutListener(player, "ba-logout") { + val session = player.getAttribute("ba-session",null) ?: return@registerLogoutListener + player.location = Location.create(2667, 3161, 0) //return to + session.players.remove(player) + player.locks.unlockTeleport() + } + } + zone.register(getRegionBorders(region.id)) + } + + class BarbassPulse(val session: BarbassaultSession) : Pulse(){ + var ticks = 0 + override fun pulse(): Boolean { + ticks++ + session.timeLeft-- + //session.zone.unregister(getRegionBorders(session.region.id)) + + if(session.timeLeft <= 0){ + session.isActive = false + for(player in session.players){ + player.interfaceManager.closeOverlay() + player.properties.teleportLocation = Location.create(2666, 3162, 0) // return to + // player.incrementAttribute("/save:$STATS_BASE:$FISHING_TRAWLER_GAMES_WON") + player.removeAttribute("ba-session") + clearLogoutListener(player, "ba-logout") + } + session.zone.unregister(getRegionBorders(session.region.id)) + } + + for(player in session.players){ + //session.updateOverlay(player) + if(session.timeLeft <= 1) { + lockInteractions(player, 2) + } + } + return !session.isActive + } + } + + fun clearNPCs(){ + npcs.forEach { + it.clear() + } + npcs.clear() + } + + fun initCannons(){ + // NPC.create(NPCs.EGG_LAUNCHER_5026, Location.create(1896, 5474, 0), Direction.NORTH), + // NPC.create(NPCs.EGG_LAUNCHER_5026, Location.create(1877, 5474, 0), Direction.NORTH) + for(loc in arrayOf(base.transform(38,17,0), + base.transform(33,18,0))){ + val npc = NPC(NPCs.EGG_LAUNCHER_5026) + npc.location = loc + npcs.add(npc) + npc.isRespawn = false + npc.isWalks = false + npc.init() + } + } + + override fun defineAreaBorders(): Array { + return arrayOf() + } + + override fun getRestrictions(): Array { + return arrayOf(ZoneRestriction.CANNON, ZoneRestriction.FIRES, ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.TELEPORT) + } + + override fun areaEnter(entity: Entity) { + super.areaEnter(entity) + log(this::class.java, Log.FINE, "ENTERED BarbAssault") + } + + override fun areaLeave(entity: Entity, logout: Boolean) { + super.areaLeave(entity, logout) + log(this::class.java, Log.FINE, "EXITED BarbAssault") + } +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/LureItems.kt b/Server/src/main/content/minigame/barbassault/arena/LureItems.kt new file mode 100644 index 000000000..12d325c18 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/LureItems.kt @@ -0,0 +1,34 @@ +package content.minigame.barbassault.arena + +import core.game.node.Node +import core.game.node.item.GroundItem +import core.game.node.item.Item +import core.game.world.map.Location +import org.rs09.consts.Items + + +data class LureItem(val item: Node, val location: Location, val isGood: Boolean) + +val LureItems = intArrayOf(Items.WORMS_10515, Items.CRACKERS_10513, Items.TOFU_10514) +val LureItemNodes = mutableListOf() +//todo make this part of miniGame instance instead of global. + +fun addItemNode(item: GroundItem, location: Location, isGood: Boolean) { + LureItemNodes.add(LureItem(item, location, isGood)) +} + +fun findClosestLure(target: Location): LureItem? { + return LureItemNodes.minByOrNull { node -> + val dx = node.location.x - target.x + val dy = node.location.y - target.y + Math.abs(dx) + Math.abs(dy) + } +} + +fun removeLure(lure: LureItem) { + LureItemNodes.remove(lure) +} + +fun removeLureAtLocation(item: Item, location: Location): Boolean { + return LureItemNodes.removeIf { it.item == item && it.location == location } +} diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt index 18ca9355e..fcfa6b04d 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt @@ -5,6 +5,13 @@ import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior import core.game.world.map.Location import org.rs09.consts.NPCs +import content.minigame.barbassault.arena.* +import core.api.forceWalk +import core.api.removeGroundItem +import core.api.sendChat +import core.game.node.item.GroundItem +import core.game.node.item.GroundItemManager + val PENANCE_RUNNER_IDS = listOf( NPCs.PENANCE_RUNNER_5042, @@ -18,7 +25,7 @@ val PENANCE_RUNNER_IDS = listOf( NPCs.PENANCE_RUNNER_5227, NPCs.PENANCE_RUNNER_5228, ) -class PenanceRunnerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { +class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { val GOOD_EAT = "Chomp, chomp" val BAD_EAT = "Blurghh" val TRAP_HIT = "Urghhh!" @@ -29,12 +36,31 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { override fun onCreation(self: NPC) { self.isWalks = true self.walkRadius = 22 + self.destinationFlag + } + override fun tick(self: NPC): Boolean { + val gotohere = findClosestLure(self.location) + if (gotohere != null) { + forceWalk(self,gotohere.location ,"DUMB") + if (self.location == gotohere.location) { + sendChat(self,if (gotohere.isGood) GOOD_EAT else BAD_EAT) + removeGroundItem(gotohere.item as GroundItem) + //GroundItemManager.destroy(gotohere.item) + removeLure(gotohere) + self.resetWalk() + } + } + return true + } + + fun seekFood(){ - } + + } diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt index 987d001fd..af61d7adc 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt @@ -1,11 +1,17 @@ package content.minigame.barbassault.arena.scenery +import content.minigame.barbassault.arena.machines.ItemMachine.Companion.addArrayOfItems import content.minigame.barbassault.arena.monsters.PENANCE_RUNNER_IDS import core.api.* +import core.game.node.Node import core.game.node.entity.Entity import core.game.node.entity.player.Player +import core.game.system.task.Pulse +import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.map.zone.ZoneBorders +import org.rs09.consts.Items +import org.rs09.consts.Scenery // RUNNER_TRAP2_20135 @@ -55,25 +61,47 @@ class DefenderTrap : MapArea { } fun killRunner(entity: Entity){ + entity.sendChat(TRAP_HIT) + entity.startDeath(entity) + var thistrap = Location.create(1901, 5474, 0) + val scenery = getScenery(thistrap) + //animateScenery(scenery!!, 5076)//5076 } + + //step on to trap area, if good food "chomp chomp" stay in location + //set trap off + fun updateTrap(location: Location) { + var thistrap = Location.create(1901, 5474, 0) + val scenery = getScenery(thistrap) + animateScenery(scenery!!, 5076)//5076 + GameWorld.Pulser.submit(object : Pulse(3, scenery) { + override fun pulse(): Boolean { + replaceScenery(scenery,Scenery.RUNNER_TRAP1_20230,-1,thistrap) + return true + } + }) + + //replaceScenery(getScenery(thistrap)!!,Scenery.RUNNER_TRAP1_20230,-1,thistrap) if (TRAPS.contains(location)){ + // replaceScenery(getScenery(location)!!,Scenery.RUNNER_TRAP1_20230,40,location) } } + + fun sendMessageArea(){ playersInArea.forEach { player -> sendMessage(player,"Entered Trap Area") } } - -//you fixed the Penance Runner trap. //sendMessage(player,"A Penance Runner broke a trap to the east/west!") //When a runner dies to trap announce to Defenders //replaceScenery() //animateScenery + //5076 } diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt index 2a99dbe3f..c38ca4a34 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt @@ -14,6 +14,8 @@ import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.GameWorld.ticks import core.game.world.map.zone.ZoneBorders +import content.minigame.barbassault.arena.BarbassaultSession +import core.game.world.map.build.DynamicRegion import org.rs09.consts.Items import org.rs09.consts.Scenery @@ -123,6 +125,9 @@ class BarbassaultLobby : InteractionListener, MapArea { on(Scenery.LADDER_20193, IntType.SCENERY, "Climb-down") { player, _ -> closeOverlay(player) // close party, openOverlay(player, 494)// open countdown, Make a Count DownHandler + //start a session + // val session = BarbassaultSession(DynamicRegion.create(8011), activity!!) + // session.start(intArrayOf(player)) return@on true } on(Scenery.DOOR_20209, IntType.SCENERY, "Pass") { player, node -> From 0c25abc88a9c638090b0e953c4c2fed8b209400a Mon Sep 17 00:00:00 2001 From: Tooze Date: Tue, 27 Jan 2026 08:05:37 -0500 Subject: [PATCH 004/123] BarbTeam, Lobby related interfaces, "ba-session" working better. --- .../minigame/barbassault/BarbassDevHelper.kt | 13 + .../barbassault/BarbassaultListeners.kt | 6 +- .../barbassault/arena/BarbassaultActivity.kt | 64 +++-- .../barbassault/arena/BarbassaultArena.kt | 44 ++++ .../barbassault/arena/BarbassaultGameArea.kt | 132 +++++----- .../barbassault/arena/BarbassaultSession.kt | 231 ++++++++++------- .../barbassault/arena/scenery/DefenderTrap.kt | 7 +- .../barbassault/lobby/AcceptRoleInterface.kt | 109 ++++++++ .../minigame/barbassault/lobby/BarbTeam.kt | 232 ++++++++++++++++++ .../barbassault/lobby/BarbassaultLobby.kt | 158 ++++++------ .../barbassault/lobby/CurrentTeamInterface.kt | 74 ++++++ .../barbassault/lobby/RoleSelectInterface.kt | 159 ++++++++++++ .../minigame/barbassault/party/Party.kt | 106 -------- .../barbassault/party/PartyHandler.kt | 39 --- .../barbassault/party/PartyService.kt | 107 -------- 15 files changed, 977 insertions(+), 504 deletions(-) create mode 100644 Server/src/main/content/minigame/barbassault/arena/BarbassaultArena.kt create mode 100644 Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt create mode 100644 Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt create mode 100644 Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt create mode 100644 Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt delete mode 100644 Server/src/main/content/minigame/barbassault/party/Party.kt delete mode 100644 Server/src/main/content/minigame/barbassault/party/PartyHandler.kt delete mode 100644 Server/src/main/content/minigame/barbassault/party/PartyService.kt diff --git a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt index 1c154dc97..8b111916b 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt @@ -33,6 +33,19 @@ class BarbassDevHelper : CommandSet(Privilege.ADMIN) { player.teleport(Location.create(1885, 5403, 0)) } + define("hch"){ player,args-> + val chId = args[1].toIntOrNull() + if (chId != null) { + player.packetDispatch.sendInterfaceConfig(493, chId,true) + } + } + define("vch"){ player,args-> + val chId = args[1].toIntOrNull() + if (chId != null) { + player.packetDispatch.sendInterfaceConfig(493, chId,false) + } + } + define("trap"){ player,args-> var thistrap = Location.create(1901, 5474, 0) var thistrapscen = core.game.node.scenery.Scenery(Scenery.RUNNER_TRAP2_20135, Location(1901, 5474)) diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt b/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt index c88dc22a3..a375e9fa5 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt @@ -32,7 +32,9 @@ class BarbassaultListeners : InteractionListener { on(Scenery.LADDER_20227, IntType.SCENERY, "Climb-up") { player, _ -> //Remove Roster/scroll val loc = Location(2535 , 3572 ) + player.inventory.removeAll(Items.SCROLL_10512) teleport(player, loc) // find ladder code latter + return@on true } @@ -84,6 +86,8 @@ class BarbassaultListeners : InteractionListener { Items.NATURE_RUNE_561 //add food //add ammo + //summoning pouches + ) for (item in player.inventory.toArray()) { @@ -117,7 +121,7 @@ class BarbSelectRole : InterfaceListener { //Accpting invite text " Your application has been accepted" //The applicant declined your offer. //the other player hasn't confirmed their role yet. -//the applicant has chosen a role.0 +//the applicant has chosen a role[0] //You removed the person from the team. override fun defineInterfaceListeners() { onOpen(493) { player, _ -> // change this for roles diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt index 97cfe080c..c388acbc8 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt @@ -1,58 +1,70 @@ package content.minigame.barbassault +import content.minigame.barbassault.arena.BarbassaultSession +import content.minigame.barbassault.arena.BarbassaultState +import content.minigame.barbassault.lobby.baSession +import content.minigame.barbassault.activity import content.minigame.fishingtrawler.FishingTrawlerActivity -import core.api.MapArea +import core.api.sendMessage +import core.game.activity.ActivityManager +import core.game.activity.ActivityPlugin import core.game.node.entity.player.Player import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.map.Location -import core.game.world.map.build.DynamicRegion +import core.game.world.map.zone.ZoneBorders import core.game.world.map.zone.ZoneRestriction import core.plugin.Initializable -import core.tools.ticksToSeconds -import core.game.activity.ActivityManager -import core.game.activity.ActivityPlugin -import core.game.world.map.zone.ZoneBorders -import core.tools.colorize +private val sessions = mutableListOf() private var activity: BarbassaultActivity? = null @Initializable -class BarbassaultActivity : ActivityPlugin("barbassault",false,false,true,ZoneRestriction.CANNON,ZoneRestriction.FIRES,ZoneRestriction.FOLLOWERS,ZoneRestriction.RANDOM_EVENTS), MapArea { - +class BarbassaultActivity : ActivityPlugin("barbassault",true, true, true, + ZoneRestriction.CANNON, + ZoneRestriction.FIRES, + ZoneRestriction.FOLLOWERS, + ZoneRestriction.RANDOM_EVENTS +) { init { activity = this } + override fun configure() { + GameWorld.Pulser.submit(object : Pulse(10) { + override fun pulse(): Boolean { + sessions.removeIf { + it.state == BarbassaultState.END + } + return false + } + }) } override fun start(player: Player?, login: Boolean, vararg args: Any?): Boolean { - player ?: return false - //waitingPlayers.add(player) return true } - fun addPlayer(player: Player){ - - } - - fun removePlayer(player: Player){ - // waitingPlayers.remove(player) - } - override fun newInstance(p: Player?): ActivityPlugin { ActivityManager.register(this) return this } override fun getSpawnLocation(): Location { - return Location.create(2667, 3161, 0) + return Location.create(2593, 5264, 0) } - override fun defineAreaBorders(): Array { - return arrayOf(ZoneBorders(2668, 3165, 2675, 3184)) - } - override fun getRestrictions(): Array { - return arrayOf(ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.TELEPORT) + + companion object { + fun createSession(leader: Player): BarbassaultSession { + val activity = ActivityManager.getActivity("barbassault") as BarbassaultActivity + val session = BarbassaultSession(activity) + sessions += session + + leader.baSession = session + + + return session + } } -} \ No newline at end of file +} diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultArena.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultArena.kt new file mode 100644 index 000000000..b641fd7f1 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultArena.kt @@ -0,0 +1,44 @@ +package content.minigame.barbassault.arena + +import core.api.MapArea +import core.api.getRegionBorders +import core.game.node.entity.player.Player +import core.game.world.map.build.DynamicRegion +import core.game.world.map.zone.ZoneBorders +import core.game.world.map.zone.ZoneRestriction + +class BarbassaultArena( + private val session: BarbassaultSession +) : MapArea { + + private lateinit var region: DynamicRegion + + fun create() { + region = DynamicRegion.create(BarbassaultGameArea.BA_ARENA.MAIN) + //zone.register(*defineAreaBorders()) + } + + fun spawnPlayers(players: List) { + val base = region.baseLocation + players.forEach { + it.properties.teleportLocation = + base.transform(36, 24, 0) + } + } + + fun destroy() { + //zone.unregister(*defineAreaBorders()) + region.clear() + } + + override fun defineAreaBorders(): Array = + arrayOf(getRegionBorders(7509)) + + override fun getRestrictions(): Array = + arrayOf( + ZoneRestriction.CANNON, + ZoneRestriction.FIRES, + ZoneRestriction.RANDOM_EVENTS, + ZoneRestriction.TELEPORT + ) +} diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 1ecf157c9..9cd53980f 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -1,7 +1,10 @@ package content.minigame.barbassault.arena +import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultTut +import content.minigame.barbassault.BarbassaultTut.Companion.TutorialItemSpawn import content.minigame.barbassault.arena.scenery.DefenderTrap +import content.minigame.barbassault.lobby.baSession import core.api.* import core.game.global.action.DropListener @@ -19,6 +22,7 @@ import core.game.node.item.GroundItemManager import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.GameWorld +import core.game.world.map.Direction import core.game.world.map.Location import core.game.world.map.zone.ZoneBorders import core.game.world.update.flag.context.Animation @@ -40,14 +44,32 @@ import org.rs09.consts.Scenery //sendMessage(player,"The barbarians forbid the use of prayer in their arena as they don't ~ value such methods!") //should be multicombat +val ATTACKER_ICON = 10556 +val DEFENDER_ICON = 10558 +val COLLECTOR_ICON = 10557 +val HEALER_ICON = 10559 class BarbassaultGameArea : InteractionListener, MapArea { - val ATTACKER_ICON = 10556 - val DEFENDER_ICON = 10558 - val COLLECTOR_ICON = 10557 - val HEALER_ICON = 10559 - val ROLE_ICON = intArrayOf(ATTACKER_ICON,DEFENDER_ICON,COLLECTOR_ICON,HEALER_ICON) - val Fix_trap_IDs = intArrayOf(Scenery.RUNNER_TRAP1_20230,Scenery.BROKEN_TRAP0_20231) + val ROLE_ICON = intArrayOf( ATTACKER_ICON, DEFENDER_ICON, COLLECTOR_ICON, HEALER_ICON ) + val Fix_trap_IDs = intArrayOf( Scenery.RUNNER_TRAP1_20230, Scenery.BROKEN_TRAP0_20231 ) + object BA_ARENA { val MAIN = 7509; val QUEEN = 7508; val all = listOf(MAIN, QUEEN) } + + //base.transform(0,0,0) + data class arenaItems(val id: Int,val x: Int, val y: Int, val z: Int) + val arenaItemSpawn: List = listOf( + arenaItems(Items.HAMMER_2347,32,42,0), + arenaItems(Items.LOGS_11760,30,46,0), + arenaItems(Items.LOGS_11760,29,47,0) + ) + enum class pennanceNPC { runner, healer, fighter, ranger } + data class npcSpawnLoc(val tunnel:pennanceNPC, val x: Int,val y: Int,val z: Int,val direction: Direction) + val npcSpawns: List = listOf( + npcSpawnLoc(pennanceNPC.runner,42,45,0,Direction.SOUTH), + npcSpawnLoc(pennanceNPC.healer,36,46,0,Direction.SOUTH), + + npcSpawnLoc(pennanceNPC.fighter,24,46,0,Direction.SOUTH), + npcSpawnLoc(pennanceNPC.ranger,36,46,0,Direction.SOUTH), + ) override fun defineAreaBorders(): Array { //block standard teleports. @@ -80,13 +102,13 @@ class BarbassaultGameArea : InteractionListener, MapArea { override fun defineListeners() { on(Fix_trap_IDs, IntType.SCENERY, "Fix") { player, node -> - if (checkHasTools(player)) { return@on true } + if (hasTools(player)) { return@on true } playerChangeScenery(player,5416,node,Scenery.RUNNER_TRAP2_20135,5,"You fixed the Penance Runner trap.") return@on true } on(Scenery.PENANCE_CAVE_20237, IntType.SCENERY, "block") { player, node -> - if (checkHasTools(player)) { return@on true } + if (hasTools(player)) { return@on true } playerChangeScenery(player,5417,node,Scenery.PENANCE_CAVE_20238,4) return@on true } @@ -97,7 +119,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { } on(Scenery.PENANCE_CAVE_20239, IntType.SCENERY, "fix") { player, node -> - if (checkHasTools(player)) { return@on true } + if (hasTools(player)) { return@on true } playerChangeScenery(player,5417,node,Scenery.PENANCE_CAVE_20238,4) return@on true } @@ -142,6 +164,10 @@ class BarbassaultGameArea : InteractionListener, MapArea { //CATALYTIC_RUNE_12851, ELEMENTAL_RUNE_12850 onUnequip(ROLE_ICON) { player, _ -> + if (player.baSession?.state == BarbassaultState.IN_ARENA){ + sendMessage(player, "You can't remove that!") // is there a proper message for this? + return@onUnequip false + } defineAreaBorders().forEach { border -> if (border.insideBorder(player)) { sendMessage(player, "You can't remove that!") // is there a proper message for this? @@ -152,6 +178,9 @@ class BarbassaultGameArea : InteractionListener, MapArea { } onEquip(ROLE_ICON) { player, _ -> + if (player.baSession?.state == BarbassaultState.IN_ARENA) { + sendMessage(player, "You can't remove that!") + } defineAreaBorders().forEach { border -> if (border.insideBorder(player)) { sendMessage(player, "You can't remove that!") @@ -184,33 +213,9 @@ class BarbassaultGameArea : InteractionListener, MapArea { } } - - private fun exitMiniGame(player: Player) { - openOverlay(player,493) // work around to actually close interfaces. - player.interfaceManager.closeOverlay()//maybe im doing this wrong. - removeTimer(player, "teleblock") - - - val barbassItems = arrayListOf( - - Items.WORMS_10515,Items.CRACKERS_10513,Items.TOFU_10514,Items.LOGS_11760,Items.LOGS_11760,Items.HAMMER_2347,Items.DEFENDER_HORN_10538, //Defender Inv Items - Items.HEALING_VIAL_10546,Items.HEALING_VIAL1_10545,Items.HEALING_VIAL2_10544,Items.HEALING_VIAL3_10543,Items.HEALING_VIAL4_10542, //Healer Inv Items - Items.HEALER_HORN_10526,Items.HEALER_HORN_10527,Items.HEALER_HORN_10528,Items.HEALER_HORN_10529,Items.HEALER_HORN_10530, - Items.POISONED_WORMS_10540,Items.POISONED_TOFU_10539,Items.POISONED_MEAT_10541, - ) - removeAll(player, barbassItems) - - //todo should probably make sure familiars can't smuggle items out - //(player.familiarManager.familiar as? BurdenBeast)?.container?.removeAll(barbassItems)//just in case someone smuggles a pet in. - //award points, set Tp location to next wave - //or lost game Send back to wave room - - } private fun lureDrop(player: Player,item:Item){ //val gi = GroundItemManager.create(GroundItem(item.dropItem,player.location,-1,null)) - - queueScript(player, strength = QueueStrength.SOFT) { val current = player.inventory.get(item.slot) if (current == null || current !== item) { @@ -242,15 +247,6 @@ class BarbassaultGameArea : InteractionListener, MapArea { return removedAny } - fun getIconInterfaceId(itemId: Int): Int? { - return when (itemId) { - ATTACKER_ICON -> Components.BARBASSAULT_OVER_ATT_485 - COLLECTOR_ICON -> Components.BARBASSAULT_OVER_COL_486 - DEFENDER_ICON -> Components.BARBASSAULT_OVER_DEF_487 - HEALER_ICON -> Components.BARBASSAULT_OVER_HEAL_488 - else -> null - } - } fun playerChangeScenery(player: Player,anim: Int ,node: Node, newSceneryId: Int, pulseDelay: Int = 3, message: String = "") { player.animate(Animation(anim)) @@ -268,7 +264,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { } }) } - fun checkHasTools(player: Player): Boolean{ + fun hasTools(player: Player): Boolean{ if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id != DEFENDER_ICON) {return true} val requiredItems = listOf(Items.HAMMER_2347, Items.LOGS_11760) for (item in requiredItems) { @@ -279,26 +275,42 @@ class BarbassaultGameArea : InteractionListener, MapArea { } return false } - - - fun spawnPartyMembers(){ - //1 - //2 //3 - //5 //4 - // party slot effects where you start/spawn - val RedLeader1 = Location.create(1886, 5458, 0) - val RedLeader2 = Location.create(1885, 5457, 0) - val RedLeader3 = Location.create(1887, 5457, 0) - val RedLeader4 = Location.create(1884, 5456, 0) - val RedLeader5 = Location.create(1888, 5456, 0) - } } +fun exitMiniGame(player: Player) { + // openOverlay(player,493) // work around to actually close interfaces. + //player.interfaceManager.closeOverlay()//maybe im doing this wrong. + removeTimer(player, "teleblock") -object BA_ARENA { - const val MAIN = 7509 - const val QUEEN = 7508 - val all = listOf(MAIN, QUEEN) + val barbassItems = arrayListOf( + + Items.WORMS_10515,Items.CRACKERS_10513,Items.TOFU_10514,Items.LOGS_11760,Items.LOGS_11760,Items.HAMMER_2347,Items.DEFENDER_HORN_10538, //Defender Inv Items + Items.HEALING_VIAL_10546,Items.HEALING_VIAL1_10545,Items.HEALING_VIAL2_10544,Items.HEALING_VIAL3_10543,Items.HEALING_VIAL4_10542, //Healer Inv Items + Items.HEALER_HORN_10526,Items.HEALER_HORN_10527,Items.HEALER_HORN_10528,Items.HEALER_HORN_10529,Items.HEALER_HORN_10530, + Items.POISONED_WORMS_10540,Items.POISONED_TOFU_10539,Items.POISONED_MEAT_10541, + ) + removeAll(player, barbassItems) + + //todo should probably make sure familiars can't smuggle items out + //(player.familiarManager.familiar as? BurdenBeast)?.container?.removeAll(barbassItems)//just in case someone smuggles a pet in. + //award points, set Tp location to next wave + //or lost game Send back to wave room + +} +val BA_ROLE_CAPE = mapOf( BarbRole.ATTACKER to 10556, BarbRole.DEFENDER to 10558, BarbRole.COLLECTOR to 10557, BarbRole.HEALER to 10559 ) +fun equipBARoleIcon(player: Player, role: BarbRole) { + val itemId = BA_ROLE_CAPE[role] ?: return + player.equipment.add(Item(itemId),true,false) + //player.getEquipment().add(Item(itemId), true) +} +fun getIconInterfaceId(itemId: Int): Int? { + return when (itemId) { + ATTACKER_ICON -> Components.BARBASSAULT_OVER_ATT_485 + COLLECTOR_ICON -> Components.BARBASSAULT_OVER_COL_486 + DEFENDER_ICON -> Components.BARBASSAULT_OVER_DEF_487 + HEALER_ICON -> Components.BARBASSAULT_OVER_HEAL_488 + else -> null + } } diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 95d453fa9..2d6fb1cef 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -1,8 +1,13 @@ package content.minigame.barbassault.arena -import content.minigame.barbassault.arena.LureItem +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.BarbassaultActivity +import content.minigame.barbassault.BarbassaultTut +import content.minigame.barbassault.lobby.BarbTeam +import content.minigame.barbassault.lobby.BarbTeamManager +import content.minigame.barbassault.lobby.SelectRole +import content.minigame.barbassault.lobby.baSession import core.api.* -import core.game.component.Component import core.game.node.entity.Entity import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player @@ -10,114 +15,170 @@ import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.map.build.DynamicRegion +import core.game.world.map.zone.MapZone +import core.game.world.map.zone.Zone import core.game.world.map.zone.ZoneBorders import core.game.world.map.zone.ZoneRestriction import core.tools.Log -import core.tools.RandomFunction import core.tools.secondsToTicks +import core.tools.ticksToSeconds import org.rs09.consts.NPCs -import kotlin.math.ceil +import org.rs09.consts.Music +import org.rs09.consts.Music.ASSAULT_AND_BATTERY_604 +import org.rs09.consts.Music.PIRATES_OF_PENANCE_211 +import kotlin.math.roundToInt + +/* +Player +└─ attribute "baSession" : BarbassaultSession? + ├─ state : BarbassaultState (STARTING, IN_ARENA, END) + ├─ arena : DynamicRegion / MapArea + ├─ lifecycle : start → play → end + └─ team : BarbTeam? + ├─ leader : Player + ├─ slots : List + └─ recruit : PendingRecruit? + └─ player : Player + └─ role : BarbRole? +*/ + +enum class BarbassaultState { PARTY_CREATION, STARTING, IN_ARENA, COMPLETE, END } + +class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea { + constructor(region: DynamicRegion, activity: BarbassaultActivity) : this(activity) {this.region = region; this.base = region.baseLocation} -class BarbassaultSession(val activity: BarbassaultSession? = null) : MapArea { - constructor(region: DynamicRegion, activity: BarbassaultSession) : this(activity) {this.region = region; this.base = region.baseLocation} - var players: ArrayList = ArrayList() - val LureItemNodes = mutableListOf() lateinit var region: DynamicRegion lateinit var base: Location - var isActive = false - val npcs = ArrayList() - var inactiveTicks = 0 - var timeLeft = secondsToTicks(600) + + var state: BarbassaultState = BarbassaultState.PARTY_CREATION + private set + lateinit var team: BarbTeam - fun start(pl: ArrayList){ - region.setMusicId(434) - // region.setMusicId(51) - this.players.addAll(pl) - isActive = true + fun beginStartingPhase() { + if (state != BarbassaultState.PARTY_CREATION) return - GameWorld.Pulser.submit(BarbassPulse(this)) - for(player in pl){ - //player.interfaceManager.openOverlay(Component(OVERLAY_ID)) - //player.interfaceManager.open(Component(TUTORIAL_ID)) - //updateOverlay(player) - player.properties.teleportLocation = base.transform(36,24,0) - player.setAttribute("ba-session",this) - registerLogoutListener(player, "ba-logout") { - val session = player.getAttribute("ba-session",null) ?: return@registerLogoutListener - player.location = Location.create(2667, 3161, 0) //return to - session.players.remove(player) - player.locks.unlockTeleport() - } + state = BarbassaultState.STARTING + createArena() + startCountdown() + } + + private fun enterArena() { + state = BarbassaultState.IN_ARENA + region.setMusicId(ASSAULT_AND_BATTERY_604) + + for (player in team.allPlayers()) { + player.baSession?.team?.getRoleForPlayer(player)?.let { equipBARoleIcon(player, it) } + player.properties.teleportLocation = team.spawnLocationFor(player) //base.transform(36, 24, 0) + + registerLogoutListener(player, "ba-logout") { handleLogout(player) } //todo make sure this works } + + GameWorld.Pulser.submit(GamePulse()) + } + + fun endSession() { + if (state == BarbassaultState.END) return + state = BarbassaultState.END + + for (player in team.allPlayers()) { + clearLogoutListener(player, "ba-logout") + // player.removeAttribute("ba-session") + player.properties.teleportLocation = Location.create(2593, 5264, 0) + player.interfaceManager.closeOverlay() + } + destroyArena() + } + + private fun startCountdown() { + var ticks = secondsToTicks(12) + + team.allPlayers().forEach { openOverlay(it, 494);setInterfaceText(it, "60", 494, 0) } + GameWorld.Pulser.submit(object : Pulse(1) { + override fun pulse(): Boolean { + if (state != BarbassaultState.STARTING) return true + ticks-- + + if (ticks <= 0) { + enterArena() + return true + } + + val secondsLeft = ticksToSeconds(ticks) + val display = secondsLeft.toString().padStart(2, '0') + + team.allPlayers().forEach { + setInterfaceText(it, display, 494, 0) + // it.sendMessage("Barbarian Assault starts in $display seconds.") + } + + return false + } + }) + } + + private inner class GamePulse : Pulse(1) { + override fun pulse(): Boolean { + if (state != BarbassaultState.IN_ARENA) return true + + // TODO: wave logic, timers, win/lose + return false + } + } + + private fun createArena() { + region = DynamicRegion.create(BarbassaultGameArea.BA_ARENA.MAIN) + base = region.baseLocation zone.register(getRegionBorders(region.id)) } - class BarbassPulse(val session: BarbassaultSession) : Pulse(){ - var ticks = 0 - override fun pulse(): Boolean { - ticks++ - session.timeLeft-- - //session.zone.unregister(getRegionBorders(session.region.id)) + private fun destroyArena() { + if (!this::region.isInitialized) return + zone.unregister(getRegionBorders(region.id)) + region.clear() + } - if(session.timeLeft <= 0){ - session.isActive = false - for(player in session.players){ - player.interfaceManager.closeOverlay() - player.properties.teleportLocation = Location.create(2666, 3162, 0) // return to - // player.incrementAttribute("/save:$STATS_BASE:$FISHING_TRAWLER_GAMES_WON") - player.removeAttribute("ba-session") - clearLogoutListener(player, "ba-logout") - } - session.zone.unregister(getRegionBorders(session.region.id)) - } + private fun handleLogout(player: Player) { + team.removePlayer(player) + player.properties.teleportLocation = Location.create(2593, 5264, 0) + player.locks.unlockTeleport() - for(player in session.players){ - //session.updateOverlay(player) - if(session.timeLeft <= 1) { - lockInteractions(player, 2) - } - } - return !session.isActive + if (team.allPlayers().isEmpty()) { + endSession() } } - fun clearNPCs(){ - npcs.forEach { - it.clear() - } - npcs.clear() - } + override fun defineAreaBorders(): Array = emptyArray() - fun initCannons(){ - // NPC.create(NPCs.EGG_LAUNCHER_5026, Location.create(1896, 5474, 0), Direction.NORTH), - // NPC.create(NPCs.EGG_LAUNCHER_5026, Location.create(1877, 5474, 0), Direction.NORTH) - for(loc in arrayOf(base.transform(38,17,0), - base.transform(33,18,0))){ - val npc = NPC(NPCs.EGG_LAUNCHER_5026) - npc.location = loc - npcs.add(npc) - npc.isRespawn = false - npc.isWalks = false - npc.init() - } - } - - override fun defineAreaBorders(): Array { - return arrayOf() - } - - override fun getRestrictions(): Array { - return arrayOf(ZoneRestriction.CANNON, ZoneRestriction.FIRES, ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.TELEPORT) - } + override fun getRestrictions(): Array = arrayOf( + ZoneRestriction.CANNON, + ZoneRestriction.FIRES, + ZoneRestriction.RANDOM_EVENTS, + ZoneRestriction.TELEPORT + ) override fun areaEnter(entity: Entity) { - super.areaEnter(entity) - log(this::class.java, Log.FINE, "ENTERED BarbAssault") + log(this::class.java, Log.FINE, "ENTERED Barbassault Arena") + + val player = entity as? Player ?: return + val wornIconId = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id + val interfaceId = getIconInterfaceId(wornIconId ?: -1) + if (interfaceId != null) { + //sendMessage(player,----- Wave: $Num -----") + openOverlay(player, interfaceId) + } + BarbassaultTut.BarbassTutNPCs.forEach { + npc -> npc.init() + npc.isWalks = false + + } + BarbassaultTut.spawnItems() } override fun areaLeave(entity: Entity, logout: Boolean) { - super.areaLeave(entity, logout) - log(this::class.java, Log.FINE, "EXITED BarbAssault") + log(this::class.java, Log.FINE, "LEFT Barbassault Arena") + var player = entity as Player + exitMiniGame(player) + removeTimer(player, "teleblock") } } \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt index af61d7adc..e616505e5 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt @@ -1,6 +1,5 @@ package content.minigame.barbassault.arena.scenery -import content.minigame.barbassault.arena.machines.ItemMachine.Companion.addArrayOfItems import content.minigame.barbassault.arena.monsters.PENANCE_RUNNER_IDS import core.api.* import core.game.node.Node @@ -36,6 +35,7 @@ class DefenderTrap : MapArea { val TRAP_WEST_ZONE: ZoneBorders = ZoneBorders(1870, 5474, 1872, 5472, 0) val TRAP_WEST = Location.create(1871, 5473, 0) val TRAPS_ZONE = arrayOf(TRAP_EAST_ZONE,TRAP_WEST_ZONE) + val Fix_trap_IDs = intArrayOf( Scenery.RUNNER_TRAP1_20230, Scenery.BROKEN_TRAP0_20231 ) val TRAPS = arrayOf(TRAP_WEST,TRAP_EAST) val playersInArea = mutableListOf() @@ -63,7 +63,7 @@ class DefenderTrap : MapArea { fun killRunner(entity: Entity){ entity.sendChat(TRAP_HIT) entity.startDeath(entity) - var thistrap = Location.create(1901, 5474, 0) + val thistrap = Location.create(1901, 5474, 0) val scenery = getScenery(thistrap) //animateScenery(scenery!!, 5076)//5076 @@ -97,11 +97,12 @@ class DefenderTrap : MapArea { sendMessage(player,"Entered Trap Area") } } +} //sendMessage(player,"A Penance Runner broke a trap to the east/west!") //When a runner dies to trap announce to Defenders //replaceScenery() //animateScenery //5076 -} + diff --git a/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt new file mode 100644 index 000000000..54f9514d7 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt @@ -0,0 +1,109 @@ +package content.minigame.barbassault.lobby + +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.lobby.BarbTeamManager.abandonTeam +import content.minigame.barbassault.lobby.CurrentTeam.ROLE_MODEL_MAP +import content.minigame.barbassault.lobby.CurrentTeam.modelZoom +import core.api.closeInterface +import core.api.sendMessage +import core.api.setInterfaceModel +import core.api.setInterfaceText +import core.game.component.Component +import core.game.component.ComponentDefinition +import core.game.component.ComponentPlugin +import core.game.node.entity.player.Player +import core.plugin.Initializable +import core.plugin.Plugin + +@Initializable +class AcceptRoleInterface : ComponentPlugin() { + override fun newInstance(arg: Any?): Plugin { + ComponentDefinition.forId(AcceptRole.ID).plugin = this + return this + } + override fun handle(player: Player?,component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int ): Boolean { + when (button) { + AcceptRole.AcceptButton, AcceptRole.AcceptButtonText -> { handleAccept(player); return true } + AcceptRole.DeclineButton, AcceptRole.DeclineButtonText -> { handleDecline(player); return true } + } + + val slotIndex = AcceptRole.team.indexOfFirst { it.remove == button } + if (slotIndex != -1) { handleRemove(player!!, slotIndex); return true } + + return true + } + override fun open(player: Player?, component: Component?) { + super.open(player, component) + var isopen = true + player ?: return + val team = player.baSession?.team + val recruit = team?.recruit?.player + val teamLeader = team?.getLeader() + component?.setCloseEvent{ _, _ -> if (recruit != null && isopen) { closeInterface(recruit); isopen = false }; return@setCloseEvent true } + + for (slotIndex in 0 until BarbTeam.MAX_SLOTS) { + val uiSlot = AcceptRole.team[slotIndex] + val partySlot: PartySlot? = team?.getSlot(slotIndex) + val slotPlayer: Player? = partySlot?.player + + if (slotPlayer != null) { + val formattedRole = slotPlayer.baSession?.team?.getRoleForPlayer(slotPlayer)?.toString()?.lowercase()?.replaceFirstChar { it.uppercase() }?: AcceptRole.defaultText + val wave = slotPlayer.getAttribute("barbass:wave", 1) ?: 0 + setInterfaceText(player, slotPlayer.name.capitalizeWords(), AcceptRole.ID, uiSlot.name ) + setInterfaceText(player, formattedRole, AcceptRole.ID, uiSlot.role ) + setInterfaceText(player, wave.toString(), AcceptRole.ID, uiSlot.wave ) + } else { + setInterfaceText(player, AcceptRole.defaultText, AcceptRole.ID,uiSlot.name ) + setInterfaceText(player, AcceptRole.defaultText, AcceptRole.ID,uiSlot.role ) + setInterfaceText(player, "0", AcceptRole.ID,uiSlot.wave ) + } + } + } +} +private fun handleAccept(player: Player?) { + sendMessage(player!!,"Accepted Clicked") + return +} +private fun handleDecline(player: Player?) { + if (player == null) return + closeInterface(player) + val leader = player.baSession?.team?.getLeader()?.player + if (leader != null && leader != player) { + closeInterface(leader) + } +} +private fun handleRemove(player: Player, slotIndex: Int){ + val team = player.baSession?.team + val follower = team?.getSlot(slotIndex)?.player ?: return + val uiSlot = AcceptRole.team[slotIndex] + + sendMessage(player,"You removed the person from the team.") + setInterfaceText(player, AcceptRole.defaultText, AcceptRole.ID,uiSlot.name ) + setInterfaceText(player, AcceptRole.defaultText, AcceptRole.ID,uiSlot.role ) + setInterfaceText(player, "0", AcceptRole.ID,uiSlot.wave ) + + abandonTeam(follower) +} + +object AcceptRole { + const val ID = 492 + const val defaultText = "none set" + const val AcceptButtonText = 4 + const val DeclineButtonText = 2 + const val AcceptButton = 35 + const val DeclineButton = 3 + + data class Slot(val name: Int, val role: Int,val remove: Int, val wave: Int) + + val team = listOf( + Slot(15,20,-1,26), + Slot(16,21,47,31), + Slot(17,22,27,32), + Slot(18,23,28,33), + Slot(19,24,29,34), + ) + object Status { + const val selectedRole = 6 + const val levelRole = 46 + } +} diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt new file mode 100644 index 000000000..a7cc43719 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt @@ -0,0 +1,232 @@ +package content.minigame.barbassault.lobby + +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.BarbassaultActivity +import content.minigame.barbassault.arena.BarbassaultSession +import content.minigame.barbassault.arena.BarbassaultState +import core.api.clearLogoutListener +import core.api.sendMessage +import core.game.node.entity.player.Player +import core.game.world.map.Location + + +/* +Player +└─ attribute "ba-session" + └─ BarbassaultSession : MapArea + └─ team : BarbTeam + └─ slots → Players +*/ + +private const val BA_SESSION_KEY = "ba-session" + +var Player.baSession: BarbassaultSession? + get() = getAttribute(BA_SESSION_KEY) + set(value) { + if (value == null) removeAttribute(BA_SESSION_KEY) + else setAttribute(BA_SESSION_KEY, value) + } + +/** +private val playerTeams = mutableMapOf() +var Player.team: BarbTeam? + get() = playerTeams[this] + set(value) { + if (value == null) playerTeams.remove(this) + else playerTeams[this] = value + }*/ + +data class PartySlot( val index: Int, val player: Player, var role: BarbRole? = null ) +data class PendingRecruit( var player: Player, var role: BarbRole? = null ) +private val PartySpawns = arrayOf(30 to 18, 29 to 17, 31 to 17, 28 to 16, 32 to 16) + +class BarbTeam(val session: BarbassaultSession, leader: Player) { + companion object { + const val MAX_SLOTS = 5 + const val LEADER_SLOT = 0 + } + + var recruit: PendingRecruit? = null + private val slots: Array = arrayOfNulls(MAX_SLOTS) + + init { + slots[LEADER_SLOT] = PartySlot(LEADER_SLOT, leader) + } + + fun slotOf(player: Player): Int = + slots.indexOfFirst { it?.player == player } + + fun getSlot(index: Int): PartySlot? = + slots.getOrNull(index) + + fun allPlayers(): List = + slots.filterNotNull().map { it.player } + + fun isLeader(player: Player): Boolean = + slotOf(player) == LEADER_SLOT + + fun isFull(): Boolean = + slots.all { it != null } + + fun addRecruit(player: Player): Boolean { + recruit = PendingRecruit(player) + return true + } + fun addPlayer(player: Player): Boolean { + if (slotOf(player) != -1) return false + + val freeIndex = slots.indexOfFirst { it == null } + if (freeIndex == -1) return false + + slots[freeIndex] = PartySlot(freeIndex, player) + return true + } + + /** fun removePlayer(player: Player) { + val idx = slotOf(player) + if (idx == -1) return + + slots[idx] = null + player.team = null + player.removeAttribute(BA_SESSION_KEY) + clearLogoutListener(player, BA_SESSION_KEY) + //remove from barbsession barbmteam + }*/ + fun removePlayer(player: Player) { + val idx = slotOf(player) + if (idx == -1) return + slots[idx] = null + } + + fun setRoleForPlayer(player: Player, role: BarbRole): Boolean { + val idx = slotOf(player) + if (idx == -1) return false + + slots[idx]?.role = role + allPlayers().forEach { updateRoleAvailabilityFor(it) } + return true + } + + fun getRoleForPlayer(player: Player): BarbRole? { + val idx = slotOf(player) + return slots.getOrNull(idx)?.role + } + + fun getLeader(): PartySlot? { + return slots[0] + } + fun roleCounts(): RoleCounts { + var att = 0 + var def = 0 + var coll = 0 + var heal = 0 + + slots.forEach { slot -> + when (slot?.role) { + BarbRole.ATTACKER -> att++ + BarbRole.DEFENDER -> def++ + BarbRole.COLLECTOR -> coll++ + BarbRole.HEALER -> heal++ + null -> {} + } + } + + return RoleCounts(att, def, coll, heal) + } + fun updateRoleAvailabilityFor(player: Player) { + updateRoleAvailability(roleCounts(),assignedRoleCount(),player ) + } + + fun assignedRoleCount(): Int = + slots.count { it?.role != null } + + fun spawnLocationFor(player: Player): Location { + val idx = slotOf(player) + val (x, y) = PartySpawns[idx] + return session.base.transform(x, y, 0) + } +} + +data class RoleCounts(val att: Int, val def: Int, val coll: Int, val heal: Int ) + +object BarbTeamManager { + + fun createTeam(leader: Player): Boolean { + val session = BarbassaultActivity.createSession(leader) +// if (session.team != null) return false + + val team = BarbTeam(session, leader) + session.team = team + + sendMessage(leader, "TeamCreated") + updateTeam(team) + return true + } + + fun disbandTeam(session: BarbassaultSession) { + val team = session.team ?: return + + team.allPlayers().forEach { + it.sendMessage("Your leader has left the room and therefore cleared the team!") + it.removeAttribute("ba-session") + updateCurrentTeam(it) + if (session.state == BarbassaultState.STARTING) { + it.properties.teleportLocation = Location.create(2593, 5264, 0) + } + } + session.endSession() + } + + fun joinTeam(player: Player, role: BarbRole): Boolean { + val session = player.baSession ?: return false + val team = session.team ?: return false + team.recruit = null + if (!team.addPlayer(player)) { + player.sendMessage("That party is full.") + return false + } + team.setRoleForPlayer(player, role) + team.allPlayers().forEach { + updateCurrentTeam(it) + if (it != player) + it.sendMessage("Your application has been accepted") + } + return true + } + + fun abandonTeam(player: Player) { + val session = player.baSession ?: return + val team = session.team ?: return + if (team.isLeader(player)) { + disbandTeam(session) + return + } + team.removePlayer(player) + player.baSession = null + updateCurrentTeam(player) + updateTeam(team) + } + + fun updateTeam(team: BarbTeam) { + team.allPlayers().forEach { + updateCurrentTeam(it) + } + } + fun acceptInvite(player: Player, role: BarbRole) { + val session = player.baSession ?: return + val team = session.team ?: return + val recruit = team.recruit ?: return + if (recruit.player != player) return + joinTeam(player, role) + team.recruit = null + } +} + +//Leader leaving room and causing disband "Your leader has left the room and therefore cleared the team!" +// //"Your recruiter exited the room." +//Accpting invite text " Your application has been accepted" +//The applicant declined your offer. + +//the other player hasn't confirmed their role yet. +//the applicant has chosen a role.0 +//You removed the person from the team. diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt index c38ca4a34..8bbac85c6 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt @@ -1,28 +1,31 @@ package content.minigame.barbassault.lobby import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.party.Party -import content.minigame.barbassault.party.PartyHandler -import content.minigame.barbassault.party.PartyService +import content.minigame.barbassault.BarbassaultActivity +import content.minigame.barbassault.arena.BarbassaultSession +import content.minigame.barbassault.arena.BarbassaultState +import content.minigame.barbassault.lobby.BarbTeamManager.abandonTeam +import content.minigame.barbassault.lobby.BarbTeamManager.createTeam +import content.minigame.barbassault.lobby.BarbTeamManager.disbandTeam +import content.minigame.barbassault.lobby.BarbTeamManager.joinTeam +import content.minigame.duel.DuelSession import core.api.* +import core.game.component.Component import core.game.interaction.IntType import core.game.interaction.InteractionListener import core.game.node.Node import core.game.node.entity.Entity import core.game.node.entity.player.Player import core.game.node.item.Item -import core.game.system.task.Pulse -import core.game.world.GameWorld.ticks import core.game.world.map.zone.ZoneBorders -import content.minigame.barbassault.arena.BarbassaultSession -import core.game.world.map.build.DynamicRegion import org.rs09.consts.Items import org.rs09.consts.Scenery +import org.rs09.consts.Sounds //"-- Next wave no longer starting" - +private var activity: BarbassaultActivity? = null class BarbassaultLobby : InteractionListener, MapArea { override fun defineAreaBorders(): Array { @@ -32,16 +35,16 @@ class BarbassaultLobby : InteractionListener, MapArea { updatePlayerWave(entity) // openOverlay(entity, 256) // Components.BARBASSAULT_PLAYERSTAT_490 - sendMessage(entity as Player,"Party system is NOT Fully Implemented!!") } override fun areaLeave(entity: Entity, logout: Boolean) { if (entity is Player) { entity.interfaceManager.closeOverlay() val barbassItems = intArrayOf(Items.POISONED_WORMS_10540) - + //abandonTeam(entity) // Right here, its breaking things entity.equipment.removeAll(barbassItems) entity.inventory.removeAll(barbassItems) + } } fun updatePlayerWave(entity: Entity) { @@ -67,23 +70,31 @@ class BarbassaultLobby : InteractionListener, MapArea { //collector 20563 : ch13 //healer 20569 : ch14 override fun defineListeners() { - onUseWithPlayer(Items.SCROLL_10512) { inviter, _, invitee -> - val role = BarbRole.DEFENDER - PartyService.inviteToParty(inviter, invitee as Player, role) + onUseWithPlayer(Items.SCROLL_10512) { leader, _, node -> + val follower = node.asPlayer() + val session = leader.baSession + val team = session?.team - val partyId = inviter.getAttribute("barbass:party-id") - val party = partyId?.let { PartyHandler.getParty(it) } - - if (party != null) { - for (member in party.allMembers()) { - PartyService.updatePartyInterface(member.player) - } + if (team == null) { + leader.sendMessage("No active session found.") + return@onUseWithPlayer false } - return@onUseWithPlayer true + follower.baSession?.let { return@onUseWithPlayer false } // already on a team + + team.recruit = PendingRecruit(follower) + follower.baSession = session + //leader.sendMessage(team.recruit?.player?.username ?: "null") + // joinTeam(follower,BarbRole.DEFENDER) + + openInterface(follower, 493) + openInterface(leader, 492) + + return@onUseWithPlayer true } on(Items.SCROLL_10512, IntType.ITEM, "Read") { player, _ -> //https://youtu.be/GYh6JPKNOSA?t=233 -- I know 2017, but only example for read scroll iv found. + // ima cry, that YT account got deleted. // waveAdvance(player) return@on true @@ -91,43 +102,49 @@ class BarbassaultLobby : InteractionListener, MapArea { on(Items.SCROLL_10512, IntType.ITEM, "Write-Role") { player, _ -> //player.interfaceManager.open(Component(493)) //setInterfaceModel(player, 20561, 493, 8,1) - sendDialogueOptions( - player, - "Which role would you like to perform?", - "Attacker", "Defender","Collector","Healer","Cancel") - addDialogueAction(player) { player , buttonId -> - writeRole(player,buttonId) - } + sendDialogueOptions(player, "Which role would you like to perform?","Attacker", "Defender","Collector","Healer","Cancel") + addDialogueAction(player) { _ , buttonId -> writeRole(player,buttonId) } return@on true } on(Items.SCROLL_10512, IntType.ITEM, "Clear") { player, _ -> - val partyId = player.getAttribute("barbass:party-id") ?: return@on true - val party = PartyHandler.getParty(partyId) ?: return@on true - if (party.getLeader() != player) { - player.sendMessage("Only the party leader can clear the party.") - return@on true + val session = player.baSession + val team = session?.team + if (team != null) { + disbandTeam(session) + createTeam(player) + } else { + createTeam(player) } - val members = party.allMembers().map { it.player } - for (member in members) { - member.removeAttribute("barbass:party-id") - sendMessage(member,"The party has been cleared.") - closeOverlay(member) - openOverlay(member, 256) - PartyService.updatePartyInterface(member) - } - - PartyHandler.removeParty(partyId) return@on true } - + on(Items.SCROLL_10512, IntType.ITEM, "Destroy") { player, item -> + player.dialogueInterpreter.sendDestroyItem(item.id, item.name) + addDialogueAction(player) { _, button -> + if (button == 3) { + if (removeItem(player, item)) { + playAudio(player, Sounds.DESTROY_OBJECT_2381) + abandonTeam(player) + //updateCurrentTeam(player) + } + } + } + return@on true + } on(Scenery.LADDER_20193, IntType.SCENERY, "Climb-down") { player, _ -> + val session = player.baSession ?: run { + player.sendMessage("You are not in a session!") + return@on true + } + if (session.state != BarbassaultState.PARTY_CREATION) { + player.sendMessage("Your team is already starting or in the arena!") + return@on true + } + closeOverlay(player) // close party, - openOverlay(player, 494)// open countdown, Make a Count DownHandler - //start a session - // val session = BarbassaultSession(DynamicRegion.create(8011), activity!!) - // session.start(intArrayOf(player)) + openOverlay(player, 494)// open countdown, + session.beginStartingPhase() return@on true } on(Scenery.DOOR_20209, IntType.SCENERY, "Pass") { player, node -> @@ -156,7 +173,9 @@ class BarbassaultLobby : InteractionListener, MapArea { when (buttonId) { 2 -> { if (player.inventory.add(Item(Items.SCROLL_10512, 1))) { - player.sendMessage("You take scroll from table") + if (createTeam(player)){ + player.sendMessage("You take scroll from table") + } } else { player.sendMessage("You dont have enough inventory space") } @@ -213,35 +232,17 @@ class BarbassaultLobby : InteractionListener, MapArea { else -> null } } - fun createPartyAsLeader(leader: Player, role: BarbRole): Int { - val (partyId, party) = PartyHandler.createNewParty() - val success = party.add(leader, role) - sendMessage(leader, "Party created with ID: $partyId") - if (!success) { - PartyHandler.removeParty(partyId) - } - return partyId - } fun writeRole(player: Player, buttonId: Int) { if (buttonId == 6) return val playerRole = getRoleFromButton(buttonId) ?: return - val partyId = player.getAttribute("barbass:party-id") - val party = partyId?.let { PartyHandler.getParty(it) } - if (party != null) { - val roleCount = party.allMembers().count { it.role == playerRole } - if (roleCount >= 2) { - sendMessage(player,"That role is already full.") - return - } - party.changeRole(player, playerRole) - PartyService.updatePartyInterface(player) - } else { - val newPartyId = createPartyAsLeader(player, playerRole) - PartyService.updatePartyInterface(player) + if (player.baSession?.team != null) { + player.baSession?.team?.setRoleForPlayer(player, playerRole) + BarbTeamManager.updateTeam(player.baSession?.team!!) + sendMessage(player, "You've set your role to ${playerRole.name.lowercase().replaceFirstChar { it.uppercase() }}" + ) } - sendMessage(player,"You've set your role to ${playerRole.name.lowercase().replaceFirstChar { it.uppercase() }}") } fun handlePlayerOptionDoor(player: Player, roomRoleOptions:(RoomRole) -> Unit){ @@ -285,20 +286,22 @@ class BarbassaultLobby : InteractionListener, MapArea { val insideRoom = playerLoc.y <= doorLoc.y val moveY = if (insideRoom) 1 else -1 //ToDo fix walking trough wall when Using door from side. + if (insideRoom) { forceMove(player, playerLoc, doorLoc, 25, 60, null, 819) } forceMove(player, playerLoc, playerLoc.transform(0, moveY, 0), 25, 60, null, 819) { if (insideRoom) { + //player.baSession = null + abandonTeam(player) closeOverlay(player) - PartyService.leaveParty(player) + player.inventory.removeAll(Items.SCROLL_10512) } else { openOverlay(player, iface) - player.sendMessage("you enter wave ${BARBWAVEDOOR[node.id]}") } } } } fun waveAdvance(player: Player) { - var wave = player.getAttribute("barbass:wave", 1) + val wave = player.getAttribute("barbass:wave", 1) if (wave in 1..waveLobbies.size) { val targetLobby = waveLobbies[wave] teleport(player, targetLobby.randomWalkableLoc) @@ -349,7 +352,8 @@ class BarbassaultLobby : InteractionListener, MapArea { MAIN_LOBBY ) - val BARBDOORS = intArrayOf( Scenery.DOOR_20199, + val BARBDOORS = intArrayOf( + Scenery.DOOR_20199, Scenery.DOOR_20200, Scenery.DOOR_20201, Scenery.DOOR_20202, @@ -359,7 +363,7 @@ class BarbassaultLobby : InteractionListener, MapArea { Scenery.DOOR_20206, Scenery.DOOR_20207, Scenery.DOOR_20208, - ) + ) } val BARBWAVEDOOR = hashMapOf( 20199 to 1, diff --git a/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt new file mode 100644 index 000000000..fcb4efaea --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt @@ -0,0 +1,74 @@ +package content.minigame.barbassault.lobby + +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.lobby.CurrentTeam.ROLE_MODEL_MAP +import content.minigame.barbassault.lobby.CurrentTeam.modelZoom +import core.api.sendMessage +import core.api.setInterfaceModel +import core.api.setInterfaceText +import core.game.component.Component +import core.game.component.ComponentDefinition +import core.game.component.ComponentPlugin +import core.game.node.entity.player.Player +import core.game.node.item.Item +import core.plugin.Initializable +import core.plugin.Plugin +import org.rs09.consts.Items + +@Initializable +class CurrentTeamInterface : ComponentPlugin() { + override fun newInstance(arg: Any?): Plugin { + ComponentDefinition.forId(CurrentTeam.ID).plugin = this + return this + } + + override fun handle(player: Player?,component: Component?,opcode: Int,button: Int,slot: Int,itemId: Int ): Boolean { + return true + } + + override fun open(player: Player?, component: Component?) { + super.open(player, component) + player ?: return + if(player.inventory.containsItem(Item(Items.SCROLL_10512, 1)) ) { + setInterfaceText(player, player.username, CurrentTeam.ID, CurrentTeam.team[0].name) + //the leader might be able to take scroll between rooms? need Proof + } + } + +} +fun updateCurrentTeam(player: Player) { + val team = player.baSession?.team + + + for (slotIndex in 0 until BarbTeam.MAX_SLOTS) { + val uiSlot = CurrentTeam.team[slotIndex] + val partySlot = team?.getSlot(slotIndex) + val slotPlayer = partySlot?.player + val slotRole = partySlot?.role + + val nameText = slotPlayer?.name?.capitalizeWords() ?: CurrentTeam.defaultText + val model = slotRole?.let { ROLE_MODEL_MAP[it] } ?: -1 + setInterfaceText(player, nameText, CurrentTeam.ID, uiSlot.name) + setInterfaceModel(player, model, CurrentTeam.ID, uiSlot.role, modelZoom) + } +} + + +fun String.capitalizeWords(): String = split('_').joinToString("_") { it.replaceFirstChar { c -> c.uppercaseChar() } } + +object CurrentTeam { + const val ID = 256 + val defaultText = "-----" + val modelZoom = 2372 + val ROLE_MODEL_MAP = mapOf(BarbRole.ATTACKER to 20561,BarbRole.COLLECTOR to 20563,BarbRole.DEFENDER to 20566,BarbRole.HEALER to 20569) + data class Slot(val role: Int, val name: Int) + val team = listOf( + Slot(16, 6), + Slot(17, 7), + Slot(18, 8), + Slot(19, 9), + Slot(20, 10) + ) +} + + diff --git a/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt new file mode 100644 index 000000000..bb95c010c --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt @@ -0,0 +1,159 @@ +package content.minigame.barbassault.lobby + +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.lobby.BarbTeamManager.joinTeam +import core.api.* +import core.game.component.Component +import core.game.component.ComponentDefinition +import core.game.component.ComponentPlugin +import core.game.node.entity.player.Player +import core.plugin.Initializable +import core.plugin.Plugin + +@Initializable +class RoleSelectInterface : ComponentPlugin() { + override fun open(player: Player?, component: Component?) { + super.open(player, component) + var isopen = true + player ?: return + val team = player.baSession?.team; + if (team != null) { team.updateRoleAvailabilityFor(player) } + + component?.setCloseEvent { player, c -> + val leader = team?.getLeader()?.player; + + if (leader != null && leader != player && isopen) { + isopen = false + closeInterface(leader) + //if team.recruit not on team, team.recruit?.player?.baSession = null + team.recruit?.player?.baSession = null + team.recruit = null + } + return@setCloseEvent true + } + + val leaderData = player.baSession?.team?.getLeader() ?: run { + player.sendMessage("No leader found for your team.") + return + } + setInterfaceText(player, leaderData!!.player.name.capitalizeWords(),SelectRole.ID,SelectRole.Leader.name) + setInterfaceText(player, leaderData.role.toString(),SelectRole.ID,SelectRole.Leader.role) + setInterfaceText(player,"0",SelectRole.ID,SelectRole.Leader.wave) + + } + + var selectedButton = -1 + val roleButtons = mapOf( SelectRole.Att to listOf(8, 9), SelectRole.Def to listOf(10, 11), SelectRole.Col to listOf(12, 13),SelectRole.Heal to listOf(14,15) ) + val buttonRoleMap = roleButtons.flatMap { (role, buttons) -> buttons.map { it to role }}.toMap() + val selectRoleToBarbRole = mapOf(SelectRole.Att to BarbRole.ATTACKER,SelectRole.Def to BarbRole.DEFENDER, SelectRole.Col to BarbRole.COLLECTOR, SelectRole.Heal to BarbRole.HEALER ) + + override fun handle(player: Player?, component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int): Boolean { + if (player == null) return true + val team = player.baSession?.team; + val pending = team?.recruit ?: return true + + when (button) { + SelectRole.AcceptButton, SelectRole.AcceptButtonText -> { + val selectedRole = pending.role + if (selectedRole != null) { + joinTeam(pending.player, selectedRole) + player.sendMessage("You have joined as ${selectedRole.name}.") + team.recruit = null + } else { + player.sendMessage("You must select a role first!") + } + return true + } + SelectRole.DeclineButton, SelectRole.DeclineButtonText -> { + handleDecline(player) + return true + } + } + + val clickedSelectRole = buttonRoleMap[button] + if (clickedSelectRole != null && clickedSelectRole.isActive) { + pending.role = selectRoleToBarbRole[clickedSelectRole] + + val displayName = pending.role?.name ?: "Unknown" + setInterfaceText(player, displayName, SelectRole.ID, SelectRole.Status.CurrentRole) + + selectedButton = button + } else { + } + return true + } + + override fun newInstance(arg: Any?): Plugin { + ComponentDefinition.forId(SelectRole.ID).plugin = this + return this + } +} + +fun updateRoleAvailability( counts: RoleCounts, partySize: Int, player: Player ) { + fun canAdd(current: Int, missingRoles: Int): Boolean { + if (partySize >= 5) return false + if (current >= 2) return false + + val remainingSlots = 5 - (partySize + 1) + return remainingSlots >= missingRoles + } + + val missingRoles = listOf(counts.att, counts.def, counts.coll, counts.heal ).count { it == 0 } + + setRoleActive( SelectRole.Att, canAdd( counts.att, if ( counts.att == 0) maxOf(0, missingRoles - 1) else missingRoles ), player ) + setRoleActive( SelectRole.Def, canAdd( counts.def, if ( counts.def == 0) maxOf(0, missingRoles - 1) else missingRoles ), player ) + setRoleActive( SelectRole.Col, canAdd( counts.coll,if (counts.coll == 0) maxOf(0, missingRoles - 1) else missingRoles ), player ) + setRoleActive(SelectRole.Heal, canAdd( counts.heal,if (counts.heal == 0) maxOf(0, missingRoles - 1) else missingRoles ), player ) +} + +private fun setRoleActive(role: SelectRole.Role, active: Boolean, player: Player) { + role.setActive(active) + setInterfaceModel(player,role.model,SelectRole.ID,role.componentId,0) + setComponentVisibility(player,SelectRole.ID,role.activeChild,!role.isActive) +} +private fun handleAccept(player: Player){ + return +} +private fun handleDecline(player: Player) { + closeInterface(player) + val leader = player.baSession?.team?.getLeader()?.player + if (leader != null && leader != player) { + closeInterface(leader) + sendMessage(leader, "The applicant declined your offer.") + } +} + + +object SelectRole { + const val ID = 493 + const val AcceptButton = 16 + const val AcceptButtonText = 17 + const val DeclineButton = 18 + const val DeclineButtonText = 7 + + + class Role(val roleName: String, val componentId: Int, val activeModel: Int, val inactiveModel: Int, val activeChild: Int) { + var isActive: Boolean = false; private set + fun setActive(active: Boolean) { isActive = active } + val model: Int get() = if (isActive) activeModel else inactiveModel + } + + val Att = Role("Attacker",8, 20561, 20560, 20) + val Def = Role("Defender",10, 20566, 20567, 55) + val Col = Role("Collector",13, 20563, 20564, 54) + val Heal = Role("Healer", 14, 20569, 20570, 53) + + data class Slot(val name: Int, val role: Int, val wave: Int) + val Leader = Slot(28, 33, 39) + val Followers = listOf( + Slot(29, 34, 40), + Slot(30, 35, 41), + Slot(31, 36, 42), + Slot(32, 37, 43), + ) + + object Status { + const val CurrentRole = 19 + const val WaitingForAccept = 22 + } +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/party/Party.kt b/Server/src/main/content/minigame/barbassault/party/Party.kt deleted file mode 100644 index e46082e9d..000000000 --- a/Server/src/main/content/minigame/barbassault/party/Party.kt +++ /dev/null @@ -1,106 +0,0 @@ -package content.minigame.barbassault.party - -import content.minigame.barbassault.BarbRole -import core.game.node.entity.player.Player - -//todo fix party system. Maybe toss it all away and start over. -data class PartyMember(val player: Player, var role: BarbRole) - -class Party(val id: Int) { - companion object { - const val MAX_MEMBERS = 5 - const val MAX_PER_ROLE = 2 - } - - private val slots = MutableList(MAX_MEMBERS) { null } - - private var leader: Player? = null - - fun add(player: Player, role: BarbRole): Boolean { - // Check if player is already in party - if (slots.any { it?.player == player }) return false - // Check if party full - if (slots.count { it != null } >= MAX_MEMBERS) return false - // Check role limit - if (slots.count { it?.role == role } >= MAX_PER_ROLE) return false - - // Find first empty slot - val emptyIndex = slots.indexOfFirst { it == null } - if (emptyIndex == -1) return false // no empty slots - - slots[emptyIndex] = PartyMember(player, role) - if (leader == null) leader = player - - player.setAttribute("barbass:party-id", this.id) - updateInterfaces() - return true - } - - fun remove(player: Player): Boolean { - val index = slots.indexOfFirst { it?.player == player } - if (index == -1) return false // not in party - - slots[index]?.player?.removeAttribute("barbass:party-id") - slots[index] = null - - if (leader == player) { - disband() - } else { - updateInterfaces() - } - return true - } - - fun updateInterfaces() { - slots.filterNotNull().forEach { - PartyService.updatePartyInterface(it.player) - } - } - - fun disband() { - slots.filterNotNull().forEach { - it.player.removeAttribute("barbass:party-id") - it.player.sendMessage("The party has been disbanded.") - PartyService.updatePartyInterface(it.player) - } - PartyHandler.removeParty(id) - slots.fill(null) - leader = null - } - - fun getLeader(): Player? = leader - - fun setLeader(player: Player) { - if (slots.any { it?.player == player }) { - leader = player - updateInterfaces() - } - } - - fun getRole(player: Player): BarbRole? = - slots.find { it?.player == player }?.role - - fun changeRole(player: Player, newRole: BarbRole): Boolean { - val slot = slots.find { it?.player == player } ?: return false - if (slots.count { it?.role == newRole } >= MAX_PER_ROLE) return false - slot.role = newRole - updateInterfaces() - return true - } - - fun contains(player: Player): Boolean = - slots.any { it?.player == player } - - fun size(): Int = slots.count { it != null } - - fun allMembers(): List = slots.filterNotNull() - fun getSlots(): List = slots.toList() - fun clear() { - slots.filterNotNull().forEach { - it.player.removeAttribute("barbass:party-id") - } - slots.fill(null) - leader = null - updateInterfaces() - } -} diff --git a/Server/src/main/content/minigame/barbassault/party/PartyHandler.kt b/Server/src/main/content/minigame/barbassault/party/PartyHandler.kt deleted file mode 100644 index d89fa5a60..000000000 --- a/Server/src/main/content/minigame/barbassault/party/PartyHandler.kt +++ /dev/null @@ -1,39 +0,0 @@ -package content.minigame.barbassault.party - -object PartyHandler { - private val parties = mutableMapOf() - private val freedIds = ArrayDeque() - private var nextPartyId = 1 - - fun createNewParty(): Pair { - val id = if (freedIds.isNotEmpty()) freedIds.removeFirst() else nextPartyId++ - val party = Party(id) - parties[id] = party - return id to party - } - - fun getOrCreateParty(id: Int): Party = - parties.getOrPut(id) { Party(id) } - - fun getParty(id: Int): Party? = parties[id] - - fun removeParty(id: Int) { - if (parties.remove(id) != null) { - freedIds.add(id) - } - } - - fun allParties(): Map = parties.toMap() - - fun cleanupOfflineParties() { - val toRemove = parties.filter { (_, party) -> - val leader = party.getLeader() - leader == null || !leader.isActive() - }.keys - - for (partyId in toRemove) { - removeParty(partyId) - println("Removed party $partyId because leader was offline or null.") - } - } -} diff --git a/Server/src/main/content/minigame/barbassault/party/PartyService.kt b/Server/src/main/content/minigame/barbassault/party/PartyService.kt deleted file mode 100644 index e7f1b613b..000000000 --- a/Server/src/main/content/minigame/barbassault/party/PartyService.kt +++ /dev/null @@ -1,107 +0,0 @@ -package content.minigame.barbassault.party - -import content.minigame.barbassault.BarbRole -import core.api.sendMessage -import core.api.setInterfaceModel -import core.api.setInterfaceText -import core.game.node.entity.player.Player - -class PartyService { - companion object { - fun inviteToParty(inviter: Player, invitee: Player, role: BarbRole) { - val partyId = inviter.getAttribute("barbass:party-id") - val party = partyId?.let { PartyHandler.getParty(it) } - - when { - partyId == null -> sendMessage(inviter, "You're not in a party.") - - party == null -> sendMessage(inviter, "Party $partyId not found.") - - !party.contains(inviter) -> sendMessage(inviter, "You are not a member of party $partyId.") - - invitee.getAttribute("barbass:party-id") != null -> sendMessage(inviter, "${invitee.name} is already in a party.") - - party.size() >= Party.MAX_MEMBERS -> sendMessage(inviter, "Party is full.") - - party.allMembers().count { it.role == role } >= Party.MAX_PER_ROLE -> sendMessage(inviter, "Too many players with the role $role.") - - !party.add(invitee, role) -> sendMessage(inviter, "Failed to add ${invitee.name} as $role.") - - party.getLeader() != inviter -> sendMessage(inviter, "Only the party leader can invite players.") - - else -> { - invitee.setAttribute("barbass:party-id", partyId) - val formattedRole = role.name.lowercase().replaceFirstChar { it.uppercase() } - sendMessage(inviter, "${invitee.name} joined your party as $formattedRole.") - } - } - } - - fun updatePartyInterface(player: Player) { - val ROLE_MODEL_MAP = mapOf( - BarbRole.ATTACKER to 20561, - BarbRole.COLLECTOR to 20563, - BarbRole.DEFENDER to 20566, - BarbRole.HEALER to 20569 - ) - val iLeaderText = 6 - val iPlayerTextStart = 7 - val iModelOffset = 10 - val modelZoom = 2372 - val iDefaultText = "-----" - val partyId = player.getAttribute("barbass:party-id") ?: return - val party = PartyHandler.getParty(partyId) ?: return - val members = party.allMembers() - val leader = party.getLeader() - - if (leader != null) { - val leaderMember = members.find { it.player == leader } - setInterfaceText(player, leader.username, 256, iLeaderText) - setInterfaceModel(player, ROLE_MODEL_MAP[leaderMember?.role] ?: 20561, 256, iLeaderText + iModelOffset, modelZoom) - } else { - setInterfaceText(player, iDefaultText, 256, iLeaderText) - setInterfaceModel(player, 20561, 256, iLeaderText + iModelOffset, modelZoom) - } - - val otherMembers = members.filter { it.player != leader } - for (i in 0 until 4) { - val slotTextId = iPlayerTextStart + i - val slotModelId = slotTextId + iModelOffset - - if (i < otherMembers.size) { - val member = otherMembers[i] - setInterfaceText(player, member.player.username, 256, slotTextId) - setInterfaceModel(player, ROLE_MODEL_MAP[member.role] ?: 20561, 256, slotModelId, modelZoom) - } else { - setInterfaceText(player, iDefaultText, 256, slotTextId) - setInterfaceModel(player, -1, 256, slotModelId, modelZoom) // Default to attacker icon for empty - } - } - } - - fun leaveParty(player: Player) { - val partyId = player.getAttribute("barbass:party-id") ?: return - val party = PartyHandler.getParty(partyId) ?: return - - if (!party.remove(player)) { - player.sendMessage("Failed to leave the party.") - return - } - - player.removeAttribute("barbass:party-id") - player.sendMessage("You have left the party.") - updatePartyInterface(player) - - // Update remaining party members - for (member in party.allMembers()) { - updatePartyInterface(member.player) - } - - if (party.allMembers().isEmpty()) { - PartyHandler.removeParty(partyId) - } - } - - - } -} From 2bb115115c9b01a99f4925945561077c75fb2749 Mon Sep 17 00:00:00 2001 From: Tooze Date: Tue, 27 Jan 2026 09:06:17 -0500 Subject: [PATCH 005/123] Moved all role machines in to one file --- .../arena/machines/AttackerMachine.kt | 40 ----- .../arena/machines/CollectorMachine.kt | 23 --- .../arena/machines/DefenderMachine.kt | 53 ------- .../arena/machines/HealerMachine.kt | 65 -------- .../barbassault/arena/machines/ItemMachine.kt | 33 ---- .../barbassault/arena/scenery/ItemMachine.kt | 149 ++++++++++++++++++ 6 files changed, 149 insertions(+), 214 deletions(-) delete mode 100644 Server/src/main/content/minigame/barbassault/arena/machines/AttackerMachine.kt delete mode 100644 Server/src/main/content/minigame/barbassault/arena/machines/CollectorMachine.kt delete mode 100644 Server/src/main/content/minigame/barbassault/arena/machines/DefenderMachine.kt delete mode 100644 Server/src/main/content/minigame/barbassault/arena/machines/HealerMachine.kt delete mode 100644 Server/src/main/content/minigame/barbassault/arena/machines/ItemMachine.kt create mode 100644 Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt diff --git a/Server/src/main/content/minigame/barbassault/arena/machines/AttackerMachine.kt b/Server/src/main/content/minigame/barbassault/arena/machines/AttackerMachine.kt deleted file mode 100644 index 5e35f79fe..000000000 --- a/Server/src/main/content/minigame/barbassault/arena/machines/AttackerMachine.kt +++ /dev/null @@ -1,40 +0,0 @@ -package content.minigame.barbassault.arena.machines - -import core.api.EquipmentSlot -import core.api.getItemFromEquipment -import core.game.interaction.IntType -import core.game.interaction.InteractionListener -import org.rs09.consts.Items -import org.rs09.consts.Scenery -import core.api.sendMessage - - -class AttackerMachine: InteractionListener { - - val TAKE_ARROWS = intArrayOf(Items.BRONZE_ARROW_882, Items.IRON_ARROW_884,Items.STEEL_ARROW_886,Items.MITHRIL_ARROW_888) - val TAKE_RUNES = intArrayOf(Items.AIR_RUNE_556,Items.WATER_RUNE_555,Items.EARTH_RUNE_557,Items.FIRE_RUNE_554, - Items.MIND_RUNE_558,Items.CHAOS_RUNE_562, Items.DEATH_RUNE_560,Items.BLOOD_RUNE_565) - - //val TAKE_RUNES = intArrayOf(Items.CATALYTIC_RUNE_12851,Items.ELEMENTAL_RUNE_12850) - //suppose to use Catalyic and Elemental runes - - //should probably make sure familiars can't smuggle items out - - override fun defineListeners() { - on(Scenery.ATTACKER_ITEM_MACHINE_20241, IntType.SCENERY, "Take-runes") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10556) { - ItemMachine.handleAddItemMachine(player, node, TAKE_RUNES, 300) - sendMessage(player,"You take a selection of runes from the dispenser.") - } - return@on true - } - on(Scenery.ATTACKER_ITEM_MACHINE_20241, IntType.SCENERY, "Take-arrows") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10556) { - ItemMachine.handleAddItemMachine(player, node, TAKE_ARROWS, 300) - sendMessage(player,"You take a selection of arrows from the dispenser.") - } - return@on true - } - } - -} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/machines/CollectorMachine.kt b/Server/src/main/content/minigame/barbassault/arena/machines/CollectorMachine.kt deleted file mode 100644 index 853afcb7c..000000000 --- a/Server/src/main/content/minigame/barbassault/arena/machines/CollectorMachine.kt +++ /dev/null @@ -1,23 +0,0 @@ -package content.minigame.barbassault.arena.machines - -import core.api.EquipmentSlot -import core.api.getItemFromEquipment -import core.game.interaction.IntType -import core.game.interaction.InteractionListener -import org.rs09.consts.Scenery - -class CollectorMachine : InteractionListener { - - override fun defineListeners() { - on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Convert") { player, _ -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10557) { - //Items.RED_EGG_10532 - //Items.BLUE_EGG_10533 - //Items.GREEN_EGG_10531 - //uhhhhhh - //more research is needed. - } - return@on true - } - } -} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/machines/DefenderMachine.kt b/Server/src/main/content/minigame/barbassault/arena/machines/DefenderMachine.kt deleted file mode 100644 index 2df3515a3..000000000 --- a/Server/src/main/content/minigame/barbassault/arena/machines/DefenderMachine.kt +++ /dev/null @@ -1,53 +0,0 @@ -package content.minigame.barbassault.arena.machines - -import core.api.EquipmentSlot -import core.api.getItemFromEquipment -import core.game.interaction.IntType -import core.game.interaction.InteractionListener -import org.rs09.consts.Items -import org.rs09.consts.Scenery - -class DefenderMachine :InteractionListener { - val TAKE_WORMS = Items.WORMS_10515 - val TAKE_CRACKERS = Items.CRACKERS_10513 - val TAKE_TOFU = Items.TOFU_10514 - val baseItems = intArrayOf(TAKE_WORMS, TAKE_CRACKERS, TAKE_TOFU) - val STOCK_UP = IntArray(11 * baseItems.size) { i -> baseItems[i % baseItems.size] } - - - override fun defineListeners() { - on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Stock-up") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { - ItemMachine.handleAddItemMachine(player, node, STOCK_UP, 1) - } - return@on true - } - on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-crackers") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { - ItemMachine.handleAddItemMachine(player, node, intArrayOf(TAKE_CRACKERS), 5) - } - return@on true - } - on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-tofu") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { - ItemMachine.handleAddItemMachine(player, node, intArrayOf(TAKE_TOFU), 5) - } - return@on true - } - on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-worms") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { - ItemMachine.handleAddItemMachine(player, node, intArrayOf(TAKE_WORMS), 5) - } - return@on true - } - } -} - -/* - [DEFENDER_ITEM_MACHINE_20242] - Options[ Stock-up, Take-crackers, Take-tofu, Take-worms] - take items gives 5, - stock up alternates crackers tofu worms - CRACKERS_10513, TOFU_10514, WORMS_10515 - - */ \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/machines/HealerMachine.kt b/Server/src/main/content/minigame/barbassault/arena/machines/HealerMachine.kt deleted file mode 100644 index d75d121f6..000000000 --- a/Server/src/main/content/minigame/barbassault/arena/machines/HealerMachine.kt +++ /dev/null @@ -1,65 +0,0 @@ -package content.minigame.barbassault.arena.machines - - -import core.api.EquipmentSlot -import core.api.getItemFromEquipment -import core.game.interaction.IntType -import core.game.interaction.InteractionListener -import org.rs09.consts.Items -import org.rs09.consts.Scenery - -class HealerMachine : InteractionListener { - val ALL_HEALER_VAILS = intArrayOf(Items.HEALING_VIAL_10546,Items.HEALING_VIAL1_10545,Items.HEALING_VIAL2_10544,Items.HEALING_VIAL3_10543,Items.HEALING_VIAL4_10542) - val TAKE_VAIL = Items.HEALING_VIAL4_10542 - val TAKE_WORMS = Items.POISONED_WORMS_10540 - val TAKE_TOFU = Items.POISONED_TOFU_10539 - val TAKE_MEAT = Items.POISONED_MEAT_10541 - - val baseItems = intArrayOf(TAKE_WORMS, TAKE_TOFU, TAKE_MEAT) - val STOCK_UP = IntArray(11 * baseItems.size) { i -> baseItems[i % baseItems.size] } - - - override fun defineListeners() { - on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Stock-up") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { - //todo only allowed to have one vial - ItemMachine.handleAddItemMachine(player, node, STOCK_UP, 1) - } - return@on true - } - on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-vail") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { - //todo only allowed to have one vial - ItemMachine.handleAddItemMachine(player, node, intArrayOf(TAKE_VAIL), 1) - } - return@on true - } - on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-worms") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { - ItemMachine.handleAddItemMachine(player, node, intArrayOf(TAKE_WORMS), 5) - } - return@on true - } - on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-tofu") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { - ItemMachine.handleAddItemMachine(player, node, intArrayOf(TAKE_TOFU), 5) - } - return@on true - } - on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-meat") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { - ItemMachine.handleAddItemMachine(player, node, intArrayOf(TAKE_MEAT), 5) - } - return@on true - } - } -} - - /* - * - * [HEALER_ITEM_MACHINE_20243] - Options[ Stock-up, Take-vail, Take-tofu, Take-worms, Tale-meat] - Take item gives 5! - Stock-up gives vial and alternating tofo-worms-meat till full - POISONED_TOFU_10539,POISONED_MEAT_10541,POISONED_WORMS_10540 -*/ \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/machines/ItemMachine.kt b/Server/src/main/content/minigame/barbassault/arena/machines/ItemMachine.kt deleted file mode 100644 index d12bc66da..000000000 --- a/Server/src/main/content/minigame/barbassault/arena/machines/ItemMachine.kt +++ /dev/null @@ -1,33 +0,0 @@ -package content.minigame.barbassault.arena.machines - -import core.api.addItem -import core.game.node.Node -import core.game.node.entity.player.Player -import core.game.system.task.Pulse -import core.game.world.GameWorld -import core.game.world.update.flag.context.Animation - -class ItemMachine { - companion object { - fun handleAddItemMachine(player: Player,node: Node, items: IntArray, amount: Int) - { - player.animate(Animation(5419)) // find right animation - player.lock(5) // - - GameWorld.Pulser.submit(object : Pulse(3, player) { - override fun pulse(): Boolean { - //sendMessage(player,"You fill up your inventory with food from the dispenser") //defender - //sendMessage(player,"You fill up your inventory with poisoned food from the dispenser")// healer - //todo send right message depending on role - addArrayOfItems(player,items,amount) - player.unlock() - return true - } - }) - } - - fun addArrayOfItems(player: Player, ids: IntArray, amount: Int) { - ids.forEach { id -> addItem(player,id,amount) } - } - } -} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt new file mode 100644 index 000000000..b64278225 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt @@ -0,0 +1,149 @@ +package content.minigame.barbassault.arena.scenery + +import core.api.EquipmentSlot +import core.api.addItem +import core.api.getItemFromEquipment +import core.api.sendMessage +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import core.game.node.Node +import core.game.node.entity.player.Player +import core.game.system.task.Pulse +import core.game.world.GameWorld +import core.game.world.update.flag.context.Animation +import org.rs09.consts.Items +import org.rs09.consts.Scenery + +class ItemMachine: InteractionListener { + //Attacker// + //val TAKE_RUNES = intArrayOf(Items.CATALYTIC_RUNE_12851,Items.ELEMENTAL_RUNE_12850) + //suppose to use Catalyic and Elemental runes + private val TAKE_ARROWS = intArrayOf(Items.BRONZE_ARROW_882, Items.IRON_ARROW_884, Items.STEEL_ARROW_886, Items.MITHRIL_ARROW_888) + private val TAKE_RUNES = intArrayOf(Items.AIR_RUNE_556, Items.WATER_RUNE_555, Items.EARTH_RUNE_557, Items.FIRE_RUNE_554, + Items.MIND_RUNE_558, Items.CHAOS_RUNE_562, Items.DEATH_RUNE_560, Items.BLOOD_RUNE_565) + //Defender// + private val TAKE_WORMS = Items.WORMS_10515 + private val TAKE_CRACKERS = Items.CRACKERS_10513 + private val TAKE_TOFU = Items.TOFU_10514 + val baseItems_DEF = intArrayOf(TAKE_WORMS, TAKE_CRACKERS, TAKE_TOFU) + val STOCK_UP_DEF = IntArray(11 * baseItems_DEF.size) { i -> baseItems_DEF[i % baseItems_DEF.size] } + //Healer// + private val ALL_HEALER_VAILS = intArrayOf(Items.HEALING_VIAL_10546,Items.HEALING_VIAL1_10545,Items.HEALING_VIAL2_10544,Items.HEALING_VIAL3_10543,Items.HEALING_VIAL4_10542) + private val TAKE_VAIL = Items.HEALING_VIAL4_10542 + private val TAKE_POIS_WORMS = Items.POISONED_WORMS_10540 + private val TAKE_POIS_TOFU = Items.POISONED_TOFU_10539 + private val TAKE_POIS_MEAT = Items.POISONED_MEAT_10541 + + private val baseItems_HEAL = intArrayOf(TAKE_POIS_WORMS, TAKE_POIS_TOFU, TAKE_POIS_MEAT) + private val STOCK_UP_HEAL = IntArray(11 * baseItems_HEAL.size) { i -> baseItems_HEAL[i % baseItems_HEAL.size] } + + override fun defineListeners() { + //Attacker// + on(Scenery.ATTACKER_ITEM_MACHINE_20241, IntType.SCENERY, "Take-runes") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10556) { + handleAddItemMachine(player, node, TAKE_RUNES, 300) + sendMessage(player,"You take a selection of runes from the dispenser.") + } + return@on true + } + on(Scenery.ATTACKER_ITEM_MACHINE_20241, IntType.SCENERY, "Take-arrows") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10556) { + handleAddItemMachine(player, node, TAKE_ARROWS, 300) + sendMessage(player,"You take a selection of arrows from the dispenser.") + } + return@on true + } + //Defender// + on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Stock-up") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { + handleAddItemMachine(player, node, STOCK_UP_DEF, 1) + } + return@on true + } + on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-crackers") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { + handleAddItemMachine(player, node, intArrayOf(TAKE_CRACKERS), 5) + } + return@on true + } + on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-tofu") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { + handleAddItemMachine(player, node, intArrayOf(TAKE_TOFU), 5) + } + return@on true + } + on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-worms") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { + handleAddItemMachine(player, node, intArrayOf(TAKE_WORMS), 5) + } + return@on true + } + //Healer// + on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Stock-up") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { + //todo only allowed to have one vial + handleAddItemMachine(player, node, STOCK_UP_HEAL, 1) + } + return@on true + } + on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-vail") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { + //todo only allowed to have one vial + handleAddItemMachine(player, node, intArrayOf(TAKE_VAIL), 1) + } + return@on true + } + on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-worms") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { + handleAddItemMachine(player, node, intArrayOf(TAKE_POIS_WORMS), 5) + } + return@on true + } + on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-tofu") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { + handleAddItemMachine(player, node, intArrayOf(TAKE_POIS_TOFU), 5) + } + return@on true + } + on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-meat") { player, node -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { + handleAddItemMachine(player, node, intArrayOf(TAKE_POIS_MEAT), 5) + } + return@on true + } + //Collector// + on(Scenery.COLLECTOR_CONVERTER_21250, IntType.SCENERY, "Convert") { player, _ -> + if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10557) { + //Items.RED_EGG_10532 + //Items.BLUE_EGG_10533 + //Items.GREEN_EGG_10531 + //uhhhhhh + //more research is needed. + } + return@on true + } + + } + + private fun handleAddItemMachine(player: Player,node: Node, items: IntArray, amount: Int) + { + player.animate(Animation(5419)) // find right animation + player.lock(5) + + GameWorld.Pulser.submit(object : Pulse(3, player) { + override fun pulse(): Boolean { + //sendMessage(player,"You fill up your inventory with food from the dispenser") //defender + //sendMessage(player,"You fill up your inventory with poisoned food from the dispenser")// healer + //todo send right message depending on role + addArrayOfItems(player,items,amount) + player.unlock() + return true + } + }) + } + + private fun addArrayOfItems(player: Player, ids: IntArray, amount: Int) { + ids.forEach { id -> addItem(player,id,amount) } + } + +} \ No newline at end of file From e740af0750dda563c0afc4cc9f27573c1bdc3ddb Mon Sep 17 00:00:00 2001 From: Tooze Date: Tue, 27 Jan 2026 10:02:26 -0500 Subject: [PATCH 006/123] Cleaned up code and added messages for taking items. --- .../barbassault/arena/scenery/ItemMachine.kt | 90 +++++++++---------- 1 file changed, 41 insertions(+), 49 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt index b64278225..6df053644 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt @@ -25,8 +25,8 @@ class ItemMachine: InteractionListener { private val TAKE_WORMS = Items.WORMS_10515 private val TAKE_CRACKERS = Items.CRACKERS_10513 private val TAKE_TOFU = Items.TOFU_10514 - val baseItems_DEF = intArrayOf(TAKE_WORMS, TAKE_CRACKERS, TAKE_TOFU) - val STOCK_UP_DEF = IntArray(11 * baseItems_DEF.size) { i -> baseItems_DEF[i % baseItems_DEF.size] } + private val baseItems_DEF = intArrayOf(TAKE_WORMS, TAKE_CRACKERS, TAKE_TOFU) + private val STOCK_UP_DEF = IntArray(10 * baseItems_DEF.size) { i -> baseItems_DEF[i % baseItems_DEF.size] } //Healer// private val ALL_HEALER_VAILS = intArrayOf(Items.HEALING_VIAL_10546,Items.HEALING_VIAL1_10545,Items.HEALING_VIAL2_10544,Items.HEALING_VIAL3_10543,Items.HEALING_VIAL4_10542) private val TAKE_VAIL = Items.HEALING_VIAL4_10542 @@ -35,115 +35,107 @@ class ItemMachine: InteractionListener { private val TAKE_POIS_MEAT = Items.POISONED_MEAT_10541 private val baseItems_HEAL = intArrayOf(TAKE_POIS_WORMS, TAKE_POIS_TOFU, TAKE_POIS_MEAT) - private val STOCK_UP_HEAL = IntArray(11 * baseItems_HEAL.size) { i -> baseItems_HEAL[i % baseItems_HEAL.size] } + private val STOCK_UP_HEAL = IntArray(10 * baseItems_HEAL.size) { i -> baseItems_HEAL[i % baseItems_HEAL.size] } override fun defineListeners() { //Attacker// on(Scenery.ATTACKER_ITEM_MACHINE_20241, IntType.SCENERY, "Take-runes") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10556) { - handleAddItemMachine(player, node, TAKE_RUNES, 300) - sendMessage(player,"You take a selection of runes from the dispenser.") - } + handleAddItemMachine(player, node,10556, TAKE_RUNES, 300,DispenserType.RUNES) return@on true } on(Scenery.ATTACKER_ITEM_MACHINE_20241, IntType.SCENERY, "Take-arrows") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10556) { - handleAddItemMachine(player, node, TAKE_ARROWS, 300) - sendMessage(player,"You take a selection of arrows from the dispenser.") - } + handleAddItemMachine(player, node,10556, TAKE_ARROWS, 300,DispenserType.ARROWS) return@on true } //Defender// on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Stock-up") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { - handleAddItemMachine(player, node, STOCK_UP_DEF, 1) - } + handleAddItemMachine(player, node,10558, STOCK_UP_DEF, 1,DispenserType.FOOD) return@on true } on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-crackers") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { - handleAddItemMachine(player, node, intArrayOf(TAKE_CRACKERS), 5) - } + handleAddItemMachine(player, node,10558, intArrayOf(TAKE_CRACKERS), 5,DispenserType.FOOD) return@on true } on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-tofu") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { - handleAddItemMachine(player, node, intArrayOf(TAKE_TOFU), 5) - } + handleAddItemMachine(player, node,10558, intArrayOf(TAKE_TOFU), 5,DispenserType.FOOD) return@on true } on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-worms") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) { - handleAddItemMachine(player, node, intArrayOf(TAKE_WORMS), 5) - } + handleAddItemMachine(player, node,10558, intArrayOf(TAKE_WORMS), 5,DispenserType.FOOD) return@on true } //Healer// on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Stock-up") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { - //todo only allowed to have one vial - handleAddItemMachine(player, node, STOCK_UP_HEAL, 1) + if (hasAnyVial(player)) { + sendMessage(player, "You can only carry one healing vial at a time.") + return@on true } + handleAddItemMachine(player, node,10559, STOCK_UP_HEAL, 1,DispenserType.POISONED) return@on true } on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-vail") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { - //todo only allowed to have one vial - handleAddItemMachine(player, node, intArrayOf(TAKE_VAIL), 1) + if (hasAnyVial(player)) { + sendMessage(player, "You can only carry one healing vial at a time.") + return@on true } + handleAddItemMachine(player, node,10559, intArrayOf(TAKE_VAIL), 1,DispenserType.VAIL) return@on true } on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-worms") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { - handleAddItemMachine(player, node, intArrayOf(TAKE_POIS_WORMS), 5) - } + handleAddItemMachine(player, node,10559, intArrayOf(TAKE_POIS_WORMS), 5,DispenserType.POISONED) return@on true } on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-tofu") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { - handleAddItemMachine(player, node, intArrayOf(TAKE_POIS_TOFU), 5) - } + handleAddItemMachine(player, node,10559, intArrayOf(TAKE_POIS_TOFU), 5,DispenserType.POISONED) return@on true } on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-meat") { player, node -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { - handleAddItemMachine(player, node, intArrayOf(TAKE_POIS_MEAT), 5) - } + handleAddItemMachine(player, node,10559, intArrayOf(TAKE_POIS_MEAT), 5,DispenserType.POISONED) return@on true } //Collector// on(Scenery.COLLECTOR_CONVERTER_21250, IntType.SCENERY, "Convert") { player, _ -> - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10557) { + if (!hasCape(player, 10557)) return@on true + //Items.RED_EGG_10532 //Items.BLUE_EGG_10533 //Items.GREEN_EGG_10531 //uhhhhhh //more research is needed. - } + return@on true } - } - - private fun handleAddItemMachine(player: Player,node: Node, items: IntArray, amount: Int) + private fun handleAddItemMachine(player: Player,node: Node,capeId: Int, items: IntArray, amount: Int,message: DispenserType = DispenserType.GENERIC) { - player.animate(Animation(5419)) // find right animation + if (!hasCape(player, capeId)) return + player.animate(Animation(5419)) player.lock(5) GameWorld.Pulser.submit(object : Pulse(3, player) { override fun pulse(): Boolean { - //sendMessage(player,"You fill up your inventory with food from the dispenser") //defender - //sendMessage(player,"You fill up your inventory with poisoned food from the dispenser")// healer - //todo send right message depending on role addArrayOfItems(player,items,amount) + sendMessage(player, message.message) player.unlock() return true } }) } - private fun addArrayOfItems(player: Player, ids: IntArray, amount: Int) { ids.forEach { id -> addItem(player,id,amount) } } - + private fun hasAnyVial(player: Player): Boolean { + return ALL_HEALER_VAILS.any { player.inventory.contains(it,1) } + } + private fun hasCape(player: Player, capeId: Int): Boolean { + return getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == capeId + } + private enum class DispenserType(val message: String) { + ARROWS("You take a selection of arrows from the dispenser."), + RUNES("You take a selection of runes from the dispenser."), + FOOD("You fill up your inventory with food from the dispenser."), + POISONED("You fill up your inventory with poisoned food from the dispenser."), + VAIL("You take a vial from the dispenser."), + GENERIC("You take items from the dispenser.") + } } \ No newline at end of file From ddf426d4eeb34cc0253eb199b5f86a3d0ad14dd1 Mon Sep 17 00:00:00 2001 From: Tooze Date: Tue, 27 Jan 2026 11:30:19 -0500 Subject: [PATCH 007/123] Cleaned up HornListeners --- .../barbassault/arena/HornListeners.kt | 80 ++++++++++--------- 1 file changed, 43 insertions(+), 37 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/HornListeners.kt b/Server/src/main/content/minigame/barbassault/arena/HornListeners.kt index b67f1a8bf..83098b264 100644 --- a/Server/src/main/content/minigame/barbassault/arena/HornListeners.kt +++ b/Server/src/main/content/minigame/barbassault/arena/HornListeners.kt @@ -1,5 +1,6 @@ package content.minigame.barbassault.arena +import content.minigame.barbassault.lobby.baSession import core.api.sendChat import core.api.sendMessage import core.game.interaction.IntType @@ -8,96 +9,101 @@ import org.rs09.consts.Items class HornListeners : InteractionListener { val ATTACKER_HORNS = intArrayOf(Items.ATTACKER_HORN_10516,Items.ATTACKER_HORN_10517,Items.ATTACKER_HORN_10518,Items.ATTACKER_HORN_10519,Items.ATTACKER_HORN_10520) - val TELL_RED = "Collector: Red Eggs!" - val TELL_GREEN = "Collector: Green Eggs!" - val TELL_BLUE = "Collector: Blue Eggs!" - - val TELL_PTOFU = "Healer: Poison tofo!" - val TELL_PWORMS = "Healer: Poison worms!" - val TELL_PMEAT = "Healer: Poison meat!" - - val TELL_STYLE1 = "Attacker: Controlled/Bronze/Wind!" - val TELL_STYLE2 = "Attacker: Accurate/Iron/Water!" - val TELL_STYLE3 = "Attacker: Aggressive/Steel/Earth!" - val TELL_STYLE4 = "Attacker: Defensive/Mithril/Fire!" - val HEALER_HORNS = intArrayOf(Items.HEALER_HORN_10526,Items.HEALER_HORN_10527,Items.HEALER_HORN_10528,Items.HEALER_HORN_10529,Items.HEALER_HORN_10530 ) - val TELL_TOFU = "Defender: Drop Tofu!" - val TELL_CRACKERS= "Defender: Drop Crackers!" - val TELL_WORMS = "Defender: Drop Worms!" - val ALL_HORNS = intArrayOf(Items.COLLECTOR_HORN_10560,Items.DEFENDER_HORN_10538) + HEALER_HORNS + ATTACKER_HORNS - val TELL_MEDIC = "Medic!!" + + enum class BaCall(val text: String) { + COLLECTOR_RED("Collector: Red Eggs!"), + COLLECTOR_GREEN("Collector: Green Eggs!"), + COLLECTOR_BLUE("Collector: Blue Eggs!"), + + HEALER_TOFU("Healer: Poison tofu!"), + HEALER_WORMS("Healer: Poison worms!"), + HEALER_MEAT("Healer: Poison meat!"), + + ATTACKER_STYLE_1("Attacker: Controlled/Bronze/Wind!"), + ATTACKER_STYLE_2("Attacker: Accurate/Iron/Water!"), + ATTACKER_STYLE_3("Attacker: Aggressive/Steel/Earth!"), + ATTACKER_STYLE_4("Attacker: Defensive/Mithril/Fire!"), + + DEFENDER_TOFU("Defender: Drop Tofu!"), + DEFENDER_CRACKERS("Defender: Drop Crackers!"), + DEFENDER_WORMS("Defender: Drop Worms!"), + MEDIC("Medic!!") + } override fun defineListeners() { on(ALL_HORNS, IntType.ITEM, "Medic") { player, _ -> - sendChat(player,TELL_MEDIC) + sendChat(player,BaCall.MEDIC.text) + //pretty sure there is an emote with this (wave hand, panic face?) + //player.baSession.team.broadcastMedic(player) return@on true } on(ALL_HORNS, IntType.ITEM, "Drop") { player, _ -> sendMessage(player,"I need that!") // not authentic return@on false } - //ATTACKER on(ATTACKER_HORNS, IntType.ITEM, "Tell-red") { player, _ -> - sendChat(player,TELL_RED) + sendChat(player,BaCall.COLLECTOR_RED.text) + //player.baSession.team.broadcastColl(red) return@on true } on(ATTACKER_HORNS, IntType.ITEM, "Tell-green") { player, _ -> - sendChat(player,TELL_GREEN) + sendChat(player,BaCall.COLLECTOR_GREEN.text) + //player.baSession.team.broadcastColl(green) return@on true } on(ATTACKER_HORNS, IntType.ITEM, "Tell-blue") { player, _ -> - sendChat(player,TELL_BLUE) + sendChat(player,BaCall.COLLECTOR_BLUE.text) + //player.baSession.team.broadcastColl(blue) return@on true } - //DEFENDER on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-tofu") { player, _ -> - sendChat(player,TELL_PTOFU) + sendChat(player,BaCall.HEALER_TOFU.text) + //player.baSession.team.broadcastDef(tofu) return@on true } on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-worms") { player, _ -> - sendChat(player,TELL_PWORMS) + sendChat(player,BaCall.HEALER_WORMS.text) + //player.baSession.team.broadcastDef(worms) return@on true } on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-meat") { player, _ -> - sendChat(player,TELL_PMEAT) + sendChat(player,BaCall.HEALER_MEAT.text) + //player.baSession.team.broadcastDef(meat) return@on true } - //COLLECTOR on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style1") { player, _ -> - sendChat(player,TELL_STYLE1) + sendChat(player,BaCall.ATTACKER_STYLE_1.text) return@on true } on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style2") { player, _ -> - sendChat(player,TELL_STYLE2) + sendChat(player,BaCall.ATTACKER_STYLE_2.text) return@on true } on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style3") { player, _ -> - sendChat(player,TELL_STYLE3) + sendChat(player,BaCall.ATTACKER_STYLE_3.text) return@on true } on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style4") { player, _ -> - sendChat(player,TELL_STYLE4) + sendChat(player,BaCall.ATTACKER_STYLE_4.text) return@on true } - //HEALER on(HEALER_HORNS, IntType.ITEM, "Tell-tofu") { player, _ -> - sendChat(player,TELL_TOFU) + sendChat(player,BaCall.DEFENDER_TOFU.text) return@on true } on(HEALER_HORNS, IntType.ITEM, "Tell-crackers") { player, _ -> - sendChat(player,TELL_CRACKERS) + sendChat(player,BaCall.DEFENDER_CRACKERS.text) return@on true } on(HEALER_HORNS, IntType.ITEM, "tell-worms") { player, _ -> - sendChat(player,TELL_WORMS) + sendChat(player,BaCall.DEFENDER_WORMS.text) return@on true } - } } \ No newline at end of file From f28e607142195883c838dd1e4cac521dcec80aaa Mon Sep 17 00:00:00 2001 From: Tooze Date: Tue, 27 Jan 2026 11:33:07 -0500 Subject: [PATCH 008/123] Moved HornHelper in to HornListeners --- .../minigame/barbassault/arena/HornHelper.kt | 59 ------------------- .../barbassault/arena/HornListeners.kt | 51 ++++++++++++++++ 2 files changed, 51 insertions(+), 59 deletions(-) delete mode 100644 Server/src/main/content/minigame/barbassault/arena/HornHelper.kt diff --git a/Server/src/main/content/minigame/barbassault/arena/HornHelper.kt b/Server/src/main/content/minigame/barbassault/arena/HornHelper.kt deleted file mode 100644 index dc887d1d6..000000000 --- a/Server/src/main/content/minigame/barbassault/arena/HornHelper.kt +++ /dev/null @@ -1,59 +0,0 @@ -package content.minigame.barbassault.arena - -import core.api.* -import core.game.node.entity.player.Player -import org.rs09.consts.Items - -object HornHelper { - fun getAttackerHorn(player: Player): AttackerHorn? { - return AttackerHorn.values().firstOrNull { inInventory(player, it.itemId) } - } - - fun getHealerHorn(player: Player): HealerHorn? { - return HealerHorn.values().firstOrNull { inInventory(player, it.itemId) } - } - - fun getCollectorBag(player: Player): CollectionBag? { - return CollectionBag.values().firstOrNull { inInventory(player, it.itemId) } - } -} -enum class AttackerHorn(val itemId: Int) { - LEVEL_ONE(Items.ATTACKER_HORN_10516), - LEVEL_TWO(Items.ATTACKER_HORN_10517), - LEVEL_THREE(Items.ATTACKER_HORN_10518), - LEVEL_FOUR(Items.ATTACKER_HORN_10519), - LEVEL_FIVE(Items.ATTACKER_HORN_10520); - - companion object { - private val map = values().associateBy(AttackerHorn::itemId) - - fun fromId(id: Int): AttackerHorn? = map[id] - } -} -enum class HealerHorn(val itemId: Int) { - LEVEL_ONE(Items.HEALER_HORN_10526), - LEVEL_TWO(Items.HEALER_HORN_10527), - LEVEL_THREE(Items.HEALER_HORN_10528), - LEVEL_FOUR(Items.HEALER_HORN_10529), - LEVEL_FIVE(Items.HEALER_HORN_10530); - - companion object { - private val map = values().associateBy(HealerHorn::itemId) - - fun fromId(id: Int): HealerHorn? = map[id] - } -} -enum class CollectionBag(val itemId: Int) { - LEVEL_ONE(Items.COLLECTION_BAG_10521), - LEVEL_TWO(Items.COLLECTION_BAG_10522), - LEVEL_THREE(Items.COLLECTION_BAG_10523), - LEVEL_FOUR(Items.COLLECTION_BAG_10524), - LEVEL_FIVE(Items.COLLECTION_BAG_10525); - - companion object { - private val map = values().associateBy(CollectionBag::itemId) - - fun fromId(id: Int): CollectionBag? = map[id] - } -} - diff --git a/Server/src/main/content/minigame/barbassault/arena/HornListeners.kt b/Server/src/main/content/minigame/barbassault/arena/HornListeners.kt index 83098b264..3f0888df5 100644 --- a/Server/src/main/content/minigame/barbassault/arena/HornListeners.kt +++ b/Server/src/main/content/minigame/barbassault/arena/HornListeners.kt @@ -1,10 +1,12 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.lobby.baSession +import core.api.inInventory import core.api.sendChat import core.api.sendMessage import core.game.interaction.IntType import core.game.interaction.InteractionListener +import core.game.node.entity.player.Player import org.rs09.consts.Items class HornListeners : InteractionListener { @@ -106,4 +108,53 @@ class HornListeners : InteractionListener { return@on true } } + object HornHelper { + fun getAttackerHorn(player: Player): AttackerHorn? { + return AttackerHorn.values().firstOrNull { inInventory(player, it.itemId) } + } + + fun getHealerHorn(player: Player): HealerHorn? { + return HealerHorn.values().firstOrNull { inInventory(player, it.itemId) } + } + + fun getCollectorBag(player: Player): CollectionBag? { + return CollectionBag.values().firstOrNull { inInventory(player, it.itemId) } + } + } + enum class AttackerHorn(val itemId: Int) { + LEVEL_ONE(Items.ATTACKER_HORN_10516), + LEVEL_TWO(Items.ATTACKER_HORN_10517), + LEVEL_THREE(Items.ATTACKER_HORN_10518), + LEVEL_FOUR(Items.ATTACKER_HORN_10519), + LEVEL_FIVE(Items.ATTACKER_HORN_10520); + + companion object { + private val map = values().associateBy(AttackerHorn::itemId) + fun fromId(id: Int): AttackerHorn? = map[id] + } + } + enum class HealerHorn(val itemId: Int) { + LEVEL_ONE(Items.HEALER_HORN_10526), + LEVEL_TWO(Items.HEALER_HORN_10527), + LEVEL_THREE(Items.HEALER_HORN_10528), + LEVEL_FOUR(Items.HEALER_HORN_10529), + LEVEL_FIVE(Items.HEALER_HORN_10530); + + companion object { + private val map = values().associateBy(HealerHorn::itemId) + fun fromId(id: Int): HealerHorn? = map[id] + } + } + enum class CollectionBag(val itemId: Int) { + LEVEL_ONE(Items.COLLECTION_BAG_10521), + LEVEL_TWO(Items.COLLECTION_BAG_10522), + LEVEL_THREE(Items.COLLECTION_BAG_10523), + LEVEL_FOUR(Items.COLLECTION_BAG_10524), + LEVEL_FIVE(Items.COLLECTION_BAG_10525); + + companion object { + private val map = values().associateBy(CollectionBag::itemId) + fun fromId(id: Int): CollectionBag? = map[id] + } + } } \ No newline at end of file From cc2d65cccfdd2aa451f471fbb1106d7514e4a1bd Mon Sep 17 00:00:00 2001 From: Tooze Date: Tue, 27 Jan 2026 22:40:25 -0500 Subject: [PATCH 009/123] Session now handles alternating Calls and updates teams RoleInterface when player makes a call --- .../{HornListeners.kt => BaHornSystem.kt} | 29 ++- .../barbassault/arena/BarbassaultGameArea.kt | 41 ++-- .../barbassault/arena/BarbassaultSession.kt | 183 +++++++++++++++++- .../minigame/barbassault/arena/LureItems.kt | 1 + .../arena/monsters/PenanceFighterNPC.kt | 4 +- .../barbassault/arena/scenery/DefenderTrap.kt | 4 +- .../barbassault/arena/scenery/ItemMachine.kt | 4 +- .../barbassault/lobby/CurrentTeamInterface.kt | 2 - 8 files changed, 219 insertions(+), 49 deletions(-) rename Server/src/main/content/minigame/barbassault/arena/{HornListeners.kt => BaHornSystem.kt} (79%) diff --git a/Server/src/main/content/minigame/barbassault/arena/HornListeners.kt b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt similarity index 79% rename from Server/src/main/content/minigame/barbassault/arena/HornListeners.kt rename to Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt index 3f0888df5..6a547639b 100644 --- a/Server/src/main/content/minigame/barbassault/arena/HornListeners.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt @@ -9,7 +9,7 @@ import core.game.interaction.InteractionListener import core.game.node.entity.player.Player import org.rs09.consts.Items -class HornListeners : InteractionListener { +class BaHornSystem : InteractionListener { val ATTACKER_HORNS = intArrayOf(Items.ATTACKER_HORN_10516,Items.ATTACKER_HORN_10517,Items.ATTACKER_HORN_10518,Items.ATTACKER_HORN_10519,Items.ATTACKER_HORN_10520) val HEALER_HORNS = intArrayOf(Items.HEALER_HORN_10526,Items.HEALER_HORN_10527,Items.HEALER_HORN_10528,Items.HEALER_HORN_10529,Items.HEALER_HORN_10530 ) val ALL_HORNS = intArrayOf(Items.COLLECTOR_HORN_10560,Items.DEFENDER_HORN_10538) + HEALER_HORNS + ATTACKER_HORNS @@ -38,7 +38,7 @@ class HornListeners : InteractionListener { on(ALL_HORNS, IntType.ITEM, "Medic") { player, _ -> sendChat(player,BaCall.MEDIC.text) //pretty sure there is an emote with this (wave hand, panic face?) - //player.baSession.team.broadcastMedic(player) + player.baSession?.alertHealers(player) return@on true } on(ALL_HORNS, IntType.ITEM, "Drop") { player, _ -> @@ -48,63 +48,76 @@ class HornListeners : InteractionListener { //ATTACKER on(ATTACKER_HORNS, IntType.ITEM, "Tell-red") { player, _ -> sendChat(player,BaCall.COLLECTOR_RED.text) + player.baSession?.onHornCall(player,BarbassaultSession.EggColor.RED) //player.baSession.team.broadcastColl(red) return@on true } on(ATTACKER_HORNS, IntType.ITEM, "Tell-green") { player, _ -> sendChat(player,BaCall.COLLECTOR_GREEN.text) + player.baSession?.onHornCall(player,BarbassaultSession.EggColor.GREEN) //player.baSession.team.broadcastColl(green) return@on true } on(ATTACKER_HORNS, IntType.ITEM, "Tell-blue") { player, _ -> sendChat(player,BaCall.COLLECTOR_BLUE.text) + player.baSession?.onHornCall(player,BarbassaultSession.EggColor.BLUE) //player.baSession.team.broadcastColl(blue) return@on true } //DEFENDER on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-tofu") { player, _ -> sendChat(player,BaCall.HEALER_TOFU.text) + player.baSession?.onHornCall(player,BarbassaultSession.PoisonFood.TOFU) //player.baSession.team.broadcastDef(tofu) return@on true } on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-worms") { player, _ -> sendChat(player,BaCall.HEALER_WORMS.text) + player.baSession?.onHornCall(player,BarbassaultSession.PoisonFood.WORMS) //player.baSession.team.broadcastDef(worms) return@on true } on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-meat") { player, _ -> sendChat(player,BaCall.HEALER_MEAT.text) + player.baSession?.onHornCall(player,BarbassaultSession.PoisonFood.MEAT) //player.baSession.team.broadcastDef(meat) return@on true } //COLLECTOR on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style1") { player, _ -> sendChat(player,BaCall.ATTACKER_STYLE_1.text) + player.baSession?.onHornCall(player,BarbassaultSession.AttackerStyle.STYLE_1) return@on true } on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style2") { player, _ -> sendChat(player,BaCall.ATTACKER_STYLE_2.text) + player.baSession?.onHornCall(player, BarbassaultSession.AttackerStyle.STYLE_2) return@on true } on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style3") { player, _ -> sendChat(player,BaCall.ATTACKER_STYLE_3.text) + player.baSession?.onHornCall(player,BarbassaultSession.AttackerStyle.STYLE_3) return@on true } on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style4") { player, _ -> sendChat(player,BaCall.ATTACKER_STYLE_4.text) + player.baSession?.onHornCall(player,BarbassaultSession.AttackerStyle.STYLE_4) return@on true } //HEALER on(HEALER_HORNS, IntType.ITEM, "Tell-tofu") { player, _ -> sendChat(player,BaCall.DEFENDER_TOFU.text) + player.baSession?.onHornCall(player, BarbassaultSession.LureFood.TOFU) return@on true } on(HEALER_HORNS, IntType.ITEM, "Tell-crackers") { player, _ -> sendChat(player,BaCall.DEFENDER_CRACKERS.text) + player.baSession?.onHornCall(player, BarbassaultSession.LureFood.CRACKERS) return@on true } on(HEALER_HORNS, IntType.ITEM, "tell-worms") { player, _ -> sendChat(player,BaCall.DEFENDER_WORMS.text) + player.baSession?.onHornCall(player, BarbassaultSession.LureFood.WORMS) return@on true } } @@ -133,12 +146,12 @@ class HornListeners : InteractionListener { fun fromId(id: Int): AttackerHorn? = map[id] } } - enum class HealerHorn(val itemId: Int) { - LEVEL_ONE(Items.HEALER_HORN_10526), - LEVEL_TWO(Items.HEALER_HORN_10527), - LEVEL_THREE(Items.HEALER_HORN_10528), - LEVEL_FOUR(Items.HEALER_HORN_10529), - LEVEL_FIVE(Items.HEALER_HORN_10530); + enum class HealerHorn(val itemId: Int, val healAmount: Int) { + LEVEL_ONE(Items.HEALER_HORN_10526, 5), // energy 20% + LEVEL_TWO(Items.HEALER_HORN_10527, 15), // energy 25% + LEVEL_THREE(Items.HEALER_HORN_10528, 20),// energy 30% + LEVEL_FOUR(Items.HEALER_HORN_10529, 25), // energy 35% + LEVEL_FIVE(Items.HEALER_HORN_10530, 35); // energy 40% companion object { private val map = values().associateBy(HealerHorn::itemId) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 9cd53980f..874659c47 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -3,6 +3,7 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultTut import content.minigame.barbassault.BarbassaultTut.Companion.TutorialItemSpawn +import content.minigame.barbassault.arena.BaHornSystem.HornHelper.getHealerHorn import content.minigame.barbassault.arena.scenery.DefenderTrap import content.minigame.barbassault.lobby.baSession import core.api.* @@ -77,12 +78,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { } override fun areaEnter(entity: Entity) { val player = entity as? Player ?: return - val wornIconId = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id - val interfaceId = getIconInterfaceId(wornIconId ?: -1) - if (interfaceId != null) { - //sendMessage(player,----- Wave: $Num -----") - openOverlay(player, interfaceId) - } + BarbassaultTut.BarbassTutNPCs.forEach { npc -> npc.init() npc.isWalks = false @@ -141,9 +137,11 @@ class BarbassaultGameArea : InteractionListener, MapArea { player.lock(5) GameWorld.Pulser.submit(object : Pulse(3, player) { override fun pulse(): Boolean { - heal(player, 25) + val healAmount = getHealerHorn(player)?.healAmount ?: 10 + //Should also restore run energy Amount + heal(player, healAmount) player.unlock() - sendMessage(player,"You've been healed \$Healed hitpoints.") + sendMessage(player,"You've been healed $healAmount hitpoints.") return true } }) @@ -180,6 +178,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { onEquip(ROLE_ICON) { player, _ -> if (player.baSession?.state == BarbassaultState.IN_ARENA) { sendMessage(player, "You can't remove that!") + return@onEquip false } defineAreaBorders().forEach { border -> if (border.insideBorder(player)) { @@ -215,7 +214,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { private fun lureDrop(player: Player,item:Item){ //val gi = GroundItemManager.create(GroundItem(item.dropItem,player.location,-1,null)) - + //todo ask for help with this. queueScript(player, strength = QueueStrength.SOFT) { val current = player.inventory.get(item.slot) if (current == null || current !== item) { @@ -225,13 +224,14 @@ class BarbassaultGameArea : InteractionListener, MapArea { PlayerMonitor.log(player, LogType.DUPE_ALERT, "Potential exploit attempt when player ${player.name} tried to drop ${item.amount}x ${item.id}. The item has been lost and will need to be refunded to the player, but how did they get this to happen? @Barbass") return@queueScript stopExecuting(player) } - val droppedItem = item.dropItem + val droppedItem = item.dropItem val gi = GroundItemManager.create(droppedItem, player.location, player) setAttribute(player, "droppedItem:${droppedItem.id}", getWorldTicks() + 2) PlayerParser.save(player) gi.forceVisible = true addItemNode(gi,player.location,true) + return@queueScript stopExecuting(player) } @@ -264,7 +264,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { } }) } - fun hasTools(player: Player): Boolean{ + private fun hasTools(player: Player): Boolean{ if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id != DEFENDER_ICON) {return true} val requiredItems = listOf(Items.HAMMER_2347, Items.LOGS_11760) for (item in requiredItems) { @@ -289,7 +289,7 @@ fun exitMiniGame(player: Player) { Items.HEALER_HORN_10526,Items.HEALER_HORN_10527,Items.HEALER_HORN_10528,Items.HEALER_HORN_10529,Items.HEALER_HORN_10530, Items.POISONED_WORMS_10540,Items.POISONED_TOFU_10539,Items.POISONED_MEAT_10541, ) - removeAll(player, barbassItems) + // removeAll(player, barbassItems) //todo should probably make sure familiars can't smuggle items out //(player.familiarManager.familiar as? BurdenBeast)?.container?.removeAll(barbassItems)//just in case someone smuggles a pet in. @@ -297,21 +297,8 @@ fun exitMiniGame(player: Player) { //or lost game Send back to wave room } -val BA_ROLE_CAPE = mapOf( BarbRole.ATTACKER to 10556, BarbRole.DEFENDER to 10558, BarbRole.COLLECTOR to 10557, BarbRole.HEALER to 10559 ) -fun equipBARoleIcon(player: Player, role: BarbRole) { - val itemId = BA_ROLE_CAPE[role] ?: return - player.equipment.add(Item(itemId),true,false) - //player.getEquipment().add(Item(itemId), true) -} -fun getIconInterfaceId(itemId: Int): Int? { - return when (itemId) { - ATTACKER_ICON -> Components.BARBASSAULT_OVER_ATT_485 - COLLECTOR_ICON -> Components.BARBASSAULT_OVER_COL_486 - DEFENDER_ICON -> Components.BARBASSAULT_OVER_DEF_487 - HEALER_ICON -> Components.BARBASSAULT_OVER_HEAL_488 - else -> null - } -} + + /* diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 2d6fb1cef..b7847e37e 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -11,6 +11,7 @@ import core.api.* import core.game.node.entity.Entity import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player +import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.map.Location @@ -22,6 +23,7 @@ import core.game.world.map.zone.ZoneRestriction import core.tools.Log import core.tools.secondsToTicks import core.tools.ticksToSeconds +import org.rs09.consts.Components import org.rs09.consts.NPCs import org.rs09.consts.Music import org.rs09.consts.Music.ASSAULT_AND_BATTERY_604 @@ -42,7 +44,7 @@ Player └─ role : BarbRole? */ -enum class BarbassaultState { PARTY_CREATION, STARTING, IN_ARENA, COMPLETE, END } +enum class BarbassaultState { PARTY_CREATION, STARTING, IN_ARENA,FORFEIT, COMPLETE, END } class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea { constructor(region: DynamicRegion, activity: BarbassaultActivity) : this(activity) {this.region = region; this.base = region.baseLocation} @@ -87,6 +89,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea player.properties.teleportLocation = Location.create(2593, 5264, 0) player.interfaceManager.closeOverlay() } + // https://www.youtube.com/watch?v=vYKbHNZn80w destroyArena() } @@ -101,6 +104,8 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea if (ticks <= 0) { enterArena() + rollNewRoleCalls() + //giveplayerHorns return true } @@ -118,10 +123,18 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea } private inner class GamePulse : Pulse(1) { + private var roleCallTicks = secondsToTicks(30) + override fun pulse(): Boolean { if (state != BarbassaultState.IN_ARENA) return true + roleCallTicks-- + if (roleCallTicks <= 0) { + rollNewRoleCalls() + roleCallTicks = secondsToTicks(30) + } // TODO: wave logic, timers, win/lose + // reSpawnItems return false } } @@ -161,24 +174,178 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea log(this::class.java, Log.FINE, "ENTERED Barbassault Arena") val player = entity as? Player ?: return + // val waveNum = player.getAttribute("barbass:wave", 1) val wornIconId = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id val interfaceId = getIconInterfaceId(wornIconId ?: -1) - if (interfaceId != null) { - //sendMessage(player,----- Wave: $Num -----") - openOverlay(player, interfaceId) + + interfaceId?.let { + sendMessage(player, "----- Wave: \$waveNum -----") + openOverlay(player, it) } - BarbassaultTut.BarbassTutNPCs.forEach { - npc -> npc.init() + + /** BarbassaultTut.BarbassTutNPCs.forEach { + npc -> npc.init() npc.isWalks = false } BarbassaultTut.spawnItems() + **/ } override fun areaLeave(entity: Entity, logout: Boolean) { log(this::class.java, Log.FINE, "LEFT Barbassault Arena") var player = entity as Player - exitMiniGame(player) + //exitMiniGame(player) removeTimer(player, "teleblock") } -} \ No newline at end of file + + private val BA_ROLE_CAPE = mapOf( BarbRole.ATTACKER to 10556, BarbRole.DEFENDER to 10558, BarbRole.COLLECTOR to 10557, BarbRole.HEALER to 10559 ) + private fun equipBARoleIcon(player: Player, role: BarbRole) { + val itemId = BA_ROLE_CAPE[role] ?: return + player.equipment.add(Item(itemId),true,false) + //player.getEquipment().add(Item(itemId), true) + } + private fun getIconInterfaceId(itemId: Int): Int? { + return when (itemId) { + ATTACKER_ICON -> Components.BARBASSAULT_OVER_ATT_485 + COLLECTOR_ICON -> Components.BARBASSAULT_OVER_COL_486 + DEFENDER_ICON -> Components.BARBASSAULT_OVER_DEF_487 + HEALER_ICON -> Components.BARBASSAULT_OVER_HEAL_488 + else -> null + } + } + + private fun broadcast(message: String) { + team.allPlayers().forEach { + sendMessage(it, message) + } + } + fun broadcastToRole(role: BarbRole, message: String) { + team.allPlayers() + .filter { team.getRoleForPlayer(it) == role } + .forEach { sendMessage(it, message) } + } + fun alertHealers(player:Player){ + //alert healers UI you asked ro help ( Flashing cross next to name) + } + fun updateAttackerUI(player: Player, call: AttackerCall) { + val style = call.called + if (style == null) { + setInterfaceText(player, "- - -", Components.BARBASSAULT_OVER_ATT_485, 4) + setInterfaceText(player, "", Components.BARBASSAULT_OVER_ATT_485, 5) + return + } + setInterfaceText(player, style.top, Components.BARBASSAULT_OVER_ATT_485, 4) + setInterfaceText(player, style.bottom, Components.BARBASSAULT_OVER_ATT_485, 5) + } + fun updateOtherRoleUI(player: Player,call: RoleCall<*>,interfaceId: Int,childId: Int ) { + val text = (call.called as? HasUIText)?.ui ?: "- - -" + setInterfaceText(player, text, interfaceId, childId) + } + + fun updateRoleUI() { + team.allPlayers().forEach { player -> + val role = team.getRoleForPlayer(player) ?: return@forEach + val call = roleCalls[role] ?: return@forEach + + when (role) { + BarbRole.ATTACKER -> { + updateAttackerUI(player, call as AttackerCall) + setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_ATT_485, 7) + } + BarbRole.COLLECTOR -> { + updateOtherRoleUI(player, call, Components.BARBASSAULT_OVER_COL_486, 4) + setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_COL_486, 6) + } + BarbRole.DEFENDER -> { + updateOtherRoleUI(player, call, Components.BARBASSAULT_OVER_DEF_487, 3) + setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_DEF_487, 5) + } + BarbRole.HEALER -> { + updateOtherRoleUI(player, call, Components.BARBASSAULT_OVER_HEAL_488, 31) + setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_HEAL_488, 33) + } + } + } + } + // may need to use this instead of my current method of, entering area, set icon -> set overlay based on icon + fun getRoleInterface(role: BarbRole): Int? { + return when (role) { + BarbRole.ATTACKER -> Components.BARBASSAULT_OVER_ATT_485 + BarbRole.COLLECTOR -> Components.BARBASSAULT_OVER_COL_486 + BarbRole.DEFENDER -> Components.BARBASSAULT_OVER_DEF_487 + BarbRole.HEALER -> Components.BARBASSAULT_OVER_HEAL_488 + } + } + + fun rollNewRoleCalls() { + roleCalls[BarbRole.ATTACKER] = AttackerCall(AttackerStyle.values().random()) + roleCalls[BarbRole.HEALER] = HealerCall(PoisonFood.values().random()) + roleCalls[BarbRole.DEFENDER] = DefenderCall(LureFood.values().random()) + roleCalls[BarbRole.COLLECTOR] = CollectorCall(EggColor.values().random()) + + roleCalls[BarbRole.COLLECTOR]?.toCall = roleCalls[BarbRole.ATTACKER]?.required + roleCalls[BarbRole.ATTACKER]?.toCall = roleCalls[BarbRole.COLLECTOR]?.required + roleCalls[BarbRole.HEALER]?.toCall = roleCalls[BarbRole.DEFENDER]?.required + roleCalls[BarbRole.DEFENDER]?.toCall = roleCalls[BarbRole.HEALER]?.required + updateRoleUI() + } + private val hornTargets = mapOf( + BarbRole.COLLECTOR to BarbRole.ATTACKER, + BarbRole.ATTACKER to BarbRole.COLLECTOR , + BarbRole.HEALER to BarbRole.DEFENDER, + BarbRole.DEFENDER to BarbRole.HEALER + ) + fun onHornCall(player: Player, calledValue: Any) { + val callerRole = team.getRoleForPlayer(player) ?: return + val targetRole = hornTargets[callerRole] ?: return + val call = roleCalls[targetRole] ?: return + + when (call) { + is AttackerCall -> if (calledValue is AttackerStyle) call.call(calledValue) + is HealerCall -> if (calledValue is PoisonFood) call.call(calledValue) + is DefenderCall -> if (calledValue is LureFood) call.call(calledValue) + is CollectorCall -> if (calledValue is EggColor) call.call(calledValue) + } + updateRoleUI() + } + fun onAttackerHit(style: AttackerStyle) { + val call = roleCalls[BarbRole.ATTACKER] as? AttackerCall ?: return + call.check(style) + } + + val roleCalls: MutableMap> = mutableMapOf() + interface HasUIText { val ui: String } + enum class AttackerStyle(val top: String, val bottom: String) : HasUIText { + STYLE_1("Controlled/","Bronze/Wind"), + STYLE_2("Accurate/","Iron/Water"), + STYLE_3("Aggressive/","Steel/Earth"), + STYLE_4("Defensive/","Mithril/Fire"); + override val ui: String get() = top + } + enum class EggColor(override val ui: String): HasUIText { RED("Red Eggs"), GREEN("Green Eggs"),BLUE("Blue Eggs") } + enum class PoisonFood(override val ui: String): HasUIText { TOFU("Pois. Tofu"), WORMS("Pois. Worms"), MEAT("Pois. Meat") } + enum class LureFood(override val ui: String): HasUIText { TOFU("Tofu"), CRACKERS("Crackers"), WORMS("Worms") } + class AttackerCall( override val required: AttackerStyle ) : RoleCall() + class HealerCall( override val required: PoisonFood ) : RoleCall() + class DefenderCall( override val required: LureFood ) : RoleCall() + class CollectorCall( override val required: EggColor ) : RoleCall() + + sealed class RoleCall { + abstract val required: T + var called: T? = null + private set + var succeeded: Boolean = false + private set + var toCall: Any? = null + fun call(value: T) { called = value } + fun check(value: T): Boolean { if (value == required) { succeeded = true; return true }; return false } + fun crossRoleDisplay(): String { + return when (this) { + is CollectorCall -> (toCall as? AttackerStyle)?.name?.lowercase()?.replaceFirstChar { it.uppercase() } ?: "- - -" + else -> (toCall as? HasUIText)?.ui ?: "- - -" + } + } + } + +} diff --git a/Server/src/main/content/minigame/barbassault/arena/LureItems.kt b/Server/src/main/content/minigame/barbassault/arena/LureItems.kt index 12d325c18..7dd1bdd98 100644 --- a/Server/src/main/content/minigame/barbassault/arena/LureItems.kt +++ b/Server/src/main/content/minigame/barbassault/arena/LureItems.kt @@ -11,6 +11,7 @@ data class LureItem(val item: Node, val location: Location, val isGood: Boolean) val LureItems = intArrayOf(Items.WORMS_10515, Items.CRACKERS_10513, Items.TOFU_10514) val LureItemNodes = mutableListOf() + //todo make this part of miniGame instance instead of global. fun addItemNode(item: GroundItem, location: Location, isGood: Boolean) { diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt index d1b0adadd..5c3f9ade5 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt @@ -1,6 +1,6 @@ package content.minigame.barbassault.arenas.monsters -import content.minigame.barbassault.arena.HornHelper +import content.minigame.barbassault.arena.BaHornSystem import core.api.* import core.game.node.entity.Entity import core.game.node.entity.combat.BattleState @@ -35,7 +35,7 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { } override fun beforeDamageReceived(self: NPC, attacker: Entity, state: BattleState) { val firstBefore = state.estimatedHit - state.estimatedHit = firstBefore + (HornHelper.getAttackerHorn(attacker as Player)?.ordinal?.plus(1) ?: 0) +1 + state.estimatedHit = firstBefore + (BaHornSystem.HornHelper.getAttackerHorn(attacker as Player)?.ordinal?.plus(1) ?: 0) +1 } override fun onCreation (self: NPC) { diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt index e616505e5..a7eea4aaf 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt @@ -1,6 +1,8 @@ package content.minigame.barbassault.arena.scenery +import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.monsters.PENANCE_RUNNER_IDS +import content.minigame.barbassault.lobby.baSession import core.api.* import core.game.node.Node import core.game.node.entity.Entity @@ -98,7 +100,7 @@ class DefenderTrap : MapArea { } } } - + //player.baSession.broadcastToRole("A Penance Runner broke a trap to the east/west!") //sendMessage(player,"A Penance Runner broke a trap to the east/west!") //When a runner dies to trap announce to Defenders //replaceScenery() //animateScenery diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt index 6df053644..7c46eebb4 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt @@ -1,5 +1,6 @@ package content.minigame.barbassault.arena.scenery +import content.minigame.barbassault.arena.BaHornSystem import core.api.EquipmentSlot import core.api.addItem import core.api.getItemFromEquipment @@ -95,6 +96,7 @@ class ItemMachine: InteractionListener { } //Collector// on(Scenery.COLLECTOR_CONVERTER_21250, IntType.SCENERY, "Convert") { player, _ -> + val bagLevel = BaHornSystem.HornHelper.getCollectorBag(player) if (!hasCape(player, 10557)) return@on true //Items.RED_EGG_10532 @@ -127,7 +129,7 @@ class ItemMachine: InteractionListener { private fun hasAnyVial(player: Player): Boolean { return ALL_HEALER_VAILS.any { player.inventory.contains(it,1) } } - private fun hasCape(player: Player, capeId: Int): Boolean { + fun hasCape(player: Player, capeId: Int): Boolean { return getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == capeId } private enum class DispenserType(val message: String) { diff --git a/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt index fcb4efaea..9fe1de94e 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt @@ -34,12 +34,10 @@ class CurrentTeamInterface : ComponentPlugin() { //the leader might be able to take scroll between rooms? need Proof } } - } fun updateCurrentTeam(player: Player) { val team = player.baSession?.team - for (slotIndex in 0 until BarbTeam.MAX_SLOTS) { val uiSlot = CurrentTeam.team[slotIndex] val partySlot = team?.getSlot(slotIndex) From e179c3eabb64c9ee1cbe94a4f21911665a47f879 Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 28 Jan 2026 09:34:52 -0500 Subject: [PATCH 010/123] "barbass:tut" prep for cains dialog. -dialog suggestion for ryans promise to be preserved as an easter egg. --- .../barbassault/CaptainCainDialogue.kt | 25 ++++++++++++++++++- .../minigame/barbassault/CommanderConnad.kt | 5 ++-- .../barbassault/arena/BarbassaultSession.kt | 6 ++--- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/CaptainCainDialogue.kt b/Server/src/main/content/minigame/barbassault/CaptainCainDialogue.kt index d4b31bc8e..e88228eb2 100644 --- a/Server/src/main/content/minigame/barbassault/CaptainCainDialogue.kt +++ b/Server/src/main/content/minigame/barbassault/CaptainCainDialogue.kt @@ -27,6 +27,7 @@ class CaptainCainDialogue(player: Player? = null) : DialoguePlugin(player) { override fun open(vararg args: Any?): Boolean { npcl(FacialExpression.FRIENDLY, "Hello, there, adventurer. Say, you wouldn't happen to be interested in purchasing a Fighter Torso would you?") stage = 0 + player.setAttribute("barbass:tut", true) return true } @@ -72,4 +73,26 @@ class CaptainCainDialogue(player: Player? = null) : DialoguePlugin(player) { return intArrayOf(NPCs.CAPTAIN_CAIN_5030) } -} \ No newline at end of file +} + +/** + * lets keep the meme of WHEN you were able to buy a torso and ryans promise <3 + * + * dialogoption to -> I heard you could sell me a fighter's torso. + * FacialExpression.HALF_GUILTY, NPC: Sell you a torso? Oh, I couldn’t possibly… , + * I’m only here to teach adventurers the basics. + * + * FacialExpression.ASKING Player: But people say you did… back when Ryan promised Barbarian Assault. + * + * NPC: People say a lot of things. + * I’ve never officially offered anything like that. + * Official operations only started on {RELEASE_DATE} — anything before that is… unofficial. + * + * Player:“The promise was made on $start. Some adventurers even counted — it’s been $days days since then.” + * + * FacialExpression.SUSPICIOUS NPC: I see… the adventurers remember everything...... + * + * FacialExpression.ANNOYED NPC: Fine, keep your rumours. But don’t expect me to give a torso for them. + * Now, back to training!! + * + */ \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/CommanderConnad.kt b/Server/src/main/content/minigame/barbassault/CommanderConnad.kt index 19f26ad0a..df3eebd00 100644 --- a/Server/src/main/content/minigame/barbassault/CommanderConnad.kt +++ b/Server/src/main/content/minigame/barbassault/CommanderConnad.kt @@ -21,14 +21,13 @@ class CommanderConnad(player: Player? = null) : DialoguePlugin(player) { return CommanderConnad(player) } override fun open(vararg args: Any?): Boolean { - //todo check if completed tut with Captain - stage = 5 + val tutComplete = player.getAttribute("barbass:tut", false) + stage = if (tutComplete) 5 else 0 handle(0,0) return true } override fun handle(componentID: Int, buttonID: Int): Boolean { val barbasspoints = player.getBarbPoints() - val displayName = player.name.replaceFirstChar { it.uppercaseChar() } when (stage) { diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index b7847e37e..3cb45f130 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -85,7 +85,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea for (player in team.allPlayers()) { clearLogoutListener(player, "ba-logout") - // player.removeAttribute("ba-session") + player.removeAttribute("ba-session") player.properties.teleportLocation = Location.create(2593, 5264, 0) player.interfaceManager.closeOverlay() } @@ -174,12 +174,12 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea log(this::class.java, Log.FINE, "ENTERED Barbassault Arena") val player = entity as? Player ?: return - // val waveNum = player.getAttribute("barbass:wave", 1) + val waveNum = player.getAttribute("barbass:wave", 1) val wornIconId = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id val interfaceId = getIconInterfaceId(wornIconId ?: -1) interfaceId?.let { - sendMessage(player, "----- Wave: \$waveNum -----") + sendMessage(player, "----- Wave: $waveNum -----") openOverlay(player, it) } From 1213f1683f3a014a860cd9b3bb032373ba6b113f Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 28 Jan 2026 23:21:25 -0500 Subject: [PATCH 011/123] work towards solving "Error loading content: HornListeners" --- .../barbassault/arena/BaHornSystem.kt | 170 +++++++----------- .../barbassault/arena/BarbassaultArena.kt | 44 ----- 2 files changed, 69 insertions(+), 145 deletions(-) delete mode 100644 Server/src/main/content/minigame/barbassault/arena/BarbassaultArena.kt diff --git a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt index 6a547639b..798efdebb 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt @@ -10,9 +10,10 @@ import core.game.node.entity.player.Player import org.rs09.consts.Items class BaHornSystem : InteractionListener { - val ATTACKER_HORNS = intArrayOf(Items.ATTACKER_HORN_10516,Items.ATTACKER_HORN_10517,Items.ATTACKER_HORN_10518,Items.ATTACKER_HORN_10519,Items.ATTACKER_HORN_10520) - val HEALER_HORNS = intArrayOf(Items.HEALER_HORN_10526,Items.HEALER_HORN_10527,Items.HEALER_HORN_10528,Items.HEALER_HORN_10529,Items.HEALER_HORN_10530 ) - val ALL_HORNS = intArrayOf(Items.COLLECTOR_HORN_10560,Items.DEFENDER_HORN_10538) + HEALER_HORNS + ATTACKER_HORNS + + private val ATTACKER_HORNS = intArrayOf( Items.ATTACKER_HORN_10516, Items.ATTACKER_HORN_10517, Items.ATTACKER_HORN_10518, Items.ATTACKER_HORN_10519, Items.ATTACKER_HORN_10520 ) + private val HEALER_HORNS = intArrayOf( Items.HEALER_HORN_10526, Items.HEALER_HORN_10527, Items.HEALER_HORN_10528, Items.HEALER_HORN_10529, Items.HEALER_HORN_10530 ) + private val ALL_HORNS = intArrayOf( Items.COLLECTOR_HORN_10560, Items.DEFENDER_HORN_10538 ) + HEALER_HORNS + ATTACKER_HORNS enum class BaCall(val text: String) { COLLECTOR_RED("Collector: Red Eggs!"), @@ -35,105 +36,70 @@ class BaHornSystem : InteractionListener { } override fun defineListeners() { - on(ALL_HORNS, IntType.ITEM, "Medic") { player, _ -> - sendChat(player,BaCall.MEDIC.text) - //pretty sure there is an emote with this (wave hand, panic face?) - player.baSession?.alertHealers(player) - return@on true + on(ALL_HORNS, IntType.ITEM, "Drop") { player, _ -> sendMessage(player, "I need that!"); false } + + on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-tofu", "Tell-worms", "Tell-meat") { player, _ -> + val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false + val defenderMap = mapOf( + "tell-tofu" to (BarbassaultSession.PoisonFood.TOFU to BaCall.HEALER_TOFU), + "tell-worms" to (BarbassaultSession.PoisonFood.WORMS to BaCall.HEALER_WORMS), + "tell-meat" to (BarbassaultSession.PoisonFood.MEAT to BaCall.HEALER_MEAT) + ) + val pair = defenderMap[optionClicked] ?: return@on false + val food = pair.first + val call = pair.second + sendChat(player, call.text) + player.baSession?.onHornCall(player, food) + true } - on(ALL_HORNS, IntType.ITEM, "Drop") { player, _ -> - sendMessage(player,"I need that!") // not authentic - return@on false + on(ALL_HORNS, IntType.ITEM, "Tell-style1", "Tell-style2", "Tell-style3", "Tell-style4","Tell-red", "Tell-green", "Tell-blue", "Medic") { player, _ -> + val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false + val styleCallMap = mapOf( + "tell-style1" to (BarbassaultSession.AttackerStyle.STYLE_1 to BaCall.ATTACKER_STYLE_1), + "tell-style2" to (BarbassaultSession.AttackerStyle.STYLE_2 to BaCall.ATTACKER_STYLE_2), + "tell-style3" to (BarbassaultSession.AttackerStyle.STYLE_3 to BaCall.ATTACKER_STYLE_3), + "tell-style4" to (BarbassaultSession.AttackerStyle.STYLE_4 to BaCall.ATTACKER_STYLE_4), + "tell-red" to (BarbassaultSession.EggColor.RED to BaCall.COLLECTOR_RED), + "tell-green" to (BarbassaultSession.EggColor.GREEN to BaCall.COLLECTOR_GREEN), + "tell-blue" to (BarbassaultSession.EggColor.BLUE to BaCall.COLLECTOR_BLUE), + "medic" to (null to BaCall.MEDIC) ) + + val pair = styleCallMap[optionClicked] ?: return@on false + val styleOrColor = pair.first + val call = pair.second + + sendChat(player, call.text) + + when (styleOrColor) { + is BarbassaultSession.AttackerStyle -> player.baSession?.onHornCall(player, styleOrColor) + is BarbassaultSession.EggColor -> player.baSession?.onHornCall(player, styleOrColor) + null -> player.baSession?.alertHealers(player) + } + true } - //ATTACKER - on(ATTACKER_HORNS, IntType.ITEM, "Tell-red") { player, _ -> - sendChat(player,BaCall.COLLECTOR_RED.text) - player.baSession?.onHornCall(player,BarbassaultSession.EggColor.RED) - //player.baSession.team.broadcastColl(red) - return@on true - } - on(ATTACKER_HORNS, IntType.ITEM, "Tell-green") { player, _ -> - sendChat(player,BaCall.COLLECTOR_GREEN.text) - player.baSession?.onHornCall(player,BarbassaultSession.EggColor.GREEN) - //player.baSession.team.broadcastColl(green) - return@on true - } - on(ATTACKER_HORNS, IntType.ITEM, "Tell-blue") { player, _ -> - sendChat(player,BaCall.COLLECTOR_BLUE.text) - player.baSession?.onHornCall(player,BarbassaultSession.EggColor.BLUE) - //player.baSession.team.broadcastColl(blue) - return@on true - } - //DEFENDER - on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-tofu") { player, _ -> - sendChat(player,BaCall.HEALER_TOFU.text) - player.baSession?.onHornCall(player,BarbassaultSession.PoisonFood.TOFU) - //player.baSession.team.broadcastDef(tofu) - return@on true - } - on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-worms") { player, _ -> - sendChat(player,BaCall.HEALER_WORMS.text) - player.baSession?.onHornCall(player,BarbassaultSession.PoisonFood.WORMS) - //player.baSession.team.broadcastDef(worms) - return@on true - } - on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-meat") { player, _ -> - sendChat(player,BaCall.HEALER_MEAT.text) - player.baSession?.onHornCall(player,BarbassaultSession.PoisonFood.MEAT) - //player.baSession.team.broadcastDef(meat) - return@on true - } - //COLLECTOR - on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style1") { player, _ -> - sendChat(player,BaCall.ATTACKER_STYLE_1.text) - player.baSession?.onHornCall(player,BarbassaultSession.AttackerStyle.STYLE_1) - return@on true - } - on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style2") { player, _ -> - sendChat(player,BaCall.ATTACKER_STYLE_2.text) - player.baSession?.onHornCall(player, BarbassaultSession.AttackerStyle.STYLE_2) - return@on true - } - on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style3") { player, _ -> - sendChat(player,BaCall.ATTACKER_STYLE_3.text) - player.baSession?.onHornCall(player,BarbassaultSession.AttackerStyle.STYLE_3) - return@on true - } - on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style4") { player, _ -> - sendChat(player,BaCall.ATTACKER_STYLE_4.text) - player.baSession?.onHornCall(player,BarbassaultSession.AttackerStyle.STYLE_4) - return@on true - } - //HEALER - on(HEALER_HORNS, IntType.ITEM, "Tell-tofu") { player, _ -> - sendChat(player,BaCall.DEFENDER_TOFU.text) - player.baSession?.onHornCall(player, BarbassaultSession.LureFood.TOFU) - return@on true - } - on(HEALER_HORNS, IntType.ITEM, "Tell-crackers") { player, _ -> - sendChat(player,BaCall.DEFENDER_CRACKERS.text) - player.baSession?.onHornCall(player, BarbassaultSession.LureFood.CRACKERS) - return@on true - } - on(HEALER_HORNS, IntType.ITEM, "tell-worms") { player, _ -> - sendChat(player,BaCall.DEFENDER_WORMS.text) - player.baSession?.onHornCall(player, BarbassaultSession.LureFood.WORMS) - return@on true + + on(HEALER_HORNS, IntType.ITEM, "Tell-tofu", "Tell-crackers", "Tell-worms") { player, _ -> + val lureMap = mapOf( + "tell-tofu" to (BarbassaultSession.LureFood.TOFU to BaCall.DEFENDER_TOFU), + "tell-crackers" to (BarbassaultSession.LureFood.CRACKERS to BaCall.DEFENDER_CRACKERS), + "tell-worms" to (BarbassaultSession.LureFood.WORMS to BaCall.DEFENDER_WORMS) + ) + val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false + val pair = lureMap[optionClicked] ?: return@on false + val lure = pair.first + val call = pair.second + sendChat(player, call.text) + player.baSession?.onHornCall(player, lure) + true } } + object HornHelper { - fun getAttackerHorn(player: Player): AttackerHorn? { - return AttackerHorn.values().firstOrNull { inInventory(player, it.itemId) } - } - - fun getHealerHorn(player: Player): HealerHorn? { - return HealerHorn.values().firstOrNull { inInventory(player, it.itemId) } - } - - fun getCollectorBag(player: Player): CollectionBag? { - return CollectionBag.values().firstOrNull { inInventory(player, it.itemId) } - } + fun getAttackerHorn(player: Player): AttackerHorn? = AttackerHorn.values().firstOrNull { inInventory(player, it.itemId) } + fun getHealerHorn(player: Player): HealerHorn? = HealerHorn.values().firstOrNull { inInventory(player, it.itemId) } + fun getCollectorBag(player: Player): CollectionBag? = CollectionBag.values().firstOrNull { inInventory(player, it.itemId) } } + enum class AttackerHorn(val itemId: Int) { LEVEL_ONE(Items.ATTACKER_HORN_10516), LEVEL_TWO(Items.ATTACKER_HORN_10517), @@ -146,18 +112,20 @@ class BaHornSystem : InteractionListener { fun fromId(id: Int): AttackerHorn? = map[id] } } + enum class HealerHorn(val itemId: Int, val healAmount: Int) { - LEVEL_ONE(Items.HEALER_HORN_10526, 5), // energy 20% - LEVEL_TWO(Items.HEALER_HORN_10527, 15), // energy 25% - LEVEL_THREE(Items.HEALER_HORN_10528, 20),// energy 30% - LEVEL_FOUR(Items.HEALER_HORN_10529, 25), // energy 35% - LEVEL_FIVE(Items.HEALER_HORN_10530, 35); // energy 40% + LEVEL_ONE(Items.HEALER_HORN_10526, 5), + LEVEL_TWO(Items.HEALER_HORN_10527, 15), + LEVEL_THREE(Items.HEALER_HORN_10528, 20), + LEVEL_FOUR(Items.HEALER_HORN_10529, 25), + LEVEL_FIVE(Items.HEALER_HORN_10530, 35); companion object { private val map = values().associateBy(HealerHorn::itemId) fun fromId(id: Int): HealerHorn? = map[id] } } + enum class CollectionBag(val itemId: Int) { LEVEL_ONE(Items.COLLECTION_BAG_10521), LEVEL_TWO(Items.COLLECTION_BAG_10522), diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultArena.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultArena.kt deleted file mode 100644 index b641fd7f1..000000000 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultArena.kt +++ /dev/null @@ -1,44 +0,0 @@ -package content.minigame.barbassault.arena - -import core.api.MapArea -import core.api.getRegionBorders -import core.game.node.entity.player.Player -import core.game.world.map.build.DynamicRegion -import core.game.world.map.zone.ZoneBorders -import core.game.world.map.zone.ZoneRestriction - -class BarbassaultArena( - private val session: BarbassaultSession -) : MapArea { - - private lateinit var region: DynamicRegion - - fun create() { - region = DynamicRegion.create(BarbassaultGameArea.BA_ARENA.MAIN) - //zone.register(*defineAreaBorders()) - } - - fun spawnPlayers(players: List) { - val base = region.baseLocation - players.forEach { - it.properties.teleportLocation = - base.transform(36, 24, 0) - } - } - - fun destroy() { - //zone.unregister(*defineAreaBorders()) - region.clear() - } - - override fun defineAreaBorders(): Array = - arrayOf(getRegionBorders(7509)) - - override fun getRestrictions(): Array = - arrayOf( - ZoneRestriction.CANNON, - ZoneRestriction.FIRES, - ZoneRestriction.RANDOM_EVENTS, - ZoneRestriction.TELEPORT - ) -} From 0d157b39dd520872b59e6e9e190e5acac3f7efd3 Mon Sep 17 00:00:00 2001 From: Tooze Date: Thu, 29 Jan 2026 16:14:12 -0500 Subject: [PATCH 012/123] HornListener complaint errors gone! --- .../barbassault/arena/BaHornSystem.kt | 100 ++++++++++++------ .../arena/WaveCompleteInterface.kt | 1 + .../arena/monsters/PenanceFighterNPC.kt | 1 + .../barbassault/lobby/BarbassaultLobby.kt | 2 + .../barbassault/lobby/CurrentTeamInterface.kt | 4 +- 5 files changed, 73 insertions(+), 35 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt index 798efdebb..930983898 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt @@ -13,7 +13,7 @@ class BaHornSystem : InteractionListener { private val ATTACKER_HORNS = intArrayOf( Items.ATTACKER_HORN_10516, Items.ATTACKER_HORN_10517, Items.ATTACKER_HORN_10518, Items.ATTACKER_HORN_10519, Items.ATTACKER_HORN_10520 ) private val HEALER_HORNS = intArrayOf( Items.HEALER_HORN_10526, Items.HEALER_HORN_10527, Items.HEALER_HORN_10528, Items.HEALER_HORN_10529, Items.HEALER_HORN_10530 ) - private val ALL_HORNS = intArrayOf( Items.COLLECTOR_HORN_10560, Items.DEFENDER_HORN_10538 ) + HEALER_HORNS + ATTACKER_HORNS + // private val ALL_HORNS = intArrayOf( Items.COLLECTOR_HORN_10560, Items.DEFENDER_HORN_10538 ) + HEALER_HORNS + ATTACKER_HORNS enum class BaCall(val text: String) { COLLECTOR_RED("Collector: Red Eggs!"), @@ -36,65 +36,99 @@ class BaHornSystem : InteractionListener { } override fun defineListeners() { - on(ALL_HORNS, IntType.ITEM, "Drop") { player, _ -> sendMessage(player, "I need that!"); false } - on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-tofu", "Tell-worms", "Tell-meat") { player, _ -> + on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-tofu", "Tell-worms", "Tell-meat","Medic", "Drop") { player, _ -> val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false + if (optionClicked == "drop") { sendMessage(player, "I need that!"); return@on false } + val defenderMap = mapOf( "tell-tofu" to (BarbassaultSession.PoisonFood.TOFU to BaCall.HEALER_TOFU), "tell-worms" to (BarbassaultSession.PoisonFood.WORMS to BaCall.HEALER_WORMS), - "tell-meat" to (BarbassaultSession.PoisonFood.MEAT to BaCall.HEALER_MEAT) - ) + "tell-meat" to (BarbassaultSession.PoisonFood.MEAT to BaCall.HEALER_MEAT), + "medic" to (null to BaCall.MEDIC) ) + val pair = defenderMap[optionClicked] ?: return@on false val food = pair.first val call = pair.second - sendChat(player, call.text) - player.baSession?.onHornCall(player, food) - true - } - on(ALL_HORNS, IntType.ITEM, "Tell-style1", "Tell-style2", "Tell-style3", "Tell-style4","Tell-red", "Tell-green", "Tell-blue", "Medic") { player, _ -> - val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false - val styleCallMap = mapOf( - "tell-style1" to (BarbassaultSession.AttackerStyle.STYLE_1 to BaCall.ATTACKER_STYLE_1), - "tell-style2" to (BarbassaultSession.AttackerStyle.STYLE_2 to BaCall.ATTACKER_STYLE_2), - "tell-style3" to (BarbassaultSession.AttackerStyle.STYLE_3 to BaCall.ATTACKER_STYLE_3), - "tell-style4" to (BarbassaultSession.AttackerStyle.STYLE_4 to BaCall.ATTACKER_STYLE_4), - "tell-red" to (BarbassaultSession.EggColor.RED to BaCall.COLLECTOR_RED), - "tell-green" to (BarbassaultSession.EggColor.GREEN to BaCall.COLLECTOR_GREEN), - "tell-blue" to (BarbassaultSession.EggColor.BLUE to BaCall.COLLECTOR_BLUE), - "medic" to (null to BaCall.MEDIC) ) - - val pair = styleCallMap[optionClicked] ?: return@on false - val styleOrColor = pair.first - val call = pair.second sendChat(player, call.text) - - when (styleOrColor) { - is BarbassaultSession.AttackerStyle -> player.baSession?.onHornCall(player, styleOrColor) - is BarbassaultSession.EggColor -> player.baSession?.onHornCall(player, styleOrColor) + when (food) { + is BarbassaultSession.PoisonFood -> player.baSession?.onHornCall(player, food) null -> player.baSession?.alertHealers(player) } true } - on(HEALER_HORNS, IntType.ITEM, "Tell-tofu", "Tell-crackers", "Tell-worms") { player, _ -> + on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style1", "Tell-style2", "Tell-style3", "Tell-style4","Medic" , "Drop") { player, _ -> + val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false + if (optionClicked == "drop") { sendMessage(player, "I need that!"); return@on false } + + val styleCallMap = mapOf( + "tell-style1" to (BarbassaultSession.AttackerStyle.STYLE_1 to BaCall.ATTACKER_STYLE_1), + "tell-style2" to (BarbassaultSession.AttackerStyle.STYLE_2 to BaCall.ATTACKER_STYLE_2), + "tell-style3" to (BarbassaultSession.AttackerStyle.STYLE_3 to BaCall.ATTACKER_STYLE_3), + "tell-style4" to (BarbassaultSession.AttackerStyle.STYLE_4 to BaCall.ATTACKER_STYLE_4), + "medic" to (null to BaCall.MEDIC) ) + + val pair = styleCallMap[optionClicked] ?: return@on false + val style = pair.first + val call = pair.second + + sendChat(player, call.text) + when (style) { + is BarbassaultSession.AttackerStyle -> player.baSession?.onHornCall(player, style) + null-> player.baSession?.alertHealers(player) + } + true + } + on(ATTACKER_HORNS, IntType.ITEM, "Tell-red", "Tell-green", "Tell-blue", "Medic", "Drop") { player, _ -> + val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false + if (optionClicked == "drop") { sendMessage(player, "I need that!"); return@on false } + + val collectorMap = mapOf( + "tell-red" to (BarbassaultSession.EggColor.RED to BaCall.COLLECTOR_RED), + "tell-green" to (BarbassaultSession.EggColor.GREEN to BaCall.COLLECTOR_GREEN), + "tell-blue" to (BarbassaultSession.EggColor.BLUE to BaCall.COLLECTOR_BLUE), + "medic" to (null to BaCall.MEDIC) ) + + val pair = collectorMap[optionClicked] ?: return@on false + val color = pair.first + val call = pair.second + + sendChat(player, call.text) + when (color) { + is BarbassaultSession.EggColor -> player.baSession?.onHornCall(player, color) + null -> player.baSession?.alertHealers(player) + } + true + } + + on(HEALER_HORNS, IntType.ITEM, "Tell-tofu", "Tell-crackers", "Tell-worms","Medic", "Drop") { player, _ -> + val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false + if (optionClicked == "drop") { sendMessage(player, "I need that!"); return@on false } + val lureMap = mapOf( "tell-tofu" to (BarbassaultSession.LureFood.TOFU to BaCall.DEFENDER_TOFU), "tell-crackers" to (BarbassaultSession.LureFood.CRACKERS to BaCall.DEFENDER_CRACKERS), - "tell-worms" to (BarbassaultSession.LureFood.WORMS to BaCall.DEFENDER_WORMS) - ) - val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false + "tell-worms" to (BarbassaultSession.LureFood.WORMS to BaCall.DEFENDER_WORMS), + "medic" to (null to BaCall.MEDIC) ) + val pair = lureMap[optionClicked] ?: return@on false val lure = pair.first val call = pair.second + sendChat(player, call.text) - player.baSession?.onHornCall(player, lure) + when (lure) { + is BarbassaultSession.LureFood -> player.baSession?.onHornCall(player, lure) + null -> player.baSession?.alertHealers(player) + } true } + } object HornHelper { + //I should set a value in my players session instead of scanning the inventory every time for a horn. fun getAttackerHorn(player: Player): AttackerHorn? = AttackerHorn.values().firstOrNull { inInventory(player, it.itemId) } fun getHealerHorn(player: Player): HealerHorn? = HealerHorn.values().firstOrNull { inInventory(player, it.itemId) } fun getCollectorBag(player: Player): CollectionBag? = CollectionBag.values().firstOrNull { inInventory(player, it.itemId) } diff --git a/Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt b/Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt index ddf416ea8..ca88ba9f8 100644 --- a/Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt +++ b/Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt @@ -22,6 +22,7 @@ class WaveCompleteInterface { advance break down --> https://youtu.be/OjkLXOQVWEQ?t=113 + https://www.youtube.com/watch?v=gpSmUZcaMwY diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt index 5c3f9ade5..ee678d5e3 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt @@ -35,6 +35,7 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { } override fun beforeDamageReceived(self: NPC, attacker: Entity, state: BattleState) { val firstBefore = state.estimatedHit + //I should set a value in my players session instead of scanning the inventory every time for a horn. state.estimatedHit = firstBefore + (BaHornSystem.HornHelper.getAttackerHorn(attacker as Player)?.ordinal?.plus(1) ?: 0) +1 } diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt index 8bbac85c6..b58bf681e 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt @@ -166,6 +166,8 @@ class BarbassaultLobby : InteractionListener, MapArea { } on(Scenery.SCROLL_TABLE_20149, IntType.SCENERY, "Take-from") { player, _ -> + //https://www.youtube.com/watch?v=bFw2os1aRvk + // okay we dont create a session untill we write our name on the scroll. if(!player.inventory.containsItem(Item(Items.SCROLL_10512, 1)) ) { //do you wish to take a scroll? yes ? no sendDialogueOptions(player, "Take a recruitment scroll?", "Yes", "No") diff --git a/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt index 9fe1de94e..cec28ed65 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt @@ -30,8 +30,8 @@ class CurrentTeamInterface : ComponentPlugin() { super.open(player, component) player ?: return if(player.inventory.containsItem(Item(Items.SCROLL_10512, 1)) ) { - setInterfaceText(player, player.username, CurrentTeam.ID, CurrentTeam.team[0].name) - //the leader might be able to take scroll between rooms? need Proof + // setInterfaceText(player, player.username, CurrentTeam.ID, CurrentTeam.team[0].name) + //we dont become leaders if we own a scroll , we become one when we write our name on scroll. } } } From ee1793dfafe977daefef24c1ea186d47c9a2708a Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 30 Jan 2026 16:42:54 -0500 Subject: [PATCH 013/123] Polishing invite interfaces --- .../minigame/barbassault/Barbassault.kt | 2 +- .../barbassault/arena/BarbassaultGameArea.kt | 2 + .../barbassault/lobby/AcceptRoleInterface.kt | 76 ++++++++++++++----- .../minigame/barbassault/lobby/BarbTeam.kt | 26 ++++--- .../barbassault/lobby/RoleSelectInterface.kt | 16 ++-- 5 files changed, 83 insertions(+), 39 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/Barbassault.kt b/Server/src/main/content/minigame/barbassault/Barbassault.kt index d30994e73..a1ed33e0e 100644 --- a/Server/src/main/content/minigame/barbassault/Barbassault.kt +++ b/Server/src/main/content/minigame/barbassault/Barbassault.kt @@ -2,7 +2,7 @@ package content.minigame.barbassault import core.game.node.entity.player.Player -enum class BarbRole { ATTACKER, DEFENDER, COLLECTOR, HEALER } +enum class BarbRole { ATTACKER, COLLECTOR,DEFENDER, HEALER } data class BarbAssaultPoints( val atk: Int = 0, val col: Int = 0, val def: Int = 0, val heal: Int = 0) { val total: Int get() = atk + col + def + heal fun hasEnough(cost: BarbAssaultPoints): Boolean = atk >= cost.atk && col >= cost.col && def >= cost.def && heal >= cost.heal diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 874659c47..f6837483b 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -5,6 +5,7 @@ import content.minigame.barbassault.BarbassaultTut import content.minigame.barbassault.BarbassaultTut.Companion.TutorialItemSpawn import content.minigame.barbassault.arena.BaHornSystem.HornHelper.getHealerHorn import content.minigame.barbassault.arena.scenery.DefenderTrap +import content.minigame.barbassault.getBarbLevels import content.minigame.barbassault.lobby.baSession import core.api.* import core.game.global.action.DropListener @@ -150,6 +151,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { } on(Scenery.HEALER_SPRING_20150, IntType.SCENERY, "Take-from") { player, _ -> + val healLevel = player.getBarbLevels().heal //emote 5400 /* HEALING_VIAL_10546 -- empty HEALING_VIAL1_10545 // 1 diff --git a/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt index 54f9514d7..2a3f45c14 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt @@ -2,6 +2,7 @@ package content.minigame.barbassault.lobby import content.minigame.barbassault.BarbRole import content.minigame.barbassault.lobby.BarbTeamManager.abandonTeam +import content.minigame.barbassault.lobby.BarbTeamManager.joinTeam import content.minigame.barbassault.lobby.CurrentTeam.ROLE_MODEL_MAP import content.minigame.barbassault.lobby.CurrentTeam.modelZoom import core.api.closeInterface @@ -17,6 +18,7 @@ import core.plugin.Plugin @Initializable class AcceptRoleInterface : ComponentPlugin() { + private var waitingStatus = true override fun newInstance(arg: Any?): Plugin { ComponentDefinition.forId(AcceptRole.ID).plugin = this return this @@ -59,35 +61,67 @@ class AcceptRoleInterface : ComponentPlugin() { } } } -} -private fun handleAccept(player: Player?) { - sendMessage(player!!,"Accepted Clicked") - return -} -private fun handleDecline(player: Player?) { - if (player == null) return - closeInterface(player) - val leader = player.baSession?.team?.getLeader()?.player - if (leader != null && leader != player) { + private fun handleAccept(player: Player?) { + val team = player?.baSession?.team + val recruit = team?.recruit + val selectedRole = recruit?.role ?: return + val roleName = selectedRole.name.lowercase().replaceFirstChar { it.uppercase() } + val rPlayer = recruit.player + if (!recruit.accept) { + sendMessage(player,"the other player hasn't confirmed their role yet.") + return + } + if (joinTeam(rPlayer, selectedRole)) { + rPlayer.sendMessage("You have joined as ${roleName}.") + team.recruit = null + closeInterface(player) + } + return + } + private fun handleDecline(player: Player?) { + closeInterface(player!!) + /** + val leader = player.baSession?.team?.getLeader()?.player + if (leader != null && leader != player) { closeInterface(leader) + }**/ + } + private fun handleRemove(player: Player, slotIndex: Int){ + val team = player.baSession?.team + val follower = team?.getSlot(slotIndex)?.player ?: return + val uiSlot = AcceptRole.team[slotIndex] + + sendMessage(player,"You removed the person from the team.") + setInterfaceText(player, AcceptRole.defaultText, AcceptRole.ID,uiSlot.name ) + setInterfaceText(player, AcceptRole.defaultText, AcceptRole.ID,uiSlot.role ) + setInterfaceText(player, "0", AcceptRole.ID,uiSlot.wave ) + + abandonTeam(follower) + } + + companion object { + fun updateRecruitData(player: Player?){ + val team = player?.baSession?.team + val leader = team?.getLeader()?.player ?: return + val recruit = team.recruit + val displayName = recruit?.role?.name?.lowercase()?.replaceFirstChar { it.uppercase() } ?: "Unknown" + val level = recruit?.roleLevel() + setInterfaceText(leader!!, displayName, AcceptRole.ID,AcceptRole.Status.selectedRole ) + setInterfaceText(leader, level.toString(), AcceptRole.ID,AcceptRole.Status.levelRole ) + } + fun resetWaitingStatus(player: Player?){ + val leader = player?.baSession?.team?.getLeader()?.player + setInterfaceText(leader!!, AcceptRole.waiting, AcceptRole.ID,AcceptRole.Status.selectedRole ) + setInterfaceText(leader, AcceptRole.waiting, AcceptRole.ID,AcceptRole.Status.levelRole ) + } } } -private fun handleRemove(player: Player, slotIndex: Int){ - val team = player.baSession?.team - val follower = team?.getSlot(slotIndex)?.player ?: return - val uiSlot = AcceptRole.team[slotIndex] - sendMessage(player,"You removed the person from the team.") - setInterfaceText(player, AcceptRole.defaultText, AcceptRole.ID,uiSlot.name ) - setInterfaceText(player, AcceptRole.defaultText, AcceptRole.ID,uiSlot.role ) - setInterfaceText(player, "0", AcceptRole.ID,uiSlot.wave ) - - abandonTeam(follower) -} object AcceptRole { const val ID = 492 const val defaultText = "none set" + const val waiting = "Waiting ..." const val AcceptButtonText = 4 const val DeclineButtonText = 2 const val AcceptButton = 35 diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt index a7cc43719..7b215bfbb 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt @@ -4,6 +4,7 @@ import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultActivity import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.BarbassaultState +import content.minigame.barbassault.getBarbLevels import core.api.clearLogoutListener import core.api.sendMessage import core.game.node.entity.player.Player @@ -37,7 +38,16 @@ var Player.team: BarbTeam? }*/ data class PartySlot( val index: Int, val player: Player, var role: BarbRole? = null ) -data class PendingRecruit( var player: Player, var role: BarbRole? = null ) +data class PendingRecruit( var player: Player, var role: BarbRole? = null,var accept:Boolean = false ) { + fun roleLevel(): Int = when (role) { + BarbRole.ATTACKER -> player.getBarbLevels().atk + BarbRole.COLLECTOR -> player.getBarbLevels().col + BarbRole.DEFENDER -> player.getBarbLevels().def + BarbRole.HEALER -> player.getBarbLevels().heal + null -> 1 + } +} + private val PartySpawns = arrayOf(30 to 18, 29 to 17, 31 to 17, 28 to 16, 32 to 16) class BarbTeam(val session: BarbassaultSession, leader: Player) { @@ -164,7 +174,7 @@ object BarbTeamManager { } fun disbandTeam(session: BarbassaultSession) { - val team = session.team ?: return + val team = session.team team.allPlayers().forEach { it.sendMessage("Your leader has left the room and therefore cleared the team!") @@ -179,7 +189,7 @@ object BarbTeamManager { fun joinTeam(player: Player, role: BarbRole): Boolean { val session = player.baSession ?: return false - val team = session.team ?: return false + val team = session.team team.recruit = null if (!team.addPlayer(player)) { player.sendMessage("That party is full.") @@ -196,7 +206,7 @@ object BarbTeamManager { fun abandonTeam(player: Player) { val session = player.baSession ?: return - val team = session.team ?: return + val team = session.team if (team.isLeader(player)) { disbandTeam(session) return @@ -212,14 +222,6 @@ object BarbTeamManager { updateCurrentTeam(it) } } - fun acceptInvite(player: Player, role: BarbRole) { - val session = player.baSession ?: return - val team = session.team ?: return - val recruit = team.recruit ?: return - if (recruit.player != player) return - joinTeam(player, role) - team.recruit = null - } } //Leader leaving room and causing disband "Your leader has left the room and therefore cleared the team!" diff --git a/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt index bb95c010c..b5ea36bfe 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt @@ -51,14 +51,17 @@ class RoleSelectInterface : ComponentPlugin() { if (player == null) return true val team = player.baSession?.team; val pending = team?.recruit ?: return true + var waitingSelected: BarbRole? = null when (button) { SelectRole.AcceptButton, SelectRole.AcceptButtonText -> { val selectedRole = pending.role + val selectedRoleName = selectedRole?.name?.lowercase()?.replaceFirstChar { it.uppercase() } if (selectedRole != null) { - joinTeam(pending.player, selectedRole) - player.sendMessage("You have joined as ${selectedRole.name}.") - team.recruit = null + waitingSelected = selectedRole + AcceptRoleInterface.updateRecruitData(player) + if (!pending.accept) {team.getLeader()?.player?.sendMessages("The applicant has chosen $selectedRoleName")} + pending.accept = true } else { player.sendMessage("You must select a role first!") } @@ -73,10 +76,13 @@ class RoleSelectInterface : ComponentPlugin() { val clickedSelectRole = buttonRoleMap[button] if (clickedSelectRole != null && clickedSelectRole.isActive) { pending.role = selectRoleToBarbRole[clickedSelectRole] + if (pending.role != waitingSelected ) { + pending.accept = false + AcceptRoleInterface.resetWaitingStatus(player) + } - val displayName = pending.role?.name ?: "Unknown" + val displayName = pending.role?.name?.capitalizeWords() ?: "Unknown" setInterfaceText(player, displayName, SelectRole.ID, SelectRole.Status.CurrentRole) - selectedButton = button } else { } From 6496b727393818a755683495d3ceaa9377a7f062 Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 30 Jan 2026 16:54:25 -0500 Subject: [PATCH 014/123] added some missing text --- .../minigame/barbassault/lobby/AcceptRoleInterface.kt | 9 +++++---- .../minigame/barbassault/lobby/RoleSelectInterface.kt | 10 +++++----- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt index 2a3f45c14..a11f0e96f 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt @@ -64,13 +64,14 @@ class AcceptRoleInterface : ComponentPlugin() { private fun handleAccept(player: Player?) { val team = player?.baSession?.team val recruit = team?.recruit + if (!recruit?.accept!!) { + sendMessage(player,"The other player hasn't confirmed their role yet.") + return + } + val selectedRole = recruit?.role ?: return val roleName = selectedRole.name.lowercase().replaceFirstChar { it.uppercase() } val rPlayer = recruit.player - if (!recruit.accept) { - sendMessage(player,"the other player hasn't confirmed their role yet.") - return - } if (joinTeam(rPlayer, selectedRole)) { rPlayer.sendMessage("You have joined as ${roleName}.") team.recruit = null diff --git a/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt index b5ea36bfe..034ad8cf5 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt @@ -121,12 +121,12 @@ private fun handleAccept(player: Player){ return } private fun handleDecline(player: Player) { - closeInterface(player) val leader = player.baSession?.team?.getLeader()?.player - if (leader != null && leader != player) { - closeInterface(leader) - sendMessage(leader, "The applicant declined your offer.") - } + sendMessage(leader!!, "The applicant declined your offer.") + closeInterface(player) + + + } From d5f7f00a846739b102c671960a6053d6e3063fb0 Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 30 Jan 2026 23:57:48 +0000 Subject: [PATCH 015/123] Edit BarbassaultSession.kt --- .../minigame/barbassault/arena/BarbassaultSession.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 3cb45f130..23ac4462c 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -317,10 +317,10 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea val roleCalls: MutableMap> = mutableMapOf() interface HasUIText { val ui: String } enum class AttackerStyle(val top: String, val bottom: String) : HasUIText { - STYLE_1("Controlled/","Bronze/Wind"), - STYLE_2("Accurate/","Iron/Water"), - STYLE_3("Aggressive/","Steel/Earth"), - STYLE_4("Defensive/","Mithril/Fire"); + Style_1("Controlled/","Bronze/Wind"), + Style_2("Accurate/","Iron/Water"), + Style_3("Aggressive/","Steel/Earth"), + Style_4("Defensive/","Mithril/Fire"); override val ui: String get() = top } enum class EggColor(override val ui: String): HasUIText { RED("Red Eggs"), GREEN("Green Eggs"),BLUE("Blue Eggs") } From 5d21ec1660177bf20e38fc6a04eda0445c2acb8a Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 30 Jan 2026 19:34:28 -0500 Subject: [PATCH 016/123] fixing small things --- .../content/minigame/barbassault/arena/BaHornSystem.kt | 8 ++++---- .../minigame/barbassault/arena/BarbassaultSession.kt | 7 ++++++- .../main/content/minigame/barbassault/lobby/BarbTeam.kt | 3 ++- .../minigame/barbassault/lobby/RoleSelectInterface.kt | 3 --- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt index 930983898..1edaa3e76 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt @@ -64,10 +64,10 @@ class BaHornSystem : InteractionListener { if (optionClicked == "drop") { sendMessage(player, "I need that!"); return@on false } val styleCallMap = mapOf( - "tell-style1" to (BarbassaultSession.AttackerStyle.STYLE_1 to BaCall.ATTACKER_STYLE_1), - "tell-style2" to (BarbassaultSession.AttackerStyle.STYLE_2 to BaCall.ATTACKER_STYLE_2), - "tell-style3" to (BarbassaultSession.AttackerStyle.STYLE_3 to BaCall.ATTACKER_STYLE_3), - "tell-style4" to (BarbassaultSession.AttackerStyle.STYLE_4 to BaCall.ATTACKER_STYLE_4), + "tell-style1" to (BarbassaultSession.AttackerStyle.Style_1 to BaCall.ATTACKER_STYLE_1), + "tell-style2" to (BarbassaultSession.AttackerStyle.Style_2 to BaCall.ATTACKER_STYLE_2), + "tell-style3" to (BarbassaultSession.AttackerStyle.Style_3 to BaCall.ATTACKER_STYLE_3), + "tell-style4" to (BarbassaultSession.AttackerStyle.Style_4 to BaCall.ATTACKER_STYLE_4), "medic" to (null to BaCall.MEDIC) ) val pair = styleCallMap[optionClicked] ?: return@on false diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 23ac4462c..36ff7712d 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -59,7 +59,6 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea fun beginStartingPhase() { if (state != BarbassaultState.PARTY_CREATION) return - state = BarbassaultState.STARTING createArena() startCountdown() @@ -245,23 +244,29 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea fun updateRoleUI() { team.allPlayers().forEach { player -> + val wave = team.wave.toString() val role = team.getRoleForPlayer(player) ?: return@forEach val call = roleCalls[role] ?: return@forEach when (role) { BarbRole.ATTACKER -> { + //make sure wave is using wring childid. + setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_ATT_485, 1) updateAttackerUI(player, call as AttackerCall) setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_ATT_485, 7) } BarbRole.COLLECTOR -> { + setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_ATT_485, 1) updateOtherRoleUI(player, call, Components.BARBASSAULT_OVER_COL_486, 4) setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_COL_486, 6) } BarbRole.DEFENDER -> { + setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_ATT_485, 1) updateOtherRoleUI(player, call, Components.BARBASSAULT_OVER_DEF_487, 3) setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_DEF_487, 5) } BarbRole.HEALER -> { + setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_ATT_485, 1) updateOtherRoleUI(player, call, Components.BARBASSAULT_OVER_HEAL_488, 31) setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_HEAL_488, 33) } diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt index 7b215bfbb..eec927186 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt @@ -55,12 +55,13 @@ class BarbTeam(val session: BarbassaultSession, leader: Player) { const val MAX_SLOTS = 5 const val LEADER_SLOT = 0 } - + var wave = 1 var recruit: PendingRecruit? = null private val slots: Array = arrayOfNulls(MAX_SLOTS) init { slots[LEADER_SLOT] = PartySlot(LEADER_SLOT, leader) + wave = leader.getAttribute("barbass:wave", 1) } fun slotOf(player: Player): Int = diff --git a/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt index 034ad8cf5..4956a4a5c 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt @@ -124,9 +124,6 @@ private fun handleDecline(player: Player) { val leader = player.baSession?.team?.getLeader()?.player sendMessage(leader!!, "The applicant declined your offer.") closeInterface(player) - - - } From cac879eb4f9419293998d50dab7460de3d2e80b3 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 31 Jan 2026 14:50:06 -0500 Subject: [PATCH 017/123] Horn of glory! --- .../barbassault/arena/BaHornSystem.kt | 8 +- .../barbassault/arena/BarbassaultGameArea.kt | 18 +-- .../barbassault/arena/BarbassaultSession.kt | 44 +++--- .../barbassault/arena/scenery/HornOfGlory.kt | 132 +++++++++++------- .../barbassault/arena/scenery/ItemMachine.kt | 2 +- 5 files changed, 117 insertions(+), 87 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt index 1edaa3e76..930983898 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt @@ -64,10 +64,10 @@ class BaHornSystem : InteractionListener { if (optionClicked == "drop") { sendMessage(player, "I need that!"); return@on false } val styleCallMap = mapOf( - "tell-style1" to (BarbassaultSession.AttackerStyle.Style_1 to BaCall.ATTACKER_STYLE_1), - "tell-style2" to (BarbassaultSession.AttackerStyle.Style_2 to BaCall.ATTACKER_STYLE_2), - "tell-style3" to (BarbassaultSession.AttackerStyle.Style_3 to BaCall.ATTACKER_STYLE_3), - "tell-style4" to (BarbassaultSession.AttackerStyle.Style_4 to BaCall.ATTACKER_STYLE_4), + "tell-style1" to (BarbassaultSession.AttackerStyle.STYLE_1 to BaCall.ATTACKER_STYLE_1), + "tell-style2" to (BarbassaultSession.AttackerStyle.STYLE_2 to BaCall.ATTACKER_STYLE_2), + "tell-style3" to (BarbassaultSession.AttackerStyle.STYLE_3 to BaCall.ATTACKER_STYLE_3), + "tell-style4" to (BarbassaultSession.AttackerStyle.STYLE_4 to BaCall.ATTACKER_STYLE_4), "medic" to (null to BaCall.MEDIC) ) val pair = styleCallMap[optionClicked] ?: return@on false diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index f6837483b..97ff827fc 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -1,14 +1,10 @@ package content.minigame.barbassault.arena -import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultTut -import content.minigame.barbassault.BarbassaultTut.Companion.TutorialItemSpawn import content.minigame.barbassault.arena.BaHornSystem.HornHelper.getHealerHorn -import content.minigame.barbassault.arena.scenery.DefenderTrap import content.minigame.barbassault.getBarbLevels import content.minigame.barbassault.lobby.baSession import core.api.* -import core.game.global.action.DropListener import core.game.interaction.IntType import core.game.interaction.InteractionListener @@ -19,7 +15,6 @@ import core.game.node.entity.player.Player import core.game.node.entity.player.info.LogType import core.game.node.entity.player.info.PlayerMonitor import core.game.node.entity.player.info.login.PlayerParser -import core.game.node.item.GroundItem import core.game.node.item.GroundItemManager import core.game.node.item.Item import core.game.system.task.Pulse @@ -28,10 +23,7 @@ import core.game.world.map.Direction import core.game.world.map.Location import core.game.world.map.zone.ZoneBorders import core.game.world.update.flag.context.Animation -import core.game.worldevents.holiday.easter.EasterEvent.Companion.EGG_SPAWN_TIME -import core.game.worldevents.holiday.easter.EasterEvent.Companion.eggs import core.tools.Log -import org.rs09.consts.Components import org.rs09.consts.Items import org.rs09.consts.Scenery @@ -63,14 +55,14 @@ class BarbassaultGameArea : InteractionListener, MapArea { arenaItems(Items.LOGS_11760,30,46,0), arenaItems(Items.LOGS_11760,29,47,0) ) - enum class pennanceNPC { runner, healer, fighter, ranger } + enum class pennanceNPC { RUNNER, HEALER, FIGHTER, RANGER } data class npcSpawnLoc(val tunnel:pennanceNPC, val x: Int,val y: Int,val z: Int,val direction: Direction) val npcSpawns: List = listOf( - npcSpawnLoc(pennanceNPC.runner,42,45,0,Direction.SOUTH), - npcSpawnLoc(pennanceNPC.healer,36,46,0,Direction.SOUTH), + npcSpawnLoc(pennanceNPC.RUNNER,42,45,0,Direction.SOUTH), + npcSpawnLoc(pennanceNPC.HEALER,36,46,0,Direction.SOUTH), - npcSpawnLoc(pennanceNPC.fighter,24,46,0,Direction.SOUTH), - npcSpawnLoc(pennanceNPC.ranger,36,46,0,Direction.SOUTH), + npcSpawnLoc(pennanceNPC.FIGHTER,24,46,0,Direction.SOUTH), + npcSpawnLoc(pennanceNPC.RANGER,36,46,0,Direction.SOUTH), ) override fun defineAreaBorders(): Array { diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 36ff7712d..78e1eab02 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -2,33 +2,24 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultActivity -import content.minigame.barbassault.BarbassaultTut +import content.minigame.barbassault.arena.scenery.GloryHorn import content.minigame.barbassault.lobby.BarbTeam -import content.minigame.barbassault.lobby.BarbTeamManager -import content.minigame.barbassault.lobby.SelectRole import content.minigame.barbassault.lobby.baSession import core.api.* import core.game.node.entity.Entity -import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.map.build.DynamicRegion -import core.game.world.map.zone.MapZone -import core.game.world.map.zone.Zone import core.game.world.map.zone.ZoneBorders import core.game.world.map.zone.ZoneRestriction import core.tools.Log import core.tools.secondsToTicks import core.tools.ticksToSeconds import org.rs09.consts.Components -import org.rs09.consts.NPCs -import org.rs09.consts.Music import org.rs09.consts.Music.ASSAULT_AND_BATTERY_604 -import org.rs09.consts.Music.PIRATES_OF_PENANCE_211 -import kotlin.math.roundToInt /* Player @@ -248,26 +239,27 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea val role = team.getRoleForPlayer(player) ?: return@forEach val call = roleCalls[role] ?: return@forEach + when (role) { BarbRole.ATTACKER -> { //make sure wave is using wring childid. - setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_ATT_485, 1) updateAttackerUI(player, call as AttackerCall) + setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_ATT_485, 2) setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_ATT_485, 7) } BarbRole.COLLECTOR -> { - setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_ATT_485, 1) updateOtherRoleUI(player, call, Components.BARBASSAULT_OVER_COL_486, 4) + setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_COL_486, 2) setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_COL_486, 6) } BarbRole.DEFENDER -> { - setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_ATT_485, 1) updateOtherRoleUI(player, call, Components.BARBASSAULT_OVER_DEF_487, 3) + setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_DEF_487, 1) setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_DEF_487, 5) } BarbRole.HEALER -> { - setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_ATT_485, 1) updateOtherRoleUI(player, call, Components.BARBASSAULT_OVER_HEAL_488, 31) + setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_HEAL_488, 29) setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_HEAL_488, 33) } } @@ -294,7 +286,23 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea roleCalls[BarbRole.HEALER]?.toCall = roleCalls[BarbRole.DEFENDER]?.required roleCalls[BarbRole.DEFENDER]?.toCall = roleCalls[BarbRole.HEALER]?.required updateRoleUI() + updateGloryHornUI() } + + fun updateGloryHornUI(){ + team.allPlayers().forEach { player -> + val atkCallText = (roleCalls[BarbRole.COLLECTOR]?.toCall as? AttackerStyle)?.let { "${it.top} ${it.bottom}" } ?: GloryHorn.CallOut.defaultText + val colCallText = (roleCalls[BarbRole.ATTACKER]?.toCall as? HasUIText)?.ui ?: GloryHorn.CallOut.defaultText + val defCallText = (roleCalls[BarbRole.HEALER]?.toCall as? HasUIText)?.ui ?: GloryHorn.CallOut.defaultText + val healCallText = (roleCalls[BarbRole.DEFENDER]?.toCall as? HasUIText)?.ui ?: GloryHorn.CallOut.defaultText + + setInterfaceText(player, atkCallText, Components.BARBASSAULT_HORN_484, GloryHorn.CallOut.attacker) + setInterfaceText(player, colCallText, Components.BARBASSAULT_HORN_484, GloryHorn.CallOut.collector) + setInterfaceText(player, defCallText, Components.BARBASSAULT_HORN_484, GloryHorn.CallOut.defender) + setInterfaceText(player, healCallText, Components.BARBASSAULT_HORN_484, GloryHorn.CallOut.healer) + } + } + private val hornTargets = mapOf( BarbRole.COLLECTOR to BarbRole.ATTACKER, BarbRole.ATTACKER to BarbRole.COLLECTOR , @@ -322,10 +330,10 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea val roleCalls: MutableMap> = mutableMapOf() interface HasUIText { val ui: String } enum class AttackerStyle(val top: String, val bottom: String) : HasUIText { - Style_1("Controlled/","Bronze/Wind"), - Style_2("Accurate/","Iron/Water"), - Style_3("Aggressive/","Steel/Earth"), - Style_4("Defensive/","Mithril/Fire"); + STYLE_1("Controlled/","Bronze/Wind"), + STYLE_2("Accurate/","Iron/Water"), + STYLE_3("Aggressive/","Steel/Earth"), + STYLE_4("Defensive/","Mithril/Fire"); override val ui: String get() = top } enum class EggColor(override val ui: String): HasUIText { RED("Red Eggs"), GREEN("Green Eggs"),BLUE("Blue Eggs") } diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt index 8d8e78b36..408081285 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt @@ -1,82 +1,112 @@ package content.minigame.barbassault.arena.scenery -import core.api.sendMessage +import content.minigame.barbassault.arena.BaHornSystem.BaCall +import content.minigame.barbassault.arena.BarbassaultSession +import content.minigame.barbassault.lobby.baSession +import core.api.* import core.game.component.Component import core.game.component.ComponentDefinition import core.game.component.ComponentPlugin import core.game.interaction.IntType import core.game.interaction.InteractionListener import core.game.node.entity.player.Player +import core.game.system.task.Pulse +import core.game.world.GameWorld +import core.game.world.update.flag.context.Animation +import core.plugin.Initializable import core.plugin.Plugin -import org.rs09.consts.Components import org.rs09.consts.Scenery +@Initializable class HornOfGlory : ComponentPlugin() , InteractionListener { - companion object { - val QUEEN_ARRIVE = "The Queen has arrived and you can no longer use the horn of glory!" - //attacker - val CONTROLED_BRONZE_WIND = 0 - val ACCURATE_IRON_WATER = 1 - val AGGRISSIVE_STEEL_EARTH = 2 - val DEFENSIVE_MITHRIL_FIRE = 3 - //defender - val FOOD_TOFU = 0 - val FOOD_CRACKERS = 1 - val FOOD_WORMS = 2 - //collector - val RED_EGG = 0 - val GREEN_EGG = 1 - val BLUE_EGG = 2 - //healer - val POISON_TOFU = 0 - val POISON_WORMS = 1 - val POISON_MEAT = 2 + var hornCallLock = false + val CallMap = mapOf( + GloryHorn.CONTROLED_BRONZE_WIND to (BarbassaultSession.AttackerStyle.STYLE_1 to BaCall.ATTACKER_STYLE_1), + GloryHorn.ACCURATE_IRON_WATER to (BarbassaultSession.AttackerStyle.STYLE_2 to BaCall.ATTACKER_STYLE_2), + GloryHorn.AGGRISSIVE_STEEL_EARTH to (BarbassaultSession.AttackerStyle.STYLE_3 to BaCall.ATTACKER_STYLE_3), + GloryHorn.DEFENSIVE_MITHRIL_FIRE to (BarbassaultSession.AttackerStyle.STYLE_4 to BaCall.ATTACKER_STYLE_4), - val CALL_BUTTON = mapOf( - 16 to CONTROLED_BRONZE_WIND, - 17 to ACCURATE_IRON_WATER, - 18 to AGGRISSIVE_STEEL_EARTH, - 19 to DEFENSIVE_MITHRIL_FIRE, + GloryHorn.POISON_TOFU to (BarbassaultSession.PoisonFood.TOFU to BaCall.HEALER_TOFU), + GloryHorn.POISON_WORMS to (BarbassaultSession.PoisonFood.WORMS to BaCall.HEALER_WORMS), + GloryHorn.POISON_MEAT to (BarbassaultSession.PoisonFood.MEAT to BaCall.HEALER_MEAT), - 20 to FOOD_TOFU, - 22 to FOOD_CRACKERS, - 21 to FOOD_WORMS, - - 13 to RED_EGG, - 14 to GREEN_EGG, - 15 to BLUE_EGG, - - 23 to POISON_TOFU, - 24 to POISON_WORMS, - 25 to POISON_MEAT - - ) - } + GloryHorn.RED_EGG to (BarbassaultSession.EggColor.RED to BaCall.COLLECTOR_RED), + GloryHorn.GREEN_EGG to (BarbassaultSession.EggColor.GREEN to BaCall.COLLECTOR_GREEN), + GloryHorn.BLUE_EGG to (BarbassaultSession.EggColor.BLUE to BaCall.COLLECTOR_BLUE), + GloryHorn.FOOD_TOFU to (BarbassaultSession.LureFood.TOFU to BaCall.DEFENDER_TOFU), + GloryHorn.FOOD_CRACKERS to (BarbassaultSession.LureFood.CRACKERS to BaCall.DEFENDER_CRACKERS), + GloryHorn.FOOD_WORMS to (BarbassaultSession.LureFood.WORMS to BaCall.DEFENDER_WORMS), + ) override fun newInstance(arg: Any?): Plugin { - ComponentDefinition.forId(Components.BARBASSAULT_HORN_484).plugin = this + ComponentDefinition.forId(484).plugin = this return this } - override fun handle( - player: Player?, - component: Component?, - opcode: Int, - button: Int, - slot: Int, - itemId: Int - ): Boolean { - sendMessage(player!!,"Button " +button ) + override fun handle(player: Player?,component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int ): Boolean { + player ?: return true + val pair = CallMap[button] ?: return true + val role = pair.first + val call = pair.second + if(!hornCallLock) { + player.baSession?.onHornCall(player, role) + sendChat(player, call.text) + player.animate(Animation(5436)) + player.lock(6) + hornCallLock = true + GameWorld.Pulser.submit(object : Pulse(6, player) { + override fun pulse(): Boolean { + player.unlock() + hornCallLock = false + return true + } + }) + } + return true } + override fun open(player: Player?, component: Component?) { + super.open(player, component) + player ?: return + } override fun defineListeners() { on(Scenery.HORN_OF_GLORY_20247, IntType.SCENERY, "Call") { player, _ -> //emote 5438 - player.interfaceManager.open(Component(484)) + player.interfaceManager.open(Component(GloryHorn.ID)) return@on true } } + +} + +object GloryHorn { + val ID = 484 + //collector + val RED_EGG = 13 + val GREEN_EGG = 14 + val BLUE_EGG = 15 + //attacker + val CONTROLED_BRONZE_WIND = 16 + val ACCURATE_IRON_WATER = 17 + val AGGRISSIVE_STEEL_EARTH = 18 + val DEFENSIVE_MITHRIL_FIRE = 19 + //defender + val FOOD_TOFU = 20 + val FOOD_WORMS = 21 + val FOOD_CRACKERS = 22 + //healer + val POISON_TOFU = 23 + val POISON_WORMS = 24 + val POISON_MEAT = 25 + object CallOut { + val defaultText = "---------------------" + const val attacker = 5 + const val defender = 6 + const val collector = 7 + const val healer = 8 + } + } diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt index 7c46eebb4..487e7192f 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt @@ -113,7 +113,7 @@ class ItemMachine: InteractionListener { if (!hasCape(player, capeId)) return player.animate(Animation(5419)) player.lock(5) - + // theres two emotes for the machine and lock duration GameWorld.Pulser.submit(object : Pulse(3, player) { override fun pulse(): Boolean { addArrayOfItems(player,items,amount) From 8a2b160df1e73578227bfe19ff2c3bc2aae8c9f9 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 1 Feb 2026 15:48:27 -0500 Subject: [PATCH 018/123] corrected some horn of glory texts. Egg cannon started. BlinkySwitch eastegg message :D --- .../barbassault/arena/BarbassaultGameArea.kt | 39 +++- .../barbassault/arena/BarbassaultSession.kt | 26 ++- .../barbassault/arena/scenery/EggCannon.kt | 186 +++++++++++++++++- .../barbassault/arena/scenery/HornOfGlory.kt | 15 +- 4 files changed, 249 insertions(+), 17 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 97ff827fc..cd2f18628 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -2,9 +2,13 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.BarbassaultTut import content.minigame.barbassault.arena.BaHornSystem.HornHelper.getHealerHorn +import content.minigame.barbassault.arena.scenery.EggCannon +import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadEggHopper +import content.minigame.barbassault.arena.scenery.EggCannon.Companion.showEggHopperCount import content.minigame.barbassault.getBarbLevels import content.minigame.barbassault.lobby.baSession import core.api.* +import core.game.component.Component import core.game.interaction.IntType import core.game.interaction.InteractionListener @@ -47,7 +51,6 @@ class BarbassaultGameArea : InteractionListener, MapArea { val ROLE_ICON = intArrayOf( ATTACKER_ICON, DEFENDER_ICON, COLLECTOR_ICON, HEALER_ICON ) val Fix_trap_IDs = intArrayOf( Scenery.RUNNER_TRAP1_20230, Scenery.BROKEN_TRAP0_20231 ) object BA_ARENA { val MAIN = 7509; val QUEEN = 7508; val all = listOf(MAIN, QUEEN) } - //base.transform(0,0,0) data class arenaItems(val id: Int,val x: Int, val y: Int, val z: Int) val arenaItemSpawn: List = listOf( @@ -55,6 +58,14 @@ class BarbassaultGameArea : InteractionListener, MapArea { arenaItems(Items.LOGS_11760,30,46,0), arenaItems(Items.LOGS_11760,29,47,0) ) + + enum class EggCannonSide { WEST, EAST } + data class EggCannonLoc( val side: EggCannonSide, val x: Int, val y: Int, val z: Int, val direction: Direction ) + val eggCannons: List = listOf( + EggCannonLoc(EggCannonSide.WEST, 21, 34, 0, Direction.SOUTH), + EggCannonLoc(EggCannonSide.EAST, 40, 34, 0, Direction.SOUTH) ) + + enum class pennanceNPC { RUNNER, HEALER, FIGHTER, RANGER } data class npcSpawnLoc(val tunnel:pennanceNPC, val x: Int,val y: Int,val z: Int,val direction: Direction) val npcSpawns: List = listOf( @@ -71,7 +82,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { } override fun areaEnter(entity: Entity) { val player = entity as? Player ?: return - + //change this for tut latter BarbassaultTut.BarbassTutNPCs.forEach { npc -> npc.init() npc.isWalks = false @@ -90,6 +101,24 @@ class BarbassaultGameArea : InteractionListener, MapArea { } override fun defineListeners() { + on(Scenery.EGG_LAUNCHER_20133, IntType.SCENERY, "Shoot") { player, node -> + EggCannon.openTurretIface(player) + return@on true + } + setDest(IntType.SCENERY,Scenery.EGG_HOPPER_20264){ player,node -> + return@setDest Location.create(player.location.x, player.location.y-1, 0) + } + + on(Scenery.EGG_HOPPER_20264, IntType.SCENERY, "Load","Look-in") { player, node -> + val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false + when(optionClicked){ + "Load" -> loadEggHopper(player) + "Look-in" -> showEggHopperCount(player) + } + + return@on true + } + on(Fix_trap_IDs, IntType.SCENERY, "Fix") { player, node -> if (hasTools(player)) { return@on true } playerChangeScenery(player,5416,node,Scenery.RUNNER_TRAP2_20135,5,"You fixed the Penance Runner trap.") @@ -123,7 +152,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { } return@on true } - + //You've been healed $amount hitpoints and your poison cured. on(Scenery.HEALER_SPRING_20150, IntType.SCENERY, "Drink-from") { player, _ -> if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { player.animate(Animation(5407)) @@ -245,7 +274,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { player.animate(Animation(anim)) player.lock(pulseDelay) - + //if trap send message "You fixed the Penance Runner trap." GameWorld.Pulser.submit(object : Pulse(pulseDelay, player) { override fun pulse(): Boolean { player.unlock() @@ -296,6 +325,8 @@ fun exitMiniGame(player: Player) { /* +the game ended early becasue one of your team mates died. + 484 = horn of glory! Barricaded entrances will only slow down, not stop, Penance from entering the battlefield. Players are allowed to use normal potions; however, potions mixed using Barbarian training may not be brought into the arena. diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 78e1eab02..9a24cf275 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -2,15 +2,19 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultActivity +import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.GloryHorn import content.minigame.barbassault.lobby.BarbTeam import content.minigame.barbassault.lobby.baSession import core.api.* import core.game.node.entity.Entity +import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player +import core.game.node.item.GroundItem import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.GameWorld +import core.game.world.map.Direction import core.game.world.map.Location import core.game.world.map.build.DynamicRegion import core.game.world.map.zone.ZoneBorders @@ -20,6 +24,7 @@ import core.tools.secondsToTicks import core.tools.ticksToSeconds import org.rs09.consts.Components import org.rs09.consts.Music.ASSAULT_AND_BATTERY_604 +import org.rs09.consts.NPCs /* Player @@ -42,10 +47,13 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea lateinit var region: DynamicRegion lateinit var base: Location - + var currentWave = 1 var state: BarbassaultState = BarbassaultState.PARTY_CREATION private set lateinit var team: BarbTeam + val sessionNpcs = mutableListOf() + val groundItems = mutableListOf() + val eggHopper = EggCannon.EggHopperCount() fun beginStartingPhase() { @@ -96,6 +104,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea enterArena() rollNewRoleCalls() //giveplayerHorns + return true } @@ -133,6 +142,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea region = DynamicRegion.create(BarbassaultGameArea.BA_ARENA.MAIN) base = region.baseLocation zone.register(getRegionBorders(region.id)) + spawnEggCannons() } private fun destroyArena() { @@ -188,6 +198,17 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea //exitMiniGame(player) removeTimer(player, "teleblock") } + fun sessionNPCSpawn(id: Int, location: Location, direction: Direction, vararg objects: Any): NPC? { + val npc = NPC.create(id, location, direction, *objects) + npc.init() + sessionNpcs.add(npc) + return npc + } + fun spawnEggCannons() { + sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(21, 34, 0), Direction.NORTH ) + if (currentWave == 10) return + sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(40, 34, 0), Direction.NORTH ) + } private val BA_ROLE_CAPE = mapOf( BarbRole.ATTACKER to 10556, BarbRole.DEFENDER to 10558, BarbRole.COLLECTOR to 10557, BarbRole.HEALER to 10559 ) private fun equipBARoleIcon(player: Player, role: BarbRole) { @@ -274,7 +295,6 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea BarbRole.HEALER -> Components.BARBASSAULT_OVER_HEAL_488 } } - fun rollNewRoleCalls() { roleCalls[BarbRole.ATTACKER] = AttackerCall(AttackerStyle.values().random()) roleCalls[BarbRole.HEALER] = HealerCall(PoisonFood.values().random()) @@ -291,7 +311,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea fun updateGloryHornUI(){ team.allPlayers().forEach { player -> - val atkCallText = (roleCalls[BarbRole.COLLECTOR]?.toCall as? AttackerStyle)?.let { "${it.top} ${it.bottom}" } ?: GloryHorn.CallOut.defaultText + val atkCallText = (roleCalls[BarbRole.COLLECTOR]?.toCall as? AttackerStyle)?.let { "${it.top}${it.bottom}" } ?: GloryHorn.CallOut.defaultText val colCallText = (roleCalls[BarbRole.ATTACKER]?.toCall as? HasUIText)?.ui ?: GloryHorn.CallOut.defaultText val defCallText = (roleCalls[BarbRole.HEALER]?.toCall as? HasUIText)?.ui ?: GloryHorn.CallOut.defaultText val healCallText = (roleCalls[BarbRole.DEFENDER]?.toCall as? HasUIText)?.ui ?: GloryHorn.CallOut.defaultText diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt index 58c8ce136..cd391a1c7 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -1,7 +1,77 @@ package content.minigame.barbassault.arena.scenery -class EggCannon { +import content.minigame.barbassault.arena.BarbassaultSession +import content.minigame.barbassault.lobby.CurrentTeam +import content.minigame.barbassault.lobby.baSession +import core.api.sendChat +import core.api.sendDialogueLines +import core.api.sendMessage +import core.api.setInterfaceText +import core.game.component.CloseEvent +import core.game.component.Component +import core.game.component.ComponentDefinition +import core.game.component.ComponentPlugin +import core.game.node.entity.player.Player +import core.game.node.item.Item +import core.plugin.Initializable +import core.plugin.Plugin +import org.rs09.consts.Components +import org.rs09.consts.Items + +//Egg hoppper scenrey item updates based on eggs in hopper +// empty -> EGG_HOPPER_20264 +// half -> EGG_HOPPER_20265 +// full -> EGG_HOPPER_20266 +//varbit 3268 +@Initializable +class EggCannon : ComponentPlugin() { + + //Easter Egg "Blinky Switch" + private val currentSequence = mutableListOf() + private val easterEggSequence = listOf(56, 38, 26, 26, 56, 56) + fun checkEasterEgg(player: Player,button: Int) { + currentSequence.add(button) + println("Current sequence: $currentSequence + $button") + while(currentSequence.size > easterEggSequence.size) { + currentSequence.removeAt(0) + } + if(currentSequence.takeLast(easterEggSequence.size) == easterEggSequence) { + sendMessage(player, "[BlickySwitch] Activated!") + //does nothing, just a silly message + currentSequence.clear() + } + } + //END BINKY// + + data class EggHopperCount(var red: Int = 0,var blue: Int = 0, var green: Int = 0, var yellow: Int = 0 ){ + fun addEggs(redToAdd: Int = 0, blueToAdd: Int = 0, greenToAdd: Int = 0, yellowToAdd: Int = 0): Map { + val added = mutableMapOf() + + val newRed = (red + redToAdd).coerceAtMost(5) + added["red"] = newRed - red + red = newRed + + val newBlue = (blue + blueToAdd).coerceAtMost(5) + added["blue"] = newBlue - blue + blue = newBlue + + val newGreen = (green + greenToAdd).coerceAtMost(5) + added["green"] = newGreen - green + green = newGreen + + val newYellow = (yellow + yellowToAdd).coerceAtMost(5) + added["yellow"] = newYellow - yellow + yellow = newYellow + + return added + } + } + override fun newInstance(arg: Any?): Plugin { + ComponentDefinition.forId(EggTurret.ID).plugin = this + ComponentDefinition.forId(EggTurret.ID).isWalkable = false; + return this + } ///stun(entity: Entity, ticks: Int) ///isStunned(entity: Entity) //applyPoison (entity: Entity, source: Entity, severity: Int) @@ -9,13 +79,125 @@ class EggCannon { //spawnProjectile //face() + override fun open(player: Player?, component: Component?) { + super.open(player, component) + player ?: return + Component(EggTurret.ID).setCloseEvent(CloseEvent {p, _ -> closeTurretIface(p);return@CloseEvent true}) + updateCannonUI(player) + } + //error message CHATBOX "[bold]all of the _PENANCE_ have been killed!" //error messageif out of range CHATBOX "There are no targetable _PENANCE_ within fireing range." + override fun handle(player: Player?, component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int ): Boolean { + player ?: return true + checkEasterEgg(player, button) + + when(button){ + EggTurret.close -> closeTurretIface(player) + EggTurret.queenBtn -> sendMessage(player,"Shoot Omega at Queen") + else -> shootNormalEggs(button, player) + } + return true + } + fun shootNormalEggs(button: Int,player: Player?) { + player ?: return + val penanceSets = listOf( + "Penance Healer" to EggTurret.pHealerBtns, + "Penance Runner" to EggTurret.pRunnerBtns, + "Penance Fighter" to EggTurret.pFighterBtns, + "Penance Ranger" to EggTurret.pRangerBtns + ) + for ((name, colors) in penanceSets) { + when(button) { + colors.green -> { sendMessage(player, "Shoot poison at $name.");return } + colors.red -> { sendMessage(player, "Shoot Explosive at $name.");return } + colors.blue -> { sendMessage(player, "Shoot Stun at $name.");return } + } + } + } + + fun updateCannonUI(player: Player?){ + player ?: return + val eggHopper = player.baSession?.eggHopper ?: return + val penances = listOf( EggTurret.pHealer, EggTurret.pRunner, EggTurret.pRanger, EggTurret.pFighter ) + + penances.forEach { penance -> + val colors = listOf( "green" to penance.green," red" to penance.red, "blue" to penance.blue) + colors.forEach { (colorName, componentId) -> + val value = when(colorName) { + "green" -> eggHopper.green + "red" -> eggHopper.red + "blue" -> eggHopper.blue + else -> 0 + } + setInterfaceText(player, value.toString(), EggTurret.ID, componentId) + } + } + setInterfaceText(player,eggHopper.yellow.toString(),EggTurret.ID,EggTurret.OMEGA) + } + + + private fun closeTurretIface(player: Player?){ + player ?: return + player.interfaceManager.restoreTabs() + player.interfaceManager.openTab(3,Component(149)) + } + + companion object { + fun openTurretIface(player: Player?) { + player ?: return + val sesion = player.baSession + //get hopper count, if not 0 open else CHATBOXmessage "There are no eggs in the hopper." + player.interfaceManager.openTab(3,Component(495)) + player.interfaceManager.setViewedTab(3) + player.interfaceManager.removeTabs(0, 1, 2, 4, 5, 6,7,8,9,11, 12,13) + } + fun loadEggHopper(player: Player?){ + player ?: return + val session = player.baSession + //get player inventory + val eggsAdded = session?.eggHopper?.addEggs(greenToAdd = 0, redToAdd = 0, blueToAdd = 0, yellowToAdd = 0) + //remove eggs based on eggsAdded from inventory + //Load hopper emote, Same as place table?? + } + fun showEggHopperCount(player: Player?){ + player ?: return + val eggsCount = player.baSession?.eggHopper + sendDialogueLines(player,"$eggsCount") + + } + } } + +data class EggColors(val green: Int, val red: Int, val blue: Int) +object EggTurret { + const val ID = 495 + val pHealer = EggColors(57, 58, 59) + val pHealerBtns = EggColors(11, 12, 13) + + val pRunner = EggColors(60, 61, 62) + val pRunnerBtns = EggColors(24, 25, 26) + + val pFighter = EggColors(63, 64, 65) + val pFighterBtns = EggColors(37, 38, 39) + + val pRanger = EggColors(66, 67, 68) + val pRangerBtns = EggColors(50, 51, 52) + + const val OMEGA = 69 + const val queenBtn = 56 + val close = 72 +} + //emote 5428 maybe -/* GOLD I TELL YOU GOLD!!!! +/* https://youtu.be/_EipqTK3Qak?t=106 +https://www.youtube.com/watch?v=OJ2BDEM03Dw +entity.interfaceManager.removeTabs(0, 1, 2, 3, 4, 5, 6, 12) +entity.interfaceManager.restoreTabs() + +//hide all tabs but invtenory bag and clan chat tab //egg explosion 20727 diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt index 408081285..8a608abf5 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt @@ -26,13 +26,13 @@ class HornOfGlory : ComponentPlugin() , InteractionListener { GloryHorn.AGGRISSIVE_STEEL_EARTH to (BarbassaultSession.AttackerStyle.STYLE_3 to BaCall.ATTACKER_STYLE_3), GloryHorn.DEFENSIVE_MITHRIL_FIRE to (BarbassaultSession.AttackerStyle.STYLE_4 to BaCall.ATTACKER_STYLE_4), - GloryHorn.POISON_TOFU to (BarbassaultSession.PoisonFood.TOFU to BaCall.HEALER_TOFU), - GloryHorn.POISON_WORMS to (BarbassaultSession.PoisonFood.WORMS to BaCall.HEALER_WORMS), - GloryHorn.POISON_MEAT to (BarbassaultSession.PoisonFood.MEAT to BaCall.HEALER_MEAT), + GloryHorn.POISON_TOFU to ("Poison tofu" to BaCall.HEALER_TOFU), + GloryHorn.POISON_WORMS to ("Poison worms" to BaCall.HEALER_WORMS), + GloryHorn.POISON_MEAT to ("Poison meat" to BaCall.HEALER_MEAT), - GloryHorn.RED_EGG to (BarbassaultSession.EggColor.RED to BaCall.COLLECTOR_RED), - GloryHorn.GREEN_EGG to (BarbassaultSession.EggColor.GREEN to BaCall.COLLECTOR_GREEN), - GloryHorn.BLUE_EGG to (BarbassaultSession.EggColor.BLUE to BaCall.COLLECTOR_BLUE), + GloryHorn.RED_EGG to ("Red egg" to BaCall.COLLECTOR_RED), + GloryHorn.GREEN_EGG to ("Green egg" to BaCall.COLLECTOR_GREEN), + GloryHorn.BLUE_EGG to ("Blue egg" to BaCall.COLLECTOR_BLUE), GloryHorn.FOOD_TOFU to (BarbassaultSession.LureFood.TOFU to BaCall.DEFENDER_TOFU), GloryHorn.FOOD_CRACKERS to (BarbassaultSession.LureFood.CRACKERS to BaCall.DEFENDER_CRACKERS), @@ -55,6 +55,7 @@ class HornOfGlory : ComponentPlugin() , InteractionListener { player.animate(Animation(5436)) player.lock(6) hornCallLock = true + //i should replace these with script ques, yes? GameWorld.Pulser.submit(object : Pulse(6, player) { override fun pulse(): Boolean { player.unlock() @@ -63,7 +64,6 @@ class HornOfGlory : ComponentPlugin() , InteractionListener { } }) } - return true } @@ -73,7 +73,6 @@ class HornOfGlory : ComponentPlugin() , InteractionListener { } override fun defineListeners() { on(Scenery.HORN_OF_GLORY_20247, IntType.SCENERY, "Call") { player, _ -> - //emote 5438 player.interfaceManager.open(Component(GloryHorn.ID)) return@on true From 5c93a3fa0e6821eabc9ce0ede36cdb89c46c7eee Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 1 Feb 2026 21:07:13 -0500 Subject: [PATCH 019/123] sessionDestination As work around for session Node travel. some egg cannon work --- .../barbassault/arena/BarbassaultGameArea.kt | 26 ++++++-- .../barbassault/arena/scenery/EggCannon.kt | 59 ++++++++++++++++--- 2 files changed, 74 insertions(+), 11 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index cd2f18628..9dfe0d991 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -25,6 +25,7 @@ import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.map.Direction import core.game.world.map.Location +import core.game.world.map.RegionManager import core.game.world.map.zone.ZoneBorders import core.game.world.update.flag.context.Animation import core.tools.Log @@ -105,11 +106,9 @@ class BarbassaultGameArea : InteractionListener, MapArea { EggCannon.openTurretIface(player) return@on true } - setDest(IntType.SCENERY,Scenery.EGG_HOPPER_20264){ player,node -> - return@setDest Location.create(player.location.x, player.location.y-1, 0) - } - on(Scenery.EGG_HOPPER_20264, IntType.SCENERY, "Load","Look-in") { player, node -> + val loc = player.location + player.faceLocation(location(loc.x,loc.y+1,0)) val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false when(optionClicked){ "Load" -> loadEggHopper(player) @@ -118,6 +117,14 @@ class BarbassaultGameArea : InteractionListener, MapArea { return@on true } + //wrapperID for hopper + on(20267, IntType.SCENERY, "Load","Look-in") { player, node -> + sendMessage(player,"hopper") + return@on true + } + setDest(IntType.SCENERY, Scenery.EGG_HOPPER_20264) { player, node -> + return@setDest sessionDestination(player as Player,node,Direction.SOUTH) + } on(Fix_trap_IDs, IntType.SCENERY, "Fix") { player, node -> if (hasTools(player)) { return@on true } @@ -287,6 +294,16 @@ class BarbassaultGameArea : InteractionListener, MapArea { } }) } + fun sessionDestination(player: Player, node: Node, direction: Direction? = null): Location { + val session = player.baSession ?: return node.location + val borders = getRegionBorders(session.region.regionId) + val base = session.base + return Location.create( + base.x + node.location.x - borders.southWestX + (direction?.stepX ?: 0), + base.y + node.location.y - borders.southWestY + (direction?.stepY ?: 0), + base.z + ) + } private fun hasTools(player: Player): Boolean{ if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id != DEFENDER_ICON) {return true} val requiredItems = listOf(Items.HAMMER_2347, Items.LOGS_11760) @@ -299,6 +316,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { return false } } + fun exitMiniGame(player: Player) { // openOverlay(player,493) // work around to actually close interfaces. //player.interfaceManager.closeOverlay()//maybe im doing this wrong. diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt index cd391a1c7..d7742fb8d 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -32,14 +32,21 @@ class EggCannon : ComponentPlugin() { private val easterEggSequence = listOf(56, 38, 26, 26, 56, 56) fun checkEasterEgg(player: Player,button: Int) { currentSequence.add(button) - println("Current sequence: $currentSequence + $button") + // println("Current sequence: $currentSequence + $button") while(currentSequence.size > easterEggSequence.size) { currentSequence.removeAt(0) } if(currentSequence.takeLast(easterEggSequence.size) == easterEggSequence) { sendMessage(player, "[BlickySwitch] Activated!") - //does nothing, just a silly message currentSequence.clear() + if (player.isAdmin) { //ADMIN ONLY! + val eggHopper = player.baSession?.eggHopper + eggHopper?.green = 99 + eggHopper?.red = 99 + eggHopper?.blue = 99 + updateCannonUI(player) + + } } } //END BINKY// @@ -47,7 +54,6 @@ class EggCannon : ComponentPlugin() { data class EggHopperCount(var red: Int = 0,var blue: Int = 0, var green: Int = 0, var yellow: Int = 0 ){ fun addEggs(redToAdd: Int = 0, blueToAdd: Int = 0, greenToAdd: Int = 0, yellowToAdd: Int = 0): Map { val added = mutableMapOf() - val newRed = (red + redToAdd).coerceAtMost(5) added["red"] = newRed - red red = newRed @@ -66,6 +72,21 @@ class EggCannon : ComponentPlugin() { return added } + fun consumeGreen(): Boolean { + if (green <= 0) return false + green-- + return true + } + fun consumeRed(): Boolean { + if (red <= 0) return false + red-- + return true + } + fun consumeBlue(): Boolean { + if (blue <= 0) return false + blue-- + return true + } } override fun newInstance(arg: Any?): Plugin { ComponentDefinition.forId(EggTurret.ID).plugin = this @@ -102,6 +123,7 @@ class EggCannon : ComponentPlugin() { } fun shootNormalEggs(button: Int,player: Player?) { player ?: return + val eggHopper = player.baSession?.eggHopper val penanceSets = listOf( "Penance Healer" to EggTurret.pHealerBtns, "Penance Runner" to EggTurret.pRunnerBtns, @@ -110,11 +132,33 @@ class EggCannon : ComponentPlugin() { ) for ((name, colors) in penanceSets) { when(button) { - colors.green -> { sendMessage(player, "Shoot poison at $name.");return } - colors.red -> { sendMessage(player, "Shoot Explosive at $name.");return } - colors.blue -> { sendMessage(player, "Shoot Stun at $name.");return } + colors.green -> { + if (!eggHopper?.consumeGreen()!!) { + sendMessage(player, "There are no green eggs in the hopper.") + return + } + sendMessage(player, "Shoot poison at $name."); + return + } + colors.red -> { + if (!eggHopper?.consumeRed()!!) { + sendMessage(player, "There are no red eggs in the hopper.") + return + } + sendMessage(player, "Shoot Explosive at $name.") + return + } + colors.blue -> { + if (!eggHopper?.consumeBlue()!!) { + sendMessage(player, "There are no blue eggs in the hopper.") + return + } + sendMessage(player, "Shoot Stun at $name.") + return + } } } + updateCannonUI(player) } fun updateCannonUI(player: Player?){ @@ -123,7 +167,7 @@ class EggCannon : ComponentPlugin() { val penances = listOf( EggTurret.pHealer, EggTurret.pRunner, EggTurret.pRanger, EggTurret.pFighter ) penances.forEach { penance -> - val colors = listOf( "green" to penance.green," red" to penance.red, "blue" to penance.blue) + val colors = listOf( "green" to penance.green,"red" to penance.red, "blue" to penance.blue) colors.forEach { (colorName, componentId) -> val value = when(colorName) { "green" -> eggHopper.green @@ -165,6 +209,7 @@ class EggCannon : ComponentPlugin() { player ?: return val eggsCount = player.baSession?.eggHopper sendDialogueLines(player,"$eggsCount") + sendMessage(player,"$eggsCount") } } From e0e8f63dd42944430883ab6245b48302e6d24b3f Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 1 Feb 2026 21:44:03 -0500 Subject: [PATCH 020/123] look in egg hopper --- .../minigame/barbassault/arena/BarbassaultGameArea.kt | 10 ++++++---- .../minigame/barbassault/arena/scenery/EggCannon.kt | 7 +++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 9dfe0d991..1b6299310 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -108,13 +108,13 @@ class BarbassaultGameArea : InteractionListener, MapArea { } on(Scenery.EGG_HOPPER_20264, IntType.SCENERY, "Load","Look-in") { player, node -> val loc = player.location - player.faceLocation(location(loc.x,loc.y+1,0)) + //sendMessage(player,"You need to be a Collector to load eggs.") val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false when(optionClicked){ - "Load" -> loadEggHopper(player) - "Look-in" -> showEggHopperCount(player) + "load" -> loadEggHopper(player) + "look-in" -> showEggHopperCount(player) } - + player.faceLocation(location(loc.x,loc.y+1,0)) return@on true } //wrapperID for hopper @@ -159,8 +159,10 @@ class BarbassaultGameArea : InteractionListener, MapArea { } return@on true } + //you healed $heal.count hitpoints. //You've been healed $amount hitpoints and your poison cured. on(Scenery.HEALER_SPRING_20150, IntType.SCENERY, "Drink-from") { player, _ -> + //you need to be a healer to drink from spring if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { player.animate(Animation(5407)) player.lock(5) diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt index d7742fb8d..9e0423256 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -204,12 +204,15 @@ class EggCannon : ComponentPlugin() { val eggsAdded = session?.eggHopper?.addEggs(greenToAdd = 0, redToAdd = 0, blueToAdd = 0, yellowToAdd = 0) //remove eggs based on eggsAdded from inventory //Load hopper emote, Same as place table?? + sendMessage(player,"Loading hopper") } fun showEggHopperCount(player: Player?){ player ?: return val eggsCount = player.baSession?.eggHopper - sendDialogueLines(player,"$eggsCount") - sendMessage(player,"$eggsCount") + val poison = eggsCount?.green + val explosive = eggsCount?.red + val stun = eggsCount?.blue + sendDialogueLines(player,"The hopper contains:","$poison poison eggs, $explosive explosive eggs","and $stun stun eggs.") } } From d2d50bb8c8b04e85dc6f5a12a48b7f0cc05e61fe Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 1 Feb 2026 23:16:52 -0500 Subject: [PATCH 021/123] egg hopper related messages --- .../barbassault/arena/BarbassaultGameArea.kt | 2 +- .../barbassault/arena/scenery/EggCannon.kt | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 1b6299310..9a3257599 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -108,7 +108,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { } on(Scenery.EGG_HOPPER_20264, IntType.SCENERY, "Load","Look-in") { player, node -> val loc = player.location - //sendMessage(player,"You need to be a Collector to load eggs.") + val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false when(optionClicked){ "load" -> loadEggHopper(player) diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt index 9e0423256..435aec450 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -1,5 +1,6 @@ package content.minigame.barbassault.arena.scenery +import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.lobby.CurrentTeam import content.minigame.barbassault.lobby.baSession @@ -52,6 +53,7 @@ class EggCannon : ComponentPlugin() { //END BINKY// data class EggHopperCount(var red: Int = 0,var blue: Int = 0, var green: Int = 0, var yellow: Int = 0 ){ + fun totalCount(): Int = red + blue + green + yellow fun addEggs(redToAdd: Int = 0, blueToAdd: Int = 0, greenToAdd: Int = 0, yellowToAdd: Int = 0): Map { val added = mutableMapOf() val newRed = (red + redToAdd).coerceAtMost(5) @@ -157,8 +159,8 @@ class EggCannon : ComponentPlugin() { return } } + updateCannonUI(player) } - updateCannonUI(player) } fun updateCannonUI(player: Player?){ @@ -191,8 +193,10 @@ class EggCannon : ComponentPlugin() { companion object { fun openTurretIface(player: Player?) { player ?: return - val sesion = player.baSession - //get hopper count, if not 0 open else CHATBOXmessage "There are no eggs in the hopper." + if (player.baSession?.eggHopper?.totalCount() == 0) { + sendDialogueLines(player,"There are no eggs in the hopper.") + return + } player.interfaceManager.openTab(3,Component(495)) player.interfaceManager.setViewedTab(3) player.interfaceManager.removeTabs(0, 1, 2, 4, 5, 6,7,8,9,11, 12,13) @@ -200,8 +204,10 @@ class EggCannon : ComponentPlugin() { fun loadEggHopper(player: Player?){ player ?: return val session = player.baSession - //get player inventory - val eggsAdded = session?.eggHopper?.addEggs(greenToAdd = 0, redToAdd = 0, blueToAdd = 0, yellowToAdd = 0) + val role =session?.team?.getRoleForPlayer(player) + if (role != BarbRole.COLLECTOR) {sendMessage(player,"You need to be a Collector to load eggs.");return} + //get player inv eggs + val eggsAdded = session.eggHopper.addEggs(greenToAdd = 0, redToAdd = 0, blueToAdd = 0, yellowToAdd = 0) //remove eggs based on eggsAdded from inventory //Load hopper emote, Same as place table?? sendMessage(player,"Loading hopper") @@ -213,7 +219,6 @@ class EggCannon : ComponentPlugin() { val explosive = eggsCount?.red val stun = eggsCount?.blue sendDialogueLines(player,"The hopper contains:","$poison poison eggs, $explosive explosive eggs","and $stun stun eggs.") - } } } From 5db0a5ea1b4e72a3f80f8ec9b1d1b8f25ce0931d Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 1 Feb 2026 23:42:24 -0500 Subject: [PATCH 022/123] Merlin's crystal, Changed crate cutscene to use correct location. --- .../quest/merlinsquest/CrateCutscenePlugin.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Server/src/main/content/region/kandarin/seers/quest/merlinsquest/CrateCutscenePlugin.java b/Server/src/main/content/region/kandarin/seers/quest/merlinsquest/CrateCutscenePlugin.java index aab24ce71..79e0a2cc0 100644 --- a/Server/src/main/content/region/kandarin/seers/quest/merlinsquest/CrateCutscenePlugin.java +++ b/Server/src/main/content/region/kandarin/seers/quest/merlinsquest/CrateCutscenePlugin.java @@ -70,8 +70,8 @@ public class CrateCutscenePlugin extends CutscenePlugin { @Override public Location getStartLocation() { - return base.transform(18, 25, 0); - } + return base.transform(26, 47, 0); + }// old 18 25 @Override public Location getSpawnLocation() { @@ -80,13 +80,13 @@ public class CrateCutscenePlugin extends CutscenePlugin { @Override public void configure() { - region = DynamicRegion.create(12609); + region = DynamicRegion.create(11161); setRegionBase(); registerRegion(region.getId()); - SceneryBuilder.add(new Scenery(65, base.transform(18, 25, 0), 0, 0)); - SceneryBuilder.add(new Scenery(65, base.transform(19, 25, 0), 0, 4)); - SceneryBuilder.add(new Scenery(65, base.transform(18, 24, 0), 0, 1)); - SceneryBuilder.add(new Scenery(65, base.transform(18, 26, 0), 0, 3)); + //SceneryBuilder.add(new Scenery(65, base.transform(18, 25, 0), 0, 0)); + //SceneryBuilder.add(new Scenery(65, base.transform(19, 25, 0), 0, 4)); + //SceneryBuilder.add(new Scenery(65, base.transform(18, 24, 0), 0, 1)); + //SceneryBuilder.add(new Scenery(65, base.transform(18, 26, 0), 0, 3)); } /** From c5ba5e8609e82664820f3df7ad1743206f79aa6f Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 2 Feb 2026 03:23:49 -0500 Subject: [PATCH 023/123] Egg Hopper logic done, may be missing a few messages --- .../barbassault/arena/BarbassaultGameArea.kt | 10 ++- .../barbassault/arena/BarbassaultSession.kt | 2 +- .../barbassault/arena/scenery/EggCannon.kt | 62 ++++++++++--------- 3 files changed, 42 insertions(+), 32 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 9a3257599..5e0dc6052 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -1,9 +1,11 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.BarbassaultTut +import content.minigame.barbassault.CaptainCainDialogue.Companion.TORSO_PRICE import content.minigame.barbassault.arena.BaHornSystem.HornHelper.getHealerHorn import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadEggHopper +import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadHopperEggs import content.minigame.barbassault.arena.scenery.EggCannon.Companion.showEggHopperCount import content.minigame.barbassault.getBarbLevels import content.minigame.barbassault.lobby.baSession @@ -117,12 +119,18 @@ class BarbassaultGameArea : InteractionListener, MapArea { player.faceLocation(location(loc.x,loc.y+1,0)) return@on true } + onUseWith(IntType.SCENERY, EggCannon.ALL_EGGS,Scenery.EGG_HOPPER_20264){ player, used, with -> + val loc = player.location + player.faceLocation(location(loc.x,loc.y+1,0)) + loadHopperEggs(player,used.id ) + return@onUseWith true + } //wrapperID for hopper on(20267, IntType.SCENERY, "Load","Look-in") { player, node -> sendMessage(player,"hopper") return@on true } - setDest(IntType.SCENERY, Scenery.EGG_HOPPER_20264) { player, node -> + setDest(IntType.SCENERY, intArrayOf(Scenery.EGG_HOPPER_20264), "use","Load","Look-in") { player, node -> return@setDest sessionDestination(player as Player,node,Direction.SOUTH) } diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 9a24cf275..cc1c48e39 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -53,7 +53,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea lateinit var team: BarbTeam val sessionNpcs = mutableListOf() val groundItems = mutableListOf() - val eggHopper = EggCannon.EggHopperCount() + val eggHopper = EggCannon.EggHopper() fun beginStartingPhase() { diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt index 435aec450..1aed5cc4c 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -1,13 +1,8 @@ package content.minigame.barbassault.arena.scenery import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.arena.BarbassaultSession -import content.minigame.barbassault.lobby.CurrentTeam import content.minigame.barbassault.lobby.baSession -import core.api.sendChat -import core.api.sendDialogueLines -import core.api.sendMessage -import core.api.setInterfaceText +import core.api.* import core.game.component.CloseEvent import core.game.component.Component import core.game.component.ComponentDefinition @@ -16,7 +11,6 @@ import core.game.node.entity.player.Player import core.game.node.item.Item import core.plugin.Initializable import core.plugin.Plugin -import org.rs09.consts.Components import org.rs09.consts.Items @@ -51,44 +45,43 @@ class EggCannon : ComponentPlugin() { } } //END BINKY// - - data class EggHopperCount(var red: Int = 0,var blue: Int = 0, var green: Int = 0, var yellow: Int = 0 ){ + data class EggHopper(var red: Int = 0, var blue: Int = 0, var green: Int = 0, var yellow: Int = 0 ){ + private val maxPerColor = 5 + val eggColorMap = mapOf(Items.GREEN_EGG_10531 to "green",Items.RED_EGG_10532 to "red",Items.BLUE_EGG_10533 to "blue",Items.OMEGA_EGG_10537 to "yellow" ) fun totalCount(): Int = red + blue + green + yellow fun addEggs(redToAdd: Int = 0, blueToAdd: Int = 0, greenToAdd: Int = 0, yellowToAdd: Int = 0): Map { val added = mutableMapOf() - val newRed = (red + redToAdd).coerceAtMost(5) + val newRed = (red + redToAdd).coerceAtMost(maxPerColor) added["red"] = newRed - red red = newRed - val newBlue = (blue + blueToAdd).coerceAtMost(5) + val newBlue = (blue + blueToAdd).coerceAtMost(maxPerColor) added["blue"] = newBlue - blue blue = newBlue - val newGreen = (green + greenToAdd).coerceAtMost(5) + val newGreen = (green + greenToAdd).coerceAtMost(maxPerColor) added["green"] = newGreen - green green = newGreen - val newYellow = (yellow + yellowToAdd).coerceAtMost(5) + val newYellow = (yellow + yellowToAdd).coerceAtMost(maxPerColor) added["yellow"] = newYellow - yellow yellow = newYellow return added } - fun consumeGreen(): Boolean { - if (green <= 0) return false - green-- - return true - } - fun consumeRed(): Boolean { - if (red <= 0) return false - red-- - return true - } - fun consumeBlue(): Boolean { - if (blue <= 0) return false - blue-- - return true + fun addEgg(itemId: Int,count: Int = 0): Map { + return when (eggColorMap[itemId]) { + "red" -> addEggs(redToAdd = count) + "blue" -> addEggs(blueToAdd = count) + "green" -> addEggs(greenToAdd = count) + "yellow" -> addEggs(yellowToAdd = count) + else -> emptyMap() + } } + fun consumeGreen(): Boolean { if (green <= 0) return false; green--; return true } + fun consumeRed(): Boolean { if (red <= 0) return false; red--; return true } + fun consumeBlue(): Boolean { if (blue <= 0) return false; blue--; return true } + fun consumeYellow(): Boolean { if (yellow <= 0) return false; yellow--; return true } } override fun newInstance(arg: Any?): Plugin { ComponentDefinition.forId(EggTurret.ID).plugin = this @@ -191,6 +184,8 @@ class EggCannon : ComponentPlugin() { } companion object { + val ALL_EGGS = intArrayOf(Items.GREEN_EGG_10531,Items.RED_EGG_10532,Items.BLUE_EGG_10533,Items.OMEGA_EGG_10537) + fun openTurretIface(player: Player?) { player ?: return if (player.baSession?.eggHopper?.totalCount() == 0) { @@ -206,12 +201,19 @@ class EggCannon : ComponentPlugin() { val session = player.baSession val role =session?.team?.getRoleForPlayer(player) if (role != BarbRole.COLLECTOR) {sendMessage(player,"You need to be a Collector to load eggs.");return} - //get player inv eggs - val eggsAdded = session.eggHopper.addEggs(greenToAdd = 0, redToAdd = 0, blueToAdd = 0, yellowToAdd = 0) - //remove eggs based on eggsAdded from inventory + ALL_EGGS.forEach { loadHopperEggs(player, it) } //Load hopper emote, Same as place table?? sendMessage(player,"Loading hopper") } + fun loadHopperEggs(player: Player?,itemId: Int ){ + player ?: return + val invCount = amountInInventory(player, itemId) + val result = player.baSession?.eggHopper?.addEgg(itemId,invCount) + val color = player.baSession?.eggHopper?.eggColorMap?.get(itemId) + val added = result?.get(color) ?: 0 + + removeItem(player, Item(itemId, added)) + } fun showEggHopperCount(player: Player?){ player ?: return val eggsCount = player.baSession?.eggHopper From 7e2b5f6d46872a62e0eb3a07f84b1120f210d70a Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 2 Feb 2026 03:38:53 -0500 Subject: [PATCH 024/123] https://gitlab.com/2009scape/2009scape/-/issues?sort=created_date&state=opened&search=fist+of+guthix&first_page_size=20&show=eyJpaWQiOiIyMjgxIiwiZnVsbF9wYXRoIjoiMjAwOXNjYXBlLzIwMDlzY2FwZSIsImlkIjoxNjc1MTk4NDd9 --- .../minigame/fog/FOGRewardsInterface.kt | 91 +++++++++++-------- 1 file changed, 55 insertions(+), 36 deletions(-) diff --git a/Server/src/main/content/minigame/fog/FOGRewardsInterface.kt b/Server/src/main/content/minigame/fog/FOGRewardsInterface.kt index d09b39bdc..f3b5cf47c 100644 --- a/Server/src/main/content/minigame/fog/FOGRewardsInterface.kt +++ b/Server/src/main/content/minigame/fog/FOGRewardsInterface.kt @@ -65,7 +65,16 @@ class FOGRewardsInterface : ComponentPlugin(){ return this } - private fun handleOpcode(item: ShopItem, opcode: Int, player: Player){ + private fun handleOpcode(item: ShopItem, opcode: Int, player: Player) { + if (item.id in shopsaleone) { + handleSaleOneOpcode(item,opcode, player) + } else { + handleOGOpcode(item,opcode, player) + } + + } + + private fun handleOGOpcode(item: ShopItem, opcode: Int, player: Player){ when(opcode){ 155 -> player.sendMessage("${ItemDefinition.forId(item.id).name.replace("100","")}: costs ${item.price} tokens.") 196 -> handleBuyOption(item,1,player) @@ -75,6 +84,14 @@ class FOGRewardsInterface : ComponentPlugin(){ } } + private fun handleSaleOneOpcode(item: ShopItem, opcode: Int, player: Player) { + when (opcode) { + 155 -> player.sendMessage("${ItemDefinition.forId(item.id).name.replace("100","")}: costs ${item.price} tokens.") + 196 -> handleBuyOption(item,1,player) + 124 -> player.sendMessage(ItemDefinition.forId(item.id).examine.replace("100","")) + } + } + private fun handleBuyOption(item: ShopItem, amount: Int, player: Player){ val neededTokens = Item(12852,item.price * amount) if(player.inventory.containsItem(neededTokens)){ @@ -88,39 +105,41 @@ class FOGRewardsInterface : ComponentPlugin(){ } - val Druidic_Mage_Top = (ShopItem(12894, 300, 1)) - val Druidic_Mage_Hood = (ShopItem(12887, 100, 1)) - val Druidic_Mage_Bottom = (ShopItem(12901, 200, 1)) - val Combat_Robe_Top = (ShopItem(12971, 150, 1)) - val Combat_Robe_Hood = (ShopItem(12964, 50, 1)) - val Combat_Robe_Bottom = (ShopItem(12978, 100, 1)) - val Battle_Robe_Hood = (ShopItem(12866, 250, 1)) - val Battle_Robe_Top = (ShopItem(12873, 1500, 1)) - val Battle_Robe_Bottom = (ShopItem(12880, 1000, 1)) - val Green_Coif = (ShopItem(12936, 150, 1)) - val Blue_Coif = (ShopItem(12943, 200, 1)) - val Red_Coif = (ShopItem(12950, 300, 1)) - val Black_Coif = (ShopItem(12957, 500, 1)) - val Bronze_Gaunt = (ShopItem(12985, 15, 1)) - val Iron_Gaunt = (ShopItem(12988, 30, 1)) - val Steel_Gaunt = (ShopItem(12991, 50, 1)) - val Black_Gaunt = (ShopItem(12994, 75, 1)) - val Mithril_Gaunt = (ShopItem(12997, 100, 1)) - val Adamant_Gaunt = (ShopItem(13000, 150, 1)) - val Rune_Gaunt = (ShopItem(13003, 200, 1)) - val Dragon_Gaunt = (ShopItem(13006, 300, 1)) - val Addy_Spike = (ShopItem(12908, 50, 1)) - val Addy_Beserk = (ShopItem(12915, 100, 1)) - val Rune_Spike = (ShopItem(12922, 200, 1)) - val Rune_Beserk = (ShopItem(12929, 300, 1)) - val Air_Gloves = (ShopItem(12863, 75, 1)) - val Water_Gloves = (ShopItem(12864, 75, 1)) - val Earth_Gloves = (ShopItem(12865, 75, 1)) - val Irit_Gloves = (ShopItem(12856, 75, 1)) - val Avantoe_Gloves = (ShopItem(12857, 100, 1)) - val Kwuarm_Gloves = (ShopItem(12858, 200, 1)) - val Cadantine_Gloves = (ShopItem(12859, 200, 1)) - val Swordfish_Gloves = (ShopItem(12860, 200, 1)) - val Shark_Gloves = (ShopItem(12861, 200, 1)) - val Dragon_Gloves = (ShopItem(12862, 200, 1)) + val Druidic_Mage_Top = (ShopItem(12894, 300, 1)) + val Druidic_Mage_Hood = (ShopItem(12887, 100, 1)) + val Druidic_Mage_Bottom = (ShopItem(12901, 200, 1)) + val Combat_Robe_Top = (ShopItem(12971, 150, 1)) + val Combat_Robe_Hood = (ShopItem(12964, 50, 1)) + val Combat_Robe_Bottom = (ShopItem(12978, 100, 1)) + val Battle_Robe_Hood = (ShopItem(12866, 250, 1)) + val Battle_Robe_Top = (ShopItem(12873, 1500, 1)) + val Battle_Robe_Bottom = (ShopItem(12880, 1000, 1)) + val Green_Coif = (ShopItem(12936, 150, 1)) + val Blue_Coif = (ShopItem(12943, 200, 1)) + val Red_Coif = (ShopItem(12950, 300, 1)) + val Black_Coif = (ShopItem(12957, 500, 1)) + val Bronze_Gaunt = (ShopItem(12985, 15, 1)) + val Iron_Gaunt = (ShopItem(12988, 30, 1)) + val Steel_Gaunt = (ShopItem(12991, 50, 1)) + val Black_Gaunt = (ShopItem(12994, 75, 1)) + val Mithril_Gaunt = (ShopItem(12997, 100, 1)) + val Adamant_Gaunt = (ShopItem(13000, 150, 1)) + val Rune_Gaunt = (ShopItem(13003, 200, 1)) + val Dragon_Gaunt = (ShopItem(13006, 300, 1)) + val Addy_Spike = (ShopItem(12908, 50, 1)) + val Addy_Beserk = (ShopItem(12915, 100, 1)) + val Rune_Spike = (ShopItem(12922, 200, 1)) + val Rune_Beserk = (ShopItem(12929, 300, 1)) + val Air_Gloves = (ShopItem(12863, 75, 1)) + val Water_Gloves = (ShopItem(12864, 75, 1)) + val Earth_Gloves = (ShopItem(12865, 75, 1)) + val Irit_Gloves = (ShopItem(12856, 75, 1)) + val Avantoe_Gloves = (ShopItem(12857, 100, 1)) + val Kwuarm_Gloves = (ShopItem(12858, 200, 1)) + val Cadantine_Gloves = (ShopItem(12859, 200, 1)) + val Swordfish_Gloves = (ShopItem(12860, 200, 1)) + val Shark_Gloves = (ShopItem(12861, 200, 1)) + val Dragon_Gloves = (ShopItem(12862, 200, 1)) + + val shopsaleone = setOf(12863,12864,12865,12856,12857,12858,12859,12860,12861,12862) } \ No newline at end of file From 2bb7a9812ce380d8b77af1107a80d0f04239e06c Mon Sep 17 00:00:00 2001 From: Tooze Date: Thu, 5 Feb 2026 10:12:29 -0500 Subject: [PATCH 025/123] Score Tracker started. --- .../barbassault/arena/BarbScoreManager.kt | 112 ++++++++++++++++++ .../barbassault/arena/BarbassaultSession.kt | 10 +- .../arena/WaveCompleteInterface.kt | 3 + 3 files changed, 116 insertions(+), 9 deletions(-) create mode 100644 Server/src/main/content/minigame/barbassault/arena/BarbScoreManager.kt diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbScoreManager.kt b/Server/src/main/content/minigame/barbassault/arena/BarbScoreManager.kt new file mode 100644 index 000000000..0d6391f87 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/BarbScoreManager.kt @@ -0,0 +1,112 @@ +package content.minigame.barbassault.arena + +import content.minigame.barbassault.lobby.BarbTeam +import core.game.node.entity.player.Player + +class BarbScoreManager { + + private val trackers = mutableMapOf() + + fun trackerFor(player: Player): ScoreTracker = trackers.getOrPut(player) { ScoreTracker() } + + fun resetAll() { + trackers.values.forEach { it.reset() } + } + + fun remove(player: Player) { + trackers.remove(player) + } + fun allTrackers(): Collection = trackers.values + fun personal(player: Player, caps: SpawnCaps): RoleScore { + return trackerFor(player).toScoreboard(caps) + } + + fun team(team: BarbTeam, caps: SpawnCaps): RoleScore { + var total = RoleScore.ZERO + for (player in team.allPlayers()) { + total = total.add(trackerFor(player).toScoreboard(caps)) + } + return total + } +} + +data class AttackerStats(var rangersKilled: Int = 0, var fightersKilled: Int = 0, var incorrectStyleAttacks: Int = 0) +data class CollectorStats(var eggsCollected: Int = 0, var eggsExploded: Int = 0) { val netEggs: Int get() = eggsCollected - eggsExploded } +data class DefenderStats(var runnersKilled: Int = 0, var runnersPast: Int = 0) +data class HealerStats(var healersKilled: Int = 0, var hitpointsReplenished: Int = 0, var wrongPoisonUsed: Int = 0) + +data class ScoreTracker(var attackerStats: AttackerStats = AttackerStats(), var collectorStats: CollectorStats = CollectorStats(), + var defenderStats: DefenderStats = DefenderStats(),var healerStats: HealerStats = HealerStats()) +{ + fun reset() { + attackerStats = AttackerStats() + collectorStats = CollectorStats() + defenderStats = DefenderStats() + healerStats = HealerStats() + } + fun toScoreboard(caps: SpawnCaps): RoleScore = BarbAssaultScoreBuilder.build(this, caps) +} +//Wave spawn counts // may pull from wave to count table latter +data class SpawnCaps(val rangers: Int, val fighters: Int, val runners: Int, val healers: Int) +data class RoleScore(val rangersKilled: Int, val fightersKilled: Int, val incorrectStylePenalty: Int, + val eggsScore: Int, + val runnersKilledScore: Int, val runnersPastPenalty: Int, + val healersKilledScore: Int, val hitpointsHealedScore: Int, val wrongPoisonPenalty: Int ) +{ + val attackerTotal: Int get() = rangersKilled + fightersKilled + incorrectStylePenalty + val collectorTotal: Int get() = eggsScore + val defenderTotal: Int get() = runnersKilledScore + runnersPastPenalty + val healerTotal: Int get() = healersKilledScore + hitpointsHealedScore + wrongPoisonPenalty + fun add(other: RoleScore): RoleScore = RoleScore( + rangersKilled + other.rangersKilled, + fightersKilled + other.fightersKilled, + incorrectStylePenalty + other.incorrectStylePenalty, + eggsScore + other.eggsScore, + runnersKilledScore + other.runnersKilledScore, + runnersPastPenalty + other.runnersPastPenalty, + healersKilledScore + other.healersKilledScore, + hitpointsHealedScore + other.hitpointsHealedScore, + wrongPoisonPenalty + other.wrongPoisonPenalty + ) + companion object { + val ZERO = RoleScore(0,0,0,0,0,0,0,0,0) + } +} + +object BarbAssaultScoreBuilder { + fun build(tracker: ScoreTracker, caps: SpawnCaps): RoleScore { + + val atk = tracker.attackerStats + val col = tracker.collectorStats + val def = tracker.defenderStats + val heal = tracker.healerStats + + val rangerKillScore = atk.rangersKilled.coerceAtMost(caps.rangers) - 1 + val fighterKillScore = atk.fightersKilled.coerceAtMost(caps.fighters) - 1 + val incorrectStylePenalty = (-atk.incorrectStyleAttacks + 1).coerceAtLeast(-10) + + val eggScore = (col.netEggs.coerceAtMost(60) / 4.35).toInt() + + val runnersKilledScore = (1.8 * def.runnersKilled.coerceAtMost(caps.runners)).toInt() + val runnersPastPenalty = (-3 * def.runnersPast).coerceAtLeast(-10) + + val healerKillScore = (0.7 * heal.healersKilled.coerceAtMost(caps.healers)).toInt() + val hitpointsHealedScore = (heal.hitpointsReplenished / 18).coerceAtMost(28) + val wrongPoisonPenalty = -(heal.wrongPoisonUsed.coerceAtMost(512) / 4) + + return RoleScore( + rangersKilled = rangerKillScore, + fightersKilled = fighterKillScore, + incorrectStylePenalty = incorrectStylePenalty, + + eggsScore = eggScore, + + runnersKilledScore = runnersKilledScore, + runnersPastPenalty = runnersPastPenalty, + + healersKilledScore = healerKillScore, + hitpointsHealedScore = hitpointsHealedScore, + wrongPoisonPenalty = wrongPoisonPenalty + ) + } +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index cc1c48e39..fc460e175 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -54,7 +54,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea val sessionNpcs = mutableListOf() val groundItems = mutableListOf() val eggHopper = EggCannon.EggHopper() - + val scoreManager = BarbScoreManager() fun beginStartingPhase() { if (state != BarbassaultState.PARTY_CREATION) return @@ -182,14 +182,6 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea sendMessage(player, "----- Wave: $waveNum -----") openOverlay(player, it) } - - /** BarbassaultTut.BarbassTutNPCs.forEach { - npc -> npc.init() - npc.isWalks = false - - } - BarbassaultTut.spawnItems() - **/ } override fun areaLeave(entity: Entity, logout: Boolean) { diff --git a/Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt b/Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt index ca88ba9f8..b83511dd8 100644 --- a/Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt +++ b/Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt @@ -1,8 +1,11 @@ package content.minigame.barbassault.arena + class WaveCompleteInterface { + } + /* [TITLE] bold/ Wave Complete! bold/ Reward: From c64623871528a9898767fd7090de1de395105598 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 8 Feb 2026 23:10:34 -0500 Subject: [PATCH 026/123] A little bit all over. --- .../minigame/barbassault/BarbassDevHelper.kt | 5 ++ .../barbassault/arena/BarbScoreManager.kt | 24 ++++-- .../barbassault/arena/BarbassEvent.kt | 36 ++++++++ .../barbassault/arena/BarbassaultSession.kt | 84 +++++++++++++++++-- .../arena/monsters/PenanceFighterNPC.kt | 68 ++++++++++++++- .../arena/monsters/PenanceHealerNPC.kt | 16 ++++ .../arena/monsters/PenanceQueenNPC.kt | 2 + .../arena/monsters/PenanceRangerNPC.kt | 13 +++ .../arena/monsters/PenanceRunnerNPC.kt | 12 ++- .../barbassault/lobby/BarbassaultLobby.kt | 30 ++++--- 10 files changed, 264 insertions(+), 26 deletions(-) create mode 100644 Server/src/main/content/minigame/barbassault/arena/BarbassEvent.kt diff --git a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt index 8b111916b..a4d4166cb 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt @@ -32,6 +32,11 @@ class BarbassDevHelper : CommandSet(Privilege.ADMIN) { define("barbqueen"){ player,_-> player.teleport(Location.create(1885, 5403, 0)) } + //nods to the defender guide I found, as "suggested" defender gear. + define("defgear"){ player,_-> + player.equipment.replace(Item(954),2) + + } define("hch"){ player,args-> val chId = args[1].toIntOrNull() diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbScoreManager.kt b/Server/src/main/content/minigame/barbassault/arena/BarbScoreManager.kt index 0d6391f87..b74699cfa 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbScoreManager.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbScoreManager.kt @@ -2,6 +2,7 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.lobby.BarbTeam import core.game.node.entity.player.Player +//https://www.youtube.com/watch?v=OJ2BDEM03Dw class BarbScoreManager { @@ -20,11 +21,12 @@ class BarbScoreManager { fun personal(player: Player, caps: SpawnCaps): RoleScore { return trackerFor(player).toScoreboard(caps) } - - fun team(team: BarbTeam, caps: SpawnCaps): RoleScore { + //val caps = session.currentWaveCaps() + //val teamScore = session.scoreManager.team(caps) + fun team(caps: SpawnCaps): RoleScore { var total = RoleScore.ZERO - for (player in team.allPlayers()) { - total = total.add(trackerFor(player).toScoreboard(caps)) + for (tracker in allTrackers()) { + total = total.add(tracker.toScoreboard(caps)) } return total } @@ -46,9 +48,19 @@ data class ScoreTracker(var attackerStats: AttackerStats = AttackerStats(), var } fun toScoreboard(caps: SpawnCaps): RoleScore = BarbAssaultScoreBuilder.build(this, caps) } -//Wave spawn counts // may pull from wave to count table latter +val waveCaps = listOf( //i should put this somewhere else + SpawnCaps(4,4,2,2), //wave1 + SpawnCaps(4,5,3,3), + SpawnCaps(6,5,4,3), + SpawnCaps(6,6,4,4), + SpawnCaps(6,6,5,5), + SpawnCaps(7,6,6,6), + SpawnCaps(7,7,6,7), + SpawnCaps(8,7,7,7), + SpawnCaps(8,8,9,8) // wave 9 +) data class SpawnCaps(val rangers: Int, val fighters: Int, val runners: Int, val healers: Int) -data class RoleScore(val rangersKilled: Int, val fightersKilled: Int, val incorrectStylePenalty: Int, + data class RoleScore(val rangersKilled: Int, val fightersKilled: Int, val incorrectStylePenalty: Int, val eggsScore: Int, val runnersKilledScore: Int, val runnersPastPenalty: Int, val healersKilledScore: Int, val hitpointsHealedScore: Int, val wrongPoisonPenalty: Int ) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassEvent.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassEvent.kt new file mode 100644 index 000000000..8689376cb --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassEvent.kt @@ -0,0 +1,36 @@ +package content.minigame.barbassault.arena + +import core.game.node.entity.npc.NPC +import core.game.node.entity.player.Player + +sealed class BarbAssEvent { + data class NPCDied(val npc: NPC, val killer: Player) : BarbAssEvent() + data class EggCollected(val player: Player, val count: Int) : BarbAssEvent() + data class HitpointsHealed(val player: Player, val amount: Int) : BarbAssEvent() + data class WrongPoisonUsed(val player: Player) : BarbAssEvent() + +} +class BarbAssEventBus { + private val listeners = mutableMapOf, MutableList<(BarbAssEvent) -> Unit>>() + private val pendingEvents = mutableListOf() + + fun register(eventType: Class, listener: (T) -> Unit) { + listeners.computeIfAbsent(eventType) { mutableListOf() }.add { listener(it as T) } + } + + fun emit(event: BarbAssEvent) { + pendingEvents.add(event) + } + + fun processEvents() { + for (event in pendingEvents) { + listeners[event::class.java]?.forEach { it.invoke(event) } + } + pendingEvents.clear() + } + + fun clear() { + listeners.clear() + } +} + diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index fc460e175..73e6cfccd 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -5,6 +5,7 @@ import content.minigame.barbassault.BarbassaultActivity import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.GloryHorn import content.minigame.barbassault.lobby.BarbTeam +import content.minigame.barbassault.lobby.BarbassaultLobby import content.minigame.barbassault.lobby.baSession import core.api.* import core.game.node.entity.Entity @@ -23,6 +24,7 @@ import core.tools.Log import core.tools.secondsToTicks import core.tools.ticksToSeconds import org.rs09.consts.Components +import org.rs09.consts.Items import org.rs09.consts.Music.ASSAULT_AND_BATTERY_604 import org.rs09.consts.NPCs @@ -42,7 +44,7 @@ Player enum class BarbassaultState { PARTY_CREATION, STARTING, IN_ARENA,FORFEIT, COMPLETE, END } -class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea { +class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutListener, MapArea { constructor(region: DynamicRegion, activity: BarbassaultActivity) : this(activity) {this.region = region; this.base = region.baseLocation} lateinit var region: DynamicRegion @@ -55,6 +57,10 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea val groundItems = mutableListOf() val eggHopper = EggCannon.EggHopper() val scoreManager = BarbScoreManager() + val eventBus = BarbAssEventBus() + val npcCaps = SpawnCaps(4,4,2,2)//wave 1 + + fun beginStartingPhase() { if (state != BarbassaultState.PARTY_CREATION) return @@ -64,6 +70,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea } private fun enterArena() { + state = BarbassaultState.IN_ARENA region.setMusicId(ASSAULT_AND_BATTERY_604) @@ -90,6 +97,13 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea // https://www.youtube.com/watch?v=vYKbHNZn80w destroyArena() } + override fun logout(player: Player) { + if (!defineAreaBorders().any { it.insideBorder(player.location) }) { + return + } + + player.properties.teleportLocation = Location.create(2593, 5264, 0) + } private fun startCountdown() { var ticks = secondsToTicks(12) @@ -120,20 +134,60 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea } }) } + private fun InitEvents(){ + + eventBus.register(BarbAssEvent.NPCDied::class.java) { event -> + val tracker = scoreManager.trackerFor(event.killer) + val npcRoleType = event.npc.getAttribute("barbass-role") + when (npcRoleType) { + BarbRole.ATTACKER -> tracker.attackerStats.rangersKilled++ + BarbRole.DEFENDER -> tracker.defenderStats.runnersKilled++ + BarbRole.HEALER -> tracker.healerStats.healersKilled++ + else -> {} + } + } + + eventBus.register(BarbAssEvent.EggCollected::class.java) { event -> + val tracker = scoreManager.trackerFor(event.player) + tracker.collectorStats.eggsCollected += event.count + } + + eventBus.register(BarbAssEvent.HitpointsHealed::class.java) { event -> + val tracker = scoreManager.trackerFor(event.player) + tracker.healerStats.hitpointsReplenished += event.amount + } + + eventBus.register(BarbAssEvent.WrongPoisonUsed::class.java) { event -> + val tracker = scoreManager.trackerFor(event.player) + tracker.healerStats.wrongPoisonUsed++ + } + } private inner class GamePulse : Pulse(1) { private var roleCallTicks = secondsToTicks(30) - + private var waveSpawns = secondsToTicks(6) override fun pulse(): Boolean { + if (state != BarbassaultState.IN_ARENA) return true + if (state == BarbassaultState.FORFEIT){ + eventBus.clear() + scoreManager.resetAll() + BarbassaultLobby.TeamToLobby(team,team.wave) + + } + if (state == BarbassaultState.COMPLETE){ + //advance to next wave lobby! + BarbassaultLobby.TeamToLobby(team,team.wave+1) + } + + eventBus.processEvents() roleCallTicks-- if (roleCallTicks <= 0) { rollNewRoleCalls() roleCallTicks = secondsToTicks(30) } - // TODO: wave logic, timers, win/lose - // reSpawnItems + return false } } @@ -142,21 +196,31 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea region = DynamicRegion.create(BarbassaultGameArea.BA_ARENA.MAIN) base = region.baseLocation zone.register(getRegionBorders(region.id)) + + region.toggleMulticombat() spawnEggCannons() } private fun destroyArena() { - if (!this::region.isInitialized) return + if (!this::region.isInitialized) return zone.unregister(getRegionBorders(region.id)) region.clear() + region.flagInactive() + } private fun handleLogout(player: Player) { + state = BarbassaultState.FORFEIT + zone.cleanItems(player,arrayOf(Item(ATTACKER_ICON),Item(DEFENDER_ICON),Item(COLLECTOR_ICON),Item(HEALER_ICON))) + + region.remove(player) team.removePlayer(player) - player.properties.teleportLocation = Location.create(2593, 5264, 0) player.locks.unlockTeleport() + // player.properties.teleportLocation = Location.create(2593, 5264, 0) + player.location = Location.create(2593, 5264, 0) if (team.allPlayers().isEmpty()) { + player.properties.teleportLocation = Location.create(2593, 5264, 0) endSession() } } @@ -170,6 +234,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea ZoneRestriction.TELEPORT ) + override fun areaEnter(entity: Entity) { log(this::class.java, Log.FINE, "ENTERED Barbassault Arena") @@ -186,13 +251,20 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) : MapArea override fun areaLeave(entity: Entity, logout: Boolean) { log(this::class.java, Log.FINE, "LEFT Barbassault Arena") + super.areaLeave(entity, logout) var player = entity as Player //exitMiniGame(player) removeTimer(player, "teleblock") + zone.cleanItems(player,arrayOf(Item(ATTACKER_ICON),Item(DEFENDER_ICON),Item(COLLECTOR_ICON),Item(HEALER_ICON))) + //region.remove(player) + clearLogoutListener(player, "ba-logout") + + destroyArena() } fun sessionNPCSpawn(id: Int, location: Location, direction: Direction, vararg objects: Any): NPC? { val npc = NPC.create(id, location, direction, *objects) npc.init() + sessionNpcs.add(npc) return npc } diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt index ee678d5e3..2e5152b15 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt @@ -1,7 +1,11 @@ package content.minigame.barbassault.arenas.monsters +import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BaHornSystem +import content.minigame.barbassault.arena.BarbAssEvent +import content.minigame.barbassault.lobby.baSession import core.api.* +import core.game.container.impl.EquipmentContainer import core.game.node.entity.Entity import core.game.node.entity.combat.BattleState import core.game.node.entity.combat.CombatStyle @@ -34,10 +38,60 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { return 0.0 } override fun beforeDamageReceived(self: NPC, attacker: Entity, state: BattleState) { + attacker as Player val firstBefore = state.estimatedHit - //I should set a value in my players session instead of scanning the inventory every time for a horn. - state.estimatedHit = firstBefore + (BaHornSystem.HornHelper.getAttackerHorn(attacker as Player)?.ordinal?.plus(1) ?: 0) +1 + //I should read my players level instead of scanning the inventory every time for a horn. + var toDamage = firstBefore + (BaHornSystem.HornHelper.getAttackerHorn(attacker)?.ordinal?.plus(1) ?: 0) +1 + //if wrong attack recoil 1 damage to player. + val attackStyle = attacker.properties.attackStyle.style + val combatType = state.style + when (combatType) { + CombatStyle.MELEE -> { + when (attackStyle) { + 0 -> sendMessage(attacker, "Melee: Accurate") + 1 -> sendMessage(attacker, "Melee: Aggressive") + 2 -> sendMessage(attacker, "Melee: Controlled") + 3 -> sendMessage(attacker, "Melee: Defensive") + else -> { + toDamage = 0 + sendMessage(attacker, "Melee: Unknown style") + } + } + } + + CombatStyle.RANGE -> { + val arrows = attacker.equipment.get(EquipmentContainer.SLOT_ARROWS).name + sendMessage(attacker, "Ranged attack, Arrows: $arrows") + + val ammunitionID = state.ammunition.itemId + when(ammunitionID){ + 882 -> "bronze" + 884 -> "iron" + 886 -> "steel" + 888 -> "mithril" + else -> { + toDamage = 0 + sendMessage(attacker,"Only allowed to use provided arrows.")} + } + + + } + CombatStyle.MAGIC -> { + val castSpell = state.spell.spellId + when(castSpell){ + 1,10,24,45 -> sendMessage(attacker, "Magic spell: Air") + 4,14,27,48 -> sendMessage(attacker, "Magic spell: Water") + 6,17,66,52 -> sendMessage(attacker, "Magic spell: Earth") + 8,20,38,55 -> sendMessage(attacker, "Magic spell: Fire") + else -> { + toDamage = 0 + } + } + } + } + + state.estimatedHit = toDamage } override fun onCreation (self: NPC) { self.setAttribute("agg_radius",2) @@ -47,10 +101,20 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { self.isAggressive = true self.isRespawn = false + self.setAttribute("barbass-role", BarbRole.ATTACKER) + self.definition.combatDistance = 1 self.properties.combatPulse.style = CombatStyle.MELEE } + + override fun onDeathFinished(self: NPC, killer: Entity) { + super.onDeathFinished(self, killer) + val player = killer as? Player ?: return + val session = player.baSession ?: return + + session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) + } } //Shrink death 5098 diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceHealerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceHealerNPC.kt index 37f77737c..bb8922302 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceHealerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceHealerNPC.kt @@ -1,8 +1,12 @@ package content.minigame.barbassault.arena.monsters +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.arena.BarbAssEvent +import content.minigame.barbassault.lobby.baSession import core.game.node.entity.Entity import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior +import core.game.node.entity.player.Player import org.rs09.consts.NPCs val PENANCE_HEALER_IDS = listOf( @@ -22,8 +26,20 @@ class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS.toIntArray()) { return 0.0 } + + override fun onCreation (self: NPC) { + self.setAttribute("barbass-role", BarbRole.HEALER) + } //sendMessage(player,"that's the wrong type of poisoned food to use! Penalty!") + override fun onDeathFinished(self: NPC, killer: Entity) { + super.onDeathFinished(self, killer) + val player = killer as? Player ?: return + val session = player.baSession ?: return + + session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) + } + } /* diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceQueenNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceQueenNPC.kt index 1fe23f59f..ae54b9612 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceQueenNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceQueenNPC.kt @@ -8,6 +8,7 @@ import core.game.node.entity.npc.NPCBehavior import core.game.node.entity.player.Player import org.rs09.consts.NPCs +//.configureBossData() class PenanceQueenNPC : NPCBehavior(NPCs.PENANCE_QUEEN_5247){ override fun canBeAttackedBy(self: NPC, attacker: Entity, style: CombatStyle, shouldSendMessage: Boolean): Boolean { if (attacker is Player ) { @@ -19,6 +20,7 @@ class PenanceQueenNPC : NPCBehavior(NPCs.PENANCE_QUEEN_5247){ override fun getXpMultiplier(self: NPC, attacker: Entity): Double { return 0.0 } + } diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt index 3e6ad2706..b7df12f1c 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt @@ -1,5 +1,8 @@ package content.minigame.barbassault.arena.monsters +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.arena.BarbAssEvent +import content.minigame.barbassault.lobby.baSession import core.api.* import core.api.getItemFromEquipment import core.game.node.entity.Entity @@ -40,10 +43,20 @@ class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { self.walkRadius = 64 self.isAggressive = true + self.setAttribute("barbass-role",BarbRole.ATTACKER) + self.definition.combatDistance = 8 self.properties.combatPulse.style = CombatStyle.RANGE } + override fun onDeathFinished(self: NPC, killer: Entity) { + super.onDeathFinished(self, killer) + val player = killer as? Player ?: return + val session = player.baSession ?: return + + session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) + } + } diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt index fcfa6b04d..6907e2d12 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt @@ -1,14 +1,17 @@ package content.minigame.barbassault.arena.monsters +import content.minigame.barbassault.BarbRole import core.game.node.entity.Entity import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior import core.game.world.map.Location import org.rs09.consts.NPCs import content.minigame.barbassault.arena.* +import content.minigame.barbassault.lobby.baSession import core.api.forceWalk import core.api.removeGroundItem import core.api.sendChat +import core.game.node.entity.player.Player import core.game.node.item.GroundItem import core.game.node.item.GroundItemManager @@ -38,6 +41,8 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { self.walkRadius = 22 self.destinationFlag + self.setAttribute("barbass-role", BarbRole.DEFENDER) + } override fun tick(self: NPC): Boolean { @@ -59,8 +64,13 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { fun seekFood(){ } + override fun onDeathFinished(self: NPC, killer: Entity) { + super.onDeathFinished(self, killer) + val player = killer as? Player ?: return + val session = player.baSession ?: return - + session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) + } } diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt index b58bf681e..4bea7e04c 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt @@ -23,8 +23,9 @@ import org.rs09.consts.Items import org.rs09.consts.Scenery import org.rs09.consts.Sounds - +//https://www.youtube.com/watch?v=0d5I97HLUEs ending of video shows we are allowed capes in lap but not wave rooms //"-- Next wave no longer starting" +// The game ended early because one of your team-mated died. private var activity: BarbassaultActivity? = null class BarbassaultLobby : InteractionListener, MapArea { @@ -302,18 +303,25 @@ class BarbassaultLobby : InteractionListener, MapArea { } } } - fun waveAdvance(player: Player) { - val wave = player.getAttribute("barbass:wave", 1) - if (wave in 1..waveLobbies.size) { - val targetLobby = waveLobbies[wave] - teleport(player, targetLobby.randomWalkableLoc) - if (wave == 10) {player.setAttribute("/save:barbass:wave", 1)} - } else { - println("Invalid wave number: $wave") - } - } companion object { + fun TeamToLobby(team: BarbTeam, wave: Int) { + if (wave in 1..waveLobbies.size) { + val targetLobby = waveLobbies[wave] + for (player in team.allPlayers()) { + teleport(player, targetLobby.randomWalkableLoc) + } + } + } + fun waveAdvance(player: Player) { + val wave = player.getAttribute("barbass:wave", 1) + if (wave in 1..waveLobbies.size) { + if (wave == 10) {player.setAttribute("/save:barbass:wave", 1)} + } else { + println("Invalid wave number: $wave") + } + } + // Locations val QUICK_START: ZoneBorders = ZoneBorders(2595, 5278, 2610, 5271, 0) val MAIN_LOBBY: ZoneBorders = ZoneBorders(2588, 5266, 2597, 5261, 0) From 330be28db9fd96ef3568ebc27696446f92c34acb Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 9 Feb 2026 00:19:02 -0500 Subject: [PATCH 027/123] Penance fighters only take damage from called attack style. --- .../barbassault/arena/BarbassEvent.kt | 3 + .../arena/monsters/PenanceFighterNPC.kt | 71 +++++++++---------- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassEvent.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassEvent.kt index 8689376cb..b07d0223a 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassEvent.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassEvent.kt @@ -8,6 +8,9 @@ sealed class BarbAssEvent { data class EggCollected(val player: Player, val count: Int) : BarbAssEvent() data class HitpointsHealed(val player: Player, val amount: Int) : BarbAssEvent() data class WrongPoisonUsed(val player: Player) : BarbAssEvent() + data class WrongAttack(val self: NPC, val attacker: Player) : BarbAssEvent() { + + } } class BarbAssEventBus { diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt index 2e5152b15..f95d520fb 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt @@ -3,12 +3,13 @@ package content.minigame.barbassault.arenas.monsters import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BaHornSystem import content.minigame.barbassault.arena.BarbAssEvent +import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.lobby.baSession import core.api.* -import core.game.container.impl.EquipmentContainer import core.game.node.entity.Entity import core.game.node.entity.combat.BattleState import core.game.node.entity.combat.CombatStyle +import core.game.node.entity.combat.ImpactHandler import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior import core.game.node.entity.player.Player @@ -39,58 +40,56 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { } override fun beforeDamageReceived(self: NPC, attacker: Entity, state: BattleState) { attacker as Player + val currentCall = attacker.baSession?.roleCalls?.get(BarbRole.COLLECTOR)?.toCall //STYLE_1 to STYLE_4 + val firstBefore = state.estimatedHit //I should read my players level instead of scanning the inventory every time for a horn. var toDamage = firstBefore + (BaHornSystem.HornHelper.getAttackerHorn(attacker)?.ordinal?.plus(1) ?: 0) +1 //if wrong attack recoil 1 damage to player. - val attackStyle = attacker.properties.attackStyle.style val combatType = state.style - when (combatType) { - CombatStyle.MELEE -> { - when (attackStyle) { - 0 -> sendMessage(attacker, "Melee: Accurate") - 1 -> sendMessage(attacker, "Melee: Aggressive") - 2 -> sendMessage(attacker, "Melee: Controlled") - 3 -> sendMessage(attacker, "Melee: Defensive") - else -> { - toDamage = 0 - sendMessage(attacker, "Melee: Unknown style") - } + val usedStyle: Comparable<*>? = when (combatType) { + CombatStyle.MELEE -> { + when (attacker.properties.attackStyle.style) { + 2 -> BarbassaultSession.AttackerStyle.STYLE_1 // Controlled + 0 -> BarbassaultSession.AttackerStyle.STYLE_2 // Accurate + 1 -> BarbassaultSession.AttackerStyle.STYLE_3 // Aggressive + 3 -> BarbassaultSession.AttackerStyle.STYLE_4 // Defensive + else -> null } } CombatStyle.RANGE -> { - val arrows = attacker.equipment.get(EquipmentContainer.SLOT_ARROWS).name - sendMessage(attacker, "Ranged attack, Arrows: $arrows") - - val ammunitionID = state.ammunition.itemId - when(ammunitionID){ - 882 -> "bronze" - 884 -> "iron" - 886 -> "steel" - 888 -> "mithril" - else -> { - toDamage = 0 - sendMessage(attacker,"Only allowed to use provided arrows.")} + when (state.ammunition.itemId) { + 882 -> BarbassaultSession.AttackerStyle.STYLE_1 // bronze + 884 -> BarbassaultSession.AttackerStyle.STYLE_2 // iron + 886 -> BarbassaultSession.AttackerStyle.STYLE_3 // steel + 888 -> BarbassaultSession.AttackerStyle.STYLE_4 // mithril + else -> null } - - } + CombatStyle.MAGIC -> { - val castSpell = state.spell.spellId - when(castSpell){ - 1,10,24,45 -> sendMessage(attacker, "Magic spell: Air") - 4,14,27,48 -> sendMessage(attacker, "Magic spell: Water") - 6,17,66,52 -> sendMessage(attacker, "Magic spell: Earth") - 8,20,38,55 -> sendMessage(attacker, "Magic spell: Fire") - else -> { - toDamage = 0 - } + when (state.spell.spellId) { + 1, 10, 24, 45 -> BarbassaultSession.AttackerStyle.STYLE_1 // Air + 4, 14, 27, 48 -> BarbassaultSession.AttackerStyle.STYLE_2 // Water + 6, 17, 66, 52 -> BarbassaultSession.AttackerStyle.STYLE_3 // Earth + 8, 20, 38, 55 -> BarbassaultSession.AttackerStyle.STYLE_4 // Fire + else -> null } } + else -> null } + if (usedStyle == null) {sendMessage(attacker, "That attack is not allowed.")} + + if (usedStyle != currentCall) { + sendMessage(attacker, "Wrong attack style!"); toDamage = 0; + impact(attacker,1) + attacker.baSession?.eventBus?.emit(BarbAssEvent.WrongAttack(self,attacker)) + } + + state.estimatedHit = toDamage } override fun onCreation (self: NPC) { From 3753824222839344d8d8a67feae70dc3976cf2ed Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 9 Feb 2026 09:47:13 -0500 Subject: [PATCH 028/123] Todo notes, Rangers only attackable by call and graphic for projectile. --- .../barbassault/BarbassaultListeners.kt | 19 +++--- .../barbassault/arena/BaHornSystem.kt | 1 + .../barbassault/arena/BarbassaultGameArea.kt | 55 ++++++++++++++++++ .../barbassault/arena/BarbassaultSession.kt | 13 ----- .../arena/monsters/PenanceFighterNPC.kt | 58 ++----------------- .../arena/monsters/PenanceRangerNPC.kt | 12 +++- 6 files changed, 82 insertions(+), 76 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt b/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt index a375e9fa5..db4c25f49 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt @@ -18,35 +18,38 @@ const val BARBASSAULT_ACCEPT_ROLE_492 = 492 const val BARBASSAULT_SELECT_ROLE_493 = 493 class BarbassaultListeners : InteractionListener { - //CommandSet(Privilege.ADMIN) override fun defineListeners() { on(Scenery.LADDER_20226, IntType.SCENERY, "Climb-down") { player, _ -> // if (GameWorld.settings?.enable_barbassault != true) return@on false + //todo players are allowed to wear capes in to the lobby, But not the Wave Rooms + //todo No summonings in lobby if (joinError(player)) return@on true val loc = Location(2593 , 5261 ) - teleport(player, loc) // find ladder code latter + teleport(player, loc) + //todo ladder code or add climb down animation. return@on true } on(Scenery.LADDER_20227, IntType.SCENERY, "Climb-up") { player, _ -> - //Remove Roster/scroll + //todo remove BarbassItems IE: Scroll val loc = Location(2535 , 3572 ) player.inventory.removeAll(Items.SCROLL_10512) teleport(player, loc) // find ladder code latter + //todo ladder code or climb up animation return@on true } on(Scenery.BLACKBOARD_20134, IntType.SCENERY, "Read") { player, _ -> //emote 5354 - //Remove Roster/scroll - // openOverlay(player, Components.BARBASSAULT_PLAYERSTAT_490) + //todo Are we suppose to animate while reading? updateBlackBoard(player) return@on true } on(NPCs.COMMANDER_CONNAD_5029, IntType.NPC, "Get-rewards") { player, _ -> + //todo remove this varbit? I think I was testing. setVarbit(player, 3256, 200) player.interfaceManager.open(Component(Components.BARBASSAULT_REWARD_SHOP_491)) return@on true @@ -57,13 +60,12 @@ class BarbassaultListeners : InteractionListener { return@on true } - } private fun capeCheck(player: Player): String? { val wornCape = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id ?: -1 - - if (wornCape != -1) return "No CAPES!!!" // find correct message + if (wornCape != -1) return "Capes are not permitted." + //todo find authentic "no capes allowed" message return null } private fun forbiddenItemsCheck(player: Player): String? { @@ -84,6 +86,7 @@ class BarbassaultListeners : InteractionListener { Items.STEAM_RUNE_4694, Items.SOUL_RUNE_566, Items.NATURE_RUNE_561 + //todo extend not allowed items list. //add food //add ammo //summoning pouches diff --git a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt index 930983898..21290889c 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt @@ -129,6 +129,7 @@ class BaHornSystem : InteractionListener { object HornHelper { //I should set a value in my players session instead of scanning the inventory every time for a horn. + //multiple horn IDs suggest retail would use a gearSet check to apply a damage modifier. fun getAttackerHorn(player: Player): AttackerHorn? = AttackerHorn.values().firstOrNull { inInventory(player, it.itemId) } fun getHealerHorn(player: Player): HealerHorn? = HealerHorn.values().firstOrNull { inInventory(player, it.itemId) } fun getCollectorBag(player: Player): CollectionBag? = CollectionBag.values().firstOrNull { inInventory(player, it.itemId) } diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 5e0dc6052..a25ec3dab 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -1,5 +1,6 @@ package content.minigame.barbassault.arena +import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultTut import content.minigame.barbassault.CaptainCainDialogue.Companion.TORSO_PRICE import content.minigame.barbassault.arena.BaHornSystem.HornHelper.getHealerHorn @@ -11,12 +12,16 @@ import content.minigame.barbassault.getBarbLevels import content.minigame.barbassault.lobby.baSession import core.api.* import core.game.component.Component +import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle import core.game.interaction.IntType import core.game.interaction.InteractionListener import core.game.interaction.QueueStrength import core.game.node.Node import core.game.node.entity.Entity +import core.game.node.entity.combat.BattleState +import core.game.node.entity.combat.CombatStyle +import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.node.entity.player.info.LogType import core.game.node.entity.player.info.PlayerMonitor @@ -341,6 +346,7 @@ fun exitMiniGame(player: Player) { Items.POISONED_WORMS_10540,Items.POISONED_TOFU_10539,Items.POISONED_MEAT_10541, ) // removeAll(player, barbassItems) + // region.clean //todo should probably make sure familiars can't smuggle items out //(player.familiarManager.familiar as? BurdenBeast)?.container?.removeAll(barbassItems)//just in case someone smuggles a pet in. @@ -348,6 +354,55 @@ fun exitMiniGame(player: Player) { //or lost game Send back to wave room } +object BarbAssaultCombat { + fun resolveAttackerStyle( attacker: Player, state: BattleState ): AttackerStyle? { + return when (state.style) { + CombatStyle.MELEE -> when (attacker.properties.attackStyle.style) { + 2 -> AttackerStyle.STYLE_1 // Controlled + 0 -> AttackerStyle.STYLE_2 // Accurate + 1 -> AttackerStyle.STYLE_3 // Aggressive + 3 -> AttackerStyle.STYLE_4 // Defensive + else -> null + } + CombatStyle.RANGE -> when (state.ammunition.itemId) { + 882 -> AttackerStyle.STYLE_1 // bronze + 884 -> AttackerStyle.STYLE_2 // iron + 886 -> AttackerStyle.STYLE_3 // steel + 888 -> AttackerStyle.STYLE_4 // mithril + else -> null + } + CombatStyle.MAGIC -> when (state.spell.spellId) { + 1, 10, 24, 45 -> AttackerStyle.STYLE_1 // Air + 4, 14, 27, 48 -> AttackerStyle.STYLE_2 // Water + 6, 17, 66, 52 -> AttackerStyle.STYLE_3 // Earth + 8, 20, 38, 55 -> AttackerStyle.STYLE_4 // Fire + else -> null + } + else -> null + } + } + + fun applyAttackValidation( self: NPC, attacker: Player, state: BattleState ): Int { + val session = attacker.baSession ?: return state.estimatedHit + val currentCall = session.roleCalls[BarbRole.COLLECTOR]?.toCall + //todo read my players level instead of scanning the inventory every time for a horn. + + val hornBonus = (BaHornSystem.HornHelper.getAttackerHorn(attacker)?.ordinal ?: -1) + 2 + val damage = state.estimatedHit + hornBonus + val usedStyle = resolveAttackerStyle(attacker, state) + + if (usedStyle == null) { sendMessage(attacker, "That attack is not allowed."); return 0 } + + if (usedStyle != currentCall) { + sendMessage(attacker, "Wrong attack style!") + impact(attacker, 1) + session.eventBus.emit(BarbAssEvent.WrongAttack(self, attacker)) + return 0 + } + return damage + } +} + diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 73e6cfccd..9062b8376 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -28,19 +28,6 @@ import org.rs09.consts.Items import org.rs09.consts.Music.ASSAULT_AND_BATTERY_604 import org.rs09.consts.NPCs -/* -Player -└─ attribute "baSession" : BarbassaultSession? - ├─ state : BarbassaultState (STARTING, IN_ARENA, END) - ├─ arena : DynamicRegion / MapArea - ├─ lifecycle : start → play → end - └─ team : BarbTeam? - ├─ leader : Player - ├─ slots : List - └─ recruit : PendingRecruit? - └─ player : Player - └─ role : BarbRole? -*/ enum class BarbassaultState { PARTY_CREATION, STARTING, IN_ARENA,FORFEIT, COMPLETE, END } diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt index f95d520fb..e0ea33ca4 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt @@ -3,6 +3,7 @@ package content.minigame.barbassault.arenas.monsters import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BaHornSystem import content.minigame.barbassault.arena.BarbAssEvent +import content.minigame.barbassault.arena.BarbAssaultCombat import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.lobby.baSession import core.api.* @@ -38,62 +39,13 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { override fun getXpMultiplier(self: NPC, attacker: Entity): Double { return 0.0 } - override fun beforeDamageReceived(self: NPC, attacker: Entity, state: BattleState) { + override fun beforeDamageReceived( self: NPC, attacker: Entity, state: BattleState) { attacker as Player - val currentCall = attacker.baSession?.roleCalls?.get(BarbRole.COLLECTOR)?.toCall //STYLE_1 to STYLE_4 - - val firstBefore = state.estimatedHit - //I should read my players level instead of scanning the inventory every time for a horn. - var toDamage = firstBefore + (BaHornSystem.HornHelper.getAttackerHorn(attacker)?.ordinal?.plus(1) ?: 0) +1 - //if wrong attack recoil 1 damage to player. - val combatType = state.style - val usedStyle: Comparable<*>? = when (combatType) { - - CombatStyle.MELEE -> { - when (attacker.properties.attackStyle.style) { - 2 -> BarbassaultSession.AttackerStyle.STYLE_1 // Controlled - 0 -> BarbassaultSession.AttackerStyle.STYLE_2 // Accurate - 1 -> BarbassaultSession.AttackerStyle.STYLE_3 // Aggressive - 3 -> BarbassaultSession.AttackerStyle.STYLE_4 // Defensive - else -> null - } - } - - CombatStyle.RANGE -> { - when (state.ammunition.itemId) { - 882 -> BarbassaultSession.AttackerStyle.STYLE_1 // bronze - 884 -> BarbassaultSession.AttackerStyle.STYLE_2 // iron - 886 -> BarbassaultSession.AttackerStyle.STYLE_3 // steel - 888 -> BarbassaultSession.AttackerStyle.STYLE_4 // mithril - else -> null - } - } - - CombatStyle.MAGIC -> { - when (state.spell.spellId) { - 1, 10, 24, 45 -> BarbassaultSession.AttackerStyle.STYLE_1 // Air - 4, 14, 27, 48 -> BarbassaultSession.AttackerStyle.STYLE_2 // Water - 6, 17, 66, 52 -> BarbassaultSession.AttackerStyle.STYLE_3 // Earth - 8, 20, 38, 55 -> BarbassaultSession.AttackerStyle.STYLE_4 // Fire - else -> null - } - } - else -> null - } - - if (usedStyle == null) {sendMessage(attacker, "That attack is not allowed.")} - - if (usedStyle != currentCall) { - sendMessage(attacker, "Wrong attack style!"); toDamage = 0; - impact(attacker,1) - attacker.baSession?.eventBus?.emit(BarbAssEvent.WrongAttack(self,attacker)) - } - - - state.estimatedHit = toDamage + state.estimatedHit = BarbAssaultCombat.applyAttackValidation( self, attacker, state ) } + override fun onCreation (self: NPC) { - self.setAttribute("agg_radius",2) + self.setAttribute("agg_radius",6) self.isWalks = true self.isNeverWalks = false self.walkRadius = 64 diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt index b7df12f1c..dd581cf46 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt @@ -2,14 +2,17 @@ package content.minigame.barbassault.arena.monsters import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent +import content.minigame.barbassault.arena.BarbAssaultCombat import content.minigame.barbassault.lobby.baSession import core.api.* import core.api.getItemFromEquipment import core.game.node.entity.Entity +import core.game.node.entity.combat.BattleState import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior import core.game.node.entity.player.Player +import core.game.world.update.flag.context.Graphics import org.rs09.consts.NPCs //20730 = rangers cast val PENANCE_RANGER_IDS = listOf( @@ -27,22 +30,27 @@ val PENANCE_RANGER_IDS = listOf( class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { override fun canBeAttackedBy(self: NPC, attacker: Entity, style: CombatStyle, shouldSendMessage: Boolean): Boolean { if (attacker is Player && getItemFromEquipment(attacker, EquipmentSlot.CAPE)?.id != 10556) { + //todo make list of not allowed weapons to attack IE: Crystal bow, Karils Crossbow sendMessage(attacker, "These Penance are immune to your attacks.") return false } return true } + override fun beforeDamageReceived( self: NPC, attacker: Entity, state: BattleState) { + attacker as Player + state.estimatedHit = BarbAssaultCombat.applyAttackValidation( self, attacker, state ) + } override fun getXpMultiplier(self: NPC, attacker: Entity): Double { return 0.0 } override fun onCreation (self: NPC) { - self.setAttribute("agg_radius",2) + self.setAttribute("agg_radius",6) self.isWalks = true self.isNeverWalks = false self.walkRadius = 64 self.isAggressive = true - + self.definition.combatGraphics[1] = Graphics(866, 25, 0) self.setAttribute("barbass-role",BarbRole.ATTACKER) self.definition.combatDistance = 8 From d37b7437e011750bf712dd2b1e006892c89b4fb9 Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 20 Feb 2026 13:30:02 -0500 Subject: [PATCH 029/123] ELEMENTAL_RUNE and CATALYTIC_RUNE useable for standard spells --- .../src/main/content/global/skill/magic/modern/AirSpell.java | 5 +++++ .../main/content/global/skill/magic/modern/EarthSpell.java | 5 +++++ .../main/content/global/skill/magic/modern/FireSpell.java | 5 +++++ .../main/content/global/skill/magic/modern/WaterSpell.java | 5 +++++ .../src/main/core/game/node/entity/combat/spell/Runes.java | 2 +- 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/Server/src/main/content/global/skill/magic/modern/AirSpell.java b/Server/src/main/content/global/skill/magic/modern/AirSpell.java index 07cfcf182..3222279e7 100644 --- a/Server/src/main/content/global/skill/magic/modern/AirSpell.java +++ b/Server/src/main/content/global/skill/magic/modern/AirSpell.java @@ -122,6 +122,11 @@ public final class AirSpell extends CombatSpell { SpellBook.MODERN.register(10, new AirSpell(SpellType.BOLT, 17, 13.5, Sounds.WINDBOLT_CAST_AND_FIRE_218, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CHAOS_RUNE.getItem(1), Runes.AIR_RUNE.getItem(2))); SpellBook.MODERN.register(24, new AirSpell(SpellType.BLAST, 41, 25.5, Sounds.WINDBLAST_CAST_AND_FIRE_216, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.DEATH_RUNE.getItem(1), Runes.AIR_RUNE.getItem(3))); SpellBook.MODERN.register(45, new AirSpell(SpellType.WAVE, 62, 36.0, Sounds.WINDWAVE_CAST_AND_FIRE_222, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.BLOOD_RUNE.getItem(1), Runes.AIR_RUNE.getItem(5))); + //CATALYTIC_RUNE and ELEMENTAL_RUNE ( Mini Games) + SpellBook.MODERN.register(1, new AirSpell(SpellType.STRIKE, 1, 5.5, Sounds.WINDSTRIKE_CAST_AND_FIRE_220, STRIKE_START, STRIKE_PROJECTILE, STRIKE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(1))); + SpellBook.MODERN.register(10, new AirSpell(SpellType.BOLT, 17, 13.5, Sounds.WINDBOLT_CAST_AND_FIRE_218, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(2))); + SpellBook.MODERN.register(24, new AirSpell(SpellType.BLAST, 41, 25.5, Sounds.WINDBLAST_CAST_AND_FIRE_216, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(3))); + SpellBook.MODERN.register(45, new AirSpell(SpellType.WAVE, 62, 36.0, Sounds.WINDWAVE_CAST_AND_FIRE_222, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(5))); return this; } } diff --git a/Server/src/main/content/global/skill/magic/modern/EarthSpell.java b/Server/src/main/content/global/skill/magic/modern/EarthSpell.java index 3da9d5083..92fab0bf1 100644 --- a/Server/src/main/content/global/skill/magic/modern/EarthSpell.java +++ b/Server/src/main/content/global/skill/magic/modern/EarthSpell.java @@ -122,6 +122,11 @@ public final class EarthSpell extends CombatSpell { SpellBook.MODERN.register(17, new EarthSpell(SpellType.BOLT, 29, 19.5, Sounds.EARTHBOLT_CAST_AND_FIRE_130, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CHAOS_RUNE.getItem(1), Runes.EARTH_RUNE.getItem(3), Runes.AIR_RUNE.getItem(2))); SpellBook.MODERN.register(33, new EarthSpell(SpellType.BLAST, 53, 31.5, Sounds.EARTHBLAST_CAST_AND_FIRE_128, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.DEATH_RUNE.getItem(1), Runes.EARTH_RUNE.getItem(4), Runes.AIR_RUNE.getItem(3))); SpellBook.MODERN.register(52, new EarthSpell(SpellType.WAVE, 70, 40.0, Sounds.EARTHWAVE_CAST_AND_FIRE_134, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.BLOOD_RUNE.getItem(1), Runes.EARTH_RUNE.getItem(7), Runes.AIR_RUNE.getItem(5))); + //CATALYTIC_RUNE and ELEMENTAL_RUNE ( Mini Games) + SpellBook.MODERN.register(6, new EarthSpell(SpellType.STRIKE, 9, 9.5, Sounds.EARTHSTRIKE_CAST_AND_FIRE_132, STRIKE_START, STRIKE_PROJECTILE, STRIKE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(2), Runes.ELEMENTAL_RUNE.getItem(1))); + SpellBook.MODERN.register(17, new EarthSpell(SpellType.BOLT, 29, 19.5, Sounds.EARTHBOLT_CAST_AND_FIRE_130, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(3), Runes.ELEMENTAL_RUNE.getItem(2))); + SpellBook.MODERN.register(33, new EarthSpell(SpellType.BLAST, 53, 31.5, Sounds.EARTHBLAST_CAST_AND_FIRE_128, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(4), Runes.ELEMENTAL_RUNE.getItem(3))); + SpellBook.MODERN.register(52, new EarthSpell(SpellType.WAVE, 70, 40.0, Sounds.EARTHWAVE_CAST_AND_FIRE_134, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(7), Runes.ELEMENTAL_RUNE.getItem(5))); return this; } diff --git a/Server/src/main/content/global/skill/magic/modern/FireSpell.java b/Server/src/main/content/global/skill/magic/modern/FireSpell.java index 7feb995bd..85b893212 100644 --- a/Server/src/main/content/global/skill/magic/modern/FireSpell.java +++ b/Server/src/main/content/global/skill/magic/modern/FireSpell.java @@ -123,6 +123,11 @@ public final class FireSpell extends CombatSpell { SpellBook.MODERN.register(20, new FireSpell(SpellType.BOLT, 35, 22.5, Sounds.FIREBOLT_CAST_AND_FIRE_157, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CHAOS_RUNE.getItem(1), Runes.FIRE_RUNE.getItem(4), Runes.AIR_RUNE.getItem(3))); SpellBook.MODERN.register(38, new FireSpell(SpellType.BLAST, 59, 34.5, Sounds.FIREBLAST_CAST_AND_FIRE_155, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.DEATH_RUNE.getItem(1), Runes.FIRE_RUNE.getItem(5), Runes.AIR_RUNE.getItem(4))); SpellBook.MODERN.register(55, new FireSpell(SpellType.WAVE, 75, 42.5, Sounds.FIREWAVE_CAST_AND_FIRE_162, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.BLOOD_RUNE.getItem(1), Runes.FIRE_RUNE.getItem(7), Runes.AIR_RUNE.getItem(5))); + //CATALYTIC_RUNE and ELEMENTAL_RUNE ( Mini Games) + SpellBook.MODERN.register(8, new FireSpell(SpellType.STRIKE, 13, 11.5, Sounds.FIRESTRIKE_CAST_AND_FIRE_160, STRIKE_START, STRIKE_PROJECTILE, STRIKE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(3), Runes.ELEMENTAL_RUNE.getItem(2))); + SpellBook.MODERN.register(20, new FireSpell(SpellType.BOLT, 35, 22.5, Sounds.FIREBOLT_CAST_AND_FIRE_157, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(4), Runes.ELEMENTAL_RUNE.getItem(3))); + SpellBook.MODERN.register(38, new FireSpell(SpellType.BLAST, 59, 34.5, Sounds.FIREBLAST_CAST_AND_FIRE_155, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(5), Runes.ELEMENTAL_RUNE.getItem(4))); + SpellBook.MODERN.register(55, new FireSpell(SpellType.WAVE, 75, 42.5, Sounds.FIREWAVE_CAST_AND_FIRE_162, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(7), Runes.ELEMENTAL_RUNE.getItem(5))); return this; } diff --git a/Server/src/main/content/global/skill/magic/modern/WaterSpell.java b/Server/src/main/content/global/skill/magic/modern/WaterSpell.java index 8096c4038..9b6897a0b 100644 --- a/Server/src/main/content/global/skill/magic/modern/WaterSpell.java +++ b/Server/src/main/content/global/skill/magic/modern/WaterSpell.java @@ -122,6 +122,11 @@ public final class WaterSpell extends CombatSpell { SpellBook.MODERN.register(14, new WaterSpell(SpellType.BOLT, 23, 16.5, Sounds.WATERBOLT_CAST_AND_FIRE_209, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CHAOS_RUNE.getItem(1), Runes.WATER_RUNE.getItem(2), Runes.AIR_RUNE.getItem(2))); SpellBook.MODERN.register(27, new WaterSpell(SpellType.BLAST, 47, 28.5, Sounds.WATERBLAST_CAST_AND_FIRE_207, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.DEATH_RUNE.getItem(1), Runes.WATER_RUNE.getItem(3), Runes.AIR_RUNE.getItem(3))); SpellBook.MODERN.register(48, new WaterSpell(SpellType.WAVE, 65, 37.5, Sounds.WATERWAVE_CAST_AND_FIRE_213, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.BLOOD_RUNE.getItem(1), Runes.WATER_RUNE.getItem(7), Runes.AIR_RUNE.getItem(5))); + //CATALYTIC_RUNE and ELEMENTAL_RUNE ( Mini Games) + SpellBook.MODERN.register(4, new WaterSpell(SpellType.STRIKE, 5, 7.5, Sounds.WATERSTRIKE_CAST_AND_FIRE_211, STRIKE_START, STRIKE_PROJECTILE, STRIKE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(1))); + SpellBook.MODERN.register(14, new WaterSpell(SpellType.BOLT, 23, 16.5, Sounds.WATERBOLT_CAST_AND_FIRE_209, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(2), Runes.ELEMENTAL_RUNE.getItem(2))); + SpellBook.MODERN.register(27, new WaterSpell(SpellType.BLAST, 47, 28.5, Sounds.WATERBLAST_CAST_AND_FIRE_207, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(3), Runes.ELEMENTAL_RUNE.getItem(3))); + SpellBook.MODERN.register(48, new WaterSpell(SpellType.WAVE, 65, 37.5, Sounds.WATERWAVE_CAST_AND_FIRE_213, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(7), Runes.ELEMENTAL_RUNE.getItem(5))); return this; } diff --git a/Server/src/main/core/game/node/entity/combat/spell/Runes.java b/Server/src/main/core/game/node/entity/combat/spell/Runes.java index dacb28c27..b16090b76 100644 --- a/Server/src/main/core/game/node/entity/combat/spell/Runes.java +++ b/Server/src/main/core/game/node/entity/combat/spell/Runes.java @@ -8,7 +8,7 @@ import org.rs09.consts.Items; * @author 'Vexia */ public enum Runes { - AIR_RUNE(556), WATER_RUNE(555), EARTH_RUNE(557), FIRE_RUNE(554), MIND_RUNE(558), NATURE_RUNE(561), CHAOS_RUNE(562), DEATH_RUNE(560), COSMIC_RUNE(564), BLOOD_RUNE(565), SOUL_RUNE(566), ASTRAL_RUNE(9075), LAW_RUNE(563), BODY_RUNE(559), SARADOMIN_STAFF(2415), GUTHIX_STAFF(2416), ZAMORAK_STAFF(2417), ZURIELS_STAFF(13867); + AIR_RUNE(556), WATER_RUNE(555), EARTH_RUNE(557), FIRE_RUNE(554), MIND_RUNE(558), NATURE_RUNE(561), CHAOS_RUNE(562), DEATH_RUNE(560), COSMIC_RUNE(564), BLOOD_RUNE(565), SOUL_RUNE(566), ASTRAL_RUNE(9075), LAW_RUNE(563), BODY_RUNE(559), SARADOMIN_STAFF(2415), GUTHIX_STAFF(2416), ZAMORAK_STAFF(2417), ZURIELS_STAFF(13867),ELEMENTAL_RUNE(12850),CATALYTIC_RUNE(12851); /** * Constructs a new {@code Runes} {@code Object}. From a185935221a9a2ba6025613ba48fd76bfff9b01d Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 20 Feb 2026 13:58:12 -0500 Subject: [PATCH 030/123] Revert "ELEMENTAL_RUNE and CATALYTIC_RUNE useable for standard spells" This reverts commit d37b7437e011750bf712dd2b1e006892c89b4fb9. --- .../src/main/content/global/skill/magic/modern/AirSpell.java | 5 ----- .../main/content/global/skill/magic/modern/EarthSpell.java | 5 ----- .../main/content/global/skill/magic/modern/FireSpell.java | 5 ----- .../main/content/global/skill/magic/modern/WaterSpell.java | 5 ----- .../src/main/core/game/node/entity/combat/spell/Runes.java | 2 +- 5 files changed, 1 insertion(+), 21 deletions(-) diff --git a/Server/src/main/content/global/skill/magic/modern/AirSpell.java b/Server/src/main/content/global/skill/magic/modern/AirSpell.java index 3222279e7..07cfcf182 100644 --- a/Server/src/main/content/global/skill/magic/modern/AirSpell.java +++ b/Server/src/main/content/global/skill/magic/modern/AirSpell.java @@ -122,11 +122,6 @@ public final class AirSpell extends CombatSpell { SpellBook.MODERN.register(10, new AirSpell(SpellType.BOLT, 17, 13.5, Sounds.WINDBOLT_CAST_AND_FIRE_218, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CHAOS_RUNE.getItem(1), Runes.AIR_RUNE.getItem(2))); SpellBook.MODERN.register(24, new AirSpell(SpellType.BLAST, 41, 25.5, Sounds.WINDBLAST_CAST_AND_FIRE_216, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.DEATH_RUNE.getItem(1), Runes.AIR_RUNE.getItem(3))); SpellBook.MODERN.register(45, new AirSpell(SpellType.WAVE, 62, 36.0, Sounds.WINDWAVE_CAST_AND_FIRE_222, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.BLOOD_RUNE.getItem(1), Runes.AIR_RUNE.getItem(5))); - //CATALYTIC_RUNE and ELEMENTAL_RUNE ( Mini Games) - SpellBook.MODERN.register(1, new AirSpell(SpellType.STRIKE, 1, 5.5, Sounds.WINDSTRIKE_CAST_AND_FIRE_220, STRIKE_START, STRIKE_PROJECTILE, STRIKE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(1))); - SpellBook.MODERN.register(10, new AirSpell(SpellType.BOLT, 17, 13.5, Sounds.WINDBOLT_CAST_AND_FIRE_218, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(2))); - SpellBook.MODERN.register(24, new AirSpell(SpellType.BLAST, 41, 25.5, Sounds.WINDBLAST_CAST_AND_FIRE_216, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(3))); - SpellBook.MODERN.register(45, new AirSpell(SpellType.WAVE, 62, 36.0, Sounds.WINDWAVE_CAST_AND_FIRE_222, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(5))); return this; } } diff --git a/Server/src/main/content/global/skill/magic/modern/EarthSpell.java b/Server/src/main/content/global/skill/magic/modern/EarthSpell.java index 92fab0bf1..3da9d5083 100644 --- a/Server/src/main/content/global/skill/magic/modern/EarthSpell.java +++ b/Server/src/main/content/global/skill/magic/modern/EarthSpell.java @@ -122,11 +122,6 @@ public final class EarthSpell extends CombatSpell { SpellBook.MODERN.register(17, new EarthSpell(SpellType.BOLT, 29, 19.5, Sounds.EARTHBOLT_CAST_AND_FIRE_130, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CHAOS_RUNE.getItem(1), Runes.EARTH_RUNE.getItem(3), Runes.AIR_RUNE.getItem(2))); SpellBook.MODERN.register(33, new EarthSpell(SpellType.BLAST, 53, 31.5, Sounds.EARTHBLAST_CAST_AND_FIRE_128, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.DEATH_RUNE.getItem(1), Runes.EARTH_RUNE.getItem(4), Runes.AIR_RUNE.getItem(3))); SpellBook.MODERN.register(52, new EarthSpell(SpellType.WAVE, 70, 40.0, Sounds.EARTHWAVE_CAST_AND_FIRE_134, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.BLOOD_RUNE.getItem(1), Runes.EARTH_RUNE.getItem(7), Runes.AIR_RUNE.getItem(5))); - //CATALYTIC_RUNE and ELEMENTAL_RUNE ( Mini Games) - SpellBook.MODERN.register(6, new EarthSpell(SpellType.STRIKE, 9, 9.5, Sounds.EARTHSTRIKE_CAST_AND_FIRE_132, STRIKE_START, STRIKE_PROJECTILE, STRIKE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(2), Runes.ELEMENTAL_RUNE.getItem(1))); - SpellBook.MODERN.register(17, new EarthSpell(SpellType.BOLT, 29, 19.5, Sounds.EARTHBOLT_CAST_AND_FIRE_130, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(3), Runes.ELEMENTAL_RUNE.getItem(2))); - SpellBook.MODERN.register(33, new EarthSpell(SpellType.BLAST, 53, 31.5, Sounds.EARTHBLAST_CAST_AND_FIRE_128, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(4), Runes.ELEMENTAL_RUNE.getItem(3))); - SpellBook.MODERN.register(52, new EarthSpell(SpellType.WAVE, 70, 40.0, Sounds.EARTHWAVE_CAST_AND_FIRE_134, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(7), Runes.ELEMENTAL_RUNE.getItem(5))); return this; } diff --git a/Server/src/main/content/global/skill/magic/modern/FireSpell.java b/Server/src/main/content/global/skill/magic/modern/FireSpell.java index 85b893212..7feb995bd 100644 --- a/Server/src/main/content/global/skill/magic/modern/FireSpell.java +++ b/Server/src/main/content/global/skill/magic/modern/FireSpell.java @@ -123,11 +123,6 @@ public final class FireSpell extends CombatSpell { SpellBook.MODERN.register(20, new FireSpell(SpellType.BOLT, 35, 22.5, Sounds.FIREBOLT_CAST_AND_FIRE_157, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CHAOS_RUNE.getItem(1), Runes.FIRE_RUNE.getItem(4), Runes.AIR_RUNE.getItem(3))); SpellBook.MODERN.register(38, new FireSpell(SpellType.BLAST, 59, 34.5, Sounds.FIREBLAST_CAST_AND_FIRE_155, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.DEATH_RUNE.getItem(1), Runes.FIRE_RUNE.getItem(5), Runes.AIR_RUNE.getItem(4))); SpellBook.MODERN.register(55, new FireSpell(SpellType.WAVE, 75, 42.5, Sounds.FIREWAVE_CAST_AND_FIRE_162, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.BLOOD_RUNE.getItem(1), Runes.FIRE_RUNE.getItem(7), Runes.AIR_RUNE.getItem(5))); - //CATALYTIC_RUNE and ELEMENTAL_RUNE ( Mini Games) - SpellBook.MODERN.register(8, new FireSpell(SpellType.STRIKE, 13, 11.5, Sounds.FIRESTRIKE_CAST_AND_FIRE_160, STRIKE_START, STRIKE_PROJECTILE, STRIKE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(3), Runes.ELEMENTAL_RUNE.getItem(2))); - SpellBook.MODERN.register(20, new FireSpell(SpellType.BOLT, 35, 22.5, Sounds.FIREBOLT_CAST_AND_FIRE_157, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(4), Runes.ELEMENTAL_RUNE.getItem(3))); - SpellBook.MODERN.register(38, new FireSpell(SpellType.BLAST, 59, 34.5, Sounds.FIREBLAST_CAST_AND_FIRE_155, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(5), Runes.ELEMENTAL_RUNE.getItem(4))); - SpellBook.MODERN.register(55, new FireSpell(SpellType.WAVE, 75, 42.5, Sounds.FIREWAVE_CAST_AND_FIRE_162, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(7), Runes.ELEMENTAL_RUNE.getItem(5))); return this; } diff --git a/Server/src/main/content/global/skill/magic/modern/WaterSpell.java b/Server/src/main/content/global/skill/magic/modern/WaterSpell.java index 9b6897a0b..8096c4038 100644 --- a/Server/src/main/content/global/skill/magic/modern/WaterSpell.java +++ b/Server/src/main/content/global/skill/magic/modern/WaterSpell.java @@ -122,11 +122,6 @@ public final class WaterSpell extends CombatSpell { SpellBook.MODERN.register(14, new WaterSpell(SpellType.BOLT, 23, 16.5, Sounds.WATERBOLT_CAST_AND_FIRE_209, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CHAOS_RUNE.getItem(1), Runes.WATER_RUNE.getItem(2), Runes.AIR_RUNE.getItem(2))); SpellBook.MODERN.register(27, new WaterSpell(SpellType.BLAST, 47, 28.5, Sounds.WATERBLAST_CAST_AND_FIRE_207, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.DEATH_RUNE.getItem(1), Runes.WATER_RUNE.getItem(3), Runes.AIR_RUNE.getItem(3))); SpellBook.MODERN.register(48, new WaterSpell(SpellType.WAVE, 65, 37.5, Sounds.WATERWAVE_CAST_AND_FIRE_213, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.BLOOD_RUNE.getItem(1), Runes.WATER_RUNE.getItem(7), Runes.AIR_RUNE.getItem(5))); - //CATALYTIC_RUNE and ELEMENTAL_RUNE ( Mini Games) - SpellBook.MODERN.register(4, new WaterSpell(SpellType.STRIKE, 5, 7.5, Sounds.WATERSTRIKE_CAST_AND_FIRE_211, STRIKE_START, STRIKE_PROJECTILE, STRIKE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(1))); - SpellBook.MODERN.register(14, new WaterSpell(SpellType.BOLT, 23, 16.5, Sounds.WATERBOLT_CAST_AND_FIRE_209, BOLT_START, BOLT_PROJECTILE, BOLT_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(2), Runes.ELEMENTAL_RUNE.getItem(2))); - SpellBook.MODERN.register(27, new WaterSpell(SpellType.BLAST, 47, 28.5, Sounds.WATERBLAST_CAST_AND_FIRE_207, BLAST_START, BLAST_PROJECTILE, BLAST_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(3), Runes.ELEMENTAL_RUNE.getItem(3))); - SpellBook.MODERN.register(48, new WaterSpell(SpellType.WAVE, 65, 37.5, Sounds.WATERWAVE_CAST_AND_FIRE_213, WAVE_START, WAVE_PROJECTILE, WAVE_END, Runes.CATALYTIC_RUNE.getItem(1), Runes.ELEMENTAL_RUNE.getItem(7), Runes.ELEMENTAL_RUNE.getItem(5))); return this; } diff --git a/Server/src/main/core/game/node/entity/combat/spell/Runes.java b/Server/src/main/core/game/node/entity/combat/spell/Runes.java index b16090b76..dacb28c27 100644 --- a/Server/src/main/core/game/node/entity/combat/spell/Runes.java +++ b/Server/src/main/core/game/node/entity/combat/spell/Runes.java @@ -8,7 +8,7 @@ import org.rs09.consts.Items; * @author 'Vexia */ public enum Runes { - AIR_RUNE(556), WATER_RUNE(555), EARTH_RUNE(557), FIRE_RUNE(554), MIND_RUNE(558), NATURE_RUNE(561), CHAOS_RUNE(562), DEATH_RUNE(560), COSMIC_RUNE(564), BLOOD_RUNE(565), SOUL_RUNE(566), ASTRAL_RUNE(9075), LAW_RUNE(563), BODY_RUNE(559), SARADOMIN_STAFF(2415), GUTHIX_STAFF(2416), ZAMORAK_STAFF(2417), ZURIELS_STAFF(13867),ELEMENTAL_RUNE(12850),CATALYTIC_RUNE(12851); + AIR_RUNE(556), WATER_RUNE(555), EARTH_RUNE(557), FIRE_RUNE(554), MIND_RUNE(558), NATURE_RUNE(561), CHAOS_RUNE(562), DEATH_RUNE(560), COSMIC_RUNE(564), BLOOD_RUNE(565), SOUL_RUNE(566), ASTRAL_RUNE(9075), LAW_RUNE(563), BODY_RUNE(559), SARADOMIN_STAFF(2415), GUTHIX_STAFF(2416), ZAMORAK_STAFF(2417), ZURIELS_STAFF(13867); /** * Constructs a new {@code Runes} {@code Object}. From d53e90e70252cb7012f52686234e66066683f4d4 Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 20 Feb 2026 14:02:42 -0500 Subject: [PATCH 031/123] more barbass stuff --- .../minigame/barbassault/Barbassault.kt | 9 +++ .../barbassault/BarbassaultListeners.kt | 28 +++++---- .../barbassault/arena/BarbassaultGameArea.kt | 58 ++++++------------- .../barbassault/arena/BarbassaultSession.kt | 35 ++++++++--- .../barbassault/lobby/BarbassaultLobby.kt | 22 ++++--- 5 files changed, 80 insertions(+), 72 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/Barbassault.kt b/Server/src/main/content/minigame/barbassault/Barbassault.kt index a1ed33e0e..fc2f070c5 100644 --- a/Server/src/main/content/minigame/barbassault/Barbassault.kt +++ b/Server/src/main/content/minigame/barbassault/Barbassault.kt @@ -1,5 +1,8 @@ package content.minigame.barbassault +import content.minigame.barbassault.arena.ATTACKER_ICON +import content.minigame.barbassault.arena.HEALER_ICON +import core.api.removeItem import core.game.node.entity.player.Player enum class BarbRole { ATTACKER, COLLECTOR,DEFENDER, HEALER } @@ -173,4 +176,10 @@ fun BarbAssaultPoints.getPoints(role: BarbRole): Int = when (role) { BarbRole.COLLECTOR -> col BarbRole.DEFENDER -> def BarbRole.HEALER -> heal +} + +fun removeBarbassItems(player: Player){ + //check if we were in ba-instance last. if so then remove all BA Items (Horns icons runes,arrows) + removeItem(player, intArrayOf(ATTACKER_ICON, HEALER_ICON)) + } \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt b/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt index db4c25f49..a7a63fda7 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt @@ -4,6 +4,7 @@ package content.minigame.barbassault import content.minigame.barbassault.BarbassBlackBoard.Companion.updateBlackBoard import core.api.* import core.game.component.Component +import core.game.global.action.ClimbActionHandler import core.game.interaction.IntType import core.game.interaction.InteractionListener import core.game.interaction.InterfaceListener @@ -20,24 +21,23 @@ const val BARBASSAULT_SELECT_ROLE_493 = 493 class BarbassaultListeners : InteractionListener { override fun defineListeners() { + // addClimbDest(Location.create(2593, 5261, 0),Location.create(2593, 5261, 0)) on(Scenery.LADDER_20226, IntType.SCENERY, "Climb-down") { player, _ -> // if (GameWorld.settings?.enable_barbassault != true) return@on false //todo players are allowed to wear capes in to the lobby, But not the Wave Rooms //todo No summonings in lobby if (joinError(player)) return@on true val loc = Location(2593 , 5261 ) - teleport(player, loc) - //todo ladder code or add climb down animation. + ClimbActionHandler.climb(player, ClimbActionHandler.CLIMB_DOWN, loc) + face(player,Location(2593, 5262)) return@on true } on(Scenery.LADDER_20227, IntType.SCENERY, "Climb-up") { player, _ -> - //todo remove BarbassItems IE: Scroll val loc = Location(2535 , 3572 ) player.inventory.removeAll(Items.SCROLL_10512) - teleport(player, loc) // find ladder code latter - //todo ladder code or climb up animation - + ClimbActionHandler.climb(player, ClimbActionHandler.CLIMB_UP, loc) + face(player,Location(2533, 3572)) return@on true } @@ -62,12 +62,6 @@ class BarbassaultListeners : InteractionListener { } - private fun capeCheck(player: Player): String? { - val wornCape = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id ?: -1 - if (wornCape != -1) return "Capes are not permitted." - //todo find authentic "no capes allowed" message - return null - } private fun forbiddenItemsCheck(player: Player): String? { val forbiddenRunes = setOf( Items.AIR_RUNE_556, @@ -96,14 +90,18 @@ class BarbassaultListeners : InteractionListener { for (item in player.inventory.toArray()) { if (item != null) { if (item.id in forbiddenRunes) { - return "no outside runes" + //todo find source for this message + return "You cannot take your own runes, ammunition, or potions into the game." } } } return null } private fun familiarCheck(player: Player): String? { - // if has pet or familiar, not allowed to enter. + if(player.familiarManager.hasFamiliar()) { + //todo find correct message + return "You cannot take your follower into the game." + } return null } @@ -111,7 +109,7 @@ class BarbassaultListeners : InteractionListener { private fun joinError(player: Player): Boolean { - val errorMessage = capeCheck(player) ?: forbiddenItemsCheck(player) ?: familiarCheck(player) ?: return false + val errorMessage = forbiddenItemsCheck(player) ?: familiarCheck(player) ?: return false player.sendMessage(errorMessage).also { return true } } } diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index a25ec3dab..3ff3f5d98 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -2,8 +2,8 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultTut -import content.minigame.barbassault.CaptainCainDialogue.Companion.TORSO_PRICE import content.minigame.barbassault.arena.BaHornSystem.HornHelper.getHealerHorn +import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadEggHopper import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadHopperEggs @@ -11,28 +11,23 @@ import content.minigame.barbassault.arena.scenery.EggCannon.Companion.showEggHop import content.minigame.barbassault.getBarbLevels import content.minigame.barbassault.lobby.baSession import core.api.* -import core.game.component.Component -import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle - +import core.game.global.action.ClimbActionHandler +import core.game.global.action.DropListener import core.game.interaction.IntType import core.game.interaction.InteractionListener -import core.game.interaction.QueueStrength import core.game.node.Node import core.game.node.entity.Entity import core.game.node.entity.combat.BattleState import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player -import core.game.node.entity.player.info.LogType -import core.game.node.entity.player.info.PlayerMonitor -import core.game.node.entity.player.info.login.PlayerParser -import core.game.node.item.GroundItemManager +import core.game.node.item.GroundItem import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.GameWorld +import core.game.world.GameWorld.Pulser import core.game.world.map.Direction import core.game.world.map.Location -import core.game.world.map.RegionManager import core.game.world.map.zone.ZoneBorders import core.game.world.update.flag.context.Animation import core.tools.Log @@ -161,13 +156,14 @@ class BarbassaultGameArea : InteractionListener, MapArea { playerChangeScenery(player,5417,node,Scenery.PENANCE_CAVE_20238,4) return@on true } - on(Scenery.LADDER_20194, IntType.SCENERY, "Climb-up") { player, _ -> sendDialogueOptions(player, "Are you sure you want to leave?", "Yes", "No") addDialogueAction(player) { _, buttonId -> if (buttonId == 2) { - //endGame - teleport(player, Location(2593 , 5261 )) + val animationDuration = animationDuration(ClimbActionHandler.CLIMB_UP) + player.lock(animationDuration) + player.animate(ClimbActionHandler.CLIMB_UP) + Pulser.submit(object : Pulse(animationDuration) { override fun pulse(): Boolean {player.baSession?.forfet(); return true }}) } } return@on true @@ -237,18 +233,22 @@ class BarbassaultGameArea : InteractionListener, MapArea { //if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id != DEFENDER_ICON) { return@on false } // only a defender can interact with lure food. val groundLureItem = findClosestLure(node.location) - removeLure(groundLureItem!!) + + if (groundLureItem == null) return@on true + removeLure(groundLureItem) + return@on true } on(LureItems, IntType.ITEM, "Drop") { player, node -> val dropedItem = node as Item + DropListener.drop(player, node.asItem()) sendMessage(player,dropedItem.name) //addItemNode(dropedItem,player.location,true) - lureDrop(player,dropedItem) - - //DropListener.drop(player,dropedItem) + val gItem = player.getAttribute("droppedItem:${node.id}") + addItemNode(gItem,player.location,true) + //DropListener.drop(player, dropedItem) //with values for good and bad. //structure table with intent of being looped trough by a runner to check distance, compared to it. //and to check if its good or bad when they get to that one. @@ -257,30 +257,6 @@ class BarbassaultGameArea : InteractionListener, MapArea { } } - private fun lureDrop(player: Player,item:Item){ - //val gi = GroundItemManager.create(GroundItem(item.dropItem,player.location,-1,null)) - //todo ask for help with this. - queueScript(player, strength = QueueStrength.SOFT) { - val current = player.inventory.get(item.slot) - if (current == null || current !== item) { - return@queueScript stopExecuting(player) - } - if (player.inventory.replace(null, item.slot) !== item) { - PlayerMonitor.log(player, LogType.DUPE_ALERT, "Potential exploit attempt when player ${player.name} tried to drop ${item.amount}x ${item.id}. The item has been lost and will need to be refunded to the player, but how did they get this to happen? @Barbass") - return@queueScript stopExecuting(player) - } - - val droppedItem = item.dropItem - val gi = GroundItemManager.create(droppedItem, player.location, player) - setAttribute(player, "droppedItem:${droppedItem.id}", getWorldTicks() + 2) - PlayerParser.save(player) - gi.forceVisible = true - addItemNode(gi,player.location,true) - - return@queueScript stopExecuting(player) - } - - } fun removeAll(player: Player, items: List, container: Container = Container.INVENTORY): Boolean { var removedAny = false diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 9062b8376..666af74fd 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -5,6 +5,7 @@ import content.minigame.barbassault.BarbassaultActivity import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.GloryHorn import content.minigame.barbassault.lobby.BarbTeam +import content.minigame.barbassault.lobby.BarbTeamManager import content.minigame.barbassault.lobby.BarbassaultLobby import content.minigame.barbassault.lobby.baSession import core.api.* @@ -13,6 +14,7 @@ import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.node.item.GroundItem import core.game.node.item.Item +import core.game.system.communication.CommunicationInfo import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.map.Direction @@ -24,7 +26,6 @@ import core.tools.Log import core.tools.secondsToTicks import core.tools.ticksToSeconds import org.rs09.consts.Components -import org.rs09.consts.Items import org.rs09.consts.Music.ASSAULT_AND_BATTERY_604 import org.rs09.consts.NPCs @@ -38,7 +39,6 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi lateinit var base: Location var currentWave = 1 var state: BarbassaultState = BarbassaultState.PARTY_CREATION - private set lateinit var team: BarbTeam val sessionNpcs = mutableListOf() val groundItems = mutableListOf() @@ -46,7 +46,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi val scoreManager = BarbScoreManager() val eventBus = BarbAssEventBus() val npcCaps = SpawnCaps(4,4,2,2)//wave 1 - + val endReason = "left" fun beginStartingPhase() { @@ -65,7 +65,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi player.baSession?.team?.getRoleForPlayer(player)?.let { equipBARoleIcon(player, it) } player.properties.teleportLocation = team.spawnLocationFor(player) //base.transform(36, 24, 0) - registerLogoutListener(player, "ba-logout") { handleLogout(player) } //todo make sure this works + registerLogoutListener(player, "ba-logout") { handleLogout(player) } } GameWorld.Pulser.submit(GamePulse()) @@ -149,22 +149,39 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi tracker.healerStats.wrongPoisonUsed++ } } - + fun forfet(){ + state = BarbassaultState.FORFEIT + } private inner class GamePulse : Pulse(1) { private var roleCallTicks = secondsToTicks(30) private var waveSpawns = secondsToTicks(6) override fun pulse(): Boolean { - if (state != BarbassaultState.IN_ARENA) return true + //if (state != BarbassaultState.IN_ARENA) return true if (state == BarbassaultState.FORFEIT){ + //team.getLeader()?.let { sendMessage(it.player,"end") } eventBus.clear() scoreManager.resetAll() BarbassaultLobby.TeamToLobby(team,team.wave) + state = BarbassaultState.PARTY_CREATION + for(player in team.allPlayers()) { + closeInterface(player) + openOverlay(player, 256) + sendMessage(player,"The game ended early because one of your team-mates $endReason.") + BarbTeamManager.updateTeam(player.baSession?.team!!) + } + return true } if (state == BarbassaultState.COMPLETE){ - //advance to next wave lobby! BarbassaultLobby.TeamToLobby(team,team.wave+1) + state = BarbassaultState.PARTY_CREATION + for(player in team.allPlayers()) { + closeInterface(player) + openOverlay(player, 256) + BarbTeamManager.updateTeam(player.baSession?.team!!) + } + return true // we do not have auto start next wave in 2009 } eventBus.processEvents() @@ -203,10 +220,10 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi region.remove(player) team.removePlayer(player) player.locks.unlockTeleport() - // player.properties.teleportLocation = Location.create(2593, 5264, 0) + player.location = Location.create(2593, 5264, 0) - if (team.allPlayers().isEmpty()) { + if (team.allPlayers().isEmpty()) { // might be redundant player.properties.teleportLocation = Location.create(2593, 5264, 0) endSession() } diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt index 4bea7e04c..1d06f57f2 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt @@ -59,13 +59,21 @@ class BarbassaultLobby : InteractionListener, MapArea { for ((index, lobby) in waveLobbies.withIndex()) { if (lobby.insideBorder(location)) { if (lobby != MAIN_LOBBY) { // MAIN_LOBBY should not assign a wave number - entity.setAttribute("/save:barbass:wave", index + 1) + entity.setAttribute("/save:barbass:wave", index ) } return } } } - + private fun capeCheck(player: Player): Boolean { + val wornCape = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id ?: -1 + if (wornCape != -1) { + //todo find authentic "no capes allowed" message + sendMessage(player,"Capes are not permitted.") + return false + } + return true + } //attacker 20561 : ch8 //defender 20566 : ch10 //collector 20563 : ch13 @@ -149,6 +157,7 @@ class BarbassaultLobby : InteractionListener, MapArea { return@on true } on(Scenery.DOOR_20209, IntType.SCENERY, "Pass") { player, node -> + if (capeCheck(player)) {} if (!QUICK_START.insideBorder(player.location)){ player.setAttribute("/save:barbass:wave", 1) handlePlayerOptionDoor(player) { role -> @@ -298,7 +307,7 @@ class BarbassaultLobby : InteractionListener, MapArea { player.inventory.removeAll(Items.SCROLL_10512) } else { openOverlay(player, iface) - player.sendMessage("you enter wave ${BARBWAVEDOOR[node.id]}") + // player.sendMessage("you enter wave ${BARBWAVEDOOR[node.id]}") } } } @@ -306,7 +315,7 @@ class BarbassaultLobby : InteractionListener, MapArea { companion object { fun TeamToLobby(team: BarbTeam, wave: Int) { - if (wave in 1..waveLobbies.size) { + if (wave in 0..waveLobbies.size) { val targetLobby = waveLobbies[wave] for (player in team.allPlayers()) { teleport(player, targetLobby.randomWalkableLoc) @@ -356,10 +365,9 @@ class BarbassaultLobby : InteractionListener, MapArea { WAVE_LOBBY10 ) val waveLobbies = listOf( - WAVE_LOBBY1, WAVE_LOBBY2, WAVE_LOBBY3, WAVE_LOBBY4, + MAIN_LOBBY,WAVE_LOBBY1, WAVE_LOBBY2, WAVE_LOBBY3, WAVE_LOBBY4, WAVE_LOBBY5, WAVE_LOBBY6, WAVE_LOBBY7, WAVE_LOBBY8, - WAVE_LOBBY9, WAVE_LOBBY10, - MAIN_LOBBY + WAVE_LOBBY9, WAVE_LOBBY10 ) val BARBDOORS = intArrayOf( From 5861868677d0e0ef599ea229389dac71eaf82ccc Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 20 Feb 2026 22:39:20 -0500 Subject: [PATCH 032/123] Catalytic and Elemental runes to be show as useable runes. --- .../core/game/node/entity/player/link/SpellBookManager.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Server/src/main/core/game/node/entity/player/link/SpellBookManager.java b/Server/src/main/core/game/node/entity/player/link/SpellBookManager.java index 7e0e456c4..f8cabd581 100644 --- a/Server/src/main/core/game/node/entity/player/link/SpellBookManager.java +++ b/Server/src/main/core/game/node/entity/player/link/SpellBookManager.java @@ -9,6 +9,7 @@ import java.util.Map; import java.util.Objects; import static core.api.ContentAPIKt.setVarbit; +import static core.api.ContentAPIKt.setVarp; /** * Represents a managing class of a players spell book. @@ -45,6 +46,8 @@ public final class SpellBookManager { public void update(Player player) { player.getInterfaceManager().openTab(new Component(spellBook)); setVarbit(player, 357, Objects.requireNonNull(SpellBook.forInterface(spellBook)).ordinal()); + // Allows Catalytic and Elemental runes to be show as useable runes. + setVarp(player,1331, 1); } /** From c2f369b5204abc842c83ff62e70d84e0a12f2120 Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 20 Feb 2026 22:43:44 -0500 Subject: [PATCH 033/123] Attacker machine Take-runes to use Catalytic and Elemental runes --- .../minigame/barbassault/arena/scenery/ItemMachine.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt index 487e7192f..f0d4237a0 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt @@ -17,11 +17,10 @@ import org.rs09.consts.Scenery class ItemMachine: InteractionListener { //Attacker// - //val TAKE_RUNES = intArrayOf(Items.CATALYTIC_RUNE_12851,Items.ELEMENTAL_RUNE_12850) + val TAKE_RUNES = intArrayOf(Items.CATALYTIC_RUNE_12851,Items.ELEMENTAL_RUNE_12850) //suppose to use Catalyic and Elemental runes private val TAKE_ARROWS = intArrayOf(Items.BRONZE_ARROW_882, Items.IRON_ARROW_884, Items.STEEL_ARROW_886, Items.MITHRIL_ARROW_888) - private val TAKE_RUNES = intArrayOf(Items.AIR_RUNE_556, Items.WATER_RUNE_555, Items.EARTH_RUNE_557, Items.FIRE_RUNE_554, - Items.MIND_RUNE_558, Items.CHAOS_RUNE_562, Items.DEATH_RUNE_560, Items.BLOOD_RUNE_565) + //private val TAKE_RUNES = intArrayOf(Items.AIR_RUNE_556, Items.WATER_RUNE_555, Items.EARTH_RUNE_557, Items.FIRE_RUNE_554, Items.MIND_RUNE_558, Items.CHAOS_RUNE_562, Items.DEATH_RUNE_560, Items.BLOOD_RUNE_565) //Defender// private val TAKE_WORMS = Items.WORMS_10515 private val TAKE_CRACKERS = Items.CRACKERS_10513 From 7b02c8833867d7494afa9c08976522f939946fd3 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 22 Feb 2026 21:54:07 -0500 Subject: [PATCH 034/123] Safe death in Barbass Activity. --- .../minigame/barbassault/BarbAssaultArea.kt | 2 +- .../barbassault/arena/BarbassaultActivity.kt | 40 ++++++- .../barbassault/arena/BarbassaultGameArea.kt | 17 ++- .../barbassault/arena/BarbassaultSession.kt | 112 +++++++++++------- .../barbassault/lobby/BarbassaultLobby.kt | 8 +- 5 files changed, 114 insertions(+), 65 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BarbAssaultArea.kt b/Server/src/main/content/minigame/barbassault/BarbAssaultArea.kt index 7c95758ba..19a6c1f43 100644 --- a/Server/src/main/content/minigame/barbassault/BarbAssaultArea.kt +++ b/Server/src/main/content/minigame/barbassault/BarbAssaultArea.kt @@ -12,7 +12,7 @@ class BarbAssaultArea : MapArea { } override fun areaEnter(entity: Entity) { - zone.zoneType = ZoneType.BARBARIAN_ASSAULT.id + zone.zoneType = ZoneType.SAFE.id super.areaEnter(entity) } } \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt index c388acbc8..0478c35f5 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt @@ -2,24 +2,28 @@ package content.minigame.barbassault import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.BarbassaultState +import content.minigame.barbassault.lobby.BarbassaultLobby +import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.waveLobbies import content.minigame.barbassault.lobby.baSession -import content.minigame.barbassault.activity -import content.minigame.fishingtrawler.FishingTrawlerActivity +import core.api.log import core.api.sendMessage import core.game.activity.ActivityManager import core.game.activity.ActivityPlugin +import core.game.node.entity.Entity +import core.game.node.entity.impl.PulseManager import core.game.node.entity.player.Player import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.map.Location -import core.game.world.map.zone.ZoneBorders import core.game.world.map.zone.ZoneRestriction +import core.game.world.map.zone.ZoneType import core.plugin.Initializable +import core.tools.Log private val sessions = mutableListOf() private var activity: BarbassaultActivity? = null @Initializable -class BarbassaultActivity : ActivityPlugin("barbassault",true, true, true, +open class BarbassaultActivity : ActivityPlugin("barbassault",false, true, true, ZoneRestriction.CANNON, ZoneRestriction.FIRES, ZoneRestriction.FOLLOWERS, @@ -32,8 +36,12 @@ class BarbassaultActivity : ActivityPlugin("barbassault",true, true, true, override fun configure() { GameWorld.Pulser.submit(object : Pulse(10) { override fun pulse(): Boolean { - sessions.removeIf { - it.state == BarbassaultState.END + sessions.removeIf { session -> + val shouldRemove = session.state == BarbassaultState.END + if (shouldRemove) { + log(this.javaClass, Log.FINE, "Removing session: $session") + } + shouldRemove } return false } @@ -41,9 +49,24 @@ class BarbassaultActivity : ActivityPlugin("barbassault",true, true, true, } override fun start(player: Player?, login: Boolean, vararg args: Any?): Boolean { + super.start(player, login, *args) return true } + override fun enter(e: Entity?): Boolean { + return super.enter(e) + } + override fun death(e: Entity?, killer: Entity?): Boolean{ + val ename = e?.name + log(this.javaClass, Log.FINE,"$ename has died in Barbass") + if (e is Player) { + val session = e.baSession + session?.state = BarbassaultState.DEATH + e.getProperties().setTeleportLocation(null) + return true + } + return false + } override fun newInstance(p: Player?): ActivityPlugin { ActivityManager.register(this) return this @@ -53,6 +76,11 @@ class BarbassaultActivity : ActivityPlugin("barbassault",true, true, true, return Location.create(2593, 5264, 0) } + //override when !2265 passes (void recovery) + fun recover(player: Player){ + //removeBarbass items + //super.recover(player) + } companion object { diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 3ff3f5d98..3efcf89d8 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -81,26 +81,23 @@ class BarbassaultGameArea : InteractionListener, MapArea { override fun defineAreaBorders(): Array { //block standard teleports. - return arrayOf(getRegionBorders(7509)) - } - override fun areaEnter(entity: Entity) { - val player = entity as? Player ?: return - //change this for tut latter BarbassaultTut.BarbassTutNPCs.forEach { - npc -> npc.init() + npc -> npc.init() npc.isWalks = false } BarbassaultTut.spawnItems() - + return arrayOf(getRegionBorders(7509)) + } + override fun areaEnter(entity: Entity) { + //todo move tut maparea to barbtut + log(this::class.java, Log.FINE, "ENTERED BARBASS TUT") } override fun areaLeave(entity: Entity, logout: Boolean) { val player = entity as? Player ?: return - closeOverlay(player) - exitMiniGame(player) - log(this::class.java, Log.FINE, "EXITED BARBASS") + log(this::class.java, Log.FINE, "EXITED BARBASS TUT") } override fun defineListeners() { diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 666af74fd..8525d45ab 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -10,18 +10,18 @@ import content.minigame.barbassault.lobby.BarbassaultLobby import content.minigame.barbassault.lobby.baSession import core.api.* import core.game.node.entity.Entity +import core.game.node.entity.impl.PulseManager import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.node.item.GroundItem import core.game.node.item.Item -import core.game.system.communication.CommunicationInfo import core.game.system.task.Pulse import core.game.world.GameWorld +import core.game.world.GameWorld.Pulser import core.game.world.map.Direction import core.game.world.map.Location import core.game.world.map.build.DynamicRegion -import core.game.world.map.zone.ZoneBorders -import core.game.world.map.zone.ZoneRestriction +import core.game.world.map.zone.* import core.tools.Log import core.tools.secondsToTicks import core.tools.ticksToSeconds @@ -30,11 +30,10 @@ import org.rs09.consts.Music.ASSAULT_AND_BATTERY_604 import org.rs09.consts.NPCs -enum class BarbassaultState { PARTY_CREATION, STARTING, IN_ARENA,FORFEIT, COMPLETE, END } +enum class BarbassaultState { PARTY_CREATION, STARTING, IN_ARENA,FORFEIT, COMPLETE,DEATH, END } class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutListener, MapArea { constructor(region: DynamicRegion, activity: BarbassaultActivity) : this(activity) {this.region = region; this.base = region.baseLocation} - lateinit var region: DynamicRegion lateinit var base: Location var currentWave = 1 @@ -57,11 +56,11 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi } private fun enterArena() { - state = BarbassaultState.IN_ARENA region.setMusicId(ASSAULT_AND_BATTERY_604) for (player in team.allPlayers()) { + zone.enter(player) player.baSession?.team?.getRoleForPlayer(player)?.let { equipBARoleIcon(player, it) } player.properties.teleportLocation = team.spawnLocationFor(player) //base.transform(36, 24, 0) @@ -93,7 +92,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi } private fun startCountdown() { - var ticks = secondsToTicks(12) + var ticks = secondsToTicks(4)//60 team.allPlayers().forEach { openOverlay(it, 494);setInterfaceText(it, "60", 494, 0) } GameWorld.Pulser.submit(object : Pulse(1) { @@ -114,7 +113,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi team.allPlayers().forEach { setInterfaceText(it, display, 494, 0) - // it.sendMessage("Barbarian Assault starts in $display seconds.") + //it.sendMessage("Barbarian Assault starts in $display seconds.") } return false @@ -152,46 +151,61 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi fun forfet(){ state = BarbassaultState.FORFEIT } + + fun endGame(endReason: String){ + eventBus.clear() + scoreManager.resetAll() + BarbassaultLobby.TeamToLobby(team,team.wave) + state = BarbassaultState.PARTY_CREATION + for(player in team.allPlayers()) { + PulseManager.cancelDeathTask(player) + Pulser.submit(object : Pulse(1, player) { + override fun pulse(): Boolean { + player.getSkills().restore() + return true + } + }) + closeInterface(player) + openOverlay(player, 256) + sendMessage(player,"The game ended early because one of your team-mates $endReason.") + BarbTeamManager.updateTeam(player.baSession?.team!!) + } + } private inner class GamePulse : Pulse(1) { private var roleCallTicks = secondsToTicks(30) - private var waveSpawns = secondsToTicks(6) + private var waveSpawnTicks = secondsToTicks(6) override fun pulse(): Boolean { - - //if (state != BarbassaultState.IN_ARENA) return true - if (state == BarbassaultState.FORFEIT){ - //team.getLeader()?.let { sendMessage(it.player,"end") } - eventBus.clear() - scoreManager.resetAll() - BarbassaultLobby.TeamToLobby(team,team.wave) - state = BarbassaultState.PARTY_CREATION - for(player in team.allPlayers()) { - closeInterface(player) - openOverlay(player, 256) - sendMessage(player,"The game ended early because one of your team-mates $endReason.") - BarbTeamManager.updateTeam(player.baSession?.team!!) + //log(this.javaClass, Log.FINE,state.toString()) + when(state){ + BarbassaultState.IN_ARENA -> { + eventBus.processEvents() // process events such as npc died to scoring + roleCallTicks-- + waveSpawnTicks-- + if (roleCallTicks <= 0) { + rollNewRoleCalls() + roleCallTicks = secondsToTicks(30) + } + if (waveSpawnTicks <=0 ){ + //spawn npcs based on wave number + } } - return true - - } - if (state == BarbassaultState.COMPLETE){ - BarbassaultLobby.TeamToLobby(team,team.wave+1) - state = BarbassaultState.PARTY_CREATION - for(player in team.allPlayers()) { - closeInterface(player) - openOverlay(player, 256) - BarbTeamManager.updateTeam(player.baSession?.team!!) + BarbassaultState.FORFEIT -> {endGame("left"); return true} + BarbassaultState.COMPLETE -> { + log(this.javaClass, Log.FINE,state.toString()) + BarbassaultLobby.TeamToLobby(team,team.wave+1) + state = BarbassaultState.PARTY_CREATION + for(player in team.allPlayers()) { + PulseManager.cancelDeathTask(player) + closeInterface(player) + openOverlay(player, 256) + BarbTeamManager.updateTeam(player.baSession?.team!!) + } + return true // we do not have auto start next wave in 2009 } - return true // we do not have auto start next wave in 2009 + BarbassaultState.DEATH -> {endGame("died");return true} + BarbassaultState.END -> return true + else -> return false } - - eventBus.processEvents() - - roleCallTicks-- - if (roleCallTicks <= 0) { - rollNewRoleCalls() - roleCallTicks = secondsToTicks(30) - } - return false } } @@ -199,10 +213,13 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi private fun createArena() { region = DynamicRegion.create(BarbassaultGameArea.BA_ARENA.MAIN) base = region.baseLocation - zone.register(getRegionBorders(region.id)) + zone.zoneType = ZoneType.SAFE.id + region.regionZones.add(RegionZone(activity!!, region.borders)) //DONT FORGET THIS STUPID! + //activity?.zoneType = ZoneType.SAFE.id region.toggleMulticombat() spawnEggCannons() + zone.register(getRegionBorders(region.id)) } private fun destroyArena() { @@ -216,7 +233,6 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi private fun handleLogout(player: Player) { state = BarbassaultState.FORFEIT zone.cleanItems(player,arrayOf(Item(ATTACKER_ICON),Item(DEFENDER_ICON),Item(COLLECTOR_ICON),Item(HEALER_ICON))) - region.remove(player) team.removePlayer(player) player.locks.unlockTeleport() @@ -229,7 +245,11 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi } } - override fun defineAreaBorders(): Array = emptyArray() + override fun defineAreaBorders(): Array { + return arrayOf() + } + + override fun getRestrictions(): Array = arrayOf( ZoneRestriction.CANNON, @@ -246,7 +266,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi val waveNum = player.getAttribute("barbass:wave", 1) val wornIconId = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id val interfaceId = getIconInterfaceId(wornIconId ?: -1) - + //waveLobbies[waveNum].randomWalkableLoc interfaceId?.let { sendMessage(player, "----- Wave: $waveNum -----") openOverlay(player, it) diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt index 1d06f57f2..f3cb4d6e2 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt @@ -15,6 +15,7 @@ import core.game.interaction.IntType import core.game.interaction.InteractionListener import core.game.node.Node import core.game.node.entity.Entity +import core.game.node.entity.impl.PulseManager import core.game.node.entity.player.Player import core.game.node.item.Item import core.game.world.map.zone.ZoneBorders @@ -26,15 +27,17 @@ import org.rs09.consts.Sounds //https://www.youtube.com/watch?v=0d5I97HLUEs ending of video shows we are allowed capes in lap but not wave rooms //"-- Next wave no longer starting" // The game ended early because one of your team-mated died. -private var activity: BarbassaultActivity? = null +//private var activity: BarbassaultActivity? = null class BarbassaultLobby : InteractionListener, MapArea { override fun defineAreaBorders(): Array { return areaBorders } + override fun areaEnter(entity: Entity) { updatePlayerWave(entity) - // openOverlay(entity, 256) + openOverlay(entity as Player, 256) + PulseManager.cancelDeathTask(entity) // Components.BARBASSAULT_PLAYERSTAT_490 } @@ -318,6 +321,7 @@ class BarbassaultLobby : InteractionListener, MapArea { if (wave in 0..waveLobbies.size) { val targetLobby = waveLobbies[wave] for (player in team.allPlayers()) { + PulseManager.cancelDeathTask(player) teleport(player, targetLobby.randomWalkableLoc) } } From 99a91b16274919b0d7aec96b7cc745fe34a1cd00 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 22 Feb 2026 22:38:46 -0500 Subject: [PATCH 035/123] Barbteam is now created when a player Writes-Role option on scroll. --- .../minigame/barbassault/lobby/BarbTeam.kt | 1 + .../barbassault/lobby/BarbassaultLobby.kt | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt index eec927186..ba79aa86a 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt @@ -181,6 +181,7 @@ object BarbTeamManager { it.sendMessage("Your leader has left the room and therefore cleared the team!") it.removeAttribute("ba-session") updateCurrentTeam(it) + //todo Do not forget to remove this latter. if (session.state == BarbassaultState.STARTING) { it.properties.teleportLocation = Location.create(2593, 5264, 0) } diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt index f3cb4d6e2..7d3d4eb2a 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt @@ -188,9 +188,9 @@ class BarbassaultLobby : InteractionListener, MapArea { when (buttonId) { 2 -> { if (player.inventory.add(Item(Items.SCROLL_10512, 1))) { - if (createTeam(player)){ + // if (createTeam(player)){ player.sendMessage("You take scroll from table") - } + // } } else { player.sendMessage("You dont have enough inventory space") } @@ -252,12 +252,14 @@ class BarbassaultLobby : InteractionListener, MapArea { fun writeRole(player: Player, buttonId: Int) { if (buttonId == 6) return val playerRole = getRoleFromButton(buttonId) ?: return - if (player.baSession?.team != null) { - player.baSession?.team?.setRoleForPlayer(player, playerRole) - BarbTeamManager.updateTeam(player.baSession?.team!!) - sendMessage(player, "You've set your role to ${playerRole.name.lowercase().replaceFirstChar { it.uppercase() }}" - ) - } + + if (player.baSession == null) {createTeam(player)} + + val team = player.baSession?.team ?: return + team.setRoleForPlayer(player, playerRole) + BarbTeamManager.updateTeam(team) + sendMessage(player, "You've set your role to ${playerRole.name.lowercase().replaceFirstChar { it.uppercase() }}") + } fun handlePlayerOptionDoor(player: Player, roomRoleOptions:(RoomRole) -> Unit){ @@ -307,7 +309,6 @@ class BarbassaultLobby : InteractionListener, MapArea { //player.baSession = null abandonTeam(player) closeOverlay(player) - player.inventory.removeAll(Items.SCROLL_10512) } else { openOverlay(player, iface) // player.sendMessage("you enter wave ${BARBWAVEDOOR[node.id]}") From cbf8b85767f1ed241e2dda9e811b87ffbb2a6ae3 Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 23 Feb 2026 01:03:26 -0500 Subject: [PATCH 036/123] Quick Start lobby setup --- .../barbassault/arena/BarbassaultSession.kt | 3 +- .../barbassault/lobby/BarbassLobbyActivity.kt | 172 ++++++++++++++++++ .../barbassault/lobby/BarbassaultLobby.kt | 44 ++--- 3 files changed, 191 insertions(+), 28 deletions(-) create mode 100644 Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 8525d45ab..c22928587 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -48,10 +48,11 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi val endReason = "left" - fun beginStartingPhase() { + fun beginStartingPhase(quickStart: Boolean = false) { if (state != BarbassaultState.PARTY_CREATION) return state = BarbassaultState.STARTING createArena() + if (quickStart){ enterArena(); rollNewRoleCalls(); return } startCountdown() } diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt new file mode 100644 index 000000000..4a4c88726 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt @@ -0,0 +1,172 @@ +package content.minigame.barbassault.lobby + +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.lobby.BarbTeamManager.createTeam +import core.api.log +import core.api.sendMessage +import core.api.setInterfaceText +import core.game.activity.ActivityManager +import core.game.activity.ActivityPlugin +import core.game.node.entity.Entity +import core.game.node.entity.player.Player +import core.game.node.item.Item +import core.game.world.map.Location +import core.game.world.map.zone.ZoneRestriction +import core.plugin.Initializable +import core.tools.Log +import org.rs09.consts.Items + + +//Idea: Everyone in the lobby is under this activity. +// Why? If for somereason you DIE! your still protected. +// And will use for Quick Start wave room. + +private var activity: BarbassLobbyActivity? = null + +sealed class QueueRole { data class Specific(val role: BarbRole) : QueueRole(); object Any : QueueRole() } +data class WaitingPlayer(val player: Player, val role: BarbRole?,val joinTime: Long = System.currentTimeMillis()) +private val waitingPlayers = mutableListOf() + +private val waitingRoleCounts = mutableMapOf().withDefault { 0 } +private var waitingAnyCount = 0 + + +@Initializable +open class BarbassLobbyActivity : ActivityPlugin("BarbassLobby",false, false, true, + ZoneRestriction.CANNON, ZoneRestriction.FIRES, ZoneRestriction.FOLLOWERS, ZoneRestriction.RANDOM_EVENTS) { + + init { activity = this } + + private fun tryCreateTeamFromQueue(): Boolean { + + if (waitingPlayers.size < 5) return false + + val remaining = waitingPlayers.sortedBy { it.joinTime }.toMutableList() + + val selected = mutableListOf() + + fun takeForRole(role: BarbRole): WaitingPlayer? { + val exact = remaining.firstOrNull { it.role == role } + if (exact != null) { + remaining.remove(exact) + return exact + } + + val any = remaining.firstOrNull { it.role == null } + if (any != null) { + remaining.remove(any) + return any.copy(role = role) + } + + return null + } + + for (role in BarbRole.values()) { + val picked = takeForRole(role) ?: return false + selected.add(picked) + } + + val fifth = remaining.firstOrNull() ?: return false + remaining.remove(fifth) + val assignedFifth = if (fifth.role == null) { fifth.copy(role = BarbRole.ATTACKER) } else fifth + selected.add(assignedFifth) + + createQuickTeam(selected) + + return true + } + + private fun giveScroll(player: Player): Boolean { + if (!player.inventory.containsItem(Item(Items.SCROLL_10512, 1))) { + return player.inventory.add(Item(Items.SCROLL_10512, 1)) + } + return true + } + + private fun createQuickTeam(players: List) { + waitingPlayers.removeAll { wp -> players.any { it.player == wp.player } } + var teamLeader: Player? = null + for (wp in players) { + if (giveScroll(wp.player)) { + teamLeader = wp.player + break + } + } + //IF BY CHANCE no one had free inventory space KICK THEM ALL FROM QUEUE! + if (teamLeader == null) { + players.forEach { + sendMessage(it.player, "You could not hold a Scroll and have been removed from queue") + player.teleport(Location.create(2602, 5279, 0)) + } + return + } + + createTeam(teamLeader) + val session = teamLeader.baSession + val team = session?.team ?: return + + players.forEach { + val role = it.role!! + team.setRoleForPlayer(it.player, role) + //todo find authentic message for Quick Start Team Formed BarbAssault + sendMessage(it.player, "A team has been formed! Your role: ${role.name}") + } + session.beginStartingPhase(true) + } + + override fun death(e: Entity?, killer: Entity?): Boolean { + val ename = e?.name + log(this.javaClass, Log.FINE,"$ename has died in Barbass Lobby, HOW? killer:$killer") + e!!.getProperties().setTeleportLocation(null) + return true + } + + override fun newInstance(p: Player?): ActivityPlugin { + ActivityManager.register(this) + return this + } + //override when !2265 passes (void recovery) + fun recover(player: Player){ + //do nothing, not lost + } + + override fun getSpawnLocation(): Location { + return Location.create(2593, 5264, 0) + } + + companion object { + fun removeQuickQue(player: Player){ + val toRemove = waitingPlayers.filter { it.player == player } + waitingPlayers.removeAll(toRemove) + + toRemove.forEach { wp -> + if (wp.role == null) waitingAnyCount-- + else waitingRoleCounts[wp.role] = waitingRoleCounts.getValue(wp.role) - 1 + } + + refreshQuickWaveOverlay() + } + + fun addToQueue(player: Player, role: BarbRole?) { + waitingPlayers.add(WaitingPlayer(player, role)) + + if (role == null) waitingAnyCount++ + else waitingRoleCounts[role] = waitingRoleCounts.getValue(role) + 1 + + //todo find authentic message for Quick Start Wave BarbAssault + val roleText = role?.name ?: "ANY" + sendMessage(player, "You've joined the queue as ${roleText.lowercase().replaceFirstChar { it.uppercase() }}.") + refreshQuickWaveOverlay() + } + private fun refreshQuickWaveOverlay() { + waitingPlayers.forEach { + val itplayer = it.player + setInterfaceText(itplayer, (waitingRoleCounts[BarbRole.ATTACKER] ?: 0).toString(), 489, 6) + setInterfaceText(itplayer, (waitingRoleCounts[BarbRole.DEFENDER] ?: 0).toString(), 489, 7) + setInterfaceText(itplayer, (waitingRoleCounts[BarbRole.COLLECTOR] ?: 0).toString(), 489, 8) + setInterfaceText(itplayer, (waitingRoleCounts[BarbRole.HEALER] ?: 0).toString(), 489, 9) + setInterfaceText(itplayer, waitingAnyCount.toString(), 489, 10) + } + } + } +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt index 7d3d4eb2a..81c2308e3 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt @@ -8,6 +8,7 @@ import content.minigame.barbassault.lobby.BarbTeamManager.abandonTeam import content.minigame.barbassault.lobby.BarbTeamManager.createTeam import content.minigame.barbassault.lobby.BarbTeamManager.disbandTeam import content.minigame.barbassault.lobby.BarbTeamManager.joinTeam +import content.minigame.barbassault.lobby.BarbassLobbyActivity.Companion.addToQueue import content.minigame.duel.DuelSession import core.api.* import core.game.component.Component @@ -35,10 +36,11 @@ class BarbassaultLobby : InteractionListener, MapArea { } override fun areaEnter(entity: Entity) { + val enteredZone = areaBorders.firstOrNull { it.insideBorder(entity.location) } + if (enteredZone == QUICK_START) { return } updatePlayerWave(entity) openOverlay(entity as Player, 256) PulseManager.cancelDeathTask(entity) - // Components.BARBASSAULT_PLAYERSTAT_490 } override fun areaLeave(entity: Entity, logout: Boolean) { @@ -160,12 +162,14 @@ class BarbassaultLobby : InteractionListener, MapArea { return@on true } on(Scenery.DOOR_20209, IntType.SCENERY, "Pass") { player, node -> - if (capeCheck(player)) {} + //todo find authentic message no capes + // if (capeCheck(player)) { sendMessage(player,"Your not allowed to wear capes."); return@on true } if (!QUICK_START.insideBorder(player.location)){ player.setAttribute("/save:barbass:wave", 1) handlePlayerOptionDoor(player) { role -> - player.sendMessage("You are a ${role.name.lowercase().replaceFirstChar { it.uppercase() }}.") + //player.sendMessage("You are a ${role.name.lowercase().replaceFirstChar { it.uppercase() }}.") handleWaveDoor(player, node, 489) + addToQueue(player, role) } }else { handleWaveDoor(player, node, 489) @@ -174,6 +178,8 @@ class BarbassaultLobby : InteractionListener, MapArea { } on(BARBDOORS, IntType.SCENERY, "Pass") { player, node -> + //todo find authentic message no capes + // if (capeCheck(player)) { sendMessage(player,"Your not allowed to wear capes."); return@on true } handleWaveDoor(player, node,256) return@on true } @@ -188,9 +194,7 @@ class BarbassaultLobby : InteractionListener, MapArea { when (buttonId) { 2 -> { if (player.inventory.add(Item(Items.SCROLL_10512, 1))) { - // if (createTeam(player)){ player.sendMessage("You take scroll from table") - // } } else { player.sendMessage("You dont have enough inventory space") } @@ -224,10 +228,6 @@ class BarbassaultLobby : InteractionListener, MapArea { } } */ - enum class RoomRole { - ATTACKER, DEFENDER, COLLECTOR, HEALER, ANYROLE - } - fun getModelFromButton(button: Int): Int { return when (button) { @@ -262,19 +262,19 @@ class BarbassaultLobby : InteractionListener, MapArea { } - fun handlePlayerOptionDoor(player: Player, roomRoleOptions:(RoomRole) -> Unit){ + fun handlePlayerOptionDoor(player: Player, roomRoleOptions:(BarbRole?) -> Unit){ sendDialogueOptions( player, "Which role would you like to perform?", "Attacker", "Defender","Collector","Healer","I'll be any role!") addDialogueAction(player) { _, buttonId -> val role = when (buttonId) { - 2 -> RoomRole.ATTACKER - 3 -> RoomRole.DEFENDER - 4 -> RoomRole.COLLECTOR - 5 -> RoomRole.HEALER - 6 -> RoomRole.ANYROLE - else -> RoomRole.ANYROLE + 2 -> BarbRole.ATTACKER + 3 -> BarbRole.DEFENDER + 4 -> BarbRole.COLLECTOR + 5 -> BarbRole.HEALER + 6 -> null + else -> null } roomRoleOptions(role) } @@ -309,6 +309,7 @@ class BarbassaultLobby : InteractionListener, MapArea { //player.baSession = null abandonTeam(player) closeOverlay(player) + if (node.id == 20209) { BarbassLobbyActivity.removeQuickQue(player) } } else { openOverlay(player, iface) // player.sendMessage("you enter wave ${BARBWAVEDOOR[node.id]}") @@ -401,19 +402,8 @@ class BarbassaultLobby : InteractionListener, MapArea { 20208 to 10, 20209 to 1) - // override fun tick() { - // TODO("Not yet implemented") - // } } - - - - - - - - /* PRIVATE_PALDO_5031 -- Big axe barb at entrance to main lobby PRIVATE_PALDON_5034 -- sword -- Above wave 7 and 8 Source:https://youtu.be/VPlIYB1h9KM?t=340 From 6498d1874ef585d104214e315c4ad85a974df76a Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 23 Feb 2026 02:37:25 -0500 Subject: [PATCH 037/123] Quick Start now starts a game --- .../barbassault/arena/BarbassaultSession.kt | 18 ++++------ .../barbassault/lobby/BarbassLobbyActivity.kt | 34 +++++++++++++++---- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index c22928587..6a6dfec45 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -46,14 +46,14 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi val eventBus = BarbAssEventBus() val npcCaps = SpawnCaps(4,4,2,2)//wave 1 val endReason = "left" + private val countDoown = if(GameWorld.settings?.isDevMode == true) 4 else 60 fun beginStartingPhase(quickStart: Boolean = false) { if (state != BarbassaultState.PARTY_CREATION) return state = BarbassaultState.STARTING createArena() - if (quickStart){ enterArena(); rollNewRoleCalls(); return } - startCountdown() + startCountdown(quickStart) } private fun enterArena() { @@ -92,11 +92,10 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi player.properties.teleportLocation = Location.create(2593, 5264, 0) } - private fun startCountdown() { - var ticks = secondsToTicks(4)//60 - - team.allPlayers().forEach { openOverlay(it, 494);setInterfaceText(it, "60", 494, 0) } - GameWorld.Pulser.submit(object : Pulse(1) { + private fun startCountdown(quickStart: Boolean) { + var ticks = secondsToTicks(countDoown)//60 + if(!quickStart){ team.allPlayers().forEach { openOverlay(it, 494);setInterfaceText(it, "60", 494, 0) } } + GameWorld.Pulser.submit(object : Pulse(1) { override fun pulse(): Boolean { if (state != BarbassaultState.STARTING) return true ticks-- @@ -112,10 +111,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi val secondsLeft = ticksToSeconds(ticks) val display = secondsLeft.toString().padStart(2, '0') - team.allPlayers().forEach { - setInterfaceText(it, display, 494, 0) - //it.sendMessage("Barbarian Assault starts in $display seconds.") - } + team.allPlayers().forEach { setInterfaceText(it, display, 494, 0) } return false } diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt index 4a4c88726..74828a6f5 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt @@ -10,6 +10,8 @@ import core.game.activity.ActivityPlugin import core.game.node.entity.Entity import core.game.node.entity.player.Player import core.game.node.item.Item +import core.game.system.task.Pulse +import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.map.zone.ZoneRestriction import core.plugin.Initializable @@ -84,7 +86,7 @@ open class BarbassLobbyActivity : ActivityPlugin("BarbassLobby",false, false, tr } private fun createQuickTeam(players: List) { - waitingPlayers.removeAll { wp -> players.any { it.player == wp.player } } + players.forEach { removeQuickQue(it.player)} var teamLeader: Player? = null for (wp in players) { if (giveScroll(wp.player)) { @@ -92,7 +94,7 @@ open class BarbassLobbyActivity : ActivityPlugin("BarbassLobby",false, false, tr break } } - //IF BY CHANCE no one had free inventory space KICK THEM ALL FROM QUEUE! + //IF BY CHANCE no one had free inventory space KICK THEM ALL FROM QuickLobby! if (teamLeader == null) { players.forEach { sendMessage(it.player, "You could not hold a Scroll and have been removed from queue") @@ -105,14 +107,32 @@ open class BarbassLobbyActivity : ActivityPlugin("BarbassLobby",false, false, tr val session = teamLeader.baSession val team = session?.team ?: return - players.forEach { - val role = it.role!! - team.setRoleForPlayer(it.player, role) - //todo find authentic message for Quick Start Team Formed BarbAssault - sendMessage(it.player, "A team has been formed! Your role: ${role.name}") + players.forEachIndexed { index, wrapper -> + wrapper?.let { playerWrapper -> + if (index != 0) { + playerWrapper.player.baSession = session + team.addPlayer(playerWrapper.player) + } + playerWrapper.role?.let { role -> + team.setRoleForPlayer(playerWrapper.player, role) + } + } } + session.beginStartingPhase(true) } + override fun configure() { + GameWorld.Pulser.submit( + object : Pulse(25) { + override fun pulse(): Boolean { + if (waitingPlayers.isNotEmpty()) { + tryCreateTeamFromQueue() + } + return false + } + + }) + } override fun death(e: Entity?, killer: Entity?): Boolean { val ename = e?.name From 08b96c3ce257186c9b2b11336aaadc3352da981e Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 23 Feb 2026 23:30:18 -0500 Subject: [PATCH 038/123] ::babot - Spawns a bot who enters QuickStart as ANY role. --- .../minigame/barbassault/BarbassDevHelper.kt | 5 + .../barbassault/bots/BACombatState.kt | 46 ++++++ .../minigame/barbassault/bots/BarbassBot.kt | 147 ++++++++++++++++++ .../barbassault/lobby/BarbassLobbyActivity.kt | 11 +- 4 files changed, 205 insertions(+), 4 deletions(-) create mode 100644 Server/src/main/content/minigame/barbassault/bots/BACombatState.kt create mode 100644 Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt diff --git a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt index a4d4166cb..69f51e6ae 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt @@ -1,5 +1,7 @@ package content.minigame.barbassault +import content.minigame.barbassault.bots.BarbassBot +import content.minigame.barbassault.lobby.BarbassaultLobby import core.api.animateScenery import core.api.getScenery import core.api.replaceScenery @@ -37,6 +39,9 @@ class BarbassDevHelper : CommandSet(Privilege.ADMIN) { player.equipment.replace(Item(954),2) } + define("babot"){ player,_-> + BarbassBot(BarbassaultLobby.MAIN_LOBBY.randomWalkableLoc) + } define("hch"){ player,args-> val chId = args[1].toIntOrNull() diff --git a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt new file mode 100644 index 000000000..c07676919 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt @@ -0,0 +1,46 @@ +package content.minigame.barbassault.bots + +import core.game.interaction.MovementPulse +import core.game.node.Node +import core.game.node.entity.npc.NPC +import core.game.world.map.Location +import core.game.world.map.RegionManager +import core.game.world.map.path.Pathfinder +import core.tools.RandomFunction +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch +import content.minigame.pestcontrol.PestControlHelper.GATE_ENTRIES +import content.minigame.pestcontrol.PestControlHelper.getMyPestControlSession1 +import core.game.world.GameWorld +import java.util.* + + +class BACombatState(val bot: BarbassBot) { + private val Random = Random() + val randomtype = Random().nextInt(100) + + + fun fightNPCs() { + bot.customState = "Fight NPCs" + bot.AttackNpcsInRadius(8) + } + + fun randomWalkTo(loc: Location, radius: Int) { + var newloc = loc.transform(RandomFunction.random(radius, -radius), + RandomFunction.random(radius, -radius), 0) + if(!bot.walkingQueue.isMoving) { + walkToIterator(newloc) + } + } + + fun walkToIterator(loc: Location){ + var diffX = loc.x - bot.location.x + var diffY = loc.y - bot.location.y + + GameWorld.Pulser.submit(object : MovementPulse(bot, bot.location.transform(diffX, diffY, 0), Pathfinder.SMART) { + override fun pulse(): Boolean { + return true + } + }) + } +} diff --git a/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt b/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt new file mode 100644 index 000000000..1d3ad3800 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt @@ -0,0 +1,147 @@ +package content.minigame.barbassault.bots + +import content.minigame.barbassault.arena.BarbassaultState +import content.minigame.barbassault.lobby.BarbassLobbyActivity.Companion.addToQueue +import content.minigame.barbassault.lobby.BarbassaultLobby +import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.MAIN_LOBBY +import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.QUICK_START +import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.waveLobbies +import content.minigame.barbassault.lobby.baSession +import content.minigame.pestcontrol.bots.PestControlTestBot2.State +import core.api.EquipmentSlot +import core.api.forceMove +import core.api.getRegionBorders +import core.game.bots.CombatBotAssembler +import core.game.bots.PvMBots +import core.game.container.impl.EquipmentContainer +import core.game.global.action.EquipHandler +import core.game.node.item.Item +import core.game.world.map.Location +import org.rs09.consts.Scenery +import java.util.* + +class BarbassBot(l: Location) : PvMBots(legitimizeLocation(l)){ + init { + CombatBotAssembler().gearPCiMeleeBot(this) + val icape: Item = this.equipment.get(1) + EquipHandler.unequip(this,1,icape.id) + isArtificial + } + + var tick = 0 + var combatMoveTimer = 0 + var justStartedGame = true + var movetimer = 0 + val num = Random().nextInt(4) + val combathandler = BACombatState(this) + var time = 0 + enum class State { OUTSIDE_ROOM, ENTER_ROOM,REFRESH, WAITING_IN_ROOM, PLAY_GAME, GET_TO_BA } + + override fun tick() { + super.tick() + tick++ + time++ + movetimer-- + if (movetimer <= 0) { + movetimer = 0 + customState = "$state$movetimer" + when (state) { + State.OUTSIDE_ROOM -> toBALobby() + State.ENTER_ROOM -> enterRoom() + State.REFRESH -> enterRoom() + State.WAITING_IN_ROOM -> idleInRoom() + State.PLAY_GAME -> doRoleTask() + State.GET_TO_BA -> doRoleTask() + } + } + } + var oneact = false + private fun enterRoom() { + this.sendChat("Attempting.....") + if (!oneact) { + val quickDoor = getClosestNodeWithEntry(2, Scenery.DOOR_20209) + // quickDoor.interaction.handle(this, quickDoor.interaction[0]) + if (quickDoor != null){ + quickDoor.interaction.handle(this, quickDoor.interaction[0]) + // this.dialogueInterpreter.handle(234,1) + this.dialogueInterpreter.handle(234,6) + oneact = true + } + + } + } + private fun idleInRoom() { + //chill, say somethings, walk around in .walkablearea + } + private fun doRoleTask() { + val myRole = this.baSession?.team?.getRoleForPlayer(this) + //do task based on myRole + } + + var switch = false + var diagone = false + private fun toBALobby() { + time = 0 + if (!switch){ + this.teleport(MAIN_LOBBY.randomWalkableLoc) + switch = true + return + } + if (switch) { + val quickDoor = getClosestNodeWithEntry(60, Scenery.DOOR_20209) + if (quickDoor == null) { + // switch = false + //this.teleport(MAIN_LOBBY.randomWalkableLoc) + State.OUTSIDE_ROOM + } else { + // switch = false + this.sendChat("Attempting to.....") + quickDoor.interaction.handle(this, quickDoor.interaction[0]) + val quickDoorclose = getClosestNodeWithEntry(2, Scenery.DOOR_20209) + if(quickDoorclose != null) { + if (!diagone){ + forceMove(this, this.location, this.location.transform(0, -1, 0), 25, 60, null, 819){ + addToQueue(this, null) + combathandler.walkToIterator(QUICK_START.randomWalkableLoc) + } + + diagone = true + } + + } + // this.dialogueInterpreter.handle(234,6) + State.ENTER_ROOM + } + } + } + fun isInLobbyOnly(location: Location): Boolean { + return getRegionBorders(10322).insideBorder(location) && waveLobbies.none { it != MAIN_LOBBY && it.insideBorder(location) } + } + + private val state: State + get() { + if (QUICK_START.insideBorder(this.getLocation())) { + return State.WAITING_IN_ROOM + } + if (this.baSession?.state == BarbassaultState.IN_ARENA) { + return State.PLAY_GAME + } + if (isInLobbyOnly(this.getLocation())) { + return State.OUTSIDE_ROOM + } + if (getClosestNodeWithEntry(1, Scenery.DOOR_20209) != null) { + return State.ENTER_ROOM + } + if (time == 1200) { + return State.GET_TO_BA + } + return State.GET_TO_BA + } + + companion object { + fun legitimizeLocation(l: Location): Location { + return l + } + } + +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt index 74828a6f5..10a442cd0 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt @@ -86,13 +86,16 @@ open class BarbassLobbyActivity : ActivityPlugin("BarbassLobby",false, false, tr } private fun createQuickTeam(players: List) { + // if(player == null) {removeQuickQue(player);return} players.forEach { removeQuickQue(it.player)} var teamLeader: Player? = null for (wp in players) { - if (giveScroll(wp.player)) { - teamLeader = wp.player - break - } + // if(player.isArtificial) {return} + if (giveScroll(wp.player)) { + teamLeader = wp.player + break + } + } //IF BY CHANCE no one had free inventory space KICK THEM ALL FROM QuickLobby! if (teamLeader == null) { From 23bb37728d4b8babe335bbf0bc60dd320dcc0583 Mon Sep 17 00:00:00 2001 From: Tooze Date: Thu, 26 Feb 2026 16:31:35 -0500 Subject: [PATCH 039/123] BaBots now attack Penance Fighters/rangers. babot max count is 25. babots names apear normal in CurrentTeamIFace --- .../minigame/barbassault/BarbassDevHelper.kt | 8 +++++ .../arena/monsters/PenanceFighterNPC.kt | 5 +-- .../arena/monsters/PenanceRangerNPC.kt | 2 +- .../barbassault/bots/BACombatState.kt | 2 +- .../minigame/barbassault/bots/BarbassBot.kt | 6 +++- .../barbassault/lobby/BarbassLobbyActivity.kt | 36 ++++++++++--------- .../barbassault/lobby/CurrentTeamInterface.kt | 2 +- 7 files changed, 39 insertions(+), 22 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt index 69f51e6ae..fcf9e3b78 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt @@ -18,6 +18,8 @@ import org.rs09.consts.Scenery @Initializable class BarbassDevHelper : CommandSet(Privilege.ADMIN) { + var babotcount = 0 + override fun defineCommands() { define ("maxbarbpts") { player,_ -> player.addBarbPoints(BarbAssaultPoints(500, 500, 500,500)) @@ -40,7 +42,13 @@ class BarbassDevHelper : CommandSet(Privilege.ADMIN) { } define("babot"){ player,_-> + if (babotcount >= 25) { + sendMessage(player, "25 is max amount of BA bots allowed") + return@define + } BarbassBot(BarbassaultLobby.MAIN_LOBBY.randomWalkableLoc) + babotcount++ + } define("hch"){ player,args-> diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt index e0ea33ca4..42b0cc93a 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt @@ -17,7 +17,7 @@ import core.game.node.entity.player.Player import org.rs09.consts.NPCs val PENANCE_FIGHTER_IDS = listOf( - NPCs.PENANCE_FIGHTER_5040, + //NPCs.PENANCE_FIGHTER_5040, //tutorial NPCs.PENANCE_FIGHTER_5044, NPCs.PENANCE_FIGHTER_5045, NPCs.PENANCE_FIGHTER_5213, @@ -31,6 +31,7 @@ val PENANCE_FIGHTER_IDS = listOf( class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { override fun canBeAttackedBy(self: NPC, attacker: Entity, style: CombatStyle, shouldSendMessage: Boolean): Boolean { if (attacker is Player && getItemFromEquipment(attacker, EquipmentSlot.CAPE)?.id != 10556) { + //todo make list of not allowed weapons to attack IE: Crystal bow, Karils Crossbow sendMessage(attacker,"These Penance are immune to your attacks.") return false } @@ -41,7 +42,7 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { } override fun beforeDamageReceived( self: NPC, attacker: Entity, state: BattleState) { attacker as Player - state.estimatedHit = BarbAssaultCombat.applyAttackValidation( self, attacker, state ) + if(!attacker.isArtificial) {state.estimatedHit = BarbAssaultCombat.applyAttackValidation( self, attacker, state )} } override fun onCreation (self: NPC) { diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt index dd581cf46..d61a7265a 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt @@ -38,7 +38,7 @@ class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { } override fun beforeDamageReceived( self: NPC, attacker: Entity, state: BattleState) { attacker as Player - state.estimatedHit = BarbAssaultCombat.applyAttackValidation( self, attacker, state ) + if(!attacker.isArtificial) {state.estimatedHit = BarbAssaultCombat.applyAttackValidation( self, attacker, state )} } override fun getXpMultiplier(self: NPC, attacker: Entity): Double { diff --git a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt index c07676919..39d74e312 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt @@ -22,7 +22,7 @@ class BACombatState(val bot: BarbassBot) { fun fightNPCs() { bot.customState = "Fight NPCs" - bot.AttackNpcsInRadius(8) + bot.AttackNpcsInRadius(25) } fun randomWalkTo(loc: Location, radius: Int) { diff --git a/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt b/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt index 1d3ad3800..c2aa2bcde 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt @@ -1,5 +1,6 @@ package content.minigame.barbassault.bots +import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbassaultState import content.minigame.barbassault.lobby.BarbassLobbyActivity.Companion.addToQueue import content.minigame.barbassault.lobby.BarbassaultLobby @@ -25,7 +26,7 @@ class BarbassBot(l: Location) : PvMBots(legitimizeLocation(l)){ CombatBotAssembler().gearPCiMeleeBot(this) val icape: Item = this.equipment.get(1) EquipHandler.unequip(this,1,icape.id) - isArtificial + //isArtificial } var tick = 0 @@ -75,6 +76,9 @@ class BarbassBot(l: Location) : PvMBots(legitimizeLocation(l)){ } private fun doRoleTask() { val myRole = this.baSession?.team?.getRoleForPlayer(this) + if (myRole == BarbRole.ATTACKER) { + combathandler.fightNPCs() + } //do task based on myRole } diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt index 10a442cd0..f8d8ab7bf 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt @@ -87,17 +87,17 @@ open class BarbassLobbyActivity : ActivityPlugin("BarbassLobby",false, false, tr private fun createQuickTeam(players: List) { // if(player == null) {removeQuickQue(player);return} - players.forEach { removeQuickQue(it.player)} var teamLeader: Player? = null for (wp in players) { - // if(player.isArtificial) {return} + // if(wp.player.isArtificial) continue //only players can lead a party. if (giveScroll(wp.player)) { teamLeader = wp.player break } - } //IF BY CHANCE no one had free inventory space KICK THEM ALL FROM QuickLobby! + // I should just return them to the que, at the end XD + //orr maybe allow them one game. and party disbands upon finshing the wave. if (teamLeader == null) { players.forEach { sendMessage(it.player, "You could not hold a Scroll and have been removed from queue") @@ -106,23 +106,27 @@ open class BarbassLobbyActivity : ActivityPlugin("BarbassLobby",false, false, tr return } - createTeam(teamLeader) - val session = teamLeader.baSession - val team = session?.team ?: return + if (createTeam(teamLeader)){ + players.forEach { removeQuickQue(it.player) } - players.forEachIndexed { index, wrapper -> - wrapper?.let { playerWrapper -> - if (index != 0) { - playerWrapper.player.baSession = session - team.addPlayer(playerWrapper.player) - } - playerWrapper.role?.let { role -> - team.setRoleForPlayer(playerWrapper.player, role) + val session = teamLeader.baSession + val team = session?.team ?: return + + players.forEachIndexed { index, wrapper -> + wrapper?.let { playerWrapper -> + if (index != 0) { + playerWrapper.player.baSession = session + team.addPlayer(playerWrapper.player) + } + playerWrapper.role?.let { role -> + team.setRoleForPlayer(playerWrapper.player, role) + } } } + + session.beginStartingPhase(true) } - session.beginStartingPhase(true) } override fun configure() { GameWorld.Pulser.submit( @@ -139,7 +143,7 @@ open class BarbassLobbyActivity : ActivityPlugin("BarbassLobby",false, false, tr override fun death(e: Entity?, killer: Entity?): Boolean { val ename = e?.name - log(this.javaClass, Log.FINE,"$ename has died in Barbass Lobby, HOW? killer:$killer") + log(this.javaClass, Log.FINE,"$ename has died in Barbass Lobby, HOW? killer:${killer?.name}") e!!.getProperties().setTeleportLocation(null) return true } diff --git a/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt index cec28ed65..e13befa9a 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt @@ -44,7 +44,7 @@ fun updateCurrentTeam(player: Player) { val slotPlayer = partySlot?.player val slotRole = partySlot?.role - val nameText = slotPlayer?.name?.capitalizeWords() ?: CurrentTeam.defaultText + val nameText = slotPlayer?.username?.capitalizeWords() ?: CurrentTeam.defaultText val model = slotRole?.let { ROLE_MODEL_MAP[it] } ?: -1 setInterfaceText(player, nameText, CurrentTeam.ID, uiSlot.name) setInterfaceModel(player, model, CurrentTeam.ID, uiSlot.role, modelZoom) From 10b4a6a42a98565295fa514bb99bfedc1bd5a0a2 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 28 Feb 2026 09:44:55 -0500 Subject: [PATCH 040/123] updated setInterfaceModel for pitch and yaw optional. --- Server/src/main/core/api/ContentAPI.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Server/src/main/core/api/ContentAPI.kt b/Server/src/main/core/api/ContentAPI.kt index 364100249..f31648632 100644 --- a/Server/src/main/core/api/ContentAPI.kt +++ b/Server/src/main/core/api/ContentAPI.kt @@ -1724,11 +1724,16 @@ fun setInterfaceText(player: Player, string: String, iface: Int, child: Int) { * @param player the player to send the packet to * @param modelId the modelId to send to the child * @param iface the ID of the interface to use - * @param child the index of the child to send the string to - * @param zoom the zoom of the child to send the string to + * @param child the index of the child + * @param zoom the zoom of the model + * @param pitch optional pitch angle + * @param yaw optional yaw angle */ -fun setInterfaceModel(player: Player, modelId: Int, iface: Int, child: Int, zoom: Int) { - player.packetDispatch.sendModelOnInterface(modelId, iface, child,zoom) +fun setInterfaceModel( player: Player, modelId: Int, iface: Int, child: Int, zoom: Int, pitch: Int? = null, yaw: Int? = null) { + player.packetDispatch.sendModelOnInterface(modelId, iface, child, zoom) + if (pitch != null && yaw != null) { + player.packetDispatch.sendAngleOnInterface(iface, child, zoom, pitch, yaw) + } } /** From e2c117f5bee714219bef33918e491783b34189eb Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 18 Mar 2026 14:43:56 -0400 Subject: [PATCH 041/123] Healer interface started --- .../barbassault/arena/HealerInterface.kt | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt diff --git a/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt b/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt new file mode 100644 index 000000000..da9701d84 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt @@ -0,0 +1,62 @@ +package content.minigame.barbassault.arena + +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.lobby.CurrentTeam +import content.minigame.barbassault.lobby.CurrentTeam.modelZoom +import core.api.sendItemOnInterface +import core.api.sendItemZoomOnInterface +import core.api.setInterfaceModel +import core.api.setInterfaceText +import core.game.component.Component +import core.game.component.ComponentDefinition +import core.game.component.ComponentPlugin +import core.game.node.entity.player.Player +import core.plugin.Initializable +import core.plugin.Plugin +import org.rs09.consts.Components + +// Todo find actual varbits for controlling the interface +@Initializable +class HealerInterface : ComponentPlugin() { + override fun newInstance(arg: Any?): Plugin { + ComponentDefinition.forId(HealerIface.ID).plugin = this + return this + } + override fun open(player: Player?, component: Component?) { + super.open(player, component) + player ?: return + val uiSlot = CurrentTeam.team[1] + // setInterfaceText(player, "nameText", CurrentTeam.ID, uiSlot.name) + setInterfaceText(player, "7", HealerIface.ID, 7) + // setInterfaceText(player, "slot1name", HealerIface.ID, 3)//slot1name + // setInterfaceText(player, "slot2name", HealerIface.ID, 9)//slot2Name + // setInterfaceText(player, "slot3name", HealerIface.ID, 14)//slot3Name + // setInterfaceText(player, "slot4name", HealerIface.ID, 19)//slot4Name + setInterfaceText(player, "11", HealerIface.ID, 11) + setInterfaceText(player, "12", HealerIface.ID, 12) + // setInterfaceText(player, "6", CurrentTeam.ID, 6) + + setInterfaceModel(player, 20578, HealerIface.ID, 24, modelZoom,572,0) + sendItemZoomOnInterface(player, HealerIface.ID, 24, 10559,1940) + //player.packetDispatch.sendRepositionOnInterface(HealerIface.ID, 24, 45, 46) + } + + override fun handle( player: Player?, component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int): Boolean { + return true + } +} + + +object HealerIface { + const val ID = Components.BARBASSAULT_OVER_HEAL_488 + val modelZoom = 2372//1940 + val ROLE_MODEL_MAP = mapOf(BarbRole.ATTACKER to 20561, BarbRole.COLLECTOR to 20563, BarbRole.DEFENDER to 20566, BarbRole.HEALER to 20569) + data class Slot(val roleChild: Int, val nameChild: Int, val hpChild:Int, val helpChild: Int) + val team = listOf( + Slot(16, 3,4,5), + Slot(17, 9,10,8), + Slot(18, 14,15,13), + Slot(19, 19,20,18), + ) + fun formatHp(current: Int, max: Int) = "HP $current/$max" +} \ No newline at end of file From 7f4c9e6462d438ccb34c9a874e5aaeba583ce9dd Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 18 Mar 2026 14:44:50 -0400 Subject: [PATCH 042/123] read ability --- .../barbassault/arena/monsters/PenanceFighterNPC.kt | 9 ++++++--- .../barbassault/arena/monsters/PenanceRangerNPC.kt | 4 +++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt index 42b0cc93a..6576ec305 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt @@ -40,9 +40,12 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { override fun getXpMultiplier(self: NPC, attacker: Entity): Double { return 0.0 } - override fun beforeDamageReceived( self: NPC, attacker: Entity, state: BattleState) { - attacker as Player - if(!attacker.isArtificial) {state.estimatedHit = BarbAssaultCombat.applyAttackValidation( self, attacker, state )} + override fun beforeDamageReceived(self: NPC, attacker: Entity, state: BattleState) { + val player = attacker as? Player ?: return + + if (!player.isArtificial) { + state.estimatedHit = BarbAssaultCombat.applyAttackValidation(self, player, state) + } } override fun onCreation (self: NPC) { diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt index d61a7265a..6716abd81 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt @@ -38,7 +38,9 @@ class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { } override fun beforeDamageReceived( self: NPC, attacker: Entity, state: BattleState) { attacker as Player - if(!attacker.isArtificial) {state.estimatedHit = BarbAssaultCombat.applyAttackValidation( self, attacker, state )} + if(!attacker.isArtificial) { + state.estimatedHit = BarbAssaultCombat.applyAttackValidation( self, attacker, state ) + } } override fun getXpMultiplier(self: NPC, attacker: Entity): Double { From b8a8fde2c5abc5c9ee461a0b7673c04fbafdb607 Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 18 Mar 2026 14:46:29 -0400 Subject: [PATCH 043/123] Bot progress to being useful --- .../barbassault/bots/BACombatState.kt | 29 +++++++++++ ...ctivity.kt => BarbassQuickWaveActivity.kt} | 51 +++++++++++-------- 2 files changed, 60 insertions(+), 20 deletions(-) rename Server/src/main/content/minigame/barbassault/lobby/{BarbassLobbyActivity.kt => BarbassQuickWaveActivity.kt} (84%) diff --git a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt index 39d74e312..1947f3337 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt @@ -1,5 +1,7 @@ package content.minigame.barbassault.bots +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.lobby.baSession import core.game.interaction.MovementPulse import core.game.node.Node import core.game.node.entity.npc.NPC @@ -17,6 +19,7 @@ import java.util.* class BACombatState(val bot: BarbassBot) { private val Random = Random() + private val krng = kotlin.random.Random.Default val randomtype = Random().nextInt(100) @@ -24,6 +27,32 @@ class BACombatState(val bot: BarbassBot) { bot.customState = "Fight NPCs" bot.AttackNpcsInRadius(25) } + fun handleDefender() { + bot.customState = "Lure Runners" + //bot.AttackNpcsInRadius(25) + } + fun handleCollector() { + bot.customState = "Collecting Eggs" + //bot.AttackNpcsInRadius(25) + } + fun handleHealer() { + bot.customState = "Healer Idling" + //bot.AttackNpcsInRadius(25) + } + + fun chatter() { + bot.sendChat("LETS GOO!") + if (krng.nextInt(200) != 0) return + val role = bot.baSession?.team?.getRoleForPlayer(bot) + val messages = when (role) { + BarbRole.ATTACKER -> listOf("Call pls", "Wrong style?", "Attacking!") + BarbRole.HEALER -> listOf("Need poison", "Healing!", "Healer here","Call pls") + BarbRole.DEFENDER -> listOf("Dropping food", "Come here runners","Call pls") + BarbRole.COLLECTOR -> listOf("Eggs!", "Wrong egg?","Call pls") + else -> listOf("Lag...", "Nice", "Oops") + } + bot.sendChat(messages.random(krng)) + } fun randomWalkTo(loc: Location, radius: Int) { var newloc = loc.transform(RandomFunction.random(radius, -radius), diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassQuickWaveActivity.kt similarity index 84% rename from Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt rename to Server/src/main/content/minigame/barbassault/lobby/BarbassQuickWaveActivity.kt index f8d8ab7bf..47242ab4a 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassLobbyActivity.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassQuickWaveActivity.kt @@ -2,9 +2,7 @@ package content.minigame.barbassault.lobby import content.minigame.barbassault.BarbRole import content.minigame.barbassault.lobby.BarbTeamManager.createTeam -import core.api.log -import core.api.sendMessage -import core.api.setInterfaceText +import core.api.* import core.game.activity.ActivityManager import core.game.activity.ActivityPlugin import core.game.node.entity.Entity @@ -13,19 +11,14 @@ import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.map.Location +import core.game.world.map.zone.ZoneBorders import core.game.world.map.zone.ZoneRestriction import core.plugin.Initializable import core.tools.Log import org.rs09.consts.Items +private var activity: BarbassQuickWaveActivity? = null -//Idea: Everyone in the lobby is under this activity. -// Why? If for somereason you DIE! your still protected. -// And will use for Quick Start wave room. - -private var activity: BarbassLobbyActivity? = null - -sealed class QueueRole { data class Specific(val role: BarbRole) : QueueRole(); object Any : QueueRole() } data class WaitingPlayer(val player: Player, val role: BarbRole?,val joinTime: Long = System.currentTimeMillis()) private val waitingPlayers = mutableListOf() @@ -34,10 +27,10 @@ private var waitingAnyCount = 0 @Initializable -open class BarbassLobbyActivity : ActivityPlugin("BarbassLobby",false, false, true, - ZoneRestriction.CANNON, ZoneRestriction.FIRES, ZoneRestriction.FOLLOWERS, ZoneRestriction.RANDOM_EVENTS) { +open class BarbassQuickWaveActivity : ActivityPlugin("BarbassQuickWave",false, false, true, + ZoneRestriction.CANNON, ZoneRestriction.FIRES, ZoneRestriction.FOLLOWERS, ZoneRestriction.RANDOM_EVENTS), MapArea { - init { activity = this } + init { activity = this; this.safeRespawn = Location.create(2593, 5264, 0) } private fun tryCreateTeamFromQueue(): Boolean { @@ -89,19 +82,18 @@ open class BarbassLobbyActivity : ActivityPlugin("BarbassLobby",false, false, tr // if(player == null) {removeQuickQue(player);return} var teamLeader: Player? = null for (wp in players) { - // if(wp.player.isArtificial) continue //only players can lead a party. + if(wp.player.isArtificial) continue //only players can lead a party. if (giveScroll(wp.player)) { teamLeader = wp.player break } } //IF BY CHANCE no one had free inventory space KICK THEM ALL FROM QuickLobby! - // I should just return them to the que, at the end XD - //orr maybe allow them one game. and party disbands upon finshing the wave. + // I should just return them to the que, at the end instead if (teamLeader == null) { players.forEach { sendMessage(it.player, "You could not hold a Scroll and have been removed from queue") - player.teleport(Location.create(2602, 5279, 0)) + it.player.teleport(Location.create(2602, 5279, 0)) } return } @@ -113,8 +105,8 @@ open class BarbassLobbyActivity : ActivityPlugin("BarbassLobby",false, false, tr val team = session?.team ?: return players.forEachIndexed { index, wrapper -> - wrapper?.let { playerWrapper -> - if (index != 0) { + wrapper.let { playerWrapper -> + if (wrapper.player != teamLeader) { playerWrapper.player.baSession = session team.addPlayer(playerWrapper.player) } @@ -126,8 +118,8 @@ open class BarbassLobbyActivity : ActivityPlugin("BarbassLobby",false, false, tr session.beginStartingPhase(true) } - } + override fun configure() { GameWorld.Pulser.submit( object : Pulse(25) { @@ -196,4 +188,23 @@ open class BarbassLobbyActivity : ActivityPlugin("BarbassLobby",false, false, tr } } } +/* override fun areaEnter(entity: Entity) { + enter(entity) + } + + override fun areaLeave(entity: Entity, logout: Boolean) { + leave(entity,logout) + super.areaLeave(entity, logout) + } + + override fun enter(e: Entity?): Boolean { + return super.enter(e) + } + + override fun leave(e: Entity?, logout: Boolean): Boolean { + return super.leave(e, logout) + }*/ + override fun defineAreaBorders(): Array { + return arrayOf(getRegionBorders(10322)) + } } \ No newline at end of file From 4e0c144bdac9d5d786545204f3cb506fa65bb5a7 Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 18 Mar 2026 14:49:43 -0400 Subject: [PATCH 044/123] team interface only if inside a wave lobby --- .../barbassault/arena/BarbassaultActivity.kt | 12 ++++++--- .../barbassault/arena/BarbassaultGameArea.kt | 4 +-- .../barbassault/lobby/BarbassaultLobby.kt | 26 ++++++++++--------- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt index 0478c35f5..2010ef272 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt @@ -9,7 +9,9 @@ import core.api.log import core.api.sendMessage import core.game.activity.ActivityManager import core.game.activity.ActivityPlugin +import core.game.node.Node import core.game.node.entity.Entity +import core.game.node.entity.combat.CombatStyle import core.game.node.entity.impl.PulseManager import core.game.node.entity.player.Player import core.game.system.task.Pulse @@ -53,10 +55,13 @@ open class BarbassaultActivity : ActivityPlugin("barbassault",false, true, true, return true } - override fun enter(e: Entity?): Boolean { - return super.enter(e) + override fun enter(e: Entity?): Boolean { return super.enter(e) } + + override fun continueAttack(e: Entity?, target: Node?, style: CombatStyle?, message: Boolean): Boolean { + //BERR must of been good, idk why I put this in here + return super.continueAttack(e, target, style, message) } - override fun death(e: Entity?, killer: Entity?): Boolean{ + override fun death(e: Entity?, killer: Entity?): Boolean { val ename = e?.name log(this.javaClass, Log.FINE,"$ename has died in Barbass") if (e is Player) { @@ -67,6 +72,7 @@ open class BarbassaultActivity : ActivityPlugin("barbassault",false, true, true, } return false } + override fun newInstance(p: Player?): ActivityPlugin { ActivityManager.register(this) return this diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 3efcf89d8..eb1b6f58c 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -96,7 +96,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { override fun areaLeave(entity: Entity, logout: Boolean) { - val player = entity as? Player ?: return + //val player = entity as? Player ?: return log(this::class.java, Log.FINE, "EXITED BARBASS TUT") } @@ -160,7 +160,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { val animationDuration = animationDuration(ClimbActionHandler.CLIMB_UP) player.lock(animationDuration) player.animate(ClimbActionHandler.CLIMB_UP) - Pulser.submit(object : Pulse(animationDuration) { override fun pulse(): Boolean {player.baSession?.forfet(); return true }}) + Pulser.submit(object : Pulse(animationDuration) { override fun pulse(): Boolean {player.baSession?.forfeit(); return true }}) } } return@on true diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt index 81c2308e3..3a02fcc1d 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt @@ -1,17 +1,12 @@ package content.minigame.barbassault.lobby import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.BarbassaultActivity -import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.BarbassaultState import content.minigame.barbassault.lobby.BarbTeamManager.abandonTeam import content.minigame.barbassault.lobby.BarbTeamManager.createTeam import content.minigame.barbassault.lobby.BarbTeamManager.disbandTeam -import content.minigame.barbassault.lobby.BarbTeamManager.joinTeam -import content.minigame.barbassault.lobby.BarbassLobbyActivity.Companion.addToQueue -import content.minigame.duel.DuelSession +import content.minigame.barbassault.lobby.BarbassQuickWaveActivity.Companion.addToQueue import core.api.* -import core.game.component.Component import core.game.interaction.IntType import core.game.interaction.InteractionListener import core.game.node.Node @@ -20,7 +15,7 @@ import core.game.node.entity.impl.PulseManager import core.game.node.entity.player.Player import core.game.node.item.Item import core.game.world.map.zone.ZoneBorders - +import core.game.world.map.zone.ZoneRestriction import org.rs09.consts.Items import org.rs09.consts.Scenery import org.rs09.consts.Sounds @@ -34,20 +29,25 @@ class BarbassaultLobby : InteractionListener, MapArea { override fun defineAreaBorders(): Array { return areaBorders } - + override fun getRestrictions(): Array { + return arrayOf(ZoneRestriction.CANNON, ZoneRestriction.FIRES, ZoneRestriction.FOLLOWERS) + } override fun areaEnter(entity: Entity) { + PulseManager.cancelDeathTask(entity) val enteredZone = areaBorders.firstOrNull { it.insideBorder(entity.location) } if (enteredZone == QUICK_START) { return } + if (enteredZone == REGION_10322) { return } + updatePlayerWave(entity) openOverlay(entity as Player, 256) - PulseManager.cancelDeathTask(entity) } override fun areaLeave(entity: Entity, logout: Boolean) { if (entity is Player) { entity.interfaceManager.closeOverlay() + + //this is redundant. val barbassItems = intArrayOf(Items.POISONED_WORMS_10540) - //abandonTeam(entity) // Right here, its breaking things entity.equipment.removeAll(barbassItems) entity.inventory.removeAll(barbassItems) @@ -309,7 +309,7 @@ class BarbassaultLobby : InteractionListener, MapArea { //player.baSession = null abandonTeam(player) closeOverlay(player) - if (node.id == 20209) { BarbassLobbyActivity.removeQuickQue(player) } + if (node.id == 20209) { BarbassQuickWaveActivity.removeQuickQue(player) } } else { openOverlay(player, iface) // player.sendMessage("you enter wave ${BARBWAVEDOOR[node.id]}") @@ -356,6 +356,7 @@ class BarbassaultLobby : InteractionListener, MapArea { val WAVE_LOBBY9: ZoneBorders = ZoneBorders(2576, 5278, 2583, 5271, 0) val WAVE_LOBBY10: ZoneBorders = ZoneBorders(2584, 5278, 2591, 5271, 0) + private val REGION_10322 = getRegionBorders(10322) val areaBorders = arrayOf( QUICK_START, @@ -368,7 +369,8 @@ class BarbassaultLobby : InteractionListener, MapArea { WAVE_LOBBY7, WAVE_LOBBY8, WAVE_LOBBY9, - WAVE_LOBBY10 + WAVE_LOBBY10, + REGION_10322 ) val waveLobbies = listOf( MAIN_LOBBY,WAVE_LOBBY1, WAVE_LOBBY2, WAVE_LOBBY3, WAVE_LOBBY4, From 5380fbe9ede669718409920a2e03cb52d76c1c4d Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 18 Mar 2026 14:50:32 -0400 Subject: [PATCH 045/123] giveRoleItems() for entering a game session --- .../barbassault/arena/BarbassaultSession.kt | 83 ++++++++++++++++--- 1 file changed, 71 insertions(+), 12 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 6a6dfec45..41e3b1ed9 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -4,10 +4,8 @@ import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultActivity import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.GloryHorn -import content.minigame.barbassault.lobby.BarbTeam -import content.minigame.barbassault.lobby.BarbTeamManager -import content.minigame.barbassault.lobby.BarbassaultLobby -import content.minigame.barbassault.lobby.baSession +import content.minigame.barbassault.getBarbLevels +import content.minigame.barbassault.lobby.* import core.api.* import core.game.node.entity.Entity import core.game.node.entity.impl.PulseManager @@ -26,6 +24,7 @@ import core.tools.Log import core.tools.secondsToTicks import core.tools.ticksToSeconds import org.rs09.consts.Components +import org.rs09.consts.Items import org.rs09.consts.Music.ASSAULT_AND_BATTERY_604 import org.rs09.consts.NPCs @@ -62,8 +61,10 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi for (player in team.allPlayers()) { zone.enter(player) - player.baSession?.team?.getRoleForPlayer(player)?.let { equipBARoleIcon(player, it) } + val pRole = player.baSession?.team?.getRoleForPlayer(player) + equipBARoleIcon(player, pRole!!) player.properties.teleportLocation = team.spawnLocationFor(player) //base.transform(36, 24, 0) + giveRoleItems(player,pRole) registerLogoutListener(player, "ba-logout") { handleLogout(player) } } @@ -103,8 +104,6 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi if (ticks <= 0) { enterArena() rollNewRoleCalls() - //giveplayerHorns - return true } @@ -145,7 +144,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi tracker.healerStats.wrongPoisonUsed++ } } - fun forfet(){ + fun forfeit(){ state = BarbassaultState.FORFEIT } @@ -226,10 +225,28 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi region.flagInactive() } + val barbassItems = arrayOf( + Item(ATTACKER_ICON), + Item(Items.ATTACKER_HORN_10516), Item(Items.ATTACKER_HORN_10517), Item(Items.ATTACKER_HORN_10518), Item(Items.ATTACKER_HORN_10519), Item(Items.ATTACKER_HORN_10520), + Item(DEFENDER_ICON), + Item(Items.WORMS_10515),Item(Items.CRACKERS_10513), Item(Items.TOFU_10514), + Item(Items.LOGS_11760),Item(Items.HAMMER_2347), + Item(Items.DEFENDER_HORN_10538), + + Item(HEALER_ICON), + Item(Items.HEALING_VIAL_10546),Item(Items.HEALING_VIAL1_10545),Item(Items.HEALING_VIAL2_10544),Item(Items.HEALING_VIAL3_10543),Item(Items.HEALING_VIAL4_10542), + Item(Items.HEALER_HORN_10526),Item(Items.HEALER_HORN_10527),Item(Items.HEALER_HORN_10528),Item(Items.HEALER_HORN_10529),Item(Items.HEALER_HORN_10530), + Item(Items.POISONED_WORMS_10540),Item(Items.POISONED_TOFU_10539),Item(Items.POISONED_MEAT_10541), + + Item(COLLECTOR_ICON), + Item(Items.COLLECTOR_HORN_10560), + Item(Items.COLLECTION_BAG_10521),Item(Items.COLLECTION_BAG_10522),Item(Items.COLLECTION_BAG_10523),Item(Items.COLLECTION_BAG_10524),Item(Items.COLLECTION_BAG_10525), + Item(Items.BLUE_EGG_10533),Item(Items.RED_EGG_10532),Item(Items.GREEN_EGG_10531), + ) private fun handleLogout(player: Player) { state = BarbassaultState.FORFEIT - zone.cleanItems(player,arrayOf(Item(ATTACKER_ICON),Item(DEFENDER_ICON),Item(COLLECTOR_ICON),Item(HEALER_ICON))) + zone.cleanItems(player,barbassItems) region.remove(player) team.removePlayer(player) player.locks.unlockTeleport() @@ -264,6 +281,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi val wornIconId = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id val interfaceId = getIconInterfaceId(wornIconId ?: -1) //waveLobbies[waveNum].randomWalkableLoc + //todo consolidate logic. interfaceId?.let { sendMessage(player, "----- Wave: $waveNum -----") openOverlay(player, it) @@ -276,8 +294,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi var player = entity as Player //exitMiniGame(player) removeTimer(player, "teleblock") - zone.cleanItems(player,arrayOf(Item(ATTACKER_ICON),Item(DEFENDER_ICON),Item(COLLECTOR_ICON),Item(HEALER_ICON))) - //region.remove(player) + zone.cleanItems(player,barbassItems)//region.remove(player) clearLogoutListener(player, "ba-logout") destroyArena() @@ -295,8 +312,50 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(40, 34, 0), Direction.NORTH ) } - private val BA_ROLE_CAPE = mapOf( BarbRole.ATTACKER to 10556, BarbRole.DEFENDER to 10558, BarbRole.COLLECTOR to 10557, BarbRole.HEALER to 10559 ) + + private fun giveRoleItems(player: Player, role: BarbRole) { + val levels = player.getBarbLevels() + + val items = when (role) { + BarbRole.ATTACKER -> when (levels.atk) { + 1 -> intArrayOf(Items.ATTACKER_HORN_10516) + 2 -> intArrayOf(Items.ATTACKER_HORN_10517) + 3 -> intArrayOf(Items.ATTACKER_HORN_10518) + 4 -> intArrayOf(Items.ATTACKER_HORN_10519) + 5 -> intArrayOf(Items.ATTACKER_HORN_10520) + else -> intArrayOf(Items.ATTACKER_HORN_10516) + } + + BarbRole.DEFENDER -> when (levels.def) { + + else -> intArrayOf(Items.DEFENDER_HORN_10538) + } + + BarbRole.HEALER -> when (levels.heal) { + 1 -> intArrayOf(Items.HEALER_HORN_10526) + 2 -> intArrayOf(Items.HEALER_HORN_10527) + 3 -> intArrayOf(Items.HEALER_HORN_10528) + 4 -> intArrayOf(Items.HEALER_HORN_10529) + 5 -> intArrayOf(Items.HEALER_HORN_10530) + else -> intArrayOf(Items.HEALER_HORN_10526) + } + + BarbRole.COLLECTOR -> when (levels.col) { + 1 -> intArrayOf(Items.COLLECTION_BAG_10521,Items.COLLECTOR_HORN_10560) + 2 -> intArrayOf(Items.COLLECTION_BAG_10522,Items.COLLECTOR_HORN_10560) + 3 -> intArrayOf(Items.COLLECTION_BAG_10523,Items.COLLECTOR_HORN_10560) + 4 -> intArrayOf(Items.COLLECTION_BAG_10524,Items.COLLECTOR_HORN_10560) + 5 -> intArrayOf(Items.COLLECTION_BAG_10525,Items.COLLECTOR_HORN_10560) + else -> intArrayOf(Items.COLLECTION_BAG_10521,Items.COLLECTOR_HORN_10560) + } + } + + items.forEach { id -> + player.inventory.add(Item(id, 1)) + } + } private fun equipBARoleIcon(player: Player, role: BarbRole) { + val BA_ROLE_CAPE = mapOf( BarbRole.ATTACKER to 10556, BarbRole.DEFENDER to 10558, BarbRole.COLLECTOR to 10557, BarbRole.HEALER to 10559 ) val itemId = BA_ROLE_CAPE[role] ?: return player.equipment.add(Item(itemId),true,false) //player.getEquipment().add(Item(itemId), true) From 07b51c023676bc6fcbb7c2db18cd4aa259c05336 Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 18 Mar 2026 14:50:56 -0400 Subject: [PATCH 046/123] small bot progress --- .../minigame/barbassault/bots/BarbassBot.kt | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt b/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt index c2aa2bcde..1926f3264 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt @@ -2,19 +2,15 @@ package content.minigame.barbassault.bots import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbassaultState -import content.minigame.barbassault.lobby.BarbassLobbyActivity.Companion.addToQueue -import content.minigame.barbassault.lobby.BarbassaultLobby +import content.minigame.barbassault.lobby.BarbassQuickWaveActivity.Companion.addToQueue import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.MAIN_LOBBY import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.QUICK_START import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.waveLobbies import content.minigame.barbassault.lobby.baSession -import content.minigame.pestcontrol.bots.PestControlTestBot2.State -import core.api.EquipmentSlot import core.api.forceMove import core.api.getRegionBorders import core.game.bots.CombatBotAssembler import core.game.bots.PvMBots -import core.game.container.impl.EquipmentContainer import core.game.global.action.EquipHandler import core.game.node.item.Item import core.game.world.map.Location @@ -26,14 +22,12 @@ class BarbassBot(l: Location) : PvMBots(legitimizeLocation(l)){ CombatBotAssembler().gearPCiMeleeBot(this) val icape: Item = this.equipment.get(1) EquipHandler.unequip(this,1,icape.id) - //isArtificial } var tick = 0 var combatMoveTimer = 0 var justStartedGame = true var movetimer = 0 - val num = Random().nextInt(4) val combathandler = BACombatState(this) var time = 0 enum class State { OUTSIDE_ROOM, ENTER_ROOM,REFRESH, WAITING_IN_ROOM, PLAY_GAME, GET_TO_BA } @@ -56,6 +50,7 @@ class BarbassBot(l: Location) : PvMBots(legitimizeLocation(l)){ } } } + var oneact = false private fun enterRoom() { this.sendChat("Attempting.....") @@ -76,10 +71,14 @@ class BarbassBot(l: Location) : PvMBots(legitimizeLocation(l)){ } private fun doRoleTask() { val myRole = this.baSession?.team?.getRoleForPlayer(this) - if (myRole == BarbRole.ATTACKER) { - combathandler.fightNPCs() + when (myRole) { + BarbRole.ATTACKER -> combathandler.fightNPCs() + BarbRole.DEFENDER -> combathandler.handleDefender() + BarbRole.COLLECTOR -> combathandler.handleCollector() + BarbRole.HEALER -> combathandler.handleHealer() + null -> return } - //do task based on myRole + combathandler.chatter() } var switch = false From 6a9cd16f528f8a214b0eb15c970bfb7d70aa6a82 Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 18 Mar 2026 14:51:54 -0400 Subject: [PATCH 047/123] Some helper dev commands --- .../barbassault/BarbRewardInterface.kt | 2 + .../minigame/barbassault/BarbassDevHelper.kt | 64 +++++++++++++++---- 2 files changed, 52 insertions(+), 14 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BarbRewardInterface.kt b/Server/src/main/content/minigame/barbassault/BarbRewardInterface.kt index 05ad275c3..c624a1693 100644 --- a/Server/src/main/content/minigame/barbassault/BarbRewardInterface.kt +++ b/Server/src/main/content/minigame/barbassault/BarbRewardInterface.kt @@ -166,6 +166,7 @@ fun removeCost(player: Player, reward: RewardRow) { else -> return } } + //https://youtu.be/KKUbBrJBab0?t=44 fun gambleDialogReward(player: Player, cost: Int) { var costChoice: BarbRole? = null @@ -235,6 +236,7 @@ sealed class RewardCost { else -> this } } + data class RewardRow( val buttonChildId: Int, val model : InterfaceModel? = null, diff --git a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt index fcf9e3b78..f7b2870a5 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt @@ -2,10 +2,8 @@ package content.minigame.barbassault import content.minigame.barbassault.bots.BarbassBot import content.minigame.barbassault.lobby.BarbassaultLobby -import core.api.animateScenery -import core.api.getScenery -import core.api.replaceScenery -import core.api.sendMessage +import core.api.* +import core.game.container.access.InterfaceContainer import core.game.node.item.Item import core.game.node.scenery.SceneryBuilder @@ -23,45 +21,85 @@ class BarbassDevHelper : CommandSet(Privilege.ADMIN) { override fun defineCommands() { define ("maxbarbpts") { player,_ -> player.addBarbPoints(BarbAssaultPoints(500, 500, 500,500)) + return@define } define ("rstbarbpts") { player,_ -> player.setBarbPoints(BarbAssaultPoints(0, 0, 0,0)) + return@define } define ("rstbarblvl") { player,_ -> player.setBarbLevels(BarbAssaultLevels(0, 0, 0,0)) + return@define } define("barbgame"){ player,_-> player.teleport(Location.create(1886, 5467, 0)) + return@define } define("barbqueen"){ player,_-> player.teleport(Location.create(1885, 5403, 0)) + return@define } //nods to the defender guide I found, as "suggested" defender gear. define("defgear"){ player,_-> player.equipment.replace(Item(954),2) + return@define } define("babot"){ player,_-> if (babotcount >= 25) { sendMessage(player, "25 is max amount of BA bots allowed") - return@define + }else { + BarbassBot(BarbassaultLobby.MAIN_LOBBY.randomWalkableLoc) + babotcount++ } - BarbassBot(BarbassaultLobby.MAIN_LOBBY.randomWalkableLoc) - babotcount++ + return@define } define("hch"){ player,args-> val chId = args[1].toIntOrNull() if (chId != null) { - player.packetDispatch.sendInterfaceConfig(493, chId,true) + player.packetDispatch.sendInterfaceConfig(488, chId,true) } + return@define } define("vch"){ player,args-> val chId = args[1].toIntOrNull() if (chId != null) { - player.packetDispatch.sendInterfaceConfig(493, chId,false) + player.packetDispatch.sendInterfaceConfig(488, chId,false) } + return@define + } + define("setifacemodel") { player, args -> + val modelId = args.getOrNull(1)?.toIntOrNull() ?: return@define + val iface = args.getOrNull(2)?.toIntOrNull() ?: return@define + val child = args.getOrNull(3)?.toIntOrNull() ?: return@define + + val zoom = args.getOrNull(4)?.toIntOrNull() ?: 0 + val pitch = args.getOrNull(5)?.toIntOrNull() ?: 0 + val yaw = args.getOrNull(6)?.toIntOrNull() ?: 0 + + setInterfaceModel(player, modelId, iface, child, zoom, pitch, yaw) + } + //layer.packetDispatch.sendRepositionOnInterface(HealerIface.ID, 24, 45, 46) + define("setifaceoffset") { player, args -> + val iface = args.getOrNull(1)?.toIntOrNull() ?: return@define + val child = args.getOrNull(2)?.toIntOrNull() ?: return@define + + val posX = args.getOrNull(3)?.toIntOrNull() ?: 0 + val posY = args.getOrNull(4)?.toIntOrNull() ?: 0 + + player.packetDispatch.sendRepositionOnInterface(iface, child, posX, posY) + } + //sendItemZoomOnInterface(int itemId, int zoom, int interfaceId, int childId) + define("setifaceitem") { player, args -> + val iface = args.getOrNull(1)?.toIntOrNull() ?: return@define + val child = args.getOrNull(2)?.toIntOrNull() ?: return@define + + val itemId = args.getOrNull(3)?.toIntOrNull() ?: 0 + val zoom = args.getOrNull(4)?.toIntOrNull() ?: 0 + + sendItemZoomOnInterface(player,itemId, zoom, iface, child) } define("trap"){ player,args-> @@ -75,14 +113,11 @@ class BarbassDevHelper : CommandSet(Privilege.ADMIN) { animateScenery(scenery!!, emoteId!!)//5076 //replaceScenery(getScenery(thistrap)!!,Scenery.RUNNER_TRAP1_20230,40,thistrap) + return@define } define("rolekit", Privilege.ADMIN, " ", "Gives Barbarian Assault kit") { player, args -> - data class RoleKit( - val horns: IntArray? = null, - val bags: IntArray? = null, - val extraItems: List = emptyList() - ) + data class RoleKit( val horns: IntArray? = null, val bags: IntArray? = null, val extraItems: List = emptyList() ) val roleKits = mapOf( "healer" to RoleKit( horns = intArrayOf(Items.HEALER_HORN_10526,Items.HEALER_HORN_10527,Items.HEALER_HORN_10528,Items.HEALER_HORN_10529,Items.HEALER_HORN_10530 ), @@ -121,6 +156,7 @@ class BarbassDevHelper : CommandSet(Privilege.ADMIN) { player.inventory.add(Item(role.horns?.get(level - 1) ?:1 )) role.extraItems.forEach { player.inventory.add(Item(it)) } sendMessage(player,"Gave $roleName kit for level $level.") + return@define } } } \ No newline at end of file From efa2310dec5756f7167af2e9f33e40378b677084 Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 1 Apr 2026 23:32:59 -0400 Subject: [PATCH 048/123] Healer Iface for team HP and "medic" horn call to flash red cross in healer iface --- .../barbassault/arena/BarbassaultSession.kt | 16 +++-- .../barbassault/arena/HealerInterface.kt | 66 ++++++++++++------- 2 files changed, 56 insertions(+), 26 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 41e3b1ed9..26b064922 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -376,13 +376,20 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi } } fun broadcastToRole(role: BarbRole, message: String) { - team.allPlayers() - .filter { team.getRoleForPlayer(it) == role } - .forEach { sendMessage(it, message) } + team.allPlayers().filter { + team.getRoleForPlayer(it) == role + }.forEach { + sendMessage(it, message) + } } fun alertHealers(player:Player){ - //alert healers UI you asked ro help ( Flashing cross next to name) + team.allPlayers().filter { + team.getRoleForPlayer(it) == BarbRole.HEALER + }.forEach { + HealerIfaceMedicHelp(it,player) + } } + fun updateAttackerUI(player: Player, call: AttackerCall) { val style = call.called if (style == null) { @@ -526,3 +533,4 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi } } + diff --git a/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt b/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt index da9701d84..e2ca12ceb 100644 --- a/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt +++ b/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt @@ -1,10 +1,9 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.lobby.CurrentTeam -import content.minigame.barbassault.lobby.CurrentTeam.modelZoom -import core.api.sendItemOnInterface +import content.minigame.barbassault.lobby.baSession import core.api.sendItemZoomOnInterface +import core.api.setComponentVisibility import core.api.setInterfaceModel import core.api.setInterfaceText import core.game.component.Component @@ -25,27 +24,51 @@ class HealerInterface : ComponentPlugin() { override fun open(player: Player?, component: Component?) { super.open(player, component) player ?: return - val uiSlot = CurrentTeam.team[1] - // setInterfaceText(player, "nameText", CurrentTeam.ID, uiSlot.name) - setInterfaceText(player, "7", HealerIface.ID, 7) - // setInterfaceText(player, "slot1name", HealerIface.ID, 3)//slot1name - // setInterfaceText(player, "slot2name", HealerIface.ID, 9)//slot2Name - // setInterfaceText(player, "slot3name", HealerIface.ID, 14)//slot3Name - // setInterfaceText(player, "slot4name", HealerIface.ID, 19)//slot4Name - setInterfaceText(player, "11", HealerIface.ID, 11) - setInterfaceText(player, "12", HealerIface.ID, 12) - // setInterfaceText(player, "6", CurrentTeam.ID, 6) - setInterfaceModel(player, 20578, HealerIface.ID, 24, modelZoom,572,0) - sendItemZoomOnInterface(player, HealerIface.ID, 24, 10559,1940) - //player.packetDispatch.sendRepositionOnInterface(HealerIface.ID, 24, 45, 46) + setHealerTeamIfaceSlot(player,0) + setHealerTeamIfaceSlot(player,1) + setHealerTeamIfaceSlot(player,2) + setHealerTeamIfaceSlot(player,3) + } override fun handle( player: Player?, component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int): Boolean { return true } + + fun setHealerTeamIfaceSlot(player: Player,slot: Int){ + val slotIface = HealerIface.team[slot] + val others = player.baSession?.team?.allPlayers()?.filter { it != player } + val slotPlayer = others?.get(slot) + + val slotHealth = HealerIface.formatHp(slotPlayer?.skills?.lifepoints ,slotPlayer?.skills?.maximumLifepoints) + + //todo find a way to crop the model. + //20578 is the correct model + //setInterfaceModel(player, 20578, HealerIface.ID, slotIface.roleChild, HealerIface.modelZoom,572,0) // role Icon + setInterfaceText(player, slotPlayer?.username.toString(), HealerIface.ID, slotIface.nameChild) //Name + setInterfaceText(player, slotHealth, HealerIface.ID, slotIface.hpChild)// Health + } + + } +fun HealerIfaceMedicHelp(player: Player, other: Player) { + if (player == other) return + + val team = player.baSession?.team ?: return + val mySlot = team.slotOf(player) + val otherSlot = team.slotOf(other) + + val uiIndex = if (otherSlot > mySlot) otherSlot - 1 else otherSlot + if (uiIndex !in HealerIface.team.indices) return + + val slotIface = HealerIface.team[uiIndex] + setComponentVisibility(player, HealerIface.ID, slotIface.helpChild, false) +} + + + object HealerIface { const val ID = Components.BARBASSAULT_OVER_HEAL_488 @@ -53,10 +76,9 @@ object HealerIface { val ROLE_MODEL_MAP = mapOf(BarbRole.ATTACKER to 20561, BarbRole.COLLECTOR to 20563, BarbRole.DEFENDER to 20566, BarbRole.HEALER to 20569) data class Slot(val roleChild: Int, val nameChild: Int, val hpChild:Int, val helpChild: Int) val team = listOf( - Slot(16, 3,4,5), - Slot(17, 9,10,8), - Slot(18, 14,15,13), - Slot(19, 19,20,18), - ) - fun formatHp(current: Int, max: Int) = "HP $current/$max" + Slot(16, 3, 4, 5), + Slot(17, 9, 10, 8), + Slot(18, 14, 15, 13), + Slot(19, 19, 20, 18)) + fun formatHp(current: Int?, max: Int?) = "HP $current/$max" } \ No newline at end of file From dc1b13363a49520223e7339d42f4177e31df8e4f Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 11 Apr 2026 03:20:00 -0400 Subject: [PATCH 049/123] Healer interface Health update when team member takes damage --- .../barbassault/arena/BarbassaultSession.kt | 12 +++-- .../barbassault/arena/HealerInterface.kt | 48 ++++++++++++------- .../minigame/barbassault/lobby/BarbTeam.kt | 19 ++++---- .../barbassault/lobby/BarbassaultLobby.kt | 1 + .../node/entity/combat/ImpactHandler.java | 10 ++++ 5 files changed, 62 insertions(+), 28 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 26b064922..0138e16a0 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -175,6 +175,8 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi when(state){ BarbassaultState.IN_ARENA -> { eventBus.processEvents() // process events such as npc died to scoring + + roleCallTicks-- waveSpawnTicks-- if (roleCallTicks <= 0) { @@ -296,6 +298,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi removeTimer(player, "teleblock") zone.cleanItems(player,barbassItems)//region.remove(player) clearLogoutListener(player, "ba-logout") + player.fullRestore() destroyArena() } @@ -382,10 +385,13 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi sendMessage(it, message) } } + fun updateBarbHealerIfaceHPOfPlayer(player: Player){ + team.allPlayers().filter { team.getRoleForPlayer(it) == BarbRole.HEALER }.forEach { + HealerIfaceHPUpdatePlayer(it,player) + } + } fun alertHealers(player:Player){ - team.allPlayers().filter { - team.getRoleForPlayer(it) == BarbRole.HEALER - }.forEach { + team.allPlayers().filter { team.getRoleForPlayer(it) == BarbRole.HEALER }.forEach { HealerIfaceMedicHelp(it,player) } } diff --git a/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt b/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt index e2ca12ceb..d0a1b7bef 100644 --- a/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt +++ b/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt @@ -1,6 +1,7 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.lobby.BarbTeam import content.minigame.barbassault.lobby.baSession import core.api.sendItemZoomOnInterface import core.api.setComponentVisibility @@ -36,24 +37,27 @@ class HealerInterface : ComponentPlugin() { return true } - fun setHealerTeamIfaceSlot(player: Player,slot: Int){ - val slotIface = HealerIface.team[slot] - val others = player.baSession?.team?.allPlayers()?.filter { it != player } - val slotPlayer = others?.get(slot) - - val slotHealth = HealerIface.formatHp(slotPlayer?.skills?.lifepoints ,slotPlayer?.skills?.maximumLifepoints) - - //todo find a way to crop the model. - //20578 is the correct model - //setInterfaceModel(player, 20578, HealerIface.ID, slotIface.roleChild, HealerIface.modelZoom,572,0) // role Icon - setInterfaceText(player, slotPlayer?.username.toString(), HealerIface.ID, slotIface.nameChild) //Name - setInterfaceText(player, slotHealth, HealerIface.ID, slotIface.hpChild)// Health - } - - } -fun HealerIfaceMedicHelp(player: Player, other: Player) { +fun setHealerTeamIfaceSlot(player: Player,slot: Int){ + val slotIface = HealerIface.team[slot] + val slotPlayer = getPlayerHealerIfaceSlot(player,slot) + val slotHealth = HealerIface.formatHp(slotPlayer?.skills?.lifepoints ,slotPlayer?.skills?.maximumLifepoints) + + //todo find a way to crop the model. + //20578 is the correct model + //setInterfaceModel(player, 20578, HealerIface.ID, slotIface.roleChild, HealerIface.modelZoom,572,0) // role Icon + setInterfaceText(player, slotPlayer?.username.toString(), HealerIface.ID, slotIface.nameChild) //Name + setInterfaceText(player, slotHealth, HealerIface.ID, slotIface.hpChild)// Health +} + +fun getPlayerHealerIfaceSlot(player:Player,slot: Int): Player? { + val team = player.baSession?.team + val others = team?.allPlayers()?.filter { it != player } + return others?.get(slot) +} + +fun HealerIfaceMedicHelp(player: Player, other: Player, toggle: Boolean = false) { if (player == other) return val team = player.baSession?.team ?: return @@ -64,15 +68,25 @@ fun HealerIfaceMedicHelp(player: Player, other: Player) { if (uiIndex !in HealerIface.team.indices) return val slotIface = HealerIface.team[uiIndex] - setComponentVisibility(player, HealerIface.ID, slotIface.helpChild, false) + setComponentVisibility(player, HealerIface.ID, slotIface.helpChild, toggle) } +fun HealerIfaceHPUpdatePlayer(player:Player, other:Player ){ + if (player == other) return + val team = player.baSession?.team ?: return + val mySlot = team.slotOf(player) + val otherSlot = team.slotOf(other) + val uiIndex = if (otherSlot > mySlot) otherSlot - 1 else otherSlot + if (uiIndex !in HealerIface.team.indices) return + setHealerTeamIfaceSlot(player,uiIndex) +} object HealerIface { const val ID = Components.BARBASSAULT_OVER_HEAL_488 val modelZoom = 2372//1940 + //these are not the correct models for this Iface, but we could use them val ROLE_MODEL_MAP = mapOf(BarbRole.ATTACKER to 20561, BarbRole.COLLECTOR to 20563, BarbRole.DEFENDER to 20566, BarbRole.HEALER to 20569) data class Slot(val roleChild: Int, val nameChild: Int, val hpChild:Int, val helpChild: Int) val team = listOf( diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt index ba79aa86a..5b719420b 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt @@ -67,17 +67,15 @@ class BarbTeam(val session: BarbassaultSession, leader: Player) { fun slotOf(player: Player): Int = slots.indexOfFirst { it?.player == player } - fun getSlot(index: Int): PartySlot? = - slots.getOrNull(index) + fun getSlot(index: Int): PartySlot? = slots.getOrNull(index) - fun allPlayers(): List = - slots.filterNotNull().map { it.player } + fun allPlayers(): List = slots.filterNotNull().map { it.player } - fun isLeader(player: Player): Boolean = - slotOf(player) == LEADER_SLOT + fun isLeader(player: Player): Boolean = slotOf(player) == LEADER_SLOT - fun isFull(): Boolean = - slots.all { it != null } + fun isHealer(player: Player): Boolean = getRoleForPlayer(player) == BarbRole.HEALER + + fun isFull(): Boolean = slots.all { it != null } fun addRecruit(player: Player): Boolean { recruit = PendingRecruit(player) @@ -118,6 +116,10 @@ class BarbTeam(val session: BarbassaultSession, leader: Player) { return true } + fun getAllRole(barbRole: BarbRole): List { + return slots.filterNotNull().map { it.player }.filter { getRoleForPlayer(it) == barbRole } + } + fun getRoleForPlayer(player: Player): BarbRole? { val idx = slotOf(player) return slots.getOrNull(idx)?.role @@ -156,6 +158,7 @@ class BarbTeam(val session: BarbassaultSession, leader: Player) { val (x, y) = PartySpawns[idx] return session.base.transform(x, y, 0) } + } data class RoleCounts(val att: Int, val def: Int, val coll: Int, val heal: Int ) diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt index 3a02fcc1d..102de4d82 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt @@ -164,6 +164,7 @@ class BarbassaultLobby : InteractionListener, MapArea { on(Scenery.DOOR_20209, IntType.SCENERY, "Pass") { player, node -> //todo find authentic message no capes // if (capeCheck(player)) { sendMessage(player,"Your not allowed to wear capes."); return@on true } + //todo Not allowed to enter QuickStart with Scroll if (!QUICK_START.insideBorder(player.location)){ player.setAttribute("/save:barbass:wave", 1) handlePlayerOptionDoor(player) { role -> diff --git a/Server/src/main/core/game/node/entity/combat/ImpactHandler.java b/Server/src/main/core/game/node/entity/combat/ImpactHandler.java index 6e49734ec..4387950ad 100644 --- a/Server/src/main/core/game/node/entity/combat/ImpactHandler.java +++ b/Server/src/main/core/game/node/entity/combat/ImpactHandler.java @@ -1,6 +1,8 @@ package core.game.node.entity.combat; import content.data.EnchantedJewellery; +import content.minigame.barbassault.arena.BarbassaultSession; +import content.minigame.barbassault.arena.BarbassaultState; import core.game.container.impl.EquipmentContainer; import core.game.node.entity.skill.Skills; import content.global.skill.summoning.familiar.Familiar; @@ -203,6 +205,14 @@ public final class ImpactHandler { if (p.getAttribute("godMode", false)) { p.getSkills().heal(10000); } + if (hit > 0) { + BarbassaultSession session = p.getAttribute("ba-session"); + if (session != null) { + if (session.getState() == BarbassaultState.IN_ARENA) { + session.updateBarbHealerIfaceHPOfPlayer(p); + } + } + } } Impact impact = new Impact(source, hit, style, type); impactQueue.add(impact); From 19afda03ebeb16d020060b034dc72719f25abf38 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 11 Apr 2026 03:26:20 -0400 Subject: [PATCH 050/123] Healers drinking from spring updates Hitpoints. --- .../content/minigame/barbassault/arena/BarbassaultGameArea.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index eb1b6f58c..5d657d4dc 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -179,6 +179,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { heal(player, healAmount) player.unlock() sendMessage(player,"You've been healed $healAmount hitpoints.") + player.baSession?.updateBarbHealerIfaceHPOfPlayer(player) return true } }) From 2308b425596363f3b7b8491fd55ca0684c6e86a3 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 11 Apr 2026 13:24:55 -0400 Subject: [PATCH 051/123] Lets not crash things if the party is undersized :D --- .../main/content/minigame/barbassault/arena/HealerInterface.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt b/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt index d0a1b7bef..d0c990c9c 100644 --- a/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt +++ b/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt @@ -54,7 +54,7 @@ fun setHealerTeamIfaceSlot(player: Player,slot: Int){ fun getPlayerHealerIfaceSlot(player:Player,slot: Int): Player? { val team = player.baSession?.team val others = team?.allPlayers()?.filter { it != player } - return others?.get(slot) + return others?.getOrNull(slot) } fun HealerIfaceMedicHelp(player: Player, other: Player, toggle: Boolean = false) { From 6dcbd51670314b53d1b9c5b139e89c9bd04ef9de Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 11 Apr 2026 13:28:32 -0400 Subject: [PATCH 052/123] Healer Stock-Up vial check fix --- .../barbassault/arena/scenery/ItemMachine.kt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt index f0d4237a0..e058486c0 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt @@ -29,7 +29,7 @@ class ItemMachine: InteractionListener { private val STOCK_UP_DEF = IntArray(10 * baseItems_DEF.size) { i -> baseItems_DEF[i % baseItems_DEF.size] } //Healer// private val ALL_HEALER_VAILS = intArrayOf(Items.HEALING_VIAL_10546,Items.HEALING_VIAL1_10545,Items.HEALING_VIAL2_10544,Items.HEALING_VIAL3_10543,Items.HEALING_VIAL4_10542) - private val TAKE_VAIL = Items.HEALING_VIAL4_10542 + private val TAKE_VAIL = Items.HEALING_VIAL_10546 private val TAKE_POIS_WORMS = Items.POISONED_WORMS_10540 private val TAKE_POIS_TOFU = Items.POISONED_TOFU_10539 private val TAKE_POIS_MEAT = Items.POISONED_MEAT_10541 @@ -66,14 +66,14 @@ class ItemMachine: InteractionListener { } //Healer// on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Stock-up") { player, node -> - if (hasAnyVial(player)) { - sendMessage(player, "You can only carry one healing vial at a time.") - return@on true + var stockUp = STOCK_UP_HEAL + if (!hasAnyVial(player)) { + stockUp = intArrayOf(TAKE_VAIL) + STOCK_UP_HEAL } - handleAddItemMachine(player, node,10559, STOCK_UP_HEAL, 1,DispenserType.POISONED) + handleAddItemMachine(player, node,10559, stockUp, 1,DispenserType.POISONED) return@on true } - on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-vail") { player, node -> + on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-vial") { player, node -> if (hasAnyVial(player)) { sendMessage(player, "You can only carry one healing vial at a time.") return@on true @@ -96,6 +96,7 @@ class ItemMachine: InteractionListener { //Collector// on(Scenery.COLLECTOR_CONVERTER_21250, IntType.SCENERY, "Convert") { player, _ -> val bagLevel = BaHornSystem.HornHelper.getCollectorBag(player) + //todo get players collector level instead of bag level. if (!hasCape(player, 10557)) return@on true //Items.RED_EGG_10532 From fd75baa679b045c7ac41ad34a716e009521f7972 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 11 Apr 2026 13:32:52 -0400 Subject: [PATCH 053/123] Magic numbers "named" (Cape icons) --- .../barbassault/arena/scenery/ItemMachine.kt | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt index e058486c0..327a32f02 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt @@ -37,31 +37,36 @@ class ItemMachine: InteractionListener { private val baseItems_HEAL = intArrayOf(TAKE_POIS_WORMS, TAKE_POIS_TOFU, TAKE_POIS_MEAT) private val STOCK_UP_HEAL = IntArray(10 * baseItems_HEAL.size) { i -> baseItems_HEAL[i % baseItems_HEAL.size] } + private val ATTACKER_ICON = 10556 + private val DEFENDER_ICON = 10558 + private val HEALER_ICON = 10559 + private val COLLECTOR_ICON = 10557 + override fun defineListeners() { //Attacker// on(Scenery.ATTACKER_ITEM_MACHINE_20241, IntType.SCENERY, "Take-runes") { player, node -> - handleAddItemMachine(player, node,10556, TAKE_RUNES, 300,DispenserType.RUNES) + handleAddItemMachine(player, node,ATTACKER_ICON, TAKE_RUNES, 300,DispenserType.RUNES) return@on true } on(Scenery.ATTACKER_ITEM_MACHINE_20241, IntType.SCENERY, "Take-arrows") { player, node -> - handleAddItemMachine(player, node,10556, TAKE_ARROWS, 300,DispenserType.ARROWS) + handleAddItemMachine(player, node,ATTACKER_ICON, TAKE_ARROWS, 300,DispenserType.ARROWS) return@on true } //Defender// on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Stock-up") { player, node -> - handleAddItemMachine(player, node,10558, STOCK_UP_DEF, 1,DispenserType.FOOD) + handleAddItemMachine(player, node,DEFENDER_ICON, STOCK_UP_DEF, 1,DispenserType.FOOD) return@on true } on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-crackers") { player, node -> - handleAddItemMachine(player, node,10558, intArrayOf(TAKE_CRACKERS), 5,DispenserType.FOOD) + handleAddItemMachine(player, node,DEFENDER_ICON, intArrayOf(TAKE_CRACKERS), 5,DispenserType.FOOD) return@on true } on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-tofu") { player, node -> - handleAddItemMachine(player, node,10558, intArrayOf(TAKE_TOFU), 5,DispenserType.FOOD) + handleAddItemMachine(player, node,DEFENDER_ICON, intArrayOf(TAKE_TOFU), 5,DispenserType.FOOD) return@on true } on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-worms") { player, node -> - handleAddItemMachine(player, node,10558, intArrayOf(TAKE_WORMS), 5,DispenserType.FOOD) + handleAddItemMachine(player, node,DEFENDER_ICON, intArrayOf(TAKE_WORMS), 5,DispenserType.FOOD) return@on true } //Healer// @@ -70,7 +75,7 @@ class ItemMachine: InteractionListener { if (!hasAnyVial(player)) { stockUp = intArrayOf(TAKE_VAIL) + STOCK_UP_HEAL } - handleAddItemMachine(player, node,10559, stockUp, 1,DispenserType.POISONED) + handleAddItemMachine(player, node,HEALER_ICON, stockUp, 1,DispenserType.POISONED) return@on true } on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-vial") { player, node -> @@ -78,26 +83,26 @@ class ItemMachine: InteractionListener { sendMessage(player, "You can only carry one healing vial at a time.") return@on true } - handleAddItemMachine(player, node,10559, intArrayOf(TAKE_VAIL), 1,DispenserType.VAIL) + handleAddItemMachine(player, node,HEALER_ICON, intArrayOf(TAKE_VAIL), 1,DispenserType.VAIL) return@on true } on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-worms") { player, node -> - handleAddItemMachine(player, node,10559, intArrayOf(TAKE_POIS_WORMS), 5,DispenserType.POISONED) + handleAddItemMachine(player, node,HEALER_ICON, intArrayOf(TAKE_POIS_WORMS), 5,DispenserType.POISONED) return@on true } on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-tofu") { player, node -> - handleAddItemMachine(player, node,10559, intArrayOf(TAKE_POIS_TOFU), 5,DispenserType.POISONED) + handleAddItemMachine(player, node,HEALER_ICON, intArrayOf(TAKE_POIS_TOFU), 5,DispenserType.POISONED) return@on true } on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-meat") { player, node -> - handleAddItemMachine(player, node,10559, intArrayOf(TAKE_POIS_MEAT), 5,DispenserType.POISONED) + handleAddItemMachine(player, node,HEALER_ICON, intArrayOf(TAKE_POIS_MEAT), 5,DispenserType.POISONED) return@on true } //Collector// on(Scenery.COLLECTOR_CONVERTER_21250, IntType.SCENERY, "Convert") { player, _ -> val bagLevel = BaHornSystem.HornHelper.getCollectorBag(player) //todo get players collector level instead of bag level. - if (!hasCape(player, 10557)) return@on true + if (!hasCape(player, COLLECTOR_ICON)) return@on true //Items.RED_EGG_10532 //Items.BLUE_EGG_10533 From 2507ed00e72c7d34277a62662536f4cc0ee99d68 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 11 Apr 2026 23:20:15 -0400 Subject: [PATCH 054/123] No Prayer allowed in arena --- .../minigame/barbassault/arena/BarbassaultSession.kt | 4 ++++ .../node/entity/player/link/prayer/PrayerType.java | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 0138e16a0..b0758b15b 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -61,6 +61,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi for (player in team.allPlayers()) { zone.enter(player) + val pRole = player.baSession?.team?.getRoleForPlayer(player) equipBARoleIcon(player, pRole!!) player.properties.teleportLocation = team.spawnLocationFor(player) //base.transform(36, 24, 0) @@ -148,6 +149,8 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi state = BarbassaultState.FORFEIT } + fun isBarbAssaultGame() = state == BarbassaultState.IN_ARENA + fun endGame(endReason: String){ eventBus.clear() scoreManager.resetAll() @@ -282,6 +285,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi val waveNum = player.getAttribute("barbass:wave", 1) val wornIconId = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id val interfaceId = getIconInterfaceId(wornIconId ?: -1) + player.fullRestore() //waveLobbies[waveNum].randomWalkableLoc //todo consolidate logic. interfaceId?.let { diff --git a/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java b/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java index 41f7dfbf2..cef4061af 100644 --- a/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java +++ b/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java @@ -1,6 +1,7 @@ package core.game.node.entity.player.link.prayer; import content.data.Quests; +import content.minigame.barbassault.arena.BarbassaultSession; import core.game.node.entity.player.link.diary.DiaryType; import core.game.node.entity.skill.SkillBonus; import core.game.node.entity.skill.Skills; @@ -222,6 +223,15 @@ public enum PrayerType { * @return True if it is permitted. */ public boolean permitted(final Player player) { + BarbassaultSession session = player.getAttribute("ba-session"); + if (session != null) { + if (session.isBarbAssaultGame()) { + //todo find correct message here + sendMessage(player, "The barbarians do not allow the use of prayer in the arena."); + toggle(player,false); + return false; + } + } if (!hasLevelStat(player, Skills.PRAYER, level) || !hasLevelStat(player, Skills.DEFENCE, defenceReq)) { sendDialogue(player, "You need a " + (!hasLevelStat(player, Skills.PRAYER, level) ? "Prayer level of " + level + (!hasLevelStat(player, Skills.DEFENCE, defenceReq) ? " and a " : "") : "") + (!hasLevelStat(player, Skills.DEFENCE, defenceReq) ? "Defence level of " + defenceReq : "") + " to use " + StringUtils.formatDisplayName(name().toLowerCase().replace("_", " ")) + "."); return false; From ddb8df4a94610864c084cb2e4fb2aa09e353dec2 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 12 Apr 2026 02:13:53 -0400 Subject: [PATCH 055/123] BarbassaultPlayerExtensions moving stuff around --- .../minigame/barbassault/BarbAssaultArea.kt | 18 -- .../minigame/barbassault/Barbassault.kt | 145 +------------- .../BarbassaultPlayerExtensions.kt | 185 ++++++++++++++++++ .../barbassault/arena/BaHornSystem.kt | 2 +- .../barbassault/arena/BarbassaultActivity.kt | 6 - .../barbassault/arena/BarbassaultGameArea.kt | 7 +- .../barbassault/arena/BarbassaultSession.kt | 3 +- .../barbassault/arena/HealerInterface.kt | 5 +- .../arena/monsters/PenanceFighterNPC.kt | 5 +- .../arena/monsters/PenanceHealerNPC.kt | 2 +- .../arena/monsters/PenanceRangerNPC.kt | 2 +- .../arena/monsters/PenanceRunnerNPC.kt | 4 +- .../barbassault/arena/scenery/DefenderTrap.kt | 4 - .../barbassault/arena/scenery/EggCannon.kt | 2 +- .../barbassault/arena/scenery/HornOfGlory.kt | 2 +- .../barbassault/bots/BACombatState.kt | 9 +- .../minigame/barbassault/bots/BarbassBot.kt | 3 +- .../barbassault/lobby/AcceptRoleInterface.kt | 5 +- .../minigame/barbassault/lobby/BarbTeam.kt | 29 +-- .../lobby/BarbassQuickWaveActivity.kt | 1 + .../barbassault/lobby/BarbassaultLobby.kt | 1 + .../barbassault/lobby/CurrentTeamInterface.kt | 2 +- .../barbassault/lobby/RoleSelectInterface.kt | 2 +- .../node/entity/combat/ImpactHandler.java | 3 +- .../entity/player/link/prayer/PrayerType.java | 4 +- 25 files changed, 210 insertions(+), 241 deletions(-) delete mode 100644 Server/src/main/content/minigame/barbassault/BarbAssaultArea.kt create mode 100644 Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt diff --git a/Server/src/main/content/minigame/barbassault/BarbAssaultArea.kt b/Server/src/main/content/minigame/barbassault/BarbAssaultArea.kt deleted file mode 100644 index 19a6c1f43..000000000 --- a/Server/src/main/content/minigame/barbassault/BarbAssaultArea.kt +++ /dev/null @@ -1,18 +0,0 @@ -package content.minigame.barbassault - -import core.api.MapArea -import core.api.getRegionBorders -import core.game.node.entity.Entity -import core.game.world.map.zone.ZoneBorders -import core.game.world.map.zone.ZoneType - -class BarbAssaultArea : MapArea { - override fun defineAreaBorders(): Array { - return arrayOf(getRegionBorders(7509)) - } - - override fun areaEnter(entity: Entity) { - zone.zoneType = ZoneType.SAFE.id - super.areaEnter(entity) - } -} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/Barbassault.kt b/Server/src/main/content/minigame/barbassault/Barbassault.kt index fc2f070c5..dcfe5b4b1 100644 --- a/Server/src/main/content/minigame/barbassault/Barbassault.kt +++ b/Server/src/main/content/minigame/barbassault/Barbassault.kt @@ -13,80 +13,7 @@ data class BarbAssaultPoints( val atk: Int = 0, val col: Int = 0, val def: Int = operator fun plus(other: BarbAssaultPoints): BarbAssaultPoints = BarbAssaultPoints(atk + other.atk,col + other.col,def + other.def,heal + other.heal).clamped() fun clamped(): BarbAssaultPoints = BarbAssaultPoints(atk.coerceIn(0, 500), col.coerceIn(0, 500), def.coerceIn(0, 500), heal.coerceIn(0, 500) ) } -/** - * Retrieves the player's current Barbarian Assault points. - * - * @return [BarbAssaultPoints] representing the player's stored points in each role: - * - `atk`: Attacker points - * - `col`: Collector points - * - `def`: Defender points - * - `heal`: Healer points - * - * Example usage: - * ``` - * val points = player.getBarbPoints() - * println("Attacker points: ${points.atk}") - * ``` - */ -fun Player.getBarbPoints(): BarbAssaultPoints = BarbAssaultPoints( - getAttribute("barbass:atk-points", 0), - getAttribute("barbass:col-points", 0), - getAttribute("barbass:def-points", 0), - getAttribute("barbass:heal-points", 0) -) -/** - * Sets the player's Barbarian Assault role points, clamping each to the allowed range (0 to 500) - * and saving them to persistent storage. - * - * @param points [BarbAssaultPoints] containing the new point values for each role: - * - `atk`: Attacker points - * - `col`: Collector points - * - `def`: Defender points - * - `heal`: Healer points - * - * Example usage: - * ``` - * val newPoints = BarbAssaultPoints(atk = 120, col = 80, def = 200, heal = 0) - * player.setBarbPoints(newPoints) - * ``` - */ -fun Player.setBarbPoints(points: BarbAssaultPoints) { - val rolePoints = points.clamped() - setAttribute("/save:barbass:atk-points", rolePoints.atk) - setAttribute("/save:barbass:col-points", rolePoints.col) - setAttribute("/save:barbass:def-points", rolePoints.def) - setAttribute("/save:barbass:heal-points", rolePoints.heal) -} -/** - * Adds Barbarian Assault points to the player. - * - * @param additional The points to be added to the player's current Barbarian Assault points. - * Values will be automatically clamped between 0 and 500. - * - * Example usage: - * ``` - * // Give the player 30 attacker points and 10 collector points - * player.addBarbPoints(BarbAssaultPoints(atk = 30, col = 10, def = 0, heal = 0)) - * ``` - */ -fun Player.addBarbPoints(additional: BarbAssaultPoints) { - setBarbPoints(getBarbPoints() + additional) -} -/** - * Removes Barbarian Assault points from the player. - * - * @param toRemove The points to be subtracted from the player's current Barbarian Assault points. - * Values will be clamped so that no role goes below 0. - * - * Example usage: - * ``` - * // Remove 15 attacker points and 5 defender points - * player.removeBarbPoints(BarbAssaultPoints(atk = 15, col = 0, def = 5, heal = 0)) - * ``` - */ -fun Player.removeBarbPoints(toRemove: BarbAssaultPoints) { - setBarbPoints(getBarbPoints() - toRemove) -} + data class BarbAssaultLevels(val atk: Int, val col: Int, val def: Int, val heal: Int) { fun clamped(): BarbAssaultLevels = BarbAssaultLevels( @@ -94,76 +21,6 @@ data class BarbAssaultLevels(val atk: Int, val col: Int, val def: Int, val heal: ) } -fun Player.hasQueenKill(): Boolean = getAttribute("barbass:queen-kill", 0) > 0 -/** - * Retrieves the player's Barbarian Assault role levels from their saved attributes. - * Defaults to level 1 for any role if not previously set. - * - * @return [BarbAssaultLevels] containing the level for each role: - * - `atk`: Attacker level - * - `col`: Collector level - * - `def`: Defender level - * - `heal`: Healer level - * - * Example usage: - * ``` - * val levels = player.getBarbLevels() - * println("Attacker Level: ${levels.atk}") - * ``` - */ -fun Player.getBarbLevels(): BarbAssaultLevels = BarbAssaultLevels( - getAttribute("barbass:atk-level", 1), - getAttribute("barbass:col-level", 1), - getAttribute("barbass:def-level", 1), - getAttribute("barbass:heal-level", 1) -) -/** - * Sets the player's Barbarian Assault role levels and saves them to persistent attributes. - * - * @param levels The [BarbAssaultLevels] object containing levels for each role: - * - `atk`: Attacker level (1–5) - * - `col`: Collector level (1–5) - * - `def`: Defender level (1–5) - * - `heal`: Healer level (1–5) - * - * Example usage: - * ``` - * val newLevels = BarbAssaultLevels(atk = 2, col = 1, def = 3, heal = 1) - * player.setBarbLevels(newLevels) - * ``` - */ -fun Player.setBarbLevels(levels: BarbAssaultLevels) { - setAttribute("/save:barbass:atk-level", levels.atk) - setAttribute("/save:barbass:col-level", levels.col) - setAttribute("/save:barbass:def-level", levels.def) - setAttribute("/save:barbass:heal-level", levels.heal) -} -/** - * Increases the level of the specified Barbarian Assault role by 1, up to a maximum of 5. - * - * Only one role can be increased at a time. The result is clamped to ensure the level does not exceed 5. - * - * @param role The [BarbRole] to increase the level of. Must be one of: - * - `BarbRole.ATTACKER` - * - `BarbRole.COLLECTOR` - * - `BarbRole.DEFENDER` - * - `BarbRole.HEALER` - * - * Example usage: - * ``` - * player.increaseBarbRoleLevel(BarbRole.ATTACKER) - * ``` - */ -fun Player.increaseBarbRoleLevel(role: BarbRole) { - val current = getBarbLevels() - val newLevels = when (role) { - BarbRole.ATTACKER -> current.copy(atk = current.atk + 1) - BarbRole.COLLECTOR -> current.copy(col = current.col + 1) - BarbRole.DEFENDER -> current.copy(def = current.def + 1) - BarbRole.HEALER -> current.copy(heal = current.heal + 1) - }.clamped() - setBarbLevels(newLevels) -} fun BarbAssaultLevels.getLevel(role: BarbRole): Int = when (role) { BarbRole.ATTACKER -> atk BarbRole.COLLECTOR -> col diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt b/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt new file mode 100644 index 000000000..6728fbba7 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt @@ -0,0 +1,185 @@ +package content.minigame.barbassault + +import content.minigame.barbassault.arena.BarbassaultSession +import core.game.node.entity.player.Player + +private const val BA_SESSION_KEY = "ba-session" +/** + * Gets or sets the player's current Barbarian Assault session. + * + * This property provides convenient access to the player's active + * [BarbassaultSession], if one exists. + * + * When setting: + * - Assigning a non-null value will store the session on the player. + * - Assigning `null` will remove the session attribute entirely. + * + * @return The current [BarbassaultSession] if the player is in a session, + * or `null` if they are not participating in Barbarian Assault. + */ +var Player.baSession: BarbassaultSession? + get() = getAttribute(BA_SESSION_KEY) + set(value) { + if (value == null) removeAttribute(BA_SESSION_KEY) + else setAttribute(BA_SESSION_KEY, value) + } + +fun Player.isBAHealer(): Boolean { + return baSession?.team?.isHealer(this) == true +} + +/** + * Retrieves the player's current Barbarian Assault points. + * + * @return [BarbAssaultPoints] representing the player's stored points in each role: + * - `atk`: Attacker points + * - `col`: Collector points + * - `def`: Defender points + * - `heal`: Healer points + * + * Example usage: + * ``` + * val points = player.getBarbPoints() + * println("Attacker points: ${points.atk}") + * ``` + */ +fun Player.getBarbPoints(): BarbAssaultPoints = BarbAssaultPoints( + getAttribute("barbass:atk-points", 0), + getAttribute("barbass:col-points", 0), + getAttribute("barbass:def-points", 0), + getAttribute("barbass:heal-points", 0) +) +/** + * Sets the player's Barbarian Assault role points, clamping each to the allowed range (0 to 500) + * and saving them to persistent storage. + * + * @param points [BarbAssaultPoints] containing the new point values for each role: + * - `atk`: Attacker points + * - `col`: Collector points + * - `def`: Defender points + * - `heal`: Healer points + * + * Example usage: + * ``` + * val newPoints = BarbAssaultPoints(atk = 120, col = 80, def = 200, heal = 0) + * player.setBarbPoints(newPoints) + * ``` + */ +fun Player.setBarbPoints(points: BarbAssaultPoints) { + val rolePoints = points.clamped() + setAttribute("/save:barbass:atk-points", rolePoints.atk) + setAttribute("/save:barbass:col-points", rolePoints.col) + setAttribute("/save:barbass:def-points", rolePoints.def) + setAttribute("/save:barbass:heal-points", rolePoints.heal) +} +/** + * Adds Barbarian Assault points to the player. + * + * @param additional The points to be added to the player's current Barbarian Assault points. + * Values will be automatically clamped between 0 and 500. + * + * Example usage: + * ``` + * // Give the player 30 attacker points and 10 collector points + * player.addBarbPoints(BarbAssaultPoints(atk = 30, col = 10, def = 0, heal = 0)) + * ``` + */ +fun Player.addBarbPoints(additional: BarbAssaultPoints) { + setBarbPoints(getBarbPoints() + additional) +} +/** + * Removes Barbarian Assault points from the player. + * + * @param toRemove The points to be subtracted from the player's current Barbarian Assault points. + * Values will be clamped so that no role goes below 0. + * + * Example usage: + * ``` + * // Remove 15 attacker points and 5 defender points + * player.removeBarbPoints(BarbAssaultPoints(atk = 15, col = 0, def = 5, heal = 0)) + * ``` + */ +fun Player.removeBarbPoints(toRemove: BarbAssaultPoints) { + setBarbPoints(getBarbPoints() - toRemove) +} + +/** + * Checks whether the player has defeated the Penance Queen at least once. + * + * This is determined by the `"barbass:queen-kill"` attribute, + * which tracks the number of successful Queen kills. + * + * @return `true` if the player has one or more Queen kills, + * otherwise `false`. + */ +fun Player.hasQueenKill(): Boolean = getAttribute("barbass:queen-kill", 0) > 0 + +/** + * Retrieves the player's Barbarian Assault role levels from their saved attributes. + * Defaults to level 1 for any role if not previously set. + * + * @return [BarbAssaultLevels] containing the level for each role: + * - `atk`: Attacker level + * - `col`: Collector level + * - `def`: Defender level + * - `heal`: Healer level + * + * Example usage: + * ``` + * val levels = player.getBarbLevels() + * println("Attacker Level: ${levels.atk}") + * ``` + */ +fun Player.getBarbLevels(): BarbAssaultLevels = BarbAssaultLevels( + getAttribute("barbass:atk-level", 1), + getAttribute("barbass:col-level", 1), + getAttribute("barbass:def-level", 1), + getAttribute("barbass:heal-level", 1) +) +/** + * Sets the player's Barbarian Assault role levels and saves them to persistent attributes. + * + * @param levels The [BarbAssaultLevels] object containing levels for each role: + * - `atk`: Attacker level (1–5) + * - `col`: Collector level (1–5) + * - `def`: Defender level (1–5) + * - `heal`: Healer level (1–5) + * + * Example usage: + * ``` + * val newLevels = BarbAssaultLevels(atk = 2, col = 1, def = 3, heal = 1) + * player.setBarbLevels(newLevels) + * ``` + */ +fun Player.setBarbLevels(levels: BarbAssaultLevels) { + setAttribute("/save:barbass:atk-level", levels.atk) + setAttribute("/save:barbass:col-level", levels.col) + setAttribute("/save:barbass:def-level", levels.def) + setAttribute("/save:barbass:heal-level", levels.heal) +} +/** + * Increases the level of the specified Barbarian Assault role by 1, up to a maximum of 5. + * + * Only one role can be increased at a time. The result is clamped to ensure the level does not exceed 5. + * + * @param role The [BarbRole] to increase the level of. Must be one of: + * - `BarbRole.ATTACKER` + * - `BarbRole.COLLECTOR` + * - `BarbRole.DEFENDER` + * - `BarbRole.HEALER` + * + * Example usage: + * ``` + * player.increaseBarbRoleLevel(BarbRole.ATTACKER) + * ``` + */ +fun Player.increaseBarbRoleLevel(role: BarbRole) { + val current = getBarbLevels() + val newLevels = when (role) { + BarbRole.ATTACKER -> current.copy(atk = current.atk + 1) + BarbRole.COLLECTOR -> current.copy(col = current.col + 1) + BarbRole.DEFENDER -> current.copy(def = current.def + 1) + BarbRole.HEALER -> current.copy(heal = current.heal + 1) + }.clamped() + setBarbLevels(newLevels) +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt index 21290889c..37c8e7b90 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt @@ -1,6 +1,6 @@ package content.minigame.barbassault.arena -import content.minigame.barbassault.lobby.baSession +import content.minigame.barbassault.baSession import core.api.inInventory import core.api.sendChat import core.api.sendMessage diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt index 2010ef272..a12c0be5f 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt @@ -2,23 +2,17 @@ package content.minigame.barbassault import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.BarbassaultState -import content.minigame.barbassault.lobby.BarbassaultLobby -import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.waveLobbies -import content.minigame.barbassault.lobby.baSession import core.api.log -import core.api.sendMessage import core.game.activity.ActivityManager import core.game.activity.ActivityPlugin import core.game.node.Node import core.game.node.entity.Entity import core.game.node.entity.combat.CombatStyle -import core.game.node.entity.impl.PulseManager import core.game.node.entity.player.Player import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.map.zone.ZoneRestriction -import core.game.world.map.zone.ZoneType import core.plugin.Initializable import core.tools.Log diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 5d657d4dc..49fff3566 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -8,8 +8,9 @@ import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadEggHopper import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadHopperEggs import content.minigame.barbassault.arena.scenery.EggCannon.Companion.showEggHopperCount +import content.minigame.barbassault.baSession import content.minigame.barbassault.getBarbLevels -import content.minigame.barbassault.lobby.baSession +import content.minigame.barbassault.isBAHealer import core.api.* import core.game.global.action.ClimbActionHandler import core.game.global.action.DropListener @@ -168,12 +169,12 @@ class BarbassaultGameArea : InteractionListener, MapArea { //you healed $heal.count hitpoints. //You've been healed $amount hitpoints and your poison cured. on(Scenery.HEALER_SPRING_20150, IntType.SCENERY, "Drink-from") { player, _ -> - //you need to be a healer to drink from spring - if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) { + if (player.isBAHealer()) { player.animate(Animation(5407)) player.lock(5) GameWorld.Pulser.submit(object : Pulse(3, player) { override fun pulse(): Boolean { + //todo switch to Healer level instead of Horn in inv val healAmount = getHealerHorn(player)?.healAmount ?: 10 //Should also restore run energy Amount heal(player, healAmount) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index b0758b15b..1443ced68 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -4,6 +4,7 @@ import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultActivity import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.GloryHorn +import content.minigame.barbassault.baSession import content.minigame.barbassault.getBarbLevels import content.minigame.barbassault.lobby.* import core.api.* @@ -149,7 +150,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi state = BarbassaultState.FORFEIT } - fun isBarbAssaultGame() = state == BarbassaultState.IN_ARENA + fun isInBarbAssaultGame() = state == BarbassaultState.IN_ARENA fun endGame(endReason: String){ eventBus.clear() diff --git a/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt b/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt index d0c990c9c..d0e038444 100644 --- a/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt +++ b/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt @@ -1,11 +1,8 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.lobby.BarbTeam -import content.minigame.barbassault.lobby.baSession -import core.api.sendItemZoomOnInterface +import content.minigame.barbassault.baSession import core.api.setComponentVisibility -import core.api.setInterfaceModel import core.api.setInterfaceText import core.game.component.Component import core.game.component.ComponentDefinition diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt index 6576ec305..e755b19e3 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt @@ -1,16 +1,13 @@ package content.minigame.barbassault.arenas.monsters import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.arena.BaHornSystem import content.minigame.barbassault.arena.BarbAssEvent import content.minigame.barbassault.arena.BarbAssaultCombat -import content.minigame.barbassault.arena.BarbassaultSession -import content.minigame.barbassault.lobby.baSession +import content.minigame.barbassault.baSession import core.api.* import core.game.node.entity.Entity import core.game.node.entity.combat.BattleState import core.game.node.entity.combat.CombatStyle -import core.game.node.entity.combat.ImpactHandler import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior import core.game.node.entity.player.Player diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceHealerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceHealerNPC.kt index bb8922302..cfe1e0995 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceHealerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceHealerNPC.kt @@ -2,7 +2,7 @@ package content.minigame.barbassault.arena.monsters import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent -import content.minigame.barbassault.lobby.baSession +import content.minigame.barbassault.baSession import core.game.node.entity.Entity import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt index 6716abd81..b031d341c 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt @@ -3,7 +3,7 @@ package content.minigame.barbassault.arena.monsters import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent import content.minigame.barbassault.arena.BarbAssaultCombat -import content.minigame.barbassault.lobby.baSession +import content.minigame.barbassault.baSession import core.api.* import core.api.getItemFromEquipment import core.game.node.entity.Entity diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt index 6907e2d12..ccc83e0fd 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt @@ -4,16 +4,14 @@ import content.minigame.barbassault.BarbRole import core.game.node.entity.Entity import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior -import core.game.world.map.Location import org.rs09.consts.NPCs import content.minigame.barbassault.arena.* -import content.minigame.barbassault.lobby.baSession +import content.minigame.barbassault.baSession import core.api.forceWalk import core.api.removeGroundItem import core.api.sendChat import core.game.node.entity.player.Player import core.game.node.item.GroundItem -import core.game.node.item.GroundItemManager val PENANCE_RUNNER_IDS = listOf( diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt index a7eea4aaf..7b8d8fcc2 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt @@ -1,17 +1,13 @@ package content.minigame.barbassault.arena.scenery -import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.monsters.PENANCE_RUNNER_IDS -import content.minigame.barbassault.lobby.baSession import core.api.* -import core.game.node.Node import core.game.node.entity.Entity import core.game.node.entity.player.Player import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.map.zone.ZoneBorders -import org.rs09.consts.Items import org.rs09.consts.Scenery diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt index 1aed5cc4c..80edff69f 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -1,7 +1,7 @@ package content.minigame.barbassault.arena.scenery import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.lobby.baSession +import content.minigame.barbassault.baSession import core.api.* import core.game.component.CloseEvent import core.game.component.Component diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt index 8a608abf5..6ffdfb113 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt @@ -2,7 +2,7 @@ package content.minigame.barbassault.arena.scenery import content.minigame.barbassault.arena.BaHornSystem.BaCall import content.minigame.barbassault.arena.BarbassaultSession -import content.minigame.barbassault.lobby.baSession +import content.minigame.barbassault.baSession import core.api.* import core.game.component.Component import core.game.component.ComponentDefinition diff --git a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt index 1947f3337..ac0e0409f 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt @@ -1,18 +1,11 @@ package content.minigame.barbassault.bots import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.lobby.baSession +import content.minigame.barbassault.baSession import core.game.interaction.MovementPulse -import core.game.node.Node -import core.game.node.entity.npc.NPC import core.game.world.map.Location -import core.game.world.map.RegionManager import core.game.world.map.path.Pathfinder import core.tools.RandomFunction -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch -import content.minigame.pestcontrol.PestControlHelper.GATE_ENTRIES -import content.minigame.pestcontrol.PestControlHelper.getMyPestControlSession1 import core.game.world.GameWorld import java.util.* diff --git a/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt b/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt index 1926f3264..958fee902 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt @@ -6,7 +6,7 @@ import content.minigame.barbassault.lobby.BarbassQuickWaveActivity.Companion.add import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.MAIN_LOBBY import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.QUICK_START import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.waveLobbies -import content.minigame.barbassault.lobby.baSession +import content.minigame.barbassault.baSession import core.api.forceMove import core.api.getRegionBorders import core.game.bots.CombatBotAssembler @@ -15,7 +15,6 @@ import core.game.global.action.EquipHandler import core.game.node.item.Item import core.game.world.map.Location import org.rs09.consts.Scenery -import java.util.* class BarbassBot(l: Location) : PvMBots(legitimizeLocation(l)){ init { diff --git a/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt index a11f0e96f..212a7c03e 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt @@ -1,13 +1,10 @@ package content.minigame.barbassault.lobby -import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.baSession import content.minigame.barbassault.lobby.BarbTeamManager.abandonTeam import content.minigame.barbassault.lobby.BarbTeamManager.joinTeam -import content.minigame.barbassault.lobby.CurrentTeam.ROLE_MODEL_MAP -import content.minigame.barbassault.lobby.CurrentTeam.modelZoom import core.api.closeInterface import core.api.sendMessage -import core.api.setInterfaceModel import core.api.setInterfaceText import core.game.component.Component import core.game.component.ComponentDefinition diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt index 5b719420b..e48614d41 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt @@ -4,39 +4,12 @@ import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultActivity import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.BarbassaultState +import content.minigame.barbassault.baSession import content.minigame.barbassault.getBarbLevels -import core.api.clearLogoutListener import core.api.sendMessage import core.game.node.entity.player.Player import core.game.world.map.Location - -/* -Player -└─ attribute "ba-session" - └─ BarbassaultSession : MapArea - └─ team : BarbTeam - └─ slots → Players -*/ - -private const val BA_SESSION_KEY = "ba-session" - -var Player.baSession: BarbassaultSession? - get() = getAttribute(BA_SESSION_KEY) - set(value) { - if (value == null) removeAttribute(BA_SESSION_KEY) - else setAttribute(BA_SESSION_KEY, value) - } - -/** -private val playerTeams = mutableMapOf() -var Player.team: BarbTeam? - get() = playerTeams[this] - set(value) { - if (value == null) playerTeams.remove(this) - else playerTeams[this] = value - }*/ - data class PartySlot( val index: Int, val player: Player, var role: BarbRole? = null ) data class PendingRecruit( var player: Player, var role: BarbRole? = null,var accept:Boolean = false ) { fun roleLevel(): Int = when (role) { diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassQuickWaveActivity.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassQuickWaveActivity.kt index 47242ab4a..f19ed15fa 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassQuickWaveActivity.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassQuickWaveActivity.kt @@ -1,6 +1,7 @@ package content.minigame.barbassault.lobby import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.baSession import content.minigame.barbassault.lobby.BarbTeamManager.createTeam import core.api.* import core.game.activity.ActivityManager diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt index 102de4d82..072cb0abb 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt @@ -2,6 +2,7 @@ package content.minigame.barbassault.lobby import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbassaultState +import content.minigame.barbassault.baSession import content.minigame.barbassault.lobby.BarbTeamManager.abandonTeam import content.minigame.barbassault.lobby.BarbTeamManager.createTeam import content.minigame.barbassault.lobby.BarbTeamManager.disbandTeam diff --git a/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt index e13befa9a..ad77c5e32 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt @@ -1,9 +1,9 @@ package content.minigame.barbassault.lobby import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.baSession import content.minigame.barbassault.lobby.CurrentTeam.ROLE_MODEL_MAP import content.minigame.barbassault.lobby.CurrentTeam.modelZoom -import core.api.sendMessage import core.api.setInterfaceModel import core.api.setInterfaceText import core.game.component.Component diff --git a/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt index 4956a4a5c..34ded1f37 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt @@ -1,7 +1,7 @@ package content.minigame.barbassault.lobby import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.lobby.BarbTeamManager.joinTeam +import content.minigame.barbassault.baSession import core.api.* import core.game.component.Component import core.game.component.ComponentDefinition diff --git a/Server/src/main/core/game/node/entity/combat/ImpactHandler.java b/Server/src/main/core/game/node/entity/combat/ImpactHandler.java index 4387950ad..32c54ac2b 100644 --- a/Server/src/main/core/game/node/entity/combat/ImpactHandler.java +++ b/Server/src/main/core/game/node/entity/combat/ImpactHandler.java @@ -2,7 +2,6 @@ package core.game.node.entity.combat; import content.data.EnchantedJewellery; import content.minigame.barbassault.arena.BarbassaultSession; -import content.minigame.barbassault.arena.BarbassaultState; import core.game.container.impl.EquipmentContainer; import core.game.node.entity.skill.Skills; import content.global.skill.summoning.familiar.Familiar; @@ -208,7 +207,7 @@ public final class ImpactHandler { if (hit > 0) { BarbassaultSession session = p.getAttribute("ba-session"); if (session != null) { - if (session.getState() == BarbassaultState.IN_ARENA) { + if (session.isInBarbAssaultGame()) { session.updateBarbHealerIfaceHPOfPlayer(p); } } diff --git a/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java b/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java index cef4061af..eccf123c8 100644 --- a/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java +++ b/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java @@ -2,12 +2,10 @@ package core.game.node.entity.player.link.prayer; import content.data.Quests; import content.minigame.barbassault.arena.BarbassaultSession; -import core.game.node.entity.player.link.diary.DiaryType; import core.game.node.entity.skill.SkillBonus; import core.game.node.entity.skill.Skills; import core.game.node.entity.player.Player; import core.game.node.entity.player.link.audio.Audio; -import core.game.world.map.zone.ZoneBorders; import core.tools.StringUtils; import core.game.event.*; import org.rs09.consts.Sounds; @@ -225,7 +223,7 @@ public enum PrayerType { public boolean permitted(final Player player) { BarbassaultSession session = player.getAttribute("ba-session"); if (session != null) { - if (session.isBarbAssaultGame()) { + if (session.isInBarbAssaultGame()) { //todo find correct message here sendMessage(player, "The barbarians do not allow the use of prayer in the arena."); toggle(player,false); From 04bb8d51ab5817122714e235c7c7b02530e75a57 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 12 Apr 2026 10:27:49 -0400 Subject: [PATCH 056/123] Player.getBarbWave() --- .../minigame/barbassault/BarbassBlackBoard.kt | 3 +-- .../barbassault/BarbassaultPlayerExtensions.kt | 12 ++++++++++++ .../content/minigame/barbassault/CommanderConnad.kt | 5 ++--- .../minigame/barbassault/arena/BarbassaultSession.kt | 3 ++- .../barbassault/lobby/AcceptRoleInterface.kt | 3 ++- .../content/minigame/barbassault/lobby/BarbTeam.kt | 3 ++- 6 files changed, 21 insertions(+), 8 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BarbassBlackBoard.kt b/Server/src/main/content/minigame/barbassault/BarbassBlackBoard.kt index e85bc2fe6..de7a09272 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassBlackBoard.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassBlackBoard.kt @@ -96,10 +96,9 @@ class BarbassBlackBoard { } fun updateBlackBoard(player: Player) { - val wave = player.getAttribute("barbass:wave", 1) player.interfaceManager.open(Component(Components.BARBASSAULT_PLAYERSTAT_490)) setInterfaceText(player, player.username, Components.BARBASSAULT_PLAYERSTAT_490, PLAYER_NAME) - setInterfaceText(player, wave.toString(), Components.BARBASSAULT_PLAYERSTAT_490, CURRENT_WAVE) + setInterfaceText(player, player.getBarbWave().toString(), Components.BARBASSAULT_PLAYERSTAT_490, CURRENT_WAVE) val playerLevel = player.getBarbLevels() val playerPoints = player.getBarbPoints() diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt b/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt index 6728fbba7..9c4746e48 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt @@ -182,4 +182,16 @@ fun Player.increaseBarbRoleLevel(role: BarbRole) { BarbRole.HEALER -> current.copy(heal = current.heal + 1) }.clamped() setBarbLevels(newLevels) +} + +/** + * Retrieves the player's current Barbarian Assault wave. + * + * This value is stored under the `"barbass:wave"` attribute and + * represents the wave the player is currently on in a session. + * + * @return The current wave number. Defaults to `1` if no value is set. + */ +fun Player.getBarbWave(): Int? { + return this.getAttribute("barbass:wave", 1) } \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/CommanderConnad.kt b/Server/src/main/content/minigame/barbassault/CommanderConnad.kt index df3eebd00..dc91062f5 100644 --- a/Server/src/main/content/minigame/barbassault/CommanderConnad.kt +++ b/Server/src/main/content/minigame/barbassault/CommanderConnad.kt @@ -77,7 +77,7 @@ class CommanderConnad(player: Player? = null) : DialoguePlugin(player) { 77 -> npcl(FacialExpression.ASKING,"I can change it down to wave 1, Are you sure you want that?").also { stage++ } 78 -> showTopics( Topic(FacialExpression.FRIENDLY, "Yes, reset my wave to one.",79), - Topic(FacialExpression.FRIENDLY, "No, I want to stay on wave ${player!!.getAttribute("barbass:wave")}.",10) + Topic(FacialExpression.FRIENDLY, "No, I want to stay on wave ${player?.getBarbWave()}.",10) ) 79 -> { npcl(FacialExpression.ASKING,"Very well.").also { stage = END_DIALOGUE } @@ -98,8 +98,7 @@ class CommanderConnad(player: Player? = null) : DialoguePlugin(player) { return 50 } private fun areWaveOne(player: Player?): Int { - val currentWave = player!!.getAttribute("barbass:wave") - if (currentWave != 1) return 77 + if (player?.getBarbWave() != 1) return 77 return 75 } override fun getIds(): IntArray { diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 1443ced68..eaf863c15 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -6,6 +6,7 @@ import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.GloryHorn import content.minigame.barbassault.baSession import content.minigame.barbassault.getBarbLevels +import content.minigame.barbassault.getBarbWave import content.minigame.barbassault.lobby.* import core.api.* import core.game.node.entity.Entity @@ -283,7 +284,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi log(this::class.java, Log.FINE, "ENTERED Barbassault Arena") val player = entity as? Player ?: return - val waveNum = player.getAttribute("barbass:wave", 1) + val waveNum = player.getBarbWave() val wornIconId = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id val interfaceId = getIconInterfaceId(wornIconId ?: -1) player.fullRestore() diff --git a/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt index 212a7c03e..05787854a 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt @@ -1,6 +1,7 @@ package content.minigame.barbassault.lobby import content.minigame.barbassault.baSession +import content.minigame.barbassault.getBarbWave import content.minigame.barbassault.lobby.BarbTeamManager.abandonTeam import content.minigame.barbassault.lobby.BarbTeamManager.joinTeam import core.api.closeInterface @@ -47,7 +48,7 @@ class AcceptRoleInterface : ComponentPlugin() { if (slotPlayer != null) { val formattedRole = slotPlayer.baSession?.team?.getRoleForPlayer(slotPlayer)?.toString()?.lowercase()?.replaceFirstChar { it.uppercase() }?: AcceptRole.defaultText - val wave = slotPlayer.getAttribute("barbass:wave", 1) ?: 0 + val wave = slotPlayer.getBarbWave() setInterfaceText(player, slotPlayer.name.capitalizeWords(), AcceptRole.ID, uiSlot.name ) setInterfaceText(player, formattedRole, AcceptRole.ID, uiSlot.role ) setInterfaceText(player, wave.toString(), AcceptRole.ID, uiSlot.wave ) diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt index e48614d41..1f0d3665c 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt @@ -6,6 +6,7 @@ import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.BarbassaultState import content.minigame.barbassault.baSession import content.minigame.barbassault.getBarbLevels +import content.minigame.barbassault.getBarbWave import core.api.sendMessage import core.game.node.entity.player.Player import core.game.world.map.Location @@ -34,7 +35,7 @@ class BarbTeam(val session: BarbassaultSession, leader: Player) { init { slots[LEADER_SLOT] = PartySlot(LEADER_SLOT, leader) - wave = leader.getAttribute("barbass:wave", 1) + wave = leader.getBarbWave()!! } fun slotOf(player: Player): Int = From a5b4bd25a3b41955da11ce921aab78fa3cf96533 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 12 Apr 2026 10:48:32 -0400 Subject: [PATCH 057/123] Making IDE "warnings" happy --- .../minigame/barbassault/CommanderConnad.kt | 4 +-- .../barbassault/arena/BarbassaultSession.kt | 34 ++++--------------- .../barbassault/lobby/AcceptRoleInterface.kt | 6 ++-- .../minigame/barbassault/lobby/BarbTeam.kt | 12 +------ 4 files changed, 12 insertions(+), 44 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/CommanderConnad.kt b/Server/src/main/content/minigame/barbassault/CommanderConnad.kt index dc91062f5..7ee4a822d 100644 --- a/Server/src/main/content/minigame/barbassault/CommanderConnad.kt +++ b/Server/src/main/content/minigame/barbassault/CommanderConnad.kt @@ -54,7 +54,7 @@ class CommanderConnad(player: Player? = null) : DialoguePlugin(player) { openInterface(player,Components.BARBASSAULT_REWARD_SHOP_491) } //Point Check - 25 -> npcl(FacialExpression.FRIENDLY,"Let me check...").also { stage = getBarbPointStage(player,barbasspoints.total) } + 25 -> npcl(FacialExpression.FRIENDLY,"Let me check...").also { stage = getBarbPointStage(barbasspoints.total) } 26 -> npcl(FacialExpression.FRIENDLY,"You have absolutely no points, whatsoever. Best you get back into that arena!").also { stage = 10 } 27 -> npcl(FacialExpression.FRIENDLY,"You have: ${barbasspoints.atk} Attacker Honour Points, ${barbasspoints.def} Defender Honour Points, ${barbasspoints.col} Collector Honour Points and ${barbasspoints.heal} Healer Honour Points.").also { stage = 10 } @@ -88,7 +88,7 @@ class CommanderConnad(player: Player? = null) : DialoguePlugin(player) { } return true } - private fun getBarbPointStage(player: Player, total: Int): Int { + private fun getBarbPointStage(total: Int): Int { if (total == 0 ) return 26 return 27 } diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index eaf863c15..091a34714 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -1,5 +1,6 @@ package content.minigame.barbassault.arena +import content.minigame.barbassault.ALL_BARBASS_ITEMS import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultActivity import content.minigame.barbassault.arena.scenery.EggCannon @@ -46,7 +47,6 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi val scoreManager = BarbScoreManager() val eventBus = BarbAssEventBus() val npcCaps = SpawnCaps(4,4,2,2)//wave 1 - val endReason = "left" private val countDoown = if(GameWorld.settings?.isDevMode == true) 4 else 60 @@ -232,28 +232,10 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi region.flagInactive() } - val barbassItems = arrayOf( - Item(ATTACKER_ICON), - Item(Items.ATTACKER_HORN_10516), Item(Items.ATTACKER_HORN_10517), Item(Items.ATTACKER_HORN_10518), Item(Items.ATTACKER_HORN_10519), Item(Items.ATTACKER_HORN_10520), - Item(DEFENDER_ICON), - Item(Items.WORMS_10515),Item(Items.CRACKERS_10513), Item(Items.TOFU_10514), - Item(Items.LOGS_11760),Item(Items.HAMMER_2347), - Item(Items.DEFENDER_HORN_10538), - - Item(HEALER_ICON), - Item(Items.HEALING_VIAL_10546),Item(Items.HEALING_VIAL1_10545),Item(Items.HEALING_VIAL2_10544),Item(Items.HEALING_VIAL3_10543),Item(Items.HEALING_VIAL4_10542), - Item(Items.HEALER_HORN_10526),Item(Items.HEALER_HORN_10527),Item(Items.HEALER_HORN_10528),Item(Items.HEALER_HORN_10529),Item(Items.HEALER_HORN_10530), - Item(Items.POISONED_WORMS_10540),Item(Items.POISONED_TOFU_10539),Item(Items.POISONED_MEAT_10541), - - Item(COLLECTOR_ICON), - Item(Items.COLLECTOR_HORN_10560), - Item(Items.COLLECTION_BAG_10521),Item(Items.COLLECTION_BAG_10522),Item(Items.COLLECTION_BAG_10523),Item(Items.COLLECTION_BAG_10524),Item(Items.COLLECTION_BAG_10525), - Item(Items.BLUE_EGG_10533),Item(Items.RED_EGG_10532),Item(Items.GREEN_EGG_10531), - ) private fun handleLogout(player: Player) { state = BarbassaultState.FORFEIT - zone.cleanItems(player,barbassItems) + zone.cleanItems(player,ALL_BARBASS_ITEMS) region.remove(player) team.removePlayer(player) player.locks.unlockTeleport() @@ -302,7 +284,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi var player = entity as Player //exitMiniGame(player) removeTimer(player, "teleblock") - zone.cleanItems(player,barbassItems)//region.remove(player) + zone.cleanItems(player,ALL_BARBASS_ITEMS)//region.remove(player) clearLogoutListener(player, "ba-logout") player.fullRestore() @@ -385,19 +367,17 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi } } fun broadcastToRole(role: BarbRole, message: String) { - team.allPlayers().filter { - team.getRoleForPlayer(it) == role - }.forEach { + team.getPlayersByRole(role).forEach { sendMessage(it, message) } } fun updateBarbHealerIfaceHPOfPlayer(player: Player){ - team.allPlayers().filter { team.getRoleForPlayer(it) == BarbRole.HEALER }.forEach { - HealerIfaceHPUpdatePlayer(it,player) + team.getPlayersByRole(BarbRole.HEALER).forEach { + HealerIfaceHPUpdatePlayer(it, player) } } fun alertHealers(player:Player){ - team.allPlayers().filter { team.getRoleForPlayer(it) == BarbRole.HEALER }.forEach { + team.getPlayersByRole(BarbRole.HEALER).forEach { HealerIfaceMedicHelp(it,player) } } diff --git a/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt index 05787854a..dfc106142 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt @@ -16,7 +16,6 @@ import core.plugin.Plugin @Initializable class AcceptRoleInterface : ComponentPlugin() { - private var waitingStatus = true override fun newInstance(arg: Any?): Plugin { ComponentDefinition.forId(AcceptRole.ID).plugin = this return this @@ -38,7 +37,6 @@ class AcceptRoleInterface : ComponentPlugin() { player ?: return val team = player.baSession?.team val recruit = team?.recruit?.player - val teamLeader = team?.getLeader() component?.setCloseEvent{ _, _ -> if (recruit != null && isopen) { closeInterface(recruit); isopen = false }; return@setCloseEvent true } for (slotIndex in 0 until BarbTeam.MAX_SLOTS) { @@ -67,7 +65,7 @@ class AcceptRoleInterface : ComponentPlugin() { return } - val selectedRole = recruit?.role ?: return + val selectedRole = recruit.role ?: return val roleName = selectedRole.name.lowercase().replaceFirstChar { it.uppercase() } val rPlayer = recruit.player if (joinTeam(rPlayer, selectedRole)) { @@ -105,7 +103,7 @@ class AcceptRoleInterface : ComponentPlugin() { val recruit = team.recruit val displayName = recruit?.role?.name?.lowercase()?.replaceFirstChar { it.uppercase() } ?: "Unknown" val level = recruit?.roleLevel() - setInterfaceText(leader!!, displayName, AcceptRole.ID,AcceptRole.Status.selectedRole ) + setInterfaceText(leader, displayName, AcceptRole.ID,AcceptRole.Status.selectedRole ) setInterfaceText(leader, level.toString(), AcceptRole.ID,AcceptRole.Status.levelRole ) } fun resetWaitingStatus(player: Player?){ diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt index 1f0d3665c..5a7d0465f 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt @@ -65,16 +65,6 @@ class BarbTeam(val session: BarbassaultSession, leader: Player) { return true } - /** fun removePlayer(player: Player) { - val idx = slotOf(player) - if (idx == -1) return - - slots[idx] = null - player.team = null - player.removeAttribute(BA_SESSION_KEY) - clearLogoutListener(player, BA_SESSION_KEY) - //remove from barbsession barbmteam - }*/ fun removePlayer(player: Player) { val idx = slotOf(player) if (idx == -1) return @@ -90,7 +80,7 @@ class BarbTeam(val session: BarbassaultSession, leader: Player) { return true } - fun getAllRole(barbRole: BarbRole): List { + fun getPlayersByRole(barbRole: BarbRole): List { return slots.filterNotNull().map { it.player }.filter { getRoleForPlayer(it) == barbRole } } From 15b80ffb6d12c40078ab44ab0c4b6f06f2818a4f Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 12 Apr 2026 10:49:01 -0400 Subject: [PATCH 058/123] ALL_BARBASS_ITEMS --- .../minigame/barbassault/Barbassault.kt | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/Barbassault.kt b/Server/src/main/content/minigame/barbassault/Barbassault.kt index dcfe5b4b1..ff469eca5 100644 --- a/Server/src/main/content/minigame/barbassault/Barbassault.kt +++ b/Server/src/main/content/minigame/barbassault/Barbassault.kt @@ -1,9 +1,13 @@ package content.minigame.barbassault import content.minigame.barbassault.arena.ATTACKER_ICON +import content.minigame.barbassault.arena.COLLECTOR_ICON +import content.minigame.barbassault.arena.DEFENDER_ICON import content.minigame.barbassault.arena.HEALER_ICON import core.api.removeItem import core.game.node.entity.player.Player +import core.game.node.item.Item +import org.rs09.consts.Items enum class BarbRole { ATTACKER, COLLECTOR,DEFENDER, HEALER } data class BarbAssaultPoints( val atk: Int = 0, val col: Int = 0, val def: Int = 0, val heal: Int = 0) { @@ -35,8 +39,22 @@ fun BarbAssaultPoints.getPoints(role: BarbRole): Int = when (role) { BarbRole.HEALER -> heal } -fun removeBarbassItems(player: Player){ - //check if we were in ba-instance last. if so then remove all BA Items (Horns icons runes,arrows) - removeItem(player, intArrayOf(ATTACKER_ICON, HEALER_ICON)) +val ALL_BARBASS_ITEMS = arrayOf( + Item(ATTACKER_ICON), + Item(Items.ATTACKER_HORN_10516), Item(Items.ATTACKER_HORN_10517), Item(Items.ATTACKER_HORN_10518), Item(Items.ATTACKER_HORN_10519), Item(Items.ATTACKER_HORN_10520), -} \ No newline at end of file + Item(DEFENDER_ICON), + Item(Items.WORMS_10515),Item(Items.CRACKERS_10513), Item(Items.TOFU_10514), + Item(Items.LOGS_11760),Item(Items.HAMMER_2347), + Item(Items.DEFENDER_HORN_10538), + + Item(HEALER_ICON), + Item(Items.HEALING_VIAL_10546),Item(Items.HEALING_VIAL1_10545),Item(Items.HEALING_VIAL2_10544),Item(Items.HEALING_VIAL3_10543),Item(Items.HEALING_VIAL4_10542), + Item(Items.HEALER_HORN_10526),Item(Items.HEALER_HORN_10527),Item(Items.HEALER_HORN_10528),Item(Items.HEALER_HORN_10529),Item(Items.HEALER_HORN_10530), + Item(Items.POISONED_WORMS_10540),Item(Items.POISONED_TOFU_10539),Item(Items.POISONED_MEAT_10541), + + Item(COLLECTOR_ICON), + Item(Items.COLLECTOR_HORN_10560), + Item(Items.COLLECTION_BAG_10521),Item(Items.COLLECTION_BAG_10522),Item(Items.COLLECTION_BAG_10523),Item(Items.COLLECTION_BAG_10524),Item(Items.COLLECTION_BAG_10525), + Item(Items.BLUE_EGG_10533),Item(Items.RED_EGG_10532),Item(Items.GREEN_EGG_10531), +) \ No newline at end of file From 3eba7f2f67bf08392bb09194956ad62744dabf18 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 12 Apr 2026 10:51:22 -0400 Subject: [PATCH 059/123] unused imports --- Server/src/main/content/minigame/barbassault/Barbassault.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/Barbassault.kt b/Server/src/main/content/minigame/barbassault/Barbassault.kt index ff469eca5..55ef821aa 100644 --- a/Server/src/main/content/minigame/barbassault/Barbassault.kt +++ b/Server/src/main/content/minigame/barbassault/Barbassault.kt @@ -4,8 +4,6 @@ import content.minigame.barbassault.arena.ATTACKER_ICON import content.minigame.barbassault.arena.COLLECTOR_ICON import content.minigame.barbassault.arena.DEFENDER_ICON import content.minigame.barbassault.arena.HEALER_ICON -import core.api.removeItem -import core.game.node.entity.player.Player import core.game.node.item.Item import org.rs09.consts.Items From 2b2b78c9a716b56b58c35c71247c86b28095ad88 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 12 Apr 2026 11:12:26 -0400 Subject: [PATCH 060/123] dev/helper commands for barbass to be more readable --- .../minigame/barbassault/BarbassDevHelper.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt index f7b2870a5..56327d8ca 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt @@ -19,15 +19,20 @@ class BarbassDevHelper : CommandSet(Privilege.ADMIN) { var babotcount = 0 override fun defineCommands() { - define ("maxbarbpts") { player,_ -> + define ("maxbarbpoints") { player,_ -> player.addBarbPoints(BarbAssaultPoints(500, 500, 500,500)) return@define } - define ("rstbarbpts") { player,_ -> + define ("setbarbwave") { player,args -> + player.setAttribute("/save:barbass:wave", args[1].toIntOrNull()) + return@define + } + + define ("resetbarbpoints") { player,_ -> player.setBarbPoints(BarbAssaultPoints(0, 0, 0,0)) return@define } - define ("rstbarblvl") { player,_ -> + define ("resetbarblevels") { player,_ -> player.setBarbLevels(BarbAssaultLevels(0, 0, 0,0)) return@define } @@ -115,7 +120,7 @@ class BarbassDevHelper : CommandSet(Privilege.ADMIN) { //replaceScenery(getScenery(thistrap)!!,Scenery.RUNNER_TRAP1_20230,40,thistrap) return@define } - + //should not need during testing now. define("rolekit", Privilege.ADMIN, " ", "Gives Barbarian Assault kit") { player, args -> data class RoleKit( val horns: IntArray? = null, val bags: IntArray? = null, val extraItems: List = emptyList() ) val roleKits = mapOf( From b14a131420a0a57f21368dec4f2bdb337e7f2bb7 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 12 Apr 2026 11:46:57 -0400 Subject: [PATCH 061/123] test --- .../src/main/content/minigame/barbassault/BarbassDevHelper.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt index 56327d8ca..c3a8459cd 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt @@ -3,10 +3,7 @@ package content.minigame.barbassault import content.minigame.barbassault.bots.BarbassBot import content.minigame.barbassault.lobby.BarbassaultLobby import core.api.* -import core.game.container.access.InterfaceContainer - import core.game.node.item.Item -import core.game.node.scenery.SceneryBuilder import core.game.system.command.Privilege import core.game.system.command.sets.CommandSet import core.game.world.map.Location From 7d1b7b7ebd7fd4a11fbcd9751891a82d351feff5 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 12 Apr 2026 14:59:59 -0400 Subject: [PATCH 062/123] notes and small corrections. --- .../minigame/barbassault/BarbassBlackBoard.kt | 12 ++++++------ .../minigame/barbassault/BarbassaultListeners.kt | 8 +++----- .../barbassault/arena/BarbassaultGameArea.kt | 2 +- .../minigame/barbassault/arena/BarbassaultSession.kt | 2 +- .../barbassault/arena/scenery/ItemMachine.kt | 4 ++-- .../barbassault/lobby/BarbassQuickWaveActivity.kt | 4 ++-- .../minigame/barbassault/lobby/BarbassaultLobby.kt | 4 ++-- .../barbassault/lobby/CurrentTeamInterface.kt | 1 + 8 files changed, 18 insertions(+), 19 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BarbassBlackBoard.kt b/Server/src/main/content/minigame/barbassault/BarbassBlackBoard.kt index de7a09272..fad979e56 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassBlackBoard.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassBlackBoard.kt @@ -54,12 +54,12 @@ class BarbassBlackBoard { 4 -> "Lure range 10" else -> " - Mastered - " } - - BarbRole.COLLECTOR -> when (level) { //is this the right info for 2009? - 1 -> "Bag holds 4 eggs" - 2 -> "Bag holds 6 eggs" - 3 -> "Bag holds 7 eggs" - 4 -> "Bag holds 8 eggs" + //https://youtu.be/wb1InggbaZc?t=57 + BarbRole.COLLECTOR -> when (level) { + 1 -> "Egg convert success 20%" + 2 -> "Egg convert success 40%" + 3 -> "Egg convert success 60%" + 4 -> "Egg convert success 80%" else -> " - Mastered - " } diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt b/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt index a7a63fda7..6d8bdd8dc 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt @@ -25,7 +25,6 @@ class BarbassaultListeners : InteractionListener { on(Scenery.LADDER_20226, IntType.SCENERY, "Climb-down") { player, _ -> // if (GameWorld.settings?.enable_barbassault != true) return@on false //todo players are allowed to wear capes in to the lobby, But not the Wave Rooms - //todo No summonings in lobby if (joinError(player)) return@on true val loc = Location(2593 , 5261 ) ClimbActionHandler.climb(player, ClimbActionHandler.CLIMB_DOWN, loc) @@ -49,8 +48,6 @@ class BarbassaultListeners : InteractionListener { } on(NPCs.COMMANDER_CONNAD_5029, IntType.NPC, "Get-rewards") { player, _ -> - //todo remove this varbit? I think I was testing. - setVarbit(player, 3256, 200) player.interfaceManager.open(Component(Components.BARBASSAULT_REWARD_SHOP_491)) return@on true } @@ -81,6 +78,7 @@ class BarbassaultListeners : InteractionListener { Items.SOUL_RUNE_566, Items.NATURE_RUNE_561 //todo extend not allowed items list. + //no Logs //add food //add ammo //summoning pouches @@ -91,7 +89,7 @@ class BarbassaultListeners : InteractionListener { if (item != null) { if (item.id in forbiddenRunes) { //todo find source for this message - return "You cannot take your own runes, ammunition, or potions into the game." + return "The barbarians do not allow outside food or runes." } } } @@ -100,7 +98,7 @@ class BarbassaultListeners : InteractionListener { private fun familiarCheck(player: Player): String? { if(player.familiarManager.hasFamiliar()) { //todo find correct message - return "You cannot take your follower into the game." + return "The barbarians do not allow followers." } return null } diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 49fff3566..491b04079 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -323,7 +323,7 @@ fun exitMiniGame(player: Player) { // removeAll(player, barbassItems) // region.clean - //todo should probably make sure familiars can't smuggle items out + //todo should probably make sure familiars can't smuggle items out even if they are "not" allowed to be summoned //(player.familiarManager.familiar as? BurdenBeast)?.container?.removeAll(barbassItems)//just in case someone smuggles a pet in. //award points, set Tp location to next wave //or lost game Send back to wave room diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 091a34714..beee22fb2 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -284,7 +284,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi var player = entity as Player //exitMiniGame(player) removeTimer(player, "teleblock") - zone.cleanItems(player,ALL_BARBASS_ITEMS)//region.remove(player) + zone.cleanItems(player,ALL_BARBASS_ITEMS) clearLogoutListener(player, "ba-logout") player.fullRestore() diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt index 327a32f02..20ae5cba1 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt @@ -1,6 +1,7 @@ package content.minigame.barbassault.arena.scenery import content.minigame.barbassault.arena.BaHornSystem +import content.minigame.barbassault.getBarbLevels import core.api.EquipmentSlot import core.api.addItem import core.api.getItemFromEquipment @@ -100,8 +101,7 @@ class ItemMachine: InteractionListener { } //Collector// on(Scenery.COLLECTOR_CONVERTER_21250, IntType.SCENERY, "Convert") { player, _ -> - val bagLevel = BaHornSystem.HornHelper.getCollectorBag(player) - //todo get players collector level instead of bag level. + val collectorLevel = player.getBarbLevels().col if (!hasCape(player, COLLECTOR_ICON)) return@on true //Items.RED_EGG_10532 diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassQuickWaveActivity.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassQuickWaveActivity.kt index f19ed15fa..203440376 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassQuickWaveActivity.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassQuickWaveActivity.kt @@ -78,7 +78,7 @@ open class BarbassQuickWaveActivity : ActivityPlugin("BarbassQuickWave",false, f } return true } - + //todo Make Game Start Faster once a team is created. private fun createQuickTeam(players: List) { // if(player == null) {removeQuickQue(player);return} var teamLeader: Player? = null @@ -173,7 +173,7 @@ open class BarbassQuickWaveActivity : ActivityPlugin("BarbassQuickWave",false, f if (role == null) waitingAnyCount++ else waitingRoleCounts[role] = waitingRoleCounts.getValue(role) + 1 - //todo find authentic message for Quick Start Wave BarbAssault + //todo find authentic message for Quick Start Wave BarbAssault, If there even is one. val roleText = role?.name ?: "ANY" sendMessage(player, "You've joined the queue as ${roleText.lowercase().replaceFirstChar { it.uppercase() }}.") refreshQuickWaveOverlay() diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt index 072cb0abb..833b77bf7 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt @@ -91,6 +91,7 @@ class BarbassaultLobby : InteractionListener, MapArea { val team = session?.team if (team == null) { + //todo remove or correct message leader.sendMessage("No active session found.") return@onUseWithPlayer false } @@ -163,8 +164,7 @@ class BarbassaultLobby : InteractionListener, MapArea { return@on true } on(Scenery.DOOR_20209, IntType.SCENERY, "Pass") { player, node -> - //todo find authentic message no capes - // if (capeCheck(player)) { sendMessage(player,"Your not allowed to wear capes."); return@on true } + if (capeCheck(player)) { return@on false } //todo Not allowed to enter QuickStart with Scroll if (!QUICK_START.insideBorder(player.location)){ player.setAttribute("/save:barbass:wave", 1) diff --git a/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt index ad77c5e32..65d029fa5 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt @@ -16,6 +16,7 @@ import core.plugin.Plugin import org.rs09.consts.Items @Initializable +//not used delete this plugin latter class CurrentTeamInterface : ComponentPlugin() { override fun newInstance(arg: Any?): Plugin { ComponentDefinition.forId(CurrentTeam.ID).plugin = this From 3ef90e681fa279611a8a2ce7a4dd1c5dd5518d97 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 12 Apr 2026 16:15:34 -0400 Subject: [PATCH 063/123] correct Pray not allowed message. --- .../core/game/node/entity/player/link/prayer/PrayerType.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java b/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java index eccf123c8..15e2fd687 100644 --- a/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java +++ b/Server/src/main/core/game/node/entity/player/link/prayer/PrayerType.java @@ -224,8 +224,7 @@ public enum PrayerType { BarbassaultSession session = player.getAttribute("ba-session"); if (session != null) { if (session.isInBarbAssaultGame()) { - //todo find correct message here - sendMessage(player, "The barbarians do not allow the use of prayer in the arena."); + sendMessage(player, "The barbarians forbid the use of prayer in their arena as they don't ~ value such methods!"); toggle(player,false); return false; } From f3b07b66cbd4e9a27b78dd40ae6d64c1c7cffc55 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 12 Apr 2026 16:16:08 -0400 Subject: [PATCH 064/123] Message and todo/notes --- .../content/minigame/barbassault/BarbassaultListeners.kt | 4 ---- .../minigame/barbassault/BarbassaultPlayerExtensions.kt | 4 ++++ .../minigame/barbassault/arena/BarbassaultGameArea.kt | 8 ++++---- .../minigame/barbassault/arena/BarbassaultSession.kt | 3 +++ .../minigame/barbassault/arena/scenery/ItemMachine.kt | 1 - 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt b/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt index 6d8bdd8dc..5466f4ef5 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt @@ -7,7 +7,6 @@ import core.game.component.Component import core.game.global.action.ClimbActionHandler import core.game.interaction.IntType import core.game.interaction.InteractionListener -import core.game.interaction.InterfaceListener import core.game.node.entity.player.Player import core.game.world.map.Location import org.rs09.consts.Components @@ -15,9 +14,6 @@ import org.rs09.consts.Items import org.rs09.consts.NPCs import org.rs09.consts.Scenery -const val BARBASSAULT_ACCEPT_ROLE_492 = 492 -const val BARBASSAULT_SELECT_ROLE_493 = 493 - class BarbassaultListeners : InteractionListener { override fun defineListeners() { diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt b/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt index 9c4746e48..d1c4dc483 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt @@ -86,6 +86,10 @@ fun Player.setBarbPoints(points: BarbAssaultPoints) { */ fun Player.addBarbPoints(additional: BarbAssaultPoints) { setBarbPoints(getBarbPoints() + additional) + //todo Add warning message if points hit cap. + //"You have maxed out your Healer Honor Points. You should spend them /n + //commands." + //https://youtu.be/rWRWL5PUj94?t=244 } /** * Removes Barbarian Assault points from the player. diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 491b04079..d5d54b96d 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -35,14 +35,12 @@ import core.tools.Log import org.rs09.consts.Items import org.rs09.consts.Scenery -//HAMMER_2347 -//LOGS_11760 use these loggs + //1889 5407 - Barb assualt QUEEN area -- 7508 //1891 5465 - barb assualt AREA under -//queen spawn in Location.create(1884, 5405, 0) +val PENANCE_QUEEN_SPAWN_LOC = Location.create(1884, 5405, 0) -//No prayers //sendMessage(player,"The barbarians forbid the use of prayer in their arena as they don't ~ value such methods!") //should be multicombat @@ -102,6 +100,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { } override fun defineListeners() { + //Wrong food message "That's the wrong type of poisoned food to use! Penalty!" on(Scenery.EGG_LAUNCHER_20133, IntType.SCENERY, "Shoot") { player, node -> EggCannon.openTurretIface(player) return@on true @@ -197,6 +196,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { HEALING_VIAL3_10543 HEALING_VIAL4_10542 // 4 */ + sendMessage(player,"You filled the vial.") return@on true } //CATALYTIC_RUNE_12851, ELEMENTAL_RUNE_12850 diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index beee22fb2..e33e79366 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -168,6 +168,9 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi }) closeInterface(player) openOverlay(player, 256) + //https://youtu.be/MpYZG3qkFUA?t=387 + //todo dialogbox message not sendMessage + //Dialogbox: " The game ended because on of your team-mates exited early. sendMessage(player,"The game ended early because one of your team-mates $endReason.") BarbTeamManager.updateTeam(player.baSession?.team!!) } diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt index 20ae5cba1..6d9b4b51b 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt @@ -1,6 +1,5 @@ package content.minigame.barbassault.arena.scenery -import content.minigame.barbassault.arena.BaHornSystem import content.minigame.barbassault.getBarbLevels import core.api.EquipmentSlot import core.api.addItem From b4b6a5245806b60af99eac693b52cbd19850d8cf Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 13 Apr 2026 10:26:26 -0400 Subject: [PATCH 065/123] ADHD brain GO! --- .../BarbassaultPlayerExtensions.kt | 12 +++++++ .../barbassault/arena/BarbassaultGameArea.kt | 34 ++++++++++++------- .../barbassault/arena/BarbassaultSession.kt | 28 ++++++++++++--- .../arena/WaveCompleteInterface.kt | 2 +- .../barbassault/arena/scenery/EggCannon.kt | 20 +++++++++-- .../minigame/barbassault/lobby/BarbTeam.kt | 1 + .../barbassault/lobby/BarbassaultLobby.kt | 13 ++++--- 7 files changed, 84 insertions(+), 26 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt b/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt index d1c4dc483..051e1fe02 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt @@ -198,4 +198,16 @@ fun Player.increaseBarbRoleLevel(role: BarbRole) { */ fun Player.getBarbWave(): Int? { return this.getAttribute("barbass:wave", 1) +} + +/** + * Sets the player's current Barbarian Assault wave. + * + * This stores the wave value under the `"/save:barbass:wave"` attribute, + * allowing it to persist. + * + * @param wave The wave number to assign to the player. + */ +fun Player.setBarbWave(wave: Int){ + this.setAttribute("/save:barbass:wave", wave) } \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index d5d54b96d..75c0d0c00 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -186,7 +186,9 @@ class BarbassaultGameArea : InteractionListener, MapArea { } return@on true } - + //todo use vial on player + //"The player's hitpoints are full." //Error message if target player hp is full + //sendamount heal for conversion to points at end. on(Scenery.HEALER_SPRING_20150, IntType.SCENERY, "Take-from") { player, _ -> val healLevel = player.getBarbLevels().heal //emote 5400 @@ -256,17 +258,6 @@ class BarbassaultGameArea : InteractionListener, MapArea { } } - - fun removeAll(player: Player, items: List, container: Container = Container.INVENTORY): Boolean { - var removedAny = false - items.forEach { id -> - if (removeAll(player, id, container)) { - removedAny = true - } - } - return removedAny - } - fun playerChangeScenery(player: Player,anim: Int ,node: Node, newSceneryId: Int, pulseDelay: Int = 3, message: String = "") { player.animate(Animation(anim)) @@ -378,6 +369,25 @@ object BarbAssaultCombat { } } +object BAGraphics { + + const val GREEN_LARGE_EXPLOSION_867 = 867 + const val RED_LARGE_EXPLOSION_868 = 868 + const val BLUE_LARGE_EXPLOSION_869 = 869 + + const val GREEN_EGG_BREAK_873 = 873 + const val RED_EGG_BREAK_874 = 874 + const val BLUE_EGG_BREAK_875 = 875 + + const val PENANCE_HEALER_BAD_BREATH_863 = 863 + const val PENANCE_HEALER_GOOD_BREATH_864 = 864 + + const val GREEN_LARGE_EXPLOSION2_876 = 876 + +} + + + diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index e33e79366..6623fc177 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -11,6 +11,7 @@ import content.minigame.barbassault.getBarbWave import content.minigame.barbassault.lobby.* import core.api.* import core.game.node.entity.Entity +import core.game.node.entity.combat.CombatStyle import core.game.node.entity.impl.PulseManager import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player @@ -23,6 +24,7 @@ import core.game.world.map.Direction import core.game.world.map.Location import core.game.world.map.build.DynamicRegion import core.game.world.map.zone.* +import core.game.world.update.flag.context.Graphics import core.tools.Log import core.tools.secondsToTicks import core.tools.ticksToSeconds @@ -48,6 +50,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi val eventBus = BarbAssEventBus() val npcCaps = SpawnCaps(4,4,2,2)//wave 1 private val countDoown = if(GameWorld.settings?.isDevMode == true) 4 else 60 + private var countdownPulse: Pulse? = null fun beginStartingPhase(quickStart: Boolean = false) { @@ -56,7 +59,13 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi createArena() startCountdown(quickStart) } - + fun cancleStartingPhase(){ + if (state != BarbassaultState.STARTING) return + state = BarbassaultState.PARTY_CREATION + countdownPulse?.stop() + countdownPulse = null + broadcast("-- Next wave no longer starting") + } private fun enterArena() { state = BarbassaultState.IN_ARENA region.setMusicId(ASSAULT_AND_BATTERY_604) @@ -99,9 +108,10 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi private fun startCountdown(quickStart: Boolean) { var ticks = secondsToTicks(countDoown)//60 if(!quickStart){ team.allPlayers().forEach { openOverlay(it, 494);setInterfaceText(it, "60", 494, 0) } } - GameWorld.Pulser.submit(object : Pulse(1) { + countdownPulse = object : Pulse(1) { override fun pulse(): Boolean { if (state != BarbassaultState.STARTING) return true + ticks-- if (ticks <= 0) { @@ -117,7 +127,9 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi return false } - }) + } + + Pulser.submit(countdownPulse!!) } private fun InitEvents(){ @@ -301,9 +313,15 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi return npc } fun spawnEggCannons() { - sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(21, 34, 0), Direction.NORTH ) + val eggCannonNpcWest = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(21, 34, 0), Direction.NORTH ) + eggCannonNpcWest?.isWalks = false + eggCannonNpcWest?.isNeverWalks = true + eggCannonNpcWest?.definition?.combatDistance = 14 + eggCannonNpcWest?.properties?.combatPulse?.style = CombatStyle.RANGE + //eggCannonNpcWest?. + eggCannonNpcWest?.definition?.combatGraphics[1] = Graphics(866, 25, 0) if (currentWave == 10) return - sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(40, 34, 0), Direction.NORTH ) + val eggCannonNpcEast = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(40, 34, 0), Direction.NORTH ) } diff --git a/Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt b/Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt index b83511dd8..fd32054ef 100644 --- a/Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt +++ b/Server/src/main/content/minigame/barbassault/arena/WaveCompleteInterface.kt @@ -27,7 +27,7 @@ class WaveCompleteInterface { https://youtu.be/OjkLXOQVWEQ?t=113 https://www.youtube.com/watch?v=gpSmUZcaMwY - +//error message if button level up, "Sorry, you don't have enough points to level up diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt index 80edff69f..831e9b5bd 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -89,6 +89,7 @@ class EggCannon : ComponentPlugin() { return this } ///stun(entity: Entity, ticks: Int) + // stunned monster cant take damage here? ///isStunned(entity: Entity) //applyPoison (entity: Entity, source: Entity, severity: Int) //isPoisoned (entity: Entity) : Boolean @@ -203,7 +204,6 @@ class EggCannon : ComponentPlugin() { if (role != BarbRole.COLLECTOR) {sendMessage(player,"You need to be a Collector to load eggs.");return} ALL_EGGS.forEach { loadHopperEggs(player, it) } //Load hopper emote, Same as place table?? - sendMessage(player,"Loading hopper") } fun loadHopperEggs(player: Player?,itemId: Int ){ player ?: return @@ -211,8 +211,14 @@ class EggCannon : ComponentPlugin() { val result = player.baSession?.eggHopper?.addEgg(itemId,invCount) val color = player.baSession?.eggHopper?.eggColorMap?.get(itemId) val added = result?.get(color) ?: 0 - - removeItem(player, Item(itemId, added)) + //load from collector bag too + if(invCount > 0){ + val result = player.baSession?.eggHopper?.addEgg(itemId,invCount) + val color = player.baSession?.eggHopper?.eggColorMap?.get(itemId) + val added = result?.get(color) ?: 0 + sendMessage(player,"You load the hopper.") + removeItem(player, Item(itemId, added)) + } } fun showEggHopperCount(player: Player?){ player ?: return @@ -259,6 +265,9 @@ entity.interfaceManager.restoreTabs() shoot option when no eggs in hoper = MEssage chatbox-> There are no egs in the hopper. +Dialog message if no monsters in range +"there are no targetable Penance Runners within firing range. + Look-in -> The hopper contains 0 poison egs, 0 explosive eggs @@ -271,4 +280,9 @@ poison eggs You load the hopper. You cant load any more /Egg_type/s. +Picking up wrong egg, "The egg exploded" / 5 damage + + +"You put the egg in the bag" + */ \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt index 5a7d0465f..8b2fad790 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt @@ -184,6 +184,7 @@ object BarbTeamManager { player.baSession = null updateCurrentTeam(player) updateTeam(team) + //session.cancleStartingPhase() } fun updateTeam(team: BarbTeam) { diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt index 833b77bf7..256157394 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt @@ -3,10 +3,12 @@ package content.minigame.barbassault.lobby import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbassaultState import content.minigame.barbassault.baSession +import content.minigame.barbassault.getBarbWave import content.minigame.barbassault.lobby.BarbTeamManager.abandonTeam import content.minigame.barbassault.lobby.BarbTeamManager.createTeam import content.minigame.barbassault.lobby.BarbTeamManager.disbandTeam import content.minigame.barbassault.lobby.BarbassQuickWaveActivity.Companion.addToQueue +import content.minigame.barbassault.setBarbWave import core.api.* import core.game.interaction.IntType import core.game.interaction.InteractionListener @@ -91,7 +93,6 @@ class BarbassaultLobby : InteractionListener, MapArea { val team = session?.team if (team == null) { - //todo remove or correct message leader.sendMessage("No active session found.") return@onUseWithPlayer false } @@ -164,14 +165,15 @@ class BarbassaultLobby : InteractionListener, MapArea { return@on true } on(Scenery.DOOR_20209, IntType.SCENERY, "Pass") { player, node -> - if (capeCheck(player)) { return@on false } + if (!capeCheck(player)) { return@on false } //todo Not allowed to enter QuickStart with Scroll if (!QUICK_START.insideBorder(player.location)){ - player.setAttribute("/save:barbass:wave", 1) + player.setBarbWave(1) handlePlayerOptionDoor(player) { role -> //player.sendMessage("You are a ${role.name.lowercase().replaceFirstChar { it.uppercase() }}.") handleWaveDoor(player, node, 489) addToQueue(player, role) + } }else { handleWaveDoor(player, node, 489) @@ -300,7 +302,7 @@ class BarbassaultLobby : InteractionListener, MapArea { fun handleWaveDoor(player: Player, node: Node,iface: Int){ val doorLoc = node.location val playerLoc = player.location - var wave = player.getAttribute("barbass:wave", 1) + var wave = player.getBarbWave() if (wave == BARBWAVEDOOR[node.id]) { val insideRoom = playerLoc.y <= doorLoc.y val moveY = if (insideRoom) 1 else -1 @@ -309,9 +311,10 @@ class BarbassaultLobby : InteractionListener, MapArea { forceMove(player, playerLoc, playerLoc.transform(0, moveY, 0), 25, 60, null, 819) { if (insideRoom) { //player.baSession = null + //player.baSession?.cancleStartingPhase() abandonTeam(player) closeOverlay(player) - if (node.id == 20209) { BarbassQuickWaveActivity.removeQuickQue(player) } + if (node.id == Scenery.DOOR_20209) { BarbassQuickWaveActivity.removeQuickQue(player) } // needs to happen sooner } else { openOverlay(player, iface) // player.sendMessage("you enter wave ${BARBWAVEDOOR[node.id]}") From c48e4a371a0e9f6b1db151c00600153e93fa2dee Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 18 Apr 2026 20:13:28 -0400 Subject: [PATCH 066/123] egggs --- .../ame/events/evilchicken/EvilChickenNPC.kt | 2 +- .../barbassault/arena/BarbassaultActivity.kt | 12 +++ .../barbassault/arena/BarbassaultGameArea.kt | 12 +-- .../barbassault/arena/BarbassaultSession.kt | 17 ++-- .../barbassault/arena/Npcs/EggCannon.kt | 37 ++++++++ .../{monsters => Npcs}/PenanceFighterNPC.kt | 20 ++++- .../{monsters => Npcs}/PenanceHealerNPC.kt | 2 +- .../barbassault/arena/Npcs/PenanceHelper.kt | 84 +++++++++++++++++++ .../{monsters => Npcs}/PenanceQueenNPC.kt | 2 +- .../{monsters => Npcs}/PenanceRangerNPC.kt | 2 +- .../{monsters => Npcs}/PenanceRunnerNPC.kt | 2 +- .../{monsters => Npcs}/PenanceSpawnNPC.kt | 2 +- .../barbassault/arena/scenery/DefenderTrap.kt | 2 +- .../scenery/{EggCannon.kt => EggHopper.kt} | 14 +++- 14 files changed, 182 insertions(+), 28 deletions(-) create mode 100644 Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannon.kt rename Server/src/main/content/minigame/barbassault/arena/{monsters => Npcs}/PenanceFighterNPC.kt (85%) rename Server/src/main/content/minigame/barbassault/arena/{monsters => Npcs}/PenanceHealerNPC.kt (97%) create mode 100644 Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt rename Server/src/main/content/minigame/barbassault/arena/{monsters => Npcs}/PenanceQueenNPC.kt (94%) rename Server/src/main/content/minigame/barbassault/arena/{monsters => Npcs}/PenanceRangerNPC.kt (98%) rename Server/src/main/content/minigame/barbassault/arena/{monsters => Npcs}/PenanceRunnerNPC.kt (97%) rename Server/src/main/content/minigame/barbassault/arena/{monsters => Npcs}/PenanceSpawnNPC.kt (85%) rename Server/src/main/content/minigame/barbassault/arena/scenery/{EggCannon.kt => EggHopper.kt} (97%) diff --git a/Server/src/main/content/global/ame/events/evilchicken/EvilChickenNPC.kt b/Server/src/main/content/global/ame/events/evilchicken/EvilChickenNPC.kt index 5b065f567..dd3851cd8 100644 --- a/Server/src/main/content/global/ame/events/evilchicken/EvilChickenNPC.kt +++ b/Server/src/main/content/global/ame/events/evilchicken/EvilChickenNPC.kt @@ -27,7 +27,7 @@ class EvilChickenNPC(override var loot: WeightBasedTable? = null) : RandomEventN override fun finalizeDeath(killer: Entity?) { super.finalizeDeath(killer) - GroundItemManager.create(Item(Items.FEATHER_314, RandomFunction.random(50,300)), this.dropLocation, player) + GroundItemManager.create(Item(Items.RED_EGG_10532, RandomFunction.random(50,300)), this.dropLocation, player) } override fun tick() { diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt index a12c0be5f..201f77c6f 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt @@ -2,19 +2,27 @@ package content.minigame.barbassault import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.BarbassaultState +import content.minigame.barbassault.arena.Npcs.dropPenanceEggCluster import core.api.log import core.game.activity.ActivityManager import core.game.activity.ActivityPlugin import core.game.node.Node import core.game.node.entity.Entity import core.game.node.entity.combat.CombatStyle +import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player +import core.game.node.item.GroundItem +import core.game.node.item.GroundItemManager +import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.map.zone.ZoneRestriction +import core.game.worldevents.holiday.easter.EasterEvent.Companion.EGG_SPAWN_TIME +import core.game.worldevents.holiday.easter.EasterEvent.Companion.eggs import core.plugin.Initializable import core.tools.Log +import org.rs09.consts.Items private val sessions = mutableListOf() private var activity: BarbassaultActivity? = null @@ -64,6 +72,10 @@ open class BarbassaultActivity : ActivityPlugin("barbassault",false, true, true, e.getProperties().setTeleportLocation(null) return true } + if (e is NPC) { + // dropPenanceEggCluster(e) + //GroundItemManager.create(Item(Items.RED_EGG_10532, 1), e.location).apply { forceVisible = true } + } return false } diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 75c0d0c00..0cf3aa7ef 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -4,10 +4,10 @@ import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultTut import content.minigame.barbassault.arena.BaHornSystem.HornHelper.getHealerHorn import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle -import content.minigame.barbassault.arena.scenery.EggCannon -import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadEggHopper -import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadHopperEggs -import content.minigame.barbassault.arena.scenery.EggCannon.Companion.showEggHopperCount +import content.minigame.barbassault.arena.scenery.EggHopper +import content.minigame.barbassault.arena.scenery.EggHopper.Companion.loadEggHopper +import content.minigame.barbassault.arena.scenery.EggHopper.Companion.loadHopperEggs +import content.minigame.barbassault.arena.scenery.EggHopper.Companion.showEggHopperCount import content.minigame.barbassault.baSession import content.minigame.barbassault.getBarbLevels import content.minigame.barbassault.isBAHealer @@ -102,7 +102,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { override fun defineListeners() { //Wrong food message "That's the wrong type of poisoned food to use! Penalty!" on(Scenery.EGG_LAUNCHER_20133, IntType.SCENERY, "Shoot") { player, node -> - EggCannon.openTurretIface(player) + EggHopper.openTurretIface(player) return@on true } on(Scenery.EGG_HOPPER_20264, IntType.SCENERY, "Load","Look-in") { player, node -> @@ -116,7 +116,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { player.faceLocation(location(loc.x,loc.y+1,0)) return@on true } - onUseWith(IntType.SCENERY, EggCannon.ALL_EGGS,Scenery.EGG_HOPPER_20264){ player, used, with -> + onUseWith(IntType.SCENERY, EggHopper.ALL_EGGS,Scenery.EGG_HOPPER_20264){ player, used, with -> val loc = player.location player.faceLocation(location(loc.x,loc.y+1,0)) loadHopperEggs(player,used.id ) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 6623fc177..b3e40a0db 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -3,7 +3,7 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.ALL_BARBASS_ITEMS import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultActivity -import content.minigame.barbassault.arena.scenery.EggCannon +import content.minigame.barbassault.arena.scenery.EggHopper import content.minigame.barbassault.arena.scenery.GloryHorn import content.minigame.barbassault.baSession import content.minigame.barbassault.getBarbLevels @@ -44,8 +44,10 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi var state: BarbassaultState = BarbassaultState.PARTY_CREATION lateinit var team: BarbTeam val sessionNpcs = mutableListOf() - val groundItems = mutableListOf() - val eggHopper = EggCannon.EggHopper() + val BAgroundItems = mutableListOf() + val eggHopper = EggHopper.EggHopper() + var eggCannonNpcWest: NPC? = null + var eggCannonNpcEast: NPC? = null val scoreManager = BarbScoreManager() val eventBus = BarbAssEventBus() val npcCaps = SpawnCaps(4,4,2,2)//wave 1 @@ -313,15 +315,10 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi return npc } fun spawnEggCannons() { - val eggCannonNpcWest = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(21, 34, 0), Direction.NORTH ) - eggCannonNpcWest?.isWalks = false - eggCannonNpcWest?.isNeverWalks = true - eggCannonNpcWest?.definition?.combatDistance = 14 - eggCannonNpcWest?.properties?.combatPulse?.style = CombatStyle.RANGE + eggCannonNpcWest = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(21, 34, 0), Direction.NORTH ) //eggCannonNpcWest?. - eggCannonNpcWest?.definition?.combatGraphics[1] = Graphics(866, 25, 0) if (currentWave == 10) return - val eggCannonNpcEast = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(40, 34, 0), Direction.NORTH ) + eggCannonNpcEast = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(40, 34, 0), Direction.NORTH ) } diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannon.kt new file mode 100644 index 000000000..3ae66e5fd --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannon.kt @@ -0,0 +1,37 @@ +package content.minigame.barbassault.arena.Npcs + +import core.game.node.entity.Entity +import core.game.node.entity.combat.CombatStyle +import core.game.node.entity.npc.NPC +import core.game.node.entity.npc.NPCBehavior +import core.game.world.map.RegionManager +import core.game.world.update.flag.context.Graphics +import org.rs09.consts.NPCs + + +class EggCannon : NPCBehavior(NPCs.EGG_LAUNCHER_5026) { + override fun onCreation (self: NPC) { + self.isWalks = false + self.isNeverWalks = true + self.walkRadius = 0 + self.dropLocation + self.definition.combatGraphics[1] = Graphics(866, 25, 0) + + self.definition.combatDistance = 14 + self.properties.combatPulse.style = CombatStyle.RANGE + + } + override fun getXpMultiplier(self: NPC, attacker: Entity): Double { + return 0.0 + } + + override fun tick(self: NPC): Boolean { + + + return true + } + fun FireEggAt(target:String,eggColor: String){ + // RegionManager.getSurroundingNPCs() + } + +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceFighterNPC.kt similarity index 85% rename from Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt rename to Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceFighterNPC.kt index e755b19e3..2558ba245 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceFighterNPC.kt @@ -3,6 +3,7 @@ package content.minigame.barbassault.arenas.monsters import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent import content.minigame.barbassault.arena.BarbAssaultCombat +import content.minigame.barbassault.arena.Npcs.dropPenanceEggCluster import content.minigame.barbassault.baSession import core.api.* import core.game.node.entity.Entity @@ -11,6 +12,9 @@ import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior import core.game.node.entity.player.Player +import core.game.node.item.GroundItemManager +import core.game.node.item.Item +import org.rs09.consts.Items import org.rs09.consts.NPCs val PENANCE_FIGHTER_IDS = listOf( @@ -25,7 +29,7 @@ val PENANCE_FIGHTER_IDS = listOf( NPCs.PENANCE_FIGHTER_5218, NPCs.PENANCE_FIGHTER_5219) -class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { +class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { override fun canBeAttackedBy(self: NPC, attacker: Entity, style: CombatStyle, shouldSendMessage: Boolean): Boolean { if (attacker is Player && getItemFromEquipment(attacker, EquipmentSlot.CAPE)?.id != 10556) { //todo make list of not allowed weapons to attack IE: Crystal bow, Karils Crossbow @@ -37,6 +41,7 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { override fun getXpMultiplier(self: NPC, attacker: Entity): Double { return 0.0 } + override fun beforeDamageReceived(self: NPC, attacker: Entity, state: BattleState) { val player = attacker as? Player ?: return @@ -45,14 +50,21 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { } } + override fun tick(self: NPC): Boolean { + self.shouldPreventStacking(self) + return super.tick(self) + } + override fun onCreation (self: NPC) { self.setAttribute("agg_radius",6) self.isWalks = true - self.isNeverWalks = false + // self.isNeverWalks = false + self.properties.isNPCWalkable = false self.walkRadius = 64 self.isAggressive = true self.isRespawn = false + self.setAttribute("barbass-role", BarbRole.ATTACKER) self.definition.combatDistance = 1 @@ -61,12 +73,14 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { } override fun onDeathFinished(self: NPC, killer: Entity) { - super.onDeathFinished(self, killer) val player = killer as? Player ?: return + dropPenanceEggCluster(killer,self) val session = player.baSession ?: return session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) + super.onDeathFinished(self, killer) } + } //Shrink death 5098 diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceHealerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt similarity index 97% rename from Server/src/main/content/minigame/barbassault/arena/monsters/PenanceHealerNPC.kt rename to Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt index cfe1e0995..af42658ca 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceHealerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt @@ -1,4 +1,4 @@ -package content.minigame.barbassault.arena.monsters +package content.minigame.barbassault.arena.Npcs import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt new file mode 100644 index 000000000..f2685c476 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt @@ -0,0 +1,84 @@ +package content.minigame.barbassault.arena.Npcs + + +import core.api.hasLineOfSight +import core.api.produceGroundItem +import core.game.node.entity.npc.NPC +import core.game.node.entity.player.Player +import core.game.node.item.GroundItemManager +import core.game.node.item.Item +import core.game.world.map.Location +import core.game.world.map.RegionManager +import org.rs09.consts.Items + +fun dropPenanceEggCluster(killer: Player, npc: NPC) { + val tiles = npc.dropLocation.get3x3Tiles().shuffled() + + val eggs = listOf( Items.RED_EGG_10532, Items.RED_EGG_10532, + Items.BLUE_EGG_10533, Items.BLUE_EGG_10533, + Items.GREEN_EGG_10531, Items.GREEN_EGG_10531) + + for (i in eggs.indices) { + val tile = tiles[i] + produceGroundItem(killer, eggs[i], 1, tile).apply { + decayTime = 10000 + forceVisible = true + isRemainPrivate = false + } + } +} + +//GroundItemManager.create(Item(eggs[i], 1), tile).apply { forceVisible = true } +// GroundItemManager.create(Item(Items.RED_EGG_10532, 1), tile).apply { forceVisible = true } +// GroundItemManager.create(Item(eggs[i], 1), tile, null) + +/** + * Finds the closest visible player to the given NPC within a specified range. + * Filters out invisible players and those without line of sight. + * + * @param npc The NPC used as the search origin. + * @param range Maximum distance to search for players. + * @return The closest valid Player, or null if none are found. + */ +fun findClosestPlayerFromNPC(npc: NPC,range:Int = 14): Player? { + var closest: Player? = null + var bestDistance = Double.MAX_VALUE + + for (player in RegionManager.getLocalPlayers(npc, range)) { + if (player.isInvisible) continue + if (!hasLineOfSight(npc, player)) continue + + val dist = npc.location.getDistance(player.location) + if (dist < bestDistance) { + bestDistance = dist + closest = player + } + } + return closest +} + +/** + * Finds the closest NPC matching the given target NPC within a range, + * ensuring there is line of sight between the source NPC and the target. + * + * @param targetNPC The specific NPC being searched for. + * @param npc The source NPC performing the search. + * @param range Maximum search radius. + * @return The closest matching NPC if found and visible, otherwise null. + */ +fun findClosestTargetNPCFromNPC(targetNPC:NPC,npc: NPC,range:Int = 14): NPC? { + var closest: NPC? = null + var bestDistance = Double.MAX_VALUE + + for (foundNpc in RegionManager.getLocalNpcs(npc, range)) { + if (targetNPC != foundNpc) continue + if (!hasLineOfSight(npc, foundNpc)) continue + + val dist = npc.location.getDistance(foundNpc.location) + if (dist < bestDistance) { + bestDistance = dist + closest = foundNpc + } + } + return closest +} diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceQueenNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceQueenNPC.kt similarity index 94% rename from Server/src/main/content/minigame/barbassault/arena/monsters/PenanceQueenNPC.kt rename to Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceQueenNPC.kt index ae54b9612..9334548d1 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceQueenNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceQueenNPC.kt @@ -1,4 +1,4 @@ -package content.minigame.barbassault.arena.monsters +package content.minigame.barbassault.arena.Npcs import core.api.sendMessage import core.game.node.entity.Entity diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt similarity index 98% rename from Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt rename to Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt index b031d341c..770b62ed0 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt @@ -1,4 +1,4 @@ -package content.minigame.barbassault.arena.monsters +package content.minigame.barbassault.arena.Npcs import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt similarity index 97% rename from Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt rename to Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt index ccc83e0fd..0ae6620bf 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt @@ -1,4 +1,4 @@ -package content.minigame.barbassault.arena.monsters +package content.minigame.barbassault.arena.Npcs import content.minigame.barbassault.BarbRole import core.game.node.entity.Entity diff --git a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceSpawnNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceSpawnNPC.kt similarity index 85% rename from Server/src/main/content/minigame/barbassault/arena/monsters/PenanceSpawnNPC.kt rename to Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceSpawnNPC.kt index 94b51d992..a5cee0c87 100644 --- a/Server/src/main/content/minigame/barbassault/arena/monsters/PenanceSpawnNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceSpawnNPC.kt @@ -1,4 +1,4 @@ -package content.minigame.barbassault.arena.monsters +package content.minigame.barbassault.arena.Npcs import core.game.node.entity.Entity import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt index 7b8d8fcc2..e6a679847 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt @@ -1,6 +1,6 @@ package content.minigame.barbassault.arena.scenery -import content.minigame.barbassault.arena.monsters.PENANCE_RUNNER_IDS +import content.minigame.barbassault.arena.Npcs.PENANCE_RUNNER_IDS import core.api.* import core.game.node.entity.Entity import core.game.node.entity.player.Player diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt similarity index 97% rename from Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt rename to Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt index 831e9b5bd..34ae85e49 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt @@ -1,6 +1,7 @@ package content.minigame.barbassault.arena.scenery import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.baSession import core.api.* import core.game.component.CloseEvent @@ -19,8 +20,9 @@ import org.rs09.consts.Items // half -> EGG_HOPPER_20265 // full -> EGG_HOPPER_20266 //varbit 3268 +//todo fix naming of hopper/cannon @Initializable -class EggCannon : ComponentPlugin() { +class EggHopper : ComponentPlugin() { //Easter Egg "Blinky Switch" private val currentSequence = mutableListOf() @@ -227,10 +229,18 @@ class EggCannon : ComponentPlugin() { val explosive = eggsCount?.red val stun = eggsCount?.blue sendDialogueLines(player,"The hopper contains:","$poison poison eggs, $explosive explosive eggs","and $stun stun eggs.") + + } + + fun fireEgg(int: Int,){ + + } } } + + data class EggColors(val green: Int, val red: Int, val blue: Int) object EggTurret { const val ID = 495 @@ -281,7 +291,7 @@ You load the hopper. You cant load any more /Egg_type/s. Picking up wrong egg, "The egg exploded" / 5 damage - +getAttribute(self, "target", null) // you can set the NPC CANNON a target. "You put the egg in the bag" From 9b3042b84945d70a67c8018c5d362c6347d07672 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 19 Apr 2026 12:27:12 -0400 Subject: [PATCH 067/123] egg cluster loot on Peannace monster deaths. --- .../minigame/barbassault/arena/BarbassaultSession.kt | 5 +++-- .../minigame/barbassault/arena/Npcs/PenanceFighterNPC.kt | 2 +- .../minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt | 1 + .../minigame/barbassault/arena/Npcs/PenanceHelper.kt | 7 +++++-- .../minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt | 1 + .../minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt | 1 + 6 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index b3e40a0db..49d52fc19 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -269,8 +269,6 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi return arrayOf() } - - override fun getRestrictions(): Array = arrayOf( ZoneRestriction.CANNON, ZoneRestriction.FIRES, @@ -321,6 +319,9 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi eggCannonNpcEast = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(40, 34, 0), Direction.NORTH ) } + private fun clearGroundItems(){ + //BAgroundItems + } private fun giveRoleItems(player: Player, role: BarbRole) { val levels = player.getBarbLevels() diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceFighterNPC.kt index 2558ba245..3a92a691c 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceFighterNPC.kt @@ -74,9 +74,9 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { override fun onDeathFinished(self: NPC, killer: Entity) { val player = killer as? Player ?: return - dropPenanceEggCluster(killer,self) val session = player.baSession ?: return + dropPenanceEggCluster(killer,self) session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) super.onDeathFinished(self, killer) } diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt index af42658ca..95bb3a17f 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt @@ -37,6 +37,7 @@ class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS.toIntArray()) { val player = killer as? Player ?: return val session = player.baSession ?: return + dropPenanceEggCluster(killer,self) session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) } diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt index f2685c476..ddc525f63 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt @@ -1,6 +1,7 @@ package content.minigame.barbassault.arena.Npcs +import content.minigame.barbassault.baSession import core.api.hasLineOfSight import core.api.produceGroundItem import core.game.node.entity.npc.NPC @@ -20,11 +21,13 @@ fun dropPenanceEggCluster(killer: Player, npc: NPC) { for (i in eggs.indices) { val tile = tiles[i] - produceGroundItem(killer, eggs[i], 1, tile).apply { - decayTime = 10000 + val egg = produceGroundItem(killer, eggs[i], 1, tile).apply { + //todo Find way to make eggs not decay and visible to all + decayTime = 100 forceVisible = true isRemainPrivate = false } + killer.baSession?.BAgroundItems?.add(egg) } } diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt index 770b62ed0..8c610fd76 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt @@ -64,6 +64,7 @@ class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { val player = killer as? Player ?: return val session = player.baSession ?: return + dropPenanceEggCluster(killer,self) session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) } diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt index 0ae6620bf..8d76ab723 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt @@ -67,6 +67,7 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { val player = killer as? Player ?: return val session = player.baSession ?: return + dropPenanceEggCluster(killer,self) session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) } } From ab0c3c81b220d4d5c259108d5916cd74efcac786 Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 20 Apr 2026 08:57:08 -0400 Subject: [PATCH 068/123] WaveDefinitions --- .../barbassault/arena/BarbScoreManager.kt | 14 +-- .../barbassault/arena/BarbassaultSession.kt | 3 + .../barbassault/arena/Npcs/EggCannon.kt | 7 +- .../arena/Npcs/PenanceHealerNPC.kt | 2 +- .../barbassault/arena/Npcs/PenanceHelper.kt | 30 ++++- .../arena/Npcs/PenanceRangerNPC.kt | 2 +- .../arena/Npcs/PenanceRunnerNPC.kt | 2 +- .../barbassault/arena/WaveDefinition.kt | 107 ++++++++++++++++++ .../barbassault/arena/scenery/EggHopper.kt | 26 +++-- 9 files changed, 164 insertions(+), 29 deletions(-) create mode 100644 Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbScoreManager.kt b/Server/src/main/content/minigame/barbassault/arena/BarbScoreManager.kt index b74699cfa..2efe1495b 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbScoreManager.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbScoreManager.kt @@ -1,6 +1,5 @@ package content.minigame.barbassault.arena -import content.minigame.barbassault.lobby.BarbTeam import core.game.node.entity.player.Player //https://www.youtube.com/watch?v=OJ2BDEM03Dw @@ -48,18 +47,7 @@ data class ScoreTracker(var attackerStats: AttackerStats = AttackerStats(), var } fun toScoreboard(caps: SpawnCaps): RoleScore = BarbAssaultScoreBuilder.build(this, caps) } -val waveCaps = listOf( //i should put this somewhere else - SpawnCaps(4,4,2,2), //wave1 - SpawnCaps(4,5,3,3), - SpawnCaps(6,5,4,3), - SpawnCaps(6,6,4,4), - SpawnCaps(6,6,5,5), - SpawnCaps(7,6,6,6), - SpawnCaps(7,7,6,7), - SpawnCaps(8,7,7,7), - SpawnCaps(8,8,9,8) // wave 9 -) -data class SpawnCaps(val rangers: Int, val fighters: Int, val runners: Int, val healers: Int) + data class RoleScore(val rangersKilled: Int, val fightersKilled: Int, val incorrectStylePenalty: Int, val eggsScore: Int, val runnersKilledScore: Int, val runnersPastPenalty: Int, diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 49d52fc19..4ef1fa0b4 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -304,6 +304,9 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi player.fullRestore() destroyArena() + } + fun getMonstersForWave(){ + } fun sessionNPCSpawn(id: Int, location: Location, direction: Direction, vararg objects: Any): NPC? { val npc = NPC.create(id, location, direction, *objects) diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannon.kt index 3ae66e5fd..0b3af3c92 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannon.kt @@ -4,7 +4,7 @@ import core.game.node.entity.Entity import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior -import core.game.world.map.RegionManager +import core.game.world.update.flag.context.Animation import core.game.world.update.flag.context.Graphics import org.rs09.consts.NPCs @@ -16,7 +16,8 @@ class EggCannon : NPCBehavior(NPCs.EGG_LAUNCHER_5026) { self.walkRadius = 0 self.dropLocation self.definition.combatGraphics[1] = Graphics(866, 25, 0) - + //5426 = attackanimation + self.properties.rangeAnimation = Animation.create(5426) self.definition.combatDistance = 14 self.properties.combatPulse.style = CombatStyle.RANGE @@ -30,7 +31,7 @@ class EggCannon : NPCBehavior(NPCs.EGG_LAUNCHER_5026) { return true } - fun FireEggAt(target:String,eggColor: String){ + fun fireEggAt(target:String,eggColor: String){ // RegionManager.getSurroundingNPCs() } diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt index 95bb3a17f..0682a1a34 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt @@ -10,7 +10,7 @@ import core.game.node.entity.player.Player import org.rs09.consts.NPCs val PENANCE_HEALER_IDS = listOf( - NPCs.PENANCE_HEALER_5043, + //NPCs.PENANCE_HEALER_5043,//tut NPCs.PENANCE_HEALER_5238, NPCs.PENANCE_HEALER_5239, NPCs.PENANCE_HEALER_5240, diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt index ddc525f63..7d92835fb 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt @@ -6,9 +6,6 @@ import core.api.hasLineOfSight import core.api.produceGroundItem import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player -import core.game.node.item.GroundItemManager -import core.game.node.item.Item -import core.game.world.map.Location import core.game.world.map.RegionManager import org.rs09.consts.Items @@ -85,3 +82,30 @@ fun findClosestTargetNPCFromNPC(targetNPC:NPC,npc: NPC,range:Int = 14): NPC? { } return closest } +/** + * Finds the closest NPC to the given player within a specified range + * that matches the provided NPC ID. + * + * @param player The player used as the search origin. + * @param npcId The ID of the NPC to search for. + * @param range Maximum distance to search for NPCs. + * @return The closest matching NPC, or null if none are found. + */ +fun findClosestNPCIDFromPlayer(player: Player, targetNPC: Int, range: Int = 14): NPC? { + var closest: NPC? = null + var bestDistance = Double.MAX_VALUE + + for (npc in RegionManager.getLocalNpcs(player, range)) { + if (npc.id != targetNPC) continue + if (!hasLineOfSight(player, npc)) continue + + val dist = player.location.getDistance(npc.location) + if (dist < bestDistance) { + bestDistance = dist + closest = npc + } + } + return closest +} + + diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt index 8c610fd76..d0f36bdaf 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt @@ -16,7 +16,7 @@ import core.game.world.update.flag.context.Graphics import org.rs09.consts.NPCs //20730 = rangers cast val PENANCE_RANGER_IDS = listOf( - NPCs.PENANCE_RANGER_5041, + NPCs.PENANCE_RANGER_5041, // tut NPCs.PENANCE_RANGER_5229, NPCs.PENANCE_RANGER_5230, NPCs.PENANCE_RANGER_5231, diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt index 8d76ab723..d6b5939f7 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt @@ -15,7 +15,7 @@ import core.game.node.item.GroundItem val PENANCE_RUNNER_IDS = listOf( - NPCs.PENANCE_RUNNER_5042, + //NPCs.PENANCE_RUNNER_5042,//tut NPCs.PENANCE_RUNNER_5220, NPCs.PENANCE_RUNNER_5221, NPCs.PENANCE_RUNNER_5222, diff --git a/Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt b/Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt new file mode 100644 index 000000000..2171eabcc --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt @@ -0,0 +1,107 @@ +package content.minigame.barbassault.arena + +import org.rs09.consts.NPCs + + +fun getWaveDefinition(index: Int): WaveDefinition { + return when (index) { + 10 -> waves[7] + else -> waves[index] + } +} + +data class WaveDefinition( val caps: SpawnCaps, val npcIds: Map ) +enum class PenanceType { HEALER, RUNNER, FIGHTER, RANGER } +data class SpawnCaps(val rangers: Int, val fighters: Int, val runners: Int, val healers: Int) +val waves = listOf( + WaveDefinition( //Wave tut + SpawnCaps(rangers = 1, fighters = 1, runners = 1, healers = 1), + mapOf( + PenanceType.HEALER to NPCs.PENANCE_HEALER_5043, + PenanceType.RUNNER to NPCs.PENANCE_RUNNER_5042, + PenanceType.FIGHTER to NPCs.PENANCE_FIGHTER_5040, + PenanceType.RANGER to NPCs.PENANCE_RANGER_5041 + ) + ), + WaveDefinition( //Wave 1 + SpawnCaps(rangers = 4, fighters = 4, runners = 2, healers = 2), + mapOf( + PenanceType.HEALER to NPCs.PENANCE_HEALER_5238, + PenanceType.RUNNER to NPCs.PENANCE_RUNNER_5220, + PenanceType.FIGHTER to NPCs.PENANCE_FIGHTER_5044, + PenanceType.RANGER to NPCs.PENANCE_RANGER_5229 // missing death animation + ) + ), + WaveDefinition( //Wave 2 + SpawnCaps(rangers = 4, fighters = 5, runners = 3, healers = 3), + mapOf( + PenanceType.HEALER to NPCs.PENANCE_HEALER_5239, + PenanceType.RUNNER to NPCs.PENANCE_RUNNER_5221, + PenanceType.FIGHTER to NPCs.PENANCE_FIGHTER_5045, + PenanceType.RANGER to NPCs.PENANCE_RANGER_5230 + ) + ), + WaveDefinition( //Wave 3 + SpawnCaps(rangers = 6, fighters = 5, runners = 4, healers = 3), + mapOf( + PenanceType.HEALER to NPCs.PENANCE_HEALER_5240, + PenanceType.RUNNER to NPCs.PENANCE_RUNNER_5222, + PenanceType.FIGHTER to NPCs.PENANCE_FIGHTER_5213, + PenanceType.RANGER to NPCs.PENANCE_RANGER_5231 + ) + ), + WaveDefinition( //Wave 4 + SpawnCaps(rangers = 6, fighters = 6, runners = 4, healers = 4), + mapOf( + PenanceType.HEALER to NPCs.PENANCE_HEALER_5241, + PenanceType.RUNNER to NPCs.PENANCE_RUNNER_5223, + PenanceType.FIGHTER to NPCs.PENANCE_FIGHTER_5214, + PenanceType.RANGER to NPCs.PENANCE_RANGER_5232 + ) + ), + WaveDefinition( //Wave 5 + SpawnCaps(rangers = 6, fighters = 6, runners = 5, healers = 5), + mapOf( + PenanceType.HEALER to NPCs.PENANCE_HEALER_5242, + PenanceType.RUNNER to NPCs.PENANCE_RUNNER_5224, + PenanceType.FIGHTER to NPCs.PENANCE_FIGHTER_5215, + PenanceType.RANGER to NPCs.PENANCE_RANGER_5233 + ) + ), + WaveDefinition( //Wave 6 + SpawnCaps(rangers = 7, fighters = 6, runners = 6, healers = 6), + mapOf( + PenanceType.HEALER to NPCs.PENANCE_HEALER_5243, + PenanceType.RUNNER to NPCs.PENANCE_RUNNER_5225, + PenanceType.FIGHTER to NPCs.PENANCE_FIGHTER_5216, + PenanceType.RANGER to NPCs.PENANCE_RANGER_5234 + ) + ), + WaveDefinition( //Wave 7 //Also used in wave 10 + SpawnCaps(rangers = 7, fighters = 7, runners = 6, healers = 7), + mapOf( + PenanceType.HEALER to NPCs.PENANCE_HEALER_5244, + PenanceType.RUNNER to NPCs.PENANCE_RUNNER_5226, + PenanceType.FIGHTER to NPCs.PENANCE_FIGHTER_5217, + PenanceType.RANGER to NPCs.PENANCE_RANGER_5235 + ) + ), + WaveDefinition( //Wave 8 + SpawnCaps(rangers = 8, fighters = 7, runners = 7, healers = 7), + mapOf( + PenanceType.HEALER to NPCs.PENANCE_HEALER_5245, + PenanceType.RUNNER to NPCs.PENANCE_RUNNER_5227, + PenanceType.FIGHTER to NPCs.PENANCE_FIGHTER_5218, + PenanceType.RANGER to NPCs.PENANCE_RANGER_5236 + ) + ), + WaveDefinition( //Wave 9 + SpawnCaps(rangers = 8, fighters = 8, runners = 9, healers = 8), + mapOf( + PenanceType.HEALER to NPCs.PENANCE_HEALER_5246, + PenanceType.RUNNER to NPCs.PENANCE_RUNNER_5228, + PenanceType.FIGHTER to NPCs.PENANCE_FIGHTER_5219, + PenanceType.RANGER to NPCs.PENANCE_RANGER_5237 + ) + ), +) \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt index 34ae85e49..c339faac7 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt @@ -1,18 +1,21 @@ package content.minigame.barbassault.arena.scenery import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.arena.BarbassaultSession +import content.minigame.barbassault.arena.Npcs.findClosestNPCIDFromPlayer +import content.minigame.barbassault.arena.Npcs.findClosestTargetNPCFromNPC import content.minigame.barbassault.baSession import core.api.* import core.game.component.CloseEvent import core.game.component.Component import core.game.component.ComponentDefinition import core.game.component.ComponentPlugin +import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.node.item.Item import core.plugin.Initializable import core.plugin.Plugin import org.rs09.consts.Items +import org.rs09.consts.NPCs //Egg hoppper scenrey item updates based on eggs in hopper @@ -119,14 +122,18 @@ class EggHopper : ComponentPlugin() { } return true } + val PENANCE_HEALER_IDS = listOf( + NPCs.PENANCE_HEALER_5245, + NPCs.PENANCE_HEALER_5246 + ) fun shootNormalEggs(button: Int,player: Player?) { player ?: return val eggHopper = player.baSession?.eggHopper val penanceSets = listOf( - "Penance Healer" to EggTurret.pHealerBtns, - "Penance Runner" to EggTurret.pRunnerBtns, - "Penance Fighter" to EggTurret.pFighterBtns, - "Penance Ranger" to EggTurret.pRangerBtns + "Penance Healer" to EggTurret.pHealerBtns, // PENANCE_HEALER_IDS + "Penance Runner" to EggTurret.pRunnerBtns, // PENANCE_RUNNER_IDS + "Penance Fighter" to EggTurret.pFighterBtns, // PENANCE_FIGHTER_IDS + "Penance Ranger" to EggTurret.pRangerBtns // PENANCE_RANGER_IDS ) for ((name, colors) in penanceSets) { when(button) { @@ -136,6 +143,7 @@ class EggHopper : ComponentPlugin() { return } sendMessage(player, "Shoot poison at $name."); + //fireEgg(player: Player,npc: NPC) return } colors.red -> { @@ -232,8 +240,12 @@ class EggHopper : ComponentPlugin() { } - fun fireEgg(int: Int,){ - + fun fireEgg(player: Player,npc: NPC){ + val session = player.baSession + val eggCannon = findClosestNPCIDFromPlayer(player,NPCs.EGG_LAUNCHER_5026,2) + val target = findClosestTargetNPCFromNPC(npc, eggCannon as NPC ) + // + eggCannon.attack(target) } } From d76f0bb8e131fbf9f301e64ad3201b4fc9cc98b3 Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 20 Apr 2026 22:32:41 -0400 Subject: [PATCH 069/123] Egg Cannon Fires! --- .../barbassault/arena/BarbassaultGameArea.kt | 16 --- .../barbassault/arena/BarbassaultSession.kt | 20 ++-- .../barbassault/arena/Npcs/PenanceHelper.kt | 34 ++++-- .../barbassault/arena/scenery/EggHopper.kt | 101 +++++++++--------- 4 files changed, 88 insertions(+), 83 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 0cf3aa7ef..70c43f04e 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -369,22 +369,6 @@ object BarbAssaultCombat { } } -object BAGraphics { - - const val GREEN_LARGE_EXPLOSION_867 = 867 - const val RED_LARGE_EXPLOSION_868 = 868 - const val BLUE_LARGE_EXPLOSION_869 = 869 - - const val GREEN_EGG_BREAK_873 = 873 - const val RED_EGG_BREAK_874 = 874 - const val BLUE_EGG_BREAK_875 = 875 - - const val PENANCE_HEALER_BAD_BREATH_863 = 863 - const val PENANCE_HEALER_GOOD_BREATH_864 = 864 - - const val GREEN_LARGE_EXPLOSION2_876 = 876 - -} diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 4ef1fa0b4..2b893eaa7 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -37,12 +37,13 @@ import org.rs09.consts.NPCs enum class BarbassaultState { PARTY_CREATION, STARTING, IN_ARENA,FORFEIT, COMPLETE,DEATH, END } class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutListener, MapArea { - constructor(region: DynamicRegion, activity: BarbassaultActivity) : this(activity) {this.region = region; this.base = region.baseLocation} + //constructor(region: DynamicRegion, activity: BarbassaultActivity) : this(activity) {this.region = region; this.base = region.baseLocation} lateinit var region: DynamicRegion lateinit var base: Location - var currentWave = 1 - var state: BarbassaultState = BarbassaultState.PARTY_CREATION + lateinit var currentWaveDefinition: WaveDefinition lateinit var team: BarbTeam + + var state: BarbassaultState = BarbassaultState.PARTY_CREATION val sessionNpcs = mutableListOf() val BAgroundItems = mutableListOf() val eggHopper = EggHopper.EggHopper() @@ -50,14 +51,15 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi var eggCannonNpcEast: NPC? = null val scoreManager = BarbScoreManager() val eventBus = BarbAssEventBus() - val npcCaps = SpawnCaps(4,4,2,2)//wave 1 - private val countDoown = if(GameWorld.settings?.isDevMode == true) 4 else 60 + + private val countDoown = if(GameWorld.settings?.isDevMode == true) 10 else 60 private var countdownPulse: Pulse? = null fun beginStartingPhase(quickStart: Boolean = false) { if (state != BarbassaultState.PARTY_CREATION) return state = BarbassaultState.STARTING + currentWaveDefinition = getWaveDefinition(team.wave) createArena() startCountdown(quickStart) } @@ -83,7 +85,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi registerLogoutListener(player, "ba-logout") { handleLogout(player) } } - GameWorld.Pulser.submit(GamePulse()) + Pulser.submit(GamePulse()) } fun endSession() { @@ -302,11 +304,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi zone.cleanItems(player,ALL_BARBASS_ITEMS) clearLogoutListener(player, "ba-logout") player.fullRestore() - destroyArena() - } - fun getMonstersForWave(){ - } fun sessionNPCSpawn(id: Int, location: Location, direction: Direction, vararg objects: Any): NPC? { val npc = NPC.create(id, location, direction, *objects) @@ -318,7 +316,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi fun spawnEggCannons() { eggCannonNpcWest = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(21, 34, 0), Direction.NORTH ) //eggCannonNpcWest?. - if (currentWave == 10) return + if (team.wave == 10) return eggCannonNpcEast = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(40, 34, 0), Direction.NORTH ) } diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt index 7d92835fb..ff642747e 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt @@ -2,7 +2,6 @@ package content.minigame.barbassault.arena.Npcs import content.minigame.barbassault.baSession -import core.api.hasLineOfSight import core.api.produceGroundItem import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player @@ -34,7 +33,6 @@ fun dropPenanceEggCluster(killer: Player, npc: NPC) { /** * Finds the closest visible player to the given NPC within a specified range. - * Filters out invisible players and those without line of sight. * * @param npc The NPC used as the search origin. * @param range Maximum distance to search for players. @@ -46,7 +44,6 @@ fun findClosestPlayerFromNPC(npc: NPC,range:Int = 14): Player? { for (player in RegionManager.getLocalPlayers(npc, range)) { if (player.isInvisible) continue - if (!hasLineOfSight(npc, player)) continue val dist = npc.location.getDistance(player.location) if (dist < bestDistance) { @@ -59,20 +56,18 @@ fun findClosestPlayerFromNPC(npc: NPC,range:Int = 14): Player? { /** * Finds the closest NPC matching the given target NPC within a range, - * ensuring there is line of sight between the source NPC and the target. * * @param targetNPC The specific NPC being searched for. * @param npc The source NPC performing the search. * @param range Maximum search radius. * @return The closest matching NPC if found and visible, otherwise null. */ -fun findClosestTargetNPCFromNPC(targetNPC:NPC,npc: NPC,range:Int = 14): NPC? { +fun findClosestTargetNPCIDFromNPC(targetNPC: Int?, npc: NPC, range: Int = 14): NPC? { var closest: NPC? = null var bestDistance = Double.MAX_VALUE for (foundNpc in RegionManager.getLocalNpcs(npc, range)) { - if (targetNPC != foundNpc) continue - if (!hasLineOfSight(npc, foundNpc)) continue + if (targetNPC != foundNpc.id) continue val dist = npc.location.getDistance(foundNpc.location) if (dist < bestDistance) { @@ -97,7 +92,6 @@ fun findClosestNPCIDFromPlayer(player: Player, targetNPC: Int, range: Int = 14): for (npc in RegionManager.getLocalNpcs(player, range)) { if (npc.id != targetNPC) continue - if (!hasLineOfSight(player, npc)) continue val dist = player.location.getDistance(npc.location) if (dist < bestDistance) { @@ -108,4 +102,28 @@ fun findClosestNPCIDFromPlayer(player: Player, targetNPC: Int, range: Int = 14): return closest } +object BAGraphics { + + const val GREEN_LARGE_EXPLOSION_867 = 867 + const val RED_LARGE_EXPLOSION_868 = 868 + const val BLUE_LARGE_EXPLOSION_869 = 869 + + const val GREEN_EGG_BREAK_873 = 873 + const val RED_EGG_BREAK_874 = 874 + const val BLUE_EGG_BREAK_875 = 875 + + const val PENANCE_HEALER_BAD_BREATH_863 = 863 + const val PENANCE_HEALER_GOOD_BREATH_864 = 864 + + const val GREEN_LARGE_EXPLOSION2_876 = 876 + const val RED_EGG_EXPLOSION_975 = 975 + const val GREEN_EGG_PROJECTILE_977 = 977 + const val RED_EGG_PROJECTILE_978 = 978 + const val Blue_EGG_PROJECTILE_978 = 979 + const val YELLOW_EGG_PROJECTILE_980 = 980 + const val STUNN_BIRDYS_981 = 981 + + +} + diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt index c339faac7..df4fb663e 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt @@ -1,17 +1,23 @@ package content.minigame.barbassault.arena.scenery import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.arena.Npcs.BAGraphics.Blue_EGG_PROJECTILE_978 +import content.minigame.barbassault.arena.Npcs.BAGraphics.GREEN_EGG_PROJECTILE_977 +import content.minigame.barbassault.arena.Npcs.BAGraphics.RED_EGG_PROJECTILE_978 import content.minigame.barbassault.arena.Npcs.findClosestNPCIDFromPlayer -import content.minigame.barbassault.arena.Npcs.findClosestTargetNPCFromNPC +import content.minigame.barbassault.arena.Npcs.findClosestTargetNPCIDFromNPC +import content.minigame.barbassault.arena.PenanceType import content.minigame.barbassault.baSession import core.api.* import core.game.component.CloseEvent import core.game.component.Component import core.game.component.ComponentDefinition import core.game.component.ComponentPlugin +import core.game.node.entity.Entity import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.node.item.Item +import core.game.world.update.flag.context.Animation import core.plugin.Initializable import core.plugin.Plugin import org.rs09.consts.Items @@ -88,6 +94,11 @@ class EggHopper : ComponentPlugin() { fun consumeBlue(): Boolean { if (blue <= 0) return false; blue--; return true } fun consumeYellow(): Boolean { if (yellow <= 0) return false; yellow--; return true } } + enum class EggType( val consume: EggHopper.() -> Boolean, val action: String,val key: String) { + GREEN({ consumeGreen() }, "poison","green"), RED({ consumeRed() }, "explosive", "red"), BLUE({ consumeBlue() }, "stun", "blue"); + fun tryConsume(hopper: EggHopper): Boolean = hopper.consume() + } + override fun newInstance(arg: Any?): Plugin { ComponentDefinition.forId(EggTurret.ID).plugin = this ComponentDefinition.forId(EggTurret.ID).isWalkable = false; @@ -122,49 +133,33 @@ class EggHopper : ComponentPlugin() { } return true } - val PENANCE_HEALER_IDS = listOf( - NPCs.PENANCE_HEALER_5245, - NPCs.PENANCE_HEALER_5246 - ) - fun shootNormalEggs(button: Int,player: Player?) { + + fun shootNormalEggs(button: Int, player: Player?) { player ?: return - val eggHopper = player.baSession?.eggHopper - val penanceSets = listOf( - "Penance Healer" to EggTurret.pHealerBtns, // PENANCE_HEALER_IDS - "Penance Runner" to EggTurret.pRunnerBtns, // PENANCE_RUNNER_IDS - "Penance Fighter" to EggTurret.pFighterBtns, // PENANCE_FIGHTER_IDS - "Penance Ranger" to EggTurret.pRangerBtns // PENANCE_RANGER_IDS - ) - for ((name, colors) in penanceSets) { - when(button) { - colors.green -> { - if (!eggHopper?.consumeGreen()!!) { - sendMessage(player, "There are no green eggs in the hopper.") - return - } - sendMessage(player, "Shoot poison at $name."); - //fireEgg(player: Player,npc: NPC) - return - } - colors.red -> { - if (!eggHopper?.consumeRed()!!) { - sendMessage(player, "There are no red eggs in the hopper.") - return - } - sendMessage(player, "Shoot Explosive at $name.") - return - } - colors.blue -> { - if (!eggHopper?.consumeBlue()!!) { - sendMessage(player, "There are no blue eggs in the hopper.") - return - } - sendMessage(player, "Shoot Stun at $name.") - return - } + val hopper = player.baSession?.eggHopper ?: return + + val (type, eggType) = listOf( + PenanceType.HEALER to EggTurret.pHealerBtns, + PenanceType.RUNNER to EggTurret.pRunnerBtns, + PenanceType.FIGHTER to EggTurret.pFighterBtns, + PenanceType.RANGER to EggTurret.pRangerBtns + ).firstNotNullOfOrNull { (type, colors) -> + when (button) { + colors.GREEN -> type to EggType.GREEN + colors.RED -> type to EggType.RED + colors.BLUE -> type to EggType.BLUE + else -> null } - updateCannonUI(player) + } ?: return + + if (!eggType.tryConsume(hopper)) { + sendMessage(player, "There are no ${eggType.key} eggs in the hopper.") + return } + + sendMessage(player, "Shoot ${eggType.action} at $type.") + fireEgg(player, type, eggType) + updateCannonUI(player) } fun updateCannonUI(player: Player?){ @@ -173,7 +168,7 @@ class EggHopper : ComponentPlugin() { val penances = listOf( EggTurret.pHealer, EggTurret.pRunner, EggTurret.pRanger, EggTurret.pFighter ) penances.forEach { penance -> - val colors = listOf( "green" to penance.green,"red" to penance.red, "blue" to penance.blue) + val colors = listOf( "green" to penance.GREEN,"red" to penance.RED, "blue" to penance.BLUE) colors.forEach { (colorName, componentId) -> val value = when(colorName) { "green" -> eggHopper.green @@ -229,6 +224,7 @@ class EggHopper : ComponentPlugin() { sendMessage(player,"You load the hopper.") removeItem(player, Item(itemId, added)) } + //if hopper full messsage "You can't load any more $eggType eggs." } fun showEggHopperCount(player: Player?){ player ?: return @@ -240,12 +236,21 @@ class EggHopper : ComponentPlugin() { } - fun fireEgg(player: Player,npc: NPC){ - val session = player.baSession + //error message CHATBOX "[bold]all of the _PENANCE_ have been killed!" + fun fireEgg(player: Player, type: PenanceType, eggType: EggType){ + val npcId = player.baSession?.currentWaveDefinition?.npcIds?.get(type) val eggCannon = findClosestNPCIDFromPlayer(player,NPCs.EGG_LAUNCHER_5026,2) - val target = findClosestTargetNPCFromNPC(npc, eggCannon as NPC ) - // - eggCannon.attack(target) + val target = findClosestTargetNPCIDFromNPC(npcId, eggCannon as NPC ,14) + + if (target == null) {sendMessage(player,"There are no targetable Penance ${type.name} within firing range.") ;return} + //queueScript { } + player.animate(Animation(5428)) + eggCannon.face(target) + eggCannon.animate(Animation(5426)) + + if (eggType.key == "green" ){ spawnProjectile(eggCannon,target as Entity,GREEN_EGG_PROJECTILE_977) } + if (eggType.key == "red" ){ spawnProjectile(eggCannon,target as Entity,RED_EGG_PROJECTILE_978) } + if (eggType.key == "blue" ){ spawnProjectile(eggCannon,target as Entity,Blue_EGG_PROJECTILE_978) } } } @@ -253,7 +258,7 @@ class EggHopper : ComponentPlugin() { -data class EggColors(val green: Int, val red: Int, val blue: Int) +data class EggColors(val GREEN: Int, val RED: Int, val BLUE: Int) object EggTurret { const val ID = 495 val pHealer = EggColors(57, 58, 59) From e85833ffd9ffeac394d4509ce148e7351047a72e Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 20 Apr 2026 22:40:33 -0400 Subject: [PATCH 070/123] sendDialogueLines for no targetable Penance --- .../content/minigame/barbassault/arena/scenery/EggHopper.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt index df4fb663e..76b8fbb63 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt @@ -242,7 +242,7 @@ class EggHopper : ComponentPlugin() { val eggCannon = findClosestNPCIDFromPlayer(player,NPCs.EGG_LAUNCHER_5026,2) val target = findClosestTargetNPCIDFromNPC(npcId, eggCannon as NPC ,14) - if (target == null) {sendMessage(player,"There are no targetable Penance ${type.name} within firing range.") ;return} + if (target == null) { sendDialogueLines(player,"There are no targetable Penance ${type.name} within firing range.") ;return} //queueScript { } player.animate(Animation(5428)) eggCannon.face(target) From cc5d74a5570d88d2a6425b8184c33a9b0ebb3393 Mon Sep 17 00:00:00 2001 From: Tooze Date: Tue, 12 May 2026 20:15:26 -0400 Subject: [PATCH 071/123] egg hopper work --- .../barbassault/arena/BarbassaultGameArea.kt | 5 +- .../barbassault/arena/WaveDefinition.kt | 4 +- .../barbassault/arena/scenery/EggHopper.kt | 61 ++++++++++--------- 3 files changed, 37 insertions(+), 33 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 70c43f04e..f04dd95a7 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -107,7 +107,6 @@ class BarbassaultGameArea : InteractionListener, MapArea { } on(Scenery.EGG_HOPPER_20264, IntType.SCENERY, "Load","Look-in") { player, node -> val loc = player.location - val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false when(optionClicked){ "load" -> loadEggHopper(player) @@ -128,6 +127,8 @@ class BarbassaultGameArea : InteractionListener, MapArea { return@on true } setDest(IntType.SCENERY, intArrayOf(Scenery.EGG_HOPPER_20264), "use","Load","Look-in") { player, node -> + //work around for running off to org location instead of copy location. + //Player Name's Parlor chairs Should fix this! return@setDest sessionDestination(player as Player,node,Direction.SOUTH) } @@ -276,6 +277,8 @@ class BarbassaultGameArea : InteractionListener, MapArea { }) } fun sessionDestination(player: Player, node: Node, direction: Direction? = null): Location { + //work around for running off to org location instead of copy location. + //Player Name's Parlor chairs Should fix this! val session = player.baSession ?: return node.location val borders = getRegionBorders(session.region.regionId) val base = session.base diff --git a/Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt b/Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt index 2171eabcc..22b032fbc 100644 --- a/Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt +++ b/Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt @@ -11,9 +11,9 @@ fun getWaveDefinition(index: Int): WaveDefinition { } data class WaveDefinition( val caps: SpawnCaps, val npcIds: Map ) -enum class PenanceType { HEALER, RUNNER, FIGHTER, RANGER } +enum class PenanceType { HEALER, RUNNER, FIGHTER, RANGER, QUEEN } data class SpawnCaps(val rangers: Int, val fighters: Int, val runners: Int, val healers: Int) -val waves = listOf( +private val waves = listOf( WaveDefinition( //Wave tut SpawnCaps(rangers = 1, fighters = 1, runners = 1, healers = 1), mapOf( diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt index 76b8fbb63..aaab501c3 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt @@ -4,6 +4,7 @@ import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.Npcs.BAGraphics.Blue_EGG_PROJECTILE_978 import content.minigame.barbassault.arena.Npcs.BAGraphics.GREEN_EGG_PROJECTILE_977 import content.minigame.barbassault.arena.Npcs.BAGraphics.RED_EGG_PROJECTILE_978 +import content.minigame.barbassault.arena.Npcs.BAGraphics.YELLOW_EGG_PROJECTILE_980 import content.minigame.barbassault.arena.Npcs.findClosestNPCIDFromPlayer import content.minigame.barbassault.arena.Npcs.findClosestTargetNPCIDFromNPC import content.minigame.barbassault.arena.PenanceType @@ -94,10 +95,6 @@ class EggHopper : ComponentPlugin() { fun consumeBlue(): Boolean { if (blue <= 0) return false; blue--; return true } fun consumeYellow(): Boolean { if (yellow <= 0) return false; yellow--; return true } } - enum class EggType( val consume: EggHopper.() -> Boolean, val action: String,val key: String) { - GREEN({ consumeGreen() }, "poison","green"), RED({ consumeRed() }, "explosive", "red"), BLUE({ consumeBlue() }, "stun", "blue"); - fun tryConsume(hopper: EggHopper): Boolean = hopper.consume() - } override fun newInstance(arg: Any?): Plugin { ComponentDefinition.forId(EggTurret.ID).plugin = this @@ -126,36 +123,29 @@ class EggHopper : ComponentPlugin() { checkEasterEgg(player, button) - when(button){ - EggTurret.close -> closeTurretIface(player) - EggTurret.queenBtn -> sendMessage(player,"Shoot Omega at Queen") - else -> shootNormalEggs(button, player) - } + if (button ==EggTurret.close ){ closeTurretIface(player); return true} + shootNormalEggs(button,player) return true } fun shootNormalEggs(button: Int, player: Player?) { player ?: return - val hopper = player.baSession?.eggHopper ?: return val (type, eggType) = listOf( PenanceType.HEALER to EggTurret.pHealerBtns, PenanceType.RUNNER to EggTurret.pRunnerBtns, PenanceType.FIGHTER to EggTurret.pFighterBtns, - PenanceType.RANGER to EggTurret.pRangerBtns + PenanceType.RANGER to EggTurret.pRangerBtns, ).firstNotNullOfOrNull { (type, colors) -> when (button) { colors.GREEN -> type to EggType.GREEN colors.RED -> type to EggType.RED colors.BLUE -> type to EggType.BLUE - else -> null + else -> type to EggType.YELLOW } - } ?: return - - if (!eggType.tryConsume(hopper)) { - sendMessage(player, "There are no ${eggType.key} eggs in the hopper.") - return - } + } ?: if (button == EggTurret.queenBtn) { + PenanceType.QUEEN to EggType.YELLOW + } else return sendMessage(player, "Shoot ${eggType.action} at $type.") fireEgg(player, type, eggType) @@ -168,18 +158,18 @@ class EggHopper : ComponentPlugin() { val penances = listOf( EggTurret.pHealer, EggTurret.pRunner, EggTurret.pRanger, EggTurret.pFighter ) penances.forEach { penance -> - val colors = listOf( "green" to penance.GREEN,"red" to penance.RED, "blue" to penance.BLUE) - colors.forEach { (colorName, componentId) -> - val value = when(colorName) { - "green" -> eggHopper.green - "red" -> eggHopper.red - "blue" -> eggHopper.blue - else -> 0 - } + val components = listOf( + EggType.GREEN to penance.GREEN, + EggType.RED to penance.RED, + EggType.BLUE to penance.BLUE + ) + + components.forEach { (eggType, componentId) -> + val value = eggType.getCount(eggHopper) setInterfaceText(player, value.toString(), EggTurret.ID, componentId) } } - setInterfaceText(player,eggHopper.yellow.toString(),EggTurret.ID,EggTurret.OMEGA) + setInterfaceText( player, EggType.YELLOW.getCount(eggHopper).toString(), EggTurret.ID, EggTurret.OMEGA ) } @@ -241,23 +231,34 @@ class EggHopper : ComponentPlugin() { val npcId = player.baSession?.currentWaveDefinition?.npcIds?.get(type) val eggCannon = findClosestNPCIDFromPlayer(player,NPCs.EGG_LAUNCHER_5026,2) val target = findClosestTargetNPCIDFromNPC(npcId, eggCannon as NPC ,14) + val hopper = player.baSession?.eggHopper ?: return if (target == null) { sendDialogueLines(player,"There are no targetable Penance ${type.name} within firing range.") ;return} + if (!eggType.tryConsume(hopper)) { + sendMessage(player, "There are no ${eggType.name.lowercase()} eggs in the hopper.") + return + } //queueScript { } player.animate(Animation(5428)) eggCannon.face(target) eggCannon.animate(Animation(5426)) - if (eggType.key == "green" ){ spawnProjectile(eggCannon,target as Entity,GREEN_EGG_PROJECTILE_977) } - if (eggType.key == "red" ){ spawnProjectile(eggCannon,target as Entity,RED_EGG_PROJECTILE_978) } - if (eggType.key == "blue" ){ spawnProjectile(eggCannon,target as Entity,Blue_EGG_PROJECTILE_978) } + spawnProjectile(eggCannon,target as Entity,eggType.projectileGFX) } } } +enum class EggType(val consume: EggHopper.EggHopper.() -> Boolean, val action: String, val projectileGFX: Int, val getAmount: EggHopper.EggHopper.() -> Int) { + GREEN({ consumeGreen() }, "poison",GREEN_EGG_PROJECTILE_977, { green }), + RED({ consumeRed() }, "explosive", RED_EGG_PROJECTILE_978, { red }), + BLUE({ consumeBlue() }, "stun", Blue_EGG_PROJECTILE_978, { blue }), + YELLOW({consumeYellow()},"Omega",YELLOW_EGG_PROJECTILE_980, { yellow }); + fun tryConsume(hopper: EggHopper.EggHopper): Boolean = hopper.consume() + fun getCount(hopper: EggHopper.EggHopper) = hopper.getAmount() +} data class EggColors(val GREEN: Int, val RED: Int, val BLUE: Int) object EggTurret { const val ID = 495 From ab3c9fcc4d034f2704de0e05af0875c50f224dbe Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 16 May 2026 21:30:51 -0400 Subject: [PATCH 072/123] EggHopper / EggCannon Naming. --- .../barbassault/arena/BarbassaultGameArea.kt | 12 ++++++------ .../minigame/barbassault/arena/BarbassaultSession.kt | 4 ++-- .../arena/Npcs/{EggCannon.kt => EggCannonNPC.kt} | 2 +- .../minigame/barbassault/arena/scenery/EggHopper.kt | 9 ++++----- 4 files changed, 13 insertions(+), 14 deletions(-) rename Server/src/main/content/minigame/barbassault/arena/Npcs/{EggCannon.kt => EggCannonNPC.kt} (94%) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index f04dd95a7..5d8a28247 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -4,10 +4,10 @@ import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultTut import content.minigame.barbassault.arena.BaHornSystem.HornHelper.getHealerHorn import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle -import content.minigame.barbassault.arena.scenery.EggHopper -import content.minigame.barbassault.arena.scenery.EggHopper.Companion.loadEggHopper -import content.minigame.barbassault.arena.scenery.EggHopper.Companion.loadHopperEggs -import content.minigame.barbassault.arena.scenery.EggHopper.Companion.showEggHopperCount +import content.minigame.barbassault.arena.scenery.EggCannon +import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadEggHopper +import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadHopperEggs +import content.minigame.barbassault.arena.scenery.EggCannon.Companion.showEggHopperCount import content.minigame.barbassault.baSession import content.minigame.barbassault.getBarbLevels import content.minigame.barbassault.isBAHealer @@ -102,7 +102,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { override fun defineListeners() { //Wrong food message "That's the wrong type of poisoned food to use! Penalty!" on(Scenery.EGG_LAUNCHER_20133, IntType.SCENERY, "Shoot") { player, node -> - EggHopper.openTurretIface(player) + EggCannon.openTurretIface(player) return@on true } on(Scenery.EGG_HOPPER_20264, IntType.SCENERY, "Load","Look-in") { player, node -> @@ -115,7 +115,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { player.faceLocation(location(loc.x,loc.y+1,0)) return@on true } - onUseWith(IntType.SCENERY, EggHopper.ALL_EGGS,Scenery.EGG_HOPPER_20264){ player, used, with -> + onUseWith(IntType.SCENERY, EggCannon.ALL_EGGS,Scenery.EGG_HOPPER_20264){ player, used, with -> val loc = player.location player.faceLocation(location(loc.x,loc.y+1,0)) loadHopperEggs(player,used.id ) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 2b893eaa7..e58fdda8f 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -3,7 +3,7 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.ALL_BARBASS_ITEMS import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultActivity -import content.minigame.barbassault.arena.scenery.EggHopper +import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.GloryHorn import content.minigame.barbassault.baSession import content.minigame.barbassault.getBarbLevels @@ -46,7 +46,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi var state: BarbassaultState = BarbassaultState.PARTY_CREATION val sessionNpcs = mutableListOf() val BAgroundItems = mutableListOf() - val eggHopper = EggHopper.EggHopper() + val eggHopper = EggCannon.EggHopper() var eggCannonNpcWest: NPC? = null var eggCannonNpcEast: NPC? = null val scoreManager = BarbScoreManager() diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannonNPC.kt similarity index 94% rename from Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannon.kt rename to Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannonNPC.kt index 0b3af3c92..1971fb5a0 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannonNPC.kt @@ -9,7 +9,7 @@ import core.game.world.update.flag.context.Graphics import org.rs09.consts.NPCs -class EggCannon : NPCBehavior(NPCs.EGG_LAUNCHER_5026) { +class EggCannonNPC : NPCBehavior(NPCs.EGG_LAUNCHER_5026) { override fun onCreation (self: NPC) { self.isWalks = false self.isNeverWalks = true diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt index aaab501c3..eafe2ef4f 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt @@ -30,9 +30,8 @@ import org.rs09.consts.NPCs // half -> EGG_HOPPER_20265 // full -> EGG_HOPPER_20266 //varbit 3268 -//todo fix naming of hopper/cannon @Initializable -class EggHopper : ComponentPlugin() { +class EggCannon : ComponentPlugin() { //Easter Egg "Blinky Switch" private val currentSequence = mutableListOf() @@ -250,14 +249,14 @@ class EggHopper : ComponentPlugin() { } -enum class EggType(val consume: EggHopper.EggHopper.() -> Boolean, val action: String, val projectileGFX: Int, val getAmount: EggHopper.EggHopper.() -> Int) { +enum class EggType(val consume: EggCannon.EggHopper.() -> Boolean, val action: String, val projectileGFX: Int, val getAmount: EggCannon.EggHopper.() -> Int) { GREEN({ consumeGreen() }, "poison",GREEN_EGG_PROJECTILE_977, { green }), RED({ consumeRed() }, "explosive", RED_EGG_PROJECTILE_978, { red }), BLUE({ consumeBlue() }, "stun", Blue_EGG_PROJECTILE_978, { blue }), YELLOW({consumeYellow()},"Omega",YELLOW_EGG_PROJECTILE_980, { yellow }); - fun tryConsume(hopper: EggHopper.EggHopper): Boolean = hopper.consume() - fun getCount(hopper: EggHopper.EggHopper) = hopper.getAmount() + fun tryConsume(hopper: EggCannon.EggHopper): Boolean = hopper.consume() + fun getCount(hopper: EggCannon.EggHopper) = hopper.getAmount() } data class EggColors(val GREEN: Int, val RED: Int, val BLUE: Int) object EggTurret { From f3e84836c662a98abba64238228cee3a94821bce Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 16 May 2026 21:32:18 -0400 Subject: [PATCH 073/123] EggHopper / EggCannon Naming. --- .../barbassault/arena/scenery/{EggHopper.kt => EggCannon.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Server/src/main/content/minigame/barbassault/arena/scenery/{EggHopper.kt => EggCannon.kt} (100%) diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt similarity index 100% rename from Server/src/main/content/minigame/barbassault/arena/scenery/EggHopper.kt rename to Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt From 380bd6e0fde84f1f83ab8bd4d5788ba8798fb7cd Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 16 May 2026 23:54:35 -0400 Subject: [PATCH 074/123] wave spawning based on wave caps in WaveDefinition --- .../minigame/barbassault/BarbassDevHelper.kt | 16 +++++++-- .../barbassault/arena/BarbassaultGameArea.kt | 11 ------ .../barbassault/arena/BarbassaultSession.kt | 35 +++++++++++++++---- .../arena/Npcs/PenanceFighterNPC.kt | 2 +- .../arena/Npcs/PenanceHealerNPC.kt | 2 ++ .../barbassault/arena/Npcs/PenanceHelper.kt | 5 +-- .../arena/Npcs/PenanceRangerNPC.kt | 2 +- .../arena/Npcs/PenanceRunnerNPC.kt | 2 +- .../barbassault/arena/WaveDefinition.kt | 2 +- .../barbassault/arena/scenery/EggCannon.kt | 2 +- 10 files changed, 53 insertions(+), 26 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt index c3a8459cd..bb3f65c4a 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt @@ -1,5 +1,6 @@ package content.minigame.barbassault +import content.minigame.barbassault.arena.Npcs.dropPenanceEggCluster import content.minigame.barbassault.bots.BarbassBot import content.minigame.barbassault.lobby.BarbassaultLobby import core.api.* @@ -21,7 +22,7 @@ class BarbassDevHelper : CommandSet(Privilege.ADMIN) { return@define } define ("setbarbwave") { player,args -> - player.setAttribute("/save:barbass:wave", args[1].toIntOrNull()) + player.setBarbWave(args[1].toInt()) return@define } @@ -45,7 +46,18 @@ class BarbassDevHelper : CommandSet(Privilege.ADMIN) { define("defgear"){ player,_-> player.equipment.replace(Item(954),2) return@define - + } + define("eggloot"){ player,_-> + dropPenanceEggCluster(player) + return@define + } + define("spawnwave"){ player,_-> + player.baSession?.spawnNpcWave() + return@define + } + define("spawnwaveforce"){ player,_-> + player.baSession?.spawnNpcWave(true) + return@define } define("babot"){ player,_-> if (babotcount >= 25) { diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt index 5d8a28247..063517678 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt @@ -67,17 +67,6 @@ class BarbassaultGameArea : InteractionListener, MapArea { EggCannonLoc(EggCannonSide.WEST, 21, 34, 0, Direction.SOUTH), EggCannonLoc(EggCannonSide.EAST, 40, 34, 0, Direction.SOUTH) ) - - enum class pennanceNPC { RUNNER, HEALER, FIGHTER, RANGER } - data class npcSpawnLoc(val tunnel:pennanceNPC, val x: Int,val y: Int,val z: Int,val direction: Direction) - val npcSpawns: List = listOf( - npcSpawnLoc(pennanceNPC.RUNNER,42,45,0,Direction.SOUTH), - npcSpawnLoc(pennanceNPC.HEALER,36,46,0,Direction.SOUTH), - - npcSpawnLoc(pennanceNPC.FIGHTER,24,46,0,Direction.SOUTH), - npcSpawnLoc(pennanceNPC.RANGER,36,46,0,Direction.SOUTH), - ) - override fun defineAreaBorders(): Array { //block standard teleports. BarbassaultTut.BarbassTutNPCs.forEach { diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index e58fdda8f..f982b76f1 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -11,7 +11,6 @@ import content.minigame.barbassault.getBarbWave import content.minigame.barbassault.lobby.* import core.api.* import core.game.node.entity.Entity -import core.game.node.entity.combat.CombatStyle import core.game.node.entity.impl.PulseManager import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player @@ -24,7 +23,6 @@ import core.game.world.map.Direction import core.game.world.map.Location import core.game.world.map.build.DynamicRegion import core.game.world.map.zone.* -import core.game.world.update.flag.context.Graphics import core.tools.Log import core.tools.secondsToTicks import core.tools.ticksToSeconds @@ -35,6 +33,7 @@ import org.rs09.consts.NPCs enum class BarbassaultState { PARTY_CREATION, STARTING, IN_ARENA,FORFEIT, COMPLETE,DEATH, END } +data class PenanceNpcTunnel(val type:PenanceType, val x: Int,val y: Int,val z: Int,val direction: Direction) { fun toLocation(): Location = Location(x, y, z) } class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutListener, MapArea { //constructor(region: DynamicRegion, activity: BarbassaultActivity) : this(activity) {this.region = region; this.base = region.baseLocation} @@ -45,6 +44,13 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi var state: BarbassaultState = BarbassaultState.PARTY_CREATION val sessionNpcs = mutableListOf() + var currentNPCCount = SpawnCaps(0,0,0,0) + val npcTunnel: List = listOf( + PenanceNpcTunnel(PenanceType.RUNNER,42,46,0,Direction.SOUTH), + PenanceNpcTunnel(PenanceType.HEALER,36,47,0,Direction.SOUTH), + PenanceNpcTunnel(PenanceType.FIGHTER,24,46,0,Direction.SOUTH), + PenanceNpcTunnel(PenanceType.RANGER,18,46,0,Direction.SOUTH), + ) val BAgroundItems = mutableListOf() val eggHopper = EggCannon.EggHopper() var eggCannonNpcWest: NPC? = null @@ -136,7 +142,6 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi Pulser.submit(countdownPulse!!) } private fun InitEvents(){ - eventBus.register(BarbAssEvent.NPCDied::class.java) { event -> val tracker = scoreManager.trackerFor(event.killer) val npcRoleType = event.npc.getAttribute("barbass-role") @@ -163,10 +168,29 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi tracker.healerStats.wrongPoisonUsed++ } } - fun forfeit(){ - state = BarbassaultState.FORFEIT + + fun spawnNpcWave(force: Boolean = false) { + val caps = currentWaveDefinition.caps + val npcIds = currentWaveDefinition.npcIds + + tryPenanceSpawn(PenanceType.RANGER, currentNPCCount.rangers, caps.rangers, npcIds, force) { currentNPCCount.rangers++ } + tryPenanceSpawn(PenanceType.FIGHTER, currentNPCCount.fighters, caps.fighters, npcIds,force) { currentNPCCount.fighters++ } + tryPenanceSpawn(PenanceType.RUNNER, currentNPCCount.runners, caps.runners,npcIds,force) { currentNPCCount.runners++ } + tryPenanceSpawn(PenanceType.HEALER, currentNPCCount.healers, caps.healers, npcIds,force) { currentNPCCount.healers++ } } + fun tryPenanceSpawn(type: PenanceType,current: Int,cap: Int,npcIds: Map, force: Boolean, increment: () -> Unit) { + if (!force && current >= cap) { return } + val npcId = npcIds[type] ?: return + val spawn = npcTunnel.firstOrNull { it.type == type } ?: return + + var thisNpc = sessionNPCSpawn(npcId, base.transform(30,31,0), spawn.direction) + thisNpc?.location = base.transform(spawn.toLocation()) + increment() + } + + + fun forfeit(){ state = BarbassaultState.FORFEIT } fun isInBarbAssaultGame() = state == BarbassaultState.IN_ARENA fun endGame(endReason: String){ @@ -309,7 +333,6 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi fun sessionNPCSpawn(id: Int, location: Location, direction: Direction, vararg objects: Any): NPC? { val npc = NPC.create(id, location, direction, *objects) npc.init() - sessionNpcs.add(npc) return npc } diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceFighterNPC.kt index 3a92a691c..d5e343db3 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceFighterNPC.kt @@ -60,7 +60,7 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { self.isWalks = true // self.isNeverWalks = false self.properties.isNPCWalkable = false - self.walkRadius = 64 + self.walkRadius = 24 self.isAggressive = true self.isRespawn = false diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt index 0682a1a34..ef7cc2666 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt @@ -29,6 +29,8 @@ class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS.toIntArray()) { override fun onCreation (self: NPC) { self.setAttribute("barbass-role", BarbRole.HEALER) + self.isWalks = true + self.walkRadius = 24 } //sendMessage(player,"that's the wrong type of poisoned food to use! Penalty!") diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt index ff642747e..0d1b63129 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt @@ -8,8 +8,9 @@ import core.game.node.entity.player.Player import core.game.world.map.RegionManager import org.rs09.consts.Items -fun dropPenanceEggCluster(killer: Player, npc: NPC) { - val tiles = npc.dropLocation.get3x3Tiles().shuffled() +fun dropPenanceEggCluster(killer: Player, npc: NPC? = null) { + val center = npc?.dropLocation ?: killer.location + val tiles = center.get3x3Tiles().shuffled() val eggs = listOf( Items.RED_EGG_10532, Items.RED_EGG_10532, Items.BLUE_EGG_10533, Items.BLUE_EGG_10533, diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt index d0f36bdaf..ac90b158d 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt @@ -50,7 +50,7 @@ class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { self.setAttribute("agg_radius",6) self.isWalks = true self.isNeverWalks = false - self.walkRadius = 64 + self.walkRadius = 24 self.isAggressive = true self.definition.combatGraphics[1] = Graphics(866, 25, 0) self.setAttribute("barbass-role",BarbRole.ATTACKER) diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt index d6b5939f7..159f4d65c 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt @@ -36,7 +36,7 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { } override fun onCreation(self: NPC) { self.isWalks = true - self.walkRadius = 22 + self.walkRadius = 24 self.destinationFlag self.setAttribute("barbass-role", BarbRole.DEFENDER) diff --git a/Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt b/Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt index 22b032fbc..81b66f083 100644 --- a/Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt +++ b/Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt @@ -12,7 +12,7 @@ fun getWaveDefinition(index: Int): WaveDefinition { data class WaveDefinition( val caps: SpawnCaps, val npcIds: Map ) enum class PenanceType { HEALER, RUNNER, FIGHTER, RANGER, QUEEN } -data class SpawnCaps(val rangers: Int, val fighters: Int, val runners: Int, val healers: Int) +data class SpawnCaps(var rangers: Int, var fighters: Int, var runners: Int, var healers: Int) private val waves = listOf( WaveDefinition( //Wave tut SpawnCaps(rangers = 1, fighters = 1, runners = 1, healers = 1), diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt index eafe2ef4f..5165b4b26 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -232,7 +232,7 @@ class EggCannon : ComponentPlugin() { val target = findClosestTargetNPCIDFromNPC(npcId, eggCannon as NPC ,14) val hopper = player.baSession?.eggHopper ?: return - if (target == null) { sendDialogueLines(player,"There are no targetable Penance ${type.name} within firing range.") ;return} + if (target == null) { sendDialogueLines(player,"There are no targetable Penance ${type.name.lowercase().replaceFirstChar { it.uppercase() }} within firing range.") ;return} if (!eggType.tryConsume(hopper)) { sendMessage(player, "There are no ${eggType.name.lowercase()} eggs in the hopper.") return From f970da04626fff63f259a5033e0edb69d4dc0341 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 17 May 2026 00:24:00 -0400 Subject: [PATCH 075/123] sessions spawn waves periodically --- .../minigame/barbassault/arena/BarbassaultSession.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index f982b76f1..43b0367d2 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -48,7 +48,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi val npcTunnel: List = listOf( PenanceNpcTunnel(PenanceType.RUNNER,42,46,0,Direction.SOUTH), PenanceNpcTunnel(PenanceType.HEALER,36,47,0,Direction.SOUTH), - PenanceNpcTunnel(PenanceType.FIGHTER,24,46,0,Direction.SOUTH), + PenanceNpcTunnel(PenanceType.FIGHTER,24,47,0,Direction.SOUTH), PenanceNpcTunnel(PenanceType.RANGER,18,46,0,Direction.SOUTH), ) val BAgroundItems = mutableListOf() @@ -224,15 +224,15 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi BarbassaultState.IN_ARENA -> { eventBus.processEvents() // process events such as npc died to scoring - roleCallTicks-- waveSpawnTicks-- if (roleCallTicks <= 0) { rollNewRoleCalls() roleCallTicks = secondsToTicks(30) } - if (waveSpawnTicks <=0 ){ - //spawn npcs based on wave number + if (waveSpawnTicks <= 0 ){ + spawnNpcWave() + waveSpawnTicks = secondsToTicks(6) } } BarbassaultState.FORFEIT -> {endGame("left"); return true} @@ -248,7 +248,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi } return true // we do not have auto start next wave in 2009 } - BarbassaultState.DEATH -> {endGame("died");return true} + BarbassaultState.DEATH -> { endGame("died"); return true } BarbassaultState.END -> return true else -> return false } From fe7f2563086af676c061f1d9dba2341c8538582d Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 17 May 2026 12:50:54 -0400 Subject: [PATCH 076/123] WalkRadius to be a radius in getMovementDestination() --- Server/src/main/core/game/node/entity/npc/NPC.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Server/src/main/core/game/node/entity/npc/NPC.java b/Server/src/main/core/game/node/entity/npc/NPC.java index b8139e66a..d0e349d7c 100644 --- a/Server/src/main/core/game/node/entity/npc/NPC.java +++ b/Server/src/main/core/game/node/entity/npc/NPC.java @@ -767,7 +767,8 @@ public class NPC extends Entity { */ protected Location getMovementDestination() { if (!pathBoundMovement || movementPath == null || movementPath.length < 1) { - Location returnToSpawnLocation = getProperties().getSpawnLocation().transform(-5 + RandomFunction.random(getWalkRadius()), -5 + RandomFunction.random(getWalkRadius()), 0); + int radius = getWalkRadius() / 2; + Location returnToSpawnLocation = getProperties().getSpawnLocation().transform(RandomFunction.random(-radius, radius+1), RandomFunction.random(-radius, radius+1), 0); int dist = (int) Location.getDistance(location, returnToSpawnLocation); int pathLimit = 14; if (dist > pathLimit) { From 5cae5cf0a3838d243ce8daf0f1c74cb1abb1c85f Mon Sep 17 00:00:00 2001 From: Tooze Date: Tue, 19 May 2026 21:45:39 -0400 Subject: [PATCH 077/123] Naming, Work on ground item management in BA Sessions. --- .../minigame/barbassault/BarbassDevHelper.kt | 5 ++ .../minigame/barbassault/BarbassaultTut.kt | 32 ++++++- .../barbassault/arena/BarbassaultActivity.kt | 8 +- ...ameArea.kt => BarbassaultArenaListener.kt} | 71 ++++----------- .../barbassault/arena/BarbassaultSession.kt | 87 +++++++++++++------ .../barbassault/arena/Npcs/PenanceHelper.kt | 18 ++-- .../barbassault/arena/SessionGroundSpawn.kt | 60 +++++++++++++ .../barbassault/arena/scenery/EggCannon.kt | 2 + 8 files changed, 184 insertions(+), 99 deletions(-) rename Server/src/main/content/minigame/barbassault/arena/{BarbassaultGameArea.kt => BarbassaultArenaListener.kt} (88%) create mode 100644 Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt diff --git a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt index bb3f65c4a..f80ad4c71 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt @@ -51,6 +51,11 @@ class BarbassDevHelper : CommandSet(Privilege.ADMIN) { dropPenanceEggCluster(player) return@define } + define("cleanfloor"){ player,_-> + val session = player.baSession ?: return@define + session.clearGroundItems() + return@define + } define("spawnwave"){ player,_-> player.baSession?.spawnNpcWave() return@define diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultTut.kt b/Server/src/main/content/minigame/barbassault/BarbassaultTut.kt index b4415c333..943388af1 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassaultTut.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassaultTut.kt @@ -1,16 +1,44 @@ package content.minigame.barbassault +import core.api.MapArea +import core.api.getRegionBorders +import core.api.log import core.api.produceGroundItem +import core.game.node.entity.Entity import core.game.node.entity.npc.NPC -import core.game.node.item.GroundItem import core.game.node.item.GroundItemManager import core.game.world.map.Direction import core.game.world.map.Location +import core.game.world.map.zone.ZoneBorders +import core.tools.Log import org.rs09.consts.Items import org.rs09.consts.NPCs -class BarbassaultTut { +class BarbassaultTut: MapArea { + + override fun defineAreaBorders(): Array { + //block standard teleports. + BarbassTutNPCs.forEach { + npc -> npc.init() + npc.isWalks = false + + } + spawnItems() + return arrayOf(getRegionBorders(7509)) + } + override fun areaEnter(entity: Entity) { + //todo move tut maparea to barbtut + log(this::class.java, Log.FINE, "ENTERED BARBASS TUT") + } + + + override fun areaLeave(entity: Entity, logout: Boolean) { + //val player = entity as? Player ?: return + log(this::class.java, Log.FINE, "EXITED BARBASS TUT") + } + + companion object { data class TutorialItemSpawn(val itemId: Int, val location: Location) val BarbassTutItems: List = listOf( diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt index 201f77c6f..da9ec181a 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt @@ -27,12 +27,7 @@ import org.rs09.consts.Items private val sessions = mutableListOf() private var activity: BarbassaultActivity? = null @Initializable -open class BarbassaultActivity : ActivityPlugin("barbassault",false, true, true, - ZoneRestriction.CANNON, - ZoneRestriction.FIRES, - ZoneRestriction.FOLLOWERS, - ZoneRestriction.RANDOM_EVENTS -) { +open class BarbassaultActivity : ActivityPlugin("barbassault",false, true, true,ZoneRestriction.CANNON,ZoneRestriction.FIRES,ZoneRestriction.FOLLOWERS,ZoneRestriction.RANDOM_EVENTS) { init { activity = this } @@ -74,7 +69,6 @@ open class BarbassaultActivity : ActivityPlugin("barbassault",false, true, true, } if (e is NPC) { // dropPenanceEggCluster(e) - //GroundItemManager.create(Item(Items.RED_EGG_10532, 1), e.location).apply { forceVisible = true } } return false } diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultArenaListener.kt similarity index 88% rename from Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt rename to Server/src/main/content/minigame/barbassault/arena/BarbassaultArenaListener.kt index 063517678..26c9df496 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultGameArea.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultArenaListener.kt @@ -1,9 +1,9 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.BarbassaultTut import content.minigame.barbassault.arena.BaHornSystem.HornHelper.getHealerHorn import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle +import content.minigame.barbassault.arena.scenery.All_Eggs import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadEggHopper import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadHopperEggs @@ -17,21 +17,20 @@ import core.game.global.action.DropListener import core.game.interaction.IntType import core.game.interaction.InteractionListener import core.game.node.Node -import core.game.node.entity.Entity import core.game.node.entity.combat.BattleState import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.node.item.GroundItem +import core.game.node.item.GroundItemManager import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.GameWorld.Pulser import core.game.world.map.Direction import core.game.world.map.Location -import core.game.world.map.zone.ZoneBorders import core.game.world.update.flag.context.Animation -import core.tools.Log +import core.game.worldevents.holiday.easter.EasterEvent.Companion.BUN_EARS import org.rs09.consts.Items import org.rs09.consts.Scenery @@ -48,45 +47,12 @@ val ATTACKER_ICON = 10556 val DEFENDER_ICON = 10558 val COLLECTOR_ICON = 10557 val HEALER_ICON = 10559 -class BarbassaultGameArea : InteractionListener, MapArea { +class BarbassaultArenaListener : InteractionListener { val ROLE_ICON = intArrayOf( ATTACKER_ICON, DEFENDER_ICON, COLLECTOR_ICON, HEALER_ICON ) val Fix_trap_IDs = intArrayOf( Scenery.RUNNER_TRAP1_20230, Scenery.BROKEN_TRAP0_20231 ) object BA_ARENA { val MAIN = 7509; val QUEEN = 7508; val all = listOf(MAIN, QUEEN) } //base.transform(0,0,0) - data class arenaItems(val id: Int,val x: Int, val y: Int, val z: Int) - val arenaItemSpawn: List = listOf( - arenaItems(Items.HAMMER_2347,32,42,0), - arenaItems(Items.LOGS_11760,30,46,0), - arenaItems(Items.LOGS_11760,29,47,0) - ) - - enum class EggCannonSide { WEST, EAST } - data class EggCannonLoc( val side: EggCannonSide, val x: Int, val y: Int, val z: Int, val direction: Direction ) - val eggCannons: List = listOf( - EggCannonLoc(EggCannonSide.WEST, 21, 34, 0, Direction.SOUTH), - EggCannonLoc(EggCannonSide.EAST, 40, 34, 0, Direction.SOUTH) ) - - override fun defineAreaBorders(): Array { - //block standard teleports. - BarbassaultTut.BarbassTutNPCs.forEach { - npc -> npc.init() - npc.isWalks = false - - } - BarbassaultTut.spawnItems() - return arrayOf(getRegionBorders(7509)) - } - override fun areaEnter(entity: Entity) { - //todo move tut maparea to barbtut - log(this::class.java, Log.FINE, "ENTERED BARBASS TUT") - } - - - override fun areaLeave(entity: Entity, logout: Boolean) { - //val player = entity as? Player ?: return - log(this::class.java, Log.FINE, "EXITED BARBASS TUT") - } override fun defineListeners() { //Wrong food message "That's the wrong type of poisoned food to use! Penalty!" @@ -198,12 +164,6 @@ class BarbassaultGameArea : InteractionListener, MapArea { sendMessage(player, "You can't remove that!") // is there a proper message for this? return@onUnequip false } - defineAreaBorders().forEach { border -> - if (border.insideBorder(player)) { - sendMessage(player, "You can't remove that!") // is there a proper message for this? - return@onUnequip false - } - } return@onUnequip true } @@ -212,22 +172,14 @@ class BarbassaultGameArea : InteractionListener, MapArea { sendMessage(player, "You can't remove that!") return@onEquip false } - defineAreaBorders().forEach { border -> - if (border.insideBorder(player)) { - sendMessage(player, "You can't remove that!") - // return@onUnequip false - } - } return@onEquip true } on(LureItems, IntType.GROUNDITEM, "Take") { player, node -> //if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id != DEFENDER_ICON) { return@on false } // only a defender can interact with lure food. val groundLureItem = findClosestLure(node.location) - if (groundLureItem == null) return@on true removeLure(groundLureItem) - return@on true } on(LureItems, IntType.ITEM, "Drop") { player, node -> @@ -246,6 +198,19 @@ class BarbassaultGameArea : InteractionListener, MapArea { //delete from ground as runner "eats" return@on true } + on(All_Eggs, IntType.GROUNDITEM, "Take") { player, node -> + if (node !is GroundItem) return@on true + + node.isActive = false + GroundItemManager.destroy(node) + val session = player.baSession ?: return@on true + session.BAgroundItems.remove(node) + + + addItemOrDrop(player, node.id) // no room, lets just redrop it, what COULD GO WRONG + + return@on true + } } fun playerChangeScenery(player: Player,anim: Int ,node: Node, newSceneryId: Int, pulseDelay: Int = 3, message: String = "") { @@ -253,7 +218,7 @@ class BarbassaultGameArea : InteractionListener, MapArea { player.animate(Animation(anim)) player.lock(pulseDelay) //if trap send message "You fixed the Penance Runner trap." - GameWorld.Pulser.submit(object : Pulse(pulseDelay, player) { + Pulser.submit(object : Pulse(pulseDelay, player) { override fun pulse(): Boolean { player.unlock() val scenryNode = node as core.game.node.scenery.Scenery diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index 43b0367d2..b069c6e4d 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -9,13 +9,15 @@ import content.minigame.barbassault.baSession import content.minigame.barbassault.getBarbLevels import content.minigame.barbassault.getBarbWave import content.minigame.barbassault.lobby.* +import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.waveLobbies import core.api.* import core.game.node.entity.Entity import core.game.node.entity.impl.PulseManager import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player -import core.game.node.item.GroundItem +import core.game.node.item.GroundItemManager import core.game.node.item.Item +import core.game.system.config.GroundSpawnLoader import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.GameWorld.Pulser @@ -34,6 +36,7 @@ import org.rs09.consts.NPCs enum class BarbassaultState { PARTY_CREATION, STARTING, IN_ARENA,FORFEIT, COMPLETE,DEATH, END } data class PenanceNpcTunnel(val type:PenanceType, val x: Int,val y: Int,val z: Int,val direction: Direction) { fun toLocation(): Location = Location(x, y, z) } +data class ArenaSpawnItems(val id: Int, val location: Location) class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutListener, MapArea { //constructor(region: DynamicRegion, activity: BarbassaultActivity) : this(activity) {this.region = region; this.base = region.baseLocation} @@ -43,15 +46,14 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi lateinit var team: BarbTeam var state: BarbassaultState = BarbassaultState.PARTY_CREATION + val sessionNpcs = mutableListOf() var currentNPCCount = SpawnCaps(0,0,0,0) - val npcTunnel: List = listOf( - PenanceNpcTunnel(PenanceType.RUNNER,42,46,0,Direction.SOUTH), - PenanceNpcTunnel(PenanceType.HEALER,36,47,0,Direction.SOUTH), - PenanceNpcTunnel(PenanceType.FIGHTER,24,47,0,Direction.SOUTH), - PenanceNpcTunnel(PenanceType.RANGER,18,46,0,Direction.SOUTH), - ) - val BAgroundItems = mutableListOf() + val npcTunnel: List = listOf( PenanceNpcTunnel(PenanceType.RUNNER,42,46,0,Direction.SOUTH), PenanceNpcTunnel(PenanceType.HEALER,36,47,0,Direction.SOUTH), PenanceNpcTunnel(PenanceType.FIGHTER,24,47,0,Direction.SOUTH), PenanceNpcTunnel(PenanceType.RANGER,18,46,0,Direction.SOUTH) ) + + val BAgroundItems = mutableListOf() + val arenaSpawnItems: List = listOf(ArenaSpawnItems(Items.HAMMER_2347,location(32,42,0)),ArenaSpawnItems(Items.LOGS_11760,location(30,46,0)),ArenaSpawnItems(Items.LOGS_11760,location(29,47,0))) + val eggHopper = EggCannon.EggHopper() var eggCannonNpcWest: NPC? = null var eggCannonNpcEast: NPC? = null @@ -92,6 +94,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi } Pulser.submit(GamePulse()) + tryGroundItemSpawn() } fun endSession() { @@ -184,11 +187,26 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi val npcId = npcIds[type] ?: return val spawn = npcTunnel.firstOrNull { it.type == type } ?: return - var thisNpc = sessionNPCSpawn(npcId, base.transform(30,31,0), spawn.direction) + var thisNpc = sessionNPCSpawn(npcId, location(30,31,0), spawn.direction) thisNpc?.location = base.transform(spawn.toLocation()) increment() } + fun tryGroundItemSpawn(){ + val leader = team.getLeader()?.player ?: return + val groundItems = GroundItemManager.getItems() + + arenaSpawnItems.forEach { spawnItem -> + val spawnLoc = spawnItem.location + val alreadyExists = groundItems.any { it.id == spawnItem.id && it.location == spawnLoc && !it.isRemoved } + if (!alreadyExists) { + val thisGroundItem = produceGroundSpawnItem(6,Item(spawnItem.id, 1),spawnLoc) //produceGroundItem(leader, spawnItem.id, 1, spawnLoc).apply { + sendMessage(leader, "spawned item: $spawnLoc") + } + } + } + + fun forfeit(){ state = BarbassaultState.FORFEIT } fun isInBarbAssaultGame() = state == BarbassaultState.IN_ARENA @@ -215,27 +233,25 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi BarbTeamManager.updateTeam(player.baSession?.team!!) } } + //MAIN GAME LOOP private inner class GamePulse : Pulse(1) { - private var roleCallTicks = secondsToTicks(30) - private var waveSpawnTicks = secondsToTicks(6) + private val baseCallTicks = secondsToTicks(30) + private var roleCallTicks = baseCallTicks + + private var baseSpawnTicks = secondsToTicks(6) + private var waveSpawnTicks = baseSpawnTicks + private var groundSpawnTicks = baseSpawnTicks override fun pulse(): Boolean { - //log(this.javaClass, Log.FINE,state.toString()) when(state){ BarbassaultState.IN_ARENA -> { - eventBus.processEvents() // process events such as npc died to scoring + eventBus.processEvents() + roleCallTicks--; waveSpawnTicks--; groundSpawnTicks-- + if (roleCallTicks <= 0) { rollNewRoleCalls(); roleCallTicks = baseCallTicks } + if (waveSpawnTicks <= 0 ){ spawnNpcWave(); waveSpawnTicks = baseSpawnTicks } + - roleCallTicks-- - waveSpawnTicks-- - if (roleCallTicks <= 0) { - rollNewRoleCalls() - roleCallTicks = secondsToTicks(30) - } - if (waveSpawnTicks <= 0 ){ - spawnNpcWave() - waveSpawnTicks = secondsToTicks(6) - } } - BarbassaultState.FORFEIT -> {endGame("left"); return true} + BarbassaultState.FORFEIT -> { endGame("left"); return true } BarbassaultState.COMPLETE -> { log(this.javaClass, Log.FINE,state.toString()) BarbassaultLobby.TeamToLobby(team,team.wave+1) @@ -257,7 +273,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi } private fun createArena() { - region = DynamicRegion.create(BarbassaultGameArea.BA_ARENA.MAIN) + region = DynamicRegion.create(BarbassaultArenaListener.BA_ARENA.MAIN) base = region.baseLocation zone.zoneType = ZoneType.SAFE.id region.regionZones.add(RegionZone(activity!!, region.borders)) //DONT FORGET THIS STUPID! @@ -283,7 +299,8 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi team.removePlayer(player) player.locks.unlockTeleport() - player.location = Location.create(2593, 5264, 0) + player.location = waveLobbies[team.wave].randomWalkableLoc + //player.location = Location.create(2593, 5264, 0) if (team.allPlayers().isEmpty()) { // might be redundant player.properties.teleportLocation = Location.create(2593, 5264, 0) @@ -331,11 +348,17 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi destroyArena() } fun sessionNPCSpawn(id: Int, location: Location, direction: Direction, vararg objects: Any): NPC? { - val npc = NPC.create(id, location, direction, *objects) + val npc = NPC.create(id, base.transform(location), direction, *objects) npc.init() sessionNpcs.add(npc) return npc } + fun produceGroundSpawnItem(rate:Int,item: Item,location: Location): SessionGroundSpawn { + val thisGroundItem = SessionGroundSpawn(this,rate,item,location) + thisGroundItem.init() + return thisGroundItem + } + fun spawnEggCannons() { eggCannonNpcWest = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(21, 34, 0), Direction.NORTH ) //eggCannonNpcWest?. @@ -343,8 +366,16 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi eggCannonNpcEast = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(40, 34, 0), Direction.NORTH ) } - private fun clearGroundItems(){ + fun clearGroundItems(){ //BAgroundItems + //thisGroundItem.isActive = false + BAgroundItems.forEach { item -> + item.isActive = false + item.setRespawnRate(-1) + item.isAutoSpawn = false + GroundItemManager.destroy(item) + } + } private fun giveRoleItems(player: Player, role: BarbRole) { diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt index 0d1b63129..d44ede145 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt @@ -3,28 +3,28 @@ package content.minigame.barbassault.arena.Npcs import content.minigame.barbassault.baSession import core.api.produceGroundItem +import core.api.sendMessage import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player +import core.game.node.item.Item import core.game.world.map.RegionManager import org.rs09.consts.Items fun dropPenanceEggCluster(killer: Player, npc: NPC? = null) { val center = npc?.dropLocation ?: killer.location + val session = killer.baSession ?: return val tiles = center.get3x3Tiles().shuffled() val eggs = listOf( Items.RED_EGG_10532, Items.RED_EGG_10532, - Items.BLUE_EGG_10533, Items.BLUE_EGG_10533, - Items.GREEN_EGG_10531, Items.GREEN_EGG_10531) + Items.BLUE_EGG_10533, Items.BLUE_EGG_10533, + Items.GREEN_EGG_10531, Items.GREEN_EGG_10531) for (i in eggs.indices) { val tile = tiles[i] - val egg = produceGroundItem(killer, eggs[i], 1, tile).apply { - //todo Find way to make eggs not decay and visible to all - decayTime = 100 - forceVisible = true - isRemainPrivate = false - } - killer.baSession?.BAgroundItems?.add(egg) + val thisGroundItem = session.produceGroundSpawnItem(60,Item(eggs[i],1),tile) + thisGroundItem.init() + sendMessage(killer, tile.toString()) + } } diff --git a/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt b/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt new file mode 100644 index 000000000..384ae9352 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt @@ -0,0 +1,60 @@ +package content.minigame.barbassault.arena +import core.game.node.item.GroundItem +import core.game.node.item.GroundItemManager +import core.game.system.task.Pulse +import core.game.node.item.Item +import core.game.world.GameWorld + +import core.game.world.map.Location + +class SessionGroundSpawn(private var session: BarbassaultSession, private var respawnRate: Int, item: Item?,location: Location?) : GroundItem(item, session.base.transform(location)) { + private var active = true + private var autoSpawn = true + + override fun toString(): String { + return "SessionGroundSpawn [name=$name, respawnRate=$respawnRate, loc=$location]" + } + + fun init(): GroundItem { + session.BAgroundItems.add(this) + return GroundItemManager.create(this) + } + + override fun isActive(): Boolean { + return active + } + + override fun setActive(value: Boolean) { + active = value + } + + override fun isPrivate(): Boolean { + return false + } + + override fun isAutoSpawn(): Boolean { + return autoSpawn + } + + fun setAutoSpawn(value: Boolean) { + autoSpawn = value + } + + override fun respawn() { + if (!autoSpawn || respawnRate < 0) { + return + } + GameWorld.Pulser.submit(object : Pulse(respawnRate) { + override fun pulse(): Boolean { + val thisGroundItem = GroundItemManager.create(this@SessionGroundSpawn) + return true + } + }) + } + + fun setRespawnRate(rate: Int) { + respawnRate = rate + } + + +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt index 5165b4b26..fb31446a6 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -30,6 +30,8 @@ import org.rs09.consts.NPCs // half -> EGG_HOPPER_20265 // full -> EGG_HOPPER_20266 //varbit 3268 +val All_Eggs = intArrayOf(Items.GREEN_EGG_10531,Items.RED_EGG_10532,Items.BLUE_EGG_10533) + @Initializable class EggCannon : ComponentPlugin() { From 8e28316763f8807d46cf9aa5039506a2b831fdaa Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 20 May 2026 00:09:38 -0400 Subject: [PATCH 078/123] Session ground mananger finshed Take_eggs for collector started. --- .../arena/BarbassaultArenaListener.kt | 24 ++++++++++--------- .../barbassault/arena/BarbassaultSession.kt | 5 ++-- .../barbassault/arena/Npcs/PenanceHelper.kt | 3 ++- .../barbassault/arena/SessionGroundSpawn.kt | 4 ++-- .../barbassault/arena/scenery/EggCannon.kt | 1 - 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultArenaListener.kt index 26c9df496..b39af4f43 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultArenaListener.kt @@ -3,7 +3,6 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BaHornSystem.HornHelper.getHealerHorn import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle -import content.minigame.barbassault.arena.scenery.All_Eggs import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadEggHopper import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadHopperEggs @@ -30,7 +29,6 @@ import core.game.world.GameWorld.Pulser import core.game.world.map.Direction import core.game.world.map.Location import core.game.world.update.flag.context.Animation -import core.game.worldevents.holiday.easter.EasterEvent.Companion.BUN_EARS import org.rs09.consts.Items import org.rs09.consts.Scenery @@ -198,17 +196,21 @@ class BarbassaultArenaListener : InteractionListener { //delete from ground as runner "eats" return@on true } - on(All_Eggs, IntType.GROUNDITEM, "Take") { player, node -> + on(EggCannon.ALL_EGGS, IntType.GROUNDITEM, "Take") { player, node -> if (node !is GroundItem) return@on true - - node.isActive = false - GroundItemManager.destroy(node) val session = player.baSession ?: return@on true - session.BAgroundItems.remove(node) - - - addItemOrDrop(player, node.id) // no room, lets just redrop it, what COULD GO WRONG - + if (session.team.getRoleForPlayer(player) != BarbRole.COLLECTOR) { + sendMessage(player,"not a collector") + } + if (!player.inventory.add(node)) { + node.isActive = false + (node as SessionGroundSpawn).isAutoSpawn = false + session.BAgroundItems.remove(node) + GroundItemManager.destroy(node) + return@on true + } + //todo find correct message + sendMessage(player,"You can not pick up any more EGGGS!") return@on true } } diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index b069c6e4d..c85076ee7 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -201,7 +201,8 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi val alreadyExists = groundItems.any { it.id == spawnItem.id && it.location == spawnLoc && !it.isRemoved } if (!alreadyExists) { val thisGroundItem = produceGroundSpawnItem(6,Item(spawnItem.id, 1),spawnLoc) //produceGroundItem(leader, spawnItem.id, 1, spawnLoc).apply { - sendMessage(leader, "spawned item: $spawnLoc") + //sendMessage(leader, "spawned item: $spawnLoc") + BAgroundItems.add(thisGroundItem) } } } @@ -354,7 +355,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi return npc } fun produceGroundSpawnItem(rate:Int,item: Item,location: Location): SessionGroundSpawn { - val thisGroundItem = SessionGroundSpawn(this,rate,item,location) + val thisGroundItem = SessionGroundSpawn(this,rate,item,base.transform(location)) thisGroundItem.init() return thisGroundItem } diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt index d44ede145..143d482ac 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt @@ -1,6 +1,7 @@ package content.minigame.barbassault.arena.Npcs +import content.minigame.barbassault.arena.SessionGroundSpawn import content.minigame.barbassault.baSession import core.api.produceGroundItem import core.api.sendMessage @@ -21,7 +22,7 @@ fun dropPenanceEggCluster(killer: Player, npc: NPC? = null) { for (i in eggs.indices) { val tile = tiles[i] - val thisGroundItem = session.produceGroundSpawnItem(60,Item(eggs[i],1),tile) + val thisGroundItem = SessionGroundSpawn(session,60,Item(eggs[i],1),tile) thisGroundItem.init() sendMessage(killer, tile.toString()) diff --git a/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt b/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt index 384ae9352..e5e24de1b 100644 --- a/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt +++ b/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt @@ -7,7 +7,7 @@ import core.game.world.GameWorld import core.game.world.map.Location -class SessionGroundSpawn(private var session: BarbassaultSession, private var respawnRate: Int, item: Item?,location: Location?) : GroundItem(item, session.base.transform(location)) { +class SessionGroundSpawn(private var session: BarbassaultSession, private var respawnRate: Int, item: Item?,location: Location?) : GroundItem(item, location) { private var active = true private var autoSpawn = true @@ -46,7 +46,7 @@ class SessionGroundSpawn(private var session: BarbassaultSession, private var re } GameWorld.Pulser.submit(object : Pulse(respawnRate) { override fun pulse(): Boolean { - val thisGroundItem = GroundItemManager.create(this@SessionGroundSpawn) + GroundItemManager.create(this@SessionGroundSpawn) return true } }) diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt index fb31446a6..82bb88387 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -30,7 +30,6 @@ import org.rs09.consts.NPCs // half -> EGG_HOPPER_20265 // full -> EGG_HOPPER_20266 //varbit 3268 -val All_Eggs = intArrayOf(Items.GREEN_EGG_10531,Items.RED_EGG_10532,Items.BLUE_EGG_10533) @Initializable class EggCannon : ComponentPlugin() { From 08cbf43ad015382cce97c05f3123f666bb56f050 Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 20 May 2026 11:23:43 -0400 Subject: [PATCH 079/123] Lureitem logic in to basession Runners seek BAgroundItems. more session ground handling stuffssss --- .../minigame/barbassault/Barbassault.kt | 1 + .../BarbassaultPlayerExtensions.kt | 2 +- .../arena/BarbassaultArenaListener.kt | 33 ++++++----------- .../barbassault/arena/BarbassaultSession.kt | 25 +++++++++++++ .../minigame/barbassault/arena/LureItems.kt | 35 ------------------- .../arena/Npcs/PenanceRunnerNPC.kt | 30 +++++++++------- .../barbassault/arena/SessionGroundSpawn.kt | 3 +- 7 files changed, 57 insertions(+), 72 deletions(-) delete mode 100644 Server/src/main/content/minigame/barbassault/arena/LureItems.kt diff --git a/Server/src/main/content/minigame/barbassault/Barbassault.kt b/Server/src/main/content/minigame/barbassault/Barbassault.kt index 55ef821aa..296b75dad 100644 --- a/Server/src/main/content/minigame/barbassault/Barbassault.kt +++ b/Server/src/main/content/minigame/barbassault/Barbassault.kt @@ -7,6 +7,7 @@ import content.minigame.barbassault.arena.HEALER_ICON import core.game.node.item.Item import org.rs09.consts.Items +val LureItems = intArrayOf(Items.WORMS_10515, Items.CRACKERS_10513, Items.TOFU_10514) enum class BarbRole { ATTACKER, COLLECTOR,DEFENDER, HEALER } data class BarbAssaultPoints( val atk: Int = 0, val col: Int = 0, val def: Int = 0, val heal: Int = 0) { val total: Int get() = atk + col + def + heal diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt b/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt index 051e1fe02..3ac4576ae 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt +++ b/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt @@ -3,7 +3,7 @@ package content.minigame.barbassault import content.minigame.barbassault.arena.BarbassaultSession import core.game.node.entity.player.Player -private const val BA_SESSION_KEY = "ba-session" +const val BA_SESSION_KEY = "ba-session" /** * Gets or sets the player's current Barbarian Assault session. * diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultArenaListener.kt index b39af4f43..3f77ba9d6 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultArenaListener.kt @@ -1,6 +1,7 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.LureItems import content.minigame.barbassault.arena.BaHornSystem.HornHelper.getHealerHorn import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle import content.minigame.barbassault.arena.scenery.EggCannon @@ -173,26 +174,21 @@ class BarbassaultArenaListener : InteractionListener { return@onEquip true } on(LureItems, IntType.GROUNDITEM, "Take") { player, node -> - //if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id != DEFENDER_ICON) { return@on false } - // only a defender can interact with lure food. - val groundLureItem = findClosestLure(node.location) - if (groundLureItem == null) return@on true - removeLure(groundLureItem) + val session = player.baSession ?: return@on true + if (session.team.getRoleForPlayer(player) != BarbRole.DEFENDER) { + sendMessage(player,"not a Defender") + } + session.pickUpGroundItem(player, node as GroundItem) return@on true } on(LureItems, IntType.ITEM, "Drop") { player, node -> - val dropedItem = node as Item DropListener.drop(player, node.asItem()) - sendMessage(player,dropedItem.name) - //addItemNode(dropedItem,player.location,true) - + val session = player.baSession ?: return@on true val gItem = player.getAttribute("droppedItem:${node.id}") - addItemNode(gItem,player.location,true) - //DropListener.drop(player, dropedItem) - //with values for good and bad. - //structure table with intent of being looped trough by a runner to check distance, compared to it. - //and to check if its good or bad when they get to that one. + (gItem as SessionGroundSpawn).flag = true + session.BAgroundItems.add(gItem) + //delete from ground as runner "eats" return@on true } @@ -202,15 +198,8 @@ class BarbassaultArenaListener : InteractionListener { if (session.team.getRoleForPlayer(player) != BarbRole.COLLECTOR) { sendMessage(player,"not a collector") } - if (!player.inventory.add(node)) { - node.isActive = false - (node as SessionGroundSpawn).isAutoSpawn = false - session.BAgroundItems.remove(node) - GroundItemManager.destroy(node) - return@on true - } + session.pickUpGroundItem(player,node) //todo find correct message - sendMessage(player,"You can not pick up any more EGGGS!") return@on true } } diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt index c85076ee7..129532cfb 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt @@ -1,8 +1,10 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.ALL_BARBASS_ITEMS +import content.minigame.barbassault.BA_SESSION_KEY import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BarbassaultActivity +import content.minigame.barbassault.LureItems import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.GloryHorn import content.minigame.barbassault.baSession @@ -15,6 +17,7 @@ import core.game.node.entity.Entity import core.game.node.entity.impl.PulseManager import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player +import core.game.node.item.GroundItem import core.game.node.item.GroundItemManager import core.game.node.item.Item import core.game.system.config.GroundSpawnLoader @@ -189,6 +192,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi var thisNpc = sessionNPCSpawn(npcId, location(30,31,0), spawn.direction) thisNpc?.location = base.transform(spawn.toLocation()) + thisNpc?.setAttribute(BA_SESSION_KEY, this) increment() } @@ -207,6 +211,27 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi } } + fun pickUpGroundItem(player: Player,node:GroundItem){ + if (!player.inventory.add(node)) { + node.isActive = false + (node as SessionGroundSpawn).isAutoSpawn = false + BAgroundItems.remove(node) + removeGroundItem(node) + return + } + sendMessage(player,"You don't have enough inventory space to hold that item.") + } + fun findClosestLure(target: Location): SessionGroundSpawn? { + return BAgroundItems + .asSequence() + .filter { it.id in LureItems } + .minByOrNull { node -> + val dx = node.location.x - target.x + val dy = node.location.y - target.y + Math.abs(dx) + Math.abs(dy) + } + } + fun forfeit(){ state = BarbassaultState.FORFEIT } diff --git a/Server/src/main/content/minigame/barbassault/arena/LureItems.kt b/Server/src/main/content/minigame/barbassault/arena/LureItems.kt deleted file mode 100644 index 7dd1bdd98..000000000 --- a/Server/src/main/content/minigame/barbassault/arena/LureItems.kt +++ /dev/null @@ -1,35 +0,0 @@ -package content.minigame.barbassault.arena - -import core.game.node.Node -import core.game.node.item.GroundItem -import core.game.node.item.Item -import core.game.world.map.Location -import org.rs09.consts.Items - - -data class LureItem(val item: Node, val location: Location, val isGood: Boolean) - -val LureItems = intArrayOf(Items.WORMS_10515, Items.CRACKERS_10513, Items.TOFU_10514) -val LureItemNodes = mutableListOf() - -//todo make this part of miniGame instance instead of global. - -fun addItemNode(item: GroundItem, location: Location, isGood: Boolean) { - LureItemNodes.add(LureItem(item, location, isGood)) -} - -fun findClosestLure(target: Location): LureItem? { - return LureItemNodes.minByOrNull { node -> - val dx = node.location.x - target.x - val dy = node.location.y - target.y - Math.abs(dx) + Math.abs(dy) - } -} - -fun removeLure(lure: LureItem) { - LureItemNodes.remove(lure) -} - -fun removeLureAtLocation(item: Item, location: Location): Boolean { - return LureItemNodes.removeIf { it.item == item && it.location == location } -} diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt index 159f4d65c..4551dc379 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt @@ -1,5 +1,6 @@ package content.minigame.barbassault.arena.Npcs +import content.minigame.barbassault.BA_SESSION_KEY import content.minigame.barbassault.BarbRole import core.game.node.entity.Entity import core.game.node.entity.npc.NPC @@ -44,22 +45,27 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { } override fun tick(self: NPC): Boolean { - val gotohere = findClosestLure(self.location) - if (gotohere != null) { - forceWalk(self,gotohere.location ,"DUMB") - if (self.location == gotohere.location) { - sendChat(self,if (gotohere.isGood) GOOD_EAT else BAD_EAT) - removeGroundItem(gotohere.item as GroundItem) - //GroundItemManager.destroy(gotohere.item) - removeLure(gotohere) - self.resetWalk() - } - } + val session = self.getAttribute(BA_SESSION_KEY) + if (session == null) return false + seekFood(self,session) return true } + fun seekFood(self:NPC,session: BarbassaultSession) { + val groundItem = session.findClosestLure(self.location) + if (groundItem != null) { + forceWalk(self,groundItem.location ,"DUMB") + if (self.location == groundItem.location) { + sendChat(self,if (groundItem.flag == true) GOOD_EAT else BAD_EAT) + removeGroundItem(groundItem) + self.resetWalk() + } + } + return + } - fun seekFood(){ + fun nosyTowardPlayers(self: NPC,session: BarbassaultSession) { + return } override fun onDeathFinished(self: NPC, killer: Entity) { diff --git a/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt b/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt index e5e24de1b..ae2b97be5 100644 --- a/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt +++ b/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt @@ -6,8 +6,7 @@ import core.game.node.item.Item import core.game.world.GameWorld import core.game.world.map.Location - -class SessionGroundSpawn(private var session: BarbassaultSession, private var respawnRate: Int, item: Item?,location: Location?) : GroundItem(item, location) { +class SessionGroundSpawn(private var session: BarbassaultSession, private var respawnRate: Int, item: Item?,location: Location?,var flag: Boolean? = null) : GroundItem(item, location) { private var active = true private var autoSpawn = true From 85fb2fec6338c02363893eb7f581d38e9537e945 Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 20 May 2026 20:46:08 -0400 Subject: [PATCH 080/123] Removed BarbassaultPlayerExtensions.kt Added BAUtils.kt Naming to be more consistent Thank you Ceikry! --- .../{BarbassBlackBoard.kt => BABlackBoard.kt} | 6 +- .../{BarbassDevHelper.kt => BADevHelper.kt} | 25 ++- ...BarbassaultListeners.kt => BAListeners.kt} | 2 +- ...ewardInterface.kt => BARewardInterface.kt} | 20 +-- .../{BarbassaultTut.kt => BATutorial.kt} | 2 +- ...bassaultPlayerExtensions.kt => BAUtils.kt} | 165 +++++++++--------- .../{Barbassault.kt => BarbAssault.kt} | 0 .../minigame/barbassault/CommanderConnad.kt | 8 +- .../{BarbassaultActivity.kt => BAActivity.kt} | 18 +- ...ultArenaListener.kt => BAArenaListener.kt} | 34 ++-- .../arena/{BarbassEvent.kt => BAEvent.kt} | 0 .../{BaHornSystem.kt => BAHornSystem.kt} | 20 +-- ...{BarbScoreManager.kt => BAScoreManager.kt} | 0 .../{BarbassaultSession.kt => BASession.kt} | 28 +-- .../barbassault/arena/HealerInterface.kt | 8 +- .../barbassault/arena/SessionGroundSpawn.kt | 5 +- .../arena/{Npcs => npcs}/EggCannonNPC.kt | 2 +- .../arena/{Npcs => npcs}/PenanceFighterNPC.kt | 9 +- .../arena/{Npcs => npcs}/PenanceHealerNPC.kt | 6 +- .../arena/{Npcs => npcs}/PenanceHelper.kt | 18 +- .../arena/{Npcs => npcs}/PenanceQueenNPC.kt | 2 +- .../arena/{Npcs => npcs}/PenanceRangerNPC.kt | 6 +- .../arena/{Npcs => npcs}/PenanceRunnerNPC.kt | 8 +- .../arena/{Npcs => npcs}/PenanceSpawnNPC.kt | 2 +- .../barbassault/arena/scenery/DefenderTrap.kt | 2 +- .../barbassault/arena/scenery/EggCannon.kt | 39 +++-- .../barbassault/arena/scenery/HornOfGlory.kt | 6 +- .../barbassault/arena/scenery/ItemMachine.kt | 4 +- .../bots/{BarbassBot.kt => BABot.kt} | 15 +- .../barbassault/bots/BACombatState.kt | 6 +- .../barbassault/lobby/AcceptRoleInterface.kt | 26 +-- .../lobby/{BarbassaultLobby.kt => BALobby.kt} | 28 +-- ...WaveActivity.kt => BAQuickWaveActivity.kt} | 7 +- .../lobby/{BarbTeam.kt => BATeam.kt} | 27 +-- .../barbassault/lobby/CurrentTeamInterface.kt | 4 +- .../barbassault/lobby/RoleSelectInterface.kt | 13 +- 36 files changed, 291 insertions(+), 280 deletions(-) rename Server/src/main/content/minigame/barbassault/{BarbassBlackBoard.kt => BABlackBoard.kt} (95%) rename Server/src/main/content/minigame/barbassault/{BarbassDevHelper.kt => BADevHelper.kt} (90%) rename Server/src/main/content/minigame/barbassault/{BarbassaultListeners.kt => BAListeners.kt} (98%) rename Server/src/main/content/minigame/barbassault/{BarbRewardInterface.kt => BARewardInterface.kt} (96%) rename Server/src/main/content/minigame/barbassault/{BarbassaultTut.kt => BATutorial.kt} (98%) rename Server/src/main/content/minigame/barbassault/{BarbassaultPlayerExtensions.kt => BAUtils.kt} (50%) rename Server/src/main/content/minigame/barbassault/{Barbassault.kt => BarbAssault.kt} (100%) rename Server/src/main/content/minigame/barbassault/arena/{BarbassaultActivity.kt => BAActivity.kt} (80%) rename Server/src/main/content/minigame/barbassault/arena/{BarbassaultArenaListener.kt => BAArenaListener.kt} (93%) rename Server/src/main/content/minigame/barbassault/arena/{BarbassEvent.kt => BAEvent.kt} (100%) rename Server/src/main/content/minigame/barbassault/arena/{BaHornSystem.kt => BAHornSystem.kt} (90%) rename Server/src/main/content/minigame/barbassault/arena/{BarbScoreManager.kt => BAScoreManager.kt} (100%) rename Server/src/main/content/minigame/barbassault/arena/{BarbassaultSession.kt => BASession.kt} (96%) rename Server/src/main/content/minigame/barbassault/arena/{Npcs => npcs}/EggCannonNPC.kt (95%) rename Server/src/main/content/minigame/barbassault/arena/{Npcs => npcs}/PenanceFighterNPC.kt (91%) rename Server/src/main/content/minigame/barbassault/arena/{Npcs => npcs}/PenanceHealerNPC.kt (92%) rename Server/src/main/content/minigame/barbassault/arena/{Npcs => npcs}/PenanceHelper.kt (88%) rename Server/src/main/content/minigame/barbassault/arena/{Npcs => npcs}/PenanceQueenNPC.kt (94%) rename Server/src/main/content/minigame/barbassault/arena/{Npcs => npcs}/PenanceRangerNPC.kt (94%) rename Server/src/main/content/minigame/barbassault/arena/{Npcs => npcs}/PenanceRunnerNPC.kt (93%) rename Server/src/main/content/minigame/barbassault/arena/{Npcs => npcs}/PenanceSpawnNPC.kt (86%) rename Server/src/main/content/minigame/barbassault/bots/{BarbassBot.kt => BABot.kt} (90%) rename Server/src/main/content/minigame/barbassault/lobby/{BarbassaultLobby.kt => BALobby.kt} (95%) rename Server/src/main/content/minigame/barbassault/lobby/{BarbassQuickWaveActivity.kt => BAQuickWaveActivity.kt} (97%) rename Server/src/main/content/minigame/barbassault/lobby/{BarbTeam.kt => BATeam.kt} (89%) diff --git a/Server/src/main/content/minigame/barbassault/BarbassBlackBoard.kt b/Server/src/main/content/minigame/barbassault/BABlackBoard.kt similarity index 95% rename from Server/src/main/content/minigame/barbassault/BarbassBlackBoard.kt rename to Server/src/main/content/minigame/barbassault/BABlackBoard.kt index fad979e56..75c84ac0e 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassBlackBoard.kt +++ b/Server/src/main/content/minigame/barbassault/BABlackBoard.kt @@ -98,10 +98,10 @@ class BarbassBlackBoard { fun updateBlackBoard(player: Player) { player.interfaceManager.open(Component(Components.BARBASSAULT_PLAYERSTAT_490)) setInterfaceText(player, player.username, Components.BARBASSAULT_PLAYERSTAT_490, PLAYER_NAME) - setInterfaceText(player, player.getBarbWave().toString(), Components.BARBASSAULT_PLAYERSTAT_490, CURRENT_WAVE) + setInterfaceText(player, getBAWave(player).toString(), Components.BARBASSAULT_PLAYERSTAT_490, CURRENT_WAVE) - val playerLevel = player.getBarbLevels() - val playerPoints = player.getBarbPoints() + val playerLevel = getBALevels(player) + val playerPoints = getBAPoints(player) for (role in BarbRole.values()) { val level = when (role) { diff --git a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt b/Server/src/main/content/minigame/barbassault/BADevHelper.kt similarity index 90% rename from Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt rename to Server/src/main/content/minigame/barbassault/BADevHelper.kt index f80ad4c71..6311312ea 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassDevHelper.kt +++ b/Server/src/main/content/minigame/barbassault/BADevHelper.kt @@ -1,8 +1,7 @@ package content.minigame.barbassault -import content.minigame.barbassault.arena.Npcs.dropPenanceEggCluster -import content.minigame.barbassault.bots.BarbassBot -import content.minigame.barbassault.lobby.BarbassaultLobby +import content.minigame.barbassault.bots.BABot +import content.minigame.barbassault.lobby.BALobby import core.api.* import core.game.node.item.Item import core.game.system.command.Privilege @@ -13,25 +12,25 @@ import org.rs09.consts.Items import org.rs09.consts.Scenery @Initializable -class BarbassDevHelper : CommandSet(Privilege.ADMIN) { +class BADevHelper : CommandSet(Privilege.ADMIN) { var babotcount = 0 override fun defineCommands() { define ("maxbarbpoints") { player,_ -> - player.addBarbPoints(BarbAssaultPoints(500, 500, 500,500)) + addBAPoints(player,BarbAssaultPoints(500, 500, 500,500)) return@define } define ("setbarbwave") { player,args -> - player.setBarbWave(args[1].toInt()) + setBAWave(player,args[1].toInt()) return@define } define ("resetbarbpoints") { player,_ -> - player.setBarbPoints(BarbAssaultPoints(0, 0, 0,0)) + setBAPoints(player,BarbAssaultPoints(0, 0, 0,0)) return@define } define ("resetbarblevels") { player,_ -> - player.setBarbLevels(BarbAssaultLevels(0, 0, 0,0)) + setBALevels(player,BarbAssaultLevels(0, 0, 0,0)) return@define } define("barbgame"){ player,_-> @@ -48,27 +47,27 @@ class BarbassDevHelper : CommandSet(Privilege.ADMIN) { return@define } define("eggloot"){ player,_-> - dropPenanceEggCluster(player) + content.minigame.barbassault.arena.npcs.dropPenanceEggCluster(player) return@define } define("cleanfloor"){ player,_-> - val session = player.baSession ?: return@define + val session = getBASession(player) ?: return@define session.clearGroundItems() return@define } define("spawnwave"){ player,_-> - player.baSession?.spawnNpcWave() + getBASession(player)?.spawnNpcWave() return@define } define("spawnwaveforce"){ player,_-> - player.baSession?.spawnNpcWave(true) + getBASession(player)?.spawnNpcWave(true) return@define } define("babot"){ player,_-> if (babotcount >= 25) { sendMessage(player, "25 is max amount of BA bots allowed") }else { - BarbassBot(BarbassaultLobby.MAIN_LOBBY.randomWalkableLoc) + BABot(BALobby.MAIN_LOBBY.randomWalkableLoc) babotcount++ } return@define diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt b/Server/src/main/content/minigame/barbassault/BAListeners.kt similarity index 98% rename from Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt rename to Server/src/main/content/minigame/barbassault/BAListeners.kt index 5466f4ef5..bf6c2fbea 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassaultListeners.kt +++ b/Server/src/main/content/minigame/barbassault/BAListeners.kt @@ -14,7 +14,7 @@ import org.rs09.consts.Items import org.rs09.consts.NPCs import org.rs09.consts.Scenery -class BarbassaultListeners : InteractionListener { +class BAListeners : InteractionListener { override fun defineListeners() { // addClimbDest(Location.create(2593, 5261, 0),Location.create(2593, 5261, 0)) diff --git a/Server/src/main/content/minigame/barbassault/BarbRewardInterface.kt b/Server/src/main/content/minigame/barbassault/BARewardInterface.kt similarity index 96% rename from Server/src/main/content/minigame/barbassault/BarbRewardInterface.kt rename to Server/src/main/content/minigame/barbassault/BARewardInterface.kt index c624a1693..3173ba4c5 100644 --- a/Server/src/main/content/minigame/barbassault/BarbRewardInterface.kt +++ b/Server/src/main/content/minigame/barbassault/BARewardInterface.kt @@ -47,7 +47,7 @@ fun updateRewardButtons(player: Player, selected: Int = -1) { interfaceUpdate(player,selected) //points @ bottom - val playerPoints = player.getBarbPoints() + val playerPoints = getBAPoints(player) setInterfaceText(player, playerPoints.atk.toString(), 491, 219) setInterfaceText(player, playerPoints.def.toString(), 491, 220) setInterfaceText(player, playerPoints.col.toString(), 491, 221) @@ -62,7 +62,7 @@ fun acceptReward(player:Player, selected :Int){ when { reward.item != null -> { addItem(player, reward.item, 1) } // reward.gamble != null -> { } - reward.levelUp != null -> { player.increaseBarbRoleLevel(reward.levelUp) } + reward.levelUp != null -> { increaseBARoleLevel(player,reward.levelUp) } } removeCost(player, reward) updateRewardButtons(player) @@ -77,8 +77,8 @@ fun rollGambleReward(tier: GambleTier): Item { } fun interfaceUpdate(player: Player, selected: Int) { - val playerLevels = player.getBarbLevels() - val hasQueenKill = player.hasQueenKill() + val playerLevels = getBALevels(player) + val hasQueenKill = hasQueenKill(player) barbRewardShop.forEach { reward -> val isSelected = reward.buttonChildId == selected val canBuy = canBuyReward(player, reward) @@ -109,9 +109,9 @@ fun interfaceUpdate(player: Player, selected: Int) { } fun canBuyReward(player: Player, reward: RewardRow, buying: Boolean = false): Boolean { - val points = player.getBarbPoints() - val hasQueenKill = player.hasQueenKill() - val barbLevels = player.getBarbLevels() + val points = getBAPoints(player) + val hasQueenKill = hasQueenKill(player) + val barbLevels = getBALevels(player) val resolvedCost = reward.cost.resolve(barbLevels) fun requireQueenKill(base: Boolean): Boolean { @@ -149,20 +149,20 @@ fun isBarbRewardMaxed(reward: RewardRow, barbLevels: BarbAssaultLevels): Boolean } } fun removeCost(player: Player, reward: RewardRow) { - val barbLevels = player.getBarbLevels() + val barbLevels = getBALevels(player) val resolvedCost = reward.cost.resolve(barbLevels) when (resolvedCost) { is RewardCost.AllRoles -> { if (reward.queenKillText != null) { setAttribute(player,"barbass:queen-kill", 0)} - player.removeBarbPoints(BarbAssaultPoints(resolvedCost.amountPerRole, resolvedCost.amountPerRole, resolvedCost.amountPerRole, resolvedCost.amountPerRole)) + removeBAPoints(player,BarbAssaultPoints(resolvedCost.amountPerRole, resolvedCost.amountPerRole, resolvedCost.amountPerRole, resolvedCost.amountPerRole)) } is RewardCost.AnyRole -> { closeInterface(player);gambleDialogReward(player,resolvedCost.minimum) } //player.removeBarbPoints(BarbAssaultPoints(cost.minimum, cost.minimum, cost.minimum, cost.minimum)) is RewardCost.Coins -> { if (reward.queenKillText != null) { setAttribute(player,"barbass:queen-kill", 0)} removeItem(player, Item(Items.COINS_995, resolvedCost.amount), Container.INVENTORY) } - is RewardCost.Specific -> player.removeBarbPoints(resolvedCost.required) + is RewardCost.Specific -> removeBAPoints(player,resolvedCost.required) else -> return } } diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultTut.kt b/Server/src/main/content/minigame/barbassault/BATutorial.kt similarity index 98% rename from Server/src/main/content/minigame/barbassault/BarbassaultTut.kt rename to Server/src/main/content/minigame/barbassault/BATutorial.kt index 943388af1..74deef912 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassaultTut.kt +++ b/Server/src/main/content/minigame/barbassault/BATutorial.kt @@ -15,7 +15,7 @@ import org.rs09.consts.Items import org.rs09.consts.NPCs -class BarbassaultTut: MapArea { +class BATutorial: MapArea { override fun defineAreaBorders(): Array { //block standard teleports. diff --git a/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt b/Server/src/main/content/minigame/barbassault/BAUtils.kt similarity index 50% rename from Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt rename to Server/src/main/content/minigame/barbassault/BAUtils.kt index 3ac4576ae..d98e5d866 100644 --- a/Server/src/main/content/minigame/barbassault/BarbassaultPlayerExtensions.kt +++ b/Server/src/main/content/minigame/barbassault/BAUtils.kt @@ -3,34 +3,30 @@ package content.minigame.barbassault import content.minigame.barbassault.arena.BarbassaultSession import core.game.node.entity.player.Player +//thank you Ceikry + const val BA_SESSION_KEY = "ba-session" + /** - * Gets or sets the player's current Barbarian Assault session. - * - * This property provides convenient access to the player's active - * [BarbassaultSession], if one exists. - * - * When setting: - * - Assigning a non-null value will store the session on the player. - * - Assigning `null` will remove the session attribute entirely. + * @param player [Player] * * @return The current [BarbassaultSession] if the player is in a session, * or `null` if they are not participating in Barbarian Assault. */ -var Player.baSession: BarbassaultSession? - get() = getAttribute(BA_SESSION_KEY) - set(value) { - if (value == null) removeAttribute(BA_SESSION_KEY) - else setAttribute(BA_SESSION_KEY, value) - } +//getBASession(player) +fun getBASession(player: Player): BarbassaultSession? = player.getAttribute(BA_SESSION_KEY) -fun Player.isBAHealer(): Boolean { - return baSession?.team?.isHealer(this) == true +fun setBASession(player: Player, session: BarbassaultSession?) { + if (session == null) { + player.removeAttribute(BA_SESSION_KEY) + } else { + player.setAttribute(BA_SESSION_KEY, session) + } } /** * Retrieves the player's current Barbarian Assault points. - * + * @param player [Player] * @return [BarbAssaultPoints] representing the player's stored points in each role: * - `atk`: Attacker points * - `col`: Collector points @@ -39,20 +35,21 @@ fun Player.isBAHealer(): Boolean { * * Example usage: * ``` - * val points = player.getBarbPoints() + * val points = getBAPoints(player) * println("Attacker points: ${points.atk}") * ``` - */ -fun Player.getBarbPoints(): BarbAssaultPoints = BarbAssaultPoints( - getAttribute("barbass:atk-points", 0), - getAttribute("barbass:col-points", 0), - getAttribute("barbass:def-points", 0), - getAttribute("barbass:heal-points", 0) + *///getBAPoints(player) +fun getBAPoints(player: Player): BarbAssaultPoints = BarbAssaultPoints( + player.getAttribute("barbass:atk-points", 0), + player.getAttribute("barbass:col-points", 0), + player.getAttribute("barbass:def-points", 0), + player.getAttribute("barbass:heal-points", 0) ) + /** * Sets the player's Barbarian Assault role points, clamping each to the allowed range (0 to 500) * and saving them to persistent storage. - * + * @param player [Player] * @param points [BarbAssaultPoints] containing the new point values for each role: * - `atk`: Attacker points * - `col`: Collector points @@ -62,66 +59,63 @@ fun Player.getBarbPoints(): BarbAssaultPoints = BarbAssaultPoints( * Example usage: * ``` * val newPoints = BarbAssaultPoints(atk = 120, col = 80, def = 200, heal = 0) - * player.setBarbPoints(newPoints) + * setBAPoints(player,newPoints) * ``` */ -fun Player.setBarbPoints(points: BarbAssaultPoints) { +fun setBAPoints(player: Player, points: BarbAssaultPoints) { val rolePoints = points.clamped() - setAttribute("/save:barbass:atk-points", rolePoints.atk) - setAttribute("/save:barbass:col-points", rolePoints.col) - setAttribute("/save:barbass:def-points", rolePoints.def) - setAttribute("/save:barbass:heal-points", rolePoints.heal) + player.setAttribute("/save:barbass:atk-points", rolePoints.atk) + player.setAttribute("/save:barbass:col-points", rolePoints.col) + player.setAttribute("/save:barbass:def-points", rolePoints.def) + player.setAttribute("/save:barbass:heal-points", rolePoints.heal) } /** - * Adds Barbarian Assault points to the player. - * + * @param player [Player] * @param additional The points to be added to the player's current Barbarian Assault points. * Values will be automatically clamped between 0 and 500. * * Example usage: * ``` * // Give the player 30 attacker points and 10 collector points - * player.addBarbPoints(BarbAssaultPoints(atk = 30, col = 10, def = 0, heal = 0)) + * addBAPoints(player,BarbAssaultPoints(atk = 30, col = 10, def = 0, heal = 0)) * ``` */ -fun Player.addBarbPoints(additional: BarbAssaultPoints) { - setBarbPoints(getBarbPoints() + additional) +fun addBAPoints(player: Player,additional: BarbAssaultPoints) { + setBAPoints(player,getBAPoints(player) + additional) //todo Add warning message if points hit cap. //"You have maxed out your Healer Honor Points. You should spend them /n //commands." //https://youtu.be/rWRWL5PUj94?t=244 } + /** - * Removes Barbarian Assault points from the player. * + * @param player [Player] * @param toRemove The points to be subtracted from the player's current Barbarian Assault points. * Values will be clamped so that no role goes below 0. * * Example usage: * ``` * // Remove 15 attacker points and 5 defender points - * player.removeBarbPoints(BarbAssaultPoints(atk = 15, col = 0, def = 5, heal = 0)) + * removeBAPoints(BarbAssaultPoints(atk = 15, col = 0, def = 5, heal = 0)) * ``` */ -fun Player.removeBarbPoints(toRemove: BarbAssaultPoints) { - setBarbPoints(getBarbPoints() - toRemove) +fun removeBAPoints(player: Player, toRemove: BarbAssaultPoints) { + setBAPoints(player,getBAPoints(player) - toRemove) } /** - * Checks whether the player has defeated the Penance Queen at least once. - * - * This is determined by the `"barbass:queen-kill"` attribute, - * which tracks the number of successful Queen kills. + * @param player [Player] * * @return `true` if the player has one or more Queen kills, * otherwise `false`. */ -fun Player.hasQueenKill(): Boolean = getAttribute("barbass:queen-kill", 0) > 0 +fun hasQueenKill(player: Player): Boolean = player.getAttribute("barbass:queen-kill", 0) > 0 /** - * Retrieves the player's Barbarian Assault role levels from their saved attributes. + * Retrieves the player's Barbarian Assault role levels * Defaults to level 1 for any role if not previously set. - * + * @param player [Player] * @return [BarbAssaultLevels] containing the level for each role: * - `atk`: Attacker level * - `col`: Collector level @@ -130,19 +124,19 @@ fun Player.hasQueenKill(): Boolean = getAttribute("barbass:queen-kill", 0) > 0 * * Example usage: * ``` - * val levels = player.getBarbLevels() + * val levels = getBALevels(player) * println("Attacker Level: ${levels.atk}") * ``` */ -fun Player.getBarbLevels(): BarbAssaultLevels = BarbAssaultLevels( - getAttribute("barbass:atk-level", 1), - getAttribute("barbass:col-level", 1), - getAttribute("barbass:def-level", 1), - getAttribute("barbass:heal-level", 1) +fun getBALevels(player: Player): BarbAssaultLevels = BarbAssaultLevels( + player.getAttribute("barbass:atk-level", 1), + player.getAttribute("barbass:col-level", 1), + player.getAttribute("barbass:def-level", 1), + player.getAttribute("barbass:heal-level", 1) ) /** - * Sets the player's Barbarian Assault role levels and saves them to persistent attributes. - * + * Sets the player's Barbarian Assault role levels + * @param player [Player] * @param levels The [BarbAssaultLevels] object containing levels for each role: * - `atk`: Attacker level (1–5) * - `col`: Collector level (1–5) @@ -152,20 +146,21 @@ fun Player.getBarbLevels(): BarbAssaultLevels = BarbAssaultLevels( * Example usage: * ``` * val newLevels = BarbAssaultLevels(atk = 2, col = 1, def = 3, heal = 1) - * player.setBarbLevels(newLevels) + * setBALevels(player,newLevels) * ``` */ -fun Player.setBarbLevels(levels: BarbAssaultLevels) { - setAttribute("/save:barbass:atk-level", levels.atk) - setAttribute("/save:barbass:col-level", levels.col) - setAttribute("/save:barbass:def-level", levels.def) - setAttribute("/save:barbass:heal-level", levels.heal) +fun setBALevels(player: Player,levels: BarbAssaultLevels) { + player.setAttribute("/save:barbass:atk-level", levels.atk) + player.setAttribute("/save:barbass:col-level", levels.col) + player.setAttribute("/save:barbass:def-level", levels.def) + player.setAttribute("/save:barbass:heal-level", levels.heal) } + /** * Increases the level of the specified Barbarian Assault role by 1, up to a maximum of 5. * * Only one role can be increased at a time. The result is clamped to ensure the level does not exceed 5. - * + * @param player [Player] * @param role The [BarbRole] to increase the level of. Must be one of: * - `BarbRole.ATTACKER` * - `BarbRole.COLLECTOR` @@ -174,40 +169,54 @@ fun Player.setBarbLevels(levels: BarbAssaultLevels) { * * Example usage: * ``` - * player.increaseBarbRoleLevel(BarbRole.ATTACKER) + * increaseBARoleLevel(player,BarbRole.ATTACKER) * ``` */ -fun Player.increaseBarbRoleLevel(role: BarbRole) { - val current = getBarbLevels() +fun increaseBARoleLevel(player: Player,role: BarbRole) { + val current = getBALevels(player) val newLevels = when (role) { BarbRole.ATTACKER -> current.copy(atk = current.atk + 1) BarbRole.COLLECTOR -> current.copy(col = current.col + 1) BarbRole.DEFENDER -> current.copy(def = current.def + 1) BarbRole.HEALER -> current.copy(heal = current.heal + 1) }.clamped() - setBarbLevels(newLevels) + setBALevels(player,newLevels) } - /** * Retrieves the player's current Barbarian Assault wave. - * - * This value is stored under the `"barbass:wave"` attribute and - * represents the wave the player is currently on in a session. + * @param player [Player] * * @return The current wave number. Defaults to `1` if no value is set. */ -fun Player.getBarbWave(): Int? { - return this.getAttribute("barbass:wave", 1) +fun getBAWave(player: Player): Int? { + return player.getAttribute("barbass:wave", 1) } /** * Sets the player's current Barbarian Assault wave. - * - * This stores the wave value under the `"/save:barbass:wave"` attribute, - * allowing it to persist. + * @param player [Player] * * @param wave The wave number to assign to the player. */ -fun Player.setBarbWave(wave: Int){ - this.setAttribute("/save:barbass:wave", wave) -} \ No newline at end of file +fun setBAWave(player: Player, wave: Int){ + player.setAttribute("/save:barbass:wave", wave) +} + +/** + * Gets the Barbarian Assault role assigned to the player. + * + * @param player The player whose role should be retrieved. + * @return The player's assigned [BarbRole], or `null` if the player is not in a Barbarian Assault session or team. + */ +fun getBARoleForPlayer(player: Player): BarbRole? { + val team = getBASession(player)?.team ?: return null + return team.getRoleForPlayer(player) +} +/** + * Checks whether the player currently has the specified Barbarian Assault role. + * + * @param player The player to check. + * @param role The role to compare against. + * @return `true` if the player has the specified role, otherwise `false`. + */ +fun isBARole(player: Player, role: BarbRole) = getBARoleForPlayer(player) == role diff --git a/Server/src/main/content/minigame/barbassault/Barbassault.kt b/Server/src/main/content/minigame/barbassault/BarbAssault.kt similarity index 100% rename from Server/src/main/content/minigame/barbassault/Barbassault.kt rename to Server/src/main/content/minigame/barbassault/BarbAssault.kt diff --git a/Server/src/main/content/minigame/barbassault/CommanderConnad.kt b/Server/src/main/content/minigame/barbassault/CommanderConnad.kt index 7ee4a822d..9c9c7d17c 100644 --- a/Server/src/main/content/minigame/barbassault/CommanderConnad.kt +++ b/Server/src/main/content/minigame/barbassault/CommanderConnad.kt @@ -27,7 +27,7 @@ class CommanderConnad(player: Player? = null) : DialoguePlugin(player) { return true } override fun handle(componentID: Int, buttonID: Int): Boolean { - val barbasspoints = player.getBarbPoints() + val barbasspoints = getBAPoints(player) val displayName = player.name.replaceFirstChar { it.uppercaseChar() } when (stage) { @@ -77,7 +77,7 @@ class CommanderConnad(player: Player? = null) : DialoguePlugin(player) { 77 -> npcl(FacialExpression.ASKING,"I can change it down to wave 1, Are you sure you want that?").also { stage++ } 78 -> showTopics( Topic(FacialExpression.FRIENDLY, "Yes, reset my wave to one.",79), - Topic(FacialExpression.FRIENDLY, "No, I want to stay on wave ${player?.getBarbWave()}.",10) + Topic(FacialExpression.FRIENDLY, "No, I want to stay on wave ${getBAWave(player)}.",10) ) 79 -> { npcl(FacialExpression.ASKING,"Very well.").also { stage = END_DIALOGUE } @@ -97,8 +97,8 @@ class CommanderConnad(player: Player? = null) : DialoguePlugin(player) { if (player.hasItem(Item(Items.QUEEN_HELP_BOOK_10562))) return 51 return 50 } - private fun areWaveOne(player: Player?): Int { - if (player?.getBarbWave() != 1) return 77 + private fun areWaveOne(player: Player): Int { + if (getBAWave(player) != 1) return 77 return 75 } override fun getIds(): IntArray { diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt b/Server/src/main/content/minigame/barbassault/arena/BAActivity.kt similarity index 80% rename from Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt rename to Server/src/main/content/minigame/barbassault/arena/BAActivity.kt index da9ec181a..0c5d452a5 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultActivity.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAActivity.kt @@ -2,7 +2,6 @@ package content.minigame.barbassault import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.BarbassaultState -import content.minigame.barbassault.arena.Npcs.dropPenanceEggCluster import core.api.log import core.game.activity.ActivityManager import core.game.activity.ActivityPlugin @@ -11,23 +10,17 @@ import core.game.node.entity.Entity import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player -import core.game.node.item.GroundItem -import core.game.node.item.GroundItemManager -import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.map.zone.ZoneRestriction -import core.game.worldevents.holiday.easter.EasterEvent.Companion.EGG_SPAWN_TIME -import core.game.worldevents.holiday.easter.EasterEvent.Companion.eggs import core.plugin.Initializable import core.tools.Log -import org.rs09.consts.Items private val sessions = mutableListOf() -private var activity: BarbassaultActivity? = null +private var activity: BAActivity? = null @Initializable -open class BarbassaultActivity : ActivityPlugin("barbassault",false, true, true,ZoneRestriction.CANNON,ZoneRestriction.FIRES,ZoneRestriction.FOLLOWERS,ZoneRestriction.RANDOM_EVENTS) { +open class BAActivity : ActivityPlugin("barbassault",false, true, true,ZoneRestriction.CANNON,ZoneRestriction.FIRES,ZoneRestriction.FOLLOWERS,ZoneRestriction.RANDOM_EVENTS) { init { activity = this } @@ -62,7 +55,7 @@ open class BarbassaultActivity : ActivityPlugin("barbassault",false, true, true, val ename = e?.name log(this.javaClass, Log.FINE,"$ename has died in Barbass") if (e is Player) { - val session = e.baSession + val session = getBASession(e) session?.state = BarbassaultState.DEATH e.getProperties().setTeleportLocation(null) return true @@ -91,12 +84,11 @@ open class BarbassaultActivity : ActivityPlugin("barbassault",false, true, true, companion object { fun createSession(leader: Player): BarbassaultSession { - val activity = ActivityManager.getActivity("barbassault") as BarbassaultActivity + val activity = ActivityManager.getActivity("barbassault") as BAActivity val session = BarbassaultSession(activity) sessions += session - leader.baSession = session - + setBASession(leader,session) return session } diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt similarity index 93% rename from Server/src/main/content/minigame/barbassault/arena/BarbassaultArenaListener.kt rename to Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt index 3f77ba9d6..a08d3b336 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt @@ -2,15 +2,15 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.BarbRole import content.minigame.barbassault.LureItems -import content.minigame.barbassault.arena.BaHornSystem.HornHelper.getHealerHorn +import content.minigame.barbassault.arena.BAHornSystem.HornHelper.getHealerHorn import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadEggHopper import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadHopperEggs import content.minigame.barbassault.arena.scenery.EggCannon.Companion.showEggHopperCount -import content.minigame.barbassault.baSession -import content.minigame.barbassault.getBarbLevels -import content.minigame.barbassault.isBAHealer +import content.minigame.barbassault.getBALevels +import content.minigame.barbassault.getBASession +import content.minigame.barbassault.isBARole import core.api.* import core.game.global.action.ClimbActionHandler import core.game.global.action.DropListener @@ -22,8 +22,6 @@ import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.node.item.GroundItem -import core.game.node.item.GroundItemManager -import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.GameWorld.Pulser @@ -115,7 +113,7 @@ class BarbassaultArenaListener : InteractionListener { val animationDuration = animationDuration(ClimbActionHandler.CLIMB_UP) player.lock(animationDuration) player.animate(ClimbActionHandler.CLIMB_UP) - Pulser.submit(object : Pulse(animationDuration) { override fun pulse(): Boolean {player.baSession?.forfeit(); return true }}) + Pulser.submit(object : Pulse(animationDuration) { override fun pulse(): Boolean {getBASession(player)?.forfeit(); return true }}) } } return@on true @@ -123,7 +121,7 @@ class BarbassaultArenaListener : InteractionListener { //you healed $heal.count hitpoints. //You've been healed $amount hitpoints and your poison cured. on(Scenery.HEALER_SPRING_20150, IntType.SCENERY, "Drink-from") { player, _ -> - if (player.isBAHealer()) { + if (isBARole(player, BarbRole.HEALER)) { player.animate(Animation(5407)) player.lock(5) GameWorld.Pulser.submit(object : Pulse(3, player) { @@ -134,7 +132,7 @@ class BarbassaultArenaListener : InteractionListener { heal(player, healAmount) player.unlock() sendMessage(player,"You've been healed $healAmount hitpoints.") - player.baSession?.updateBarbHealerIfaceHPOfPlayer(player) + getBASession(player)?.updateBarbHealerIfaceHPOfPlayer(player) return true } }) @@ -145,7 +143,7 @@ class BarbassaultArenaListener : InteractionListener { //"The player's hitpoints are full." //Error message if target player hp is full //sendamount heal for conversion to points at end. on(Scenery.HEALER_SPRING_20150, IntType.SCENERY, "Take-from") { player, _ -> - val healLevel = player.getBarbLevels().heal + val healLevel = getBALevels(player).heal //emote 5400 /* HEALING_VIAL_10546 -- empty HEALING_VIAL1_10545 // 1 @@ -159,7 +157,7 @@ class BarbassaultArenaListener : InteractionListener { //CATALYTIC_RUNE_12851, ELEMENTAL_RUNE_12850 onUnequip(ROLE_ICON) { player, _ -> - if (player.baSession?.state == BarbassaultState.IN_ARENA){ + if (getBASession(player)?.state == BarbassaultState.IN_ARENA){ sendMessage(player, "You can't remove that!") // is there a proper message for this? return@onUnequip false } @@ -167,14 +165,14 @@ class BarbassaultArenaListener : InteractionListener { } onEquip(ROLE_ICON) { player, _ -> - if (player.baSession?.state == BarbassaultState.IN_ARENA) { + if (getBASession(player)?.state == BarbassaultState.IN_ARENA) { sendMessage(player, "You can't remove that!") return@onEquip false } return@onEquip true } on(LureItems, IntType.GROUNDITEM, "Take") { player, node -> - val session = player.baSession ?: return@on true + val session = getBASession(player) ?: return@on true if (session.team.getRoleForPlayer(player) != BarbRole.DEFENDER) { sendMessage(player,"not a Defender") } @@ -183,7 +181,7 @@ class BarbassaultArenaListener : InteractionListener { } on(LureItems, IntType.ITEM, "Drop") { player, node -> DropListener.drop(player, node.asItem()) - val session = player.baSession ?: return@on true + val session = getBASession(player) ?: return@on true val gItem = player.getAttribute("droppedItem:${node.id}") (gItem as SessionGroundSpawn).flag = true @@ -194,7 +192,7 @@ class BarbassaultArenaListener : InteractionListener { } on(EggCannon.ALL_EGGS, IntType.GROUNDITEM, "Take") { player, node -> if (node !is GroundItem) return@on true - val session = player.baSession ?: return@on true + val session = getBASession(player) ?: return@on true if (session.team.getRoleForPlayer(player) != BarbRole.COLLECTOR) { sendMessage(player,"not a collector") } @@ -224,7 +222,7 @@ class BarbassaultArenaListener : InteractionListener { fun sessionDestination(player: Player, node: Node, direction: Direction? = null): Location { //work around for running off to org location instead of copy location. //Player Name's Parlor chairs Should fix this! - val session = player.baSession ?: return node.location + val session = getBASession(player) ?: return node.location val borders = getRegionBorders(session.region.regionId) val base = session.base return Location.create( @@ -297,11 +295,11 @@ object BarbAssaultCombat { } fun applyAttackValidation( self: NPC, attacker: Player, state: BattleState ): Int { - val session = attacker.baSession ?: return state.estimatedHit + val session = getBASession(attacker) ?: return state.estimatedHit val currentCall = session.roleCalls[BarbRole.COLLECTOR]?.toCall //todo read my players level instead of scanning the inventory every time for a horn. - val hornBonus = (BaHornSystem.HornHelper.getAttackerHorn(attacker)?.ordinal ?: -1) + 2 + val hornBonus = (BAHornSystem.HornHelper.getAttackerHorn(attacker)?.ordinal ?: -1) + 2 val damage = state.estimatedHit + hornBonus val usedStyle = resolveAttackerStyle(attacker, state) diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassEvent.kt b/Server/src/main/content/minigame/barbassault/arena/BAEvent.kt similarity index 100% rename from Server/src/main/content/minigame/barbassault/arena/BarbassEvent.kt rename to Server/src/main/content/minigame/barbassault/arena/BAEvent.kt diff --git a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt b/Server/src/main/content/minigame/barbassault/arena/BAHornSystem.kt similarity index 90% rename from Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt rename to Server/src/main/content/minigame/barbassault/arena/BAHornSystem.kt index 37c8e7b90..a238c223c 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BaHornSystem.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAHornSystem.kt @@ -1,6 +1,6 @@ package content.minigame.barbassault.arena -import content.minigame.barbassault.baSession +import content.minigame.barbassault.getBASession import core.api.inInventory import core.api.sendChat import core.api.sendMessage @@ -9,7 +9,7 @@ import core.game.interaction.InteractionListener import core.game.node.entity.player.Player import org.rs09.consts.Items -class BaHornSystem : InteractionListener { +class BAHornSystem : InteractionListener { private val ATTACKER_HORNS = intArrayOf( Items.ATTACKER_HORN_10516, Items.ATTACKER_HORN_10517, Items.ATTACKER_HORN_10518, Items.ATTACKER_HORN_10519, Items.ATTACKER_HORN_10520 ) private val HEALER_HORNS = intArrayOf( Items.HEALER_HORN_10526, Items.HEALER_HORN_10527, Items.HEALER_HORN_10528, Items.HEALER_HORN_10529, Items.HEALER_HORN_10530 ) @@ -53,8 +53,8 @@ class BaHornSystem : InteractionListener { sendChat(player, call.text) when (food) { - is BarbassaultSession.PoisonFood -> player.baSession?.onHornCall(player, food) - null -> player.baSession?.alertHealers(player) + is BarbassaultSession.PoisonFood -> getBASession(player)?.onHornCall(player, food) + null -> getBASession(player)?.alertHealers(player) } true } @@ -76,8 +76,8 @@ class BaHornSystem : InteractionListener { sendChat(player, call.text) when (style) { - is BarbassaultSession.AttackerStyle -> player.baSession?.onHornCall(player, style) - null-> player.baSession?.alertHealers(player) + is BarbassaultSession.AttackerStyle -> getBASession(player)?.onHornCall(player, style) + null-> getBASession(player)?.alertHealers(player) } true } @@ -97,8 +97,8 @@ class BaHornSystem : InteractionListener { sendChat(player, call.text) when (color) { - is BarbassaultSession.EggColor -> player.baSession?.onHornCall(player, color) - null -> player.baSession?.alertHealers(player) + is BarbassaultSession.EggColor -> getBASession(player)?.onHornCall(player, color) + null -> getBASession(player)?.alertHealers(player) } true } @@ -119,8 +119,8 @@ class BaHornSystem : InteractionListener { sendChat(player, call.text) when (lure) { - is BarbassaultSession.LureFood -> player.baSession?.onHornCall(player, lure) - null -> player.baSession?.alertHealers(player) + is BarbassaultSession.LureFood -> getBASession(player)?.onHornCall(player, lure) + null -> getBASession(player)?.alertHealers(player) } true } diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbScoreManager.kt b/Server/src/main/content/minigame/barbassault/arena/BAScoreManager.kt similarity index 100% rename from Server/src/main/content/minigame/barbassault/arena/BarbScoreManager.kt rename to Server/src/main/content/minigame/barbassault/arena/BAScoreManager.kt diff --git a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt similarity index 96% rename from Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt rename to Server/src/main/content/minigame/barbassault/arena/BASession.kt index 129532cfb..4b48d460e 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BarbassaultSession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -3,15 +3,16 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.ALL_BARBASS_ITEMS import content.minigame.barbassault.BA_SESSION_KEY import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.BarbassaultActivity +import content.minigame.barbassault.BAActivity import content.minigame.barbassault.LureItems import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.GloryHorn -import content.minigame.barbassault.baSession -import content.minigame.barbassault.getBarbLevels -import content.minigame.barbassault.getBarbWave +import content.minigame.barbassault.getBALevels +import content.minigame.barbassault.getBASession +import content.minigame.barbassault.getBAWave + import content.minigame.barbassault.lobby.* -import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.waveLobbies +import content.minigame.barbassault.lobby.BALobby.Companion.waveLobbies import core.api.* import core.game.node.entity.Entity import core.game.node.entity.impl.PulseManager @@ -20,7 +21,6 @@ import core.game.node.entity.player.Player import core.game.node.item.GroundItem import core.game.node.item.GroundItemManager import core.game.node.item.Item -import core.game.system.config.GroundSpawnLoader import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.GameWorld.Pulser @@ -41,7 +41,7 @@ enum class BarbassaultState { PARTY_CREATION, STARTING, IN_ARENA,FORFEIT, COMPLE data class PenanceNpcTunnel(val type:PenanceType, val x: Int,val y: Int,val z: Int,val direction: Direction) { fun toLocation(): Location = Location(x, y, z) } data class ArenaSpawnItems(val id: Int, val location: Location) -class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutListener, MapArea { +class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, MapArea { //constructor(region: DynamicRegion, activity: BarbassaultActivity) : this(activity) {this.region = region; this.base = region.baseLocation} lateinit var region: DynamicRegion lateinit var base: Location @@ -88,7 +88,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi for (player in team.allPlayers()) { zone.enter(player) - val pRole = player.baSession?.team?.getRoleForPlayer(player) + val pRole = getBASession(player)?.team?.getRoleForPlayer(player) equipBARoleIcon(player, pRole!!) player.properties.teleportLocation = team.spawnLocationFor(player) //base.transform(36, 24, 0) giveRoleItems(player,pRole) @@ -240,7 +240,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi fun endGame(endReason: String){ eventBus.clear() scoreManager.resetAll() - BarbassaultLobby.TeamToLobby(team,team.wave) + BALobby.TeamToLobby(team,team.wave) state = BarbassaultState.PARTY_CREATION for(player in team.allPlayers()) { PulseManager.cancelDeathTask(player) @@ -256,7 +256,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi //todo dialogbox message not sendMessage //Dialogbox: " The game ended because on of your team-mates exited early. sendMessage(player,"The game ended early because one of your team-mates $endReason.") - BarbTeamManager.updateTeam(player.baSession?.team!!) + BarbTeamManager.updateTeam(getBASession(player)?.team!!) } } //MAIN GAME LOOP @@ -280,13 +280,13 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi BarbassaultState.FORFEIT -> { endGame("left"); return true } BarbassaultState.COMPLETE -> { log(this.javaClass, Log.FINE,state.toString()) - BarbassaultLobby.TeamToLobby(team,team.wave+1) + BALobby.TeamToLobby(team,team.wave+1) state = BarbassaultState.PARTY_CREATION for(player in team.allPlayers()) { PulseManager.cancelDeathTask(player) closeInterface(player) openOverlay(player, 256) - BarbTeamManager.updateTeam(player.baSession?.team!!) + BarbTeamManager.updateTeam(getBASession(player)?.team!!) } return true // we do not have auto start next wave in 2009 } @@ -350,7 +350,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi log(this::class.java, Log.FINE, "ENTERED Barbassault Arena") val player = entity as? Player ?: return - val waveNum = player.getBarbWave() + val waveNum = getBAWave(player) val wornIconId = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id val interfaceId = getIconInterfaceId(wornIconId ?: -1) player.fullRestore() @@ -405,7 +405,7 @@ class BarbassaultSession( val activity: BarbassaultActivity ? = null) :LogoutLi } private fun giveRoleItems(player: Player, role: BarbRole) { - val levels = player.getBarbLevels() + val levels = getBALevels(player) val items = when (role) { BarbRole.ATTACKER -> when (levels.atk) { diff --git a/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt b/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt index d0e038444..3f5502aed 100644 --- a/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt +++ b/Server/src/main/content/minigame/barbassault/arena/HealerInterface.kt @@ -1,7 +1,7 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.baSession +import content.minigame.barbassault.getBASession import core.api.setComponentVisibility import core.api.setInterfaceText import core.game.component.Component @@ -49,7 +49,7 @@ fun setHealerTeamIfaceSlot(player: Player,slot: Int){ } fun getPlayerHealerIfaceSlot(player:Player,slot: Int): Player? { - val team = player.baSession?.team + val team = getBASession(player)?.team val others = team?.allPlayers()?.filter { it != player } return others?.getOrNull(slot) } @@ -57,7 +57,7 @@ fun getPlayerHealerIfaceSlot(player:Player,slot: Int): Player? { fun HealerIfaceMedicHelp(player: Player, other: Player, toggle: Boolean = false) { if (player == other) return - val team = player.baSession?.team ?: return + val team = getBASession(player)?.team ?: return val mySlot = team.slotOf(player) val otherSlot = team.slotOf(other) @@ -70,7 +70,7 @@ fun HealerIfaceMedicHelp(player: Player, other: Player, toggle: Boolean = false) fun HealerIfaceHPUpdatePlayer(player:Player, other:Player ){ if (player == other) return - val team = player.baSession?.team ?: return + val team = getBASession(player)?.team ?: return val mySlot = team.slotOf(player) val otherSlot = team.slotOf(other) diff --git a/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt b/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt index ae2b97be5..94a2540f0 100644 --- a/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt +++ b/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt @@ -6,12 +6,13 @@ import core.game.node.item.Item import core.game.world.GameWorld import core.game.world.map.Location -class SessionGroundSpawn(private var session: BarbassaultSession, private var respawnRate: Int, item: Item?,location: Location?,var flag: Boolean? = null) : GroundItem(item, location) { +class SessionGroundSpawn(private var session: BarbassaultSession, private var respawnRate: Int, item: Item?, location: Location?, + var flag: Boolean? = null) : GroundItem(item, location) { private var active = true private var autoSpawn = true override fun toString(): String { - return "SessionGroundSpawn [name=$name, respawnRate=$respawnRate, loc=$location]" + return "SessionGroundSpawn [name=$name, respawnRate=$respawnRate, loc=$location, flag = $flag]" } fun init(): GroundItem { diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannonNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/EggCannonNPC.kt similarity index 95% rename from Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannonNPC.kt rename to Server/src/main/content/minigame/barbassault/arena/npcs/EggCannonNPC.kt index 1971fb5a0..965a22043 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/EggCannonNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/EggCannonNPC.kt @@ -1,4 +1,4 @@ -package content.minigame.barbassault.arena.Npcs +package content.minigame.barbassault.arena.npcs import core.game.node.entity.Entity import core.game.node.entity.combat.CombatStyle diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt similarity index 91% rename from Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceFighterNPC.kt rename to Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt index d5e343db3..2622c0910 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt @@ -3,8 +3,8 @@ package content.minigame.barbassault.arenas.monsters import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent import content.minigame.barbassault.arena.BarbAssaultCombat -import content.minigame.barbassault.arena.Npcs.dropPenanceEggCluster -import content.minigame.barbassault.baSession +import content.minigame.barbassault.arena.npcs.dropPenanceEggCluster +import content.minigame.barbassault.getBASession import core.api.* import core.game.node.entity.Entity import core.game.node.entity.combat.BattleState @@ -12,9 +12,6 @@ import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior import core.game.node.entity.player.Player -import core.game.node.item.GroundItemManager -import core.game.node.item.Item -import org.rs09.consts.Items import org.rs09.consts.NPCs val PENANCE_FIGHTER_IDS = listOf( @@ -74,7 +71,7 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { override fun onDeathFinished(self: NPC, killer: Entity) { val player = killer as? Player ?: return - val session = player.baSession ?: return + val session = getBASession(player) ?: return dropPenanceEggCluster(killer,self) session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt similarity index 92% rename from Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt rename to Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt index ef7cc2666..6c98652f6 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHealerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt @@ -1,8 +1,8 @@ -package content.minigame.barbassault.arena.Npcs +package content.minigame.barbassault.arena.npcs import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent -import content.minigame.barbassault.baSession +import content.minigame.barbassault.getBASession import core.game.node.entity.Entity import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior @@ -37,7 +37,7 @@ class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS.toIntArray()) { override fun onDeathFinished(self: NPC, killer: Entity) { super.onDeathFinished(self, killer) val player = killer as? Player ?: return - val session = player.baSession ?: return + val session = getBASession(player) ?: return dropPenanceEggCluster(killer,self) session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHelper.kt similarity index 88% rename from Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt rename to Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHelper.kt index 143d482ac..c6634e555 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceHelper.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHelper.kt @@ -1,9 +1,8 @@ -package content.minigame.barbassault.arena.Npcs +package content.minigame.barbassault.arena.npcs import content.minigame.barbassault.arena.SessionGroundSpawn -import content.minigame.barbassault.baSession -import core.api.produceGroundItem +import content.minigame.barbassault.getBASession import core.api.sendMessage import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player @@ -11,10 +10,19 @@ import core.game.node.item.Item import core.game.world.map.RegionManager import org.rs09.consts.Items +/** + * Drops a cluster of Penance eggs around a target location in Barbarian Assault. + * + * Eggs are distributed randomly across a 3x3 area centered on the NPC drop location, + * or the killer's location if no NPC is provided. + * + * @param killer The player who triggered the egg drop (must have a BA session). + * @param npc Optional NPC used as the center point for the drop location. + */ fun dropPenanceEggCluster(killer: Player, npc: NPC? = null) { val center = npc?.dropLocation ?: killer.location - val session = killer.baSession ?: return val tiles = center.get3x3Tiles().shuffled() + val session = getBASession(killer) ?: return val eggs = listOf( Items.RED_EGG_10532, Items.RED_EGG_10532, Items.BLUE_EGG_10533, Items.BLUE_EGG_10533, @@ -24,8 +32,6 @@ fun dropPenanceEggCluster(killer: Player, npc: NPC? = null) { val tile = tiles[i] val thisGroundItem = SessionGroundSpawn(session,60,Item(eggs[i],1),tile) thisGroundItem.init() - sendMessage(killer, tile.toString()) - } } diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceQueenNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceQueenNPC.kt similarity index 94% rename from Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceQueenNPC.kt rename to Server/src/main/content/minigame/barbassault/arena/npcs/PenanceQueenNPC.kt index 9334548d1..4b1decc89 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceQueenNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceQueenNPC.kt @@ -1,4 +1,4 @@ -package content.minigame.barbassault.arena.Npcs +package content.minigame.barbassault.arena.npcs import core.api.sendMessage import core.game.node.entity.Entity diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt similarity index 94% rename from Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt rename to Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt index ac90b158d..2fa766c93 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt @@ -1,9 +1,9 @@ -package content.minigame.barbassault.arena.Npcs +package content.minigame.barbassault.arena.npcs import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent import content.minigame.barbassault.arena.BarbAssaultCombat -import content.minigame.barbassault.baSession +import content.minigame.barbassault.getBASession import core.api.* import core.api.getItemFromEquipment import core.game.node.entity.Entity @@ -62,7 +62,7 @@ class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { override fun onDeathFinished(self: NPC, killer: Entity) { super.onDeathFinished(self, killer) val player = killer as? Player ?: return - val session = player.baSession ?: return + val session = getBASession(killer) ?: return dropPenanceEggCluster(killer,self) session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt similarity index 93% rename from Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt rename to Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt index 4551dc379..1507286fd 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt @@ -1,4 +1,4 @@ -package content.minigame.barbassault.arena.Npcs +package content.minigame.barbassault.arena.npcs import content.minigame.barbassault.BA_SESSION_KEY import content.minigame.barbassault.BarbRole @@ -7,12 +7,12 @@ import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior import org.rs09.consts.NPCs import content.minigame.barbassault.arena.* -import content.minigame.barbassault.baSession +import content.minigame.barbassault.getBASession + import core.api.forceWalk import core.api.removeGroundItem import core.api.sendChat import core.game.node.entity.player.Player -import core.game.node.item.GroundItem val PENANCE_RUNNER_IDS = listOf( @@ -71,7 +71,7 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { override fun onDeathFinished(self: NPC, killer: Entity) { super.onDeathFinished(self, killer) val player = killer as? Player ?: return - val session = player.baSession ?: return + val session = getBASession(player) ?: return dropPenanceEggCluster(killer,self) session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) diff --git a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceSpawnNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceSpawnNPC.kt similarity index 86% rename from Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceSpawnNPC.kt rename to Server/src/main/content/minigame/barbassault/arena/npcs/PenanceSpawnNPC.kt index a5cee0c87..4675145d7 100644 --- a/Server/src/main/content/minigame/barbassault/arena/Npcs/PenanceSpawnNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceSpawnNPC.kt @@ -1,4 +1,4 @@ -package content.minigame.barbassault.arena.Npcs +package content.minigame.barbassault.arena.npcs import core.game.node.entity.Entity import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt index e6a679847..cc9fda70a 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt @@ -1,6 +1,6 @@ package content.minigame.barbassault.arena.scenery -import content.minigame.barbassault.arena.Npcs.PENANCE_RUNNER_IDS +import content.minigame.barbassault.arena.npcs.PENANCE_RUNNER_IDS import core.api.* import core.game.node.entity.Entity import core.game.node.entity.player.Player diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt index 82bb88387..2bad47aa7 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -1,14 +1,14 @@ package content.minigame.barbassault.arena.scenery import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.arena.Npcs.BAGraphics.Blue_EGG_PROJECTILE_978 -import content.minigame.barbassault.arena.Npcs.BAGraphics.GREEN_EGG_PROJECTILE_977 -import content.minigame.barbassault.arena.Npcs.BAGraphics.RED_EGG_PROJECTILE_978 -import content.minigame.barbassault.arena.Npcs.BAGraphics.YELLOW_EGG_PROJECTILE_980 -import content.minigame.barbassault.arena.Npcs.findClosestNPCIDFromPlayer -import content.minigame.barbassault.arena.Npcs.findClosestTargetNPCIDFromNPC +import content.minigame.barbassault.arena.npcs.BAGraphics.Blue_EGG_PROJECTILE_978 +import content.minigame.barbassault.arena.npcs.BAGraphics.GREEN_EGG_PROJECTILE_977 +import content.minigame.barbassault.arena.npcs.BAGraphics.RED_EGG_PROJECTILE_978 +import content.minigame.barbassault.arena.npcs.BAGraphics.YELLOW_EGG_PROJECTILE_980 +import content.minigame.barbassault.arena.npcs.findClosestNPCIDFromPlayer +import content.minigame.barbassault.arena.npcs.findClosestTargetNPCIDFromNPC import content.minigame.barbassault.arena.PenanceType -import content.minigame.barbassault.baSession +import content.minigame.barbassault.getBASession import core.api.* import core.game.component.CloseEvent import core.game.component.Component @@ -47,7 +47,7 @@ class EggCannon : ComponentPlugin() { sendMessage(player, "[BlickySwitch] Activated!") currentSequence.clear() if (player.isAdmin) { //ADMIN ONLY! - val eggHopper = player.baSession?.eggHopper + val eggHopper = getBASession(player)?.eggHopper eggHopper?.green = 99 eggHopper?.red = 99 eggHopper?.blue = 99 @@ -154,7 +154,7 @@ class EggCannon : ComponentPlugin() { fun updateCannonUI(player: Player?){ player ?: return - val eggHopper = player.baSession?.eggHopper ?: return + val eggHopper = getBASession(player)?.eggHopper ?: return val penances = listOf( EggTurret.pHealer, EggTurret.pRunner, EggTurret.pRanger, EggTurret.pFighter ) penances.forEach { penance -> @@ -184,7 +184,7 @@ class EggCannon : ComponentPlugin() { fun openTurretIface(player: Player?) { player ?: return - if (player.baSession?.eggHopper?.totalCount() == 0) { + if (getBASession(player)?.eggHopper?.totalCount() == 0) { sendDialogueLines(player,"There are no eggs in the hopper.") return } @@ -194,7 +194,7 @@ class EggCannon : ComponentPlugin() { } fun loadEggHopper(player: Player?){ player ?: return - val session = player.baSession + val session = getBASession(player) val role =session?.team?.getRoleForPlayer(player) if (role != BarbRole.COLLECTOR) {sendMessage(player,"You need to be a Collector to load eggs.");return} ALL_EGGS.forEach { loadHopperEggs(player, it) } @@ -202,14 +202,16 @@ class EggCannon : ComponentPlugin() { } fun loadHopperEggs(player: Player?,itemId: Int ){ player ?: return + //todo fix egg hopper + val session = getBASession(player) val invCount = amountInInventory(player, itemId) - val result = player.baSession?.eggHopper?.addEgg(itemId,invCount) - val color = player.baSession?.eggHopper?.eggColorMap?.get(itemId) + val result = session?.eggHopper?.addEgg(itemId,invCount) + val color = session?.eggHopper?.eggColorMap?.get(itemId) val added = result?.get(color) ?: 0 //load from collector bag too if(invCount > 0){ - val result = player.baSession?.eggHopper?.addEgg(itemId,invCount) - val color = player.baSession?.eggHopper?.eggColorMap?.get(itemId) + val result = session?.eggHopper?.addEgg(itemId,invCount) + val color = session?.eggHopper?.eggColorMap?.get(itemId) val added = result?.get(color) ?: 0 sendMessage(player,"You load the hopper.") removeItem(player, Item(itemId, added)) @@ -218,7 +220,7 @@ class EggCannon : ComponentPlugin() { } fun showEggHopperCount(player: Player?){ player ?: return - val eggsCount = player.baSession?.eggHopper + val eggsCount = getBASession(player)?.eggHopper val poison = eggsCount?.green val explosive = eggsCount?.red val stun = eggsCount?.blue @@ -228,10 +230,11 @@ class EggCannon : ComponentPlugin() { //error message CHATBOX "[bold]all of the _PENANCE_ have been killed!" fun fireEgg(player: Player, type: PenanceType, eggType: EggType){ - val npcId = player.baSession?.currentWaveDefinition?.npcIds?.get(type) + val session = getBASession(player) + val npcId = session?.currentWaveDefinition?.npcIds?.get(type) val eggCannon = findClosestNPCIDFromPlayer(player,NPCs.EGG_LAUNCHER_5026,2) val target = findClosestTargetNPCIDFromNPC(npcId, eggCannon as NPC ,14) - val hopper = player.baSession?.eggHopper ?: return + val hopper = session?.eggHopper ?: return if (target == null) { sendDialogueLines(player,"There are no targetable Penance ${type.name.lowercase().replaceFirstChar { it.uppercase() }} within firing range.") ;return} if (!eggType.tryConsume(hopper)) { diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt index 6ffdfb113..118dec67f 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt @@ -1,8 +1,8 @@ package content.minigame.barbassault.arena.scenery -import content.minigame.barbassault.arena.BaHornSystem.BaCall +import content.minigame.barbassault.arena.BAHornSystem.BaCall import content.minigame.barbassault.arena.BarbassaultSession -import content.minigame.barbassault.baSession +import content.minigame.barbassault.getBASession import core.api.* import core.game.component.Component import core.game.component.ComponentDefinition @@ -50,7 +50,7 @@ class HornOfGlory : ComponentPlugin() , InteractionListener { val role = pair.first val call = pair.second if(!hornCallLock) { - player.baSession?.onHornCall(player, role) + getBASession(player)?.onHornCall(player, role) sendChat(player, call.text) player.animate(Animation(5436)) player.lock(6) diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt index 6d9b4b51b..a99dd6d04 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/ItemMachine.kt @@ -1,6 +1,6 @@ package content.minigame.barbassault.arena.scenery -import content.minigame.barbassault.getBarbLevels +import content.minigame.barbassault.getBALevels import core.api.EquipmentSlot import core.api.addItem import core.api.getItemFromEquipment @@ -100,7 +100,7 @@ class ItemMachine: InteractionListener { } //Collector// on(Scenery.COLLECTOR_CONVERTER_21250, IntType.SCENERY, "Convert") { player, _ -> - val collectorLevel = player.getBarbLevels().col + val collectorLevel = getBALevels(player).col if (!hasCape(player, COLLECTOR_ICON)) return@on true //Items.RED_EGG_10532 diff --git a/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt b/Server/src/main/content/minigame/barbassault/bots/BABot.kt similarity index 90% rename from Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt rename to Server/src/main/content/minigame/barbassault/bots/BABot.kt index 958fee902..a25db4d13 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BarbassBot.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BABot.kt @@ -2,11 +2,12 @@ package content.minigame.barbassault.bots import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbassaultState +import content.minigame.barbassault.getBARoleForPlayer +import content.minigame.barbassault.getBASession import content.minigame.barbassault.lobby.BarbassQuickWaveActivity.Companion.addToQueue -import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.MAIN_LOBBY -import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.QUICK_START -import content.minigame.barbassault.lobby.BarbassaultLobby.Companion.waveLobbies -import content.minigame.barbassault.baSession +import content.minigame.barbassault.lobby.BALobby.Companion.MAIN_LOBBY +import content.minigame.barbassault.lobby.BALobby.Companion.QUICK_START +import content.minigame.barbassault.lobby.BALobby.Companion.waveLobbies import core.api.forceMove import core.api.getRegionBorders import core.game.bots.CombatBotAssembler @@ -16,7 +17,7 @@ import core.game.node.item.Item import core.game.world.map.Location import org.rs09.consts.Scenery -class BarbassBot(l: Location) : PvMBots(legitimizeLocation(l)){ +class BABot(l: Location) : PvMBots(legitimizeLocation(l)){ init { CombatBotAssembler().gearPCiMeleeBot(this) val icape: Item = this.equipment.get(1) @@ -69,7 +70,7 @@ class BarbassBot(l: Location) : PvMBots(legitimizeLocation(l)){ //chill, say somethings, walk around in .walkablearea } private fun doRoleTask() { - val myRole = this.baSession?.team?.getRoleForPlayer(this) + val myRole = getBARoleForPlayer(this) when (myRole) { BarbRole.ATTACKER -> combathandler.fightNPCs() BarbRole.DEFENDER -> combathandler.handleDefender() @@ -125,7 +126,7 @@ class BarbassBot(l: Location) : PvMBots(legitimizeLocation(l)){ if (QUICK_START.insideBorder(this.getLocation())) { return State.WAITING_IN_ROOM } - if (this.baSession?.state == BarbassaultState.IN_ARENA) { + if (getBASession(this)?.state == BarbassaultState.IN_ARENA) { return State.PLAY_GAME } if (isInLobbyOnly(this.getLocation())) { diff --git a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt index ac0e0409f..6c6857efd 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt @@ -1,7 +1,7 @@ package content.minigame.barbassault.bots import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.baSession +import content.minigame.barbassault.getBARoleForPlayer import core.game.interaction.MovementPulse import core.game.world.map.Location import core.game.world.map.path.Pathfinder @@ -10,7 +10,7 @@ import core.game.world.GameWorld import java.util.* -class BACombatState(val bot: BarbassBot) { +class BACombatState(val bot: BABot) { private val Random = Random() private val krng = kotlin.random.Random.Default val randomtype = Random().nextInt(100) @@ -36,7 +36,7 @@ class BACombatState(val bot: BarbassBot) { fun chatter() { bot.sendChat("LETS GOO!") if (krng.nextInt(200) != 0) return - val role = bot.baSession?.team?.getRoleForPlayer(bot) + val role = getBARoleForPlayer(bot) val messages = when (role) { BarbRole.ATTACKER -> listOf("Call pls", "Wrong style?", "Attacking!") BarbRole.HEALER -> listOf("Need poison", "Healing!", "Healer here","Call pls") diff --git a/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt index dfc106142..fc195d2d2 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/AcceptRoleInterface.kt @@ -1,7 +1,7 @@ package content.minigame.barbassault.lobby -import content.minigame.barbassault.baSession -import content.minigame.barbassault.getBarbWave +import content.minigame.barbassault.getBASession +import content.minigame.barbassault.getBAWave import content.minigame.barbassault.lobby.BarbTeamManager.abandonTeam import content.minigame.barbassault.lobby.BarbTeamManager.joinTeam import core.api.closeInterface @@ -20,7 +20,7 @@ class AcceptRoleInterface : ComponentPlugin() { ComponentDefinition.forId(AcceptRole.ID).plugin = this return this } - override fun handle(player: Player?,component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int ): Boolean { + override fun handle(player: Player,component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int ): Boolean { when (button) { AcceptRole.AcceptButton, AcceptRole.AcceptButtonText -> { handleAccept(player); return true } AcceptRole.DeclineButton, AcceptRole.DeclineButtonText -> { handleDecline(player); return true } @@ -35,7 +35,7 @@ class AcceptRoleInterface : ComponentPlugin() { super.open(player, component) var isopen = true player ?: return - val team = player.baSession?.team + val team = getBASession(player)?.team val recruit = team?.recruit?.player component?.setCloseEvent{ _, _ -> if (recruit != null && isopen) { closeInterface(recruit); isopen = false }; return@setCloseEvent true } @@ -45,8 +45,8 @@ class AcceptRoleInterface : ComponentPlugin() { val slotPlayer: Player? = partySlot?.player if (slotPlayer != null) { - val formattedRole = slotPlayer.baSession?.team?.getRoleForPlayer(slotPlayer)?.toString()?.lowercase()?.replaceFirstChar { it.uppercase() }?: AcceptRole.defaultText - val wave = slotPlayer.getBarbWave() + val formattedRole = getBASession(player)?.team?.getRoleForPlayer(slotPlayer)?.toString()?.lowercase()?.replaceFirstChar { it.uppercase() }?: AcceptRole.defaultText + val wave = getBAWave(slotPlayer) setInterfaceText(player, slotPlayer.name.capitalizeWords(), AcceptRole.ID, uiSlot.name ) setInterfaceText(player, formattedRole, AcceptRole.ID, uiSlot.role ) setInterfaceText(player, wave.toString(), AcceptRole.ID, uiSlot.wave ) @@ -57,8 +57,8 @@ class AcceptRoleInterface : ComponentPlugin() { } } } - private fun handleAccept(player: Player?) { - val team = player?.baSession?.team + private fun handleAccept(player: Player) { + val team = getBASession(player)?.team val recruit = team?.recruit if (!recruit?.accept!!) { sendMessage(player,"The other player hasn't confirmed their role yet.") @@ -84,7 +84,7 @@ class AcceptRoleInterface : ComponentPlugin() { }**/ } private fun handleRemove(player: Player, slotIndex: Int){ - val team = player.baSession?.team + val team = getBASession(player)?.team val follower = team?.getSlot(slotIndex)?.player ?: return val uiSlot = AcceptRole.team[slotIndex] @@ -97,8 +97,8 @@ class AcceptRoleInterface : ComponentPlugin() { } companion object { - fun updateRecruitData(player: Player?){ - val team = player?.baSession?.team + fun updateRecruitData(player: Player){ + val team = getBASession(player)?.team val leader = team?.getLeader()?.player ?: return val recruit = team.recruit val displayName = recruit?.role?.name?.lowercase()?.replaceFirstChar { it.uppercase() } ?: "Unknown" @@ -106,8 +106,8 @@ class AcceptRoleInterface : ComponentPlugin() { setInterfaceText(leader, displayName, AcceptRole.ID,AcceptRole.Status.selectedRole ) setInterfaceText(leader, level.toString(), AcceptRole.ID,AcceptRole.Status.levelRole ) } - fun resetWaitingStatus(player: Player?){ - val leader = player?.baSession?.team?.getLeader()?.player + fun resetWaitingStatus(player: Player){ + val leader = getBASession(player)?.team?.getLeader()?.player setInterfaceText(leader!!, AcceptRole.waiting, AcceptRole.ID,AcceptRole.Status.selectedRole ) setInterfaceText(leader, AcceptRole.waiting, AcceptRole.ID,AcceptRole.Status.levelRole ) } diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BALobby.kt similarity index 95% rename from Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt rename to Server/src/main/content/minigame/barbassault/lobby/BALobby.kt index 256157394..1515cf24c 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassaultLobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BALobby.kt @@ -2,13 +2,14 @@ package content.minigame.barbassault.lobby import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbassaultState -import content.minigame.barbassault.baSession -import content.minigame.barbassault.getBarbWave +import content.minigame.barbassault.getBASession +import content.minigame.barbassault.getBAWave import content.minigame.barbassault.lobby.BarbTeamManager.abandonTeam import content.minigame.barbassault.lobby.BarbTeamManager.createTeam import content.minigame.barbassault.lobby.BarbTeamManager.disbandTeam import content.minigame.barbassault.lobby.BarbassQuickWaveActivity.Companion.addToQueue -import content.minigame.barbassault.setBarbWave +import content.minigame.barbassault.setBASession +import content.minigame.barbassault.setBAWave import core.api.* import core.game.interaction.IntType import core.game.interaction.InteractionListener @@ -27,7 +28,7 @@ import org.rs09.consts.Sounds //"-- Next wave no longer starting" // The game ended early because one of your team-mated died. //private var activity: BarbassaultActivity? = null -class BarbassaultLobby : InteractionListener, MapArea { +class BALobby : InteractionListener, MapArea { override fun defineAreaBorders(): Array { return areaBorders @@ -89,7 +90,7 @@ class BarbassaultLobby : InteractionListener, MapArea { override fun defineListeners() { onUseWithPlayer(Items.SCROLL_10512) { leader, _, node -> val follower = node.asPlayer() - val session = leader.baSession + val session = getBASession(leader) val team = session?.team if (team == null) { @@ -97,10 +98,10 @@ class BarbassaultLobby : InteractionListener, MapArea { return@onUseWithPlayer false } - follower.baSession?.let { return@onUseWithPlayer false } // already on a team + getBASession(follower)?.let { return@onUseWithPlayer false } // already on a team team.recruit = PendingRecruit(follower) - follower.baSession = session + setBASession(follower, session) //leader.sendMessage(team.recruit?.player?.username ?: "null") // joinTeam(follower,BarbRole.DEFENDER) @@ -124,7 +125,7 @@ class BarbassaultLobby : InteractionListener, MapArea { return@on true } on(Items.SCROLL_10512, IntType.ITEM, "Clear") { player, _ -> - val session = player.baSession + val session = getBASession(player) val team = session?.team if (team != null) { disbandTeam(session) @@ -150,7 +151,7 @@ class BarbassaultLobby : InteractionListener, MapArea { } on(Scenery.LADDER_20193, IntType.SCENERY, "Climb-down") { player, _ -> - val session = player.baSession ?: run { + val session = getBASession(player) ?: run { player.sendMessage("You are not in a session!") return@on true } @@ -168,7 +169,8 @@ class BarbassaultLobby : InteractionListener, MapArea { if (!capeCheck(player)) { return@on false } //todo Not allowed to enter QuickStart with Scroll if (!QUICK_START.insideBorder(player.location)){ - player.setBarbWave(1) + //todo warning message you are about to reset your wave + setBAWave(player,1) handlePlayerOptionDoor(player) { role -> //player.sendMessage("You are a ${role.name.lowercase().replaceFirstChar { it.uppercase() }}.") handleWaveDoor(player, node, 489) @@ -257,9 +259,9 @@ class BarbassaultLobby : InteractionListener, MapArea { if (buttonId == 6) return val playerRole = getRoleFromButton(buttonId) ?: return - if (player.baSession == null) {createTeam(player)} + if (getBASession(player) == null) {createTeam(player)} - val team = player.baSession?.team ?: return + val team = getBASession(player)?.team ?: return team.setRoleForPlayer(player, playerRole) BarbTeamManager.updateTeam(team) sendMessage(player, "You've set your role to ${playerRole.name.lowercase().replaceFirstChar { it.uppercase() }}") @@ -302,7 +304,7 @@ class BarbassaultLobby : InteractionListener, MapArea { fun handleWaveDoor(player: Player, node: Node,iface: Int){ val doorLoc = node.location val playerLoc = player.location - var wave = player.getBarbWave() + var wave = getBAWave(player) if (wave == BARBWAVEDOOR[node.id]) { val insideRoom = playerLoc.y <= doorLoc.y val moveY = if (insideRoom) 1 else -1 diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbassQuickWaveActivity.kt b/Server/src/main/content/minigame/barbassault/lobby/BAQuickWaveActivity.kt similarity index 97% rename from Server/src/main/content/minigame/barbassault/lobby/BarbassQuickWaveActivity.kt rename to Server/src/main/content/minigame/barbassault/lobby/BAQuickWaveActivity.kt index 203440376..bb1cd7600 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbassQuickWaveActivity.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BAQuickWaveActivity.kt @@ -1,8 +1,9 @@ package content.minigame.barbassault.lobby import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.baSession +import content.minigame.barbassault.getBASession import content.minigame.barbassault.lobby.BarbTeamManager.createTeam +import content.minigame.barbassault.setBASession import core.api.* import core.game.activity.ActivityManager import core.game.activity.ActivityPlugin @@ -102,13 +103,13 @@ open class BarbassQuickWaveActivity : ActivityPlugin("BarbassQuickWave",false, f if (createTeam(teamLeader)){ players.forEach { removeQuickQue(it.player) } - val session = teamLeader.baSession + val session = getBASession(teamLeader) val team = session?.team ?: return players.forEachIndexed { index, wrapper -> wrapper.let { playerWrapper -> if (wrapper.player != teamLeader) { - playerWrapper.player.baSession = session + setBASession(playerWrapper.player,session) team.addPlayer(playerWrapper.player) } playerWrapper.role?.let { role -> diff --git a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt b/Server/src/main/content/minigame/barbassault/lobby/BATeam.kt similarity index 89% rename from Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt rename to Server/src/main/content/minigame/barbassault/lobby/BATeam.kt index 8b2fad790..8ce992f5a 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BarbTeam.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BATeam.kt @@ -1,12 +1,13 @@ package content.minigame.barbassault.lobby import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.BarbassaultActivity +import content.minigame.barbassault.BAActivity import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.BarbassaultState -import content.minigame.barbassault.baSession -import content.minigame.barbassault.getBarbLevels -import content.minigame.barbassault.getBarbWave +import content.minigame.barbassault.getBALevels +import content.minigame.barbassault.getBASession +import content.minigame.barbassault.getBAWave +import content.minigame.barbassault.setBASession import core.api.sendMessage import core.game.node.entity.player.Player import core.game.world.map.Location @@ -14,10 +15,10 @@ import core.game.world.map.Location data class PartySlot( val index: Int, val player: Player, var role: BarbRole? = null ) data class PendingRecruit( var player: Player, var role: BarbRole? = null,var accept:Boolean = false ) { fun roleLevel(): Int = when (role) { - BarbRole.ATTACKER -> player.getBarbLevels().atk - BarbRole.COLLECTOR -> player.getBarbLevels().col - BarbRole.DEFENDER -> player.getBarbLevels().def - BarbRole.HEALER -> player.getBarbLevels().heal + BarbRole.ATTACKER -> getBALevels(player).atk + BarbRole.COLLECTOR -> getBALevels(player).col + BarbRole.DEFENDER -> getBALevels(player).def + BarbRole.HEALER -> getBALevels(player).heal null -> 1 } } @@ -35,7 +36,7 @@ class BarbTeam(val session: BarbassaultSession, leader: Player) { init { slots[LEADER_SLOT] = PartySlot(LEADER_SLOT, leader) - wave = leader.getBarbWave()!! + wave = getBAWave(leader)!! } fun slotOf(player: Player): Int = @@ -130,7 +131,7 @@ data class RoleCounts(val att: Int, val def: Int, val coll: Int, val heal: Int ) object BarbTeamManager { fun createTeam(leader: Player): Boolean { - val session = BarbassaultActivity.createSession(leader) + val session = BAActivity.createSession(leader) // if (session.team != null) return false val team = BarbTeam(session, leader) @@ -157,7 +158,7 @@ object BarbTeamManager { } fun joinTeam(player: Player, role: BarbRole): Boolean { - val session = player.baSession ?: return false + val session = getBASession(player) ?: return false val team = session.team team.recruit = null if (!team.addPlayer(player)) { @@ -174,14 +175,14 @@ object BarbTeamManager { } fun abandonTeam(player: Player) { - val session = player.baSession ?: return + val session = getBASession(player) ?: return val team = session.team if (team.isLeader(player)) { disbandTeam(session) return } team.removePlayer(player) - player.baSession = null + setBASession(player,null) updateCurrentTeam(player) updateTeam(team) //session.cancleStartingPhase() diff --git a/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt index 65d029fa5..8391c9edb 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/CurrentTeamInterface.kt @@ -1,7 +1,7 @@ package content.minigame.barbassault.lobby import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.baSession +import content.minigame.barbassault.getBASession import content.minigame.barbassault.lobby.CurrentTeam.ROLE_MODEL_MAP import content.minigame.barbassault.lobby.CurrentTeam.modelZoom import core.api.setInterfaceModel @@ -37,7 +37,7 @@ class CurrentTeamInterface : ComponentPlugin() { } } fun updateCurrentTeam(player: Player) { - val team = player.baSession?.team + val team = getBASession(player)?.team for (slotIndex in 0 until BarbTeam.MAX_SLOTS) { val uiSlot = CurrentTeam.team[slotIndex] diff --git a/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt index 34ded1f37..cd797e1d4 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt @@ -1,7 +1,8 @@ package content.minigame.barbassault.lobby import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.baSession +import content.minigame.barbassault.getBASession +import content.minigame.barbassault.setBASession import core.api.* import core.game.component.Component import core.game.component.ComponentDefinition @@ -16,7 +17,7 @@ class RoleSelectInterface : ComponentPlugin() { super.open(player, component) var isopen = true player ?: return - val team = player.baSession?.team; + val team = getBASession(player)?.team; if (team != null) { team.updateRoleAvailabilityFor(player) } component?.setCloseEvent { player, c -> @@ -26,13 +27,13 @@ class RoleSelectInterface : ComponentPlugin() { isopen = false closeInterface(leader) //if team.recruit not on team, team.recruit?.player?.baSession = null - team.recruit?.player?.baSession = null + setBASession(team.recruit!!.player,null) team.recruit = null } return@setCloseEvent true } - val leaderData = player.baSession?.team?.getLeader() ?: run { + val leaderData = getBASession(player)?.team?.getLeader() ?: run { player.sendMessage("No leader found for your team.") return } @@ -49,7 +50,7 @@ class RoleSelectInterface : ComponentPlugin() { override fun handle(player: Player?, component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int): Boolean { if (player == null) return true - val team = player.baSession?.team; + val team = getBASession(player)?.team; val pending = team?.recruit ?: return true var waitingSelected: BarbRole? = null @@ -121,7 +122,7 @@ private fun handleAccept(player: Player){ return } private fun handleDecline(player: Player) { - val leader = player.baSession?.team?.getLeader()?.player + val leader = getBASession(player)?.team?.getLeader()?.player sendMessage(leader!!, "The applicant declined your offer.") closeInterface(player) } From f2ef4d23ff84a59f5b1549eb58e8b175d7cfa28a Mon Sep 17 00:00:00 2001 From: Tooze Date: Thu, 21 May 2026 01:41:54 -0400 Subject: [PATCH 081/123] def Lure food. Persist, runners seek it, remove and adds BAgroundItems. more naming changes --- .../minigame/barbassault/BarbAssault.kt | 29 ++++++++++++-- .../barbassault/arena/BAArenaListener.kt | 40 ++++++++++++++----- ...SessionGroundSpawn.kt => BAGroundSpawn.kt} | 11 ++--- .../minigame/barbassault/arena/BASession.kt | 36 ++++++++++------- .../arena/npcs/PenanceFighterNPC.kt | 1 - .../barbassault/arena/npcs/PenanceHelper.kt | 28 +------------ .../arena/npcs/PenanceRunnerNPC.kt | 2 +- .../barbassault/arena/scenery/EggCannon.kt | 9 +++-- 8 files changed, 92 insertions(+), 64 deletions(-) rename Server/src/main/content/minigame/barbassault/arena/{SessionGroundSpawn.kt => BAGroundSpawn.kt} (74%) diff --git a/Server/src/main/content/minigame/barbassault/BarbAssault.kt b/Server/src/main/content/minigame/barbassault/BarbAssault.kt index 296b75dad..5a18af0b4 100644 --- a/Server/src/main/content/minigame/barbassault/BarbAssault.kt +++ b/Server/src/main/content/minigame/barbassault/BarbAssault.kt @@ -19,8 +19,7 @@ data class BarbAssaultPoints( val atk: Int = 0, val col: Int = 0, val def: Int = data class BarbAssaultLevels(val atk: Int, val col: Int, val def: Int, val heal: Int) { - fun clamped(): BarbAssaultLevels = BarbAssaultLevels( - atk.coerceIn(1, 5), col.coerceIn(1, 5), def.coerceIn(1, 5), heal.coerceIn(1, 5) + fun clamped(): BarbAssaultLevels = BarbAssaultLevels( atk.coerceIn(1, 5), col.coerceIn(1, 5), def.coerceIn(1, 5), heal.coerceIn(1, 5) ) } @@ -56,4 +55,28 @@ val ALL_BARBASS_ITEMS = arrayOf( Item(Items.COLLECTOR_HORN_10560), Item(Items.COLLECTION_BAG_10521),Item(Items.COLLECTION_BAG_10522),Item(Items.COLLECTION_BAG_10523),Item(Items.COLLECTION_BAG_10524),Item(Items.COLLECTION_BAG_10525), Item(Items.BLUE_EGG_10533),Item(Items.RED_EGG_10532),Item(Items.GREEN_EGG_10531), -) \ No newline at end of file +) + +object BAGraphics { + + const val GREEN_LARGE_EXPLOSION_867 = 867 + const val RED_LARGE_EXPLOSION_868 = 868 + const val BLUE_LARGE_EXPLOSION_869 = 869 + + const val GREEN_EGG_BREAK_873 = 873 + const val RED_EGG_BREAK_874 = 874 + const val BLUE_EGG_BREAK_875 = 875 + + const val PENANCE_HEALER_BAD_BREATH_863 = 863 + const val PENANCE_HEALER_GOOD_BREATH_864 = 864 + + const val GREEN_LARGE_EXPLOSION2_876 = 876 + const val RED_EGG_EXPLOSION_975 = 975 + const val GREEN_EGG_PROJECTILE_977 = 977 + const val RED_EGG_PROJECTILE_978 = 978 + const val Blue_EGG_PROJECTILE_978 = 979 + const val YELLOW_EGG_PROJECTILE_980 = 980 + const val STUNN_BIRDYS_981 = 981 + + +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt index a08d3b336..b762a68a9 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt @@ -16,12 +16,18 @@ import core.game.global.action.ClimbActionHandler import core.game.global.action.DropListener import core.game.interaction.IntType import core.game.interaction.InteractionListener +import core.game.interaction.QueueStrength import core.game.node.Node import core.game.node.entity.combat.BattleState import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player +import core.game.node.entity.player.info.LogType +import core.game.node.entity.player.info.PlayerMonitor +import core.game.node.entity.player.info.login.PlayerParser import core.game.node.item.GroundItem +import core.game.node.item.GroundItemManager +import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.GameWorld import core.game.world.GameWorld.Pulser @@ -176,32 +182,48 @@ class BarbassaultArenaListener : InteractionListener { if (session.team.getRoleForPlayer(player) != BarbRole.DEFENDER) { sendMessage(player,"not a Defender") } - session.pickUpGroundItem(player, node as GroundItem) + session.pickUpGroundItem(player, node as BAGroundSpawn) return@on true } on(LureItems, IntType.ITEM, "Drop") { player, node -> - DropListener.drop(player, node.asItem()) val session = getBASession(player) ?: return@on true + val currentCall = (session.roleCalls[BarbRole.DEFENDER] as? BarbassaultSession.DefenderCall)?.required + sendMessage(player,currentCall?.itemId().toString()) + val flag = node.id == currentCall?.itemId() + handleDropItem(player,node,flag) - val gItem = player.getAttribute("droppedItem:${node.id}") - (gItem as SessionGroundSpawn).flag = true - session.BAgroundItems.add(gItem) - - //delete from ground as runner "eats" return@on true } on(EggCannon.ALL_EGGS, IntType.GROUNDITEM, "Take") { player, node -> if (node !is GroundItem) return@on true val session = getBASession(player) ?: return@on true if (session.team.getRoleForPlayer(player) != BarbRole.COLLECTOR) { + //todo find correct message sendMessage(player,"not a collector") } - session.pickUpGroundItem(player,node) - //todo find correct message + session.pickUpGroundItem(player, node as BAGroundSpawn) + return@on true } } + fun handleDropItem(player: Player, node: Node, flag: Boolean? = false): Boolean { + val item = node as? Item ?: return false + queueScript(player, strength = QueueStrength.SOFT) { + val current = player.inventory.get(item.slot) + val session = getBASession(player) ?: return@queueScript stopExecuting(player) + if (current == null || current !== item) { return@queueScript stopExecuting(player) } + if (player.inventory.replace(null, item.slot) !== item) { PlayerMonitor.log(player, LogType.DUPE_ALERT, "Potential exploit attempt when player ${player.name} tried to drop ${item.amount}x ${item.id}. BA session Items"); return@queueScript stopExecuting(player) } + val droppedItem = item.dropItem + val groundItem = BAGroundSpawn(session,60,droppedItem,player.location,flag) + groundItem.init() + // sendMessage(player, session.BAgroundItems.toString()) + setAttribute(player, "droppedItem:${droppedItem.id}", getWorldTicks() + 2) + return@queueScript stopExecuting(player) + } + return true + } + fun playerChangeScenery(player: Player,anim: Int ,node: Node, newSceneryId: Int, pulseDelay: Int = 3, message: String = "") { player.animate(Animation(anim)) diff --git a/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt b/Server/src/main/content/minigame/barbassault/arena/BAGroundSpawn.kt similarity index 74% rename from Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt rename to Server/src/main/content/minigame/barbassault/arena/BAGroundSpawn.kt index 94a2540f0..31a999f28 100644 --- a/Server/src/main/content/minigame/barbassault/arena/SessionGroundSpawn.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAGroundSpawn.kt @@ -6,8 +6,8 @@ import core.game.node.item.Item import core.game.world.GameWorld import core.game.world.map.Location -class SessionGroundSpawn(private var session: BarbassaultSession, private var respawnRate: Int, item: Item?, location: Location?, - var flag: Boolean? = null) : GroundItem(item, location) { +class BAGroundSpawn(private var session: BarbassaultSession, private var respawnRate: Int, item: Item?, location: Location?, + var flag: Boolean? = null) : GroundItem(item, location) { private var active = true private var autoSpawn = true @@ -16,8 +16,9 @@ class SessionGroundSpawn(private var session: BarbassaultSession, private var re } fun init(): GroundItem { - session.BAgroundItems.add(this) - return GroundItemManager.create(this) + val thisGroundItem = GroundItemManager.create(this) + session.BAgroundItems.add(thisGroundItem as BAGroundSpawn) + return thisGroundItem } override fun isActive(): Boolean { @@ -46,7 +47,7 @@ class SessionGroundSpawn(private var session: BarbassaultSession, private var re } GameWorld.Pulser.submit(object : Pulse(respawnRate) { override fun pulse(): Boolean { - GroundItemManager.create(this@SessionGroundSpawn) + GroundItemManager.create(this@BAGroundSpawn) return true } }) diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index 4b48d460e..c6d507c25 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -18,7 +18,6 @@ import core.game.node.entity.Entity import core.game.node.entity.impl.PulseManager import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player -import core.game.node.item.GroundItem import core.game.node.item.GroundItemManager import core.game.node.item.Item import core.game.system.task.Pulse @@ -54,7 +53,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M var currentNPCCount = SpawnCaps(0,0,0,0) val npcTunnel: List = listOf( PenanceNpcTunnel(PenanceType.RUNNER,42,46,0,Direction.SOUTH), PenanceNpcTunnel(PenanceType.HEALER,36,47,0,Direction.SOUTH), PenanceNpcTunnel(PenanceType.FIGHTER,24,47,0,Direction.SOUTH), PenanceNpcTunnel(PenanceType.RANGER,18,46,0,Direction.SOUTH) ) - val BAgroundItems = mutableListOf() + val BAgroundItems = mutableListOf() val arenaSpawnItems: List = listOf(ArenaSpawnItems(Items.HAMMER_2347,location(32,42,0)),ArenaSpawnItems(Items.LOGS_11760,location(30,46,0)),ArenaSpawnItems(Items.LOGS_11760,location(29,47,0))) val eggHopper = EggCannon.EggHopper() @@ -204,24 +203,27 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M val spawnLoc = spawnItem.location val alreadyExists = groundItems.any { it.id == spawnItem.id && it.location == spawnLoc && !it.isRemoved } if (!alreadyExists) { - val thisGroundItem = produceGroundSpawnItem(6,Item(spawnItem.id, 1),spawnLoc) //produceGroundItem(leader, spawnItem.id, 1, spawnLoc).apply { - //sendMessage(leader, "spawned item: $spawnLoc") - BAgroundItems.add(thisGroundItem) + produceGroundSpawnItem(6,Item(spawnItem.id, 1),spawnLoc) } } } - fun pickUpGroundItem(player: Player,node:GroundItem){ - if (!player.inventory.add(node)) { - node.isActive = false - (node as SessionGroundSpawn).isAutoSpawn = false - BAgroundItems.remove(node) - removeGroundItem(node) + fun pickUpGroundItem(player: Player,node:BAGroundSpawn){ + if (player.inventory.add(node)) { + destroyGroundItem(node) return } sendMessage(player,"You don't have enough inventory space to hold that item.") } - fun findClosestLure(target: Location): SessionGroundSpawn? { + + fun destroyGroundItem(node: BAGroundSpawn){ + node.isActive = false + node.isAutoSpawn = false + BAgroundItems.remove(node) + GroundItemManager.destroy(node) + } + + fun findClosestLure(target: Location): BAGroundSpawn? { return BAgroundItems .asSequence() .filter { it.id in LureItems } @@ -379,8 +381,8 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M sessionNpcs.add(npc) return npc } - fun produceGroundSpawnItem(rate:Int,item: Item,location: Location): SessionGroundSpawn { - val thisGroundItem = SessionGroundSpawn(this,rate,item,base.transform(location)) + fun produceGroundSpawnItem(rate:Int,item: Item,location: Location): BAGroundSpawn { + val thisGroundItem = BAGroundSpawn(this,rate,item,base.transform(location)) thisGroundItem.init() return thisGroundItem } @@ -599,9 +601,13 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M STYLE_4("Defensive/","Mithril/Fire"); override val ui: String get() = top } + enum class EggColor(override val ui: String): HasUIText { RED("Red Eggs"), GREEN("Green Eggs"),BLUE("Blue Eggs") } enum class PoisonFood(override val ui: String): HasUIText { TOFU("Pois. Tofu"), WORMS("Pois. Worms"), MEAT("Pois. Meat") } - enum class LureFood(override val ui: String): HasUIText { TOFU("Tofu"), CRACKERS("Crackers"), WORMS("Worms") } + enum class LureFood(override val ui: String) : HasUIText { + TOFU("Tofu"), CRACKERS("Crackers"), WORMS("Worms"); + fun itemId(): Int = when (this) { WORMS -> Items.WORMS_10515; CRACKERS -> Items.CRACKERS_10513; TOFU -> Items.TOFU_10514 } + } class AttackerCall( override val required: AttackerStyle ) : RoleCall() class HealerCall( override val required: PoisonFood ) : RoleCall() class DefenderCall( override val required: LureFood ) : RoleCall() diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt index 2622c0910..975d0d0bd 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt @@ -41,7 +41,6 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { override fun beforeDamageReceived(self: NPC, attacker: Entity, state: BattleState) { val player = attacker as? Player ?: return - if (!player.isArtificial) { state.estimatedHit = BarbAssaultCombat.applyAttackValidation(self, player, state) } diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHelper.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHelper.kt index c6634e555..fa67fcf0c 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHelper.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHelper.kt @@ -1,9 +1,8 @@ package content.minigame.barbassault.arena.npcs -import content.minigame.barbassault.arena.SessionGroundSpawn +import content.minigame.barbassault.arena.BAGroundSpawn import content.minigame.barbassault.getBASession -import core.api.sendMessage import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.node.item.Item @@ -30,7 +29,7 @@ fun dropPenanceEggCluster(killer: Player, npc: NPC? = null) { for (i in eggs.indices) { val tile = tiles[i] - val thisGroundItem = SessionGroundSpawn(session,60,Item(eggs[i],1),tile) + val thisGroundItem = BAGroundSpawn(session,60,Item(eggs[i],1),tile) thisGroundItem.init() } } @@ -110,28 +109,5 @@ fun findClosestNPCIDFromPlayer(player: Player, targetNPC: Int, range: Int = 14): return closest } -object BAGraphics { - - const val GREEN_LARGE_EXPLOSION_867 = 867 - const val RED_LARGE_EXPLOSION_868 = 868 - const val BLUE_LARGE_EXPLOSION_869 = 869 - - const val GREEN_EGG_BREAK_873 = 873 - const val RED_EGG_BREAK_874 = 874 - const val BLUE_EGG_BREAK_875 = 875 - - const val PENANCE_HEALER_BAD_BREATH_863 = 863 - const val PENANCE_HEALER_GOOD_BREATH_864 = 864 - - const val GREEN_LARGE_EXPLOSION2_876 = 876 - const val RED_EGG_EXPLOSION_975 = 975 - const val GREEN_EGG_PROJECTILE_977 = 977 - const val RED_EGG_PROJECTILE_978 = 978 - const val Blue_EGG_PROJECTILE_978 = 979 - const val YELLOW_EGG_PROJECTILE_980 = 980 - const val STUNN_BIRDYS_981 = 981 - - -} diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt index 1507286fd..8d4827411 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt @@ -57,7 +57,7 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { forceWalk(self,groundItem.location ,"DUMB") if (self.location == groundItem.location) { sendChat(self,if (groundItem.flag == true) GOOD_EAT else BAD_EAT) - removeGroundItem(groundItem) + session.destroyGroundItem(groundItem) self.resetWalk() } } diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt index 2bad47aa7..310a314f1 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -1,10 +1,11 @@ package content.minigame.barbassault.arena.scenery +import content.minigame.barbassault.BAGraphics.Blue_EGG_PROJECTILE_978 +import content.minigame.barbassault.BAGraphics.GREEN_EGG_PROJECTILE_977 +import content.minigame.barbassault.BAGraphics.RED_EGG_PROJECTILE_978 +import content.minigame.barbassault.BAGraphics.YELLOW_EGG_PROJECTILE_980 import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.arena.npcs.BAGraphics.Blue_EGG_PROJECTILE_978 -import content.minigame.barbassault.arena.npcs.BAGraphics.GREEN_EGG_PROJECTILE_977 -import content.minigame.barbassault.arena.npcs.BAGraphics.RED_EGG_PROJECTILE_978 -import content.minigame.barbassault.arena.npcs.BAGraphics.YELLOW_EGG_PROJECTILE_980 + import content.minigame.barbassault.arena.npcs.findClosestNPCIDFromPlayer import content.minigame.barbassault.arena.npcs.findClosestTargetNPCIDFromNPC import content.minigame.barbassault.arena.PenanceType From 7e06577110d046b5febb25b6a560f76049335aaf Mon Sep 17 00:00:00 2001 From: Tooze Date: Thu, 21 May 2026 07:30:44 -0400 Subject: [PATCH 082/123] defgear command more readable :D --- Server/src/main/content/minigame/barbassault/BADevHelper.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Server/src/main/content/minigame/barbassault/BADevHelper.kt b/Server/src/main/content/minigame/barbassault/BADevHelper.kt index 6311312ea..9cf1b7800 100644 --- a/Server/src/main/content/minigame/barbassault/BADevHelper.kt +++ b/Server/src/main/content/minigame/barbassault/BADevHelper.kt @@ -3,6 +3,7 @@ package content.minigame.barbassault import content.minigame.barbassault.bots.BABot import content.minigame.barbassault.lobby.BALobby import core.api.* +import core.game.container.impl.EquipmentContainer import core.game.node.item.Item import core.game.system.command.Privilege import core.game.system.command.sets.CommandSet @@ -43,7 +44,7 @@ class BADevHelper : CommandSet(Privilege.ADMIN) { } //nods to the defender guide I found, as "suggested" defender gear. define("defgear"){ player,_-> - player.equipment.replace(Item(954),2) + player.equipment.replace(Item(Items.ROPE_954),EquipmentContainer.SLOT_AMULET) return@define } define("eggloot"){ player,_-> From b361c2b2c10a0663e1f69359b029a92b209e216b Mon Sep 17 00:00:00 2001 From: Tooze Date: Thu, 21 May 2026 08:28:18 -0400 Subject: [PATCH 083/123] Collector Eggs: Check current call Handles eggs --- .../barbassault/arena/BAArenaListener.kt | 62 +++++++++---------- .../minigame/barbassault/arena/BASession.kt | 26 +++++--- .../arena/npcs/PenanceFighterNPC.kt | 4 +- .../arena/npcs/PenanceRangerNPC.kt | 4 +- 4 files changed, 53 insertions(+), 43 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt index b762a68a9..a89f05857 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt @@ -1,8 +1,14 @@ package content.minigame.barbassault.arena + +import content.minigame.barbassault.BAGraphics.BLUE_EGG_BREAK_875 +import content.minigame.barbassault.BAGraphics.GREEN_EGG_BREAK_873 +import content.minigame.barbassault.BAGraphics.RED_EGG_BREAK_874 +import content.minigame.barbassault.BAGraphics.RED_EGG_EXPLOSION_975 import content.minigame.barbassault.BarbRole import content.minigame.barbassault.LureItems import content.minigame.barbassault.arena.BAHornSystem.HornHelper.getHealerHorn +import content.minigame.barbassault.arena.BarbAssEvent.EggCollected import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadEggHopper @@ -13,7 +19,6 @@ import content.minigame.barbassault.getBASession import content.minigame.barbassault.isBARole import core.api.* import core.game.global.action.ClimbActionHandler -import core.game.global.action.DropListener import core.game.interaction.IntType import core.game.interaction.InteractionListener import core.game.interaction.QueueStrength @@ -24,9 +29,7 @@ import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.node.entity.player.info.LogType import core.game.node.entity.player.info.PlayerMonitor -import core.game.node.entity.player.info.login.PlayerParser import core.game.node.item.GroundItem -import core.game.node.item.GroundItemManager import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.GameWorld @@ -34,6 +37,7 @@ import core.game.world.GameWorld.Pulser import core.game.world.map.Direction import core.game.world.map.Location import core.game.world.update.flag.context.Animation +import core.game.world.update.flag.context.Graphics import org.rs09.consts.Items import org.rs09.consts.Scenery @@ -197,15 +201,33 @@ class BarbassaultArenaListener : InteractionListener { on(EggCannon.ALL_EGGS, IntType.GROUNDITEM, "Take") { player, node -> if (node !is GroundItem) return@on true val session = getBASession(player) ?: return@on true - if (session.team.getRoleForPlayer(player) != BarbRole.COLLECTOR) { - //todo find correct message - sendMessage(player,"not a collector") - } - session.pickUpGroundItem(player, node as BAGroundSpawn) + //todo find correct message + if (session.team.getRoleForPlayer(player) != BarbRole.COLLECTOR) { sendMessage(player,"not a collector") ; return@on false } + val currentCall = (session.roleCalls[BarbRole.COLLECTOR] as? BarbassaultSession.CollectorCall)?.required + if (node.id != currentCall?.itemId()){ + handleWrongEgg(player,node) + return@on false + } + val didPickUp = session.pickUpGroundItem(player, node as BAGroundSpawn) + if (!didPickUp) { handleWrongEgg(player,node,false) } + session.eventBus.emit(EggCollected(player,1)) return@on true } } + fun handleWrongEgg(player: Player, groundItem: GroundItem,point: Boolean = true){ + val session = getBASession(player) ?: return + if (point) { session.eventBus.emit(EggCollected(player,-1)) } + impact(player, 5) + val gfx = when (groundItem.id) { + Items.GREEN_EGG_10531 -> GREEN_EGG_BREAK_873 + Items.RED_EGG_10532 -> RED_EGG_BREAK_874 + Items.BLUE_EGG_10533 -> BLUE_EGG_BREAK_875 + else -> 874 + } + Graphics(gfx) + session.destroyGroundItem(groundItem as BAGroundSpawn) + } fun handleDropItem(player: Player, node: Node, flag: Boolean? = false): Boolean { val item = node as? Item ?: return false @@ -266,29 +288,7 @@ class BarbassaultArenaListener : InteractionListener { } } -fun exitMiniGame(player: Player) { - // openOverlay(player,493) // work around to actually close interfaces. - //player.interfaceManager.closeOverlay()//maybe im doing this wrong. - removeTimer(player, "teleblock") - - - val barbassItems = arrayListOf( - - Items.WORMS_10515,Items.CRACKERS_10513,Items.TOFU_10514,Items.LOGS_11760,Items.LOGS_11760,Items.HAMMER_2347,Items.DEFENDER_HORN_10538, //Defender Inv Items - Items.HEALING_VIAL_10546,Items.HEALING_VIAL1_10545,Items.HEALING_VIAL2_10544,Items.HEALING_VIAL3_10543,Items.HEALING_VIAL4_10542, //Healer Inv Items - Items.HEALER_HORN_10526,Items.HEALER_HORN_10527,Items.HEALER_HORN_10528,Items.HEALER_HORN_10529,Items.HEALER_HORN_10530, - Items.POISONED_WORMS_10540,Items.POISONED_TOFU_10539,Items.POISONED_MEAT_10541, - ) - // removeAll(player, barbassItems) - // region.clean - - //todo should probably make sure familiars can't smuggle items out even if they are "not" allowed to be summoned - //(player.familiarManager.familiar as? BurdenBeast)?.container?.removeAll(barbassItems)//just in case someone smuggles a pet in. - //award points, set Tp location to next wave - //or lost game Send back to wave room - -} -object BarbAssaultCombat { +object BACombatValidation { fun resolveAttackerStyle( attacker: Player, state: BattleState ): AttackerStyle? { return when (state.style) { CombatStyle.MELEE -> when (attacker.properties.attackStyle.style) { diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index c6d507c25..c46666e32 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -5,6 +5,12 @@ import content.minigame.barbassault.BA_SESSION_KEY import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BAActivity import content.minigame.barbassault.LureItems +import content.minigame.barbassault.arena.BarbassaultSession.EggColor.BLUE +import content.minigame.barbassault.arena.BarbassaultSession.EggColor.GREEN +import content.minigame.barbassault.arena.BarbassaultSession.EggColor.RED +import content.minigame.barbassault.arena.BarbassaultSession.LureFood.CRACKERS +import content.minigame.barbassault.arena.BarbassaultSession.LureFood.TOFU +import content.minigame.barbassault.arena.BarbassaultSession.LureFood.WORMS import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.GloryHorn import content.minigame.barbassault.getBALevels @@ -208,12 +214,13 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M } } - fun pickUpGroundItem(player: Player,node:BAGroundSpawn){ + fun pickUpGroundItem(player: Player,node:BAGroundSpawn): Boolean { if (player.inventory.add(node)) { destroyGroundItem(node) - return + return true } sendMessage(player,"You don't have enough inventory space to hold that item.") + return false } fun destroyGroundItem(node: BAGroundSpawn){ @@ -602,12 +609,15 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M override val ui: String get() = top } - enum class EggColor(override val ui: String): HasUIText { RED("Red Eggs"), GREEN("Green Eggs"),BLUE("Blue Eggs") } - enum class PoisonFood(override val ui: String): HasUIText { TOFU("Pois. Tofu"), WORMS("Pois. Worms"), MEAT("Pois. Meat") } - enum class LureFood(override val ui: String) : HasUIText { - TOFU("Tofu"), CRACKERS("Crackers"), WORMS("Worms"); - fun itemId(): Int = when (this) { WORMS -> Items.WORMS_10515; CRACKERS -> Items.CRACKERS_10513; TOFU -> Items.TOFU_10514 } - } + enum class EggColor(override val ui: String): HasUIText { RED("Red Eggs"), GREEN("Green Eggs"),BLUE("Blue Eggs"); + fun itemId(): Int = when (this) { RED -> Items.RED_EGG_10532; GREEN -> Items.GREEN_EGG_10531; BLUE -> Items.BLUE_EGG_10533 }} + + enum class PoisonFood(override val ui: String): HasUIText { TOFU("Pois. Tofu"), WORMS("Pois. Worms"), MEAT("Pois. Meat"); + fun itemId(): Int = when (this) { TOFU -> Items.POISONED_TOFU_10539; WORMS -> Items.POISONED_WORMS_10540; MEAT -> Items.POISONED_MEAT_10541 }} + + enum class LureFood(override val ui: String) : HasUIText { TOFU("Tofu"), CRACKERS("Crackers"), WORMS("Worms"); + fun itemId(): Int = when (this) { WORMS -> Items.WORMS_10515; CRACKERS -> Items.CRACKERS_10513; TOFU -> Items.TOFU_10514 }} + class AttackerCall( override val required: AttackerStyle ) : RoleCall() class HealerCall( override val required: PoisonFood ) : RoleCall() class DefenderCall( override val required: LureFood ) : RoleCall() diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt index 975d0d0bd..550c99700 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt @@ -2,7 +2,7 @@ package content.minigame.barbassault.arenas.monsters import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent -import content.minigame.barbassault.arena.BarbAssaultCombat +import content.minigame.barbassault.arena.BACombatValidation import content.minigame.barbassault.arena.npcs.dropPenanceEggCluster import content.minigame.barbassault.getBASession import core.api.* @@ -42,7 +42,7 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { override fun beforeDamageReceived(self: NPC, attacker: Entity, state: BattleState) { val player = attacker as? Player ?: return if (!player.isArtificial) { - state.estimatedHit = BarbAssaultCombat.applyAttackValidation(self, player, state) + state.estimatedHit = BACombatValidation.applyAttackValidation(self, player, state) } } diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt index 2fa766c93..7a10b5b60 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt @@ -2,7 +2,7 @@ package content.minigame.barbassault.arena.npcs import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent -import content.minigame.barbassault.arena.BarbAssaultCombat +import content.minigame.barbassault.arena.BACombatValidation import content.minigame.barbassault.getBASession import core.api.* import core.api.getItemFromEquipment @@ -39,7 +39,7 @@ class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { override fun beforeDamageReceived( self: NPC, attacker: Entity, state: BattleState) { attacker as Player if(!attacker.isArtificial) { - state.estimatedHit = BarbAssaultCombat.applyAttackValidation( self, attacker, state ) + state.estimatedHit = BACombatValidation.applyAttackValidation( self, attacker, state ) } } From 832e52904c8077117a550cfe397b0b5862afe5fc Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 22 May 2026 17:38:00 -0400 Subject: [PATCH 084/123] Pennance Spawns can be delayed by Blocked tunnels --- .../minigame/barbassault/BADevHelper.kt | 4 +- .../barbassault/arena/BAArenaListener.kt | 3 + .../minigame/barbassault/arena/BASession.kt | 80 ++++++++++++------- .../barbassault/arena/WaveDefinition.kt | 20 ++++- 4 files changed, 77 insertions(+), 30 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BADevHelper.kt b/Server/src/main/content/minigame/barbassault/BADevHelper.kt index 9cf1b7800..60a0692dd 100644 --- a/Server/src/main/content/minigame/barbassault/BADevHelper.kt +++ b/Server/src/main/content/minigame/barbassault/BADevHelper.kt @@ -57,11 +57,11 @@ class BADevHelper : CommandSet(Privilege.ADMIN) { return@define } define("spawnwave"){ player,_-> - getBASession(player)?.spawnNpcWave() + getBASession(player)?.forceWaveSpawn() return@define } define("spawnwaveforce"){ player,_-> - getBASession(player)?.spawnNpcWave(true) + getBASession(player)?.forceWaveSpawn(true) return@define } define("babot"){ player,_-> diff --git a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt index a89f05857..f203ca98c 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt @@ -101,13 +101,16 @@ class BarbassaultArenaListener : InteractionListener { } on(Scenery.PENANCE_CAVE_20237, IntType.SCENERY, "block") { player, node -> + //restrict to role if (hasTools(player)) { return@on true } playerChangeScenery(player,5417,node,Scenery.PENANCE_CAVE_20238,4) + getBASession(player)?.setCaveBlocked(node,true) return@on true } on(Scenery.PENANCE_CAVE_20238, IntType.SCENERY, "demolish") { player, node -> playerChangeScenery(player,5418,node,Scenery.PENANCE_CAVE_20239,5) + getBASession(player)?.setCaveBlocked(node,false) return@on true } diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index c46666e32..c0d32f39d 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -20,6 +20,7 @@ import content.minigame.barbassault.getBAWave import content.minigame.barbassault.lobby.* import content.minigame.barbassault.lobby.BALobby.Companion.waveLobbies import core.api.* +import core.game.node.Node import core.game.node.entity.Entity import core.game.node.entity.impl.PulseManager import core.game.node.entity.npc.NPC @@ -43,7 +44,7 @@ import org.rs09.consts.NPCs enum class BarbassaultState { PARTY_CREATION, STARTING, IN_ARENA,FORFEIT, COMPLETE,DEATH, END } -data class PenanceNpcTunnel(val type:PenanceType, val x: Int,val y: Int,val z: Int,val direction: Direction) { fun toLocation(): Location = Location(x, y, z) } +data class PenanceNpcTunnel( val type: PenanceType, val caveLocation: Location, val spawnOffset: Location, val direction: Direction) data class ArenaSpawnItems(val id: Int, val location: Location) class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, MapArea { @@ -57,7 +58,12 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M val sessionNpcs = mutableListOf() var currentNPCCount = SpawnCaps(0,0,0,0) - val npcTunnel: List = listOf( PenanceNpcTunnel(PenanceType.RUNNER,42,46,0,Direction.SOUTH), PenanceNpcTunnel(PenanceType.HEALER,36,47,0,Direction.SOUTH), PenanceNpcTunnel(PenanceType.FIGHTER,24,47,0,Direction.SOUTH), PenanceNpcTunnel(PenanceType.RANGER,18,46,0,Direction.SOUTH) ) + var npcTunnel: List = listOf( + PenanceNpcTunnel(PenanceType.RUNNER,location(0,0,0),location(42,46,0),Direction.SOUTH), + PenanceNpcTunnel(PenanceType.HEALER,location(0,0,0),location(36,47,0),Direction.SOUTH), + PenanceNpcTunnel(PenanceType.FIGHTER,location(0,0,0),location(24,47,0),Direction.SOUTH), + PenanceNpcTunnel(PenanceType.RANGER,location(0,0,0),location(18,46,0),Direction.SOUTH) ) + private val caveBlocked = mutableMapOf() val BAgroundItems = mutableListOf() val arenaSpawnItems: List = listOf(ArenaSpawnItems(Items.HAMMER_2347,location(32,42,0)),ArenaSpawnItems(Items.LOGS_11760,location(30,46,0)),ArenaSpawnItems(Items.LOGS_11760,location(29,47,0))) @@ -65,6 +71,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M val eggHopper = EggCannon.EggHopper() var eggCannonNpcWest: NPC? = null var eggCannonNpcEast: NPC? = null + val scoreManager = BarbScoreManager() val eventBus = BarbAssEventBus() @@ -72,6 +79,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M private var countdownPulse: Pulse? = null + fun beginStartingPhase(quickStart: Boolean = false) { if (state != BarbassaultState.PARTY_CREATION) return state = BarbassaultState.STARTING @@ -179,26 +187,40 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M tracker.healerStats.wrongPoisonUsed++ } } + fun setCaveBlocked(node: Node, blocked: Boolean) { + val tunnel = npcTunnel.firstOrNull { t -> base.transform(t.caveLocation) == node.location } ?: return - fun spawnNpcWave(force: Boolean = false) { - val caps = currentWaveDefinition.caps - val npcIds = currentWaveDefinition.npcIds - - tryPenanceSpawn(PenanceType.RANGER, currentNPCCount.rangers, caps.rangers, npcIds, force) { currentNPCCount.rangers++ } - tryPenanceSpawn(PenanceType.FIGHTER, currentNPCCount.fighters, caps.fighters, npcIds,force) { currentNPCCount.fighters++ } - tryPenanceSpawn(PenanceType.RUNNER, currentNPCCount.runners, caps.runners,npcIds,force) { currentNPCCount.runners++ } - tryPenanceSpawn(PenanceType.HEALER, currentNPCCount.healers, caps.healers, npcIds,force) { currentNPCCount.healers++ } + if (blocked) { + caveBlocked[tunnel.type] = true + } else { + caveBlocked.remove(tunnel.type) + } } - fun tryPenanceSpawn(type: PenanceType,current: Int,cap: Int,npcIds: Map, force: Boolean, increment: () -> Unit) { - if (!force && current >= cap) { return } - val npcId = npcIds[type] ?: return - val spawn = npcTunnel.firstOrNull { it.type == type } ?: return + fun isCaveBlocked(type: PenanceType): Boolean { + return caveBlocked[type] == true + } + fun forceWaveSpawn(force: Boolean = false){ + tryPenanceSpawn(PenanceType.RANGER,force) + tryPenanceSpawn(PenanceType.FIGHTER,force) + tryPenanceSpawn(PenanceType.RUNNER,force) + tryPenanceSpawn(PenanceType.HEALER,force) + } + fun tryPenanceSpawn(type: PenanceType, force: Boolean = false): Boolean { + val current = currentNPCCount[type] + val cap = currentWaveDefinition.caps[type] + val npcId = currentWaveDefinition.npcIds[type] ?: return false - var thisNpc = sessionNPCSpawn(npcId, location(30,31,0), spawn.direction) - thisNpc?.location = base.transform(spawn.toLocation()) - thisNpc?.setAttribute(BA_SESSION_KEY, this) - increment() + if (!force && current >= cap) return false + + val spawn = npcTunnel.firstOrNull { it.type == type } ?: return false + val npc = sessionNPCSpawn(npcId, location(30, 31, 0), spawn.direction) + + npc?.location = base.transform(spawn.spawnOffset) + npc?.setAttribute(BA_SESSION_KEY, this) + + currentNPCCount[type]++ + return isCaveBlocked(type) } fun tryGroundItemSpawn(){ @@ -274,16 +296,21 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M private var roleCallTicks = baseCallTicks private var baseSpawnTicks = secondsToTicks(6) - private var waveSpawnTicks = baseSpawnTicks + private var waveSpawnTicks = SpawnCaps( baseSpawnTicks, baseSpawnTicks, baseSpawnTicks, baseSpawnTicks ) private var groundSpawnTicks = baseSpawnTicks override fun pulse(): Boolean { when(state){ BarbassaultState.IN_ARENA -> { eventBus.processEvents() - roleCallTicks--; waveSpawnTicks--; groundSpawnTicks-- - if (roleCallTicks <= 0) { rollNewRoleCalls(); roleCallTicks = baseCallTicks } - if (waveSpawnTicks <= 0 ){ spawnNpcWave(); waveSpawnTicks = baseSpawnTicks } + roleCallTicks--; groundSpawnTicks-- + if (roleCallTicks <= 0) { rollNewRoleCalls(); roleCallTicks = baseCallTicks } + + for (type in PenanceType.values()) { + waveSpawnTicks[type]-- + if (waveSpawnTicks[type] <= 0) { waveSpawnTicks[type] = if (tryPenanceSpawn(type)) baseSpawnTicks * 2 else baseSpawnTicks + } + } } BarbassaultState.FORFEIT -> { endGame("left"); return true } @@ -356,9 +383,8 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M override fun areaEnter(entity: Entity) { - log(this::class.java, Log.FINE, "ENTERED Barbassault Arena") - val player = entity as? Player ?: return + log(this::class.java, Log.FINE, "ENTERED Barbassault Arena") val waveNum = getBAWave(player) val wornIconId = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id val interfaceId = getIconInterfaceId(wornIconId ?: -1) @@ -372,10 +398,10 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M } override fun areaLeave(entity: Entity, logout: Boolean) { - log(this::class.java, Log.FINE, "LEFT Barbassault Arena") super.areaLeave(entity, logout) - var player = entity as Player - //exitMiniGame(player) + val player = entity as? Player ?: return + log(this::class.java, Log.FINE, "LEFT Barbassault Arena") + removeTimer(player, "teleblock") zone.cleanItems(player,ALL_BARBASS_ITEMS) clearLogoutListener(player, "ba-logout") diff --git a/Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt b/Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt index 81b66f083..04e411653 100644 --- a/Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt +++ b/Server/src/main/content/minigame/barbassault/arena/WaveDefinition.kt @@ -12,7 +12,25 @@ fun getWaveDefinition(index: Int): WaveDefinition { data class WaveDefinition( val caps: SpawnCaps, val npcIds: Map ) enum class PenanceType { HEALER, RUNNER, FIGHTER, RANGER, QUEEN } -data class SpawnCaps(var rangers: Int, var fighters: Int, var runners: Int, var healers: Int) +data class SpawnCaps(var rangers: Int, var fighters: Int, var runners: Int, var healers: Int) { + operator fun get(type: PenanceType): Int = + when (type) { + PenanceType.RANGER -> rangers + PenanceType.FIGHTER -> fighters + PenanceType.RUNNER -> runners + PenanceType.HEALER -> healers + else -> {0} + } + operator fun set(type: PenanceType, value: Int) { + when (type) { + PenanceType.RANGER -> rangers = value + PenanceType.FIGHTER -> fighters = value + PenanceType.RUNNER -> runners = value + PenanceType.HEALER -> healers = value + else -> {0} + } + } +} private val waves = listOf( WaveDefinition( //Wave tut SpawnCaps(rangers = 1, fighters = 1, runners = 1, healers = 1), From 34b4eb72235ae46281bfc9fd982877196eb534e3 Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 22 May 2026 20:51:36 -0400 Subject: [PATCH 085/123] PenanceNpcTunnel.caveLocation base location set. --- .../minigame/barbassault/arena/BASession.kt | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index c0d32f39d..545554e83 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -5,18 +5,11 @@ import content.minigame.barbassault.BA_SESSION_KEY import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BAActivity import content.minigame.barbassault.LureItems -import content.minigame.barbassault.arena.BarbassaultSession.EggColor.BLUE -import content.minigame.barbassault.arena.BarbassaultSession.EggColor.GREEN -import content.minigame.barbassault.arena.BarbassaultSession.EggColor.RED -import content.minigame.barbassault.arena.BarbassaultSession.LureFood.CRACKERS -import content.minigame.barbassault.arena.BarbassaultSession.LureFood.TOFU -import content.minigame.barbassault.arena.BarbassaultSession.LureFood.WORMS import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.GloryHorn import content.minigame.barbassault.getBALevels import content.minigame.barbassault.getBASession import content.minigame.barbassault.getBAWave - import content.minigame.barbassault.lobby.* import content.minigame.barbassault.lobby.BALobby.Companion.waveLobbies import core.api.* @@ -59,10 +52,10 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M val sessionNpcs = mutableListOf() var currentNPCCount = SpawnCaps(0,0,0,0) var npcTunnel: List = listOf( - PenanceNpcTunnel(PenanceType.RUNNER,location(0,0,0),location(42,46,0),Direction.SOUTH), - PenanceNpcTunnel(PenanceType.HEALER,location(0,0,0),location(36,47,0),Direction.SOUTH), - PenanceNpcTunnel(PenanceType.FIGHTER,location(0,0,0),location(24,47,0),Direction.SOUTH), - PenanceNpcTunnel(PenanceType.RANGER,location(0,0,0),location(18,46,0),Direction.SOUTH) ) + PenanceNpcTunnel(PenanceType.RANGER,location(17,47,0),location(18,46,0),Direction.SOUTH), + PenanceNpcTunnel(PenanceType.FIGHTER,location(23,48,0),location(24,47,0),Direction.SOUTH), + PenanceNpcTunnel(PenanceType.HEALER,location(35,48,0),location(36,47,0),Direction.SOUTH), + PenanceNpcTunnel(PenanceType.RUNNER,location(41,47,0),location(42,46,0),Direction.SOUTH)) private val caveBlocked = mutableMapOf() val BAgroundItems = mutableListOf() From 36811828e0787d1d28dc60efa9d5c63d4a07a1b0 Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 22 May 2026 22:14:15 -0400 Subject: [PATCH 086/123] small changes --- .../minigame/barbassault/arena/BASession.kt | 163 +++++------------- .../minigame/barbassault/lobby/BATeam.kt | 4 +- 2 files changed, 44 insertions(+), 123 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index 545554e83..2d57312f3 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -51,6 +51,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M val sessionNpcs = mutableListOf() var currentNPCCount = SpawnCaps(0,0,0,0) + var npcTunnel: List = listOf( PenanceNpcTunnel(PenanceType.RANGER,location(17,47,0),location(18,46,0),Direction.SOUTH), PenanceNpcTunnel(PenanceType.FIGHTER,location(23,48,0),location(24,47,0),Direction.SOUTH), @@ -92,13 +93,10 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M region.setMusicId(ASSAULT_AND_BATTERY_604) for (player in team.allPlayers()) { - zone.enter(player) - val pRole = getBASession(player)?.team?.getRoleForPlayer(player) equipBARoleIcon(player, pRole!!) - player.properties.teleportLocation = team.spawnLocationFor(player) //base.transform(36, 24, 0) + player.properties.teleportLocation = team.spawnLocationFor(player) giveRoleItems(player,pRole) - registerLogoutListener(player, "ba-logout") { handleLogout(player) } } @@ -153,7 +151,8 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M Pulser.submit(countdownPulse!!) } - private fun InitEvents(){ + + private fun InitEvents() { eventBus.register(BarbAssEvent.NPCDied::class.java) { event -> val tracker = scoreManager.trackerFor(event.killer) val npcRoleType = event.npc.getAttribute("barbass-role") @@ -180,6 +179,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M tracker.healerStats.wrongPoisonUsed++ } } + fun setCaveBlocked(node: Node, blocked: Boolean) { val tunnel = npcTunnel.firstOrNull { t -> base.transform(t.caveLocation) == node.location } ?: return @@ -193,12 +193,14 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M fun isCaveBlocked(type: PenanceType): Boolean { return caveBlocked[type] == true } + fun forceWaveSpawn(force: Boolean = false){ tryPenanceSpawn(PenanceType.RANGER,force) tryPenanceSpawn(PenanceType.FIGHTER,force) tryPenanceSpawn(PenanceType.RUNNER,force) tryPenanceSpawn(PenanceType.HEALER,force) } + fun tryPenanceSpawn(type: PenanceType, force: Boolean = false): Boolean { val current = currentNPCCount[type] val cap = currentWaveDefinition.caps[type] @@ -217,7 +219,6 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M } fun tryGroundItemSpawn(){ - val leader = team.getLeader()?.player ?: return val groundItems = GroundItemManager.getItems() arenaSpawnItems.forEach { spawnItem -> @@ -277,9 +278,8 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M closeInterface(player) openOverlay(player, 256) //https://youtu.be/MpYZG3qkFUA?t=387 - //todo dialogbox message not sendMessage - //Dialogbox: " The game ended because on of your team-mates exited early. - sendMessage(player,"The game ended early because one of your team-mates $endReason.") + //todo do not send message to person who exited the game. + player.dialogueInterpreter.sendDialogue("The game ended early because one of your team-mates $endReason.") BarbTeamManager.updateTeam(getBASession(player)?.team!!) } } @@ -290,13 +290,13 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M private var baseSpawnTicks = secondsToTicks(6) private var waveSpawnTicks = SpawnCaps( baseSpawnTicks, baseSpawnTicks, baseSpawnTicks, baseSpawnTicks ) - private var groundSpawnTicks = baseSpawnTicks + override fun pulse(): Boolean { when(state){ BarbassaultState.IN_ARENA -> { eventBus.processEvents() - roleCallTicks--; groundSpawnTicks-- + roleCallTicks-- if (roleCallTicks <= 0) { rollNewRoleCalls(); roleCallTicks = baseCallTicks } for (type in PenanceType.values()) { @@ -306,7 +306,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M } } - BarbassaultState.FORFEIT -> { endGame("left"); return true } + BarbassaultState.FORFEIT -> { endGame("exited early."); return true } BarbassaultState.COMPLETE -> { log(this.javaClass, Log.FINE,state.toString()) BALobby.TeamToLobby(team,team.wave+1) @@ -319,7 +319,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M } return true // we do not have auto start next wave in 2009 } - BarbassaultState.DEATH -> { endGame("died"); return true } + BarbassaultState.DEATH -> { endGame("died."); return true } BarbassaultState.END -> return true else -> return false } @@ -332,8 +332,6 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M base = region.baseLocation zone.zoneType = ZoneType.SAFE.id region.regionZones.add(RegionZone(activity!!, region.borders)) //DONT FORGET THIS STUPID! - - //activity?.zoneType = ZoneType.SAFE.id region.toggleMulticombat() spawnEggCannons() zone.register(getRegionBorders(region.id)) @@ -355,34 +353,22 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M player.locks.unlockTeleport() player.location = waveLobbies[team.wave].randomWalkableLoc - //player.location = Location.create(2593, 5264, 0) - if (team.allPlayers().isEmpty()) { // might be redundant +/* if (team.allPlayers().isEmpty()) { // might be redundant player.properties.teleportLocation = Location.create(2593, 5264, 0) endSession() - } + }*/ } - override fun defineAreaBorders(): Array { - return arrayOf() - } - - override fun getRestrictions(): Array = arrayOf( - ZoneRestriction.CANNON, - ZoneRestriction.FIRES, - ZoneRestriction.RANDOM_EVENTS, - ZoneRestriction.TELEPORT - ) - + override fun defineAreaBorders(): Array = arrayOf() + override fun getRestrictions(): Array = arrayOf( ZoneRestriction.CANNON, ZoneRestriction.FIRES, ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.TELEPORT ) override fun areaEnter(entity: Entity) { val player = entity as? Player ?: return log(this::class.java, Log.FINE, "ENTERED Barbassault Arena") val waveNum = getBAWave(player) - val wornIconId = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id - val interfaceId = getIconInterfaceId(wornIconId ?: -1) + val interfaceId = getRoleInterfaceId(getBASession(player)!!.team.getRoleForPlayer(player)) player.fullRestore() - //waveLobbies[waveNum].randomWalkableLoc //todo consolidate logic. interfaceId?.let { sendMessage(player, "----- Wave: $waveNum -----") @@ -401,114 +387,52 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M player.fullRestore() destroyArena() } - fun sessionNPCSpawn(id: Int, location: Location, direction: Direction, vararg objects: Any): NPC? { - val npc = NPC.create(id, base.transform(location), direction, *objects) - npc.init() - sessionNpcs.add(npc) - return npc - } - fun produceGroundSpawnItem(rate:Int,item: Item,location: Location): BAGroundSpawn { - val thisGroundItem = BAGroundSpawn(this,rate,item,base.transform(location)) - thisGroundItem.init() - return thisGroundItem - } + fun sessionNPCSpawn(id: Int, location: Location, direction: Direction, vararg objects: Any): NPC? = NPC.create(id, base.transform(location), direction, *objects)?.also { it.init(); sessionNpcs.add(it) } + fun produceGroundSpawnItem(rate:Int,item: Item,location: Location): BAGroundSpawn = BAGroundSpawn(this, rate, item, base.transform(location)).also { it.init() } fun spawnEggCannons() { eggCannonNpcWest = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(21, 34, 0), Direction.NORTH ) - //eggCannonNpcWest?. if (team.wave == 10) return eggCannonNpcEast = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(40, 34, 0), Direction.NORTH ) } fun clearGroundItems(){ - //BAgroundItems - //thisGroundItem.isActive = false BAgroundItems.forEach { item -> item.isActive = false item.setRespawnRate(-1) item.isAutoSpawn = false GroundItemManager.destroy(item) } - } private fun giveRoleItems(player: Player, role: BarbRole) { + val attackerHorns = intArrayOf(Items.ATTACKER_HORN_10516,Items.ATTACKER_HORN_10517,Items.ATTACKER_HORN_10518,Items.ATTACKER_HORN_10519,Items.ATTACKER_HORN_10520) + val healerHorns = intArrayOf(Items.HEALER_HORN_10526,Items.HEALER_HORN_10527,Items.HEALER_HORN_10528,Items.HEALER_HORN_10529,Items.HEALER_HORN_10530) + val collectorBags = intArrayOf(Items.COLLECTION_BAG_10521,Items.COLLECTION_BAG_10522,Items.COLLECTION_BAG_10523,Items.COLLECTION_BAG_10524,Items.COLLECTION_BAG_10525) + fun levelIndex(level: Int): Int { return (level.coerceIn(1, 5) - 1) } + val levels = getBALevels(player) - val items = when (role) { - BarbRole.ATTACKER -> when (levels.atk) { - 1 -> intArrayOf(Items.ATTACKER_HORN_10516) - 2 -> intArrayOf(Items.ATTACKER_HORN_10517) - 3 -> intArrayOf(Items.ATTACKER_HORN_10518) - 4 -> intArrayOf(Items.ATTACKER_HORN_10519) - 5 -> intArrayOf(Items.ATTACKER_HORN_10520) - else -> intArrayOf(Items.ATTACKER_HORN_10516) - } - - BarbRole.DEFENDER -> when (levels.def) { - - else -> intArrayOf(Items.DEFENDER_HORN_10538) - } - - BarbRole.HEALER -> when (levels.heal) { - 1 -> intArrayOf(Items.HEALER_HORN_10526) - 2 -> intArrayOf(Items.HEALER_HORN_10527) - 3 -> intArrayOf(Items.HEALER_HORN_10528) - 4 -> intArrayOf(Items.HEALER_HORN_10529) - 5 -> intArrayOf(Items.HEALER_HORN_10530) - else -> intArrayOf(Items.HEALER_HORN_10526) - } - - BarbRole.COLLECTOR -> when (levels.col) { - 1 -> intArrayOf(Items.COLLECTION_BAG_10521,Items.COLLECTOR_HORN_10560) - 2 -> intArrayOf(Items.COLLECTION_BAG_10522,Items.COLLECTOR_HORN_10560) - 3 -> intArrayOf(Items.COLLECTION_BAG_10523,Items.COLLECTOR_HORN_10560) - 4 -> intArrayOf(Items.COLLECTION_BAG_10524,Items.COLLECTOR_HORN_10560) - 5 -> intArrayOf(Items.COLLECTION_BAG_10525,Items.COLLECTOR_HORN_10560) - else -> intArrayOf(Items.COLLECTION_BAG_10521,Items.COLLECTOR_HORN_10560) - } + BarbRole.ATTACKER -> intArrayOf( attackerHorns[levelIndex(levels.atk)] ) + BarbRole.DEFENDER -> intArrayOf( Items.DEFENDER_HORN_10538 ) + BarbRole.HEALER -> intArrayOf( healerHorns[levelIndex(levels.heal)] ) + BarbRole.COLLECTOR -> intArrayOf( collectorBags[levelIndex(levels.col)], Items.COLLECTOR_HORN_10560 ) } - items.forEach { id -> - player.inventory.add(Item(id, 1)) - } + items.forEach { player.inventory.add(Item(it, 1)) } } + private fun equipBARoleIcon(player: Player, role: BarbRole) { val BA_ROLE_CAPE = mapOf( BarbRole.ATTACKER to 10556, BarbRole.DEFENDER to 10558, BarbRole.COLLECTOR to 10557, BarbRole.HEALER to 10559 ) val itemId = BA_ROLE_CAPE[role] ?: return player.equipment.add(Item(itemId),true,false) - //player.getEquipment().add(Item(itemId), true) - } - private fun getIconInterfaceId(itemId: Int): Int? { - return when (itemId) { - ATTACKER_ICON -> Components.BARBASSAULT_OVER_ATT_485 - COLLECTOR_ICON -> Components.BARBASSAULT_OVER_COL_486 - DEFENDER_ICON -> Components.BARBASSAULT_OVER_DEF_487 - HEALER_ICON -> Components.BARBASSAULT_OVER_HEAL_488 - else -> null - } } - private fun broadcast(message: String) { - team.allPlayers().forEach { - sendMessage(it, message) - } - } - fun broadcastToRole(role: BarbRole, message: String) { - team.getPlayersByRole(role).forEach { - sendMessage(it, message) - } - } - fun updateBarbHealerIfaceHPOfPlayer(player: Player){ - team.getPlayersByRole(BarbRole.HEALER).forEach { - HealerIfaceHPUpdatePlayer(it, player) - } - } - fun alertHealers(player:Player){ - team.getPlayersByRole(BarbRole.HEALER).forEach { - HealerIfaceMedicHelp(it,player) - } - } + private fun broadcast(message: String) = team.allPlayers().forEach { sendMessage(it, message) } + fun broadcastToRole(role: BarbRole, message: String) = team.getPlayersByRole(role).forEach { sendMessage(it, message) } + + fun updateBarbHealerIfaceHPOfPlayer(player: Player) = team.getPlayersByRole(BarbRole.HEALER).forEach { HealerIfaceHPUpdatePlayer(it, player)} + fun alertHealers(player:Player) = team.getPlayersByRole(BarbRole.HEALER).forEach { HealerIfaceMedicHelp(it,player) } fun updateAttackerUI(player: Player, call: AttackerCall) { val style = call.called @@ -534,7 +458,6 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M when (role) { BarbRole.ATTACKER -> { - //make sure wave is using wring childid. updateAttackerUI(player, call as AttackerCall) setInterfaceText(player, "Wave $wave" , Components.BARBASSAULT_OVER_ATT_485, 2) setInterfaceText(player, call.crossRoleDisplay(), Components.BARBASSAULT_OVER_ATT_485, 7) @@ -557,8 +480,8 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M } } } - // may need to use this instead of my current method of, entering area, set icon -> set overlay based on icon - fun getRoleInterface(role: BarbRole): Int? { + + fun getRoleInterfaceId(role: BarbRole): Int? { return when (role) { BarbRole.ATTACKER -> Components.BARBASSAULT_OVER_ATT_485 BarbRole.COLLECTOR -> Components.BARBASSAULT_OVER_COL_486 @@ -566,6 +489,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M BarbRole.HEALER -> Components.BARBASSAULT_OVER_HEAL_488 } } + fun rollNewRoleCalls() { roleCalls[BarbRole.ATTACKER] = AttackerCall(AttackerStyle.values().random()) roleCalls[BarbRole.HEALER] = HealerCall(PoisonFood.values().random()) @@ -594,12 +518,9 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M } } - private val hornTargets = mapOf( - BarbRole.COLLECTOR to BarbRole.ATTACKER, - BarbRole.ATTACKER to BarbRole.COLLECTOR , - BarbRole.HEALER to BarbRole.DEFENDER, - BarbRole.DEFENDER to BarbRole.HEALER - ) + private val hornTargets = mapOf( BarbRole.COLLECTOR to BarbRole.ATTACKER, BarbRole.ATTACKER to BarbRole.COLLECTOR , + BarbRole.HEALER to BarbRole.DEFENDER, BarbRole.DEFENDER to BarbRole.HEALER ) + fun onHornCall(player: Player, calledValue: Any) { val callerRole = team.getRoleForPlayer(player) ?: return val targetRole = hornTargets[callerRole] ?: return diff --git a/Server/src/main/content/minigame/barbassault/lobby/BATeam.kt b/Server/src/main/content/minigame/barbassault/lobby/BATeam.kt index 8ce992f5a..f3539fca4 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BATeam.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BATeam.kt @@ -85,9 +85,9 @@ class BarbTeam(val session: BarbassaultSession, leader: Player) { return slots.filterNotNull().map { it.player }.filter { getRoleForPlayer(it) == barbRole } } - fun getRoleForPlayer(player: Player): BarbRole? { + fun getRoleForPlayer(player: Player): BarbRole { val idx = slotOf(player) - return slots.getOrNull(idx)?.role + return slots.getOrNull(idx)?.role!! } fun getLeader(): PartySlot? { From ed44e5bde9fd91a6768474f7386f9874b058c093 Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 22 May 2026 23:15:17 -0400 Subject: [PATCH 087/123] BATeam small changes --- .../minigame/barbassault/lobby/BATeam.kt | 76 +++++-------------- 1 file changed, 20 insertions(+), 56 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/lobby/BATeam.kt b/Server/src/main/content/minigame/barbassault/lobby/BATeam.kt index f3539fca4..0dec2ca23 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BATeam.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BATeam.kt @@ -34,28 +34,15 @@ class BarbTeam(val session: BarbassaultSession, leader: Player) { var recruit: PendingRecruit? = null private val slots: Array = arrayOfNulls(MAX_SLOTS) - init { - slots[LEADER_SLOT] = PartySlot(LEADER_SLOT, leader) - wave = getBAWave(leader)!! - } - - fun slotOf(player: Player): Int = - slots.indexOfFirst { it?.player == player } + init { slots[LEADER_SLOT] = PartySlot(LEADER_SLOT, leader); wave = getBAWave(leader)!! } + fun slotOf(player: Player): Int = slots.indexOfFirst { it?.player == player } fun getSlot(index: Int): PartySlot? = slots.getOrNull(index) - fun allPlayers(): List = slots.filterNotNull().map { it.player } - fun isLeader(player: Player): Boolean = slotOf(player) == LEADER_SLOT - fun isHealer(player: Player): Boolean = getRoleForPlayer(player) == BarbRole.HEALER - fun isFull(): Boolean = slots.all { it != null } - fun addRecruit(player: Player): Boolean { - recruit = PendingRecruit(player) - return true - } fun addPlayer(player: Player): Boolean { if (slotOf(player) != -1) return false @@ -81,63 +68,43 @@ class BarbTeam(val session: BarbassaultSession, leader: Player) { return true } - fun getPlayersByRole(barbRole: BarbRole): List { - return slots.filterNotNull().map { it.player }.filter { getRoleForPlayer(it) == barbRole } - } + fun getPlayersByRole(barbRole: BarbRole): List = slots.filterNotNull().map { it.player }.filter { getRoleForPlayer(it) == barbRole } + fun getRoleForPlayer(player: Player): BarbRole = slots.getOrNull(slotOf(player))?.role!! + fun getLeader(): PartySlot? = slots[0] - fun getRoleForPlayer(player: Player): BarbRole { - val idx = slotOf(player) - return slots.getOrNull(idx)?.role!! - } - - fun getLeader(): PartySlot? { - return slots[0] - } fun roleCounts(): RoleCounts { - var att = 0 - var def = 0 - var coll = 0 - var heal = 0 + var counts = RoleCounts(0, 0, 0, 0) slots.forEach { slot -> when (slot?.role) { - BarbRole.ATTACKER -> att++ - BarbRole.DEFENDER -> def++ - BarbRole.COLLECTOR -> coll++ - BarbRole.HEALER -> heal++ - null -> {} + BarbRole.ATTACKER -> counts.att++ + BarbRole.DEFENDER -> counts.def++ + BarbRole.COLLECTOR -> counts.coll++ + BarbRole.HEALER -> counts.heal++ + null -> null } } - return RoleCounts(att, def, coll, heal) + return RoleCounts(counts.att, counts.def, counts.coll, counts.heal) } - fun updateRoleAvailabilityFor(player: Player) { - updateRoleAvailability(roleCounts(),assignedRoleCount(),player ) - } - - fun assignedRoleCount(): Int = - slots.count { it?.role != null } + fun updateRoleAvailabilityFor(player: Player) = updateRoleAvailability(roleCounts(),assignedRoleCount(),player ) + fun assignedRoleCount(): Int = slots.count { it?.role != null } fun spawnLocationFor(player: Player): Location { - val idx = slotOf(player) - val (x, y) = PartySpawns[idx] + val (x, y) = PartySpawns[slotOf(player)] return session.base.transform(x, y, 0) } } -data class RoleCounts(val att: Int, val def: Int, val coll: Int, val heal: Int ) - +data class RoleCounts(var att: Int, var def: Int, var coll: Int, var heal: Int ) object BarbTeamManager { - fun createTeam(leader: Player): Boolean { val session = BAActivity.createSession(leader) -// if (session.team != null) return false - val team = BarbTeam(session, leader) session.team = team - sendMessage(leader, "TeamCreated") + leader.debug("[DEBUG] TeamCreated") updateTeam(team) return true } @@ -162,7 +129,7 @@ object BarbTeamManager { val team = session.team team.recruit = null if (!team.addPlayer(player)) { - player.sendMessage("That party is full.") + player.debug("[DEBUG] That party is full.") return false } team.setRoleForPlayer(player, role) @@ -188,11 +155,8 @@ object BarbTeamManager { //session.cancleStartingPhase() } - fun updateTeam(team: BarbTeam) { - team.allPlayers().forEach { - updateCurrentTeam(it) - } - } + fun updateTeam(team: BarbTeam) = team.allPlayers().forEach { updateCurrentTeam(it) } + } //Leader leaving room and causing disband "Your leader has left the room and therefore cleared the team!" From 2263604c7b9eba615a680cac4f1537ec5436b902 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 23 May 2026 11:51:11 -0400 Subject: [PATCH 088/123] QuickWaveStart door warns about wave reset. --- .../minigame/barbassault/BADevHelper.kt | 8 +- .../minigame/barbassault/lobby/BALobby.kt | 86 +++++++++---------- 2 files changed, 45 insertions(+), 49 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BADevHelper.kt b/Server/src/main/content/minigame/barbassault/BADevHelper.kt index 60a0692dd..498647039 100644 --- a/Server/src/main/content/minigame/barbassault/BADevHelper.kt +++ b/Server/src/main/content/minigame/barbassault/BADevHelper.kt @@ -17,20 +17,20 @@ class BADevHelper : CommandSet(Privilege.ADMIN) { var babotcount = 0 override fun defineCommands() { - define ("maxbarbpoints") { player,_ -> + define ("maxbapoints") { player,_ -> addBAPoints(player,BarbAssaultPoints(500, 500, 500,500)) return@define } - define ("setbarbwave") { player,args -> + define ("setbawave") { player,args -> setBAWave(player,args[1].toInt()) return@define } - define ("resetbarbpoints") { player,_ -> + define ("resetbapoints") { player,_ -> setBAPoints(player,BarbAssaultPoints(0, 0, 0,0)) return@define } - define ("resetbarblevels") { player,_ -> + define ("resetbalevels") { player,_ -> setBALevels(player,BarbAssaultLevels(0, 0, 0,0)) return@define } diff --git a/Server/src/main/content/minigame/barbassault/lobby/BALobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BALobby.kt index 1515cf24c..d1b816f89 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BALobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BALobby.kt @@ -42,38 +42,34 @@ class BALobby : InteractionListener, MapArea { if (enteredZone == QUICK_START) { return } if (enteredZone == REGION_10322) { return } - updatePlayerWave(entity) + //updatePlayerWave(entity) openOverlay(entity as Player, 256) } override fun areaLeave(entity: Entity, logout: Boolean) { if (entity is Player) { entity.interfaceManager.closeOverlay() - - //this is redundant. - val barbassItems = intArrayOf(Items.POISONED_WORMS_10540) - entity.equipment.removeAll(barbassItems) - entity.inventory.removeAll(barbassItems) - } } + //was used in early development. fun updatePlayerWave(entity: Entity) { val player = entity as? Player ?: return val location = player.location if (QUICK_START.insideBorder(location)) { - entity.setAttribute("/save:barbass:wave", 1) + setBAWave(entity,1) return } for ((index, lobby) in waveLobbies.withIndex()) { if (lobby.insideBorder(location)) { if (lobby != MAIN_LOBBY) { // MAIN_LOBBY should not assign a wave number - entity.setAttribute("/save:barbass:wave", index ) + setBAWave(entity,index) } return } } } + private fun capeCheck(player: Player): Boolean { val wornCape = getItemFromEquipment(player, EquipmentSlot.CAPE)?.id ?: -1 if (wornCape != -1) { @@ -94,7 +90,7 @@ class BALobby : InteractionListener, MapArea { val team = session?.team if (team == null) { - leader.sendMessage("No active session found.") + leader.debug("[DEBUG] No active session found.") return@onUseWithPlayer false } @@ -113,27 +109,18 @@ class BALobby : InteractionListener, MapArea { on(Items.SCROLL_10512, IntType.ITEM, "Read") { player, _ -> //https://youtu.be/GYh6JPKNOSA?t=233 -- I know 2017, but only example for read scroll iv found. // ima cry, that YT account got deleted. - // waveAdvance(player) + waveAdvance(player) return@on true } on(Items.SCROLL_10512, IntType.ITEM, "Write-Role") { player, _ -> - //player.interfaceManager.open(Component(493)) - //setInterfaceModel(player, 20561, 493, 8,1) sendDialogueOptions(player, "Which role would you like to perform?","Attacker", "Defender","Collector","Healer","Cancel") addDialogueAction(player) { _ , buttonId -> writeRole(player,buttonId) } return@on true } on(Items.SCROLL_10512, IntType.ITEM, "Clear") { player, _ -> - val session = getBASession(player) - val team = session?.team - if (team != null) { - disbandTeam(session) - createTeam(player) - } else { - createTeam(player) - } - + if (getBASession(player)?.team != null) return@on true + createTeam(player) return@on true } on(Items.SCROLL_10512, IntType.ITEM, "Destroy") { player, item -> @@ -143,7 +130,6 @@ class BALobby : InteractionListener, MapArea { if (removeItem(player, item)) { playAudio(player, Sounds.DESTROY_OBJECT_2381) abandonTeam(player) - //updateCurrentTeam(player) } } } @@ -151,33 +137,42 @@ class BALobby : InteractionListener, MapArea { } on(Scenery.LADDER_20193, IntType.SCENERY, "Climb-down") { player, _ -> - val session = getBASession(player) ?: run { - player.sendMessage("You are not in a session!") - return@on true - } - if (session.state != BarbassaultState.PARTY_CREATION) { - player.sendMessage("Your team is already starting or in the arena!") - return@on true - } + val session = getBASession(player) + if (session == null) { player.debug("[DEBUG] You are not in a session!"); return@on true } + if (session.team.isLeader(player)) return@on true + if (session.state != BarbassaultState.PARTY_CREATION) { player.debug("[DEBUG] Your team is already starting or in the arena!"); return@on true } + + closeOverlay(player) // close party + openOverlay(player, 494) // open countdown - closeOverlay(player) // close party, - openOverlay(player, 494)// open countdown, session.beginStartingPhase() return@on true } on(Scenery.DOOR_20209, IntType.SCENERY, "Pass") { player, node -> - if (!capeCheck(player)) { return@on false } - //todo Not allowed to enter QuickStart with Scroll - if (!QUICK_START.insideBorder(player.location)){ - //todo warning message you are about to reset your wave - setBAWave(player,1) - handlePlayerOptionDoor(player) { role -> - //player.sendMessage("You are a ${role.name.lowercase().replaceFirstChar { it.uppercase() }}.") - handleWaveDoor(player, node, 489) - addToQueue(player, role) + if (!capeCheck(player)) return@on false + // todo Not allowed to enter QuickStart with Scroll + if (!QUICK_START.insideBorder(player.location)) { + + if (getBAWave(player) != 1) { + sendDialogueOptions(player,"Are you sure you wish to reset your wave progress??","Yes","No") + addDialogueAction(player) { _, buttonId -> + if (buttonId == 2) { + setBAWave(player, 1) + + handlePlayerOptionDoor(player) { role -> + handleWaveDoor(player, node, 489) + addToQueue(player, role) + } + } + } + } else { + handlePlayerOptionDoor(player) { role -> + handleWaveDoor(player, node, 489) + addToQueue(player, role) + } } - }else { + } else { handleWaveDoor(player, node, 489) } return@on true @@ -335,12 +330,13 @@ class BALobby : InteractionListener, MapArea { } } } + fun waveAdvance(player: Player) { - val wave = player.getAttribute("barbass:wave", 1) + val wave = getBAWave(player) if (wave in 1..waveLobbies.size) { if (wave == 10) {player.setAttribute("/save:barbass:wave", 1)} } else { - println("Invalid wave number: $wave") + sendMessage(player,"Invalid wave number: $wave. PLEASE REPORT THIS!") } } From 950b591ac6178f5b25ffcee78964c3d96ed921e2 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 23 May 2026 13:55:43 -0400 Subject: [PATCH 089/123] balobby clean up pennance runner text for escaping --- .../arena/npcs/PenanceRunnerNPC.kt | 1 + .../minigame/barbassault/lobby/BALobby.kt | 66 +++---------------- 2 files changed, 9 insertions(+), 58 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt index 8d4827411..bc89a0f14 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt @@ -31,6 +31,7 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { val GOOD_EAT = "Chomp, chomp" val BAD_EAT = "Blurghh" val TRAP_HIT = "Urghhh!" + val ESCAPE = "Raaa!!" override fun getXpMultiplier(self: NPC, attacker: Entity): Double { return 0.0 diff --git a/Server/src/main/content/minigame/barbassault/lobby/BALobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BALobby.kt index d1b816f89..97db08eb8 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BALobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BALobby.kt @@ -138,8 +138,11 @@ class BALobby : InteractionListener, MapArea { on(Scenery.LADDER_20193, IntType.SCENERY, "Climb-down") { player, _ -> val session = getBASession(player) + val team = session?.team if (session == null) { player.debug("[DEBUG] You are not in a session!"); return@on true } - if (session.team.isLeader(player)) return@on true + if (team?.isLeader(player) == false) return@on true + //todo uncomment when goes to test + //if (team?.isFull() == false) return@on true if (session.state != BarbassaultState.PARTY_CREATION) { player.debug("[DEBUG] Your team is already starting or in the arena!"); return@on true } closeOverlay(player) // close party @@ -180,7 +183,7 @@ class BALobby : InteractionListener, MapArea { on(BARBDOORS, IntType.SCENERY, "Pass") { player, node -> //todo find authentic message no capes - // if (capeCheck(player)) { sendMessage(player,"Your not allowed to wear capes."); return@on true } + if (!capeCheck(player)) { sendMessage(player,"You are not allowed to wear capes."); return@on true } handleWaveDoor(player, node,256) return@on true } @@ -216,29 +219,7 @@ class BALobby : InteractionListener, MapArea { // [3] "Healer" // [4] "I'll be any role!" - /*private val pulse = object : Pulse(1) { - override fun pulse(): Boolean { - ticks++ - //setInterfaceText(player, ticks.toString(),494,0) - // for people in party update our time to next wave start - // maybe this is not the right way to do it? - if (ticks >= 500) { - ticks = 400 - } - return false - } - } - */ - fun getModelFromButton(button: Int): Int { - return when (button) { - 2 -> 20561 - 3 -> 20566 - 4 -> 20563 - 5 -> 20569 - else -> 0 // Unknown or no match - } - } fun getRoleFromButton(button: Int): BarbRole? { return when (button) { 2 -> BarbRole.ATTACKER @@ -249,7 +230,6 @@ class BALobby : InteractionListener, MapArea { } } - fun writeRole(player: Player, buttonId: Int) { if (buttonId == 6) return val playerRole = getRoleFromButton(buttonId) ?: return @@ -264,38 +244,10 @@ class BALobby : InteractionListener, MapArea { } fun handlePlayerOptionDoor(player: Player, roomRoleOptions:(BarbRole?) -> Unit){ - sendDialogueOptions( - player, - "Which role would you like to perform?", - "Attacker", "Defender","Collector","Healer","I'll be any role!") - addDialogueAction(player) { _, buttonId -> - val role = when (buttonId) { - 2 -> BarbRole.ATTACKER - 3 -> BarbRole.DEFENDER - 4 -> BarbRole.COLLECTOR - 5 -> BarbRole.HEALER - 6 -> null - else -> null - } - roomRoleOptions(role) - } + sendDialogueOptions(player,"Which role would you like to perform?","Attacker", "Defender","Collector","Healer","I'll be any role!") + addDialogueAction(player) { _, buttonId -> roomRoleOptions(getRoleFromButton(buttonId)) } } - fun handleWriteRole(player: Player){ - sendDialogueOptions( - player, - "Which role do you wish to be?", - "Attacker", "Defender","Collector","Healer","Cancel") - addDialogueAction(player) { _, buttonId -> - when (buttonId) { - 2 -> BarbRole.ATTACKER - 3 -> BarbRole.DEFENDER - 4 -> BarbRole.COLLECTOR - 5 -> BarbRole.HEALER - else -> {} - } - } - } fun handleWaveDoor(player: Player, node: Node,iface: Int){ val doorLoc = node.location val playerLoc = player.location @@ -307,14 +259,12 @@ class BALobby : InteractionListener, MapArea { if (insideRoom) { forceMove(player, playerLoc, doorLoc, 25, 60, null, 819) } forceMove(player, playerLoc, playerLoc.transform(0, moveY, 0), 25, 60, null, 819) { if (insideRoom) { - //player.baSession = null //player.baSession?.cancleStartingPhase() abandonTeam(player) closeOverlay(player) if (node.id == Scenery.DOOR_20209) { BarbassQuickWaveActivity.removeQuickQue(player) } // needs to happen sooner } else { openOverlay(player, iface) - // player.sendMessage("you enter wave ${BARBWAVEDOOR[node.id]}") } } } @@ -334,7 +284,7 @@ class BALobby : InteractionListener, MapArea { fun waveAdvance(player: Player) { val wave = getBAWave(player) if (wave in 1..waveLobbies.size) { - if (wave == 10) {player.setAttribute("/save:barbass:wave", 1)} + if (wave == 10) {setBAWave(player,1)} } else { sendMessage(player,"Invalid wave number: $wave. PLEASE REPORT THIS!") } From f44ec73f953a67b88a291037481bfdc601081754 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 23 May 2026 16:59:25 -0400 Subject: [PATCH 090/123] Healers vial restores health on players --- .../barbassault/arena/BAArenaListener.kt | 81 ++++++++++++------- .../barbassault/lobby/RoleSelectInterface.kt | 2 +- 2 files changed, 54 insertions(+), 29 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt index f203ca98c..6b4324d52 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt @@ -1,28 +1,24 @@ package content.minigame.barbassault.arena +import content.minigame.barbassault.* import content.minigame.barbassault.BAGraphics.BLUE_EGG_BREAK_875 import content.minigame.barbassault.BAGraphics.GREEN_EGG_BREAK_873 import content.minigame.barbassault.BAGraphics.RED_EGG_BREAK_874 -import content.minigame.barbassault.BAGraphics.RED_EGG_EXPLOSION_975 -import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.LureItems -import content.minigame.barbassault.arena.BAHornSystem.HornHelper.getHealerHorn import content.minigame.barbassault.arena.BarbAssEvent.EggCollected +import content.minigame.barbassault.arena.BarbAssEvent.HitpointsHealed import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadEggHopper import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadHopperEggs import content.minigame.barbassault.arena.scenery.EggCannon.Companion.showEggHopperCount -import content.minigame.barbassault.getBALevels -import content.minigame.barbassault.getBASession -import content.minigame.barbassault.isBARole import core.api.* import core.game.global.action.ClimbActionHandler import core.game.interaction.IntType import core.game.interaction.InteractionListener import core.game.interaction.QueueStrength import core.game.node.Node +import core.game.node.entity.Entity import core.game.node.entity.combat.BattleState import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.NPC @@ -32,7 +28,6 @@ import core.game.node.entity.player.info.PlayerMonitor import core.game.node.item.GroundItem import core.game.node.item.Item import core.game.system.task.Pulse -import core.game.world.GameWorld import core.game.world.GameWorld.Pulser import core.game.world.map.Direction import core.game.world.map.Location @@ -58,8 +53,8 @@ class BarbassaultArenaListener : InteractionListener { val ROLE_ICON = intArrayOf( ATTACKER_ICON, DEFENDER_ICON, COLLECTOR_ICON, HEALER_ICON ) val Fix_trap_IDs = intArrayOf( Scenery.RUNNER_TRAP1_20230, Scenery.BROKEN_TRAP0_20231 ) + val All_HEALING_VIALS = intArrayOf(Items.HEALING_VIAL_10546,Items.HEALING_VIAL1_10545,Items.HEALING_VIAL2_10544,Items.HEALING_VIAL3_10543,Items.HEALING_VIAL4_10542 ) object BA_ARENA { val MAIN = 7509; val QUEEN = 7508; val all = listOf(MAIN, QUEEN) } - //base.transform(0,0,0) override fun defineListeners() { //Wrong food message "That's the wrong type of poisoned food to use! Penalty!" @@ -137,14 +132,14 @@ class BarbassaultArenaListener : InteractionListener { if (isBARole(player, BarbRole.HEALER)) { player.animate(Animation(5407)) player.lock(5) - GameWorld.Pulser.submit(object : Pulse(3, player) { + //todo use quescript here instead + Pulser.submit(object : Pulse(3, player) { override fun pulse(): Boolean { - //todo switch to Healer level instead of Horn in inv - val healAmount = getHealerHorn(player)?.healAmount ?: 10 - //Should also restore run energy Amount - heal(player, healAmount) + val restoreAmount = getHealerHealAmount(player) + heal(player, restoreAmount) + player.settings.updateRunEnergy((-restoreAmount).toDouble()) player.unlock() - sendMessage(player,"You've been healed $healAmount hitpoints.") + sendMessage(player,"You've been healed $restoreAmount hitpoints.") getBASession(player)?.updateBarbHealerIfaceHPOfPlayer(player) return true } @@ -152,22 +147,47 @@ class BarbassaultArenaListener : InteractionListener { } return@on true } - //todo use vial on player - //"The player's hitpoints are full." //Error message if target player hp is full - //sendamount heal for conversion to points at end. + + onUseWithPlayer(*All_HEALING_VIALS) { player, _, target -> + //todo quescirpt this and emote + target as Player + if (target.skills.lifepoints >= target.skills.maximumLifepoints) { + sendMessage(player, "The player's hitpoints are full.") + return@onUseWithPlayer true + } + + val current = All_HEALING_VIALS.firstOrNull { player.inventory.containsAtLeastOneItem(it) }?: return@onUseWithPlayer true + val index = All_HEALING_VIALS.indexOf(current) + + if (index > 0) { + val session = getBASession(player) + val next = All_HEALING_VIALS[index - 1] + player.inventory.remove(Item(current)) + player.inventory.add(Item(next)) + + val restoreAmount = minOf(getHealerHealAmount(player) ,target.skills.maximumLifepoints - target.skills.lifepoints) + sendMessage(target,"You've been healed $restoreAmount hitpoints.") + sendMessage(player,"You healed $restoreAmount hitpoints.") + heal(target, restoreAmount) + target.settings.updateRunEnergy((-restoreAmount).toDouble()) + session?.updateBarbHealerIfaceHPOfPlayer(target) + + session?.eventBus?.emit(HitpointsHealed(player,restoreAmount)) + } + + return@onUseWithPlayer true + } on(Scenery.HEALER_SPRING_20150, IntType.SCENERY, "Take-from") { player, _ -> - val healLevel = getBALevels(player).heal - //emote 5400 - /* HEALING_VIAL_10546 -- empty - HEALING_VIAL1_10545 // 1 - HEALING_VIAL2_10544 - HEALING_VIAL3_10543 - HEALING_VIAL4_10542 // 4 - */ - sendMessage(player,"You filled the vial.") + //todo quescript this + player.animate(Animation(5400)) + if (player.inventory.containsAtLeastOneItem(All_HEALING_VIALS)) { + val current = All_HEALING_VIALS.firstOrNull { player.inventory.containsAtLeastOneItem(it) } ?: return@on true + player.inventory.remove(Item(current)) + player.inventory.add(Item(Items.HEALING_VIAL4_10542)) + sendMessage(player,"You filled the vial.") + } return@on true } - //CATALYTIC_RUNE_12851, ELEMENTAL_RUNE_12850 onUnequip(ROLE_ICON) { player, _ -> if (getBASession(player)?.state == BarbassaultState.IN_ARENA){ @@ -289,6 +309,11 @@ class BarbassaultArenaListener : InteractionListener { } return false } + fun getHealerHealAmount(player: Player): Int { + val healerHealAmounts = intArrayOf(5, 15, 20, 25, 35) + val level = getBALevels(player).heal + return healerHealAmounts.getOrElse(level) { healerHealAmounts.last() } + } } object BACombatValidation { diff --git a/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt index cd797e1d4..533c64d3f 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/RoleSelectInterface.kt @@ -27,7 +27,7 @@ class RoleSelectInterface : ComponentPlugin() { isopen = false closeInterface(leader) //if team.recruit not on team, team.recruit?.player?.baSession = null - setBASession(team.recruit!!.player,null) + (team.recruit?.player )?.let { setBASession(it ,null) } team.recruit = null } return@setCloseEvent true From 2cea22e8d1a2f30d4c4456b852ba96af6190918b Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 23 May 2026 20:13:21 -0400 Subject: [PATCH 091/123] Fill healer vials with USE vails on Spring --- .../barbassault/arena/BAArenaListener.kt | 57 +++++++++++-------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt index 6b4324d52..b92f604fa 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt @@ -16,6 +16,7 @@ import core.api.* import core.game.global.action.ClimbActionHandler import core.game.interaction.IntType import core.game.interaction.InteractionListener +import core.game.interaction.InteractionListeners import core.game.interaction.QueueStrength import core.game.node.Node import core.game.node.entity.Entity @@ -33,6 +34,7 @@ import core.game.world.map.Direction import core.game.world.map.Location import core.game.world.update.flag.context.Animation import core.game.world.update.flag.context.Graphics +import org.rs09.consts.Animations import org.rs09.consts.Items import org.rs09.consts.Scenery @@ -149,45 +151,40 @@ class BarbassaultArenaListener : InteractionListener { } onUseWithPlayer(*All_HEALING_VIALS) { player, _, target -> - //todo quescirpt this and emote target as Player + //todo find Healing sound if (target.skills.lifepoints >= target.skills.maximumLifepoints) { sendMessage(player, "The player's hitpoints are full.") return@onUseWithPlayer true } - val current = All_HEALING_VIALS.firstOrNull { player.inventory.containsAtLeastOneItem(it) }?: return@onUseWithPlayer true val index = All_HEALING_VIALS.indexOf(current) if (index > 0) { - val session = getBASession(player) - val next = All_HEALING_VIALS[index - 1] - player.inventory.remove(Item(current)) - player.inventory.add(Item(next)) + queueScript(player, 0) { + val session = getBASession(player) + val next = All_HEALING_VIALS[index - 1] + player.inventory.remove(Item(current)) + player.inventory.add(Item(next)) - val restoreAmount = minOf(getHealerHealAmount(player) ,target.skills.maximumLifepoints - target.skills.lifepoints) - sendMessage(target,"You've been healed $restoreAmount hitpoints.") - sendMessage(player,"You healed $restoreAmount hitpoints.") - heal(target, restoreAmount) - target.settings.updateRunEnergy((-restoreAmount).toDouble()) - session?.updateBarbHealerIfaceHPOfPlayer(target) + val restoreAmount = + minOf(getHealerHealAmount(player), target.skills.maximumLifepoints - target.skills.lifepoints) + sendMessage(target, "You've been healed $restoreAmount hitpoints.") + sendMessage(player, "You healed $restoreAmount hitpoints.") + player.animate(Animation(537)) + heal(target, restoreAmount) + target.settings.updateRunEnergy((-restoreAmount).toDouble()) + session?.updateBarbHealerIfaceHPOfPlayer(target) + session?.eventBus?.emit(HitpointsHealed(player, restoreAmount)) + return@queueScript stopExecuting(player) + } - session?.eventBus?.emit(HitpointsHealed(player,restoreAmount)) } return@onUseWithPlayer true } - on(Scenery.HEALER_SPRING_20150, IntType.SCENERY, "Take-from") { player, _ -> - //todo quescript this - player.animate(Animation(5400)) - if (player.inventory.containsAtLeastOneItem(All_HEALING_VIALS)) { - val current = All_HEALING_VIALS.firstOrNull { player.inventory.containsAtLeastOneItem(it) } ?: return@on true - player.inventory.remove(Item(current)) - player.inventory.add(Item(Items.HEALING_VIAL4_10542)) - sendMessage(player,"You filled the vial.") - } - return@on true - } + on(Scenery.HEALER_SPRING_20150, IntType.SCENERY, "Take-from") { player, _ -> fillHealerVial(player); return@on true } + onUseAnyWith( IntType.SCENERY,Scenery.HEALER_SPRING_20150,*All_HEALING_VIALS) { player, used, with -> fillHealerVial(player); return@onUseAnyWith true} onUnequip(ROLE_ICON) { player, _ -> if (getBASession(player)?.state == BarbassaultState.IN_ARENA){ @@ -314,6 +311,18 @@ class BarbassaultArenaListener : InteractionListener { val level = getBALevels(player).heal return healerHealAmounts.getOrElse(level) { healerHealAmounts.last() } } + fun fillHealerVial(player: Player){ + queueScript(player,1, QueueStrength.STRONG) { + if (player.inventory.containsAtLeastOneItem(All_HEALING_VIALS)) { + val current = All_HEALING_VIALS.firstOrNull { player.inventory.containsAtLeastOneItem(it) } ?: return@queueScript stopExecuting(player) + player.animate(Animation(5400)) + player.inventory.remove(Item(current)) + player.inventory.add(Item(Items.HEALING_VIAL4_10542)) + sendMessage(player, "You filled the vial.") + } + return@queueScript stopExecuting(player) + } + } } object BACombatValidation { From f6936ab2dc230a68ef25e0835d81cf27342f6bde Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 23 May 2026 23:09:38 -0400 Subject: [PATCH 092/123] Horn of Glory Acttualy works now --- .../barbassault/arena/BAArenaListener.kt | 3 -- .../minigame/barbassault/arena/BASession.kt | 31 +++++++++++++++---- .../barbassault/arena/scenery/HornOfGlory.kt | 30 ++++++++---------- 3 files changed, 38 insertions(+), 26 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt index b92f604fa..f3ac0e282 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt @@ -16,10 +16,8 @@ import core.api.* import core.game.global.action.ClimbActionHandler import core.game.interaction.IntType import core.game.interaction.InteractionListener -import core.game.interaction.InteractionListeners import core.game.interaction.QueueStrength import core.game.node.Node -import core.game.node.entity.Entity import core.game.node.entity.combat.BattleState import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.NPC @@ -34,7 +32,6 @@ import core.game.world.map.Direction import core.game.world.map.Location import core.game.world.update.flag.context.Animation import core.game.world.update.flag.context.Graphics -import org.rs09.consts.Animations import org.rs09.consts.Items import org.rs09.consts.Scenery diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index 2d57312f3..b4ca46720 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -452,7 +452,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M fun updateRoleUI() { team.allPlayers().forEach { player -> val wave = team.wave.toString() - val role = team.getRoleForPlayer(player) ?: return@forEach + val role = team.getRoleForPlayer(player) val call = roleCalls[role] ?: return@forEach @@ -521,19 +521,38 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M private val hornTargets = mapOf( BarbRole.COLLECTOR to BarbRole.ATTACKER, BarbRole.ATTACKER to BarbRole.COLLECTOR , BarbRole.HEALER to BarbRole.DEFENDER, BarbRole.DEFENDER to BarbRole.HEALER ) - fun onHornCall(player: Player, calledValue: Any) { - val callerRole = team.getRoleForPlayer(player) ?: return - val targetRole = hornTargets[callerRole] ?: return - val call = roleCalls[targetRole] ?: return - + private fun dispatchCall(call: Any, calledValue: Any) { when (call) { is AttackerCall -> if (calledValue is AttackerStyle) call.call(calledValue) is HealerCall -> if (calledValue is PoisonFood) call.call(calledValue) is DefenderCall -> if (calledValue is LureFood) call.call(calledValue) is CollectorCall -> if (calledValue is EggColor) call.call(calledValue) } + } + + fun onHornCall(player: Player, calledValue: Any) { + val callerRole = team.getRoleForPlayer(player) + val targetRole = hornTargets[callerRole] ?: return + val call = roleCalls[targetRole] ?: return + + dispatchCall(call,calledValue) updateRoleUI() } + + fun onHornGloryCall(calledValue: Any) { + val targetRole = when (calledValue) { + is AttackerStyle -> BarbRole.ATTACKER + is PoisonFood -> BarbRole.HEALER + is LureFood -> BarbRole.DEFENDER + is EggColor -> BarbRole.COLLECTOR + else -> return + } + + val call = roleCalls[targetRole] ?: return + dispatchCall(call,calledValue) + updateRoleUI() + } + fun onAttackerHit(style: AttackerStyle) { val call = roleCalls[BarbRole.ATTACKER] as? AttackerCall ?: return call.check(style) diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt index 118dec67f..4109b61fb 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt @@ -20,23 +20,20 @@ import org.rs09.consts.Scenery @Initializable class HornOfGlory : ComponentPlugin() , InteractionListener { var hornCallLock = false - val CallMap = mapOf( + private val CallMap = mapOf( GloryHorn.CONTROLED_BRONZE_WIND to (BarbassaultSession.AttackerStyle.STYLE_1 to BaCall.ATTACKER_STYLE_1), GloryHorn.ACCURATE_IRON_WATER to (BarbassaultSession.AttackerStyle.STYLE_2 to BaCall.ATTACKER_STYLE_2), GloryHorn.AGGRISSIVE_STEEL_EARTH to (BarbassaultSession.AttackerStyle.STYLE_3 to BaCall.ATTACKER_STYLE_3), GloryHorn.DEFENSIVE_MITHRIL_FIRE to (BarbassaultSession.AttackerStyle.STYLE_4 to BaCall.ATTACKER_STYLE_4), - - GloryHorn.POISON_TOFU to ("Poison tofu" to BaCall.HEALER_TOFU), - GloryHorn.POISON_WORMS to ("Poison worms" to BaCall.HEALER_WORMS), - GloryHorn.POISON_MEAT to ("Poison meat" to BaCall.HEALER_MEAT), - - GloryHorn.RED_EGG to ("Red egg" to BaCall.COLLECTOR_RED), - GloryHorn.GREEN_EGG to ("Green egg" to BaCall.COLLECTOR_GREEN), - GloryHorn.BLUE_EGG to ("Blue egg" to BaCall.COLLECTOR_BLUE), - - GloryHorn.FOOD_TOFU to (BarbassaultSession.LureFood.TOFU to BaCall.DEFENDER_TOFU), + GloryHorn.POISON_TOFU to (BarbassaultSession.PoisonFood.TOFU to BaCall.HEALER_TOFU), + GloryHorn.POISON_WORMS to (BarbassaultSession.PoisonFood.WORMS to BaCall.HEALER_WORMS), + GloryHorn.POISON_MEAT to (BarbassaultSession.PoisonFood.MEAT to BaCall.HEALER_MEAT), + GloryHorn.RED_EGG to (BarbassaultSession.EggColor.RED to BaCall.COLLECTOR_RED), + GloryHorn.GREEN_EGG to (BarbassaultSession.EggColor.GREEN to BaCall.COLLECTOR_GREEN), + GloryHorn.BLUE_EGG to (BarbassaultSession.EggColor.BLUE to BaCall.COLLECTOR_BLUE), + GloryHorn.FOOD_TOFU to (BarbassaultSession.LureFood.TOFU to BaCall.DEFENDER_TOFU), GloryHorn.FOOD_CRACKERS to (BarbassaultSession.LureFood.CRACKERS to BaCall.DEFENDER_CRACKERS), - GloryHorn.FOOD_WORMS to (BarbassaultSession.LureFood.WORMS to BaCall.DEFENDER_WORMS), + GloryHorn.FOOD_WORMS to (BarbassaultSession.LureFood.WORMS to BaCall.DEFENDER_WORMS) ) override fun newInstance(arg: Any?): Plugin { @@ -46,12 +43,11 @@ class HornOfGlory : ComponentPlugin() , InteractionListener { override fun handle(player: Player?,component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int ): Boolean { player ?: return true - val pair = CallMap[button] ?: return true - val role = pair.first - val call = pair.second + val (gameValue, uiCall) = CallMap[button] ?: return true + if(!hornCallLock) { - getBASession(player)?.onHornCall(player, role) - sendChat(player, call.text) + getBASession(player)?.onHornGloryCall(gameValue) + sendChat(player, uiCall.text) player.animate(Animation(5436)) player.lock(6) hornCallLock = true From a98462b6cf0677011c0152e7d75684ed1a9b316f Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 24 May 2026 04:08:39 -0400 Subject: [PATCH 093/123] PENANCE_HEALER_5242 stats added, Penance healers can be posioned by Healer --- Server/data/configs/npc_configs.json | 54 +++++++++++++++++++ .../content/minigame/barbassault/BAUtils.kt | 45 ++++++++++++++++ .../barbassault/arena/BAArenaListener.kt | 21 +++++++- .../arena/npcs/PenanceHealerNPC.kt | 16 ++++-- 4 files changed, 132 insertions(+), 4 deletions(-) diff --git a/Server/data/configs/npc_configs.json b/Server/data/configs/npc_configs.json index e2292904b..60ad3a248 100644 --- a/Server/data/configs/npc_configs.json +++ b/Server/data/configs/npc_configs.json @@ -81687,16 +81687,28 @@ "aggressive": "true" }, { + "attack_level": "9", + "strength_level": "8", + "defence_level": "9", + "magic_level": "1", + "range_level": "1", "name": "Penance Healer", "id": "5238", "defence_animation": "5105", "death_animation": "5106", + "lifepoints": "27", "melee_animation": "5107", "range_animation": "5107", "attack_speed": "4", "magic_animation": "5107" }, { + "lifepoints": "32", + "attack_level": "13", + "strength_level": "15", + "defence_level": "14", + "magic_level": "1", + "range_level": "1", "name": "Penance Healer", "id": "5239", "defence_animation": "5105", @@ -81707,6 +81719,12 @@ "magic_animation": "5107" }, { + "lifepoints": "37", + "attack_level": "20", + "strength_level": "18", + "defence_level": "19", + "magic_level": "1", + "range_level": "1", "name": "Penance Healer", "id": "5240", "defence_animation": "5105", @@ -81717,6 +81735,12 @@ "magic_animation": "5107" }, { + "lifepoints": "43", + "attack_level": "22", + "strength_level": "23", + "defence_level": "21", + "magic_level": "1", + "range_level": "1", "name": "Penance Healer", "id": "5241", "defence_animation": "5105", @@ -81727,6 +81751,12 @@ "magic_animation": "5107" }, { + "lifepoints": "49", + "attack_level": "26", + "strength_level": "27", + "defence_level": "25", + "magic_level": "1", + "range_level": "1", "name": "Penance Healer", "id": "5242", "defence_animation": "5105", @@ -81737,6 +81767,12 @@ "magic_animation": "5107" }, { + "lifepoints": "55", + "attack_level": "30", + "strength_level": "32", + "defence_level": "28", + "magic_level": "1", + "range_level": "1", "name": "Penance Healer", "id": "5243", "defence_animation": "5105", @@ -81747,6 +81783,12 @@ "magic_animation": "5107" }, { + "lifepoints": "60", + "attack_level": "33", + "strength_level": "36", + "defence_level": "34", + "magic_level": "1", + "range_level": "1", "name": "Penance Healer", "id": "5244", "defence_animation": "5105", @@ -81757,6 +81799,12 @@ "magic_animation": "5107" }, { + "lifepoints": "67", + "attack_level": "40", + "strength_level": "38", + "defence_level": "36", + "magic_level": "1", + "range_level": "1", "name": "Penance Healer", "id": "5245", "defence_animation": "5105", @@ -81767,6 +81815,12 @@ "magic_animation": "5107" }, { + "lifepoints": "76", + "attack_level": "40", + "strength_level": "44", + "defence_level": "38", + "magic_level": "1", + "range_level": "1", "name": "Penance Healer", "id": "5246", "defence_animation": "5105", diff --git a/Server/src/main/content/minigame/barbassault/BAUtils.kt b/Server/src/main/content/minigame/barbassault/BAUtils.kt index d98e5d866..2b98a9496 100644 --- a/Server/src/main/content/minigame/barbassault/BAUtils.kt +++ b/Server/src/main/content/minigame/barbassault/BAUtils.kt @@ -1,7 +1,19 @@ package content.minigame.barbassault import content.minigame.barbassault.arena.BarbassaultSession +import core.api.getTimer +import core.api.hasTimerActive +import core.api.registerTimer +import core.api.spawnTimer +import core.game.node.entity.Entity +import core.game.node.entity.combat.ImpactHandler import core.game.node.entity.player.Player +import core.game.system.timer.PersistTimer +import core.game.system.timer.RSTimer +import core.game.system.timer.TimerFlag +import core.game.system.timer.impl.Poison +import core.game.system.timer.impl.PoisonImmunity +import core.tools.secondsToTicks //thank you Ceikry @@ -220,3 +232,36 @@ fun getBARoleForPlayer(player: Player): BarbRole? { * @return `true` if the player has the specified role, otherwise `false`. */ fun isBARole(player: Player, role: BarbRole) = getBARoleForPlayer(player) == role + + +class BAPoison : PersistTimer (secondsToTicks(3), "BA-poison", flags = arrayOf(TimerFlag.ClearOnDeath)) { + lateinit var damageSource: Entity + var severity = 0 + + override fun run(entity: Entity): Boolean { + entity.impactHandler.manualHit(damageSource,(severity + 4) / 5,ImpactHandler.HitsplatType.POISON) + severity-- + return severity > 0 + } + + override fun getTimer(vararg args: Any): RSTimer { + val timer = BAPoison() + timer.damageSource = args[0] as? Entity ?: return timer + timer.severity = args[1] as? Int ?: return timer + return timer + } +} + +fun applyBAPoison (entity: Entity, source: Entity, severity: Int) { + val existingTimer = getTimer(entity) + if (existingTimer != null) { + if (existingTimer.severity > severity) { + return + } else { + existingTimer.severity = severity + existingTimer.damageSource = source + } + } else { + registerTimer(entity, spawnTimer(source, severity)) + } +} diff --git a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt index f3ac0e282..4a6ba0a70 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt @@ -1,13 +1,16 @@ package content.minigame.barbassault.arena +import content.global.ame.events.evilbob.EvilBobUtils import content.minigame.barbassault.* import content.minigame.barbassault.BAGraphics.BLUE_EGG_BREAK_875 import content.minigame.barbassault.BAGraphics.GREEN_EGG_BREAK_873 import content.minigame.barbassault.BAGraphics.RED_EGG_BREAK_874 import content.minigame.barbassault.arena.BarbAssEvent.EggCollected import content.minigame.barbassault.arena.BarbAssEvent.HitpointsHealed +import content.minigame.barbassault.arena.BarbAssEvent.WrongPoisonUsed import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle +import content.minigame.barbassault.arena.npcs.PENANCE_HEALER_IDS import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadEggHopper import content.minigame.barbassault.arena.scenery.EggCannon.Companion.loadHopperEggs @@ -18,8 +21,10 @@ import core.game.interaction.IntType import core.game.interaction.InteractionListener import core.game.interaction.QueueStrength import core.game.node.Node +import core.game.node.entity.Entity import core.game.node.entity.combat.BattleState import core.game.node.entity.combat.CombatStyle +import core.game.node.entity.combat.ImpactHandler import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.node.entity.player.info.LogType @@ -27,6 +32,7 @@ import core.game.node.entity.player.info.PlayerMonitor import core.game.node.item.GroundItem import core.game.node.item.Item import core.game.system.task.Pulse +import core.game.system.timer.impl.Poison import core.game.world.GameWorld.Pulser import core.game.world.map.Direction import core.game.world.map.Location @@ -146,7 +152,20 @@ class BarbassaultArenaListener : InteractionListener { } return@on true } - + onUseWith(IntType.NPC, intArrayOf(Items.POISONED_TOFU_10539,Items.POISONED_MEAT_10541,Items.POISONED_WORMS_10540), *PENANCE_HEALER_IDS) { player, used, target -> + val session = getBASession(player) ?: return@onUseWith true + val currentCall = (session.roleCalls[BarbRole.HEALER] as? BarbassaultSession.HealerCall)?.required?.itemId() + removeItem(player,used) + if (used.id == currentCall) { + //todo fine tune the severity + applyBAPoison(target as Entity,player,20) + target.impactHandler.manualHit ( player,4, ImpactHandler.HitsplatType.POISON ) + return@onUseWith true + } + sendMessage(player,"that's the wrong type of poisoned food to use! Penalty!") + session.eventBus.emit(WrongPoisonUsed(player)) + return@onUseWith true + } onUseWithPlayer(*All_HEALING_VIALS) { player, _, target -> target as Player //todo find Healing sound diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt index 6c98652f6..0fee85d40 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt @@ -4,12 +4,15 @@ import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent import content.minigame.barbassault.getBASession import core.game.node.entity.Entity +import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior import core.game.node.entity.player.Player +import core.game.node.entity.skill.Skills +import core.game.system.config.NPCConfigParser import org.rs09.consts.NPCs -val PENANCE_HEALER_IDS = listOf( +val PENANCE_HEALER_IDS = intArrayOf( //NPCs.PENANCE_HEALER_5043,//tut NPCs.PENANCE_HEALER_5238, NPCs.PENANCE_HEALER_5239, @@ -21,18 +24,25 @@ val PENANCE_HEALER_IDS = listOf( NPCs.PENANCE_HEALER_5245, NPCs.PENANCE_HEALER_5246 ) -class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS.toIntArray()) { +class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS) { override fun getXpMultiplier(self: NPC, attacker: Entity): Double { return 0.0 } - override fun onCreation (self: NPC) { self.setAttribute("barbass-role", BarbRole.HEALER) self.isWalks = true self.walkRadius = 24 + // self.isIgnoreAttackRestrictions(self) + //self.getSkills().setStaticLevel(Skills.HITPOINTS,15) + } //sendMessage(player,"that's the wrong type of poisoned food to use! Penalty!") + override fun tick(self: NPC): Boolean { + + return true + } + override fun onDeathFinished(self: NPC, killer: Entity) { super.onDeathFinished(self, killer) From 81f1d16936146af0bf6b777531440f5e01998796 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 24 May 2026 04:23:25 -0400 Subject: [PATCH 094/123] RunnerEscaped to baevents --- .../content/minigame/barbassault/arena/BAArenaListener.kt | 2 +- .../src/main/content/minigame/barbassault/arena/BAEvent.kt | 5 ++--- .../src/main/content/minigame/barbassault/arena/BASession.kt | 4 ++++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt index 4a6ba0a70..323638522 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt @@ -157,7 +157,7 @@ class BarbassaultArenaListener : InteractionListener { val currentCall = (session.roleCalls[BarbRole.HEALER] as? BarbassaultSession.HealerCall)?.required?.itemId() removeItem(player,used) if (used.id == currentCall) { - //todo fine tune the severity + //todo fine tune the severity; 1 poisoned food will deal 54 damage applyBAPoison(target as Entity,player,20) target.impactHandler.manualHit ( player,4, ImpactHandler.HitsplatType.POISON ) return@onUseWith true diff --git a/Server/src/main/content/minigame/barbassault/arena/BAEvent.kt b/Server/src/main/content/minigame/barbassault/arena/BAEvent.kt index b07d0223a..3f8bd818c 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAEvent.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAEvent.kt @@ -8,9 +8,8 @@ sealed class BarbAssEvent { data class EggCollected(val player: Player, val count: Int) : BarbAssEvent() data class HitpointsHealed(val player: Player, val amount: Int) : BarbAssEvent() data class WrongPoisonUsed(val player: Player) : BarbAssEvent() - data class WrongAttack(val self: NPC, val attacker: Player) : BarbAssEvent() { - - } + data class WrongAttack(val self: NPC, val attacker: Player) : BarbAssEvent() + data class RunnerEscaped(val player: Player) : BarbAssEvent() } class BarbAssEventBus { diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index b4ca46720..208d00473 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -178,6 +178,10 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M val tracker = scoreManager.trackerFor(event.player) tracker.healerStats.wrongPoisonUsed++ } + eventBus.register(BarbAssEvent.RunnerEscaped::class.java) { event -> + val tracker = scoreManager.trackerFor(event.player) + tracker.defenderStats.runnersPast++ + } } fun setCaveBlocked(node: Node, blocked: Boolean) { From 1d43b576c851afeea7e1ca9344d8db22d8b943ec Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 24 May 2026 04:35:35 -0400 Subject: [PATCH 095/123] removed severity todo on posion food. Its already perfect. --- .../content/minigame/barbassault/arena/BAArenaListener.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt index 323638522..bfa624534 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt @@ -1,7 +1,5 @@ package content.minigame.barbassault.arena - -import content.global.ame.events.evilbob.EvilBobUtils import content.minigame.barbassault.* import content.minigame.barbassault.BAGraphics.BLUE_EGG_BREAK_875 import content.minigame.barbassault.BAGraphics.GREEN_EGG_BREAK_873 @@ -32,7 +30,6 @@ import core.game.node.entity.player.info.PlayerMonitor import core.game.node.item.GroundItem import core.game.node.item.Item import core.game.system.task.Pulse -import core.game.system.timer.impl.Poison import core.game.world.GameWorld.Pulser import core.game.world.map.Direction import core.game.world.map.Location @@ -157,7 +154,6 @@ class BarbassaultArenaListener : InteractionListener { val currentCall = (session.roleCalls[BarbRole.HEALER] as? BarbassaultSession.HealerCall)?.required?.itemId() removeItem(player,used) if (used.id == currentCall) { - //todo fine tune the severity; 1 poisoned food will deal 54 damage applyBAPoison(target as Entity,player,20) target.impactHandler.manualHit ( player,4, ImpactHandler.HitsplatType.POISON ) return@onUseWith true From 374d0ef8a5902b2d5142d3b10a79e3cb154efe32 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 24 May 2026 10:34:54 -0400 Subject: [PATCH 096/123] Waiting room time for next wave set to 30 seconds --- .../main/content/minigame/barbassault/arena/BAGroundSpawn.kt | 2 +- .../src/main/content/minigame/barbassault/arena/BASession.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BAGroundSpawn.kt b/Server/src/main/content/minigame/barbassault/arena/BAGroundSpawn.kt index 31a999f28..087845973 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAGroundSpawn.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAGroundSpawn.kt @@ -7,7 +7,7 @@ import core.game.world.GameWorld import core.game.world.map.Location class BAGroundSpawn(private var session: BarbassaultSession, private var respawnRate: Int, item: Item?, location: Location?, - var flag: Boolean? = null) : GroundItem(item, location) { + var flag: Boolean? = null,lureRange: Int = 4) : GroundItem(item, location) { private var active = true private var autoSpawn = true diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index 208d00473..cb73c4b5c 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -69,7 +69,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M val scoreManager = BarbScoreManager() val eventBus = BarbAssEventBus() - private val countDoown = if(GameWorld.settings?.isDevMode == true) 10 else 60 + private val countDoown = if(GameWorld.settings?.isDevMode == true) 10 else 30 private var countdownPulse: Pulse? = null @@ -127,7 +127,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M private fun startCountdown(quickStart: Boolean) { var ticks = secondsToTicks(countDoown)//60 - if(!quickStart){ team.allPlayers().forEach { openOverlay(it, 494);setInterfaceText(it, "60", 494, 0) } } + if(!quickStart){ team.allPlayers().forEach { openOverlay(it, 494);setInterfaceText(it, "30", 494, 0) } } countdownPulse = object : Pulse(1) { override fun pulse(): Boolean { if (state != BarbassaultState.STARTING) return true From c316929e6501776c28c551ff669af474dfd364f6 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 24 May 2026 15:07:30 -0400 Subject: [PATCH 097/123] Runner behavior --- .../barbassault/arena/BAGroundSpawn.kt | 42 ++++------ .../minigame/barbassault/arena/BASession.kt | 12 +-- .../arena/npcs/PenanceRunnerNPC.kt | 77 ++++++++++++++----- 3 files changed, 76 insertions(+), 55 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BAGroundSpawn.kt b/Server/src/main/content/minigame/barbassault/arena/BAGroundSpawn.kt index 087845973..a522508db 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAGroundSpawn.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAGroundSpawn.kt @@ -6,14 +6,12 @@ import core.game.node.item.Item import core.game.world.GameWorld import core.game.world.map.Location -class BAGroundSpawn(private var session: BarbassaultSession, private var respawnRate: Int, item: Item?, location: Location?, - var flag: Boolean? = null,lureRange: Int = 4) : GroundItem(item, location) { +class BAGroundSpawn(private var session: BarbassaultSession, private var respawnRate: Int, item: Item?, location: Location?, var flag: Boolean? = null, private var lureRange: Int = 4) : GroundItem(item, location) { + private var active = true private var autoSpawn = true - override fun toString(): String { - return "SessionGroundSpawn [name=$name, respawnRate=$respawnRate, loc=$location, flag = $flag]" - } + override fun toString(): String = "SessionGroundSpawn [name=$name, respawnRate=$respawnRate, loc=$location, flag = $flag]" fun init(): GroundItem { val thisGroundItem = GroundItemManager.create(this) @@ -21,30 +19,21 @@ class BAGroundSpawn(private var session: BarbassaultSession, private var respawn return thisGroundItem } - override fun isActive(): Boolean { - return active - } + override fun isActive(): Boolean = active + override fun setActive(value: Boolean) { active = value } - override fun setActive(value: Boolean) { - active = value - } + override fun isPrivate(): Boolean = false - override fun isPrivate(): Boolean { - return false - } + override fun isAutoSpawn(): Boolean = autoSpawn + fun setAutoSpawn(value: Boolean) { autoSpawn = value } + fun setRespawnRate(rate: Int) { respawnRate = rate } - override fun isAutoSpawn(): Boolean { - return autoSpawn - } - - fun setAutoSpawn(value: Boolean) { - autoSpawn = value - } + fun getLureRange():Int = lureRange + fun addLureRange(addRange: Int) { lureRange += addRange } override fun respawn() { - if (!autoSpawn || respawnRate < 0) { - return - } + if (!autoSpawn || respawnRate < 0) + GameWorld.Pulser.submit(object : Pulse(respawnRate) { override fun pulse(): Boolean { GroundItemManager.create(this@BAGroundSpawn) @@ -53,9 +42,4 @@ class BAGroundSpawn(private var session: BarbassaultSession, private var respawn }) } - fun setRespawnRate(rate: Int) { - respawnRate = rate - } - - } \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index cb73c4b5c..07eaf5faf 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -251,18 +251,14 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M } fun findClosestLure(target: Location): BAGroundSpawn? { + fun distance(a: Location, b: Location): Int =Math.abs(a.x - b.x) + Math.abs(a.y - b.y) return BAgroundItems .asSequence() - .filter { it.id in LureItems } - .minByOrNull { node -> - val dx = node.location.x - target.x - val dy = node.location.y - target.y - Math.abs(dx) + Math.abs(dy) - } + .map { it to distance(it.location, target) } + .filter { (node, dist) -> node.id in LureItems && dist <= node.getLureRange() } + .minByOrNull { (_, dist) -> dist }?.first } - - fun forfeit(){ state = BarbassaultState.FORFEIT } fun isInBarbAssaultGame() = state == BarbassaultState.IN_ARENA diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt index bc89a0f14..03f79b35b 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt @@ -10,9 +10,9 @@ import content.minigame.barbassault.arena.* import content.minigame.barbassault.getBASession import core.api.forceWalk -import core.api.removeGroundItem import core.api.sendChat import core.game.node.entity.player.Player +import core.game.world.map.RegionManager val PENANCE_RUNNER_IDS = listOf( @@ -32,6 +32,9 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { val BAD_EAT = "Blurghh" val TRAP_HIT = "Urghhh!" val ESCAPE = "Raaa!!" + var actionState = ACTION_STATE.SEEK_FOOD + + enum class ACTION_STATE { SEEK_FOOD, SEEK_PLAYER, STALLED, SEEK_ESCAPE, EATING, THINKING } override fun getXpMultiplier(self: NPC, attacker: Entity): Double { return 0.0 @@ -44,28 +47,66 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { self.setAttribute("barbass-role", BarbRole.DEFENDER) } - + var stateTicks = 0 override fun tick(self: NPC): Boolean { - val session = self.getAttribute(BA_SESSION_KEY) - if (session == null) return false - seekFood(self,session) + val session = self.getAttribute(BA_SESSION_KEY) ?: return false + + stateTicks++ + + if (stateTicks >= 6) { + stateTicks = 0 + pickNewState() + } + + when (actionState) { + ACTION_STATE.SEEK_FOOD -> seekFood(self, session) + ACTION_STATE.SEEK_PLAYER -> seekPlayers(self, session) + ACTION_STATE.SEEK_ESCAPE -> escape(self, session) + ACTION_STATE.STALLED -> stalled(self) + ACTION_STATE.EATING -> eating(self) + ACTION_STATE.THINKING -> self.resetWalk() + } + + self.shouldPreventStacking(self) return true } - fun seekFood(self:NPC,session: BarbassaultSession) { - val groundItem = session.findClosestLure(self.location) - if (groundItem != null) { - forceWalk(self,groundItem.location ,"DUMB") - if (self.location == groundItem.location) { - sendChat(self,if (groundItem.flag == true) GOOD_EAT else BAD_EAT) - session.destroyGroundItem(groundItem) - self.resetWalk() - } - } - return - } - fun nosyTowardPlayers(self: NPC,session: BarbassaultSession) { + fun seekFood(self: NPC, session: BarbassaultSession) { + val groundItem = session.findClosestLure(self.location) ?: return + val target = groundItem.location + val occupied = RegionManager.getLocalEntitys(target, 0).any { it != self && it.location == target } + + if (occupied) { + val adjacent = target.getCardinalTiles().firstOrNull { it.isNextTo(self) } + if (adjacent != null) { forceWalk(self, adjacent, "DUMB") } + + self.resetWalk() + self.faceLocation(target) + return + } + + forceWalk(self, target, "DUMB") + + if (self.location == target) { + sendChat(self, if (groundItem.flag == true) GOOD_EAT else BAD_EAT) + session.destroyGroundItem(groundItem) + self.resetWalk() + } + } + fun pickNewState() { + actionState = when ((0..2).random()) { + 0 -> ACTION_STATE.SEEK_FOOD + 1 -> ACTION_STATE.SEEK_PLAYER + else -> ACTION_STATE.SEEK_ESCAPE + } + } + private fun escape(self: NPC, session1: BarbassaultSession) { } + private fun stalled(self: NPC) { } + private fun eating(self:NPC){ } + + + fun seekPlayers(self: NPC,session: BarbassaultSession) { return } From 90469d61263d07ee59da4f755bc2560eb884b2ad Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 24 May 2026 22:04:05 -0400 Subject: [PATCH 098/123] Collectors Collection bag, Pickup eggs to bag, "lookin" and "empty" options --- .../content/minigame/barbassault/BAUtils.kt | 3 -- .../minigame/barbassault/BarbAssault.kt | 19 ++----- .../barbassault/arena/BAArenaListener.kt | 36 ++++++++++--- .../minigame/barbassault/arena/BASession.kt | 2 + .../barbassault/arena/CollectionBag.kt | 51 +++++++++++++++++++ .../barbassault/arena/scenery/EggCannon.kt | 3 +- 6 files changed, 85 insertions(+), 29 deletions(-) create mode 100644 Server/src/main/content/minigame/barbassault/arena/CollectionBag.kt diff --git a/Server/src/main/content/minigame/barbassault/BAUtils.kt b/Server/src/main/content/minigame/barbassault/BAUtils.kt index 2b98a9496..feb2fb675 100644 --- a/Server/src/main/content/minigame/barbassault/BAUtils.kt +++ b/Server/src/main/content/minigame/barbassault/BAUtils.kt @@ -2,7 +2,6 @@ package content.minigame.barbassault import content.minigame.barbassault.arena.BarbassaultSession import core.api.getTimer -import core.api.hasTimerActive import core.api.registerTimer import core.api.spawnTimer import core.game.node.entity.Entity @@ -11,8 +10,6 @@ import core.game.node.entity.player.Player import core.game.system.timer.PersistTimer import core.game.system.timer.RSTimer import core.game.system.timer.TimerFlag -import core.game.system.timer.impl.Poison -import core.game.system.timer.impl.PoisonImmunity import core.tools.secondsToTicks //thank you Ceikry diff --git a/Server/src/main/content/minigame/barbassault/BarbAssault.kt b/Server/src/main/content/minigame/barbassault/BarbAssault.kt index 5a18af0b4..fb75ae2d1 100644 --- a/Server/src/main/content/minigame/barbassault/BarbAssault.kt +++ b/Server/src/main/content/minigame/barbassault/BarbAssault.kt @@ -15,26 +15,13 @@ data class BarbAssaultPoints( val atk: Int = 0, val col: Int = 0, val def: Int = operator fun minus(other: BarbAssaultPoints): BarbAssaultPoints = BarbAssaultPoints(atk - other.atk,col - other.col,def - other.def,heal - other.heal).clamped() operator fun plus(other: BarbAssaultPoints): BarbAssaultPoints = BarbAssaultPoints(atk + other.atk,col + other.col,def + other.def,heal + other.heal).clamped() fun clamped(): BarbAssaultPoints = BarbAssaultPoints(atk.coerceIn(0, 500), col.coerceIn(0, 500), def.coerceIn(0, 500), heal.coerceIn(0, 500) ) + fun getPoints(role: BarbRole): Int = when (role) { BarbRole.ATTACKER -> atk; BarbRole.COLLECTOR -> col; BarbRole.DEFENDER -> def; BarbRole.HEALER -> heal; } } - data class BarbAssaultLevels(val atk: Int, val col: Int, val def: Int, val heal: Int) { - fun clamped(): BarbAssaultLevels = BarbAssaultLevels( atk.coerceIn(1, 5), col.coerceIn(1, 5), def.coerceIn(1, 5), heal.coerceIn(1, 5) - ) -} + fun clamped(): BarbAssaultLevels = BarbAssaultLevels( atk.coerceIn(1, 5), col.coerceIn(1, 5), def.coerceIn(1, 5), heal.coerceIn(1, 5) ) + fun getLevel(role: BarbRole): Int = when (role) { BarbRole.ATTACKER -> atk; BarbRole.COLLECTOR -> col; BarbRole.DEFENDER -> def; BarbRole.HEALER -> heal; } -fun BarbAssaultLevels.getLevel(role: BarbRole): Int = when (role) { - BarbRole.ATTACKER -> atk - BarbRole.COLLECTOR -> col - BarbRole.DEFENDER -> def - BarbRole.HEALER -> heal -} - -fun BarbAssaultPoints.getPoints(role: BarbRole): Int = when (role) { - BarbRole.ATTACKER -> atk - BarbRole.COLLECTOR -> col - BarbRole.DEFENDER -> def - BarbRole.HEALER -> heal } val ALL_BARBASS_ITEMS = arrayOf( diff --git a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt index bfa624534..1b24ef1d9 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt @@ -35,8 +35,10 @@ import core.game.world.map.Direction import core.game.world.map.Location import core.game.world.update.flag.context.Animation import core.game.world.update.flag.context.Graphics +import getCollectorBag import org.rs09.consts.Items import org.rs09.consts.Scenery +import resetCollectorBag //1889 5407 - Barb assualt QUEEN area -- 7508 @@ -56,6 +58,7 @@ class BarbassaultArenaListener : InteractionListener { val ROLE_ICON = intArrayOf( ATTACKER_ICON, DEFENDER_ICON, COLLECTOR_ICON, HEALER_ICON ) val Fix_trap_IDs = intArrayOf( Scenery.RUNNER_TRAP1_20230, Scenery.BROKEN_TRAP0_20231 ) val All_HEALING_VIALS = intArrayOf(Items.HEALING_VIAL_10546,Items.HEALING_VIAL1_10545,Items.HEALING_VIAL2_10544,Items.HEALING_VIAL3_10543,Items.HEALING_VIAL4_10542 ) + val ALL_COLLECTION_BAGS = intArrayOf(Items.COLLECTION_BAG_10521,Items.COLLECTION_BAG_10522,Items.COLLECTION_BAG_10523,Items.COLLECTION_BAG_10524,Items.COLLECTION_BAG_10525) object BA_ARENA { val MAIN = 7509; val QUEEN = 7508; val all = listOf(MAIN, QUEEN) } override fun defineListeners() { @@ -218,6 +221,7 @@ class BarbassaultArenaListener : InteractionListener { if (session.team.getRoleForPlayer(player) != BarbRole.DEFENDER) { sendMessage(player,"not a Defender") } + //if (getCollectorBag(player).addToBag()) session.pickUpGroundItem(player, node as BAGroundSpawn) return@on true } @@ -233,19 +237,34 @@ class BarbassaultArenaListener : InteractionListener { on(EggCannon.ALL_EGGS, IntType.GROUNDITEM, "Take") { player, node -> if (node !is GroundItem) return@on true val session = getBASession(player) ?: return@on true - //todo find correct message - if (session.team.getRoleForPlayer(player) != BarbRole.COLLECTOR) { sendMessage(player,"not a collector") ; return@on false } + //todo find authentic message + if (session.team.getRoleForPlayer(player) != BarbRole.COLLECTOR) { sendMessage(player, "You need to be a collector to do that");return@on false } - val currentCall = (session.roleCalls[BarbRole.COLLECTOR] as? BarbassaultSession.CollectorCall)?.required - if (node.id != currentCall?.itemId()){ - handleWrongEgg(player,node) - return@on false + val currentCall = (session.roleCalls[BarbRole.COLLECTOR]as? BarbassaultSession.CollectorCall)?.required + if (node.id != currentCall?.itemId()) { handleWrongEgg(player,node); return@on false } + + val eggInBag = getCollectorBag(player).addToBag(node) + + if (eggInBag) { + session.destroyGroundItem(node as BAGroundSpawn) + session.eventBus.emit(EggCollected(player,1)) + return@on true } + val didPickUp = session.pickUpGroundItem(player, node as BAGroundSpawn) - if (!didPickUp) { handleWrongEgg(player,node,false) } + if (!didPickUp) { handleWrongEgg(player,node,false); return@on true } + session.eventBus.emit(EggCollected(player,1)) return@on true } + on(ALL_COLLECTION_BAGS, IntType.ITEM, "Look-In") { player, node -> + getCollectorBag(player).lookInBag() + return@on true + } + on(ALL_COLLECTION_BAGS, IntType.ITEM, "Empty") { player, node -> + resetCollectorBag(player) + return@on true + } } fun handleWrongEgg(player: Player, groundItem: GroundItem,point: Boolean = true){ val session = getBASession(player) ?: return @@ -257,7 +276,8 @@ class BarbassaultArenaListener : InteractionListener { Items.BLUE_EGG_10533 -> BLUE_EGG_BREAK_875 else -> 874 } - Graphics(gfx) + //player.Graphics(gfx) + sendMessage(player,"The egg exploded") session.destroyGroundItem(groundItem as BAGroundSpawn) } diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index 07eaf5faf..6e936a364 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -34,6 +34,7 @@ import org.rs09.consts.Components import org.rs09.consts.Items import org.rs09.consts.Music.ASSAULT_AND_BATTERY_604 import org.rs09.consts.NPCs +import removeCollectorBag enum class BarbassaultState { PARTY_CREATION, STARTING, IN_ARENA,FORFEIT, COMPLETE,DEATH, END } @@ -383,6 +384,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M removeTimer(player, "teleblock") zone.cleanItems(player,ALL_BARBASS_ITEMS) + removeCollectorBag(player) clearLogoutListener(player, "ba-logout") player.fullRestore() destroyArena() diff --git a/Server/src/main/content/minigame/barbassault/arena/CollectionBag.kt b/Server/src/main/content/minigame/barbassault/arena/CollectionBag.kt new file mode 100644 index 000000000..161beba4f --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/arena/CollectionBag.kt @@ -0,0 +1,51 @@ +import content.minigame.barbassault.getBALevels +import core.api.sendMessage +import core.api.sendDialogueLines +import core.game.container.Container +import core.game.node.Node +import core.game.node.entity.player.Player +import core.game.node.item.Item +import org.rs09.consts.Items + +fun getCollectorBag(player: Player): CollectorBagManager { + return player.getAttribute(CollectorBagManager.KEY) ?: CollectorBagManager(player).also { player.setAttribute(CollectorBagManager.KEY, it) } +} +fun removeCollectorBag(player: Player) = player.removeAttribute(CollectorBagManager.KEY) +fun resetCollectorBag(player: Player) = player.setAttribute(CollectorBagManager.KEY,CollectorBagManager(player)) + +class CollectorBagManager(val player: Player) { + val bag: CollectorBag = CollectorBag(getCollectorBagCapacity(getBALevels(player).col)) + + fun getCollectorBagCapacity(level: Int): Int = when (level) { 1 -> 2; 2 -> 3; 3 -> 6; 4 -> 7; 5 -> 8; else -> 2 } + fun lookInBag() { + val green = bag.getEggCount(Items.GREEN_EGG_10531) + val red = bag.getEggCount(Items.RED_EGG_10532) + val blue = bag.getEggCount(Items.BLUE_EGG_10533) + + sendDialogueLines(player,"The collection bag contains:","$green poison eggs, $red explosive eggs","and $blue stun eggs.") + } + companion object { + val VALID_EGGS = setOf(Items.RED_EGG_10532,Items.GREEN_EGG_10531,Items.BLUE_EGG_10533) + val KEY = "collector_bag_manager" + } + + class CollectorBag(val capacity: Int) { + + var container = Container(3) + + fun totalEggs(): Int = container.toArray().filterNotNull().sumOf { it.amount } + fun freeEggSpace(): Int = capacity - totalEggs() + fun getEggCount(itemId: Int): Int = container.toArray().filterNotNull().count { it.id == itemId } + + } + + fun addToBag(node: Node): Boolean { + if (node.id !in VALID_EGGS) return false + if (bag.freeEggSpace() <= 0) { sendMessage(player, "Your bag is full."); return false } + + val egg = Item(node.id, 1) + bag.container.add(egg) + sendMessage(player, "You put the egg in the bag.") + return true + } +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt index 310a314f1..eaec5f7b2 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -182,7 +182,6 @@ class EggCannon : ComponentPlugin() { companion object { val ALL_EGGS = intArrayOf(Items.GREEN_EGG_10531,Items.RED_EGG_10532,Items.BLUE_EGG_10533,Items.OMEGA_EGG_10537) - fun openTurretIface(player: Player?) { player ?: return if (getBASession(player)?.eggHopper?.totalCount() == 0) { @@ -211,7 +210,7 @@ class EggCannon : ComponentPlugin() { val added = result?.get(color) ?: 0 //load from collector bag too if(invCount > 0){ - val result = session?.eggHopper?.addEgg(itemId,invCount) + // val result = session?.eggHopper?.addEgg(itemId,invCount) val color = session?.eggHopper?.eggColorMap?.get(itemId) val added = result?.get(color) ?: 0 sendMessage(player,"You load the hopper.") From e4d13bce0aa46c8de26635098f27f05f983b04fa Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 25 May 2026 09:32:40 -0400 Subject: [PATCH 099/123] Load egg hopper from collector bag --- .../barbassault/arena/BAArenaListener.kt | 2 +- .../barbassault/arena/scenery/EggCannon.kt | 55 ++++++++++++++----- 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt index 1b24ef1d9..529a69410 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt @@ -276,7 +276,7 @@ class BarbassaultArenaListener : InteractionListener { Items.BLUE_EGG_10533 -> BLUE_EGG_BREAK_875 else -> 874 } - //player.Graphics(gfx) + Graphics.send(Graphics(gfx), player.location) sendMessage(player,"The egg exploded") session.destroyGroundItem(groundItem as BAGroundSpawn) } diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt index eaec5f7b2..ea4335811 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/EggCannon.kt @@ -22,6 +22,7 @@ import core.game.node.item.Item import core.game.world.update.flag.context.Animation import core.plugin.Initializable import core.plugin.Plugin +import getCollectorBag import org.rs09.consts.Items import org.rs09.consts.NPCs @@ -200,23 +201,47 @@ class EggCannon : ComponentPlugin() { ALL_EGGS.forEach { loadHopperEggs(player, it) } //Load hopper emote, Same as place table?? } - fun loadHopperEggs(player: Player?,itemId: Int ){ + fun loadHopperEggs(player: Player?, itemId: Int) { player ?: return - //todo fix egg hopper - val session = getBASession(player) - val invCount = amountInInventory(player, itemId) - val result = session?.eggHopper?.addEgg(itemId,invCount) - val color = session?.eggHopper?.eggColorMap?.get(itemId) - val added = result?.get(color) ?: 0 - //load from collector bag too - if(invCount > 0){ - // val result = session?.eggHopper?.addEgg(itemId,invCount) - val color = session?.eggHopper?.eggColorMap?.get(itemId) - val added = result?.get(color) ?: 0 - sendMessage(player,"You load the hopper.") - removeItem(player, Item(itemId, added)) + + val session = getBASession(player) ?: return + val hopper = session.eggHopper + + val color = hopper.eggColorMap[itemId] ?: return + + val current = when (itemId) { + Items.GREEN_EGG_10531 -> hopper.green + Items.RED_EGG_10532 -> hopper.red + Items.BLUE_EGG_10533 -> hopper.blue + Items.OMEGA_EGG_10537 -> hopper.yellow + else -> 0 } - //if hopper full messsage "You can't load any more $eggType eggs." + + val free = 5 - current + if (free <= 0) { sendMessage(player, "You can't load any more $color eggs."); return } + + var loaded = 0 + val collectorBag = getCollectorBag(player).bag + val bagCount = collectorBag.getEggCount(itemId) + val fromBag = minOf(free, bagCount) + + repeat(fromBag) { collectorBag.container.remove(Item(itemId, 1)); loaded++ } + + val remaining = free - loaded + if (remaining > 0) { + val invCount = amountInInventory(player, itemId) + val fromInv = minOf(remaining, invCount) + + if (fromInv > 0) { + removeItem(player, Item(itemId, fromInv)) + loaded += fromInv + } + } + + if (loaded <= 0) { return } + + hopper.addEgg(itemId, loaded) + sendMessage(player, "You load the hopper.") } fun showEggHopperCount(player: Player?){ player ?: return From 2cdd2654ebece71d93281484c411f13ba0bee619 Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 25 May 2026 12:19:23 -0400 Subject: [PATCH 100/123] all pennance Cleared Message --- .../content/minigame/barbassault/BAUtils.kt | 11 ++++--- .../minigame/barbassault/arena/BAActivity.kt | 10 +++---- .../barbassault/arena/BAHornSystem.kt | 29 +------------------ .../minigame/barbassault/arena/BASession.kt | 20 ++++++++++--- .../arena/npcs/PenanceFighterNPC.kt | 8 ++--- .../arena/npcs/PenanceHealerNPC.kt | 4 ++- .../arena/npcs/PenanceRangerNPC.kt | 5 +++- .../arena/npcs/PenanceRunnerNPC.kt | 2 +- 8 files changed, 41 insertions(+), 48 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BAUtils.kt b/Server/src/main/content/minigame/barbassault/BAUtils.kt index feb2fb675..3c13c2e50 100644 --- a/Server/src/main/content/minigame/barbassault/BAUtils.kt +++ b/Server/src/main/content/minigame/barbassault/BAUtils.kt @@ -1,11 +1,13 @@ package content.minigame.barbassault import content.minigame.barbassault.arena.BarbassaultSession +import content.minigame.barbassault.arena.PenanceType import core.api.getTimer import core.api.registerTimer import core.api.spawnTimer import core.game.node.entity.Entity import core.game.node.entity.combat.ImpactHandler +import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.system.timer.PersistTimer import core.game.system.timer.RSTimer @@ -23,13 +25,13 @@ const val BA_SESSION_KEY = "ba-session" * or `null` if they are not participating in Barbarian Assault. */ //getBASession(player) -fun getBASession(player: Player): BarbassaultSession? = player.getAttribute(BA_SESSION_KEY) +fun getBASession(entity: Entity): BarbassaultSession? = entity.getAttribute(BA_SESSION_KEY) -fun setBASession(player: Player, session: BarbassaultSession?) { +fun setBASession(entity: Entity, session: BarbassaultSession?) { if (session == null) { - player.removeAttribute(BA_SESSION_KEY) + entity.removeAttribute(BA_SESSION_KEY) } else { - player.setAttribute(BA_SESSION_KEY, session) + entity.setAttribute(BA_SESSION_KEY, session) } } @@ -262,3 +264,4 @@ fun applyBAPoison (entity: Entity, source: Entity, severity: Int) { registerTimer(entity, spawnTimer(source, severity)) } } + diff --git a/Server/src/main/content/minigame/barbassault/arena/BAActivity.kt b/Server/src/main/content/minigame/barbassault/arena/BAActivity.kt index 0c5d452a5..3d9f52d3c 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAActivity.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAActivity.kt @@ -51,17 +51,17 @@ open class BAActivity : ActivityPlugin("barbassault",false, true, true,ZoneRestr //BERR must of been good, idk why I put this in here return super.continueAttack(e, target, style, message) } - override fun death(e: Entity?, killer: Entity?): Boolean { - val ename = e?.name - log(this.javaClass, Log.FINE,"$ename has died in Barbass") + override fun death(e: Entity, killer: Entity?): Boolean { + log(this.javaClass, Log.FINE,"${e.name} has died in Barbass") + val session = getBASession(e) ?:return false if (e is Player) { - val session = getBASession(e) - session?.state = BarbassaultState.DEATH + session.state = BarbassaultState.DEATH e.getProperties().setTeleportLocation(null) return true } if (e is NPC) { // dropPenanceEggCluster(e) + session.pennanceClearedMessage(e) } return false } diff --git a/Server/src/main/content/minigame/barbassault/arena/BAHornSystem.kt b/Server/src/main/content/minigame/barbassault/arena/BAHornSystem.kt index a238c223c..b2488f976 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAHornSystem.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAHornSystem.kt @@ -131,9 +131,7 @@ class BAHornSystem : InteractionListener { //I should set a value in my players session instead of scanning the inventory every time for a horn. //multiple horn IDs suggest retail would use a gearSet check to apply a damage modifier. fun getAttackerHorn(player: Player): AttackerHorn? = AttackerHorn.values().firstOrNull { inInventory(player, it.itemId) } - fun getHealerHorn(player: Player): HealerHorn? = HealerHorn.values().firstOrNull { inInventory(player, it.itemId) } - fun getCollectorBag(player: Player): CollectionBag? = CollectionBag.values().firstOrNull { inInventory(player, it.itemId) } - } +} enum class AttackerHorn(val itemId: Int) { LEVEL_ONE(Items.ATTACKER_HORN_10516), @@ -148,29 +146,4 @@ class BAHornSystem : InteractionListener { } } - enum class HealerHorn(val itemId: Int, val healAmount: Int) { - LEVEL_ONE(Items.HEALER_HORN_10526, 5), - LEVEL_TWO(Items.HEALER_HORN_10527, 15), - LEVEL_THREE(Items.HEALER_HORN_10528, 20), - LEVEL_FOUR(Items.HEALER_HORN_10529, 25), - LEVEL_FIVE(Items.HEALER_HORN_10530, 35); - - companion object { - private val map = values().associateBy(HealerHorn::itemId) - fun fromId(id: Int): HealerHorn? = map[id] - } - } - - enum class CollectionBag(val itemId: Int) { - LEVEL_ONE(Items.COLLECTION_BAG_10521), - LEVEL_TWO(Items.COLLECTION_BAG_10522), - LEVEL_THREE(Items.COLLECTION_BAG_10523), - LEVEL_FOUR(Items.COLLECTION_BAG_10524), - LEVEL_FIVE(Items.COLLECTION_BAG_10525); - - companion object { - private val map = values().associateBy(CollectionBag::itemId) - fun fromId(id: Int): CollectionBag? = map[id] - } - } } \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index 6e936a364..ecc5b569b 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -12,6 +12,7 @@ import content.minigame.barbassault.getBASession import content.minigame.barbassault.getBAWave import content.minigame.barbassault.lobby.* import content.minigame.barbassault.lobby.BALobby.Companion.waveLobbies +import content.minigame.barbassault.setBASession import core.api.* import core.game.node.Node import core.game.node.entity.Entity @@ -35,6 +36,7 @@ import org.rs09.consts.Items import org.rs09.consts.Music.ASSAULT_AND_BATTERY_604 import org.rs09.consts.NPCs import removeCollectorBag +import kotlin.text.lowercase enum class BarbassaultState { PARTY_CREATION, STARTING, IN_ARENA,FORFEIT, COMPLETE,DEATH, END } @@ -52,6 +54,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M val sessionNpcs = mutableListOf() var currentNPCCount = SpawnCaps(0,0,0,0) + var currentNPCDeathCount = SpawnCaps(0,0,0,0) var npcTunnel: List = listOf( PenanceNpcTunnel(PenanceType.RANGER,location(17,47,0),location(18,46,0),Direction.SOUTH), @@ -184,6 +187,15 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M tracker.defenderStats.runnersPast++ } } + fun pennanceClearedMessage(npc: NPC) { + val session = getBASession(npc) ?: return + val type = npc.getAttribute("barbass-type") + session.currentNPCDeathCount[type]++ + if (session.currentNPCDeathCount[type] == session.currentWaveDefinition.caps[type]) { + type.toString() + session.broadcast("All of the Penance ${type.name.lowercase().replaceFirstChar { it.uppercase() }}s have been killed!") + } + } fun setCaveBlocked(node: Node, blocked: Boolean) { val tunnel = npcTunnel.firstOrNull { t -> base.transform(t.caveLocation) == node.location } ?: return @@ -217,7 +229,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M val npc = sessionNPCSpawn(npcId, location(30, 31, 0), spawn.direction) npc?.location = base.transform(spawn.spawnOffset) - npc?.setAttribute(BA_SESSION_KEY, this) + setBASession(npc as Entity,this) currentNPCCount[type]++ return isCaveBlocked(type) @@ -393,9 +405,9 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M fun produceGroundSpawnItem(rate:Int,item: Item,location: Location): BAGroundSpawn = BAGroundSpawn(this, rate, item, base.transform(location)).also { it.init() } fun spawnEggCannons() { - eggCannonNpcWest = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(21, 34, 0), Direction.NORTH ) + eggCannonNpcWest = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, location(21, 34, 0), Direction.NORTH ) if (team.wave == 10) return - eggCannonNpcEast = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, base.transform(40, 34, 0), Direction.NORTH ) + eggCannonNpcEast = sessionNPCSpawn( NPCs.EGG_LAUNCHER_5026, location(40, 34, 0), Direction.NORTH ) } fun clearGroundItems(){ @@ -430,7 +442,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M player.equipment.add(Item(itemId),true,false) } - private fun broadcast(message: String) = team.allPlayers().forEach { sendMessage(it, message) } + fun broadcast(message: String) = team.allPlayers().forEach { sendMessage(it, message) } fun broadcastToRole(role: BarbRole, message: String) = team.getPlayersByRole(role).forEach { sendMessage(it, message) } fun updateBarbHealerIfaceHPOfPlayer(player: Player) = team.getPlayersByRole(BarbRole.HEALER).forEach { HealerIfaceHPUpdatePlayer(it, player)} diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt index 550c99700..3cf7f0517 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt @@ -3,6 +3,7 @@ package content.minigame.barbassault.arenas.monsters import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent import content.minigame.barbassault.arena.BACombatValidation +import content.minigame.barbassault.arena.PenanceType import content.minigame.barbassault.arena.npcs.dropPenanceEggCluster import content.minigame.barbassault.getBASession import core.api.* @@ -54,14 +55,12 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { override fun onCreation (self: NPC) { self.setAttribute("agg_radius",6) self.isWalks = true - // self.isNeverWalks = false self.properties.isNPCWalkable = false self.walkRadius = 24 self.isAggressive = true self.isRespawn = false - - self.setAttribute("barbass-role", BarbRole.ATTACKER) + self.setAttribute("barbass-type", PenanceType.FIGHTER) self.definition.combatDistance = 1 self.properties.combatPulse.style = CombatStyle.MELEE @@ -70,10 +69,11 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { override fun onDeathFinished(self: NPC, killer: Entity) { val player = killer as? Player ?: return - val session = getBASession(player) ?: return + val session = getBASession(self) ?: return dropPenanceEggCluster(killer,self) session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) + super.onDeathFinished(self, killer) } diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt index 0fee85d40..71f033e46 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt @@ -2,6 +2,7 @@ package content.minigame.barbassault.arena.npcs import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent +import content.minigame.barbassault.arena.PenanceType import content.minigame.barbassault.getBASession import core.game.node.entity.Entity import core.game.node.entity.combat.CombatStyle @@ -30,9 +31,10 @@ class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS) { } override fun onCreation (self: NPC) { - self.setAttribute("barbass-role", BarbRole.HEALER) + self.setAttribute("barbass-type", PenanceType.HEALER) self.isWalks = true self.walkRadius = 24 + self.isRespawn = false // self.isIgnoreAttackRestrictions(self) //self.getSkills().setStaticLevel(Skills.HITPOINTS,15) diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt index 7a10b5b60..7b4031ca7 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt @@ -3,6 +3,7 @@ package content.minigame.barbassault.arena.npcs import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent import content.minigame.barbassault.arena.BACombatValidation +import content.minigame.barbassault.arena.PenanceType import content.minigame.barbassault.getBASession import core.api.* import core.api.getItemFromEquipment @@ -52,8 +53,10 @@ class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { self.isNeverWalks = false self.walkRadius = 24 self.isAggressive = true + self.isRespawn = false self.definition.combatGraphics[1] = Graphics(866, 25, 0) - self.setAttribute("barbass-role",BarbRole.ATTACKER) + self.setAttribute("barbass-type", PenanceType.RANGER) + self.definition.combatDistance = 8 self.properties.combatPulse.style = CombatStyle.RANGE diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt index 03f79b35b..025f5f641 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt @@ -44,7 +44,7 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { self.walkRadius = 24 self.destinationFlag - self.setAttribute("barbass-role", BarbRole.DEFENDER) + self.setAttribute("barbass-type", PenanceType.RUNNER) } var stateTicks = 0 From 4d541df89c2e7605fd336dc614dd3a8965e102a3 Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 25 May 2026 15:16:35 -0400 Subject: [PATCH 101/123] Bots dont get stuck outside quickstart wave lobby anymore. --- .../minigame/barbassault/bots/BABot.kt | 192 ++++++++---------- .../barbassault/bots/BACombatState.kt | 8 +- 2 files changed, 97 insertions(+), 103 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/bots/BABot.kt b/Server/src/main/content/minigame/barbassault/bots/BABot.kt index a25db4d13..2d4dbfed3 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BABot.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BABot.kt @@ -4,10 +4,10 @@ import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbassaultState import content.minigame.barbassault.getBARoleForPlayer import content.minigame.barbassault.getBASession -import content.minigame.barbassault.lobby.BarbassQuickWaveActivity.Companion.addToQueue import content.minigame.barbassault.lobby.BALobby.Companion.MAIN_LOBBY import content.minigame.barbassault.lobby.BALobby.Companion.QUICK_START import content.minigame.barbassault.lobby.BALobby.Companion.waveLobbies +import content.minigame.barbassault.lobby.BarbassQuickWaveActivity.Companion.addToQueue import core.api.forceMove import core.api.getRegionBorders import core.game.bots.CombatBotAssembler @@ -17,134 +17,122 @@ import core.game.node.item.Item import core.game.world.map.Location import org.rs09.consts.Scenery -class BABot(l: Location) : PvMBots(legitimizeLocation(l)){ +class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { + init { CombatBotAssembler().gearPCiMeleeBot(this) - val icape: Item = this.equipment.get(1) - EquipHandler.unequip(this,1,icape.id) + + val cape: Item? = equipment.get(1) + if (cape != null) { + EquipHandler.unequip(this, 1, cape.id) + } } - var tick = 0 - var combatMoveTimer = 0 - var justStartedGame = true - var movetimer = 0 - val combathandler = BACombatState(this) - var time = 0 - enum class State { OUTSIDE_ROOM, ENTER_ROOM,REFRESH, WAITING_IN_ROOM, PLAY_GAME, GET_TO_BA } + private val combatHandler = BACombatState(this) + private var tickTimer = 0 + private var moveTimer = 0 + + enum class State { GET_TO_BA, OUTSIDE_ROOM, ENTER_ROOM, WAITING_IN_ROOM, PLAY_GAME } override fun tick() { super.tick() - tick++ - time++ - movetimer-- - if (movetimer <= 0) { - movetimer = 0 - customState = "$state$movetimer" - when (state) { - State.OUTSIDE_ROOM -> toBALobby() - State.ENTER_ROOM -> enterRoom() - State.REFRESH -> enterRoom() - State.WAITING_IN_ROOM -> idleInRoom() - State.PLAY_GAME -> doRoleTask() - State.GET_TO_BA -> doRoleTask() - } - } - } - var oneact = false - private fun enterRoom() { - this.sendChat("Attempting.....") - if (!oneact) { - val quickDoor = getClosestNodeWithEntry(2, Scenery.DOOR_20209) - // quickDoor.interaction.handle(this, quickDoor.interaction[0]) - if (quickDoor != null){ - quickDoor.interaction.handle(this, quickDoor.interaction[0]) - // this.dialogueInterpreter.handle(234,1) - this.dialogueInterpreter.handle(234,6) - oneact = true - } + tickTimer++ + moveTimer-- - } - } - private fun idleInRoom() { - //chill, say somethings, walk around in .walkablearea - } - private fun doRoleTask() { - val myRole = getBARoleForPlayer(this) - when (myRole) { - BarbRole.ATTACKER -> combathandler.fightNPCs() - BarbRole.DEFENDER -> combathandler.handleDefender() - BarbRole.COLLECTOR -> combathandler.handleCollector() - BarbRole.HEALER -> combathandler.handleHealer() - null -> return - } - combathandler.chatter() - } + customState = state.name - var switch = false - var diagone = false - private fun toBALobby() { - time = 0 - if (!switch){ - this.teleport(MAIN_LOBBY.randomWalkableLoc) - switch = true + if (moveTimer > 0) { return } - if (switch) { - val quickDoor = getClosestNodeWithEntry(60, Scenery.DOOR_20209) - if (quickDoor == null) { - // switch = false - //this.teleport(MAIN_LOBBY.randomWalkableLoc) - State.OUTSIDE_ROOM - } else { - // switch = false - this.sendChat("Attempting to.....") - quickDoor.interaction.handle(this, quickDoor.interaction[0]) - val quickDoorclose = getClosestNodeWithEntry(2, Scenery.DOOR_20209) - if(quickDoorclose != null) { - if (!diagone){ - forceMove(this, this.location, this.location.transform(0, -1, 0), 25, 60, null, 819){ - addToQueue(this, null) - combathandler.walkToIterator(QUICK_START.randomWalkableLoc) - } - diagone = true - } - - } - // this.dialogueInterpreter.handle(234,6) - State.ENTER_ROOM - } + when (state) { + State.GET_TO_BA -> getToBA() + State.OUTSIDE_ROOM -> outsideRoom() + State.ENTER_ROOM -> enterRoom() + State.WAITING_IN_ROOM -> waitingInRoom() + State.PLAY_GAME -> playGame() } } - fun isInLobbyOnly(location: Location): Boolean { - return getRegionBorders(10322).insideBorder(location) && waveLobbies.none { it != MAIN_LOBBY && it.insideBorder(location) } - } - private val state: State + private val state: State get() { - if (QUICK_START.insideBorder(this.getLocation())) { - return State.WAITING_IN_ROOM - } - if (getBASession(this)?.state == BarbassaultState.IN_ARENA) { + + val session = getBASession(this) + + if (session?.state == BarbassaultState.IN_ARENA) { return State.PLAY_GAME } - if (isInLobbyOnly(this.getLocation())) { - return State.OUTSIDE_ROOM + + if (QUICK_START.insideBorder(location)) { + return State.WAITING_IN_ROOM } - if (getClosestNodeWithEntry(1, Scenery.DOOR_20209) != null) { + if (!isInLobbyOnly(location)) { + return State.WAITING_IN_ROOM + } + + if (getClosestNodeWithEntry(2, Scenery.DOOR_20209) != null) { return State.ENTER_ROOM } - if (time == 1200) { - return State.GET_TO_BA + + if (isInLobbyOnly(location)) { + return State.OUTSIDE_ROOM } + return State.GET_TO_BA } - companion object { - fun legitimizeLocation(l: Location): Location { - return l + private fun getToBA() { + teleport(MAIN_LOBBY.randomWalkableLoc) + moveTimer = 3 + } + + private fun outsideRoom() { + val quickDoor = getClosestNodeWithEntry(60, Scenery.DOOR_20209)?: return + quickDoor.interaction.handle(this, quickDoor.interaction[0]) + moveTimer = 2 + } + + + private fun enterRoom() { + val quickDoor = getClosestNodeWithEntry(2, Scenery.DOOR_20209)?: return + + quickDoor.interaction.handle(this, quickDoor.interaction[0]) + + forceMove(this,location,location.transform(0, -1, 0),25,60,null,819) { + addToQueue(this, null) + combatHandler.walkToIterator(QUICK_START.randomWalkableLoc) + } + + moveTimer = 4 + } + + private fun waitingInRoom() { + if (tickTimer % 50 == 0) { + combatHandler.chatter() } } + private fun playGame() { + when (getBARoleForPlayer(this)) { + BarbRole.ATTACKER -> combatHandler.fightNPCs() + BarbRole.DEFENDER -> combatHandler.handleDefender() + BarbRole.COLLECTOR -> combatHandler.handleCollector() + BarbRole.HEALER -> combatHandler.handleHealer() + null -> return + } + } + + fun isInLobbyOnly(location: Location): Boolean { + return getRegionBorders(10322).insideBorder(location) + && waveLobbies.none {it != MAIN_LOBBY && it.insideBorder(location) + } + } + + companion object { + + fun legitimizeLocation(l: Location): Location { + return l + } + } } \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt index 6c6857efd..b4eb6e484 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt @@ -2,6 +2,8 @@ package content.minigame.barbassault.bots import content.minigame.barbassault.BarbRole import content.minigame.barbassault.getBARoleForPlayer +import content.minigame.barbassault.getBASession +import core.api.getRegionBorders import core.game.interaction.MovementPulse import core.game.world.map.Location import core.game.world.map.path.Pathfinder @@ -22,10 +24,14 @@ class BACombatState(val bot: BABot) { } fun handleDefender() { bot.customState = "Lure Runners" + val session = getBASession(bot) ?: return + walkToIterator(session.region.borders.randomWalkableLoc) //bot.AttackNpcsInRadius(25) } fun handleCollector() { bot.customState = "Collecting Eggs" + val session = getBASession(bot) ?: return + walkToIterator(session.region.borders.randomWalkableLoc) //bot.AttackNpcsInRadius(25) } fun handleHealer() { @@ -35,7 +41,7 @@ class BACombatState(val bot: BABot) { fun chatter() { bot.sendChat("LETS GOO!") - if (krng.nextInt(200) != 0) return + if (krng.nextInt(12) != 0) return val role = getBARoleForPlayer(bot) val messages = when (role) { BarbRole.ATTACKER -> listOf("Call pls", "Wrong style?", "Attacking!") From e1f941f4965b7b6496fb342006eb2c6ccc7b846e Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 25 May 2026 21:55:05 -0400 Subject: [PATCH 102/123] BAbots now "use" their horns --- .../minigame/barbassault/arena/BASession.kt | 51 ++++++-- .../minigame/barbassault/bots/BABot.kt | 37 ++---- .../barbassault/bots/BACombatState.kt | 115 +++++++++++------- 3 files changed, 120 insertions(+), 83 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index ecc5b569b..31d2679a6 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -5,6 +5,7 @@ import content.minigame.barbassault.BA_SESSION_KEY import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BAActivity import content.minigame.barbassault.LureItems +import content.minigame.barbassault.arena.BAHornSystem.BaCall import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.GloryHorn import content.minigame.barbassault.getBALevels @@ -516,14 +517,15 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M roleCalls[BarbRole.DEFENDER]?.toCall = roleCalls[BarbRole.HEALER]?.required updateRoleUI() updateGloryHornUI() + team.allPlayers().forEach { if(it.isArtificial){ botMakeCall(it) } } } fun updateGloryHornUI(){ team.allPlayers().forEach { player -> val atkCallText = (roleCalls[BarbRole.COLLECTOR]?.toCall as? AttackerStyle)?.let { "${it.top}${it.bottom}" } ?: GloryHorn.CallOut.defaultText - val colCallText = (roleCalls[BarbRole.ATTACKER]?.toCall as? HasUIText)?.ui ?: GloryHorn.CallOut.defaultText - val defCallText = (roleCalls[BarbRole.HEALER]?.toCall as? HasUIText)?.ui ?: GloryHorn.CallOut.defaultText - val healCallText = (roleCalls[BarbRole.DEFENDER]?.toCall as? HasUIText)?.ui ?: GloryHorn.CallOut.defaultText + val colCallText = (roleCalls[BarbRole.ATTACKER]?.toCall as? HasUIText)?.ui ?: GloryHorn.CallOut.defaultText + val defCallText = (roleCalls[BarbRole.HEALER]?.toCall as? HasUIText)?.ui ?: GloryHorn.CallOut.defaultText + val healCallText = (roleCalls[BarbRole.DEFENDER]?.toCall as? HasUIText)?.ui ?: GloryHorn.CallOut.defaultText setInterfaceText(player, atkCallText, Components.BARBASSAULT_HORN_484, GloryHorn.CallOut.attacker) setInterfaceText(player, colCallText, Components.BARBASSAULT_HORN_484, GloryHorn.CallOut.collector) @@ -553,6 +555,30 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M updateRoleUI() } + fun botMakeCall(bot: Player) { + val session = getBASession(bot) ?: return + val role = session.team.getRoleForPlayer(bot) + + val calledValue = when (role) { + BarbRole.ATTACKER -> session.roleCalls[BarbRole.ATTACKER]?.toCall as? EggColor + BarbRole.COLLECTOR -> session.roleCalls[BarbRole.COLLECTOR]?.toCall as? AttackerStyle + BarbRole.DEFENDER -> session.roleCalls[BarbRole.DEFENDER]?.toCall as? PoisonFood + BarbRole.HEALER -> session.roleCalls[BarbRole.HEALER]?.toCall as? LureFood + } ?: return + + session.onHornCall(bot, calledValue) + + val text = when (calledValue) { + is EggColor -> calledValue.baCall().text + is PoisonFood -> calledValue.baCall().text + is LureFood -> calledValue.baCall().text + is AttackerStyle -> calledValue.baCall().text + else -> return + } + + sendChat(bot, text) + } + fun onHornGloryCall(calledValue: Any) { val targetRole = when (calledValue) { is AttackerStyle -> BarbRole.ATTACKER @@ -575,21 +601,26 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M val roleCalls: MutableMap> = mutableMapOf() interface HasUIText { val ui: String } enum class AttackerStyle(val top: String, val bottom: String) : HasUIText { - STYLE_1("Controlled/","Bronze/Wind"), - STYLE_2("Accurate/","Iron/Water"), - STYLE_3("Aggressive/","Steel/Earth"), - STYLE_4("Defensive/","Mithril/Fire"); + STYLE_1("Controlled/","Bronze/Wind"),STYLE_2("Accurate/","Iron/Water"),STYLE_3("Aggressive/","Steel/Earth"),STYLE_4("Defensive/","Mithril/Fire"); override val ui: String get() = top + fun baCall() = when (this) { STYLE_1 -> BaCall.ATTACKER_STYLE_1; STYLE_2 -> BaCall.ATTACKER_STYLE_2;STYLE_3 -> BaCall.ATTACKER_STYLE_3;STYLE_4 -> BaCall.ATTACKER_STYLE_4 + } } enum class EggColor(override val ui: String): HasUIText { RED("Red Eggs"), GREEN("Green Eggs"),BLUE("Blue Eggs"); - fun itemId(): Int = when (this) { RED -> Items.RED_EGG_10532; GREEN -> Items.GREEN_EGG_10531; BLUE -> Items.BLUE_EGG_10533 }} + fun itemId(): Int = when (this) { RED -> Items.RED_EGG_10532; GREEN -> Items.GREEN_EGG_10531; BLUE -> Items.BLUE_EGG_10533 } + fun baCall() = when (this) { RED -> BaCall.COLLECTOR_RED; GREEN -> BaCall.COLLECTOR_GREEN;BLUE -> BaCall.COLLECTOR_BLUE} + } enum class PoisonFood(override val ui: String): HasUIText { TOFU("Pois. Tofu"), WORMS("Pois. Worms"), MEAT("Pois. Meat"); - fun itemId(): Int = when (this) { TOFU -> Items.POISONED_TOFU_10539; WORMS -> Items.POISONED_WORMS_10540; MEAT -> Items.POISONED_MEAT_10541 }} + fun itemId(): Int = when (this) { TOFU -> Items.POISONED_TOFU_10539; WORMS -> Items.POISONED_WORMS_10540; MEAT -> Items.POISONED_MEAT_10541 } + fun baCall() = when (this) { TOFU -> BaCall.HEALER_TOFU; WORMS -> BaCall.HEALER_WORMS; MEAT -> BaCall.HEALER_MEAT} + } enum class LureFood(override val ui: String) : HasUIText { TOFU("Tofu"), CRACKERS("Crackers"), WORMS("Worms"); - fun itemId(): Int = when (this) { WORMS -> Items.WORMS_10515; CRACKERS -> Items.CRACKERS_10513; TOFU -> Items.TOFU_10514 }} + fun itemId(): Int = when (this) { WORMS -> Items.WORMS_10515; CRACKERS -> Items.CRACKERS_10513; TOFU -> Items.TOFU_10514 } + fun baCall() = when (this) { TOFU -> BaCall.DEFENDER_TOFU; CRACKERS -> BaCall.DEFENDER_CRACKERS;WORMS -> BaCall.DEFENDER_WORMS} + } class AttackerCall( override val required: AttackerStyle ) : RoleCall() class HealerCall( override val required: PoisonFood ) : RoleCall() diff --git a/Server/src/main/content/minigame/barbassault/bots/BABot.kt b/Server/src/main/content/minigame/barbassault/bots/BABot.kt index 2d4dbfed3..05b14e96a 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BABot.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BABot.kt @@ -10,6 +10,7 @@ import content.minigame.barbassault.lobby.BALobby.Companion.waveLobbies import content.minigame.barbassault.lobby.BarbassQuickWaveActivity.Companion.addToQueue import core.api.forceMove import core.api.getRegionBorders +import core.game.bots.AIPlayer import core.game.bots.CombatBotAssembler import core.game.bots.PvMBots import core.game.global.action.EquipHandler @@ -20,12 +21,11 @@ import org.rs09.consts.Scenery class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { init { + (this as AIPlayer).fullRestore() CombatBotAssembler().gearPCiMeleeBot(this) val cape: Item? = equipment.get(1) - if (cape != null) { - EquipHandler.unequip(this, 1, cape.id) - } + if (cape != null) { EquipHandler.unequip(this, 1, cape.id)} } private val combatHandler = BACombatState(this) @@ -42,9 +42,7 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { customState = state.name - if (moveTimer > 0) { - return - } + if (moveTimer > 0) { return } when (state) { State.GET_TO_BA -> getToBA() @@ -57,28 +55,13 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { private val state: State get() { - val session = getBASession(this) - if (session?.state == BarbassaultState.IN_ARENA) { - return State.PLAY_GAME - } - - if (QUICK_START.insideBorder(location)) { - return State.WAITING_IN_ROOM - } - if (!isInLobbyOnly(location)) { - return State.WAITING_IN_ROOM - } - - if (getClosestNodeWithEntry(2, Scenery.DOOR_20209) != null) { - return State.ENTER_ROOM - } - - if (isInLobbyOnly(location)) { - return State.OUTSIDE_ROOM - } - + if (session?.state == BarbassaultState.IN_ARENA) { return State.PLAY_GAME } + if (QUICK_START.insideBorder(location)) { return State.WAITING_IN_ROOM } + if (!isInLobbyOnly(location)) { return State.WAITING_IN_ROOM } + if (getClosestNodeWithEntry(2, Scenery.DOOR_20209) != null) { return State.ENTER_ROOM } + if (isInLobbyOnly(location)) { return State.OUTSIDE_ROOM } return State.GET_TO_BA } @@ -101,7 +84,7 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { forceMove(this,location,location.transform(0, -1, 0),25,60,null,819) { addToQueue(this, null) - combatHandler.walkToIterator(QUICK_START.randomWalkableLoc) + combatHandler.walkTo(QUICK_START.randomWalkableLoc) } moveTimer = 4 diff --git a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt index b4eb6e484..605a996ca 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt @@ -3,72 +3,95 @@ package content.minigame.barbassault.bots import content.minigame.barbassault.BarbRole import content.minigame.barbassault.getBARoleForPlayer import content.minigame.barbassault.getBASession -import core.api.getRegionBorders +import core.api.sendChat import core.game.interaction.MovementPulse +import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.map.path.Pathfinder import core.tools.RandomFunction -import core.game.world.GameWorld -import java.util.* +import kotlin.random.Random +class BACombatState(private val bot: BABot) { -class BACombatState(val bot: BABot) { - private val Random = Random() - private val krng = kotlin.random.Random.Default - val randomtype = Random().nextInt(100) - + private val rng = Random.Default fun fightNPCs() { bot.customState = "Fight NPCs" bot.AttackNpcsInRadius(25) - } - fun handleDefender() { - bot.customState = "Lure Runners" - val session = getBASession(bot) ?: return - walkToIterator(session.region.borders.randomWalkableLoc) - //bot.AttackNpcsInRadius(25) - } - fun handleCollector() { - bot.customState = "Collecting Eggs" - val session = getBASession(bot) ?: return - walkToIterator(session.region.borders.randomWalkableLoc) - //bot.AttackNpcsInRadius(25) - } - fun handleHealer() { - bot.customState = "Healer Idling" - //bot.AttackNpcsInRadius(25) + } - fun chatter() { - bot.sendChat("LETS GOO!") - if (krng.nextInt(12) != 0) return + fun handleDefender() { + + bot.customState = "Lure Runners" + + val session = getBASession(bot) ?: return + + randomWalk(session.region.borders.randomWalkableLoc, 3) + } + + fun handleCollector() { + + bot.customState = "Collecting Eggs" + + val session = getBASession(bot) ?: return + + randomWalk(session.region.borders.randomWalkableLoc, 3) + } + + fun handleHealer() { + + bot.customState = "Healing" + + val session = getBASession(bot) ?: return + + randomWalk(session.region.borders.randomWalkableLoc, 2) + } + + fun chatter() { + if (rng.nextInt(12) != 0) { return } val role = getBARoleForPlayer(bot) val messages = when (role) { - BarbRole.ATTACKER -> listOf("Call pls", "Wrong style?", "Attacking!") - BarbRole.HEALER -> listOf("Need poison", "Healing!", "Healer here","Call pls") - BarbRole.DEFENDER -> listOf("Dropping food", "Come here runners","Call pls") - BarbRole.COLLECTOR -> listOf("Eggs!", "Wrong egg?","Call pls") - else -> listOf("Lag...", "Nice", "Oops") + BarbRole.ATTACKER -> listOf("Call pls","Wrong style?","Attacking!") + BarbRole.HEALER -> listOf("Need poison","Healing!","Healer here","Call pls") + BarbRole.DEFENDER -> listOf("Dropping food","Come here runners","Call pls") + BarbRole.COLLECTOR -> listOf("Eggs!","Wrong egg?","Call pls") + else -> listOf("Lag...","Nice","Oops") } - bot.sendChat(messages.random(krng)) + + bot.sendChat(messages.random(rng)) } - fun randomWalkTo(loc: Location, radius: Int) { - var newloc = loc.transform(RandomFunction.random(radius, -radius), - RandomFunction.random(radius, -radius), 0) - if(!bot.walkingQueue.isMoving) { - walkToIterator(newloc) + fun randomWalk(center: Location, radius: Int) { + + if (bot.walkingQueue.isMoving) { + return } + + val destination = center.transform( + RandomFunction.random(-radius, radius), + RandomFunction.random(-radius, radius), + 0 + ) + + walkTo(destination) } - fun walkToIterator(loc: Location){ - var diffX = loc.x - bot.location.x - var diffY = loc.y - bot.location.y + fun walkTo(destination: Location) { - GameWorld.Pulser.submit(object : MovementPulse(bot, bot.location.transform(diffX, diffY, 0), Pathfinder.SMART) { - override fun pulse(): Boolean { - return true + val diffX = destination.x - bot.location.x + val diffY = destination.y - bot.location.y + + GameWorld.Pulser.submit( + object : MovementPulse( + bot, + bot.location.transform(diffX, diffY, 0), + Pathfinder.SMART + ) { + override fun pulse(): Boolean { + return true + } } - }) + ) } -} +} \ No newline at end of file From a6e6d5cfdfdb4dfc704c037ef8d3f5c0ecd2cbf6 Mon Sep 17 00:00:00 2001 From: Tooze Date: Tue, 26 May 2026 17:02:28 -0400 Subject: [PATCH 103/123] cleaned horn calls up. --- .../barbassault/arena/BAArenaListener.kt | 8 +- .../barbassault/arena/BAHornSystem.kt | 128 ++++++------------ .../minigame/barbassault/arena/BASession.kt | 43 +++--- .../barbassault/arena/scenery/HornOfGlory.kt | 38 +++--- 4 files changed, 88 insertions(+), 129 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt index 529a69410..c1ec5c5da 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt @@ -154,7 +154,7 @@ class BarbassaultArenaListener : InteractionListener { } onUseWith(IntType.NPC, intArrayOf(Items.POISONED_TOFU_10539,Items.POISONED_MEAT_10541,Items.POISONED_WORMS_10540), *PENANCE_HEALER_IDS) { player, used, target -> val session = getBASession(player) ?: return@onUseWith true - val currentCall = (session.roleCalls[BarbRole.HEALER] as? BarbassaultSession.HealerCall)?.required?.itemId() + val currentCall = (session.roleCalls[BarbRole.HEALER] as? BarbassaultSession.HealerCall)?.required?.itemId removeItem(player,used) if (used.id == currentCall) { applyBAPoison(target as Entity,player,20) @@ -228,8 +228,8 @@ class BarbassaultArenaListener : InteractionListener { on(LureItems, IntType.ITEM, "Drop") { player, node -> val session = getBASession(player) ?: return@on true val currentCall = (session.roleCalls[BarbRole.DEFENDER] as? BarbassaultSession.DefenderCall)?.required - sendMessage(player,currentCall?.itemId().toString()) - val flag = node.id == currentCall?.itemId() + //sendMessage(player,currentCall?.itemId.toString()) + val flag = node.id == currentCall?.itemId handleDropItem(player,node,flag) return@on true @@ -241,7 +241,7 @@ class BarbassaultArenaListener : InteractionListener { if (session.team.getRoleForPlayer(player) != BarbRole.COLLECTOR) { sendMessage(player, "You need to be a collector to do that");return@on false } val currentCall = (session.roleCalls[BarbRole.COLLECTOR]as? BarbassaultSession.CollectorCall)?.required - if (node.id != currentCall?.itemId()) { handleWrongEgg(player,node); return@on false } + if (node.id != currentCall?.itemId) { handleWrongEgg(player,node); return@on false } val eggInBag = getCollectorBag(player).addToBag(node) diff --git a/Server/src/main/content/minigame/barbassault/arena/BAHornSystem.kt b/Server/src/main/content/minigame/barbassault/arena/BAHornSystem.kt index b2488f976..308a5a7e2 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAHornSystem.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAHornSystem.kt @@ -13,115 +13,71 @@ class BAHornSystem : InteractionListener { private val ATTACKER_HORNS = intArrayOf( Items.ATTACKER_HORN_10516, Items.ATTACKER_HORN_10517, Items.ATTACKER_HORN_10518, Items.ATTACKER_HORN_10519, Items.ATTACKER_HORN_10520 ) private val HEALER_HORNS = intArrayOf( Items.HEALER_HORN_10526, Items.HEALER_HORN_10527, Items.HEALER_HORN_10528, Items.HEALER_HORN_10529, Items.HEALER_HORN_10530 ) - // private val ALL_HORNS = intArrayOf( Items.COLLECTOR_HORN_10560, Items.DEFENDER_HORN_10538 ) + HEALER_HORNS + ATTACKER_HORNS - - enum class BaCall(val text: String) { - COLLECTOR_RED("Collector: Red Eggs!"), - COLLECTOR_GREEN("Collector: Green Eggs!"), - COLLECTOR_BLUE("Collector: Blue Eggs!"), - - HEALER_TOFU("Healer: Poison tofu!"), - HEALER_WORMS("Healer: Poison worms!"), - HEALER_MEAT("Healer: Poison meat!"), - - ATTACKER_STYLE_1("Attacker: Controlled/Bronze/Wind!"), - ATTACKER_STYLE_2("Attacker: Accurate/Iron/Water!"), - ATTACKER_STYLE_3("Attacker: Aggressive/Steel/Earth!"), - ATTACKER_STYLE_4("Attacker: Defensive/Mithril/Fire!"), - - DEFENDER_TOFU("Defender: Drop Tofu!"), - DEFENDER_CRACKERS("Defender: Drop Crackers!"), - DEFENDER_WORMS("Defender: Drop Worms!"), - MEDIC("Medic!!") - } override fun defineListeners() { on(Items.DEFENDER_HORN_10538, IntType.ITEM, "Tell-tofu", "Tell-worms", "Tell-meat","Medic", "Drop") { player, _ -> val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false - if (optionClicked == "drop") { sendMessage(player, "I need that!"); return@on false } - - val defenderMap = mapOf( - "tell-tofu" to (BarbassaultSession.PoisonFood.TOFU to BaCall.HEALER_TOFU), - "tell-worms" to (BarbassaultSession.PoisonFood.WORMS to BaCall.HEALER_WORMS), - "tell-meat" to (BarbassaultSession.PoisonFood.MEAT to BaCall.HEALER_MEAT), - "medic" to (null to BaCall.MEDIC) ) - - val pair = defenderMap[optionClicked] ?: return@on false - val food = pair.first - val call = pair.second - - sendChat(player, call.text) - when (food) { - is BarbassaultSession.PoisonFood -> getBASession(player)?.onHornCall(player, food) - null -> getBASession(player)?.alertHealers(player) + val session = getBASession(player) ?: return@on true + var poisFoodToTell = BarbassaultSession.PoisonFood.TOFU + when (optionClicked) { + "tell-tofu" -> poisFoodToTell = BarbassaultSession.PoisonFood.TOFU + "tell-worms" ->poisFoodToTell = BarbassaultSession.PoisonFood.WORMS + "tell-meat" -> poisFoodToTell = BarbassaultSession.PoisonFood.MEAT + "drop" -> { sendMessage(player, "I need that!");return@on true } + "medic" -> { sendChat(player, "Medic!"); session.alertHealers(player);return@on true } + else -> return@on true } + sendChat(player, poisFoodToTell.hornShout) + session.onHornCall(player, poisFoodToTell) true } on(Items.COLLECTOR_HORN_10560, IntType.ITEM, "Tell-style1", "Tell-style2", "Tell-style3", "Tell-style4","Medic" , "Drop") { player, _ -> val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false - if (optionClicked == "drop") { sendMessage(player, "I need that!"); return@on false } - - val styleCallMap = mapOf( - "tell-style1" to (BarbassaultSession.AttackerStyle.STYLE_1 to BaCall.ATTACKER_STYLE_1), - "tell-style2" to (BarbassaultSession.AttackerStyle.STYLE_2 to BaCall.ATTACKER_STYLE_2), - "tell-style3" to (BarbassaultSession.AttackerStyle.STYLE_3 to BaCall.ATTACKER_STYLE_3), - "tell-style4" to (BarbassaultSession.AttackerStyle.STYLE_4 to BaCall.ATTACKER_STYLE_4), - "medic" to (null to BaCall.MEDIC) ) - - val pair = styleCallMap[optionClicked] ?: return@on false - val style = pair.first - val call = pair.second - - sendChat(player, call.text) - when (style) { - is BarbassaultSession.AttackerStyle -> getBASession(player)?.onHornCall(player, style) - null-> getBASession(player)?.alertHealers(player) + val session = getBASession(player) ?: return@on true + var styleToTell = BarbassaultSession.AttackerStyle.STYLE_1 + when (optionClicked){ + "tell-style1" -> styleToTell = BarbassaultSession.AttackerStyle.STYLE_1 + "tell-style2" -> styleToTell = BarbassaultSession.AttackerStyle.STYLE_2 + "tell-style3" -> styleToTell = BarbassaultSession.AttackerStyle.STYLE_3 + "tell-style4" -> styleToTell = BarbassaultSession.AttackerStyle.STYLE_4 + "drop" -> { sendMessage(player, "I need that!");return@on true } + "medic" -> { sendChat(player, "Medic!"); session.alertHealers(player);return@on true } } + sendChat(player, styleToTell.hornShout) + session.onHornCall(player, styleToTell) true } on(ATTACKER_HORNS, IntType.ITEM, "Tell-red", "Tell-green", "Tell-blue", "Medic", "Drop") { player, _ -> val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false - if (optionClicked == "drop") { sendMessage(player, "I need that!"); return@on false } - - val collectorMap = mapOf( - "tell-red" to (BarbassaultSession.EggColor.RED to BaCall.COLLECTOR_RED), - "tell-green" to (BarbassaultSession.EggColor.GREEN to BaCall.COLLECTOR_GREEN), - "tell-blue" to (BarbassaultSession.EggColor.BLUE to BaCall.COLLECTOR_BLUE), - "medic" to (null to BaCall.MEDIC) ) - - val pair = collectorMap[optionClicked] ?: return@on false - val color = pair.first - val call = pair.second - - sendChat(player, call.text) - when (color) { - is BarbassaultSession.EggColor -> getBASession(player)?.onHornCall(player, color) - null -> getBASession(player)?.alertHealers(player) + val session = getBASession(player) ?: return@on true + var eggToTell = BarbassaultSession.EggColor.RED + when (optionClicked) { + "tell-red" -> eggToTell = BarbassaultSession.EggColor.RED + "tell-green" -> eggToTell = BarbassaultSession.EggColor.GREEN + "tell-blue" -> eggToTell = BarbassaultSession.EggColor.RED + "drop" -> { sendMessage(player, "I need that!");return@on true } + "medic" -> { sendChat(player, "Medic!"); session.alertHealers(player);return@on true } } + sendChat(player, eggToTell.hornShout) + session.onHornCall(player, eggToTell) true } on(HEALER_HORNS, IntType.ITEM, "Tell-tofu", "Tell-crackers", "Tell-worms","Medic", "Drop") { player, _ -> val optionClicked = player.getAttribute("interact:option")?.lowercase() ?: return@on false - if (optionClicked == "drop") { sendMessage(player, "I need that!"); return@on false } - - val lureMap = mapOf( - "tell-tofu" to (BarbassaultSession.LureFood.TOFU to BaCall.DEFENDER_TOFU), - "tell-crackers" to (BarbassaultSession.LureFood.CRACKERS to BaCall.DEFENDER_CRACKERS), - "tell-worms" to (BarbassaultSession.LureFood.WORMS to BaCall.DEFENDER_WORMS), - "medic" to (null to BaCall.MEDIC) ) - - val pair = lureMap[optionClicked] ?: return@on false - val lure = pair.first - val call = pair.second - - sendChat(player, call.text) - when (lure) { - is BarbassaultSession.LureFood -> getBASession(player)?.onHornCall(player, lure) - null -> getBASession(player)?.alertHealers(player) + val session = getBASession(player) ?: return@on true + var lureFoodToTell = BarbassaultSession.LureFood.TOFU + when (optionClicked){ + "tell-tofu" -> lureFoodToTell = BarbassaultSession.LureFood.TOFU + "tell-crackers" -> lureFoodToTell = BarbassaultSession.LureFood.CRACKERS + "tell-worms" -> lureFoodToTell = BarbassaultSession.LureFood.WORMS + "drop" -> { sendMessage(player, "I need that!");return@on true } + "medic" -> { sendChat(player, "Medic!"); session.alertHealers(player);return@on true } } + sendChat(player, lureFoodToTell.hornShout) + session.onHornCall(player, lureFoodToTell) true } diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index 31d2679a6..54e97ae34 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -1,11 +1,9 @@ package content.minigame.barbassault.arena import content.minigame.barbassault.ALL_BARBASS_ITEMS -import content.minigame.barbassault.BA_SESSION_KEY import content.minigame.barbassault.BarbRole import content.minigame.barbassault.BAActivity import content.minigame.barbassault.LureItems -import content.minigame.barbassault.arena.BAHornSystem.BaCall import content.minigame.barbassault.arena.scenery.EggCannon import content.minigame.barbassault.arena.scenery.GloryHorn import content.minigame.barbassault.getBALevels @@ -569,13 +567,12 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M session.onHornCall(bot, calledValue) val text = when (calledValue) { - is EggColor -> calledValue.baCall().text - is PoisonFood -> calledValue.baCall().text - is LureFood -> calledValue.baCall().text - is AttackerStyle -> calledValue.baCall().text + is EggColor -> calledValue.hornShout + is PoisonFood -> calledValue.hornShout + is LureFood -> calledValue.hornShout + is AttackerStyle -> calledValue.hornShout else -> return } - sendChat(bot, text) } @@ -599,27 +596,31 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M } val roleCalls: MutableMap> = mutableMapOf() - interface HasUIText { val ui: String } - enum class AttackerStyle(val top: String, val bottom: String) : HasUIText { - STYLE_1("Controlled/","Bronze/Wind"),STYLE_2("Accurate/","Iron/Water"),STYLE_3("Aggressive/","Steel/Earth"),STYLE_4("Defensive/","Mithril/Fire"); + interface HasUIText { val ui: String; val hornShout:String } + enum class AttackerStyle(val top: String, val bottom: String, override val hornShout:String):HasUIText { + STYLE_1("Controlled/","Bronze/Wind", "Attacker: Controlled/Bronze/Wind!"), + STYLE_2("Accurate/","Iron/Water", "Attacker: Accurate/Iron/Water!"), + STYLE_3("Aggressive/","Steel/Earth", "Attacker: Aggressive/Steel/Earth!"), + STYLE_4("Defensive/","Mithril/Fire", "Attacker: Defensive/Mithril/Fire!"); override val ui: String get() = top - fun baCall() = when (this) { STYLE_1 -> BaCall.ATTACKER_STYLE_1; STYLE_2 -> BaCall.ATTACKER_STYLE_2;STYLE_3 -> BaCall.ATTACKER_STYLE_3;STYLE_4 -> BaCall.ATTACKER_STYLE_4 - } } - enum class EggColor(override val ui: String): HasUIText { RED("Red Eggs"), GREEN("Green Eggs"),BLUE("Blue Eggs"); - fun itemId(): Int = when (this) { RED -> Items.RED_EGG_10532; GREEN -> Items.GREEN_EGG_10531; BLUE -> Items.BLUE_EGG_10533 } - fun baCall() = when (this) { RED -> BaCall.COLLECTOR_RED; GREEN -> BaCall.COLLECTOR_GREEN;BLUE -> BaCall.COLLECTOR_BLUE} + enum class EggColor(override val ui: String, val itemId:Int, override val hornShout:String):HasUIText { + RED( "Red Eggs", Items.RED_EGG_10532, "Collector: Red Eggs!"), + GREEN("Green Eggs",Items.GREEN_EGG_10531, "Collector: Green Eggs!"), + BLUE( "Blue Eggs", Items.BLUE_EGG_10533, "Collector: Blue Eggs!") } - enum class PoisonFood(override val ui: String): HasUIText { TOFU("Pois. Tofu"), WORMS("Pois. Worms"), MEAT("Pois. Meat"); - fun itemId(): Int = when (this) { TOFU -> Items.POISONED_TOFU_10539; WORMS -> Items.POISONED_WORMS_10540; MEAT -> Items.POISONED_MEAT_10541 } - fun baCall() = when (this) { TOFU -> BaCall.HEALER_TOFU; WORMS -> BaCall.HEALER_WORMS; MEAT -> BaCall.HEALER_MEAT} + enum class PoisonFood(override val ui: String, val itemId:Int, override val hornShout:String):HasUIText { + TOFU( "Pois. Tofu", Items.POISONED_TOFU_10539, "Healer: Poison tofu!"), + WORMS("Pois. Worms",Items.POISONED_WORMS_10540,"Healer: Poison worms!"), + MEAT( "Pois. Meat", Items.POISONED_MEAT_10541, "Healer: Poison meat!"); } - enum class LureFood(override val ui: String) : HasUIText { TOFU("Tofu"), CRACKERS("Crackers"), WORMS("Worms"); - fun itemId(): Int = when (this) { WORMS -> Items.WORMS_10515; CRACKERS -> Items.CRACKERS_10513; TOFU -> Items.TOFU_10514 } - fun baCall() = when (this) { TOFU -> BaCall.DEFENDER_TOFU; CRACKERS -> BaCall.DEFENDER_CRACKERS;WORMS -> BaCall.DEFENDER_WORMS} + enum class LureFood(override val ui: String, val itemId:Int, override val hornShout:String):HasUIText { + TOFU( "Tofu", Items.WORMS_10515, "Defender: Drop Tofu!"), + CRACKERS("Crackers",Items.CRACKERS_10513,"Defender: Drop Crackers!"), + WORMS( "Worms", Items.TOFU_10514, "Defender: Drop Worms!"); } class AttackerCall( override val required: AttackerStyle ) : RoleCall() diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt index 4109b61fb..44c17c068 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/HornOfGlory.kt @@ -1,7 +1,7 @@ package content.minigame.barbassault.arena.scenery -import content.minigame.barbassault.arena.BAHornSystem.BaCall import content.minigame.barbassault.arena.BarbassaultSession +import content.minigame.barbassault.arena.BarbassaultSession.HasUIText import content.minigame.barbassault.getBASession import core.api.* import core.game.component.Component @@ -20,20 +20,20 @@ import org.rs09.consts.Scenery @Initializable class HornOfGlory : ComponentPlugin() , InteractionListener { var hornCallLock = false - private val CallMap = mapOf( - GloryHorn.CONTROLED_BRONZE_WIND to (BarbassaultSession.AttackerStyle.STYLE_1 to BaCall.ATTACKER_STYLE_1), - GloryHorn.ACCURATE_IRON_WATER to (BarbassaultSession.AttackerStyle.STYLE_2 to BaCall.ATTACKER_STYLE_2), - GloryHorn.AGGRISSIVE_STEEL_EARTH to (BarbassaultSession.AttackerStyle.STYLE_3 to BaCall.ATTACKER_STYLE_3), - GloryHorn.DEFENSIVE_MITHRIL_FIRE to (BarbassaultSession.AttackerStyle.STYLE_4 to BaCall.ATTACKER_STYLE_4), - GloryHorn.POISON_TOFU to (BarbassaultSession.PoisonFood.TOFU to BaCall.HEALER_TOFU), - GloryHorn.POISON_WORMS to (BarbassaultSession.PoisonFood.WORMS to BaCall.HEALER_WORMS), - GloryHorn.POISON_MEAT to (BarbassaultSession.PoisonFood.MEAT to BaCall.HEALER_MEAT), - GloryHorn.RED_EGG to (BarbassaultSession.EggColor.RED to BaCall.COLLECTOR_RED), - GloryHorn.GREEN_EGG to (BarbassaultSession.EggColor.GREEN to BaCall.COLLECTOR_GREEN), - GloryHorn.BLUE_EGG to (BarbassaultSession.EggColor.BLUE to BaCall.COLLECTOR_BLUE), - GloryHorn.FOOD_TOFU to (BarbassaultSession.LureFood.TOFU to BaCall.DEFENDER_TOFU), - GloryHorn.FOOD_CRACKERS to (BarbassaultSession.LureFood.CRACKERS to BaCall.DEFENDER_CRACKERS), - GloryHorn.FOOD_WORMS to (BarbassaultSession.LureFood.WORMS to BaCall.DEFENDER_WORMS) + val CallMap = mapOf( + GloryHorn.CONTROLED_BRONZE_WIND to BarbassaultSession.AttackerStyle.STYLE_1, + GloryHorn.ACCURATE_IRON_WATER to BarbassaultSession.AttackerStyle.STYLE_2, + GloryHorn.AGGRISSIVE_STEEL_EARTH to BarbassaultSession.AttackerStyle.STYLE_3, + GloryHorn.DEFENSIVE_MITHRIL_FIRE to BarbassaultSession.AttackerStyle.STYLE_4, + GloryHorn.POISON_TOFU to BarbassaultSession.PoisonFood.TOFU , + GloryHorn.POISON_WORMS to BarbassaultSession.PoisonFood.WORMS, + GloryHorn.POISON_MEAT to BarbassaultSession.PoisonFood.MEAT, + GloryHorn.RED_EGG to BarbassaultSession.EggColor.RED, + GloryHorn.GREEN_EGG to BarbassaultSession.EggColor.GREEN, + GloryHorn.BLUE_EGG to BarbassaultSession.EggColor.BLUE, + GloryHorn.FOOD_TOFU to BarbassaultSession.LureFood.TOFU, + GloryHorn.FOOD_CRACKERS to BarbassaultSession.LureFood.CRACKERS, + GloryHorn.FOOD_WORMS to BarbassaultSession.LureFood.WORMS ) override fun newInstance(arg: Any?): Plugin { @@ -43,11 +43,12 @@ class HornOfGlory : ComponentPlugin() , InteractionListener { override fun handle(player: Player?,component: Component?, opcode: Int, button: Int, slot: Int, itemId: Int ): Boolean { player ?: return true - val (gameValue, uiCall) = CallMap[button] ?: return true + val session = getBASession(player) ?: return true + val toCall = CallMap[button] as HasUIText if(!hornCallLock) { - getBASession(player)?.onHornGloryCall(gameValue) - sendChat(player, uiCall.text) + session.onHornGloryCall(toCall) + sendChat(player, toCall.hornShout) player.animate(Animation(5436)) player.lock(6) hornCallLock = true @@ -66,6 +67,7 @@ class HornOfGlory : ComponentPlugin() , InteractionListener { override fun open(player: Player?, component: Component?) { super.open(player, component) player ?: return + getBASession(player)?.updateGloryHornUI() } override fun defineListeners() { on(Scenery.HORN_OF_GLORY_20247, IntType.SCENERY, "Call") { player, _ -> From 5aecc3f4a0f3142fe9428710c103efdc04586cb3 Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 27 May 2026 00:12:46 -0400 Subject: [PATCH 104/123] Attacker bots use the Called Attack style, Right or wrong. --- .../minigame/barbassault/arena/BASession.kt | 15 ++++++--- .../arena/npcs/PenanceFighterNPC.kt | 4 +-- .../arena/npcs/PenanceRangerNPC.kt | 4 +-- .../barbassault/bots/BACombatState.kt | 33 ++++++++++++------- 4 files changed, 35 insertions(+), 21 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index 54e97ae34..a1e9699fc 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -15,6 +15,11 @@ import content.minigame.barbassault.setBASession import core.api.* import core.game.node.Node import core.game.node.entity.Entity +import core.game.node.entity.combat.equipment.WeaponInterface +import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_ACCURATE +import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_AGGRESSIVE +import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_CONTROLLED +import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_DEFENSIVE import core.game.node.entity.impl.PulseManager import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player @@ -597,11 +602,11 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M val roleCalls: MutableMap> = mutableMapOf() interface HasUIText { val ui: String; val hornShout:String } - enum class AttackerStyle(val top: String, val bottom: String, override val hornShout:String):HasUIText { - STYLE_1("Controlled/","Bronze/Wind", "Attacker: Controlled/Bronze/Wind!"), - STYLE_2("Accurate/","Iron/Water", "Attacker: Accurate/Iron/Water!"), - STYLE_3("Aggressive/","Steel/Earth", "Attacker: Aggressive/Steel/Earth!"), - STYLE_4("Defensive/","Mithril/Fire", "Attacker: Defensive/Mithril/Fire!"); + enum class AttackerStyle(val top: String, val bottom: String, override val hornShout:String,val attackStyle: Int):HasUIText { + STYLE_1("Controlled/","Bronze/Wind", "Attacker: Controlled/Bronze/Wind!",STYLE_CONTROLLED), + STYLE_2("Accurate/","Iron/Water", "Attacker: Accurate/Iron/Water!", STYLE_ACCURATE), + STYLE_3("Aggressive/","Steel/Earth", "Attacker: Aggressive/Steel/Earth!",STYLE_AGGRESSIVE), + STYLE_4("Defensive/","Mithril/Fire", "Attacker: Defensive/Mithril/Fire!",STYLE_DEFENSIVE); override val ui: String get() = top } diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt index 3cf7f0517..b49591b33 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt @@ -42,9 +42,9 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { override fun beforeDamageReceived(self: NPC, attacker: Entity, state: BattleState) { val player = attacker as? Player ?: return - if (!player.isArtificial) { + //if (!player.isArtificial) { state.estimatedHit = BACombatValidation.applyAttackValidation(self, player, state) - } + //} } override fun tick(self: NPC): Boolean { diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt index 7b4031ca7..a74891d69 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt @@ -39,9 +39,9 @@ class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { } override fun beforeDamageReceived( self: NPC, attacker: Entity, state: BattleState) { attacker as Player - if(!attacker.isArtificial) { + // if(!attacker.isArtificial) { state.estimatedHit = BACombatValidation.applyAttackValidation( self, attacker, state ) - } + // } } override fun getXpMultiplier(self: NPC, attacker: Entity): Double { diff --git a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt index 605a996ca..069ceaa65 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt @@ -1,55 +1,65 @@ package content.minigame.barbassault.bots import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.arena.BarbassaultSession +import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle +import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle.STYLE_1 +import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle.STYLE_2 +import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle.STYLE_3 +import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle.STYLE_4 import content.minigame.barbassault.getBARoleForPlayer import content.minigame.barbassault.getBASession -import core.api.sendChat import core.game.interaction.MovementPulse +import core.game.node.entity.combat.equipment.WeaponInterface.AttackStyle +import core.game.node.entity.combat.equipment.WeaponInterface.BONUS_SLASH +import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_ACCURATE +import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_AGGRESSIVE +import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_CONTROLLED +import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_DEFENSIVE import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.map.path.Pathfinder import core.tools.RandomFunction -import kotlin.random.Random class BACombatState(private val bot: BABot) { - private val rng = Random.Default + //session.roleCalls[BarbRole.ATTACKER]?.toCall fun fightNPCs() { bot.customState = "Fight NPCs" bot.AttackNpcsInRadius(25) + //use Called AttackStyle + val baSession = getBASession(bot) ?: return + val called = baSession.roleCalls[BarbRole.COLLECTOR]?.called as AttackerStyle + bot.properties.attackStyle = AttackStyle(called.attackStyle, BONUS_SLASH) } fun handleDefender() { - bot.customState = "Lure Runners" - val session = getBASession(bot) ?: return randomWalk(session.region.borders.randomWalkableLoc, 3) + //used Called Lure } fun handleCollector() { - bot.customState = "Collecting Eggs" - val session = getBASession(bot) ?: return randomWalk(session.region.borders.randomWalkableLoc, 3) + //only target Called Eggs } fun handleHealer() { - bot.customState = "Healing" - val session = getBASession(bot) ?: return randomWalk(session.region.borders.randomWalkableLoc, 2) + //Only use Called poisonFood. } fun chatter() { - if (rng.nextInt(12) != 0) { return } val role = getBARoleForPlayer(bot) val messages = when (role) { BarbRole.ATTACKER -> listOf("Call pls","Wrong style?","Attacking!") @@ -59,11 +69,10 @@ class BACombatState(private val bot: BABot) { else -> listOf("Lag...","Nice","Oops") } - bot.sendChat(messages.random(rng)) + bot.sendChat(messages.random()) } fun randomWalk(center: Location, radius: Int) { - if (bot.walkingQueue.isMoving) { return } From 6b2d1231848282078ff053376b592a344fd92fe5 Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 27 May 2026 00:25:25 -0400 Subject: [PATCH 105/123] attack style failsafe. --- .../main/content/minigame/barbassault/bots/BACombatState.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt index 069ceaa65..2c30bd93a 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt @@ -23,14 +23,12 @@ import core.tools.RandomFunction class BACombatState(private val bot: BABot) { - - //session.roleCalls[BarbRole.ATTACKER]?.toCall fun fightNPCs() { bot.customState = "Fight NPCs" bot.AttackNpcsInRadius(25) //use Called AttackStyle val baSession = getBASession(bot) ?: return - val called = baSession.roleCalls[BarbRole.COLLECTOR]?.called as AttackerStyle + val called = (baSession.roleCalls[BarbRole.COLLECTOR]?.called ?: AttackerStyle.values().random() ) as AttackerStyle bot.properties.attackStyle = AttackStyle(called.attackStyle, BONUS_SLASH) } From e24d5139c192461a5dcf5914ca47c679cc9ece48 Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 27 May 2026 00:57:37 -0400 Subject: [PATCH 106/123] oops, read the wrong Role Call --- .../main/content/minigame/barbassault/bots/BACombatState.kt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt index 2c30bd93a..b55bce956 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt @@ -12,10 +12,6 @@ import content.minigame.barbassault.getBASession import core.game.interaction.MovementPulse import core.game.node.entity.combat.equipment.WeaponInterface.AttackStyle import core.game.node.entity.combat.equipment.WeaponInterface.BONUS_SLASH -import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_ACCURATE -import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_AGGRESSIVE -import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_CONTROLLED -import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_DEFENSIVE import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.map.path.Pathfinder @@ -28,7 +24,7 @@ class BACombatState(private val bot: BABot) { bot.AttackNpcsInRadius(25) //use Called AttackStyle val baSession = getBASession(bot) ?: return - val called = (baSession.roleCalls[BarbRole.COLLECTOR]?.called ?: AttackerStyle.values().random() ) as AttackerStyle + val called = (baSession.roleCalls[BarbRole.ATTACKER]?.called ?: AttackerStyle.values().random() ) as AttackerStyle bot.properties.attackStyle = AttackStyle(called.attackStyle, BONUS_SLASH) } From c5f6f3a5cb9a55870ae4cfac303b779b1b5bc612 Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 29 May 2026 10:43:21 -0400 Subject: [PATCH 107/123] fix auto complete mistake --- .../content/global/ame/events/evilchicken/EvilChickenNPC.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Server/src/main/content/global/ame/events/evilchicken/EvilChickenNPC.kt b/Server/src/main/content/global/ame/events/evilchicken/EvilChickenNPC.kt index dd3851cd8..5b065f567 100644 --- a/Server/src/main/content/global/ame/events/evilchicken/EvilChickenNPC.kt +++ b/Server/src/main/content/global/ame/events/evilchicken/EvilChickenNPC.kt @@ -27,7 +27,7 @@ class EvilChickenNPC(override var loot: WeightBasedTable? = null) : RandomEventN override fun finalizeDeath(killer: Entity?) { super.finalizeDeath(killer) - GroundItemManager.create(Item(Items.RED_EGG_10532, RandomFunction.random(50,300)), this.dropLocation, player) + GroundItemManager.create(Item(Items.FEATHER_314, RandomFunction.random(50,300)), this.dropLocation, player) } override fun tick() { From b72df6c1f72f250526f5a3cea127fee2c038eb02 Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 29 May 2026 10:46:39 -0400 Subject: [PATCH 108/123] BA AttackBots more responsive to killing creatures. --- .../minigame/barbassault/arena/BAActivity.kt | 1 + .../minigame/barbassault/arena/BASession.kt | 1 - .../arena/npcs/PenanceFighterNPC.kt | 11 +-- .../arena/npcs/PenanceRangerNPC.kt | 4 +- .../minigame/barbassault/bots/BABot.kt | 74 ++++++++++++++++--- .../barbassault/bots/BACombatState.kt | 2 +- 6 files changed, 73 insertions(+), 20 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BAActivity.kt b/Server/src/main/content/minigame/barbassault/arena/BAActivity.kt index 3d9f52d3c..9422c9ca2 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAActivity.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAActivity.kt @@ -61,6 +61,7 @@ open class BAActivity : ActivityPlugin("barbassault",false, true, true,ZoneRestr } if (e is NPC) { // dropPenanceEggCluster(e) + session.sessionNpcs.remove(e) session.pennanceClearedMessage(e) } return false diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index a1e9699fc..1e03e8950 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -15,7 +15,6 @@ import content.minigame.barbassault.setBASession import core.api.* import core.game.node.Node import core.game.node.entity.Entity -import core.game.node.entity.combat.equipment.WeaponInterface import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_ACCURATE import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_AGGRESSIVE import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_CONTROLLED diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt index b49591b33..6631d3cf7 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt @@ -1,12 +1,13 @@ package content.minigame.barbassault.arenas.monsters -import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.arena.BarbAssEvent import content.minigame.barbassault.arena.BACombatValidation +import content.minigame.barbassault.arena.BarbAssEvent import content.minigame.barbassault.arena.PenanceType import content.minigame.barbassault.arena.npcs.dropPenanceEggCluster import content.minigame.barbassault.getBASession -import core.api.* +import core.api.EquipmentSlot +import core.api.getItemFromEquipment +import core.api.sendMessage import core.game.node.entity.Entity import core.game.node.entity.combat.BattleState import core.game.node.entity.combat.CombatStyle @@ -57,13 +58,13 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { self.isWalks = true self.properties.isNPCWalkable = false self.walkRadius = 24 - self.isAggressive = true self.isRespawn = false self.setAttribute("barbass-type", PenanceType.FIGHTER) self.definition.combatDistance = 1 self.properties.combatPulse.style = CombatStyle.MELEE + self.isAggressive = true } @@ -73,7 +74,7 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { dropPenanceEggCluster(killer,self) session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) - + killer.removeAttribute("combat-time") super.onDeathFinished(self, killer) } diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt index a74891d69..777f9b1ba 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt @@ -52,7 +52,6 @@ class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { self.isWalks = true self.isNeverWalks = false self.walkRadius = 24 - self.isAggressive = true self.isRespawn = false self.definition.combatGraphics[1] = Graphics(866, 25, 0) self.setAttribute("barbass-type", PenanceType.RANGER) @@ -60,13 +59,14 @@ class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { self.definition.combatDistance = 8 self.properties.combatPulse.style = CombatStyle.RANGE + self.isAggressive = true } override fun onDeathFinished(self: NPC, killer: Entity) { super.onDeathFinished(self, killer) val player = killer as? Player ?: return val session = getBASession(killer) ?: return - + killer.removeAttribute("combat-time") dropPenanceEggCluster(killer,self) session.eventBus.emit(BarbAssEvent.NPCDied(self,player)) } diff --git a/Server/src/main/content/minigame/barbassault/bots/BABot.kt b/Server/src/main/content/minigame/barbassault/bots/BABot.kt index 05b14e96a..f52e29f21 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BABot.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BABot.kt @@ -10,12 +10,18 @@ import content.minigame.barbassault.lobby.BALobby.Companion.waveLobbies import content.minigame.barbassault.lobby.BarbassQuickWaveActivity.Companion.addToQueue import core.api.forceMove import core.api.getRegionBorders +import core.api.log import core.game.bots.AIPlayer import core.game.bots.CombatBotAssembler import core.game.bots.PvMBots import core.game.global.action.EquipHandler +import core.game.node.entity.Entity +import core.game.node.entity.npc.NPC +import core.game.node.entity.player.Player import core.game.node.item.Item import core.game.world.map.Location +import core.game.world.map.RegionManager.getLocalNpcs +import core.tools.Log import org.rs09.consts.Scenery class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { @@ -25,7 +31,9 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { CombatBotAssembler().gearPCiMeleeBot(this) val cape: Item? = equipment.get(1) - if (cape != null) { EquipHandler.unequip(this, 1, cape.id)} + if (cape != null) { + EquipHandler.unequip(this, 1, cape.id) + } } private val combatHandler = BACombatState(this) @@ -42,7 +50,9 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { customState = state.name - if (moveTimer > 0) { return } + if (moveTimer > 0) { + return + } when (state) { State.GET_TO_BA -> getToBA() @@ -57,11 +67,19 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { get() { val session = getBASession(this) - if (session?.state == BarbassaultState.IN_ARENA) { return State.PLAY_GAME } - if (QUICK_START.insideBorder(location)) { return State.WAITING_IN_ROOM } - if (!isInLobbyOnly(location)) { return State.WAITING_IN_ROOM } - if (getClosestNodeWithEntry(2, Scenery.DOOR_20209) != null) { return State.ENTER_ROOM } - if (isInLobbyOnly(location)) { return State.OUTSIDE_ROOM } + if (session?.state == BarbassaultState.IN_ARENA) { + return State.PLAY_GAME + } + if (QUICK_START.insideBorder(location)) { + return State.WAITING_IN_ROOM + } + + if (getClosestNodeWithEntry(2, Scenery.DOOR_20209) != null) { + return State.ENTER_ROOM + } + if (isInLobbyOnly(location)) { + return State.OUTSIDE_ROOM + } return State.GET_TO_BA } @@ -71,18 +89,18 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { } private fun outsideRoom() { - val quickDoor = getClosestNodeWithEntry(60, Scenery.DOOR_20209)?: return + val quickDoor = getClosestNodeWithEntry(60, Scenery.DOOR_20209) ?: return quickDoor.interaction.handle(this, quickDoor.interaction[0]) moveTimer = 2 } private fun enterRoom() { - val quickDoor = getClosestNodeWithEntry(2, Scenery.DOOR_20209)?: return + val quickDoor = getClosestNodeWithEntry(2, Scenery.DOOR_20209) ?: return quickDoor.interaction.handle(this, quickDoor.interaction[0]) - forceMove(this,location,location.transform(0, -1, 0),25,60,null,819) { + forceMove(this, location, location.transform(0, -1, 0), 25, 60, null, 819) { addToQueue(this, null) combatHandler.walkTo(QUICK_START.randomWalkableLoc) } @@ -108,8 +126,42 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { fun isInLobbyOnly(location: Location): Boolean { return getRegionBorders(10322).insideBorder(location) - && waveLobbies.none {it != MAIN_LOBBY && it.insideBorder(location) + && waveLobbies.none { + it != MAIN_LOBBY + && it != QUICK_START + && it.insideBorder(location) + } + } + + fun debugthis(info : Any) { + log(this.javaClass, Log.FINE,state.toString()) + } + + override fun AttackNpcsInRadius(bot: Player, radius: Int): Boolean { + if (bot.inCombat()) return true + + val creatures = FindTargets(bot, radius) + if (creatures.isEmpty()) return false + + for (npc in creatures) { + if (!npc.inCombat()) { + bot.attack(npc) + return true + } } + + return false + } + + override fun FindTargets(entity: Entity, radius: Int): MutableList { + val localNPCs = getBASession(entity)?.sessionNpcs ?: return mutableListOf() + + return localNPCs + .asSequence() + .filter(::checkValidTargets) + .sortedBy { it.location.getDistance(entity.location) } + .take(5) + .toMutableList() } companion object { diff --git a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt index b55bce956..fa0131719 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt @@ -21,7 +21,7 @@ class BACombatState(private val bot: BABot) { fun fightNPCs() { bot.customState = "Fight NPCs" - bot.AttackNpcsInRadius(25) + bot.AttackNpcsInRadius(bot,25) //use Called AttackStyle val baSession = getBASession(bot) ?: return val called = (baSession.roleCalls[BarbRole.ATTACKER]?.called ?: AttackerStyle.values().random() ) as AttackerStyle From 175e141970a4984bb790706bc9fbfb4526f7a378 Mon Sep 17 00:00:00 2001 From: Tooze Date: Fri, 29 May 2026 19:06:20 -0400 Subject: [PATCH 109/123] Readable attacker style checker --- .../barbassault/arena/BAArenaListener.kt | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt index c1ec5c5da..c979dfc6d 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt @@ -23,6 +23,10 @@ import core.game.node.entity.Entity import core.game.node.entity.combat.BattleState import core.game.node.entity.combat.CombatStyle import core.game.node.entity.combat.ImpactHandler +import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_ACCURATE +import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_AGGRESSIVE +import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_CONTROLLED +import core.game.node.entity.combat.equipment.WeaponInterface.STYLE_DEFENSIVE import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.node.entity.player.info.LogType @@ -361,17 +365,17 @@ object BACombatValidation { fun resolveAttackerStyle( attacker: Player, state: BattleState ): AttackerStyle? { return when (state.style) { CombatStyle.MELEE -> when (attacker.properties.attackStyle.style) { - 2 -> AttackerStyle.STYLE_1 // Controlled - 0 -> AttackerStyle.STYLE_2 // Accurate - 1 -> AttackerStyle.STYLE_3 // Aggressive - 3 -> AttackerStyle.STYLE_4 // Defensive + STYLE_CONTROLLED -> AttackerStyle.STYLE_1 + STYLE_ACCURATE -> AttackerStyle.STYLE_2 + STYLE_AGGRESSIVE -> AttackerStyle.STYLE_3 + STYLE_DEFENSIVE -> AttackerStyle.STYLE_4 else -> null } CombatStyle.RANGE -> when (state.ammunition.itemId) { - 882 -> AttackerStyle.STYLE_1 // bronze - 884 -> AttackerStyle.STYLE_2 // iron - 886 -> AttackerStyle.STYLE_3 // steel - 888 -> AttackerStyle.STYLE_4 // mithril + Items.BRONZE_ARROW_882 -> AttackerStyle.STYLE_1 + Items.IRON_ARROW_884 -> AttackerStyle.STYLE_2 + Items.STEEL_ARROW_886 -> AttackerStyle.STYLE_3 + Items.MITHRIL_ARROW_888 -> AttackerStyle.STYLE_4 else -> null } CombatStyle.MAGIC -> when (state.spell.spellId) { From 3a7bd855b1378ba31bc743b047189fc83dac9350 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 30 May 2026 12:24:03 -0400 Subject: [PATCH 110/123] Work on BaBots Using ItemMachines to "stockup" base on role. --- .../minigame/barbassault/BarbAssault.kt | 10 +++++- .../minigame/barbassault/bots/BABot.kt | 35 ++++++++++++++++--- .../barbassault/bots/BACombatState.kt | 21 ++++++----- 3 files changed, 52 insertions(+), 14 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BarbAssault.kt b/Server/src/main/content/minigame/barbassault/BarbAssault.kt index fb75ae2d1..de07f4729 100644 --- a/Server/src/main/content/minigame/barbassault/BarbAssault.kt +++ b/Server/src/main/content/minigame/barbassault/BarbAssault.kt @@ -6,9 +6,17 @@ import content.minigame.barbassault.arena.DEFENDER_ICON import content.minigame.barbassault.arena.HEALER_ICON import core.game.node.item.Item import org.rs09.consts.Items +import org.rs09.consts.Scenery + + val LureItems = intArrayOf(Items.WORMS_10515, Items.CRACKERS_10513, Items.TOFU_10514) -enum class BarbRole { ATTACKER, COLLECTOR,DEFENDER, HEALER } +enum class BarbRole(val machineId: Int) { + ATTACKER(Scenery.ATTACKER_ITEM_MACHINE_20241), + DEFENDER(Scenery.DEFENDER_ITEM_MACHINE_20242), + HEALER(Scenery.HEALER_ITEM_MACHINE_20243), + COLLECTOR(Scenery.COLLECTOR_CONVERTER_21250) +} data class BarbAssaultPoints( val atk: Int = 0, val col: Int = 0, val def: Int = 0, val heal: Int = 0) { val total: Int get() = atk + col + def + heal fun hasEnough(cost: BarbAssaultPoints): Boolean = atk >= cost.atk && col >= cost.col && def >= cost.def && heal >= cost.heal diff --git a/Server/src/main/content/minigame/barbassault/bots/BABot.kt b/Server/src/main/content/minigame/barbassault/bots/BABot.kt index f52e29f21..130d8b45b 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BABot.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BABot.kt @@ -2,6 +2,8 @@ package content.minigame.barbassault.bots import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbassaultState +import content.minigame.barbassault.arena.scenery.ItemMachine +import content.minigame.barbassault.arena.scenery.ItemMachine.DispenserType import content.minigame.barbassault.getBARoleForPlayer import content.minigame.barbassault.getBASession import content.minigame.barbassault.lobby.BALobby.Companion.MAIN_LOBBY @@ -11,18 +13,22 @@ import content.minigame.barbassault.lobby.BarbassQuickWaveActivity.Companion.add import core.api.forceMove import core.api.getRegionBorders import core.api.log +import core.api.queueScript +import core.api.stopExecuting import core.game.bots.AIPlayer import core.game.bots.CombatBotAssembler import core.game.bots.PvMBots import core.game.global.action.EquipHandler import core.game.node.entity.Entity -import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.node.item.Item import core.game.world.map.Location -import core.game.world.map.RegionManager.getLocalNpcs import core.tools.Log import org.rs09.consts.Scenery +import org.rs09.consts.Scenery.ATTACKER_ITEM_MACHINE_20241 +import org.rs09.consts.Scenery.COLLECTOR_CONVERTER_21250 +import org.rs09.consts.Scenery.DEFENDER_ITEM_MACHINE_20242 +import org.rs09.consts.Scenery.HEALER_ITEM_MACHINE_20243 class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { @@ -39,6 +45,7 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { private val combatHandler = BACombatState(this) private var tickTimer = 0 private var moveTimer = 0 + var hasVendingItems = false enum class State { GET_TO_BA, OUTSIDE_ROOM, ENTER_ROOM, WAITING_IN_ROOM, PLAY_GAME } @@ -70,7 +77,7 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { if (session?.state == BarbassaultState.IN_ARENA) { return State.PLAY_GAME } - if (QUICK_START.insideBorder(location)) { + if (isWaitingArea(location)) { return State.WAITING_IN_ROOM } @@ -88,6 +95,21 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { moveTimer = 3 } + fun useRoleVendingMachine() { + if (hasVendingItems) return + + val roleMachine = getClosestNodeWithEntry(60, getBARoleForPlayer(this)!!.machineId) ?: return + if (roleMachine.id == COLLECTOR_CONVERTER_21250) return + queueScript(this,3) { + roleMachine.interaction.handle(this, roleMachine.interaction[0]) + // ItemMachine().handleAddItemMachine(this, roleMachine,10558, STOCK_UP_DEF, 1,DispenserType.FOOD) + + hasVendingItems = true + return@queueScript stopExecuting(this) + } + + } + private fun outsideRoom() { val quickDoor = getClosestNodeWithEntry(60, Scenery.DOOR_20209) ?: return quickDoor.interaction.handle(this, quickDoor.interaction[0]) @@ -133,8 +155,13 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { } } + private fun isWaitingArea(location: Location): Boolean { + hasVendingItems = false + return QUICK_START.insideBorder(location) || waveLobbies.any { it.insideBorder(location) && it != MAIN_LOBBY } + } + fun debugthis(info : Any) { - log(this.javaClass, Log.FINE,state.toString()) + log(this.javaClass, Log.FINE,state.toString()) } override fun AttackNpcsInRadius(bot: Player, radius: Int): Boolean { diff --git a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt index fa0131719..deacd9669 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt @@ -1,12 +1,9 @@ package content.minigame.barbassault.bots import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle -import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle.STYLE_1 -import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle.STYLE_2 -import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle.STYLE_3 -import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle.STYLE_4 +import content.minigame.barbassault.arena.scenery.ItemMachine +import content.minigame.barbassault.arena.scenery.ItemMachine.DispenserType import content.minigame.barbassault.getBARoleForPlayer import content.minigame.barbassault.getBASession import core.game.interaction.MovementPulse @@ -16,11 +13,13 @@ import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.map.path.Pathfinder import core.tools.RandomFunction +import org.rs09.consts.Scenery class BACombatState(private val bot: BABot) { fun fightNPCs() { bot.customState = "Fight NPCs" + bot.hasVendingItems = true bot.AttackNpcsInRadius(bot,25) //use Called AttackStyle val baSession = getBASession(bot) ?: return @@ -31,6 +30,8 @@ class BACombatState(private val bot: BABot) { fun handleDefender() { bot.customState = "Lure Runners" + bot.useRoleVendingMachine() + val session = getBASession(bot) ?: return randomWalk(session.region.borders.randomWalkableLoc, 3) @@ -39,6 +40,7 @@ class BACombatState(private val bot: BABot) { fun handleCollector() { bot.customState = "Collecting Eggs" + bot.hasVendingItems = true val session = getBASession(bot) ?: return randomWalk(session.region.borders.randomWalkableLoc, 3) @@ -47,8 +49,9 @@ class BACombatState(private val bot: BABot) { fun handleHealer() { bot.customState = "Healing" + bot.useRoleVendingMachine() val session = getBASession(bot) ?: return - + //if healing vial Empty Go fill. randomWalk(session.region.borders.randomWalkableLoc, 2) //Only use Called poisonFood. } @@ -67,9 +70,9 @@ class BACombatState(private val bot: BABot) { } fun randomWalk(center: Location, radius: Int) { - if (bot.walkingQueue.isMoving) { - return - } + if (!bot.hasVendingItems) return + if (bot.walkingQueue.isMoving) return + val destination = center.transform( RandomFunction.random(-radius, radius), From cba80e709039536055c1749d17779505fbd8734c Mon Sep 17 00:00:00 2001 From: Tooze Date: Sat, 30 May 2026 13:57:50 -0400 Subject: [PATCH 111/123] what? --- Server/src/main/content/minigame/barbassault/bots/BABot.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/bots/BABot.kt b/Server/src/main/content/minigame/barbassault/bots/BABot.kt index 130d8b45b..682046350 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BABot.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BABot.kt @@ -25,10 +25,8 @@ import core.game.node.item.Item import core.game.world.map.Location import core.tools.Log import org.rs09.consts.Scenery -import org.rs09.consts.Scenery.ATTACKER_ITEM_MACHINE_20241 import org.rs09.consts.Scenery.COLLECTOR_CONVERTER_21250 -import org.rs09.consts.Scenery.DEFENDER_ITEM_MACHINE_20242 -import org.rs09.consts.Scenery.HEALER_ITEM_MACHINE_20243 + class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { From ee0715a9405b58500a1d8e65fe4d4954c73f4278 Mon Sep 17 00:00:00 2001 From: Tooze Date: Sun, 7 Jun 2026 23:36:52 -0400 Subject: [PATCH 112/123] forceWalk "clip" moved away from a deprecated function --- Server/src/main/core/api/ContentAPI.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Server/src/main/core/api/ContentAPI.kt b/Server/src/main/core/api/ContentAPI.kt index 35405ba03..8dc6ed47e 100644 --- a/Server/src/main/core/api/ContentAPI.kt +++ b/Server/src/main/core/api/ContentAPI.kt @@ -65,6 +65,7 @@ import core.game.world.map.Direction import core.game.world.map.Location import core.game.world.map.RegionManager import core.game.world.map.RegionManager.getRegionChunk +import core.game.world.map.path.ClipMaskSupplier import core.game.world.map.path.Pathfinder import core.game.world.map.zone.MapZone import core.game.world.map.zone.ZoneBorders @@ -1438,7 +1439,8 @@ fun reinitVarps (player: Player) { */ fun forceWalk(entity: Entity, dest: Location, type: String) { if (type == "clip") { - ForceMovement(entity, dest, 10, 10).run() + val NO_CLIP = ClipMaskSupplier { _, _, _ -> 0 } + Pathfinder.find(entity.location,entity.size(),dest,true,Pathfinder.SMART,NO_CLIP ).walk(entity) return } val pathfinder = when (type) { From 67d32e43d129280d3a0fa42f899dcb30c338dc83 Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 8 Jun 2026 00:05:07 -0400 Subject: [PATCH 113/123] runner and healer tunnel spawns swapped to correct location --- .../src/main/content/minigame/barbassault/arena/BASession.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index 1e03e8950..bb3daf197 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -62,8 +62,8 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M var npcTunnel: List = listOf( PenanceNpcTunnel(PenanceType.RANGER,location(17,47,0),location(18,46,0),Direction.SOUTH), PenanceNpcTunnel(PenanceType.FIGHTER,location(23,48,0),location(24,47,0),Direction.SOUTH), - PenanceNpcTunnel(PenanceType.HEALER,location(35,48,0),location(36,47,0),Direction.SOUTH), - PenanceNpcTunnel(PenanceType.RUNNER,location(41,47,0),location(42,46,0),Direction.SOUTH)) + PenanceNpcTunnel(PenanceType.RUNNER,location(35,48,0),location(36,47,0),Direction.SOUTH), + PenanceNpcTunnel(PenanceType.HEALER,location(41,47,0),location(42,46,0),Direction.SOUTH)) private val caveBlocked = mutableMapOf() val BAgroundItems = mutableListOf() From 1266a1b459a2ba685d9f63ed3edc6f075680883a Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 8 Jun 2026 00:28:16 -0400 Subject: [PATCH 114/123] isWaitingArea and isInHalls --- .../minigame/barbassault/lobby/BALobby.kt | 43 ++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/lobby/BALobby.kt b/Server/src/main/content/minigame/barbassault/lobby/BALobby.kt index 97db08eb8..67975816c 100644 --- a/Server/src/main/content/minigame/barbassault/lobby/BALobby.kt +++ b/Server/src/main/content/minigame/barbassault/lobby/BALobby.kt @@ -18,6 +18,7 @@ import core.game.node.entity.Entity import core.game.node.entity.impl.PulseManager import core.game.node.entity.player.Player import core.game.node.item.Item +import core.game.world.map.Location import core.game.world.map.zone.ZoneBorders import core.game.world.map.zone.ZoneRestriction import org.rs09.consts.Items @@ -251,26 +252,38 @@ class BALobby : InteractionListener, MapArea { fun handleWaveDoor(player: Player, node: Node,iface: Int){ val doorLoc = node.location val playerLoc = player.location - var wave = getBAWave(player) - if (wave == BARBWAVEDOOR[node.id]) { - val insideRoom = playerLoc.y <= doorLoc.y - val moveY = if (insideRoom) 1 else -1 - //ToDo fix walking trough wall when Using door from side. - if (insideRoom) { forceMove(player, playerLoc, doorLoc, 25, 60, null, 819) } - forceMove(player, playerLoc, playerLoc.transform(0, moveY, 0), 25, 60, null, 819) { - if (insideRoom) { - //player.baSession?.cancleStartingPhase() - abandonTeam(player) - closeOverlay(player) - if (node.id == Scenery.DOOR_20209) { BarbassQuickWaveActivity.removeQuickQue(player) } // needs to happen sooner - } else { - openOverlay(player, iface) - } + + if (getBAWave(player) != BARBWAVEDOOR[node.id]) return + + val insideRoom = isWaitingArea(playerLoc) + val moveY = if (insideRoom) 1 else -1 + //ToDo fix walking trough wall when Using door from side. + forceMove(player, playerLoc, playerLoc.transform(0, moveY, 0), 25, 60, null, 819) { + if (insideRoom) { + //player.baSession?.cancleStartingPhase() + abandonTeam(player) + closeOverlay(player) + if (node.id == Scenery.DOOR_20209) { BarbassQuickWaveActivity.removeQuickQue(player) } // needs to happen sooner + } else { + openOverlay(player, iface) } } + } + companion object { + fun isWaitingArea(location: Location): Boolean { + return QUICK_START.insideBorder(location) || waveLobbies.any { it.insideBorder(location) && it != MAIN_LOBBY } + } + fun isInHalls(location: Location): Boolean { + return getRegionBorders(10322).insideBorder(location) && + !QUICK_START.insideBorder(location) && + waveLobbies.none { + it != MAIN_LOBBY && it.insideBorder(location) + } + } + fun TeamToLobby(team: BarbTeam, wave: Int) { if (wave in 0..waveLobbies.size) { val targetLobby = waveLobbies[wave] From 00d876485bd0218df11f6a7b81b9efa2bec7093f Mon Sep 17 00:00:00 2001 From: Tooze Date: Mon, 8 Jun 2026 17:28:08 -0400 Subject: [PATCH 115/123] bot bots bots bot bot bots bot Yes,. --- .../minigame/barbassault/BADevHelper.kt | 51 ++++- .../barbassault/arena/BAHornSystem.kt | 2 +- .../minigame/barbassault/arena/BASession.kt | 17 +- .../barbassault/bots/AttackerBehavior.kt | 62 ++++++ .../minigame/barbassault/bots/BABotContext.kt | 82 ++++++++ .../barbassault/bots/CollectorBehavior.kt | 25 +++ .../barbassault/bots/DefenderBehavior.kt | 44 +++++ .../barbassault/bots/HealerBehavior.kt | 176 ++++++++++++++++++ .../barbassault/bots/LobbyBehavior.kt | 88 +++++++++ .../minigame/barbassault/bots/SmartBABot.kt | 100 ++++++++++ .../barbassault/bots/{ => oldbot}/BABot.kt | 47 ++--- .../bots/{ => oldbot}/BACombatState.kt | 14 +- .../main/core/game/bots/GeneralBotCreator.kt | 2 +- Server/src/main/core/game/bots/Script.java | 2 + Server/src/main/core/game/bots/ScriptAPI.kt | 3 +- 15 files changed, 664 insertions(+), 51 deletions(-) create mode 100644 Server/src/main/content/minigame/barbassault/bots/AttackerBehavior.kt create mode 100644 Server/src/main/content/minigame/barbassault/bots/BABotContext.kt create mode 100644 Server/src/main/content/minigame/barbassault/bots/CollectorBehavior.kt create mode 100644 Server/src/main/content/minigame/barbassault/bots/DefenderBehavior.kt create mode 100644 Server/src/main/content/minigame/barbassault/bots/HealerBehavior.kt create mode 100644 Server/src/main/content/minigame/barbassault/bots/LobbyBehavior.kt create mode 100644 Server/src/main/content/minigame/barbassault/bots/SmartBABot.kt rename Server/src/main/content/minigame/barbassault/bots/{ => oldbot}/BABot.kt (75%) rename Server/src/main/content/minigame/barbassault/bots/{ => oldbot}/BACombatState.kt (83%) diff --git a/Server/src/main/content/minigame/barbassault/BADevHelper.kt b/Server/src/main/content/minigame/barbassault/BADevHelper.kt index 498647039..16d68e43b 100644 --- a/Server/src/main/content/minigame/barbassault/BADevHelper.kt +++ b/Server/src/main/content/minigame/barbassault/BADevHelper.kt @@ -1,6 +1,6 @@ package content.minigame.barbassault -import content.minigame.barbassault.bots.BABot +import content.minigame.barbassault.bots.oldbot.BABot import content.minigame.barbassault.lobby.BALobby import core.api.* import core.game.container.impl.EquipmentContainer @@ -8,9 +8,14 @@ import core.game.node.item.Item import core.game.system.command.Privilege import core.game.system.command.sets.CommandSet import core.game.world.map.Location +import core.game.world.repository.Repository import core.plugin.Initializable import org.rs09.consts.Items import org.rs09.consts.Scenery +import content.minigame.barbassault.bots.SmartBAPlayerScript +import content.minigame.barbassault.bots.SmartBABot +import core.game.bots.AIPlayer +import core.game.bots.GeneralBotCreator @Initializable class BADevHelper : CommandSet(Privilege.ADMIN) { @@ -74,6 +79,48 @@ class BADevHelper : CommandSet(Privilege.ADMIN) { return@define } + define("smartbabot") { player, _ -> + if (babotcount >= 25) { + sendMessage(player, "25 is max amount of BA bots allowed") + return@define + } + + SmartBABot(BALobby.MAIN_LOBBY.randomWalkableLoc) + + babotcount++ + sendMessage(player, "Spawned Smart BA bot.") + return@define + } + + define("smartbaplayer") { player, _ -> + GeneralBotCreator(SmartBAPlayerScript(), player, true) + sendMessage(player, "Started Smart BA bot script on your player.") + return@define + } + + define("babotstate") { player, args -> + val nameFilter = args.getOrNull(1)?.lowercase() + val bots = Repository.players + .filterIsInstance() + .filter { nameFilter == null || it.username.lowercase().contains(nameFilter) } + + val bot = bots.minByOrNull { it.location.getDistance(player.location) } + if (bot == null) { + sendMessage(player, "No BA bot found.") + return@define + } + + sendMessage(player, "${bot.username}: ${bot.customState} : loc: ${bot.location}") + return@define + } + define("iswait"){player,_ -> + val iswait = BALobby.isWaitingArea(player.location) + sendMessage(player,"isWaiting : ${iswait}") + } + define("ishall"){player,_ -> + val ishall = BALobby.isInHalls(player.location) + sendMessage(player,"isInhall : ${ishall}") + } define("hch"){ player,args-> val chId = args[1].toIntOrNull() @@ -178,4 +225,4 @@ class BADevHelper : CommandSet(Privilege.ADMIN) { return@define } } -} \ No newline at end of file +} diff --git a/Server/src/main/content/minigame/barbassault/arena/BAHornSystem.kt b/Server/src/main/content/minigame/barbassault/arena/BAHornSystem.kt index 308a5a7e2..cc4ae9a47 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAHornSystem.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAHornSystem.kt @@ -56,7 +56,7 @@ class BAHornSystem : InteractionListener { when (optionClicked) { "tell-red" -> eggToTell = BarbassaultSession.EggColor.RED "tell-green" -> eggToTell = BarbassaultSession.EggColor.GREEN - "tell-blue" -> eggToTell = BarbassaultSession.EggColor.RED + "tell-blue" -> eggToTell = BarbassaultSession.EggColor.BLUE "drop" -> { sendMessage(player, "I need that!");return@on true } "medic" -> { sendChat(player, "Medic!"); session.alertHealers(player);return@on true } } diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index bb3daf197..5d1b01361 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -47,7 +47,6 @@ data class PenanceNpcTunnel( val type: PenanceType, val caveLocation: Location, data class ArenaSpawnItems(val id: Int, val location: Location) class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, MapArea { - //constructor(region: DynamicRegion, activity: BarbassaultActivity) : this(activity) {this.region = region; this.base = region.baseLocation} lateinit var region: DynamicRegion lateinit var base: Location lateinit var currentWaveDefinition: WaveDefinition @@ -76,11 +75,10 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M val scoreManager = BarbScoreManager() val eventBus = BarbAssEventBus() - private val countDoown = if(GameWorld.settings?.isDevMode == true) 10 else 30 + private var countDoown = if(GameWorld.settings?.isDevMode == true) 10 else 30 private var countdownPulse: Pulse? = null - fun beginStartingPhase(quickStart: Boolean = false) { if (state != BarbassaultState.PARTY_CREATION) return state = BarbassaultState.STARTING @@ -133,7 +131,8 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M } private fun startCountdown(quickStart: Boolean) { - var ticks = secondsToTicks(countDoown)//60 + countDoown = if (quickStart) 1 else countDoown + var ticks = secondsToTicks(countDoown)//30 if(!quickStart){ team.allPlayers().forEach { openOverlay(it, 494);setInterfaceText(it, "30", 494, 0) } } countdownPulse = object : Pulse(1) { override fun pulse(): Boolean { @@ -149,8 +148,9 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M val secondsLeft = ticksToSeconds(ticks) val display = secondsLeft.toString().padStart(2, '0') - - team.allPlayers().forEach { setInterfaceText(it, display, 494, 0) } + if(!quickStart) { + team.allPlayers().forEach { setInterfaceText(it, display, 494, 0) } + } return false } @@ -190,11 +190,14 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M tracker.defenderStats.runnersPast++ } } + fun isPenanceDead( type: PenanceType): Boolean = currentNPCDeathCount[type] >= currentNPCCount[type] + fun isAllPenanceDead(): Boolean = PenanceType.values().all { isPenanceDead(it) } + fun pennanceClearedMessage(npc: NPC) { val session = getBASession(npc) ?: return val type = npc.getAttribute("barbass-type") session.currentNPCDeathCount[type]++ - if (session.currentNPCDeathCount[type] == session.currentWaveDefinition.caps[type]) { + if (session.isPenanceDead(type)) { type.toString() session.broadcast("All of the Penance ${type.name.lowercase().replaceFirstChar { it.uppercase() }}s have been killed!") } diff --git a/Server/src/main/content/minigame/barbassault/bots/AttackerBehavior.kt b/Server/src/main/content/minigame/barbassault/bots/AttackerBehavior.kt new file mode 100644 index 000000000..28be0d97a --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/bots/AttackerBehavior.kt @@ -0,0 +1,62 @@ +package content.minigame.barbassault.bots.roles + +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle +import content.minigame.barbassault.bots.RoleBehavior +import content.minigame.barbassault.bots.core.BABotContext +import content.minigame.barbassault.getBASession +import core.game.node.entity.Entity +import core.game.node.entity.combat.equipment.WeaponInterface.AttackStyle +import core.game.node.entity.combat.equipment.WeaponInterface.BONUS_SLASH +import core.game.node.entity.npc.NPC +import core.game.node.entity.player.Player + +class AttackerBehavior : RoleBehavior { + + override fun tick(ctx: BABotContext) { + + val bot = ctx.bot + val api = ctx.api + + useCalledAttackStyle(bot) + if (attackPenance(ctx)) return + if (ctx.poolIdle()) return + if (ctx.insultDefender(bot)) return + + + } + + + private fun useCalledAttackStyle(bot: Player) { + val baSession = getBASession(bot) ?: return + val called = (baSession.roleCalls[BarbRole.ATTACKER]?.called ?: AttackerStyle.values().random() ) as AttackerStyle + if (bot.properties.attackStyle.style == called.attackStyle) return + + bot.properties.attackStyle = AttackStyle(called.attackStyle, BONUS_SLASH) + } + private fun checkValidTargets(target: NPC): Boolean { + if (!target.isActive()) return false + if (!target.getProperties().isMultiZone() && target.inCombat()) return false + if (!target.getDefinition().hasAction("attack")) return false + return true + } + private fun findTargets(entity: Entity): List = getBASession(entity)?.sessionNpcs?.filter { checkValidTargets(it) }?.sortedBy { it.location.getDistance(entity.location) }?.take(5)?: emptyList() + + fun attackPenance(ctx: BABotContext): Boolean { + val bot = ctx.bot + if (bot.inCombat()) return true + var target = ctx.currentTarget as? Entity + + if (target != null && !checkValidTargets(target as NPC)) { ctx.currentTarget = null; target = null } + + if (target == null) { + target = findTargets(bot).firstOrNull { !it.inCombat() }?: findTargets(bot).firstOrNull() + if (target == null) return false + ctx.currentTarget = target + } + + bot.attack(target) + return true + } + +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/bots/BABotContext.kt b/Server/src/main/content/minigame/barbassault/bots/BABotContext.kt new file mode 100644 index 000000000..d06583d75 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/bots/BABotContext.kt @@ -0,0 +1,82 @@ +package content.minigame.barbassault.bots.core + +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.arena.BarbassaultSession +import content.minigame.barbassault.arena.PenanceType +import core.game.bots.Script +import core.game.bots.ScriptAPI +import core.game.node.Node +import core.game.node.entity.player.Player +import core.game.world.map.zone.ZoneBorders + + + +class BABotContext( val bot: Player,val api: ScriptAPI ) { + var currentTarget: Node? = null + var script: Script? = null + var session: BarbassaultSession? = null + var role: BarbRole? = null + + private var delayTicks = 0 + internal var insultNextTick = 0 + + var tick: Int = 0 + + fun tickDelay(ticks: Int) { delayTicks = ticks } + + fun processDelay(): Boolean { + if (delayTicks > 0) { + delayTicks-- + return true + } + return false + } + + fun clickDialogueOption(buttonId: Int): Boolean { + val chatbox = bot.interfaceManager.chatbox ?: return false + + val action = bot.dialogueInterpreter.actions.removeFirstOrNull() + if (action != null) { + action.handle(bot, buttonId) + bot.interfaceManager.closeChatbox() + bot.dialogueInterpreter.close() + return true + } + + if (bot.dialogueInterpreter.dialogue != null) { + bot.dialogueInterpreter.handle(chatbox.id, buttonId) + return true + } + + return false + } + + fun poolIdle(): Boolean { + val base = session?.base ?: return false + val poolArea = ZoneBorders(base.x+27, base.y+18, base.x+24, base.y+16, 0) + if (poolArea.insideBorder(bot.location)) { + return false + } + api.walkTo(poolArea.randomWalkableLoc) + return true + } + + fun insultDefender(bot: Player): Boolean { + val s = session!! + if (!s.isPenanceDead(PenanceType.HEALER) && !s.isPenanceDead(PenanceType.RANGER )&& !s.isPenanceDead(PenanceType.FIGHTER)) return false + + if (tick < insultNextTick) return false + val defenderInsults = listOf( + "you defend like Ryan codes Barbass", + "R u asleep?", + "get szued", + "I've seen better defense from a broken gate", + "do you even see the runners?", + "my grandma can do better then that!" + ) + api.sendChat(defenderInsults.random()) + insultNextTick = tick + (8..20).random() + return true + } + +} diff --git a/Server/src/main/content/minigame/barbassault/bots/CollectorBehavior.kt b/Server/src/main/content/minigame/barbassault/bots/CollectorBehavior.kt new file mode 100644 index 000000000..1b99e4b89 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/bots/CollectorBehavior.kt @@ -0,0 +1,25 @@ +package content.minigame.barbassault.bots.roles + +import content.minigame.barbassault.bots.RoleBehavior +import content.minigame.barbassault.bots.core.BABotContext +import core.game.interaction.IntType +import core.game.interaction.InteractionListeners + +class CollectorBehavior : RoleBehavior { + + override fun tick(ctx: BABotContext) { + + val bot = ctx.bot + val api = ctx.api + + if (ctx.insultDefender(bot)) return + + bot.customState = "Collector" + + + val cannon = api.getNearestNode(2213, true) + if (cannon != null) { + api.walkTo(cannon.location) + } + } +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/bots/DefenderBehavior.kt b/Server/src/main/content/minigame/barbassault/bots/DefenderBehavior.kt new file mode 100644 index 000000000..b5a371a5f --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/bots/DefenderBehavior.kt @@ -0,0 +1,44 @@ +package content.minigame.barbassault.bots.roles + +import content.minigame.barbassault.arena.PenanceType +import content.minigame.barbassault.bots.RoleBehavior +import content.minigame.barbassault.bots.core.BABotContext +import content.minigame.barbassault.getBASession +import core.api.sendChat +import core.game.node.entity.player.Player +import core.game.world.map.Location + +class DefenderBehavior : RoleBehavior { + + override fun tick(ctx: BABotContext) { + val bot = ctx.bot + val api = ctx.api + + if (!bot.walkingQueue.isMoving) { + //ctx.api.walkTo(null) + ctx.tickDelay(3) + } + if (defendInsults(ctx)) return + + bot.customState = "Defender: " + } + + fun defendInsults(ctx: BABotContext): Boolean { + val s = ctx.session!! + if (!s.isPenanceDead(PenanceType.HEALER) && !s.isPenanceDead(PenanceType.RANGER )&& !s.isPenanceDead(PenanceType.FIGHTER)) return false + if (ctx.tick < ctx.insultNextTick) return false + val defenderInsults = listOf( + "Have you seen the size of these things?", + "them leggs", + "get szued", + "like to see you try...", + "Where? what runners? I CANT SEEE!!", + "...", + "call the right food!" + ) + ctx.api.sendChat(defenderInsults.random()) + ctx.insultNextTick = ctx.tick + (8..20).random() + return true + return true + } +} \ No newline at end of file diff --git a/Server/src/main/content/minigame/barbassault/bots/HealerBehavior.kt b/Server/src/main/content/minigame/barbassault/bots/HealerBehavior.kt new file mode 100644 index 000000000..eb549b29b --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/bots/HealerBehavior.kt @@ -0,0 +1,176 @@ +package content.minigame.barbassault.bots.roles + +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.arena.BarbassaultSession +import content.minigame.barbassault.arena.npcs.PENANCE_HEALER_IDS +import content.minigame.barbassault.bots.RoleBehavior +import content.minigame.barbassault.bots.core.BABotContext +import core.game.interaction.IntType +import core.game.interaction.InteractionListeners +import core.game.node.entity.combat.DeathTask +import core.game.node.entity.npc.NPC +import core.game.node.entity.player.Player +import core.game.node.item.Item +import org.rs09.consts.Items +import org.rs09.consts.Scenery + +class HealerBehavior : RoleBehavior { + + override fun tick(ctx: BABotContext) { + val bot = ctx.bot + val session = ctx.session ?: return + + if (healTeamMate(ctx, session)) return + if (stockUp(ctx)) return + if (fillVial(ctx)) return + if (healSelf(ctx)) return + if (poisonPenanceHealer(ctx, session)) return + if (healAnyTeammate(ctx, session)) return + if (ctx.insultDefender(bot)) return + + bot.customState = "BA-Healer: Idle" + } + + private fun healTeamMate(ctx: BABotContext, session: BarbassaultSession): Boolean { + val bot = ctx.bot + val target = session.team.allPlayers() + .filter { it != bot && healthPercent(it) <= TEAM_HEAL_PERCENT && it.skills.lifepoints > 0 } + .minByOrNull { healthPercent(it) } + ?: return false + + val vial = getBestUsableVial(bot) ?: return false + bot.customState = "BA-Healer: Healing ${target.username} (${target.skills.lifepoints}/${target.skills.maximumLifepoints})" + InteractionListeners.run(vial, target, IntType.PLAYER, bot) + ctx.tickDelay(3) + return true + } + private fun healAnyTeammate(ctx: BABotContext, session: BarbassaultSession): Boolean { + val bot = ctx.bot + + val target = session.team.allPlayers() + .filter { it != bot && it.skills.lifepoints > 0 } + .minByOrNull { healthPercent(it) } + ?: return false + + val vial = getBestUsableVial(bot) ?: return false + if (healthPercent(target) >= 0.95) return false + + bot.customState = "BA-Healer: Idle-heal ${target.username}" + InteractionListeners.run(vial, target, IntType.PLAYER, bot) + ctx.tickDelay(2) + return true + } + + private fun stockUp(ctx: BABotContext): Boolean { + val bot = ctx.bot + + if (hasAnyVial(bot) && POISON_FOODS.any { bot.inventory.containsAtLeastOneItem(it) }) { + return false + } + + val machine = ctx.api.getNearestNode(Scenery.HEALER_ITEM_MACHINE_20243, true) ?: return false + bot.customState = "BA-Healer: Stocking up" + ctx.api.interact(bot, machine, "Stock-up") + ctx.tickDelay(5) + return true + } + + private fun fillVial(ctx: BABotContext): Boolean { + val bot = ctx.bot + + if (!hasAnyVial(bot) || bot.inventory.containsAtLeastOneItem(Items.HEALING_VIAL4_10542)) { + return false + } + + val spring = ctx.api.getNearestNode(Scenery.HEALER_SPRING_20150, true) ?: return false + bot.customState = "BA-Healer: Filling vial" + ctx.api.interact(bot, spring, "Take-from") + ctx.tickDelay(4) + return true + } + + private fun healSelf(ctx: BABotContext): Boolean { + val bot = ctx.bot + + if (healthPercent(bot) > SELF_HEAL_PERCENT) return false + + val spring = ctx.api.getNearestNode(Scenery.HEALER_SPRING_20150, true) ?: return false + bot.customState = "BA-Healer: Drinking from spring" + ctx.api.interact(bot, spring, "Drink-from") + ctx.tickDelay(5) + return true + } + + private fun poisonPenanceHealer(ctx: BABotContext, session: BarbassaultSession): Boolean { + val bot = ctx.bot + val poison = (session.roleCalls[BarbRole.HEALER] as? BarbassaultSession.HealerCall)?.called + ?: return false + + if (!bot.inventory.containsAtLeastOneItem(poison.itemId)) { + val machine = ctx.api.getNearestNode(Scenery.HEALER_ITEM_MACHINE_20243, true) ?: return false + bot.customState = "BA-Healer: Restocking ${poison.ui}" + ctx.api.interact(bot, machine, "Stock-up") + ctx.tickDelay(5) + return true + } + + val target = session.sessionNpcs + .filter { isValidPenanceHealer(it) } + .minByOrNull { it.location.getDistance(bot.location) } + ?: return false + + bot.customState = "BA-Healer: Poisoning ${target.name} with ${poison.ui}" + ctx.api.useWith(bot, poison.itemId, target) + ctx.tickDelay(3) + return true + } + + private fun getBestUsableVial(player: Player): Item? { + return USABLE_HEALING_VIALS + .firstOrNull { player.inventory.containsAtLeastOneItem(it) } + ?.let { player.inventory.getItem(Item(it)) } + } + + private fun hasAnyVial(player: Player): Boolean { + return ALL_HEALING_VIALS.any { player.inventory.containsAtLeastOneItem(it) } + } + + private fun healthPercent(player: Player): Double { + val max = player.skills.maximumLifepoints + if (max <= 0) return 1.0 + return player.skills.lifepoints.toDouble() / max.toDouble() + } + + private fun isValidPenanceHealer(npc: NPC): Boolean { + return npc.id in PENANCE_HEALER_IDS && + npc.isActive && + npc.skills.lifepoints > 0 && + !DeathTask.isDead(npc) + } + + private companion object { + private const val TEAM_HEAL_PERCENT = 0.65 + private const val SELF_HEAL_PERCENT = 0.40 + + private val ALL_HEALING_VIALS = intArrayOf( + Items.HEALING_VIAL_10546, + Items.HEALING_VIAL1_10545, + Items.HEALING_VIAL2_10544, + Items.HEALING_VIAL3_10543, + Items.HEALING_VIAL4_10542 + ) + + private val USABLE_HEALING_VIALS = intArrayOf( + Items.HEALING_VIAL4_10542, + Items.HEALING_VIAL3_10543, + Items.HEALING_VIAL2_10544, + Items.HEALING_VIAL1_10545 + ) + + private val POISON_FOODS = intArrayOf( + Items.POISONED_TOFU_10539, + Items.POISONED_WORMS_10540, + Items.POISONED_MEAT_10541 + ) + } +} diff --git a/Server/src/main/content/minigame/barbassault/bots/LobbyBehavior.kt b/Server/src/main/content/minigame/barbassault/bots/LobbyBehavior.kt new file mode 100644 index 000000000..f0f1c3e4d --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/bots/LobbyBehavior.kt @@ -0,0 +1,88 @@ +package content.minigame.barbassault.bots + +import content.minigame.barbassault.arena.BarbassaultState +import content.minigame.barbassault.bots.core.BABotContext +import content.minigame.barbassault.getBASession + +import content.minigame.barbassault.lobby.BALobby +import content.minigame.barbassault.lobby.BALobby.Companion.QUICK_START +import core.game.world.map.Location +import org.rs09.consts.Scenery + + +class LobbyBehavior : RoleBehavior { + private enum class LobbyState { GET_TO_BA, FINDING_ROOM, WAITING_IN_ROOM,IN_ARENA } + + + override fun tick(ctx: BABotContext) { + + val state = state(ctx) + ctx.bot.customState = "BA-Lobby: $state" + ctx.bot.debug("$state") + + when (state) { + LobbyState.GET_TO_BA -> getToBA(ctx) + LobbyState.FINDING_ROOM -> enterRoom(ctx) + LobbyState.WAITING_IN_ROOM -> waitingInRoom(ctx) + LobbyState.IN_ARENA -> return + } + } + + private fun state(ctx: BABotContext): LobbyState { + val loc = ctx.bot.location + val session = getBASession(ctx.bot) + ctx.bot.debug( + "loc=$loc waiting=${isWaitingArea(loc)} halls=${isInHalls(loc)} session=${session != null}" + ) + return when { + (session?.state == BarbassaultState.IN_ARENA) -> LobbyState.IN_ARENA + (session?.state == BarbassaultState.END) -> LobbyState.IN_ARENA + (session?.state == BarbassaultState.COMPLETE) -> LobbyState.IN_ARENA + isWaitingQuick(loc) -> LobbyState.WAITING_IN_ROOM + isWaitingArea(loc) && (session != null) -> LobbyState.WAITING_IN_ROOM + isInHalls(loc) -> LobbyState.FINDING_ROOM + + else -> LobbyState.GET_TO_BA + } + } + + private fun waitingInRoom(ctx: BABotContext) { + if (ctx.tick % 12 == 0 && !ctx.bot.walkingQueue.isMoving) { + ctx.api.walkTo(QUICK_START.randomWalkableLoc) + ctx.tickDelay(3) + return + } + + if (ctx.tick % 50 == 0) { + ctx.bot.sendChat("Cmon, we need more people!!") + } + } + private fun getToBA(ctx: BABotContext) { + ctx.bot.teleport(BALobby.MAIN_LOBBY.randomWalkableLoc) + ctx.tickDelay(4) + } + + private fun enterRoom(ctx: BABotContext) { + if (ctx.bot.interfaceManager.hasChatbox()) { + ctx.clickDialogueOption(6) + ctx.tickDelay(8) + return + } + val quickDoor = ctx.api.getNearestNode(Scenery.DOOR_20209, true) + ctx.api.interact(ctx.bot, quickDoor, "Pass") + ctx.tickDelay(16) + + } + + private fun isInHalls(location: Location): Boolean { + return BALobby.isInHalls(location) + } + + private fun isWaitingQuick(location: Location): Boolean { + return QUICK_START.insideBorder(location) + } + private fun isWaitingArea(location: Location): Boolean { + return BALobby.isWaitingArea(location) + } + +} diff --git a/Server/src/main/content/minigame/barbassault/bots/SmartBABot.kt b/Server/src/main/content/minigame/barbassault/bots/SmartBABot.kt new file mode 100644 index 000000000..a7d28c025 --- /dev/null +++ b/Server/src/main/content/minigame/barbassault/bots/SmartBABot.kt @@ -0,0 +1,100 @@ +package content.minigame.barbassault.bots + +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.arena.BarbassaultState +import content.minigame.barbassault.bots.core.BABotContext +import content.minigame.barbassault.bots.roles.AttackerBehavior +import content.minigame.barbassault.bots.roles.CollectorBehavior +import content.minigame.barbassault.bots.roles.DefenderBehavior +import content.minigame.barbassault.bots.roles.HealerBehavior +import content.minigame.barbassault.getBARoleForPlayer +import content.minigame.barbassault.getBASession +import core.game.bots.AIPlayer +import core.game.bots.CombatBotAssembler +import core.game.bots.PvMBots +import core.game.bots.Script +import core.game.bots.ScriptAPI +import core.game.container.impl.EquipmentContainer +import core.game.global.action.EquipHandler +import core.game.world.map.Location + +interface RoleBehavior { + fun tick(ctx: BABotContext) +} + +private class SmartBABotBrain(private val ctx: BABotContext) { + private val lobby = LobbyBehavior() + private val attacker = AttackerBehavior() + private val collector = CollectorBehavior() + private val defender = DefenderBehavior() + private val healer = HealerBehavior() + + private var tickTimer = 0 + + fun tick() { + tickTimer++ + ctx.tick = tickTimer + + if (ctx.processDelay()) return + + ctx.session = getBASession(ctx.bot) + + if (ctx.session?.state == BarbassaultState.IN_ARENA) { + ctx.role = getBARoleForPlayer(ctx.bot) + when (ctx.role) { + BarbRole.ATTACKER -> attacker.tick(ctx) + BarbRole.COLLECTOR -> collector.tick(ctx) + BarbRole.DEFENDER -> defender.tick(ctx) + BarbRole.HEALER -> healer.tick(ctx) + null -> return + } + return + } + + lobby.tick(ctx) + } +} + +class SmartBABot(l: Location) : PvMBots(l) { + private val ctx = BABotContext(this, ScriptAPI(this)) + private val brain = SmartBABotBrain(ctx) + + init { + (this as AIPlayer).fullRestore() + CombatBotAssembler().gearPCiMeleeBot(this) + + val cape = equipment.get(EquipmentContainer.SLOT_CAPE) + if (cape != null) { + EquipHandler.unequip(this, EquipmentContainer.SLOT_CAPE, cape.id) + } + } + + override fun tick() { + super.tick() + brain.tick() + } +} + +class SmartBAPlayerScript : Script() { + private lateinit var brain: SmartBABotBrain + + init { + endDialogue = false + preventRandomIdle = true + } + + override fun init(isPlayer: Boolean) { + super.init(isPlayer) + val ctx = BABotContext(bot, scriptAPI) + ctx.script = this + brain = SmartBABotBrain(ctx) + } + + override fun tick() { + brain.tick() + } + + override fun newInstance(): Script { + return SmartBAPlayerScript().also { it.bot = this.bot } + } +} diff --git a/Server/src/main/content/minigame/barbassault/bots/BABot.kt b/Server/src/main/content/minigame/barbassault/bots/oldbot/BABot.kt similarity index 75% rename from Server/src/main/content/minigame/barbassault/bots/BABot.kt rename to Server/src/main/content/minigame/barbassault/bots/oldbot/BABot.kt index 682046350..eebdcd668 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BABot.kt +++ b/Server/src/main/content/minigame/barbassault/bots/oldbot/BABot.kt @@ -1,23 +1,18 @@ -package content.minigame.barbassault.bots +package content.minigame.barbassault.bots.oldbot import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbassaultState -import content.minigame.barbassault.arena.scenery.ItemMachine -import content.minigame.barbassault.arena.scenery.ItemMachine.DispenserType import content.minigame.barbassault.getBARoleForPlayer import content.minigame.barbassault.getBASession -import content.minigame.barbassault.lobby.BALobby.Companion.MAIN_LOBBY -import content.minigame.barbassault.lobby.BALobby.Companion.QUICK_START -import content.minigame.barbassault.lobby.BALobby.Companion.waveLobbies -import content.minigame.barbassault.lobby.BarbassQuickWaveActivity.Companion.addToQueue +import content.minigame.barbassault.lobby.BALobby +import content.minigame.barbassault.lobby.BarbassQuickWaveActivity import core.api.forceMove import core.api.getRegionBorders import core.api.log -import core.api.queueScript -import core.api.stopExecuting import core.game.bots.AIPlayer import core.game.bots.CombatBotAssembler import core.game.bots.PvMBots +import core.game.bots.ScriptAPI import core.game.global.action.EquipHandler import core.game.node.entity.Entity import core.game.node.entity.player.Player @@ -25,8 +20,6 @@ import core.game.node.item.Item import core.game.world.map.Location import core.tools.Log import org.rs09.consts.Scenery -import org.rs09.consts.Scenery.COLLECTOR_CONVERTER_21250 - class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { @@ -36,7 +29,7 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { val cape: Item? = equipment.get(1) if (cape != null) { - EquipHandler.unequip(this, 1, cape.id) + EquipHandler.Companion.unequip(this, 1, cape.id) } } @@ -44,6 +37,7 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { private var tickTimer = 0 private var moveTimer = 0 var hasVendingItems = false + var scriptAPI: ScriptAPI? = null enum class State { GET_TO_BA, OUTSIDE_ROOM, ENTER_ROOM, WAITING_IN_ROOM, PLAY_GAME } @@ -89,22 +83,15 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { } private fun getToBA() { - teleport(MAIN_LOBBY.randomWalkableLoc) + teleport(BALobby.Companion.MAIN_LOBBY.randomWalkableLoc) moveTimer = 3 } fun useRoleVendingMachine() { if (hasVendingItems) return - - val roleMachine = getClosestNodeWithEntry(60, getBARoleForPlayer(this)!!.machineId) ?: return - if (roleMachine.id == COLLECTOR_CONVERTER_21250) return - queueScript(this,3) { - roleMachine.interaction.handle(this, roleMachine.interaction[0]) - // ItemMachine().handleAddItemMachine(this, roleMachine,10558, STOCK_UP_DEF, 1,DispenserType.FOOD) - - hasVendingItems = true - return@queueScript stopExecuting(this) - } + val roleMachine = scriptAPI?.getNearestNode(getBARoleForPlayer(this)!!.machineId, true) + if (roleMachine?.id == Scenery.COLLECTOR_CONVERTER_21250) return + scriptAPI?.interact(this, roleMachine, "Stock-up") } @@ -121,8 +108,8 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { quickDoor.interaction.handle(this, quickDoor.interaction[0]) forceMove(this, location, location.transform(0, -1, 0), 25, 60, null, 819) { - addToQueue(this, null) - combatHandler.walkTo(QUICK_START.randomWalkableLoc) + BarbassQuickWaveActivity.Companion.addToQueue(this, null) + combatHandler.walkTo(BALobby.Companion.QUICK_START.randomWalkableLoc) } moveTimer = 4 @@ -146,20 +133,20 @@ class BABot(l: Location) : PvMBots(legitimizeLocation(l)) { fun isInLobbyOnly(location: Location): Boolean { return getRegionBorders(10322).insideBorder(location) - && waveLobbies.none { - it != MAIN_LOBBY - && it != QUICK_START + && BALobby.Companion.waveLobbies.none { + it != BALobby.Companion.MAIN_LOBBY + && it != BALobby.Companion.QUICK_START && it.insideBorder(location) } } private fun isWaitingArea(location: Location): Boolean { hasVendingItems = false - return QUICK_START.insideBorder(location) || waveLobbies.any { it.insideBorder(location) && it != MAIN_LOBBY } + return BALobby.Companion.QUICK_START.insideBorder(location) || BALobby.Companion.waveLobbies.any { it.insideBorder(location) && it != BALobby.Companion.MAIN_LOBBY } } fun debugthis(info : Any) { - log(this.javaClass, Log.FINE,state.toString()) + log(this.javaClass, Log.FINE, state.toString()) } override fun AttackNpcsInRadius(bot: Player, radius: Int): Boolean { diff --git a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt b/Server/src/main/content/minigame/barbassault/bots/oldbot/BACombatState.kt similarity index 83% rename from Server/src/main/content/minigame/barbassault/bots/BACombatState.kt rename to Server/src/main/content/minigame/barbassault/bots/oldbot/BACombatState.kt index deacd9669..8bae977ff 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BACombatState.kt +++ b/Server/src/main/content/minigame/barbassault/bots/oldbot/BACombatState.kt @@ -1,19 +1,15 @@ -package content.minigame.barbassault.bots +package content.minigame.barbassault.bots.oldbot import content.minigame.barbassault.BarbRole -import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle -import content.minigame.barbassault.arena.scenery.ItemMachine -import content.minigame.barbassault.arena.scenery.ItemMachine.DispenserType +import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.getBARoleForPlayer import content.minigame.barbassault.getBASession import core.game.interaction.MovementPulse -import core.game.node.entity.combat.equipment.WeaponInterface.AttackStyle -import core.game.node.entity.combat.equipment.WeaponInterface.BONUS_SLASH +import core.game.node.entity.combat.equipment.WeaponInterface import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.map.path.Pathfinder import core.tools.RandomFunction -import org.rs09.consts.Scenery class BACombatState(private val bot: BABot) { @@ -23,8 +19,8 @@ class BACombatState(private val bot: BABot) { bot.AttackNpcsInRadius(bot,25) //use Called AttackStyle val baSession = getBASession(bot) ?: return - val called = (baSession.roleCalls[BarbRole.ATTACKER]?.called ?: AttackerStyle.values().random() ) as AttackerStyle - bot.properties.attackStyle = AttackStyle(called.attackStyle, BONUS_SLASH) + val called = (baSession.roleCalls[BarbRole.ATTACKER]?.called ?: BarbassaultSession.AttackerStyle.values().random() ) as BarbassaultSession.AttackerStyle + bot.properties.attackStyle = WeaponInterface.AttackStyle(called.attackStyle, WeaponInterface.BONUS_SLASH) } diff --git a/Server/src/main/core/game/bots/GeneralBotCreator.kt b/Server/src/main/core/game/bots/GeneralBotCreator.kt index 7e3cb5478..9dc712852 100644 --- a/Server/src/main/core/game/bots/GeneralBotCreator.kt +++ b/Server/src/main/core/game/bots/GeneralBotCreator.kt @@ -102,7 +102,7 @@ class GeneralBotCreator { return false val idleRoll = RandomFunction.random(10) - if(idleRoll == 2 && botScript !is Idler){ + if(idleRoll == 2 && botScript !is Idler && !botScript.preventRandomIdle){ randomDelay += RandomFunction.random(20,50) return false } diff --git a/Server/src/main/core/game/bots/Script.java b/Server/src/main/core/game/bots/Script.java index 9c5da330a..47e487c64 100644 --- a/Server/src/main/core/game/bots/Script.java +++ b/Server/src/main/core/game/bots/Script.java @@ -22,6 +22,8 @@ public abstract class Script { public boolean running = true; public boolean endDialogue = true; + public boolean preventRandomIdle = false; + public void init(boolean isPlayer) { //bot.init(); diff --git a/Server/src/main/core/game/bots/ScriptAPI.kt b/Server/src/main/core/game/bots/ScriptAPI.kt index c2ac69649..a6d81669b 100644 --- a/Server/src/main/core/game/bots/ScriptAPI.kt +++ b/Server/src/main/core/game/bots/ScriptAPI.kt @@ -104,7 +104,8 @@ class ScriptAPI(private val bot: Player) { val item = bot.inventory.getItem(Item(itemId)) - val childNode = node.asScenery()?.getChild(bot) + //val childNode = node.asScenery()?.getChild(bot) + val childNode = if (node is Scenery) node.getChild(bot) else null if (InteractionListeners.run(item, node, type, bot)) return From 35738bb170c02e880ead317bc1c58bfdda6741ca Mon Sep 17 00:00:00 2001 From: Tooze Date: Tue, 9 Jun 2026 16:23:34 -0400 Subject: [PATCH 116/123] collector behavior started, defender behavior started, switched tick() order in SmartBABot() DefenderInsult during idle fixed --- .../barbassault/arena/CollectionBag.kt | 4 +- .../barbassault/bots/AttackerBehavior.kt | 13 +- .../minigame/barbassault/bots/BABotContext.kt | 105 ++++++-- .../barbassault/bots/CollectorBehavior.kt | 144 ++++++++++- .../barbassault/bots/DefenderBehavior.kt | 238 ++++++++++++++++-- .../barbassault/bots/HealerBehavior.kt | 32 ++- .../barbassault/bots/LobbyBehavior.kt | 9 +- .../minigame/barbassault/bots/SmartBABot.kt | 2 +- 8 files changed, 478 insertions(+), 69 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/CollectionBag.kt b/Server/src/main/content/minigame/barbassault/arena/CollectionBag.kt index 161beba4f..900455fa0 100644 --- a/Server/src/main/content/minigame/barbassault/arena/CollectionBag.kt +++ b/Server/src/main/content/minigame/barbassault/arena/CollectionBag.kt @@ -35,7 +35,7 @@ class CollectorBagManager(val player: Player) { fun totalEggs(): Int = container.toArray().filterNotNull().sumOf { it.amount } fun freeEggSpace(): Int = capacity - totalEggs() - fun getEggCount(itemId: Int): Int = container.toArray().filterNotNull().count { it.id == itemId } + fun getEggCount(itemId: Int): Int = container.toArray().filterNotNull().filter { it.id == itemId }.sumOf { it.amount } } @@ -48,4 +48,4 @@ class CollectorBagManager(val player: Player) { sendMessage(player, "You put the egg in the bag.") return true } -} \ No newline at end of file +} diff --git a/Server/src/main/content/minigame/barbassault/bots/AttackerBehavior.kt b/Server/src/main/content/minigame/barbassault/bots/AttackerBehavior.kt index 28be0d97a..7d0845f33 100644 --- a/Server/src/main/content/minigame/barbassault/bots/AttackerBehavior.kt +++ b/Server/src/main/content/minigame/barbassault/bots/AttackerBehavior.kt @@ -1,10 +1,12 @@ package content.minigame.barbassault.bots.roles import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.arena.PenanceType import content.minigame.barbassault.arena.BarbassaultSession.AttackerStyle import content.minigame.barbassault.bots.RoleBehavior import content.minigame.barbassault.bots.core.BABotContext import content.minigame.barbassault.getBASession +import core.game.node.entity.combat.DeathTask import core.game.node.entity.Entity import core.game.node.entity.combat.equipment.WeaponInterface.AttackStyle import core.game.node.entity.combat.equipment.WeaponInterface.BONUS_SLASH @@ -16,13 +18,11 @@ class AttackerBehavior : RoleBehavior { override fun tick(ctx: BABotContext) { val bot = ctx.bot - val api = ctx.api + ctx.insultDefender() useCalledAttackStyle(bot) if (attackPenance(ctx)) return - if (ctx.poolIdle()) return - if (ctx.insultDefender(bot)) return - + if (ctx.poolIdle("BA-Attacker: Idling at pool")) return } @@ -36,6 +36,9 @@ class AttackerBehavior : RoleBehavior { } private fun checkValidTargets(target: NPC): Boolean { if (!target.isActive()) return false + if (target.skills.lifepoints <= 0 || DeathTask.isDead(target)) return false + val penanceType = target.getAttribute("barbass-type", null) + if (penanceType != PenanceType.FIGHTER && penanceType != PenanceType.RANGER) return false if (!target.getProperties().isMultiZone() && target.inCombat()) return false if (!target.getDefinition().hasAction("attack")) return false return true @@ -59,4 +62,4 @@ class AttackerBehavior : RoleBehavior { return true } -} \ No newline at end of file +} diff --git a/Server/src/main/content/minigame/barbassault/bots/BABotContext.kt b/Server/src/main/content/minigame/barbassault/bots/BABotContext.kt index d06583d75..25e67e80c 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BABotContext.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BABotContext.kt @@ -1,12 +1,18 @@ package content.minigame.barbassault.bots.core import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.arena.BAGroundSpawn import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.PenanceType import core.game.bots.Script import core.game.bots.ScriptAPI +import core.game.global.action.PickupHandler +import core.game.interaction.IntType +import core.game.interaction.InteractionListeners import core.game.node.Node import core.game.node.entity.player.Player +import core.game.node.item.GroundItemManager +import core.game.world.map.Location import core.game.world.map.zone.ZoneBorders @@ -18,7 +24,7 @@ class BABotContext( val bot: Player,val api: ScriptAPI ) { var role: BarbRole? = null private var delayTicks = 0 - internal var insultNextTick = 0 + private var defenderInsultNextTick = 0 var tick: Int = 0 @@ -51,32 +57,103 @@ class BABotContext( val bot: Player,val api: ScriptAPI ) { return false } - fun poolIdle(): Boolean { - val base = session?.base ?: return false + fun poolIdle(state: String = "BA-Bot: Idling at pool"): Boolean { + val s = session ?: return false + val base = s.base val poolArea = ZoneBorders(base.x+27, base.y+18, base.x+24, base.y+16, 0) if (poolArea.insideBorder(bot.location)) { return false } - api.walkTo(poolArea.randomWalkableLoc) + bot.customState = state + api.walkTo(base.transform(25, 17, 0)) return true } - fun insultDefender(bot: Player): Boolean { - val s = session!! - if (!s.isPenanceDead(PenanceType.HEALER) && !s.isPenanceDead(PenanceType.RANGER )&& !s.isPenanceDead(PenanceType.FIGHTER)) return false + fun sameTile(a: Location, b: Location): Boolean { + return a.x == b.x && a.y == b.y && a.z == b.z + } + + fun walkToTile(loc: Location, state: String, delay: Int = 2): Boolean { + if (sameTile(bot.location, loc)) return false + + bot.customState = state + api.walkTo(loc) + tickDelay(delay) + return true + } + + fun findBAGroundItem(itemId: Int, spawnLoc: Location? = null): BAGroundSpawn? { + val s = session ?: return null + return s.BAgroundItems + .filter { + it.id == itemId && + it.isActive && + GroundItemManager.getItems().contains(it) && + (spawnLoc == null || sameTile(it.location, spawnLoc)) + } + .minByOrNull { it.location.getDistance(bot.location) } + } + + fun findNearestBAGroundItem(itemId: Int, spawnLocs: List): BAGroundSpawn? { + val s = session ?: return null + return s.BAgroundItems + .filter { item -> + item.id == itemId && + item.isActive && + GroundItemManager.getItems().contains(item) && + spawnLocs.any { sameTile(item.location, it) } + } + .minByOrNull { it.location.getDistance(bot.location) } + } + + fun takeBAGroundItem(item: BAGroundSpawn, state: String, delay: Int = 3): Boolean { + if (walkToTile(item.location, state)) return true + + bot.customState = state + val takeListener = InteractionListeners.get(item.id, IntType.GROUNDITEM.ordinal, "Take") + ?: InteractionListeners.get("Take", IntType.GROUNDITEM.ordinal) + + if (takeListener != null) { + takeListener.invoke(bot, item) + } else { + PickupHandler.take(bot, item) + } + tickDelay(delay) + return true + } + + fun pickUpBAGroundItem(itemId: Int, spawnLoc: Location, state: String): Boolean { + val item = findBAGroundItem(itemId, spawnLoc) ?: return walkToTile(spawnLoc, state) + return takeBAGroundItem(item, state) + } + + fun pickUpNearestBAGroundItem(itemId: Int, spawnLocs: List, state: String): Boolean { + val item = findNearestBAGroundItem(itemId, spawnLocs) + if (item != null) return takeBAGroundItem(item, state) + + val nearestSpawn = spawnLocs.minByOrNull { it.getDistance(bot.location) } ?: return false + return walkToTile(nearestSpawn, state) + } + + fun insultDefender() { + val s = session ?: return + if (!s.isPenanceDead(PenanceType.HEALER) || !s.isPenanceDead(PenanceType.RANGER) || + !s.isPenanceDead(PenanceType.FIGHTER) || s.isPenanceDead(PenanceType.RUNNER) + ) { + return + } + if (tick < defenderInsultNextTick) return - if (tick < insultNextTick) return false val defenderInsults = listOf( - "you defend like Ryan codes Barbass", + "You defend like Ryan codes Barbass", "R u asleep?", - "get szued", + "Get szued", "I've seen better defense from a broken gate", - "do you even see the runners?", - "my grandma can do better then that!" + "Do you even see the runners?", + "My grandma can do better then that!" ) api.sendChat(defenderInsults.random()) - insultNextTick = tick + (8..20).random() - return true + defenderInsultNextTick = tick + (8..20).random() } } diff --git a/Server/src/main/content/minigame/barbassault/bots/CollectorBehavior.kt b/Server/src/main/content/minigame/barbassault/bots/CollectorBehavior.kt index 1b99e4b89..39e8487c5 100644 --- a/Server/src/main/content/minigame/barbassault/bots/CollectorBehavior.kt +++ b/Server/src/main/content/minigame/barbassault/bots/CollectorBehavior.kt @@ -1,25 +1,149 @@ package content.minigame.barbassault.bots.roles +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.bots.RoleBehavior import content.minigame.barbassault.bots.core.BABotContext -import core.game.interaction.IntType -import core.game.interaction.InteractionListeners +import content.minigame.barbassault.arena.scenery.EggCannon +import core.api.amountInInventory +import core.api.freeSlots +import getCollectorBag +import org.rs09.consts.Items +import org.rs09.consts.NPCs +import org.rs09.consts.Scenery class CollectorBehavior : RoleBehavior { override fun tick(ctx: BABotContext) { - val bot = ctx.bot - val api = ctx.api + val session = ctx.session ?: return + ctx.script?.preventRandomIdle = true - if (ctx.insultDefender(bot)) return + ctx.insultDefender() + if (isHopperFull(session)) { + bot.customState = "BA-Collector: Hopper full, idling at cannon" + idleAtCannon(ctx) + return + } - bot.customState = "Collector" + if (hasLoadableCarriedEggs(ctx, session)) { + if (loadHopper(ctx)) return + } + val calledEgg = getCalledEgg(session) ?: run { + bot.customState = "BA-Collector: Waiting for attacker call" + idleAtCannon(ctx) + return + } - val cannon = api.getNearestNode(2213, true) - if (cannon != null) { - api.walkTo(cannon.location) + if (bot.skills.lifepoints <= MIN_SAFE_EGG_HP) { + bot.customState = "BA-Collector: Low HP (${bot.skills.lifepoints}), not picking eggs" + idleAtCannon(ctx) + return + } + + if (!canHopperTake(session, calledEgg.itemId)) { + bot.customState = "BA-Collector: Hopper already full for ${calledEgg.name.lowercase()} eggs" + idleAtCannon(ctx) + return + } + + if (pickUpCalledEgg(ctx, calledEgg)) return + + bot.customState = "BA-Collector: No ${calledEgg.name.lowercase()} eggs nearby" + idleAtCannon(ctx) + } + + private fun getCalledEgg(session: BarbassaultSession): BarbassaultSession.EggColor? { + val call = session.roleCalls[BarbRole.COLLECTOR] as? BarbassaultSession.CollectorCall + return call?.called + } + + private fun loadHopper(ctx: BABotContext): Boolean { + val hopper = ctx.api.getNearestNode(Scenery.EGG_HOPPER_20264, true) ?: run { + ctx.bot.customState = "BA-Collector: Looking for egg hopper" + return false + } + + if (hopper.location.getDistance(ctx.bot.location) > 2) { + ctx.bot.customState = "BA-Collector: Walking to egg hopper" + ctx.api.walkTo(hopper.location) + ctx.tickDelay(2) + return true + } + + val session = ctx.session ?: return false + val redBefore = session.eggHopper.red + val carriedBefore = carriedEggCount(ctx, Items.RED_EGG_10532) + ctx.bot.customState = "BA-Collector: Loading red eggs into hopper carried=$carriedBefore hopper=$redBefore" + + PRIORITY_HOPPER_EGGS.filter { carriedEggCount(ctx, it) > 0 && canHopperTake(session, it) } + .forEach { EggCannon.loadHopperEggs(ctx.bot, it) } + + ctx.bot.customState = "BA-Collector: Loaded red eggs carried=$carriedBefore hopper=$redBefore->${session.eggHopper.red}" + ctx.tickDelay(5) + return true + } + + private fun pickUpCalledEgg(ctx: BABotContext, calledEgg: BarbassaultSession.EggColor): Boolean { + if (!canCarryMoreEggs(ctx)) return false + + val egg = ctx.findBAGroundItem(calledEgg.itemId) ?: return false + return ctx.takeBAGroundItem( + egg, + "BA-Collector: Picking up ${calledEgg.name.lowercase()} egg id=${egg.id} loc=${egg.location}" + ) + } + + private fun canCarryMoreEggs(ctx: BABotContext): Boolean { + return getCollectorBag(ctx.bot).bag.freeEggSpace() > 0 || freeSlots(ctx.bot) > 0 + } + + private fun hasLoadableCarriedEggs(ctx: BABotContext, session: BarbassaultSession): Boolean { + return PRIORITY_HOPPER_EGGS.any { carriedEggCount(ctx, it) > 0 && canHopperTake(session, it) } + } + + private fun carriedEggCount(ctx: BABotContext, itemId: Int): Int { + val bot = ctx.bot + return getCollectorBag(bot).bag.getEggCount(itemId) + amountInInventory(bot, itemId) + } + + private fun canHopperTake(session: BarbassaultSession, itemId: Int): Boolean { + val hopper = session.eggHopper + return when (itemId) { + Items.GREEN_EGG_10531 -> hopper.green < MAX_HOPPER_EGGS_PER_COLOR + Items.RED_EGG_10532 -> hopper.red < MAX_HOPPER_EGGS_PER_COLOR + Items.BLUE_EGG_10533 -> hopper.blue < MAX_HOPPER_EGGS_PER_COLOR + Items.OMEGA_EGG_10537 -> hopper.yellow < MAX_HOPPER_EGGS_PER_COLOR + else -> false } } -} \ No newline at end of file + + private fun isHopperFull(session: BarbassaultSession): Boolean { + val hopper = session.eggHopper + return hopper.green >= MAX_HOPPER_EGGS_PER_COLOR && + hopper.red >= MAX_HOPPER_EGGS_PER_COLOR && + hopper.blue >= MAX_HOPPER_EGGS_PER_COLOR + } + + private fun idleAtCannon(ctx: BABotContext) { + val cannon = ctx.api.getNearestNode(NPCs.EGG_LAUNCHER_5026, false) + if (cannon != null && cannon.location.getDistance(ctx.bot.location) > 2) { + ctx.api.walkTo(cannon.location) + ctx.tickDelay(2) + return + } + + val hopper = ctx.api.getNearestNode(Scenery.EGG_HOPPER_20264, true) + if (hopper != null && hopper.location.getDistance(ctx.bot.location) > 2) { + ctx.api.walkTo(hopper.location) + ctx.tickDelay(2) + } + } + + private companion object { + private const val MIN_SAFE_EGG_HP = 6 + private const val MAX_HOPPER_EGGS_PER_COLOR = 5 + private val PRIORITY_HOPPER_EGGS = intArrayOf(Items.RED_EGG_10532) + } +} diff --git a/Server/src/main/content/minigame/barbassault/bots/DefenderBehavior.kt b/Server/src/main/content/minigame/barbassault/bots/DefenderBehavior.kt index b5a371a5f..ec3f0d0fd 100644 --- a/Server/src/main/content/minigame/barbassault/bots/DefenderBehavior.kt +++ b/Server/src/main/content/minigame/barbassault/bots/DefenderBehavior.kt @@ -1,44 +1,230 @@ package content.minigame.barbassault.bots.roles +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.LureItems +import content.minigame.barbassault.arena.BAGroundSpawn +import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.PenanceType import content.minigame.barbassault.bots.RoleBehavior import content.minigame.barbassault.bots.core.BABotContext -import content.minigame.barbassault.getBASession -import core.api.sendChat -import core.game.node.entity.player.Player +import core.api.getWorldTicks +import core.api.setAttribute +import core.game.node.item.Item import core.game.world.map.Location +import core.game.world.map.RegionManager +import org.rs09.consts.Items +import org.rs09.consts.Scenery class DefenderBehavior : RoleBehavior { override fun tick(ctx: BABotContext) { val bot = ctx.bot - val api = ctx.api + val session = ctx.session ?: return + ctx.script?.preventRandomIdle = true - if (!bot.walkingQueue.isMoving) { - //ctx.api.walkTo(null) - ctx.tickDelay(3) + if (session.isPenanceDead(PenanceType.RUNNER)) { + if (ctx.poolIdle("BA-Defender: Idling at pool")) return + bot.customState = "BA-Defender: Idle at pool" + return } - if (defendInsults(ctx)) return - bot.customState = "Defender: " + val calledFood = getCalledFood(session) ?: run { + bot.customState = "BA-Defender: Waiting for healer call" + return + } + + if (stockUp(ctx, session, calledFood)) return + if (repairTrap(ctx, session)) return + if (dropTrapFood(ctx, session, calledFood)) return + if (dropTrailFood(ctx, session, calledFood)) return + if (pickUpTools(ctx)) return + + bot.customState = "BA-Defender: Guarding trap" + walkNearTrap(ctx, session) } - fun defendInsults(ctx: BABotContext): Boolean { - val s = ctx.session!! - if (!s.isPenanceDead(PenanceType.HEALER) && !s.isPenanceDead(PenanceType.RANGER )&& !s.isPenanceDead(PenanceType.FIGHTER)) return false - if (ctx.tick < ctx.insultNextTick) return false - val defenderInsults = listOf( - "Have you seen the size of these things?", - "them leggs", - "get szued", - "like to see you try...", - "Where? what runners? I CANT SEEE!!", - "...", - "call the right food!" - ) - ctx.api.sendChat(defenderInsults.random()) - ctx.insultNextTick = ctx.tick + (8..20).random() - return true + private fun getCalledFood(session: BarbassaultSession): Int? { + val call = session.roleCalls[BarbRole.DEFENDER] as? BarbassaultSession.DefenderCall + return call?.called?.itemId + } + + private fun stockUp(ctx: BABotContext, session: BarbassaultSession, calledFood: Int): Boolean { + val bot = ctx.bot + + if (!needsMoreFood(session) || bot.inventory.containsAtLeastOneItem(calledFood)) { + return false + } + + val machine = ctx.api.getNearestNode(Scenery.DEFENDER_ITEM_MACHINE_20242, true) ?: return false + val option = defenderMachineOption(calledFood) ?: "Stock-up" + bot.customState = "BA-Defender: Taking food id=$calledFood ($option)" + ctx.api.interact(bot, machine, option) + ctx.tickDelay(5) return true } -} \ No newline at end of file + + private fun repairTrap(ctx: BABotContext, session: BarbassaultSession): Boolean { + val bot = ctx.bot + if (!bot.inventory.containsAtLeastOneItem(Items.HAMMER_2347) || !bot.inventory.containsAtLeastOneItem(Items.LOGS_11760)) { + return false + } + + val trap = RegionManager.getObject(trapLocation(session)) ?: return false + if (trap.id != Scenery.RUNNER_TRAP1_20230 && trap.id != Scenery.BROKEN_TRAP0_20231) { + return false + } + + bot.customState = "BA-Defender: Repairing trap" + ctx.api.interact(bot, trap, "Fix") + ctx.tickDelay(6) + return true + } + + private fun dropTrapFood(ctx: BABotContext, session: BarbassaultSession, calledFood: Int): Boolean { + val existingTrapFood = countTrapFood(session) + if (existingTrapFood >= TRAP_DROP_COUNT) return false + + val botLoc = ctx.bot.location + val inTrapArea = trapTiles(session).any { sameTile(botLoc, it) } + if (!inTrapArea || hasLureFoodAt(session, botLoc)) { + val trapDropLoc = trapDropLocation(session, botLoc) + if (ctx.walkToTile(trapDropLoc, "BA-Defender: Moving to trap bait")) return true + } + + if (!dropFood(ctx, session, calledFood, "BA-Defender: Dropping trap bait ${existingTrapFood + 1}/$TRAP_DROP_COUNT")) { + return false + } + + return true + } + + private fun dropTrailFood(ctx: BABotContext, session: BarbassaultSession, calledFood: Int): Boolean { + val nextTrail = TRAIL_SPOTS + .mapIndexed { index, offset -> index to session.base.transform(offset) } + .firstOrNull { (_, loc) -> !hasLureFoodAt(session, loc) } + ?: return false + + val (trailIndex, loc) = nextTrail + if (ctx.walkToTile(loc, "BA-Defender: Walking trail ${trailIndex + 1}/${TRAIL_SPOTS.size}")) return true + + if (!dropFood(ctx, session, calledFood, "BA-Defender: Dropping trail food ${trailIndex + 1}/${TRAIL_SPOTS.size}")) { + return false + } + + return true + } + + private fun pickUpTools(ctx: BABotContext): Boolean { + val bot = ctx.bot + val base = ctx.session?.base ?: return false + + if (!bot.inventory.containsAtLeastOneItem(Items.HAMMER_2347)) { + return ctx.pickUpBAGroundItem( + Items.HAMMER_2347, + base.transform(32, 42, 0), + "BA-Defender: Getting hammer" + ) + } + + if (!bot.inventory.containsAtLeastOneItem(Items.LOGS_11760)) { + return ctx.pickUpNearestBAGroundItem( + Items.LOGS_11760, + listOf(base.transform(30, 46, 0), base.transform(29, 47, 0)), + "BA-Defender: Getting logs" + ) + } + + return false + } + + private fun dropFood(ctx: BABotContext, session: BarbassaultSession, foodId: Int, state: String): Boolean { + val bot = ctx.bot + val inventoryItem = bot.inventory.getItem(Item(foodId)) ?: run { + bot.customState = "$state - missing food id=$foodId" + return false + } + val item = Item(foodId, 1) + val droppedItem = item.dropItem + val requiredFood = (session.roleCalls[BarbRole.DEFENDER] as? BarbassaultSession.DefenderCall)?.required?.itemId + val isGoodFood = foodId == requiredFood + + if (!bot.inventory.remove(item)) { + bot.customState = "$state - failed remove ${inventoryItem.name} id=${inventoryItem.id}" + return false + } + + bot.customState = "$state - ${inventoryItem.name} id=${inventoryItem.id}" + BAGroundSpawn(session, 60, droppedItem, bot.location, isGoodFood).init() + setAttribute(bot, "droppedItem:${droppedItem.id}", getWorldTicks() + 2) + ctx.tickDelay(2) + return true + } + + private fun walkNearTrap(ctx: BABotContext, session: BarbassaultSession) { + ctx.walkToTile(trapDropLocation(session, ctx.bot.location), "BA-Defender: Returning to trap") + } + + private fun trapLocation(session: BarbassaultSession): Location { + return session.base.transform(45, 34, 0) + } + + private fun trapDropLocation(session: BarbassaultSession, from: Location): Location { + val center = trapLocation(session) + if (!hasLureFoodAt(session, center)) return center + + return trapTiles(session) + .filter { !hasLureFoodAt(session, it) } + .minByOrNull { it.getDistance(from) } + ?: center + } + + private fun countTrapFood(session: BarbassaultSession): Int { + val trapTiles = trapTiles(session) + return session.BAgroundItems.count { + it.id in LureItems && + it.isActive && + trapTiles.any { tile -> sameTile(it.location, tile) } + } + } + + private fun needsMoreFood(session: BarbassaultSession): Boolean { + return countTrapFood(session) < TRAP_DROP_COUNT || + TRAIL_SPOTS.any { !hasLureFoodAt(session, session.base.transform(it)) } + } + + private fun hasLureFoodAt(session: BarbassaultSession, loc: Location): Boolean { + return session.BAgroundItems.any { + it.id in LureItems && + it.isActive && + sameTile(it.location, loc) + } + } + + private fun sameTile(a: Location, b: Location): Boolean { + return a.x == b.x && a.y == b.y && a.z == b.z + } + + private fun trapTiles(session: BarbassaultSession): List { + return trapLocation(session).get3x3Tiles() + } + + private fun defenderMachineOption(foodId: Int): String? { + return when (foodId) { + Items.WORMS_10515 -> "Take-worms" + Items.CRACKERS_10513 -> "Take-crackers" + Items.TOFU_10514 -> "Take-tofu" + else -> null + } + } + + private companion object { + private const val TRAP_DROP_COUNT = 2 + + private val TRAIL_SPOTS = listOf( + Location.create(44, 36, 0), + Location.create(41, 37, 0), + Location.create(36, 37, 0), + Location.create(34, 40, 0) + ) + } +} diff --git a/Server/src/main/content/minigame/barbassault/bots/HealerBehavior.kt b/Server/src/main/content/minigame/barbassault/bots/HealerBehavior.kt index eb549b29b..352715d8b 100644 --- a/Server/src/main/content/minigame/barbassault/bots/HealerBehavior.kt +++ b/Server/src/main/content/minigame/barbassault/bots/HealerBehavior.kt @@ -20,15 +20,17 @@ class HealerBehavior : RoleBehavior { val bot = ctx.bot val session = ctx.session ?: return + ctx.insultDefender() if (healTeamMate(ctx, session)) return if (stockUp(ctx)) return if (fillVial(ctx)) return if (healSelf(ctx)) return if (poisonPenanceHealer(ctx, session)) return if (healAnyTeammate(ctx, session)) return - if (ctx.insultDefender(bot)) return - bot.customState = "BA-Healer: Idle" + if (ctx.poolIdle("BA-Healer: Idling at pool")) return + + bot.customState = "BA-Healer: Idle at pool" } private fun healTeamMate(ctx: BABotContext, session: BarbassaultSession): Boolean { @@ -69,8 +71,16 @@ class HealerBehavior : RoleBehavior { } val machine = ctx.api.getNearestNode(Scenery.HEALER_ITEM_MACHINE_20243, true) ?: return false - bot.customState = "BA-Healer: Stocking up" - ctx.api.interact(bot, machine, "Stock-up") + val healerCall = ctx.session?.roleCalls?.get(BarbRole.HEALER) as? BarbassaultSession.HealerCall + val calledPoison = healerCall?.called?.itemId + val option = when { + !hasAnyVial(bot) -> "Take-vial" + calledPoison != null && !bot.inventory.containsAtLeastOneItem(calledPoison) -> healerMachineOption(calledPoison) + else -> "Stock-up" + } ?: "Stock-up" + + bot.customState = "BA-Healer: Taking supplies ($option)" + ctx.api.interact(bot, machine, option) ctx.tickDelay(5) return true } @@ -108,8 +118,9 @@ class HealerBehavior : RoleBehavior { if (!bot.inventory.containsAtLeastOneItem(poison.itemId)) { val machine = ctx.api.getNearestNode(Scenery.HEALER_ITEM_MACHINE_20243, true) ?: return false - bot.customState = "BA-Healer: Restocking ${poison.ui}" - ctx.api.interact(bot, machine, "Stock-up") + val option = healerMachineOption(poison.itemId) ?: "Stock-up" + bot.customState = "BA-Healer: Restocking ${poison.ui} ($option)" + ctx.api.interact(bot, machine, option) ctx.tickDelay(5) return true } @@ -148,6 +159,15 @@ class HealerBehavior : RoleBehavior { !DeathTask.isDead(npc) } + private fun healerMachineOption(foodId: Int): String? { + return when (foodId) { + Items.POISONED_TOFU_10539 -> "Take-tofu" + Items.POISONED_WORMS_10540 -> "Take-worms" + Items.POISONED_MEAT_10541 -> "Take-meat" + else -> null + } + } + private companion object { private const val TEAM_HEAL_PERCENT = 0.65 private const val SELF_HEAL_PERCENT = 0.40 diff --git a/Server/src/main/content/minigame/barbassault/bots/LobbyBehavior.kt b/Server/src/main/content/minigame/barbassault/bots/LobbyBehavior.kt index f0f1c3e4d..79fb02851 100644 --- a/Server/src/main/content/minigame/barbassault/bots/LobbyBehavior.kt +++ b/Server/src/main/content/minigame/barbassault/bots/LobbyBehavior.kt @@ -31,9 +31,8 @@ class LobbyBehavior : RoleBehavior { private fun state(ctx: BABotContext): LobbyState { val loc = ctx.bot.location val session = getBASession(ctx.bot) - ctx.bot.debug( - "loc=$loc waiting=${isWaitingArea(loc)} halls=${isInHalls(loc)} session=${session != null}" - ) + ctx.bot.debug("loc=$loc waiting=${isWaitingArea(loc)} halls=${isInHalls(loc)} session=${session != null}") + return when { (session?.state == BarbassaultState.IN_ARENA) -> LobbyState.IN_ARENA (session?.state == BarbassaultState.END) -> LobbyState.IN_ARENA @@ -53,8 +52,8 @@ class LobbyBehavior : RoleBehavior { return } - if (ctx.tick % 50 == 0) { - ctx.bot.sendChat("Cmon, we need more people!!") + if (ctx.tick % 150 == 0) { + ctx.api.sendChat("Cmon, we need more people!!") } } private fun getToBA(ctx: BABotContext) { diff --git a/Server/src/main/content/minigame/barbassault/bots/SmartBABot.kt b/Server/src/main/content/minigame/barbassault/bots/SmartBABot.kt index a7d28c025..ee960aeb2 100644 --- a/Server/src/main/content/minigame/barbassault/bots/SmartBABot.kt +++ b/Server/src/main/content/minigame/barbassault/bots/SmartBABot.kt @@ -70,8 +70,8 @@ class SmartBABot(l: Location) : PvMBots(l) { } override fun tick() { - super.tick() brain.tick() + super.tick() } } From 174ae95e8b52203aae0bab541885b8fee39e9680 Mon Sep 17 00:00:00 2001 From: Tooze Date: Tue, 9 Jun 2026 21:42:33 -0400 Subject: [PATCH 117/123] more defender insults, attempt at better runner logic. defender trap, --- .../minigame/barbassault/arena/BASession.kt | 19 +- .../arena/npcs/PenanceRunnerNPC.kt | 310 +++++++++++++++--- .../barbassault/arena/scenery/DefenderTrap.kt | 92 +++++- .../minigame/barbassault/bots/BABotContext.kt | 61 +++- 4 files changed, 414 insertions(+), 68 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index 5d1b01361..43ec66b4d 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -57,6 +57,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M val sessionNpcs = mutableListOf() var currentNPCCount = SpawnCaps(0,0,0,0) var currentNPCDeathCount = SpawnCaps(0,0,0,0) + var currentNPCEscapeCount = SpawnCaps(0,0,0,0) var npcTunnel: List = listOf( PenanceNpcTunnel(PenanceType.RANGER,location(17,47,0),location(18,46,0),Direction.SOUTH), @@ -193,6 +194,18 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M fun isPenanceDead( type: PenanceType): Boolean = currentNPCDeathCount[type] >= currentNPCCount[type] fun isAllPenanceDead(): Boolean = PenanceType.values().all { isPenanceDead(it) } + fun runnerEscaped(runner: NPC) { + if (!sessionNpcs.remove(runner)) { + return + } + + currentNPCEscapeCount[PenanceType.RUNNER] = currentNPCEscapeCount[PenanceType.RUNNER] + 1 + val defenders = team.getPlayersByRole(BarbRole.DEFENDER) + val penalizedPlayers = if (defenders.isEmpty()) team.allPlayers() else defenders + penalizedPlayers.forEach { eventBus.emit(BarbAssEvent.RunnerEscaped(it)) } + runner.clear() + } + fun pennanceClearedMessage(npc: NPC) { val session = getBASession(npc) ?: return val type = npc.getAttribute("barbass-type") @@ -225,7 +238,7 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M } fun tryPenanceSpawn(type: PenanceType, force: Boolean = false): Boolean { - val current = currentNPCCount[type] + val current = currentNPCCount[type] - currentNPCEscapeCount[type] val cap = currentWaveDefinition.caps[type] val npcId = currentWaveDefinition.npcIds[type] ?: return false @@ -625,9 +638,9 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M } enum class LureFood(override val ui: String, val itemId:Int, override val hornShout:String):HasUIText { - TOFU( "Tofu", Items.WORMS_10515, "Defender: Drop Tofu!"), + TOFU( "Tofu", Items.TOFU_10514, "Defender: Drop Tofu!"), CRACKERS("Crackers",Items.CRACKERS_10513,"Defender: Drop Crackers!"), - WORMS( "Worms", Items.TOFU_10514, "Defender: Drop Worms!"); + WORMS( "Worms", Items.WORMS_10515, "Defender: Drop Worms!"); } class AttackerCall( override val required: AttackerStyle ) : RoleCall() diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt index 025f5f641..26b370be5 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt @@ -2,17 +2,25 @@ package content.minigame.barbassault.arena.npcs import content.minigame.barbassault.BA_SESSION_KEY import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.LureItems +import content.minigame.barbassault.getBALevels import core.game.node.entity.Entity import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior import org.rs09.consts.NPCs import content.minigame.barbassault.arena.* +import content.minigame.barbassault.arena.scenery.DefenderTrap import content.minigame.barbassault.getBASession import core.api.forceWalk +import core.api.hasLineOfSight import core.api.sendChat +import core.game.node.item.GroundItemManager import core.game.node.entity.player.Player +import core.game.world.map.Location import core.game.world.map.RegionManager +import kotlin.math.abs +import kotlin.math.max val PENANCE_RUNNER_IDS = listOf( @@ -32,82 +40,292 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { val BAD_EAT = "Blurghh" val TRAP_HIT = "Urghhh!" val ESCAPE = "Raaa!!" - var actionState = ACTION_STATE.SEEK_FOOD + private val defenderTrap = DefenderTrap() - enum class ACTION_STATE { SEEK_FOOD, SEEK_PLAYER, STALLED, SEEK_ESCAPE, EATING, THINKING } + private enum class RunnerMode { RANDOM_WALKING, HUNTING } + + private companion object { + const val MODE = "ba-runner:mode" + const val MODE_TICKS = "ba-runner:mode-ticks" + const val HUNT_TICKS = "ba-runner:hunt-ticks" + const val TARGET = "ba-runner:target" + const val TARGET_CYCLES = "ba-runner:target-cycles" + const val TARGET_LAST_LOC = "ba-runner:target-last-loc" + const val SKIP_NEXT_HUNT = "ba-runner:skip-next-hunt" + const val BAD_FOOD_WALK_TICKS = "ba-runner:bad-food-walk-ticks" + const val EAT_PAUSE_TICKS = "ba-runner:eat-pause-ticks" + const val ESCAPE_REMOVE_TICKS = "ba-runner:escape-remove-ticks" + + val HUNT_ZONE_ORDER = (0 downTo -5).flatMap { x -> + (0 downTo -5).map { y -> x to y } + } + } override fun getXpMultiplier(self: NPC, attacker: Entity): Double { return 0.0 } override fun onCreation(self: NPC) { - self.isWalks = true - self.walkRadius = 24 + self.isWalks = false + self.walkRadius = 0 self.destinationFlag self.setAttribute("barbass-type", PenanceType.RUNNER) - + self.setAttribute(MODE, RunnerMode.RANDOM_WALKING) + self.setAttribute(MODE_TICKS, (0..4).random()) + self.setAttribute(HUNT_TICKS, (0..2).random()) } - var stateTicks = 0 + override fun tick(self: NPC): Boolean { val session = self.getAttribute(BA_SESSION_KEY) ?: return false - stateTicks++ - - if (stateTicks >= 6) { - stateTicks = 0 - pickNewState() + if (defenderTrap.tryTriggerTrap(self)) { + return false } - when (actionState) { - ACTION_STATE.SEEK_FOOD -> seekFood(self, session) - ACTION_STATE.SEEK_PLAYER -> seekPlayers(self, session) - ACTION_STATE.SEEK_ESCAPE -> escape(self, session) - ACTION_STATE.STALLED -> stalled(self) - ACTION_STATE.EATING -> eating(self) - ACTION_STATE.THINKING -> self.resetWalk() + val escapeRemoveTicks = self.getAttribute(ESCAPE_REMOVE_TICKS, 0) + if (escapeRemoveTicks > 0) { + self.setAttribute(ESCAPE_REMOVE_TICKS, escapeRemoveTicks - 1) + self.resetWalk() + if (escapeRemoveTicks <= 1) { + session.runnerEscaped(self) + } + return false + } + + if (isAtEscapeTunnel(session, self.location)) { + beginEscape(self) + return false + } + + val eatPauseTicks = self.getAttribute(EAT_PAUSE_TICKS, 0) + if (eatPauseTicks > 0) { + self.setAttribute(EAT_PAUSE_TICKS, eatPauseTicks - 1) + self.resetWalk() + self.shouldPreventStacking(self) + return false + } + + val modeChanged = tickModeTimer(self) + tickHuntTimer(self, session) + + val badWalkTicks = self.getAttribute(BAD_FOOD_WALK_TICKS, 0) + if (badWalkTicks > 0) { + self.setAttribute(BAD_FOOD_WALK_TICKS, badWalkTicks - 1) + walkAfterBadFood(self, session) + self.shouldPreventStacking(self) + return false + } + + val target = self.getAttribute(TARGET, null) + if (target != null) { + chaseFood(self, session, target) + } else if (modeChanged && self.getAttribute(MODE, RunnerMode.RANDOM_WALKING) == RunnerMode.RANDOM_WALKING) { + randomWalk(self, session) } self.shouldPreventStacking(self) + return false + } + + private fun tickModeTimer(self: NPC): Boolean { + val modeTicks = self.getAttribute(MODE_TICKS, 0) + 1 + if (modeTicks < 5) { + self.setAttribute(MODE_TICKS, modeTicks) + return false + } + + self.setAttribute(MODE_TICKS, 0) + val nextMode = when (self.getAttribute(MODE, RunnerMode.RANDOM_WALKING)) { + RunnerMode.RANDOM_WALKING -> RunnerMode.HUNTING + RunnerMode.HUNTING -> RunnerMode.RANDOM_WALKING + } + + self.setAttribute(MODE, nextMode) + if (nextMode == RunnerMode.HUNTING) { + val targetCycles = self.getAttribute(TARGET_CYCLES, 0) + 1 + self.setAttribute(TARGET_CYCLES, targetCycles) + } return true } - - fun seekFood(self: NPC, session: BarbassaultSession) { - val groundItem = session.findClosestLure(self.location) ?: return - val target = groundItem.location - val occupied = RegionManager.getLocalEntitys(target, 0).any { it != self && it.location == target } - - if (occupied) { - val adjacent = target.getCardinalTiles().firstOrNull { it.isNextTo(self) } - if (adjacent != null) { forceWalk(self, adjacent, "DUMB") } - - self.resetWalk() - self.faceLocation(target) + private fun tickHuntTimer(self: NPC, session: BarbassaultSession) { + if (self.getAttribute(MODE, RunnerMode.RANDOM_WALKING) != RunnerMode.HUNTING) { return } - forceWalk(self, target, "DUMB") + val huntTicks = self.getAttribute(HUNT_TICKS, 0) + 1 + if (huntTicks < 3) { + self.setAttribute(HUNT_TICKS, huntTicks) + return + } - if (self.location == target) { - sendChat(self, if (groundItem.flag == true) GOOD_EAT else BAD_EAT) - session.destroyGroundItem(groundItem) - self.resetWalk() + self.setAttribute(HUNT_TICKS, 0) + if (self.getAttribute(SKIP_NEXT_HUNT, false)) { + self.setAttribute(SKIP_NEXT_HUNT, false) + clearTarget(self) + return + } + + val currentTarget = self.getAttribute(TARGET, null) + if (currentTarget != null && self.getAttribute(TARGET_CYCLES, 0) < 2 && isFoodStillActive(session, currentTarget)) { + return + } + + selectFood(self, session)?.let { food -> + self.setAttribute(TARGET, food) + self.setAttribute(TARGET_CYCLES, 0) + self.setAttribute(TARGET_LAST_LOC, food.location) } } - fun pickNewState() { - actionState = when ((0..2).random()) { - 0 -> ACTION_STATE.SEEK_FOOD - 1 -> ACTION_STATE.SEEK_PLAYER - else -> ACTION_STATE.SEEK_ESCAPE + + private fun chaseFood(self: NPC, session: BarbassaultSession, food: BAGroundSpawn) { + val foodLocation = food.location + if (!isFoodStillActive(session, food)) { + clearTarget(self) + forceWalk(self, foodLocation, "DUMB") + return } + + if (self.location == foodLocation) { + eatFood(self, session, food) + return + } + + val occupied = RegionManager.getLocalEntitys(foodLocation, 0).any { it != self && it.location == foodLocation } + if (occupied) { + if (!foodLocation.isNextTo(self)) { + val adjacent = foodLocation.cardinalTiles + .filter { RegionManager.isTeleportPermitted(it) } + .minByOrNull { it.getDistance(self.location) } + if (adjacent != null) { + forceWalk(self, adjacent, "DUMB") + } + } else { + self.resetWalk() + } + self.faceLocation(foodLocation) + return + } + + forceWalk(self, foodLocation, "DUMB") } - private fun escape(self: NPC, session1: BarbassaultSession) { } - private fun stalled(self: NPC) { } - private fun eating(self:NPC){ } + private fun eatFood(self: NPC, session: BarbassaultSession, food: BAGroundSpawn) { + val goodFood = food.flag == true + sendChat(self, if (goodFood) GOOD_EAT else BAD_EAT) + session.destroyGroundItem(food) + clearTarget(self) + self.resetWalk() - fun seekPlayers(self: NPC,session: BarbassaultSession) { - return + if (goodFood) { + self.setAttribute(EAT_PAUSE_TICKS, 5) + if (self.getAttribute(MODE, RunnerMode.RANDOM_WALKING) == RunnerMode.HUNTING) { + self.setAttribute(MODE, RunnerMode.RANDOM_WALKING) + self.setAttribute(MODE_TICKS, 0) + } + return + } + + self.setAttribute(SKIP_NEXT_HUNT, true) + self.setAttribute(BAD_FOOD_WALK_TICKS, 5) + walkAfterBadFood(self, session) + } + + private fun selectFood(self: NPC, session: BarbassaultSession): BAGroundSpawn? { + val radius = lureRadius(session) + val allVisibleFood = session.BAgroundItems + .filter { isFoodStillActive(session, it) } + .filter { it.id in LureItems } + .filter { hasLineOfSight(self, it) } + + if (allVisibleFood.none { tileRadius(self.location, it.location) <= radius }) { + return null + } + + for (zone in HUNT_ZONE_ORDER) { + val food = allVisibleFood.lastOrNull { zoneFor(session, it.location) == zone } + if (food != null) { + return food + } + } + + return null + } + + private fun randomWalk(self: NPC, session: BarbassaultSession) { + val location = self.location + val destination = if (isAtSouthernWall(session, location)) { + furthestWalkableStraight(location, 0, -1, 5) ?: escapeLocation(session) + } else { + when ((0..5).random()) { + 0 -> furthestWalkableStraight(location, -1, 0, 5) + 1 -> furthestWalkableStraight(location, 1, 0, 5) + else -> furthestWalkableStraight(location, 0, -1, 5) + } + } ?: return + + forceWalk(self, destination, "DUMB") + } + + private fun walkAfterBadFood(self: NPC, session: BarbassaultSession) { + val directionY = if (self.location.y >= session.base.y + 42) -1 else 1 + val destination = furthestWalkableStraight(self.location, 0, directionY, 5) ?: return + forceWalk(self, destination, "DUMB") + } + + private fun lureRadius(session: BarbassaultSession): Int { + return if (session.team.getPlayersByRole(BarbRole.DEFENDER).any { getBALevels(it).def >= 2 }) 5 else 4 + } + + private fun isFoodStillActive(session: BarbassaultSession, food: BAGroundSpawn): Boolean { + return food.isActive && !food.isRemoved && session.BAgroundItems.contains(food) && GroundItemManager.getItems().contains(food) + } + + private fun clearTarget(self: NPC) { + self.removeAttribute(TARGET) + self.removeAttribute(TARGET_CYCLES) + self.removeAttribute(TARGET_LAST_LOC) + } + + private fun zoneFor(session: BarbassaultSession, location: Location): Pair { + val relativeX = location.x - session.base.x + val relativeY = location.y - session.base.y + return Math.floorDiv(relativeX - 40, 8) to Math.floorDiv(relativeY - 40, 8) + } + + private fun tileRadius(a: Location, b: Location): Int { + return max(abs(a.x - b.x), abs(a.y - b.y)) + } + + private fun furthestWalkableStraight(start: Location, dx: Int, dy: Int, maxSteps: Int): Location? { + var destination: Location? = null + for (step in 1..maxSteps) { + val next = start.transform(dx * step, dy * step, 0) + if (!RegionManager.isTeleportPermitted(next)) { + break + } + destination = next + } + return destination + } + + private fun isAtSouthernWall(session: BarbassaultSession, location: Location): Boolean { + return location.y <= session.base.y + 16 + } + + private fun isAtEscapeTunnel(session: BarbassaultSession, location: Location): Boolean { + return location.y <= escapeLocation(session).y + } + + private fun beginEscape(self: NPC) { + sendChat(self, ESCAPE) + clearTarget(self) + self.resetWalk() + self.setAttribute(ESCAPE_REMOVE_TICKS, 1) + } + + private fun escapeLocation(session: BarbassaultSession): Location { + return session.base.transform(35, 15, 0) } override fun onDeathFinished(self: NPC, killer: Entity) { @@ -130,4 +348,4 @@ Runner emote runner_hit_5101 runner_Move_5100 runner_Idle 5099 - */ \ No newline at end of file + */ diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt index cc9fda70a..a7c96f10a 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt @@ -1,8 +1,14 @@ package content.minigame.barbassault.arena.scenery +import content.minigame.barbassault.LureItems +import content.minigame.barbassault.BarbRole +import content.minigame.barbassault.arena.BAGroundSpawn +import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.npcs.PENANCE_RUNNER_IDS +import content.minigame.barbassault.getBASession import core.api.* import core.game.node.entity.Entity +import core.game.node.entity.combat.DeathTask import core.game.node.entity.player.Player import core.game.system.task.Pulse import core.game.world.GameWorld @@ -28,23 +34,35 @@ class DefenderTrap : MapArea { val GOOD_EAT = "Chomp, chomp" val BAD_EAT = "Blurghh" val TRAP_HIT = "Urghhh!" - val TRAP_EAST_ZONE: ZoneBorders = ZoneBorders(1900, 5475, 1902, 5473, 0) val TRAP_EAST = Location.create(1901, 5474, 0) - val TRAP_WEST_ZONE: ZoneBorders = ZoneBorders(1870, 5474, 1872, 5472, 0) val TRAP_WEST = Location.create(1871, 5473, 0) + val TRAP_EAST_ZONE: ZoneBorders = zoneFrom3x3(TRAP_EAST) + val TRAP_WEST_ZONE: ZoneBorders = zoneFrom3x3(TRAP_WEST) val TRAPS_ZONE = arrayOf(TRAP_EAST_ZONE,TRAP_WEST_ZONE) val Fix_trap_IDs = intArrayOf( Scenery.RUNNER_TRAP1_20230, Scenery.BROKEN_TRAP0_20231 ) val TRAPS = arrayOf(TRAP_WEST,TRAP_EAST) + val TRAP_EAST_OFFSET = Location.create(45, 34, 0) + val TRAP_WEST_OFFSET = Location.create(15, 33, 0) val playersInArea = mutableListOf() override fun defineAreaBorders(): Array { return TRAPS_ZONE } + + private fun zoneFrom3x3(center: Location): ZoneBorders { + val tiles = center.get3x3Tiles() + return ZoneBorders( + tiles.minOf { it.x }, + tiles.minOf { it.y }, + tiles.maxOf { it.x }, + tiles.maxOf { it.y }, + center.z + ) + } + override fun areaEnter(entity: Entity) { if (PENANCE_RUNNER_IDS.contains(entity.id)) { - killRunner(entity) - updateTrap(entity.location) - sendMessageArea() + tryTriggerTrap(entity) } val player = entity as? Player ?: return @@ -58,37 +76,75 @@ class DefenderTrap : MapArea { playersInArea.remove(player) } + fun tryTriggerTrap(entity: Entity): Boolean { + if (DeathTask.isDead(entity)) { + return false + } + + val session = getBASession(entity) ?: return false + val trapLocation = trapLocationFor(session, entity.location) ?: return false + val scenery = getScenery(trapLocation) ?: return false + if (scenery.id != Scenery.RUNNER_TRAP2_20135 && scenery.id != Scenery.RUNNER_TRAP1_20230) { + return false + } + + val bait = goodTrapBait(session, trapLocation) ?: return false + session.destroyGroundItem(bait) + entity.sendChat(GOOD_EAT) + killRunner(entity) + updateTrap(scenery, trapLocation) + session.broadcastToRole(BarbRole.DEFENDER, "A Penance Runner broke a trap to the ${trapDirectionFor(session, trapLocation)}!") + sendMessageArea() + return true + } + fun killRunner(entity: Entity){ entity.sendChat(TRAP_HIT) entity.startDeath(entity) - val thistrap = Location.create(1901, 5474, 0) - val scenery = getScenery(thistrap) - //animateScenery(scenery!!, 5076)//5076 - } //step on to trap area, if good food "chomp chomp" stay in location //set trap off - fun updateTrap(location: Location) { - var thistrap = Location.create(1901, 5474, 0) - val scenery = getScenery(thistrap) - animateScenery(scenery!!, 5076)//5076 + fun updateTrap(scenery: core.game.node.scenery.Scenery, trapLocation: Location) { + val nextTrap = when (scenery.id) { + Scenery.RUNNER_TRAP2_20135 -> Scenery.RUNNER_TRAP1_20230 + Scenery.RUNNER_TRAP1_20230 -> Scenery.BROKEN_TRAP0_20231 + else -> return + } + + animateScenery(scenery, 5076)//5076 GameWorld.Pulser.submit(object : Pulse(3, scenery) { override fun pulse(): Boolean { - replaceScenery(scenery,Scenery.RUNNER_TRAP1_20230,-1,thistrap) + replaceScenery(scenery, nextTrap, -1, trapLocation) return true } }) + } - //replaceScenery(getScenery(thistrap)!!,Scenery.RUNNER_TRAP1_20230,-1,thistrap) - if (TRAPS.contains(location)){ - // replaceScenery(getScenery(location)!!,Scenery.RUNNER_TRAP1_20230,40,location) - + private fun goodTrapBait(session: BarbassaultSession, trapLocation: Location): BAGroundSpawn? { + val trapTiles = trapLocation.get3x3Tiles() + return session.BAgroundItems.firstOrNull { + it.isActive && + !it.isRemoved && + it.id in LureItems && + it.flag == true && + trapTiles.contains(it.location) } } + private fun trapLocationFor(session: BarbassaultSession, location: Location): Location? { + return listOf( + session.base.transform(TRAP_EAST_OFFSET), + session.base.transform(TRAP_WEST_OFFSET) + ).firstOrNull { trapLocation -> trapLocation.get3x3Tiles().contains(location) } + } + + private fun trapDirectionFor(session: BarbassaultSession, trapLocation: Location): String { + return if (trapLocation == session.base.transform(TRAP_EAST_OFFSET)) "east" else "west" + } + fun sendMessageArea(){ playersInArea.forEach { player -> diff --git a/Server/src/main/content/minigame/barbassault/bots/BABotContext.kt b/Server/src/main/content/minigame/barbassault/bots/BABotContext.kt index 25e67e80c..0e3a18814 100644 --- a/Server/src/main/content/minigame/barbassault/bots/BABotContext.kt +++ b/Server/src/main/content/minigame/barbassault/bots/BABotContext.kt @@ -150,7 +150,66 @@ class BABotContext( val bot: Player,val api: ScriptAPI ) { "Get szued", "I've seen better defense from a broken gate", "Do you even see the runners?", - "My grandma can do better then that!" + "My grandma can do better then that!", + + "Runner escaped. Again.", + "Nice lure, shame it did nothing.", + "Did you place the food in Lumbridge?", + "The runners thank you for your service.", + "Wrong food, wrong place, classic.", + "You had one job.", + "The runners are speedrunning because of you.", + "I've seen level 5s defend better.", + "Did you forget to pick a call?", + "The runners are literally laughing at you.", + "Blink twice if you're AFK.", + "That runner just waved as it passed.", + "Maybe try feeding them the right bait?", + "You're defending their right to escape.", + "At this rate we'll finish next week.", + "The healer is doing your job too.", + "Even the collector is judging you.", + "Attacker called. Wants their role back.", + "No wonder nobody picks Defender.", + "This is why Defender is always last.", + "You make runners look smart.", + "The trap isn't decorative, you know.", + "Another runner escaped. Impressive.", + "The runners have achieved freedom.", + "I think the runners own the arena now.", + "Outstanding performance. For the runners.", + "The queen will hatch before you finish.", + "Did you learn Defender from YouTube shorts?", + "You lure like a drunk goblin.", + "Food goes on the ground, not in your pocket.", + "The runners aren't supposed to reach the cave.", + "This wave is sponsored by missed runners.", + "Your lure path looks like modern art.", + "The runners are farming YOU for points.", + "Defender? More like Spectator.", + "I've seen bots defend better.", + "The horn gave a call. Did you miss it?", + "Wrong bait any% speedrun.", + "You're boosting the runners' confidence.", + "Defender is not a cosmetic role.", + "Every escaped runner adds 5 minutes.", + "The runners have filed for citizenship.", + "You couldn't defend a sandwich from seagulls.", + "The cave entrance misses you.", + "Maybe the runners are the defenders now.", + "The runners are following YOU.", + "I can hear the healers crying.", + "This is why quick-starts fail.", + "The runner path is not a suggestion.", + "Congratulations, you've unlocked free-range runners.", + "One more escape and they get a pension.", + "Your trap placement scares nobody.", + "Did the runners bribe you?", + "The runners are playing on easy mode.", + "You're the reason Defender guides exist.", + "At least you're consistently bad.", + "The runners have stopped respecting you.", + "Even the penance know you're lost." ) api.sendChat(defenderInsults.random()) defenderInsultNextTick = tick + (8..20).random() From 479fbf95637e5b51d75861b3e21bfadf9f8234b9 Mon Sep 17 00:00:00 2001 From: Tooze Date: Tue, 9 Jun 2026 21:56:57 -0400 Subject: [PATCH 118/123] Master npc_configs.json --- Server/data/configs/npc_configs.json | 173876 ++++++++++++------------ 1 file changed, 86819 insertions(+), 87057 deletions(-) diff --git a/Server/data/configs/npc_configs.json b/Server/data/configs/npc_configs.json index 1e1d8d8e3..56b44322e 100644 --- a/Server/data/configs/npc_configs.json +++ b/Server/data/configs/npc_configs.json @@ -1,88280 +1,88042 @@ [ { - "examine": "Servant of the Duke of Lumbridge.", - "melee_animation": "422", - "range_animation": "422", - "attack_speed": "4", - "magic_level": "22", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Hans", - "defence_level": "14", - "safespot": "0", - "lifepoints": "12", - "strength_level": "17", "id": "0", - "range_level": "1", - "attack_level": "17" - }, - { - "examine": "One of Gielinor's many citizens.", + "name": "Hans", + "examine": "Servant of the Duke of Lumbridge.", + "attack_level": "17", + "attack_speed": "4", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "14", + "lifepoints": "12", + "magic_animation": "422", + "magic_level": "22", "melee_animation": "422", "range_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "magic_level": "6", - "respawn_delay": "18", - "defence_animation": "404", - "weakness": "9", - "slayer_exp": "0", - "magic_animation": "422", - "death_animation": "9055", - "name": "Man", - "defence_level": "5", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", + "range_level": "1", + "safespot": "0", + "strength_level": "17" + }, + { "id": "1", - "clue_level": "0", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "404", - "weakness": "9", - "magic_animation": "422", - "death_animation": "9055", "name": "Man", - "defence_level": "3", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2", - "clue_level": "0", - "range_level": "1", - "attack_level": "3" - }, - { "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "422", + "attack_level": "5", + "attack_speed": "4", + "clue_level": "0", "combat_audio": "511,513,512", - "attack_speed": "4", - "defence_animation": "404", - "weakness": "9", - "slayer_exp": "0", - "magic_animation": "422", "death_animation": "9055", - "name": "Man", - "defence_level": "3", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3", - "clue_level": "0", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,506,505", - "attack_speed": "4", "defence_animation": "404", - "weakness": "9", - "magic_animation": "422", - "death_animation": "9055", - "name": "Woman", - "defence_level": "3", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4", - "clue_level": "0", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,506,505", - "attack_speed": "4", - "defence_animation": "404", - "weakness": "9", - "magic_animation": "422", - "death_animation": "9055", - "name": "Woman", - "defence_level": "3", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5", - "clue_level": "0", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,506,505", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "404", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Woman", - "defence_level": "3", - "safespot": null, - "lifepoints": "4", - "strength_level": "1", - "id": "6", - "clue_level": "0", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "He grows the crops in this area.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "404", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Farmer", "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "7", + "lifepoints": "10", + "magic_animation": "422", + "magic_level": "6", + "melee_animation": "422", + "range_animation": "422", "range_level": "1", - "attack_level": "5" + "respawn_delay": "18", + "safespot": null, + "slayer_exp": "0", + "strength_level": "2", + "weakness": "9" }, { - "examine": "Known for his light-fingered qualities.", + "id": "2", + "name": "Man", + "examine": "One of Gielinor's many citizens.", + "attack_level": "3", + "attack_speed": "4", + "clue_level": "0", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "3", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "3", + "name": "Man", + "examine": "One of Gielinor's many citizens.", + "attack_level": "3", + "attack_speed": "4", + "clue_level": "0", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "3", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "slayer_exp": "0", + "strength_level": "1", + "weakness": "9" + }, + { + "id": "4", + "name": "Woman", + "examine": "One of Gielinor's many citizens.", + "attack_level": "3", + "attack_speed": "4", + "clue_level": "0", + "combat_audio": "511,506,505", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "3", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "5", + "name": "Woman", + "examine": "One of Gielinor's many citizens.", + "attack_level": "3", + "attack_speed": "4", + "clue_level": "0", + "combat_audio": "511,506,505", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "3", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "6", + "name": "Woman", + "examine": "One of Gielinor's many citizens.", + "attack_level": "3", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "511,506,505", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "3", + "lifepoints": "4", + "magic_animation": "0", "melee_animation": "422", "range_animation": "0", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Thief", - "defence_level": "10", - "safespot": null, - "lifepoints": "14", - "strength_level": "10", - "id": "8", "range_level": "1", - "attack_level": "10" + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "9" }, { + "id": "7", + "name": "Farmer", + "examine": "He grows the crops in this area.", + "attack_level": "5", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "5", + "weakness": "9" + }, + { + "id": "8", + "name": "Thief", + "examine": "Known for his light-fingered qualities.", + "attack_level": "10", + "attack_speed": "4", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "14", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "10", + "weakness": "9" + }, + { + "id": "9", + "name": "Guard", "examine": "He tries to keep order around here.", + "attack_level": "13", + "attack_speed": "4", + "clue_level": "1", + "combat_audio": "2549,1979,512", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", "melee_animation": "400", "range_animation": "0", - "combat_audio": "2549,1979,512", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "404", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "13", - "id": "9", - "clue_level": "1", "range_level": "1", - "attack_level": "13" + "respawn_delay": "60", + "safespot": null, + "strength_level": "13", + "weakness": "9" }, { + "id": "10", + "name": "Schoolgirl", "examine": "She looks happy.", + "attack_level": "1", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "1142", - "defence_animation": "285", - "magic_animation": "0", - "death_animation": "287", - "name": "Schoolgirl", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "10", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "11", + "name": "Tramp", "examine": "A man down on his luck.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tramp", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "11", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { - "examine": "Not very civilised looking.", - "name": "Barbarian", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", "id": "12", + "name": "Barbarian", + "examine": "Not very civilised looking.", + "attack_level": "1", "clue_level": "0", + "defence_level": "1", + "lifepoints": "10", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { - "examine": "Slightly magical.", - "start_gfx": "2728", - "combat_style": "2", - "melee_animation": "2791", - "range_animation": "711", - "combat_audio": "511,513,512", - "magic_level": "21", - "respawn_delay": "12", - "end_gfx": "2737", - "defence_animation": "404", - "weakness": "3", - "slayer_exp": "0", - "magic_animation": "711", - "death_animation": "9055", - "name": "Wizard", - "defence_level": "12", - "safespot": null, - "lifepoints": "14", - "strength_level": "1", "id": "13", + "name": "Wizard", + "examine": "Slightly magical.", + "attack_level": "1", "bonuses": "23,7,8,2,1,8,12,0,0,0,0,0,0,0,0", - "range_level": "1", - "projectile": "2729", - "attack_level": "1" - }, - { - "examine": "Loves nature.", "combat_audio": "511,513,512", - "range_animation": "0", - "melee_animation": "422", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", + "combat_style": "2", + "death_animation": "9055", "defence_animation": "404", + "defence_level": "12", + "end_gfx": "2737", + "lifepoints": "14", "magic_animation": "711", - "name": "Druid", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "14", + "magic_level": "21", + "melee_animation": "2791", + "projectile": "2729", + "range_animation": "711", "range_level": "1", - "attack_level": "28" + "respawn_delay": "12", + "safespot": null, + "slayer_exp": "0", + "start_gfx": "2728", + "strength_level": "1", + "weakness": "3" }, { + "id": "14", + "name": "Druid", + "examine": "Loves nature.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,513,512", + "defence_animation": "404", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28" + }, + { + "id": "15", + "name": "Warrior woman", "examine": "Not very fashion conscious.", + "attack_level": "22", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "20", + "magic_animation": "0", "melee_animation": "386", "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Warrior woman", - "defence_level": "22", - "safespot": null, - "lifepoints": "20", - "strength_level": "22", - "id": "15", "range_level": "1", - "attack_level": "22" + "safespot": null, + "strength_level": "22", + "weakness": "7" }, { + "id": "16", + "name": "Man", "examine": "One of the citizens of Al Kharid.", + "attack_level": "3", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "3", + "lifepoints": "4", + "magic_animation": "0", "melee_animation": "422", "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Man", - "defence_level": "3", - "safespot": null, - "lifepoints": "4", - "strength_level": "3", - "id": "16", - "clue_level": "0", "range_level": "1", - "attack_level": "3" + "respawn_delay": "60", + "safespot": null, + "strength_level": "3", + "weakness": "7" }, { + "id": "17", + "name": "Schoolgirl" + }, + { + "id": "18", + "name": "Al-Kharid warrior", "examine": "Part of Al-Kharid's elite fighting force.", + "attack_level": "7", + "attack_speed": "4", + "bonuses": "10,10,10,0,0,12,15,10,-1,12,0,9,0,0,0", + "clue_level": "0", + "combat_audio": "2500,1976,512", + "death_animation": "836", + "defence_animation": "387", + "defence_level": "4", + "lifepoints": "19", + "magic_animation": "390", "melee_animation": "390", "range_animation": "390", - "combat_audio": "2500,1976,512", - "attack_speed": "4", - "respawn_delay": "25", - "defence_animation": "387", - "weakness": "7", - "magic_animation": "390", - "death_animation": "836", - "name": "Al-Kharid warrior", - "defence_level": "4", - "safespot": null, - "lifepoints": "19", - "strength_level": "5", - "id": "18", - "clue_level": "0", - "bonuses": "10,10,10,0,0,12,15,10,-1,12,0,9,0,0,0", "range_level": "1", - "attack_level": "7" + "respawn_delay": "25", + "safespot": null, + "strength_level": "5", + "weakness": "7" }, { + "id": "19", + "name": "White Knight", "examine": "Shiny armour!", + "attack_level": "25", + "attack_speed": "8", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", "melee_animation": "7042", "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "8", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "White Knight", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "19", "range_level": "1", - "attack_level": "25" + "respawn_delay": "60", + "safespot": null, + "strength_level": "25", + "weakness": "7" }, { - "examine": "A holy warrior.", - "melee_animation": "390", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Paladin", - "defence_level": "54", - "safespot": null, - "lifepoints": "66", - "strength_level": "54", "id": "20", - "range_level": "1", - "attack_level": "54" - }, - { - "examine": "Heroic!", - "melee_animation": "390", - "range_animation": "0", + "name": "Paladin", + "examine": "A holy warrior.", + "attack_level": "54", "attack_speed": "5", - "respawn_delay": "60", + "combat_audio": "511,513,512", + "death_animation": "836", "defence_animation": "425", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Hero", "defence_level": "54", + "lifepoints": "66", + "melee_animation": "390", + "range_level": "1", + "respawn_delay": "60", "safespot": null, - "lifepoints": "82", - "strength_level": "55", + "strength_level": "54" + }, + { "id": "21", + "name": "Hero", + "examine": "Heroic!", + "attack_level": "54", + "attack_speed": "5", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "54", + "lifepoints": "82", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", "range_level": "1", - "attack_level": "54" + "respawn_delay": "60", + "safespot": null, + "strength_level": "55", + "weakness": "7" }, { - "examine": "They love the forests.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "18", - "defence_animation": "404", - "magic_animation": "0", - "death_animation": "9055", - "name": "Forester", - "defence_level": "8", - "safespot": null, - "lifepoints": "17", - "strength_level": "13", "id": "22", - "range_level": "1", - "attack_level": "14" - }, - { - "examine": "A member of Ardougne's militia.", - "melee_animation": "390", - "range_animation": "0", + "name": "Forester", + "examine": "They love the forests.", + "attack_level": "14", + "attack_speed": "4", "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Knight of Ardougne", - "defence_level": "31", - "safespot": null, - "lifepoints": "52", - "strength_level": "40", - "id": "23", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Man", - "defence_level": "3", - "safespot": null, - "lifepoints": "4", - "strength_level": "3", - "id": "24", - "clue_level": "0", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,506,505", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Woman", - "defence_level": "3", - "safespot": null, - "lifepoints": "4", - "strength_level": "3", - "id": "25", - "clue_level": "0", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "To protect and serve the populace of Ardougne.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Knight of Ardougne", - "defence_level": "31", - "safespot": null, - "lifepoints": "52", - "strength_level": "40", - "id": "26", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "Good with arrows.", - "start_gfx": "19", - "combat_style": "1", - "melee_animation": "426", - "range_animation": "426", - "respawn_delay": "12", - "defence_animation": "404", - "magic_animation": "426", "death_animation": "9055", - "name": "Archer", - "defence_level": "20", - "safespot": null, - "lifepoints": "50", - "strength_level": "20", - "id": "27", - "range_level": "40", - "projectile": "10", - "attack_level": "20" - }, - { - "examine": "Enjoys locking up animals in small pens.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", + "defence_animation": "404", + "defence_level": "8", + "lifepoints": "17", "magic_animation": "0", - "death_animation": "0", - "name": "Zoo keeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "28", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's a lumberjack, and he's ok.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Chuck", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "29", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Doesn't water down the beer too much.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Barman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "30", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A holy man.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Priest", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "31", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Keeps the peace... kind of.", - "melee_animation": "401", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "13", - "safespot": null, - "lifepoints": "22", - "strength_level": "18", - "id": "32", - "clue_level": "1", - "range_level": "1", - "attack_level": "17" - }, - { - "examine": "What a boring job he has.", - "name": "Door man", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "33", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Watches stuff. But who watches him?", "melee_animation": "422", "range_animation": "0", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Watchman", - "defence_level": "31", - "safespot": null, - "lifepoints": "22", - "strength_level": "31", - "id": "34", "range_level": "1", - "attack_level": "31" + "respawn_delay": "18", + "safespot": null, + "strength_level": "13" }, { - "examine": "A soldier of the town of Yanille.", + "id": "23", + "name": "Knight of Ardougne", + "examine": "A member of Ardougne's militia.", + "attack_level": "38", + "attack_speed": "5", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "31", + "lifepoints": "52", + "magic_animation": "0", "melee_animation": "390", "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", + "range_level": "1", "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", + "safespot": null, + "strength_level": "40", + "weakness": "7" + }, + { + "id": "24", + "name": "Man", + "examine": "One of Gielinor's many citizens.", + "attack_level": "3", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "511,513,512", "death_animation": "836", - "name": "Soldier", - "defence_level": "26", - "safespot": null, - "lifepoints": "22", - "strength_level": "25", - "id": "35", - "range_level": "1", - "attack_level": "26" - }, - { - "examine": "The head gardener.", - "melee_animation": "0", - "range_animation": "0", "defence_animation": "0", + "defence_level": "3", + "lifepoints": "4", "magic_animation": "0", - "death_animation": "0", - "name": "Wyson the gardener", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "36", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A bold knight famed for his travels.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sigbert the Adventurer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "37", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Builds ships for a living.", "melee_animation": "422", "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Shipyard worker", - "defence_level": "10", - "safespot": null, - "lifepoints": "10", - "strength_level": "10", - "id": "38", "range_level": "1", - "attack_level": "10" + "respawn_delay": "60", + "safespot": null, + "strength_level": "3", + "weakness": "9" }, { - "examine": "Builds ships for a living.", - "melee_animation": "401", + "id": "25", + "name": "Woman", + "examine": "One of Gielinor's many citizens.", + "attack_level": "3", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "511,506,505", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "3", + "lifepoints": "4", + "magic_animation": "0", + "melee_animation": "422", "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Shipyard worker", - "defence_level": "10", - "safespot": null, - "lifepoints": "10", - "strength_level": "10", - "id": "39", "range_level": "1", - "attack_level": "10" + "respawn_delay": "60", + "safespot": null, + "strength_level": "3", + "weakness": "9" }, { - "examine": "Let's not go skinny dipping eh?", + "id": "26", + "name": "Knight of Ardougne", + "examine": "To protect and serve the populace of Ardougne.", + "attack_level": "38", + "attack_speed": "5", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "31", + "lifepoints": "52", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "40", + "weakness": "7" + }, + { + "id": "27", + "name": "Archer", + "examine": "Good with arrows.", + "attack_level": "20", + "combat_style": "1", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "20", + "lifepoints": "50", + "magic_animation": "426", + "melee_animation": "426", + "projectile": "10", + "range_animation": "426", + "range_level": "40", + "respawn_delay": "12", + "safespot": null, + "start_gfx": "19", + "strength_level": "20" + }, + { + "id": "28", + "name": "Zoo keeper", + "examine": "Enjoys locking up animals in small pens.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shark", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "40", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "29", + "name": "Chuck", + "examine": "He's a lumberjack, and he's ok.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "30", + "name": "Barman", + "examine": "Doesn't water down the beer too much.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "31", + "name": "Priest", + "examine": "A holy man.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "32", + "name": "Guard", + "examine": "Keeps the peace... kind of.", + "attack_level": "17", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "22", + "magic_animation": "0", + "melee_animation": "401", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "18", + "weakness": "9" + }, + { + "id": "33", + "name": "Door man", + "examine": "What a boring job he has.", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "34", + "name": "Watchman", + "examine": "Watches stuff. But who watches him?", + "attack_level": "31", + "attack_speed": "6", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "31", + "lifepoints": "22", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "31", + "weakness": "7" + }, + { + "id": "35", + "name": "Soldier", + "examine": "A soldier of the town of Yanille.", + "attack_level": "26", + "attack_speed": "5", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "26", + "lifepoints": "22", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "25", + "weakness": "8" + }, + { + "id": "36", + "name": "Wyson the gardener", + "examine": "The head gardener.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "37", + "name": "Sigbert the Adventurer", + "examine": "A bold knight famed for his travels.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "38", + "name": "Shipyard worker", + "examine": "Builds ships for a living.", + "attack_level": "10", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "10", + "weakness": "6" + }, + { + "id": "39", + "name": "Shipyard worker", + "examine": "Builds ships for a living.", + "attack_level": "10", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "401", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "10", + "weakness": "6" + }, + { + "id": "40", + "name": "Shark", + "examine": "Let's not go skinny dipping eh?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "41", + "name": "Chicken", "examine": "Yep. Definitely a chicken.", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "355,357,356", + "death_animation": "5389", + "defence_animation": "5388", + "defence_level": "1", + "lifepoints": "3", + "magic_animation": "5387", "melee_animation": "5387", "range_animation": "5387", - "combat_audio": "355,357,356", - "attack_speed": "6", + "range_level": "1", "respawn_delay": "18", - "defence_animation": "5388", - "weakness": "9", - "magic_animation": "5387", - "death_animation": "5389", - "name": "Chicken", - "defence_level": "1", "safespot": null, - "lifepoints": "3", "strength_level": "1", - "id": "41", - "range_level": "1", - "attack_level": "1" + "weakness": "9" }, { - "examine": "Freshly sheared.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sheep", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", "id": "42", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "White and fluffy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", "name": "Sheep", + "examine": "Freshly sheared.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", "defence_level": "1", - "safespot": null, "lifepoints": "10", - "strength_level": "1", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { "id": "43", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He can look after my money.", + "name": "Sheep", + "examine": "White and fluffy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { "id": "44", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She can look after my money.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "45", + "examine": "He can look after my money.", "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Quackers.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "3468", - "name": "Duck", - "defence_level": "1", - "water_npc": "true", - "safespot": null, - "lifepoints": "1", - "strength_level": "1", - "id": "46", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "45", + "name": "Banker", + "examine": "She can look after my money.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "46", + "name": "Duck", + "examine": "Quackers.", + "attack_level": "1", + "death_animation": "3468", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "1", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "water_npc": "true", + "weakness": "8" + }, + { + "id": "47", + "name": "Rat", "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "-47,-47,-47,0,0,-42,-42,-42,-42,-42,-42,-53,0,0,0", + "combat_audio": "3102,3104,3103", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "2", + "magic_animation": "2705", + "magic_level": "1", "melee_animation": "2705", "range_animation": "2705", - "combat_audio": "3102,3104,3103", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "3", - "defence_animation": "2706", - "slayer_exp": "2", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "2", - "strength_level": "1", - "id": "47", - "bonuses": "-47,-47,-47,0,0,-42,-42,-42,-42,-42,-42,-53,0,0,0", "range_level": "1", - "attack_level": "1" + "respawn_delay": "3", + "safespot": null, + "slayer_exp": "2", + "strength_level": "1" }, { + "id": "48", + "name": "Oomlie bird", "examine": "A jungle version of the chicken, but more vicious.", + "attack_level": "40", + "attack_speed": "4", + "death_animation": "5389", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "40", + "magic_animation": "0", "melee_animation": "5387", "range_animation": "0", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5389", - "name": "Oomlie bird", - "defence_level": "40", - "safespot": null, - "lifepoints": "40", - "strength_level": "40", - "id": "48", "range_level": "1", - "attack_level": "40" + "respawn_delay": "60", + "safespot": null, + "strength_level": "40", + "weakness": "9" }, { + "id": "49", + "name": "Hellhound", "examine": "Hello, nice doggy...", + "aggressive": "true", + "attack_level": "105", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "3717,3719,3718", + "death_animation": "6564", + "defence_animation": "6563", + "defence_level": "102", + "lifepoints": "116", + "magic_animation": "6562", "melee_animation": "6562", "range_animation": "6562", - "combat_audio": "3717,3719,3718", - "attack_speed": "4", - "respawn_delay": "50", - "defence_animation": "6563", - "weakness": "1", - "slayer_exp": "116", - "magic_animation": "6562", - "death_animation": "6564", - "name": "Hellhound", - "defence_level": "102", - "safespot": null, - "lifepoints": "116", - "strength_level": "104", - "id": "49", - "aggressive": "true", - "clue_level": "2", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "range_level": "1", - "attack_level": "105" + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "116", + "strength_level": "104", + "weakness": "1" }, { - "agg_radius": "64", - "examine": "The biggest, meanest dragon around.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "magic_level": "240", - "respawn_delay": "50", - "defence_animation": "89", - "weakness": "4", - "slayer_exp": "258", - "magic_animation": "80", - "death_animation": "92", - "name": "King Black Dragon", - "defence_level": "240", - "safespot": null, - "lifepoints": "240", - "strength_level": "240", "id": "50", + "name": "King Black Dragon", + "examine": "The biggest, meanest dragon around.", + "agg_radius": "64", "aggressive": "true", + "attack_level": "240", "bonuses": "0,0,0,0,0,70,90,90,80,70,0,0,0,0,0", "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "240", + "lifepoints": "240", + "magic_animation": "80", + "magic_level": "240", + "melee_animation": "80", + "range_animation": "80", "range_level": "1", - "attack_level": "240" + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "258", + "strength_level": "240", + "weakness": "4" }, { - "examine": "Young but still dangerous.", - "combat_audio": "407,405,406", - "magic_level": "116", - "respawn_delay": "25", - "weakness": "0", - "name": "Baby dragon", - "defence_level": "112", - "safespot": null, - "lifepoints": "160", - "strength_level": "103", "id": "51", - "aggressive": "true", - "bonuses": "124,130,137,184,176,128,168,145,104,54,0,0,0,0,0", - "range_level": "80", - "attack_level": "102" - }, - { + "name": "Baby dragon", "examine": "Young but still dangerous.", - "combat_audio": "405,407,406", - "melee_animation": "25", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "26", - "weakness": "3", - "slayer_exp": "50", - "magic_animation": "25", - "death_animation": "28", - "name": "Baby blue dragon", - "defence_level": "40", + "aggressive": "true", + "attack_level": "102", + "bonuses": "124,130,137,184,176,128,168,145,104,54,0,0,0,0,0", + "combat_audio": "407,405,406", + "defence_level": "112", + "lifepoints": "160", + "magic_level": "116", + "range_level": "80", + "respawn_delay": "25", "safespot": null, - "lifepoints": "50", - "strength_level": "40", + "strength_level": "103", + "weakness": "0" + }, + { "id": "52", + "name": "Baby blue dragon", + "examine": "Young but still dangerous.", "aggressive": "true", + "attack_level": "40", + "attack_speed": "4", "bonuses": "0,0,0,0,0,30,50,50,40,30,0,0,0,0,0", + "combat_audio": "405,407,406", + "death_animation": "28", + "defence_animation": "26", + "defence_level": "40", + "lifepoints": "50", + "magic_animation": "25", + "magic_level": "1", + "melee_animation": "25", "range_level": "1", - "attack_level": "40" + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "50", + "strength_level": "40", + "weakness": "3" }, { - "examine": "A big powerful dragon.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "143", - "magic_animation": "80", - "death_animation": "92", - "name": "Red dragon", - "defence_level": "130", - "safespot": null, - "lifepoints": "140", - "strength_level": "130", "id": "53", + "name": "Red dragon", + "examine": "A big powerful dragon.", "aggressive": "true", + "attack_level": "130", + "attack_speed": "4", "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", "clue_level": "2", - "range_level": "1", - "attack_level": "130" - }, - { - "examine": "A fierce dragon with black scales!", - "melee_animation": "80", - "range_animation": "80", "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "100", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "200", - "magic_animation": "80", "death_animation": "92", - "name": "Black dragon", - "defence_level": "200", - "safespot": null, - "lifepoints": "190", - "strength_level": "200", - "id": "54", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "200" - }, - { - "examine": "A mother dragon.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", + "defence_animation": "89", + "defence_level": "130", + "lifepoints": "140", + "magic_animation": "80", "magic_level": "1", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "108", - "magic_animation": "80", - "death_animation": "92", - "name": "Blue dragon", - "defence_level": "95", "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "55", + "slayer_exp": "143", + "strength_level": "130", + "weakness": "3" + }, + { + "id": "54", + "name": "Black dragon", + "examine": "A fierce dragon with black scales!", "aggressive": "true", + "attack_level": "200", + "attack_speed": "4", "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "200", + "lifepoints": "190", + "magic_animation": "80", + "magic_level": "100", + "melee_animation": "80", + "range_animation": "80", "range_level": "1", - "attack_level": "95" + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "200", + "strength_level": "200", + "weakness": "3" }, { - "examine": "A wood nymph.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dryad", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "56", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A delicate creature from this strange realm.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fairy", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "57", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Is it a spider or is it a shadow?", - "melee_animation": "5327", - "range_animation": "0", - "combat_audio": "537,539,538", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "slayer_exp": "55", - "magic_animation": "0", - "death_animation": "5329", - "name": "Shadow spider", - "defence_level": "44", - "safespot": null, - "lifepoints": "55", - "strength_level": "42", - "id": "58", + "id": "55", + "name": "Blue dragon", + "examine": "A mother dragon.", "aggressive": "true", + "attack_level": "95", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "95", + "lifepoints": "105", + "magic_animation": "80", + "magic_level": "1", + "melee_animation": "80", + "range_animation": "80", "range_level": "1", - "attack_level": "44" + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "108", + "strength_level": "95", + "weakness": "3" }, { - "examine": "I think this spider has been genetically modified.", + "id": "56", + "name": "Dryad", + "examine": "A wood nymph.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "57", + "name": "Fairy", + "examine": "A delicate creature from this strange realm.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "58", + "name": "Shadow spider", + "examine": "Is it a spider or is it a shadow?", + "aggressive": "true", + "attack_level": "44", + "attack_speed": "4", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "0", + "defence_level": "44", + "lifepoints": "55", + "magic_animation": "0", "melee_animation": "5327", "range_animation": "0", - "combat_audio": "537,539,538", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "slayer_exp": "5", - "magic_animation": "0", - "death_animation": "5329", - "name": "Giant spider", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "59", - "aggressive": "false", "range_level": "1", - "attack_level": "1" + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "55", + "strength_level": "42", + "weakness": "2" }, { + "id": "59", + "name": "Giant spider", "examine": "I think this spider has been genetically modified.", + "aggressive": "false", + "attack_level": "1", + "attack_speed": "4", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "0", + "melee_animation": "5327", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "5", + "strength_level": "1", + "weakness": "2" + }, + { + "id": "60", + "name": "Giant spider", + "examine": "I think this spider has been genetically modified.", + "aggressive": "true", + "attack_level": "20", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "5328", + "defence_level": "21", + "lifepoints": "32", + "magic_animation": "5327", "melee_animation": "5327", "range_animation": "5327", - "combat_audio": "537,539,538", - "defence_animation": "5328", - "weakness": "2", - "slayer_exp": "33", - "magic_animation": "5327", - "death_animation": "5329", - "name": "Giant spider", - "defence_level": "21", - "safespot": null, - "lifepoints": "32", - "strength_level": "24", - "id": "60", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "range_level": "1", - "attack_level": "20" + "safespot": null, + "slayer_exp": "33", + "strength_level": "24", + "weakness": "2" }, { + "id": "61", + "name": "Spider", "examine": "Incey wincey.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "6251", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "2", + "magic_animation": "0", "melee_animation": "6249", "range_animation": "0", + "range_level": "1", "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", + "safespot": null, "slayer_exp": "2", - "magic_animation": "0", - "death_animation": "6251", - "name": "Spider", - "defence_level": "1", - "safespot": null, - "lifepoints": "2", "strength_level": "1", - "id": "61", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" + "weakness": "2" }, { - "examine": "A barely visible deadly spider.", - "melee_animation": "5327", - "range_animation": "5327", - "combat_audio": "537,539,538", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "25", - "defence_animation": "5328", - "weakness": "2", - "slayer_exp": "50", - "magic_animation": "5327", - "death_animation": "5329", - "name": "Jungle spider", - "defence_level": "35", - "poison_immune": "false", - "safespot": null, - "lifepoints": "50", - "strength_level": "37", "id": "62", + "name": "Jungle spider", + "examine": "A barely visible deadly spider.", "aggressive": "true", + "attack_level": "35", + "attack_speed": "4", "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "5328", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "5327", + "magic_level": "1", + "melee_animation": "5327", + "poison_immune": "false", + "range_animation": "5327", "range_level": "1", - "attack_level": "35" + "respawn_delay": "25", + "safespot": null, + "slayer_exp": "50", + "strength_level": "37", + "weakness": "2" }, { + "id": "63", + "name": "Deadly red spider", "examine": "I think this spider has been genetically modified.", + "attack_level": "30", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,15,16,7,12,16,0,0,0,0", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "5328", + "defence_level": "30", + "lifepoints": "35", + "magic_animation": "5327", + "magic_level": "1", "melee_animation": "5327", "range_animation": "5327", - "combat_audio": "537,539,538", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "5328", - "weakness": "2", - "slayer_exp": "35", - "magic_animation": "5327", - "death_animation": "5329", - "name": "Deadly red spider", - "defence_level": "30", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "63", - "bonuses": "0,0,0,0,0,0,15,16,7,12,16,0,0,0,0", "range_level": "1", - "attack_level": "30" + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "35", + "strength_level": "25", + "weakness": "2" }, { + "id": "64", + "name": "Ice spider", "examine": "I think this spider has been genetically modified.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,20,17,12,13,13,0,0,0,0", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "65", + "magic_animation": "0", "melee_animation": "5327", "range_animation": "0", - "combat_audio": "537,539,538", - "attack_speed": "4", + "range_level": "1", "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", + "safespot": null, "slayer_exp": "65", - "magic_animation": "0", - "death_animation": "5329", - "name": "Ice spider", - "defence_level": "43", - "safespot": null, - "lifepoints": "65", "strength_level": "55", - "id": "64", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,20,17,12,13,13,0,0,0,0", - "range_level": "1", - "attack_level": "50" + "weakness": "2" }, { - "examine": "A funny little man normally associated with rainbows.", - "melee_animation": "422", - "range_animation": "422", - "magic_level": "1", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Leprechaun", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", "id": "65", + "name": "Leprechaun", + "examine": "A funny little man normally associated with rainbows.", + "attack_level": "1", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "magic_level": "1", + "melee_animation": "422", + "range_animation": "422", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { - "examine": "Like a mini man!", - "melee_animation": "190", - "range_animation": "190", - "magic_level": "1", - "defence_animation": "193", - "magic_animation": "422", - "death_animation": "196", - "name": "Gnome", - "defence_level": "1", - "safespot": null, - "lifepoints": "3", - "strength_level": "1", "id": "66", - "range_level": "1", - "attack_level": "1" - }, - { + "name": "Gnome", "examine": "Like a mini man!", + "attack_level": "1", + "death_animation": "196", + "defence_animation": "193", + "defence_level": "1", + "lifepoints": "3", + "magic_animation": "422", + "magic_level": "1", "melee_animation": "190", "range_animation": "190", - "magic_level": "1", - "defence_animation": "193", - "magic_animation": "422", - "death_animation": "196", - "name": "Gnome", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "3", - "strength_level": "1", + "strength_level": "1" + }, + { "id": "67", - "range_level": "1", - "attack_level": "1" - }, - { + "name": "Gnome", "examine": "Like a mini man!", + "attack_level": "1", + "death_animation": "196", + "defence_animation": "193", + "defence_level": "1", + "lifepoints": "3", + "magic_animation": "422", + "magic_level": "1", "melee_animation": "190", "range_animation": "190", - "magic_level": "1", - "defence_animation": "193", - "magic_animation": "422", - "death_animation": "196", - "name": "Gnome", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "3", - "strength_level": "1", + "strength_level": "1" + }, + { "id": "68", + "name": "Gnome", + "examine": "Like a mini man!", + "attack_level": "1", + "death_animation": "196", + "defence_animation": "193", + "defence_level": "1", + "lifepoints": "3", + "magic_animation": "422", + "magic_level": "1", + "melee_animation": "190", + "range_animation": "190", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { - "examine": "A scaly reptilian creature.", - "melee_animation": "422", - "range_animation": "422", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Lizard man", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", "id": "69", + "name": "Lizard man", + "examine": "A scaly reptilian creature.", "aggressive": "true", + "attack_level": "1", + "attack_speed": "4", "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A hideous malformed elf.", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "magic_level": "1", "melee_animation": "422", "range_animation": "422", - "magic_level": "1", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Orc", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { + "id": "70", + "name": "Orc" + }, + { "id": "71", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A hideously deformed creature.", + "name": "Orc", + "examine": "A hideous malformed elf.", + "attack_level": "1", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "magic_level": "1", "melee_animation": "422", "range_animation": "422", - "magic_level": "1", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Troll", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { "id": "72", + "name": "Troll", + "examine": "A hideously deformed creature.", + "attack_level": "1", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "magic_level": "1", + "melee_animation": "422", + "range_animation": "422", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { - "examine": "Dead man walking.", - "melee_animation": "5567", - "combat_audio": "931,923,922", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "5568", - "slayer_exp": "22", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "10", - "safespot": null, - "lifepoints": "22", - "strength_level": "9", "id": "73", - "aggressive": "true", - "range_level": "1", - "attack_level": "8" - }, - { - "examine": "Dead woman walking.", - "melee_animation": "5578", - "range_animation": "5578", - "combat_audio": "931,923,922", - "attack_speed": "4", - "respawn_delay": "30", - "defence_animation": "5579", - "slayer_exp": "24", - "magic_animation": "5578", - "death_animation": "5580", "name": "Zombie", + "examine": "Dead man walking.", + "aggressive": "true", + "attack_level": "8", + "attack_speed": "4", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5568", "defence_level": "10", - "safespot": null, - "lifepoints": "24", - "strength_level": "13", - "id": "74", - "aggressive": "true", + "lifepoints": "22", + "melee_animation": "5567", "range_level": "1", - "attack_level": "13" + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "22", + "strength_level": "9" }, { - "examine": "The walking dead.", + "id": "74", + "name": "Zombie", + "examine": "Dead woman walking.", + "aggressive": "true", + "attack_level": "13", + "attack_speed": "4", + "combat_audio": "931,923,922", + "death_animation": "5580", + "defence_animation": "5579", + "defence_level": "10", + "lifepoints": "24", + "magic_animation": "5578", "melee_animation": "5578", "range_animation": "5578", - "combat_audio": "931,923,922", - "attack_speed": "4", + "range_level": "1", "respawn_delay": "30", - "defence_animation": "5579", - "slayer_exp": "30", - "magic_animation": "5578", - "death_animation": "5580", - "name": "Zombie", - "defence_level": "16", "safespot": null, - "lifepoints": "30", - "strength_level": "21", + "slayer_exp": "24", + "strength_level": "13" + }, + { "id": "75", - "aggressive": "true", - "range_level": "1", - "attack_level": "19" - }, - { - "examine": "The walking dead.", - "melee_animation": "5571", - "combat_audio": "931,923,922", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "5574", - "slayer_exp": "30", - "death_animation": "5575", "name": "Zombie", - "defence_level": "16", - "safespot": null, - "lifepoints": "30", - "strength_level": "21", - "id": "76", + "examine": "The walking dead.", "aggressive": "true", + "attack_level": "19", + "attack_speed": "4", + "combat_audio": "931,923,922", + "death_animation": "5580", + "defence_animation": "5579", + "defence_level": "16", + "lifepoints": "30", + "magic_animation": "5578", + "melee_animation": "5578", + "range_animation": "5578", "range_level": "1", - "attack_level": "19" + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "21" }, { + "id": "76", + "name": "Zombie", + "examine": "The walking dead.", + "aggressive": "true", + "attack_level": "19", + "attack_speed": "4", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "16", + "lifepoints": "30", + "melee_animation": "5571", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "21" + }, + { + "id": "77", + "name": "Summoned Zombie", "examine": "The living dead.", + "attack_level": "8", + "attack_speed": "4", + "death_animation": "5569", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "22", + "magic_animation": "0", "melee_animation": "5568", "range_animation": "0", - "attack_speed": "4", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "22", - "magic_animation": "0", - "death_animation": "5569", - "name": "Summoned Zombie", - "defence_level": "10", - "safespot": null, - "lifepoints": "22", - "strength_level": "9", - "id": "77", "range_level": "1", - "attack_level": "8" + "safespot": null, + "slayer_exp": "22", + "strength_level": "9", + "weakness": "9" }, { + "id": "78", + "name": "Giant bat", "examine": "An annoying flappy thing.", + "aggressive": "true", + "attack_level": "22", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,10,10,12,10,8,0,0,0,0,0", + "combat_audio": "292,294,293", + "death_animation": "4917", + "defence_animation": "4916", + "defence_level": "22", + "lifepoints": "32", + "magic_animation": "4915", + "magic_level": "1", "melee_animation": "4915", "range_animation": "4915", - "combat_audio": "292,294,293", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "defence_animation": "4916", - "weakness": "4", - "slayer_exp": "32", - "magic_animation": "4915", - "death_animation": "4917", - "name": "Giant bat", - "defence_level": "22", - "safespot": null, - "lifepoints": "32", - "strength_level": "22", - "id": "78", - "aggressive": "true", - "bonuses": "0,0,0,0,0,10,10,12,10,8,0,0,0,0,0", "range_level": "1", - "attack_level": "22" + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "32", + "strength_level": "22", + "weakness": "4" }, { + "id": "79", + "name": "Death wing", "examine": "A shadowy, barely visible flying entity from some evil place.", + "aggressive": "true", + "attack_level": "70", + "attack_speed": "4", + "death_animation": "4917", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "80", + "magic_animation": "0", + "magic_level": "1", "melee_animation": "4915", "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "slayer_exp": "80", - "magic_animation": "0", - "death_animation": "4917", - "name": "Death wing", - "defence_level": "70", - "safespot": null, - "lifepoints": "80", - "strength_level": "70", - "id": "79", - "aggressive": "true", "range_level": "1", - "attack_level": "70" + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "80", + "strength_level": "70", + "weakness": "3" }, { + "id": "80", + "name": "Camel", "examine": "Oh, it's a camel.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Camel", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "80", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "81", + "name": "Cow", "examine": "Converts grass to beef.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "369,371,370", + "death_animation": "5851", + "defence_animation": "5850", + "defence_level": "1", + "lifepoints": "8", + "magic_animation": "5849", "melee_animation": "5849", "range_animation": "5849", - "combat_audio": "369,371,370", - "attack_speed": "5", - "defence_animation": "5850", - "weakness": "8", - "slayer_exp": "8", - "magic_animation": "5849", - "death_animation": "5851", - "name": "Cow", - "defence_level": "1", - "safespot": null, - "lifepoints": "8", - "strength_level": "1", - "id": "81", "range_level": "1", - "attack_level": "1" + "safespot": null, + "slayer_exp": "8", + "strength_level": "1", + "weakness": "8" }, { + "id": "82", + "name": "Lesser demon", "examine": "Lesser, but still pretty big.", + "aggressive": "true", + "attack_level": "68", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", + "combat_audio": "400,404,403", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "71", + "lifepoints": "79", + "magic_animation": "4630", + "magic_level": "1", "melee_animation": "4630", "range_animation": "4630", - "combat_audio": "400,404,403", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "79", - "magic_animation": "4630", - "death_animation": "67", - "name": "Lesser demon", - "defence_level": "71", - "safespot": null, - "lifepoints": "79", - "strength_level": "70", - "id": "82", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", "range_level": "1", - "attack_level": "68" + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "79", + "strength_level": "70", + "weakness": "4" }, { - "examine": "Big, red, and incredibly evil.", - "melee_animation": "64", - "range_animation": "64", - "combat_audio": "400,404,403", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "32", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "87", - "magic_animation": "64", - "death_animation": "68", - "name": "Greater demon", - "defence_level": "81", - "safespot": null, - "lifepoints": "89", - "strength_level": "78", "id": "83", + "name": "Greater demon", + "examine": "Big, red, and incredibly evil.", "aggressive": "true", + "attack_level": "76", + "attack_speed": "4", "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", "clue_level": "2", - "range_level": "1", - "attack_level": "76" - }, - { - "examine": "A big, scary, jet-black demon.", + "combat_audio": "400,404,403", + "death_animation": "68", + "defence_animation": "65", + "defence_level": "81", + "lifepoints": "89", + "magic_animation": "64", + "magic_level": "1", "melee_animation": "64", "range_animation": "64", - "combat_audio": "397,399,398", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "157", - "facing_booth": "", - "magic_animation": "64", - "death_animation": "67", - "name": "Black demon", - "defence_level": "152", - "safespot": null, - "lifepoints": "157", - "strength_level": "148", - "id": "84", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", "range_level": "1", - "attack_level": "145" + "respawn_delay": "32", + "safespot": null, + "slayer_exp": "87", + "strength_level": "78", + "weakness": "4" }, { + "id": "84", + "name": "Black demon", + "examine": "A big, scary, jet-black demon.", + "aggressive": "true", + "attack_level": "145", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", + "combat_audio": "397,399,398", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "152", + "facing_booth": "", + "lifepoints": "157", + "magic_animation": "64", + "magic_level": "1", + "melee_animation": "64", + "range_animation": "64", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "157", + "strength_level": "148", + "weakness": "4" + }, + { + "id": "85", + "name": "Golem", "examine": "A creature made from clay.", + "attack_level": "1", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "magic_level": "1", "melee_animation": "422", "range_animation": "422", - "magic_level": "1", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Golem", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "85", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "86", + "name": "Giant rat", "examine": "Overgrown vermin.", + "aggressive": "true", + "attack_level": "2", + "attack_speed": "4", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "2", + "lifepoints": "5", + "magic_animation": "4933", "melee_animation": "4933", "range_animation": "4933", - "combat_audio": "703,705,704", - "attack_speed": "4", - "defence_animation": "4934", - "weakness": "8", - "slayer_exp": "5", - "magic_animation": "4933", - "death_animation": "4935", - "name": "Giant rat", - "defence_level": "2", - "safespot": null, - "lifepoints": "5", - "strength_level": "3", - "id": "86", - "aggressive": "true", "range_level": "1", - "attack_level": "2" + "safespot": null, + "slayer_exp": "5", + "strength_level": "3", + "weakness": "8" }, { + "id": "87", + "name": "Giant rat", "examine": "Overgrown vermin.", + "aggressive": "true", + "attack_level": "6", + "attack_speed": "4", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "2", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "4933", "range_animation": "0", - "combat_audio": "703,705,704", - "attack_speed": "4", + "range_level": "1", "respawn_delay": "60", - "defence_animation": "4934", - "weakness": "8", + "safespot": null, "slayer_exp": "10", - "magic_animation": "0", - "death_animation": "4935", - "name": "Giant rat", - "defence_level": "2", - "safespot": null, - "lifepoints": "10", "strength_level": "5", - "id": "87", - "aggressive": "true", - "range_level": "1", - "attack_level": "6" + "weakness": "8" }, { - "examine": "A dirty rat.", - "range_animation": "0", - "combat_audio": "703,705,704", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "slayer_exp": "12", - "magic_animation": "0", - "death_animation": "4935", - "name": "Dungeon rat", - "defence_level": "10", - "safespot": null, - "lifepoints": "12", - "strength_level": "10", "id": "88", + "name": "Dungeon rat", + "examine": "A dirty rat.", "aggressive": "true", + "attack_level": "10", + "attack_speed": "4", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "12", + "magic_animation": "0", + "range_animation": "0", "range_level": "1", - "attack_level": "10" + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "12", + "strength_level": "10", + "weakness": "8" }, { + "id": "89", + "name": "Unicorn", "examine": "Horse with a horn.", + "attack_level": "11", + "attack_speed": "4", + "combat_audio": "369,371,370", + "death_animation": "6377", + "defence_animation": "6375", + "defence_level": "13", + "lifepoints": "19", + "magic_animation": "6376", + "magic_level": "1", "melee_animation": "6376", "range_animation": "6376", - "combat_audio": "369,371,370", - "attack_speed": "4", - "magic_level": "1", + "range_level": "1", "respawn_delay": "90", - "defence_animation": "6375", - "weakness": "3", - "magic_animation": "6376", - "death_animation": "6377", - "name": "Unicorn", - "defence_level": "13", "safespot": null, - "lifepoints": "19", "strength_level": "13", - "id": "89", - "range_level": "1", - "attack_level": "11" + "weakness": "3" }, { - "examine": "Not man's best friend.", - "melee_animation": "6559", - "combat_audio": "481,491,490", + "id": "90", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "attack_level": "15", "attack_speed": "4", - "defence_animation": "6557", - "slayer_exp": "69", - "death_animation": "6558", - "name": "Wolf", - "defence_level": "52", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5489", + "defence_level": "17", + "lifepoints": "29", + "magic_animation": "5485", + "melee_animation": "5485", + "range_animation": "5485", + "range_level": "1", + "respawn_delay": "70", "safespot": null, - "lifepoints": "69", - "strength_level": "55", + "slayer_exp": "29", + "strength_level": "18", + "weakness": "8" + }, + { + "id": "91", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "attack_level": "17", + "attack_speed": "4", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5489", + "defence_level": "17", + "lifepoints": "24", + "magic_animation": "5485", + "melee_animation": "5485", + "range_animation": "5485", + "range_level": "1", + "safespot": null, + "slayer_exp": "24", + "strength_level": "17", + "weakness": "8" + }, + { + "id": "92", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "attack_level": "24", + "attack_speed": "4", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5489", + "defence_level": "24", + "lifepoints": "17", + "magic_animation": "5485", + "melee_animation": "5485", + "range_animation": "5485", + "range_level": "1", + "safespot": null, + "slayer_exp": "17", + "strength_level": "24", + "weakness": "8" + }, + { + "id": "93", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "attack_level": "32", + "attack_speed": "4", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5489", + "defence_level": "36", + "lifepoints": "59", + "magic_animation": "5485", + "melee_animation": "5485", + "range_animation": "5485", + "range_level": "1", + "safespot": null, + "slayer_exp": "59", + "strength_level": "35", + "weakness": "8" + }, + { + "id": "94", + "name": "Skeleton Mage" + }, + { "id": "95", + "name": "Wolf", + "examine": "Not man's best friend.", + "attack_level": "50", + "attack_speed": "4", + "combat_audio": "481,491,490", + "death_animation": "6558", + "defence_animation": "6557", + "defence_level": "52", + "lifepoints": "69", + "melee_animation": "6559", "range_level": "1", - "attack_level": "50" + "safespot": null, + "slayer_exp": "69", + "strength_level": "55" }, { - "examine": "A vicious mountain wolf.", - "melee_animation": "6579", - "range_animation": "6579", - "combat_audio": "909,912,911", - "attack_speed": "4", - "defence_animation": "6578", - "weakness": "9", - "slayer_exp": "34", - "magic_animation": "6579", - "death_animation": "6576", - "name": "White wolf", - "defence_level": "22", - "safespot": null, - "lifepoints": "34", - "strength_level": "16", "id": "96", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { + "name": "White wolf", "examine": "A vicious mountain wolf.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "4", + "combat_audio": "909,912,911", + "death_animation": "6576", + "defence_animation": "6578", + "defence_level": "22", + "lifepoints": "34", + "magic_animation": "6579", "melee_animation": "6579", "range_animation": "6579", - "combat_audio": "909,912,911", - "attack_speed": "4", - "defence_animation": "6578", - "weakness": "7", - "slayer_exp": "44", - "magic_animation": "6579", - "death_animation": "6576", - "name": "White wolf", - "defence_level": "32", - "safespot": null, - "lifepoints": "44", - "strength_level": "31", - "id": "97", - "aggressive": "true", "range_level": "1", - "attack_level": "30" + "safespot": null, + "slayer_exp": "34", + "strength_level": "16", + "weakness": "9" }, { + "id": "97", + "name": "White wolf", + "examine": "A vicious mountain wolf.", + "aggressive": "true", + "attack_level": "30", + "attack_speed": "4", + "combat_audio": "909,912,911", + "death_animation": "6576", + "defence_animation": "6578", + "defence_level": "32", + "lifepoints": "44", + "magic_animation": "6579", + "melee_animation": "6579", + "range_animation": "6579", + "range_level": "1", + "safespot": null, + "slayer_exp": "44", + "strength_level": "31", + "weakness": "7" + }, + { + "id": "98", + "name": "Dog", "examine": "Bow wow.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dog", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "98", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "99", + "name": "Guard dog", "examine": "He doesn't seem pleased to see me.", + "aggressive": "true", + "attack_level": "35", + "attack_speed": "4", + "death_animation": "6564", + "defence_animation": "6563", + "defence_level": "37", + "lifepoints": "49", + "magic_animation": "6562", "melee_animation": "6562", "range_animation": "6562", - "attack_speed": "4", + "range_level": "1", "respawn_delay": "15", - "defence_animation": "6563", - "weakness": "7", + "safespot": null, "slayer_exp": "49", - "magic_animation": "6562", - "death_animation": "6564", - "name": "Guard dog", - "defence_level": "37", - "safespot": null, - "lifepoints": "49", "strength_level": "36", - "id": "99", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" + "weakness": "7" }, { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "4", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", "id": "100", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", "name": "Goblin", - "defence_level": "3", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "101", - "clue_level": "0", - "range_level": "1", - "attack_level": "3" - }, - { "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", + "attack_level": "1", + "attack_speed": "4", + "clue_level": "0", "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "16", - "magic_animation": "6185", "death_animation": "6182", - "name": "Goblin", + "defence_animation": "6183", "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "102", - "clue_level": "0", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", "range_level": "1", - "attack_level": "1" + "safespot": null, + "slayer_exp": "5", + "strength_level": "1" }, { - "agg_radius": "", + "id": "101", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "3", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "3", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "102", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "2" + }, + { + "id": "103", + "name": "Ghost", "examine": "Eeek! A ghost!", + "agg_radius": "", + "aggressive": "true", + "attack_level": "13", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,5,5,5,-5,5,0,0,0,0,0", + "combat_audio": "436,439,438", + "death_animation": "5542", + "defence_animation": "5541", + "defence_level": "18", + "lifepoints": "25", + "magic_animation": "5540", + "magic_level": "1", "melee_animation": "5540", "range_animation": "5540", - "combat_audio": "436,439,438", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "40", - "defence_animation": "5541", - "weakness": "5", - "slayer_exp": "25", - "magic_animation": "5540", - "death_animation": "5542", - "name": "Ghost", - "defence_level": "18", - "safespot": null, - "lifepoints": "25", - "strength_level": "13", - "id": "103", - "aggressive": "true", - "bonuses": "0,0,0,0,0,5,5,5,-5,5,0,0,0,0,0", "range_level": "1", - "attack_level": "13" + "respawn_delay": "40", + "safespot": null, + "slayer_exp": "25", + "strength_level": "13", + "weakness": "5" }, { + "id": "104", + "name": "Ghost", "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "13", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,5,5,5,-5,5,0,0,0,0,0", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "18", + "lifepoints": "25", + "magic_animation": "0", + "magic_level": "1", "melee_animation": "5532", "range_animation": "0", - "combat_audio": "436,439,438", - "attack_speed": "4", - "magic_level": "1", + "range_level": "1", "respawn_delay": "40", - "defence_animation": "5533", - "weakness": "5", - "slayer_exp": "25", - "magic_animation": "0", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "18", "safespot": null, - "lifepoints": "25", + "slayer_exp": "25", "strength_level": "13", - "id": "104", - "aggressive": "true", - "bonuses": "0,0,0,0,0,5,5,5,-5,5,0,0,0,0,0", - "range_level": "1", - "attack_level": "13" + "weakness": "5" }, { - "examine": "Eek! A bear!", - "melee_animation": "4925", - "range_animation": "0", - "combat_audio": "300,302,301", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "7", - "slayer_exp": "27", - "magic_animation": "0", - "death_animation": "4929", - "name": "Grizzly bear", - "defence_level": "15", - "safespot": null, - "lifepoints": "27", - "strength_level": "18", "id": "105", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "17" - }, - { + "name": "Grizzly bear", "examine": "Eek! A bear!", + "aggressive": "true", + "attack_level": "17", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "300,302,301", + "death_animation": "4929", + "defence_animation": "0", + "defence_level": "15", + "lifepoints": "27", + "magic_animation": "0", + "magic_level": "1", "melee_animation": "4925", "range_animation": "0", - "combat_audio": "300,302,301", - "attack_speed": "4", - "magic_level": "1", + "range_level": "1", "respawn_delay": "50", - "defence_animation": "0", - "weakness": "7", - "slayer_exp": "25", - "magic_animation": "0", - "death_animation": "4929", - "name": "Black bear", - "defence_level": "13", "safespot": null, - "lifepoints": "25", - "strength_level": "16", + "slayer_exp": "27", + "strength_level": "18", + "weakness": "7" + }, + { "id": "106", + "name": "Black bear", + "examine": "Eek! A bear!", "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "15" - }, - { - "examine": "An extremely vicious scorpion.", - "melee_animation": "6254", - "combat_audio": "3611,3612,3610", - "respawn_delay": "60", - "defence_animation": "6255", - "slayer_exp": "17", - "death_animation": "6256", - "name": "Scorpion", - "defence_level": "1", - "safespot": null, - "lifepoints": "17", - "strength_level": "1", - "id": "107", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It has a very vicious looking tail.", - "melee_animation": "6254", - "range_animation": "0", - "combat_audio": "3611,3612,3610", + "attack_level": "15", "attack_speed": "4", - "poisonous": "true", - "respawn_delay": "25", - "defence_animation": "6255", - "weakness": "0", - "slayer_exp": "23", - "poison_amount": "15", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "300,302,301", + "death_animation": "4929", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "25", "magic_animation": "0", - "death_animation": "6256", - "name": "Poison Scorpion", - "defence_level": "15", - "safespot": null, - "lifepoints": "23", - "strength_level": "17", - "id": "108", - "aggressive": "true", - "bonuses": "0,0,0,0,0,5,15,15,0,5,0,0,0,0,0", + "magic_level": "1", + "melee_animation": "4925", + "range_animation": "0", "range_level": "1", - "attack_level": "16" + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "25", + "strength_level": "16", + "weakness": "7" }, { + "id": "107", + "name": "Scorpion", + "examine": "An extremely vicious scorpion.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "3611,3612,3610", + "death_animation": "6256", + "defence_animation": "6255", + "defence_level": "1", + "lifepoints": "17", + "melee_animation": "6254", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "17", + "strength_level": "1" + }, + { + "id": "108", + "name": "Poison Scorpion", + "examine": "It has a very vicious looking tail.", + "aggressive": "true", + "attack_level": "16", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,5,15,15,0,5,0,0,0,0,0", + "combat_audio": "3611,3612,3610", + "death_animation": "6256", + "defence_animation": "6255", + "defence_level": "15", + "lifepoints": "23", + "magic_animation": "0", + "melee_animation": "6254", + "poison_amount": "15", + "poisonous": "true", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "slayer_exp": "23", + "strength_level": "17", + "weakness": "0" + }, + { + "id": "109", + "name": "Pit Scorpion", "examine": "Tiny", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "3611,3612,3610", + "death_animation": "6256", + "defence_animation": "6255", + "defence_level": "40", + "lifepoints": "57", + "magic_animation": "0", "melee_animation": "6254", "range_animation": "0", - "combat_audio": "3611,3612,3610", - "respawn_delay": "60", - "defence_animation": "6255", - "weakness": "0", - "magic_animation": "0", - "death_animation": "6256", - "name": "Pit Scorpion", - "defence_level": "40", - "safespot": null, - "lifepoints": "57", - "strength_level": "1", - "id": "109", - "aggressive": "true", "range_level": "40", - "attack_level": "1" + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "0" }, { + "id": "110", + "name": "Fire giant", "examine": "A very large elemental adversary.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "5", + "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", + "combat_audio": "447,451,450", + "death_animation": "4668", + "defence_animation": "4664", + "defence_level": "65", + "lifepoints": "111", + "magic_animation": "4666", + "magic_level": "1", "melee_animation": "4666", "range_animation": "4666", - "combat_audio": "447,451,450", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "4664", - "weakness": "1", - "slayer_exp": "111", - "magic_animation": "4666", - "death_animation": "4668", - "name": "Fire giant", - "defence_level": "65", - "safespot": null, - "lifepoints": "111", - "strength_level": "65", - "id": "110", - "aggressive": "true", - "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", "range_level": "1", - "attack_level": "65" + "respawn_delay": "20", + "safespot": null, + "slayer_exp": "111", + "strength_level": "65", + "weakness": "1" }, { + "id": "111", + "name": "Ice giant", "examine": "He's got icicles in his beard.", + "aggressive": "true", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", + "combat_audio": "448,451,450", + "death_animation": "4673", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "70", + "magic_animation": "0", + "magic_level": "1", "melee_animation": "4672", "range_animation": "0", - "combat_audio": "448,451,450", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "70", - "magic_animation": "0", - "death_animation": "4673", - "name": "Ice giant", - "defence_level": "40", - "safespot": null, - "lifepoints": "70", - "strength_level": "40", - "id": "111", - "aggressive": "true", - "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", "range_level": "1", - "attack_level": "40" + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "70", + "strength_level": "40", + "weakness": "9" }, { + "id": "112", + "name": "Moss giant", "examine": "His beard seems to have a life of its own.", + "aggressive": "true", + "attack_level": "30", + "attack_speed": "6", + "bonuses": "33,33,33,0,0,0,0,0,0,0,0,31,0,0,0", + "combat_audio": "449,451,450", + "death_animation": "4668", + "defence_animation": "4665", + "defence_level": "30", + "lifepoints": "60", + "magic_animation": "4666", + "magic_level": "1", "melee_animation": "4666", "range_animation": "4666", - "combat_audio": "449,451,450", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4665", - "weakness": "1", - "slayer_exp": "60", - "magic_animation": "4666", - "death_animation": "4668", - "name": "Moss giant", - "defence_level": "30", - "safespot": null, - "lifepoints": "60", - "strength_level": "30", - "id": "112", - "aggressive": "true", - "bonuses": "33,33,33,0,0,0,0,0,0,0,0,31,0,0,0", "range_level": "1", - "attack_level": "30" + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "60", + "strength_level": "30", + "weakness": "1" }, { + "id": "113", + "name": "Jogre", "examine": "An aggressive humanoid.", + "aggressive": "true", + "attack_level": "41", + "attack_speed": "5", + "clue_level": "1", + "death_animation": "131", + "defence_animation": "129", + "defence_level": "41", + "lifepoints": "50", + "magic_animation": "128", "melee_animation": "128", "range_animation": "128", - "attack_speed": "5", - "defence_animation": "129", - "weakness": "7", - "magic_animation": "128", - "death_animation": "131", - "name": "Jogre", - "defence_level": "41", + "range_level": "1", "safespot": null, - "lifepoints": "50", "strength_level": "36", - "id": "113", - "aggressive": "true", - "clue_level": "1", - "range_level": "1", - "attack_level": "41" + "weakness": "7" }, { - "examine": "Big, ugly, and smelly.", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "27", - "respawn_delay": "25", - "defence_animation": "360", - "slayer_exp": "", - "magic_animation": "359", - "death_animation": "361", - "name": "Mogre", - "defence_level": "27", - "safespot": null, - "lifepoints": "60", - "strength_level": "27", "id": "114", - "aggressive": "true", - "bonuses": "15,15,10,20,40,15,50,50,50,20,50,58,0,0,0", - "range_level": "27", - "attack_level": "27" - }, - { - "examine": "A large dim looking humanoid.", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "25", - "defence_animation": "360", - "magic_animation": "359", - "death_animation": "361", - "name": "Ogre", - "defence_level": "43", - "safespot": null, - "lifepoints": "60", - "strength_level": "43", - "id": "115", - "aggressive": "true", - "bonuses": "22,22,22,0,0,0,0,0,0,0,0,20,0,0,0", - "range_level": "1", - "attack_level": "43" - }, - { + "name": "Mogre", "examine": "Big, ugly, and smelly.", + "aggressive": "true", + "attack_level": "27", + "attack_speed": "6", + "bonuses": "15,15,10,20,40,15,50,50,50,20,50,58,0,0,0", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "27", + "lifepoints": "60", + "magic_animation": "359", + "magic_level": "27", "melee_animation": "359", "range_animation": "359", - "attack_speed": "4", - "magic_level": "1", + "range_level": "27", "respawn_delay": "25", - "defence_animation": "4651", - "weakness": "8", - "slayer_exp": "75", - "magic_animation": "359", - "death_animation": "4653", - "name": "Cyclops", - "defence_level": "35", "safespot": null, - "lifepoints": "75", - "strength_level": "65", - "id": "116", + "slayer_exp": "", + "strength_level": "27" + }, + { + "id": "115", + "name": "Ogre", + "examine": "A large dim looking humanoid.", "aggressive": "true", + "attack_level": "43", + "attack_speed": "6", + "bonuses": "22,22,22,0,0,0,0,0,0,0,0,20,0,0,0", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "43", + "lifepoints": "60", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "43" + }, + { + "id": "116", + "name": "Cyclops", + "examine": "Big, ugly, and smelly.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "4", "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "clue_level": "2", + "death_animation": "4653", + "defence_animation": "4651", + "defence_level": "35", + "lifepoints": "75", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", "range_level": "1", - "attack_level": "65" + "respawn_delay": "25", + "safespot": null, + "slayer_exp": "75", + "strength_level": "65", + "weakness": "8" }, { + "id": "117", + "name": "Hill Giant", "examine": "A very large foe.", + "aggressive": "true", + "attack_level": "18", + "attack_speed": "6", + "bonuses": "18,18,18,0,0,0,0,0,0,0,0,16,0,0,0", + "combat_audio": "448,451,450", + "death_animation": "4653", + "defence_animation": "4651", + "defence_level": "26", + "lifepoints": "35", + "magic_animation": "4652", + "magic_level": "1", "melee_animation": "4652", "range_animation": "4652", - "combat_audio": "448,451,450", - "attack_speed": "6", - "magic_level": "1", + "range_level": "1", "respawn_delay": "30", - "defence_animation": "4651", - "weakness": "6", + "safespot": null, "slayer_exp": "35", - "magic_animation": "4652", - "death_animation": "4653", - "name": "Hill Giant", - "defence_level": "26", - "safespot": null, - "lifepoints": "35", "strength_level": "22", - "id": "117", - "aggressive": "true", - "bonuses": "18,18,18,0,0,0,0,0,0,0,0,16,0,0,0", - "range_level": "1", - "attack_level": "18" + "weakness": "6" }, { - "examine": "A short angry guy.", - "melee_animation": "99", - "range_animation": "0", - "attack_speed": "7", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Dwarf", - "defence_level": "7", - "safespot": null, - "lifepoints": "10", - "strength_level": "7", "id": "118", - "range_level": "1", - "attack_level": "7" - }, - { - "examine": "A dwarf gone bad.", - "melee_animation": "99", - "range_animation": "0", - "combat_audio": "2567,419,418", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "150", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "61", - "magic_animation": "0", - "death_animation": "102", - "name": "Chaos dwarf", - "defence_level": "28", - "safespot": null, - "lifepoints": "61", - "strength_level": "42", - "id": "119", - "aggressive": "true", - "bonuses": "13,13,13,0,0,40,34,25,10,35,0,9,0,0,0", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "A mountain dwelling short angry guy.", - "melee_animation": "99", - "range_animation": "0", - "attack_speed": "6", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", "name": "Dwarf", - "defence_level": "16", - "safespot": null, - "lifepoints": "26", - "strength_level": "16", - "id": "120", - "range_level": "1", - "attack_level": "15" - }, - { - "slayer_exp": "16", - "name": "Dwarf", - "defence_level": "1", - "safespot": null, + "examine": "A short angry guy.", + "attack_level": "7", + "attack_speed": "7", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "7", "lifepoints": "10", - "strength_level": "1", - "id": "121", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly smelly creature.", - "melee_animation": "164", - "range_animation": "164", - "combat_audio": "469,472,471", - "attack_speed": "6", - "defence_animation": "165", - "magic_animation": "164", - "death_animation": "167", - "name": "Hobgoblin", - "defence_level": "3", + "respawn_delay": "60", "safespot": null, - "lifepoints": "29", - "strength_level": "10", - "id": "122", - "aggressive": "true", - "range_level": "20", - "attack_level": "20" + "slayer_exp": "16", + "strength_level": "7", + "weakness": "6" }, { - "examine": "An ugly smelly creature.", - "melee_animation": "164", - "range_animation": "164", - "combat_audio": "3520,472,471", + "id": "119", + "name": "Chaos dwarf", + "examine": "A dwarf gone bad.", + "aggressive": "true", + "attack_level": "38", + "attack_speed": "4", + "bonuses": "13,13,13,0,0,40,34,25,10,35,0,9,0,0,0", + "combat_audio": "2567,419,418", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "61", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "150", + "safespot": null, + "slayer_exp": "61", + "strength_level": "42", + "weakness": "6" + }, + { + "id": "120", + "name": "Dwarf", + "examine": "A mountain dwelling short angry guy.", + "attack_level": "15", "attack_speed": "6", - "defence_animation": "165", - "magic_animation": "164", - "death_animation": "167", - "name": "Hobgoblin", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "16", + "lifepoints": "26", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "16", + "weakness": "6" + }, + { + "id": "121", + "name": "Dwarf", + "attack_level": "1", "defence_level": "1", + "lifepoints": "10", + "range_level": "1", "safespot": null, - "lifepoints": "29", - "strength_level": "10", - "id": "123", - "aggressive": "true", - "range_level": "20", - "attack_level": "20" + "slayer_exp": "16", + "strength_level": "1" }, { + "id": "122", + "name": "Hobgoblin", + "examine": "An ugly smelly creature.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "combat_audio": "469,472,471", + "death_animation": "167", + "defence_animation": "165", + "defence_level": "3", + "lifepoints": "29", + "magic_animation": "164", + "melee_animation": "164", + "range_animation": "164", + "range_level": "20", + "safespot": null, + "strength_level": "10" + }, + { + "id": "123", + "name": "Hobgoblin", + "examine": "An ugly smelly creature.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "combat_audio": "3520,472,471", + "death_animation": "167", + "defence_animation": "165", + "defence_level": "1", + "lifepoints": "29", + "magic_animation": "164", + "melee_animation": "164", + "range_animation": "164", + "range_level": "20", + "safespot": null, + "strength_level": "10" + }, + { + "id": "124", + "name": "Earth warrior", "examine": "A strange, inhuman, elemental warrior.", + "aggressive": "true", + "attack_level": "42", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,30,40,20,10,30,0,0,0,0,0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "42", + "lifepoints": "54", + "magic_animation": "0", + "magic_level": "1", "melee_animation": "393", "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "0", - "weakness": "7", - "slayer_exp": "54", - "magic_animation": "0", - "death_animation": "836", - "name": "Earth warrior", - "defence_level": "42", - "safespot": null, - "lifepoints": "54", - "strength_level": "42", - "id": "124", - "aggressive": "true", - "bonuses": "0,0,0,0,0,30,40,20,10,30,0,0,0,0,0", "range_level": "1", - "attack_level": "42" + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "54", + "strength_level": "42", + "weakness": "7" }, { - "examine": "A cold-hearted elemental warrior.", - "melee_animation": "451", - "range_animation": "451", - "combat_audio": "2500,530,529", - "attack_speed": "4", - "respawn_delay": "30", - "defence_animation": "404", - "weakness": "9", - "slayer_exp": "59", - "magic_animation": "451", - "death_animation": "843", - "name": "Ice warrior", - "defence_level": "47", - "safespot": null, - "lifepoints": "59", - "strength_level": "47", "id": "125", + "name": "Ice warrior", + "examine": "A cold-hearted elemental warrior.", "aggressive": "true", + "attack_level": "47", + "attack_speed": "4", "bonuses": "0,0,0,0,0,30,40,20,10,30,0,0,0,0,0", "clue_level": "1", + "combat_audio": "2500,530,529", + "death_animation": "843", + "defence_animation": "404", + "defence_level": "47", + "lifepoints": "59", + "magic_animation": "451", + "melee_animation": "451", + "range_animation": "451", "range_level": "1", - "attack_level": "47" - }, - { - "examine": "Looks pretty otherworldly to me!", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "45", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "name": "Otherworldly being", - "defence_level": "45", + "respawn_delay": "30", "safespot": null, - "lifepoints": "64", - "strength_level": "1", - "id": "126", - "range_level": "1", - "attack_level": "1" + "slayer_exp": "59", + "strength_level": "47", + "weakness": "9" }, { + "id": "126", + "name": "Otherworldly being", + "examine": "Looks pretty otherworldly to me!", + "attack_level": "1", + "attack_speed": "5", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "64", + "magic_animation": "0", + "magic_level": "45", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "127", + "name": "Magic axe", "examine": "A magic axe with a mind of its own.", + "aggressive": "true", + "attack_level": "38", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,10,5,15,5,10,0,0,0,0,0", + "combat_audio": "2498,12,1976", + "death_animation": "188", + "defence_animation": "0", + "defence_level": "29", + "lifepoints": "44", + "magic_animation": "0", "melee_animation": "185", "range_animation": "0", - "combat_audio": "2498,12,1976", - "attack_speed": "4", - "respawn_delay": "30", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "188", - "name": "Magic axe", - "defence_level": "29", - "safespot": null, - "lifepoints": "44", - "strength_level": "38", - "id": "127", - "aggressive": "true", - "bonuses": "0,0,0,0,0,10,5,15,5,10,0,0,0,0,0", "range_level": "1", - "attack_level": "38" + "respawn_delay": "30", + "safespot": null, + "strength_level": "38", + "weakness": "6" }, { + "id": "128", + "name": "Snake", "examine": "A slithering serpent.", + "aggressive": "true", + "attack_level": "4", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "3609,3608,3610", + "death_animation": "278", + "defence_animation": "0", + "defence_level": "3", + "lifepoints": "6", + "magic_animation": "0", + "magic_level": "1", "melee_animation": "275", "range_animation": "0", - "combat_audio": "3609,3608,3610", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "278", - "name": "Snake", - "defence_level": "3", - "safespot": null, - "lifepoints": "6", - "strength_level": "5", - "id": "128", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "range_level": "1", - "attack_level": "4" + "respawn_delay": "30", + "safespot": null, + "strength_level": "5", + "weakness": "8" }, { + "id": "129", + "name": "Skavid" + }, + { + "id": "130", + "name": "Yeti", + "examine": "Stinky! Poor guy." + }, + { + "id": "131", + "name": "Penguin", "examine": "An inhabitant of icy regions.", + "attack_level": "6", + "death_animation": "5671", + "defence_animation": "0", + "defence_level": "6", + "lifepoints": "8", + "magic_animation": "0", "melee_animation": "5669", "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5671", - "name": "Penguin", - "defence_level": "6", - "safespot": null, - "lifepoints": "8", - "strength_level": "6", - "id": "131", "range_level": "1", - "attack_level": "6" + "safespot": null, + "strength_level": "6", + "weakness": "9" }, { + "id": "132", + "name": "Monkey", "examine": "Perhaps our oldest relatives?", + "aggressive": "false", + "attack_level": "2", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "629,631,630", + "death_animation": "223", + "defence_animation": "0", + "defence_level": "2", + "lifepoints": "6", + "magic_animation": "0", + "magic_level": "1", "melee_animation": "220", "range_animation": "0", - "combat_audio": "629,631,630", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "37", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "223", - "name": "Monkey", - "defence_level": "2", - "safespot": null, - "lifepoints": "6", - "strength_level": "3", - "id": "132", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "range_level": "1", - "attack_level": "2" + "respawn_delay": "37", + "safespot": null, + "strength_level": "3", + "weakness": "8" }, { + "id": "133", + "name": "Black unicorn", "examine": "A unicorn with a blackened heart.", + "aggressive": "false", + "attack_level": "21", + "attack_speed": "4", + "combat_audio": "369,371,370", + "death_animation": "6377", + "defence_animation": "6375", + "defence_level": "23", + "lifepoints": "29", + "magic_animation": "6376", + "magic_level": "1", "melee_animation": "6376", "range_animation": "6376", - "combat_audio": "369,371,370", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "90", - "defence_animation": "6375", - "weakness": "3", - "magic_animation": "6376", - "death_animation": "6377", - "name": "Black unicorn", - "defence_level": "23", - "safespot": null, - "lifepoints": "29", - "strength_level": "23", - "id": "133", - "aggressive": "false", "range_level": "1", - "attack_level": "21" + "respawn_delay": "90", + "safespot": null, + "strength_level": "23", + "weakness": "3" }, { - "examine": "A nasty, poisonous arachnid.", - "melee_animation": "5327", - "range_animation": "0", - "combat_audio": "537,539,538", - "attack_speed": "4", - "poisonous": "true", - "respawn_delay": "30", - "defence_animation": "5328", - "weakness": "2", - "poison_amount": "30", - "magic_animation": "0", - "death_animation": "5329", + "id": "134", "name": "Poison spider", - "safespot": null, + "examine": "A nasty, poisonous arachnid.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "4", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "5328", "defence_level": "52", "lifepoints": "64", - "strength_level": "65", - "id": "134", - "aggressive": "true", + "magic_animation": "0", + "melee_animation": "5327", + "poison_amount": "30", + "poisonous": "true", + "range_animation": "0", "range_level": "1", - "attack_level": "50" + "respawn_delay": "30", + "safespot": null, + "strength_level": "65", + "weakness": "2" }, { + "id": "135", + "name": "Mammoth" + }, + { + "id": "136", + "name": "Mounted terrorchick gnome" + }, + { + "id": "137", + "name": "Terrorchick gnome", "examine": "Aaw", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Terrorchick gnome", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "137", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "138", + "name": "Terrorbird", "examine": "A giant raptor.", + "aggressive": "false", + "attack_level": "23", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "832,834,833", + "death_animation": "1013", + "defence_animation": "1012", + "defence_level": "19", + "lifepoints": "34", + "magic_animation": "0", + "magic_level": "1", "melee_animation": "1010", "range_animation": "0", - "combat_audio": "832,834,833", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "1012", - "weakness": "6", - "magic_animation": "0", - "death_animation": "1013", - "name": "Terrorbird", - "defence_level": "19", - "safespot": null, - "lifepoints": "34", - "strength_level": "23", - "id": "138", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "range_level": "1", - "attack_level": "23" + "respawn_delay": "30", + "safespot": null, + "strength_level": "23", + "weakness": "6" }, { - "examine": "A giant raptor.", - "melee_animation": "1010", - "combat_audio": "832,834,833", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "1012", - "magic_animation": "0", - "death_animation": "1013", - "name": "Terrorbird", - "defence_level": "19", - "safespot": null, - "lifepoints": "34", - "strength_level": "23", "id": "139", + "name": "Terrorbird", + "examine": "A giant raptor.", "aggressive": "false", + "attack_level": "23", + "attack_speed": "4", "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "832,834,833", + "death_animation": "1013", + "defence_animation": "1012", + "defence_level": "19", + "lifepoints": "34", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "1010", "range_level": "1", - "attack_level": "23" + "respawn_delay": "30", + "safespot": null, + "strength_level": "23" }, { + "id": "140", + "name": "Souless", "examine": "A servant to Iban.", + "aggressive": "true", + "attack_level": "33", + "death_animation": "340", + "defence_animation": "0", + "defence_level": "33", + "lifepoints": "47", + "magic_animation": "0", "melee_animation": "338", "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "340", - "name": "Souless", - "defence_level": "33", - "safespot": null, - "lifepoints": "47", - "strength_level": "33", - "id": "140", - "aggressive": "true", "range_level": "1", - "attack_level": "33" + "respawn_delay": "60", + "safespot": null, + "strength_level": "33", + "weakness": "7" }, { + "id": "141", + "name": "Big Wolf", "examine": "Must be the pack leader.", + "aggressive": "true", + "attack_level": "31", + "death_animation": "6558", + "defence_animation": "0", + "defence_level": "31", + "lifepoints": "44", + "magic_animation": "0", "melee_animation": "6559", "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "slayer_exp": "74", - "magic_animation": "0", - "death_animation": "6558", - "name": "Big Wolf", - "defence_level": "31", - "safespot": null, - "lifepoints": "44", - "strength_level": "31", - "id": "141", - "aggressive": "true", "range_level": "1", - "attack_level": "31" + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "74", + "strength_level": "31", + "weakness": "7" }, { - "slayer_exp": "34", - "death_animation": "6558", + "id": "142", "name": "Wolf", + "attack_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6558", "defence_level": "1", - "safespot": null, "lifepoints": "69", "melee_animation": "6559", - "combat_audio": "481,491,490", - "strength_level": "1", - "id": "142", "range_level": "1", - "attack_level": "1" + "safespot": null, + "slayer_exp": "34", + "strength_level": "1" }, { + "id": "143", + "name": "Jungle Wolf", "examine": "A rare jungle wolf - specific to the Kharazi jungle.", + "aggressive": "true", + "attack_level": "63", + "death_animation": "6558", + "defence_animation": "0", + "defence_level": "63", + "lifepoints": "90", + "magic_animation": "0", "melee_animation": "6559", "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "slayer_exp": "69", - "magic_animation": "0", - "death_animation": "6558", - "name": "Jungle Wolf", - "defence_level": "63", - "safespot": null, - "lifepoints": "90", - "strength_level": "63", - "id": "143", - "aggressive": "true", "range_level": "1", - "attack_level": "63" + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "69", + "strength_level": "63", + "weakness": "7" }, { + "id": "144", + "name": "King Scorpion", "examine": "Wow! Scorpions shouldn't grow that big.", + "aggressive": "true", + "attack_level": "21", + "attack_speed": "5", + "combat_audio": "3611,3612,3610", + "death_animation": "6256", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "40", + "magic_animation": "0", "melee_animation": "6254", "range_animation": "0", - "combat_audio": "3611,3612,3610", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "slayer_exp": "17", - "magic_animation": "0", - "death_animation": "6256", - "name": "King Scorpion", - "defence_level": "28", - "safespot": null, - "lifepoints": "40", - "strength_level": "21", - "id": "144", - "aggressive": "true", "range_level": "28", - "attack_level": "21" + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "17", + "strength_level": "21", + "weakness": "2" }, { - "examine": "A cold-hearted elemental warrior.", - "melee_animation": "451", - "range_animation": "451", - "combat_audio": "2500,530,529", - "attack_speed": "4", - "respawn_delay": "30", - "defence_animation": "404", - "weakness": "9", - "slayer_exp": "59", - "magic_animation": "451", - "death_animation": "843", - "name": "Ice warrior", - "defence_level": "47", - "safespot": null, - "lifepoints": "59", - "strength_level": "47", "id": "145", + "name": "Ice warrior", + "examine": "A cold-hearted elemental warrior.", "aggressive": "true", + "attack_level": "47", + "attack_speed": "4", "bonuses": "0,0,0,0,0,30,40,20,10,30,0,0,0,0,0", "clue_level": "1", + "combat_audio": "2500,530,529", + "death_animation": "843", + "defence_animation": "404", + "defence_level": "47", + "lifepoints": "59", + "magic_animation": "451", + "melee_animation": "451", + "range_animation": "451", "range_level": "1", - "attack_level": "47" + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "59", + "strength_level": "47", + "weakness": "9" }, { - "examine": "A sea bird.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gull", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", "id": "146", - "range_level": "1", - "attack_level": "1" - }, - { + "name": "Gull", "examine": "A sea bird.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cormorant", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { "id": "147", - "range_level": "1", - "attack_level": "1" - }, - { + "name": "Cormorant", "examine": "A sea bird.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Pelican", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { "id": "148", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "These look much better in the wild.", + "name": "Pelican", + "examine": "A sea bird.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Butterfly", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { + "id": "149", + "name": "Gull" + }, + { + "id": "150", + "name": "Gull" + }, + { + "id": "151", + "name": "Fly trap" + }, + { + "id": "152", + "name": "Butterfly" + }, + { "id": "153", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I love butterflies.", + "name": "Butterfly", + "examine": "These look much better in the wild.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Butterfly", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "154", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "154", + "name": "Butterfly", + "examine": "I love butterflies.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "155", + "name": "Butterfly" + }, + { + "id": "156", + "name": "Butterfly" + }, + { + "id": "157", + "name": "Butterfly" + }, + { + "id": "158", + "name": "Shadow warrior", "examine": "A fighter from the supernatural world. He's a shadow of his former self.", + "aggressive": "true", + "attack_level": "47", + "attack_speed": "5", + "death_animation": "843", + "defence_animation": "0", + "defence_level": "47", + "lifepoints": "67", + "magic_animation": "0", "melee_animation": "394", "range_animation": "0", - "attack_speed": "5", + "range_level": "1", "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "843", - "name": "Shadow warrior", - "defence_level": "47", "safespot": null, - "lifepoints": "67", "strength_level": "47", - "id": "158", - "aggressive": "true", - "range_level": "1", - "attack_level": "47" + "weakness": "6" }, { - "examine": "Small, even by gnome standards.", - "melee_animation": "191", - "range_animation": "0", - "defence_animation": "193", - "weakness": "9", - "magic_animation": "0", - "death_animation": "196", - "name": "Gnome child", - "defence_level": "1", - "safespot": null, - "lifepoints": "2", - "strength_level": "1", "id": "159", - "range_level": "1", - "attack_level": "1" - }, - { + "name": "Gnome child", "examine": "Small, even by gnome standards.", + "attack_level": "1", + "death_animation": "196", + "defence_animation": "193", + "defence_level": "1", + "lifepoints": "2", + "magic_animation": "0", "melee_animation": "191", "range_animation": "0", - "defence_animation": "193", - "weakness": "9", - "magic_animation": "0", - "death_animation": "196", - "name": "Gnome child", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "2", "strength_level": "1", + "weakness": "9" + }, + { "id": "160", - "range_level": "1", - "attack_level": "1" - }, - { + "name": "Gnome child", "examine": "Small, even by gnome standards.", + "attack_level": "1", + "death_animation": "196", + "defence_animation": "193", + "defence_level": "1", + "lifepoints": "2", + "magic_animation": "0", "melee_animation": "191", "range_animation": "0", - "defence_animation": "193", - "weakness": "9", - "magic_animation": "0", - "death_animation": "196", - "name": "Gnome child", - "defence_level": "1", - "safespot": null, - "lifepoints": "2", - "strength_level": "1", - "id": "161", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1", + "weakness": "9" }, { + "id": "161", + "name": "Gnome child", + "examine": "Small, even by gnome standards.", + "attack_level": "1", + "death_animation": "196", + "defence_animation": "193", + "defence_level": "1", + "lifepoints": "2", + "magic_animation": "0", + "melee_animation": "191", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "162", + "name": "Gnome trainer", "examine": "He can advise on training.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gnome trainer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "162", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "163", + "name": "Gnome guard", "examine": "A tree gnome guard.", + "attack_level": "38", + "death_animation": "1224", + "defence_animation": "0", + "defence_level": "38", + "lifepoints": "54", + "magic_animation": "0", "melee_animation": "1218", "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "1224", - "name": "Gnome guard", - "defence_level": "38", - "safespot": null, - "lifepoints": "54", - "strength_level": "38", - "id": "163", "range_level": "1", - "attack_level": "38" + "safespot": null, + "strength_level": "38", + "weakness": "9" }, { + "id": "164", + "name": "Gnome guard", "examine": "A tree gnome guard.", + "attack_level": "38", + "death_animation": "196", + "defence_animation": "0", + "defence_level": "38", + "lifepoints": "54", + "magic_animation": "0", "melee_animation": "192", "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "196", - "name": "Gnome guard", - "defence_level": "38", + "range_level": "1", "safespot": null, - "lifepoints": "54", "strength_level": "38", - "id": "164", - "range_level": "1", - "attack_level": "38" + "weakness": "9" + }, + { + "id": "165", + "name": "Gnome shop keeper" + }, + { + "id": "166", + "name": "Gnome banker", + "examine": "Banks gnomish things." + }, + { + "id": "167", + "name": "Gnome baller" }, { - "examine": "A female gnome.", - "combat_style": "1", - "melee_animation": "191", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "196", - "name": "Gnome woman", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", "id": "168", - "range_level": "1", - "attack_level": "30" - }, - { + "name": "Gnome woman", "examine": "A female gnome.", + "attack_level": "30", "combat_style": "1", + "death_animation": "196", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", "melee_animation": "191", "range_animation": "0", + "range_level": "1", "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "196", - "name": "Gnome woman", - "defence_level": "30", "safespot": null, - "lifepoints": "42", "strength_level": "30", + "weakness": "7" + }, + { "id": "169", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", + "name": "Gnome woman", + "examine": "A female gnome.", + "attack_level": "30", + "combat_style": "1", + "death_animation": "196", "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Man", - "defence_level": "3", - "safespot": null, - "lifepoints": "4", - "strength_level": "3", - "id": "170", - "clue_level": "0", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "He works evil magic.", - "combat_style": "2", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "magic_level": "27", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "711", - "death_animation": "836", - "name": "Dark wizard", - "defence_level": "27", - "safespot": null, - "lifepoints": "24", - "strength_level": "1", - "id": "172", - "aggressive": "true", - "range_level": "1", - "attack_level": "1", - "prj_height": "3" - }, - { - "examine": "An evil user of Magic powers", - "melee_animation": "422", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "30", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "836", - "name": "Invrigar the Necromancer", "defence_level": "30", - "safespot": null, "lifepoints": "42", - "strength_level": "1", - "id": "173", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He works evil magic.", - "combat_style": "2", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "magic_level": "24", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "711", - "death_animation": "836", - "name": "Dark wizard", - "defence_level": "24", - "safespot": null, - "lifepoints": "12", - "strength_level": "1", - "id": "174", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "agg_radius": "2", - "examine": "He jumps out and attacks people.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", "magic_animation": "0", - "death_animation": "836", - "name": "Mugger", - "defence_level": "11", - "safespot": null, - "lifepoints": "15", - "strength_level": "11", - "id": "175", - "aggressive": "true", + "melee_animation": "191", + "range_animation": "0", "range_level": "1", - "attack_level": "11" + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "7" }, { + "id": "170", + "name": "Man", + "examine": "One of Gielinor's many citizens.", + "attack_level": "3", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "3", + "lifepoints": "4", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "3", + "weakness": "9" + }, + { + "id": "171", + "name": "Brimstail" + }, + { + "id": "172", + "name": "Dark wizard", + "examine": "He works evil magic.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "511,513,512", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "27", + "lifepoints": "24", + "magic_animation": "711", + "magic_level": "27", + "melee_animation": "422", + "prj_height": "3", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "173", + "name": "Invrigar the Necromancer", + "examine": "An evil user of Magic powers", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "magic_level": "30", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "174", + "name": "Dark wizard", + "examine": "He works evil magic.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "511,513,512", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "24", + "lifepoints": "12", + "magic_animation": "711", + "magic_level": "24", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "175", + "name": "Mugger", + "examine": "He jumps out and attacks people.", + "agg_radius": "2", + "aggressive": "true", + "attack_level": "11", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "11", + "lifepoints": "15", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "11", + "weakness": "9" + }, + { + "id": "176", + "name": "Witch", "examine": "The hat's a dead give away.", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "magic_level": "22", "melee_animation": "423", "range_animation": "0", - "magic_level": "22", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "836", - "name": "Witch", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "1", - "id": "176", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1", + "weakness": "4" }, { + "id": "177", + "name": "Witch" + }, + { + "id": "178", + "name": "Black Knight", "examine": "A dark-hearted knight.", + "aggressive": "true", + "attack_level": "25", + "attack_speed": "5", + "bonuses": "18,18,18,0,0,73,76,70,-11,72,0,16,0,0,0", + "combat_audio": "2503,15,512", + "death_animation": "836", + "defence_animation": "388", + "defence_level": "25", + "lifepoints": "42", + "magic_animation": "0", "melee_animation": "390", "range_animation": "0", - "combat_audio": "2503,15,512", - "attack_speed": "5", - "respawn_delay": "25", - "defence_animation": "388", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Black Knight", - "defence_level": "25", - "safespot": null, - "lifepoints": "42", - "strength_level": "25", - "id": "178", - "aggressive": "true", - "bonuses": "18,18,18,0,0,73,76,70,-11,72,0,16,0,0,0", "range_level": "1", - "attack_level": "25" + "respawn_delay": "25", + "safespot": null, + "strength_level": "25", + "weakness": "7" }, { - "examine": "A dark-hearted knight.", - "melee_animation": "390", - "combat_audio": "2503,15,512", - "attack_speed": "5", - "respawn_delay": "25", - "defence_animation": "388", - "death_animation": "836", - "name": "Black Knight", - "defence_level": "25", - "safespot": null, - "lifepoints": "42", - "strength_level": "25", "id": "179", + "name": "Black Knight", + "examine": "A dark-hearted knight.", "aggressive": "true", + "attack_level": "25", + "attack_speed": "5", "bonuses": "18,18,18,0,0,73,76,70,-11,72,0,16,0,0,0", + "combat_audio": "2503,15,512", + "death_animation": "836", + "defence_animation": "388", + "defence_level": "25", + "lifepoints": "42", + "melee_animation": "390", "range_level": "1", - "attack_level": "25" + "respawn_delay": "25", + "safespot": null, + "strength_level": "25" }, { + "id": "180", + "name": "Highwayman", "examine": "He holds up passers by.", + "aggressive": "true", + "attack_level": "8", + "attack_speed": "5", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "8", + "lifepoints": "13", + "magic_animation": "799", "melee_animation": "799", "range_animation": "799", - "combat_audio": "511,513,512", - "attack_speed": "5", - "defence_animation": "404", - "weakness": "7", - "magic_animation": "799", - "death_animation": "9055", - "name": "Highwayman", - "defence_level": "8", - "safespot": null, - "lifepoints": "13", - "strength_level": "8", - "id": "180", - "aggressive": "true", "range_level": "1", - "attack_level": "8" + "safespot": null, + "strength_level": "8", + "weakness": "7" }, { - "examine": "A crazy, evil druid.", - "start_gfx": "105", - "melee_animation": "422", - "range_animation": "422", - "attack_speed": "4", - "magic_level": "10", - "end_gfx": "107", - "respawn_delay": "25", - "defence_animation": "404", - "weakness": "3", - "slayer_exp": "0", - "magic_animation": "422", - "death_animation": "9055", - "name": "Chaos druid", - "defence_level": "12", - "safespot": null, - "lifepoints": "20", - "strength_level": "8", "id": "181", + "name": "Chaos druid", + "examine": "A crazy, evil druid.", "aggressive": "true", + "attack_level": "8", + "attack_speed": "4", "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "projectile": "106", - "attack_level": "8" - }, - { - "melee_animation": "422", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "id": "182", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This one's had too much to drink!", - "melee_animation": "422", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "id": "183", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "422", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "23", - "strength_level": "1", - "id": "184", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "185", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Low on brains, high on aggression.", - "melee_animation": "386", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Thug", - "defence_level": "9", - "safespot": null, - "lifepoints": "18", - "strength_level": "5", - "id": "186", - "aggressive": "true", - "clue_level": "0", - "bonuses": "5,5,5,0,0,2,3,3,0,0,0,5,0,0,0", - "range_level": "1", - "attack_level": "7" - }, - { - "examine": "An evil human cleric.", - "start_gfx": "99", - "combat_style": "2", - "combat_audio": "511,513,512", - "melee_animation": "422", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "25", - "end_gfx": "101", - "respawn_delay": "60", - "defence_animation": "404", - "weakness": "5", - "magic_animation": "711", - "death_animation": "836", - "name": "Monk of Zamorak", - "defence_level": "22", - "safespot": null, - "lifepoints": "20", - "strength_level": "18", - "id": "188", - "aggressive": "true", - "range_level": "1", - "projectile": "100", - "attack_level": "18" - }, - { - "examine": "An evil human cleric.", - "start_gfx": "99", - "combat_style": "2", - "combat_audio": "511,513,512", - "melee_animation": "422", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "25", - "end_gfx": "101", - "respawn_delay": "60", - "defence_animation": "404", - "weakness": "5", - "magic_animation": "711", - "death_animation": "836", - "name": "Monk of Zamorak", - "defence_level": "12", - "safespot": null, - "lifepoints": "10", - "strength_level": "8", - "id": "189", - "aggressive": "true", - "range_level": "1", - "projectile": "100", - "attack_level": "8" - }, - { - "examine": "An evil human cleric.", - "start_gfx": "99", - "combat_style": "2", - "combat_audio": "511,513,512", - "melee_animation": "422", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "40", - "end_gfx": "101", - "respawn_delay": "60", - "defence_animation": "404", - "weakness": "5", - "magic_animation": "711", - "death_animation": "836", - "name": "Monk of Zamorak", - "defence_level": "42", - "safespot": null, - "lifepoints": "40", - "strength_level": "38", - "id": "190", - "aggressive": "true", - "range_level": "1", - "projectile": "100", - "attack_level": "38" - }, - { - "examine": "A primitive warrior.", - "melee_animation": "428", - "range_animation": "0", - "attack_speed": "4", - "poisonous": "true", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "8", - "poison_amount": "55", - "magic_animation": "0", - "death_animation": "836", - "name": "Tribesman", - "defence_level": "26", - "safespot": null, - "lifepoints": "39", - "strength_level": "27", - "id": "191", - "aggressive": "true", - "clue_level": "1", - "bonuses": "8,8,8,0,0,4,6,6,0,0,0,5,0,0,0", - "range_level": "1", - "attack_level": "23" - }, - { - "examine": "A warrior of Darkness.", - "melee_animation": "451", - "attack_speed": "5", - "respawn_delay": "20", - "defence_animation": "388", - "weakness": "8", "death_animation": "9055", - "name": "Dark warrior", - "defence_level": "10", - "safespot": null, - "lifepoints": "10", - "strength_level": "10", - "id": "192", - "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,1,1,1", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A crazy evil druid.", - "start_gfx": "105", - "melee_animation": "422", - "range_animation": "422", - "attack_speed": "4", - "magic_level": "10", - "respawn_delay": "25", - "end_gfx": "107", "defence_animation": "404", - "weakness": "3", - "magic_animation": "422", - "death_animation": "836", - "name": "Chaos druid warrior", "defence_level": "12", - "safespot": null, + "end_gfx": "107", "lifepoints": "20", - "strength_level": "8", - "id": "193", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "projectile": "106", - "attack_level": "8" - }, - { - "examine": "A crazy evil necromancer.", + "magic_animation": "422", + "magic_level": "10", "melee_animation": "422", - "range_animation": "0", - "magic_level": "28", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "836", - "name": "Necromancer", - "defence_level": "28", - "safespot": null, - "lifepoints": "40", - "strength_level": "1", - "id": "194", + "projectile": "106", + "range_animation": "422", "range_level": "1", - "attack_level": "1" + "respawn_delay": "25", + "safespot": null, + "slayer_exp": "0", + "start_gfx": "105", + "strength_level": "8", + "weakness": "3" }, { - "examine": "Bandit Camp guard.", + "id": "182", + "name": "Pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "20", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "183", + "name": "Pirate", + "examine": "This one's had too much to drink!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "20", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "184", + "name": "Pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "23", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "185", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "186", + "name": "Thug", + "examine": "Low on brains, high on aggression.", + "aggressive": "true", + "attack_level": "7", + "attack_speed": "4", + "bonuses": "5,5,5,0,0,2,3,3,0,0,0,5,0,0,0", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "9", + "lifepoints": "18", + "magic_animation": "0", + "magic_level": "1", "melee_animation": "386", "range_animation": "0", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard Bandit", - "defence_level": "20", + "range_level": "1", + "respawn_delay": "50", "safespot": null, - "lifepoints": "28", - "strength_level": "1", - "id": "196", - "range_level": "20", - "attack_level": "1" + "strength_level": "5", + "weakness": "9" }, { + "id": "187", + "name": "Rogue", + "examine": "Rogueish.", + "aggressive": "false", + "attack_level": "7", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "7", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "386", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "7", + "weakness": "9" + }, + { + "id": "188", + "name": "Monk of Zamorak", + "examine": "An evil human cleric.", + "aggressive": "true", + "attack_level": "18", + "attack_speed": "4", + "combat_audio": "511,513,512", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "22", + "end_gfx": "101", + "lifepoints": "20", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "422", + "projectile": "100", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "99", + "strength_level": "18", + "weakness": "5" + }, + { + "id": "189", + "name": "Monk of Zamorak", + "examine": "An evil human cleric.", + "aggressive": "true", + "attack_level": "8", + "attack_speed": "4", + "combat_audio": "511,513,512", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "12", + "end_gfx": "101", + "lifepoints": "10", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "422", + "projectile": "100", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "99", + "strength_level": "8", + "weakness": "5" + }, + { + "id": "190", + "name": "Monk of Zamorak", + "examine": "An evil human cleric.", + "aggressive": "true", + "attack_level": "38", + "attack_speed": "4", + "combat_audio": "511,513,512", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "42", + "end_gfx": "101", + "lifepoints": "40", + "magic_animation": "711", + "magic_level": "40", + "melee_animation": "422", + "projectile": "100", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "99", + "strength_level": "38", + "weakness": "5" + }, + { + "id": "191", + "name": "Tribesman", + "examine": "A primitive warrior.", + "aggressive": "true", + "attack_level": "23", + "attack_speed": "4", + "bonuses": "8,8,8,0,0,4,6,6,0,0,0,5,0,0,0", + "clue_level": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "26", + "lifepoints": "39", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "428", + "poison_amount": "55", + "poisonous": "true", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "27", + "weakness": "8" + }, + { + "id": "192", + "name": "Dark warrior", + "examine": "A warrior of Darkness.", + "attack_level": "10", + "attack_speed": "5", + "bonuses": "1,1,1,1,1,1,1,1,1,1,1,1,1,1,1", + "death_animation": "9055", + "defence_animation": "388", + "defence_level": "10", + "lifepoints": "10", + "melee_animation": "451", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "10", + "weakness": "8" + }, + { + "id": "193", + "name": "Chaos druid warrior", + "examine": "A crazy evil druid.", + "aggressive": "true", + "attack_level": "8", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "12", + "end_gfx": "107", + "lifepoints": "20", + "magic_animation": "422", + "magic_level": "10", + "melee_animation": "422", + "projectile": "106", + "range_animation": "422", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "start_gfx": "105", + "strength_level": "8", + "weakness": "3" + }, + { + "id": "194", + "name": "Necromancer", + "examine": "A crazy evil necromancer.", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "40", + "magic_animation": "0", + "magic_level": "28", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "195", + "name": "Bandit" + }, + { + "id": "196", + "name": "Guard Bandit", + "examine": "Bandit Camp guard.", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "28", + "magic_animation": "0", + "melee_animation": "386", + "range_animation": "0", + "range_level": "20", + "safespot": null, + "strength_level": "1", + "weakness": "1" + }, + { + "id": "197", + "name": "Barbarian guard" + }, + { + "id": "198", + "name": "Guildmaster", "examine": "Master of the Champions' Guild.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guildmaster", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "198", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "199", + "name": "Gunthor the Brave", "examine": "A mighty warrior!", + "attack_level": "29", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "29", + "lifepoints": "41", + "magic_animation": "0", "melee_animation": "395", "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Gunthor the Brave", - "defence_level": "29", + "range_level": "1", "safespot": null, - "lifepoints": "41", "strength_level": "29", - "id": "199", - "range_level": "1", - "attack_level": "29" + "weakness": "8" + }, + { + "id": "200", + "name": "Lord Daquarius" }, { - "examine": "Guards prisoners for the black knights.", - "melee_animation": "422", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Jailer", - "defence_level": "40", - "safespot": null, - "lifepoints": "47", - "strength_level": "40", "id": "201", + "name": "Jailer", + "examine": "Guards prisoners for the black knights.", "aggressive": "false", + "attack_level": "40", + "attack_speed": "4", "bonuses": "0,0,0,0,0,79,63,47,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Has a fearsome scowl.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", "death_animation": "836", - "name": "Black Heather", - "defence_level": "28", - "lifepoints": "40", - "strength_level": "28", - "id": "202", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A rocky slug.", - "melee_animation": "1595", - "range_animation": "1595", - "combat_audio": "729,731,730", - "attack_speed": "5", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "47", + "magic_animation": "0", "magic_level": "1", - "defence_animation": "1596", - "weakness": "7", - "magic_animation": "1595", - "death_animation": "1597", - "name": "Rockslug", - "defence_level": "30", - "safespot": null, - "lifepoints": "30", - "strength_level": "30", - "id": "1631", - "clue_level": "2", - "range_level": "1", - "attack_level": "24" - }, - { - "examine": "A rocky slug.", - "melee_animation": "1595", - "range_animation": "1595", - "combat_audio": "729,731,730", - "attack_speed": "5", - "magic_level": "1", - "defence_animation": "1596", - "weakness": "7", - "magic_animation": "1595", - "death_animation": "1597", - "name": "Rockslug", - "defence_level": "30", - "safespot": null, - "lifepoints": "30", - "strength_level": "30", - "id": "1632", - "clue_level": "2", - "range_level": "1", - "attack_level": "24" - }, - { - "examine": "Has a fearsome posture.", - "melee_animation": "390", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Donny the Lad", - "defence_level": "28", - "safespot": null, - "lifepoints": "40", - "strength_level": "28", - "id": "203", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "Nice hair.", - "melee_animation": "390", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Speedy Keith", - "defence_level": "28", - "safespot": null, - "lifepoints": "40", - "strength_level": "28", - "id": "204", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A crazy evil druid.", "melee_animation": "422", "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Salarin the Twisted", - "defence_level": "62", - "safespot": null, - "lifepoints": "70", - "strength_level": "58", - "id": "205", - "aggressive": "true", - "bonuses": "45,50,43,55,39,31,19,28,33,22,22,15,13,9,8", "range_level": "1", - "attack_level": "58" + "respawn_delay": "50", + "safespot": null, + "strength_level": "40", + "weakness": "8" }, { + "id": "202", + "name": "Black Heather", + "examine": "Has a fearsome scowl.", + "attack_level": "28", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "40", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "strength_level": "28", + "weakness": "8" + }, + { + "id": "203", + "name": "Donny the Lad", + "examine": "Has a fearsome posture.", + "attack_level": "28", + "attack_speed": "5", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "40", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "28", + "weakness": "9" + }, + { + "id": "204", + "name": "Speedy Keith", + "examine": "Nice hair.", + "attack_level": "28", + "attack_speed": "5", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "40", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "28", + "weakness": "7" + }, + { + "id": "205", + "name": "Salarin the Twisted", + "examine": "A crazy evil druid.", + "aggressive": "true", + "attack_level": "58", + "bonuses": "45,50,43,55,39,31,19,28,33,22,22,15,13,9,8", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "62", + "lifepoints": "70", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "58" + }, + { + "id": "206", + "name": "Guard", "examine": "A dwarven guard.", + "aggressive": "false", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "12", + "lifepoints": "17", + "magic_animation": "0", "melee_animation": "99", "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "102", - "name": "Guard", - "defence_level": "12", + "range_level": "1", "safespot": null, - "lifepoints": "17", "strength_level": "12", - "id": "206", - "aggressive": "false", - "clue_level": "1", - "range_level": "1", - "attack_level": "12" + "weakness": "6" + }, + { + "id": "207", + "name": "Lollk" }, { - "examine": "The head honcho around here.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Lawgof", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", "id": "208", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She looks serene.", + "name": "Captain Lawgof", + "examine": "The head honcho around here.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Grail Maiden", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { + "id": "209", + "name": "Nulodion" + }, + { "id": "210", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A former Knight of the Round Table.", + "name": "Grail Maiden", + "examine": "She looks serene.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "King Percival", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { + "id": "211", + "name": "Sir Percival" + }, + { "id": "212", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks unhappy...", + "name": "King Percival", + "examine": "A former Knight of the Round Table.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Peasant", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { + "id": "213", + "name": "Merlin" + }, + { "id": "214", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "High Priest of Entrana.", + "name": "Peasant", + "examine": "He looks unhappy...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "High Priest", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { + "id": "215", + "name": "Peasant" + }, + { "id": "216", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a fisherman.", + "name": "High Priest", + "examine": "High Priest of Entrana.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fisherman", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { + "id": "217", + "name": "Crone" + }, + { + "id": "218", + "name": "Galahad" + }, + { "id": "219", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He doesn't look very well...", + "name": "Fisherman", + "examine": "It's a fisherman.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "The Fisher King", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "220", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "220", + "name": "The Fisher King", + "examine": "He doesn't look very well...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "221", + "name": "Black Knight Titan", "examine": "He looks mean and powerful.", + "aggressive": "true", + "attack_level": "91", + "attack_speed": "7", + "bonuses": "27,27,27,0,0,18,27,18,1000,1000,0,0,0,0,0", + "death_animation": "131", + "defence_animation": "0", + "defence_level": "91", + "lifepoints": "142", + "magic_animation": "0", + "magic_level": "1", "melee_animation": "128", "range_animation": "0", - "attack_speed": "7", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "131", - "name": "Black Knight Titan", - "defence_level": "91", - "safespot": null, - "lifepoints": "142", - "strength_level": "100", - "id": "221", - "aggressive": "true", - "bonuses": "27,27,27,0,0,18,27,18,1000,1000,0,0,0,0,0", "range_level": "1", - "attack_level": "91" + "respawn_delay": "60", + "safespot": null, + "strength_level": "100", + "weakness": "10" }, { + "id": "222", + "name": "Monk", "examine": "A holy man.", + "attack_level": "7", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "14", + "magic_animation": "0", + "magic_level": "10", "melee_animation": "422", "range_animation": "0", - "combat_audio": "511,513,512", - "magic_level": "10", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "836", - "name": "Monk", - "defence_level": "10", - "safespot": null, - "lifepoints": "14", - "strength_level": "7", - "id": "222", "range_level": "1", - "attack_level": "7" + "safespot": null, + "strength_level": "7", + "weakness": "5" }, { + "id": "223", + "name": "Brother Kojo", "examine": "A peaceful monk.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brother Kojo", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "223", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "224", + "name": "Dungeon rat", "examine": "A dirty rat.", + "aggressive": "true", + "attack_level": "8", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "0", + "defence_level": "8", + "lifepoints": "11", + "magic_animation": "0", "melee_animation": "4933", "range_animation": "0", - "combat_audio": "703,705,704", - "attack_speed": "5", + "range_level": "1", "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "4935", - "name": "Dungeon rat", - "defence_level": "8", "safespot": null, - "lifepoints": "11", "strength_level": "8", - "id": "224", - "aggressive": "true", - "range_level": "1", - "attack_level": "8" + "weakness": "9" + }, + { + "id": "225", + "name": "Bonzo" + }, + { + "id": "226", + "name": "Morris" + }, + { + "id": "228", + "name": "Big Dave" + }, + { + "id": "229", + "name": "Joshua" }, { - "examine": "He looks elderly.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Grandpa Jack", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", "id": "230", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He likes to cut down trees.", + "name": "Grandpa Jack", + "examine": "He looks elderly.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Forester", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { "id": "231", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I can fish here.", + "name": "Forester", + "examine": "He likes to cut down trees.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fishing spot", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "233", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "232", + "name": "Austri" + }, + { + "id": "233", + "name": "Fishing spot", + "examine": "I can fish here.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "234", + "name": "Fishing spot" + }, + { + "id": "235", + "name": "Fishing spot" + }, + { + "id": "236", + "name": "Fishing spot" + }, + { + "id": "237", + "name": "Renegade Knight", "examine": "He isn't very friendly.", + "aggressive": "true", + "attack_level": "15", + "death_animation": "6490", + "defence_animation": "0", + "defence_level": "15", + "lifepoints": "42", + "magic_animation": "0", "melee_animation": "6489", "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6490", - "name": "Renegade Knight", - "defence_level": "15", - "safespot": null, - "lifepoints": "42", - "strength_level": "15", - "id": "237", - "aggressive": "true", "range_level": "1", - "attack_level": "15" + "respawn_delay": "60", + "safespot": null, + "strength_level": "15", + "weakness": "7" }, { + "id": "238", + "name": "Thrantax the Mighty", "examine": "A terrifying spirit.", + "attack_level": "50", + "death_animation": "5542", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "142", + "magic_animation": "0", "melee_animation": "5540", "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "5542", - "name": "Thrantax the Mighty", - "defence_level": "50", - "safespot": null, - "lifepoints": "142", - "strength_level": "50", - "id": "238", "range_level": "1", - "attack_level": "50" + "respawn_delay": "60", + "safespot": null, + "strength_level": "50", + "weakness": "7" }, { + "id": "239", + "name": "Sir Lancelot" + }, + { + "id": "240", + "name": "Sir Gawain" + }, + { + "id": "241", + "name": "Sir Kay" + }, + { + "id": "242", + "name": "Sir Bedivere" + }, + { + "id": "243", + "name": "Sir Tristram" + }, + { + "id": "244", + "name": "Sir Pelleas" + }, + { + "id": "245", + "name": "Sir Lucan" + }, + { + "id": "246", + "name": "Teapotspout", "examine": "Specialist meat transporter.", + "attack_level": "1", + "death_animation": "2301", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "2301", - "name": "Teapotspout", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "246", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { - "death_animation": "6490", + "id": "247", "name": "Sir Mordred", + "attack_level": "1", + "death_animation": "6490", + "defence_animation": "6488", "defence_level": "1", - "safespot": null, "lifepoints": "50", "melee_animation": "6489", - "strength_level": "1", - "id": "247", "range_level": "1", "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "6488" + "safespot": null, + "strength_level": "1" }, { + "id": "248", + "name": "Morgan Le Faye" + }, + { + "id": "249", + "name": "Merlin" + }, + { + "id": "250", + "name": "The Lady of the Lake" + }, + { + "id": "251", + "name": "King Arthur", "examine": "Legendary King of the Britons.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "King Arthur", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "251", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" + }, + { + "id": "252", + "name": "Beggar" }, { - "examine": "It's one of General Khazard's guards.", - "melee_animation": "395", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "397", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Khazard Guard", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", "id": "253", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "He's been guarding the tavern for a bit too long.", + "name": "Khazard Guard", + "examine": "It's one of General Khazard's guards.", + "attack_level": "22", + "attack_speed": "6", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "397", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", "melee_animation": "395", "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "6", + "range_level": "1", "respawn_delay": "60", - "defence_animation": "397", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Khazard Guard", - "defence_level": "22", "safespot": null, - "lifepoints": "31", "strength_level": "22", + "weakness": "6" + }, + { "id": "254", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "His armour indicates he's a Khazard Guard.", + "name": "Khazard Guard", + "examine": "He's been guarding the tavern for a bit too long.", + "attack_level": "22", + "attack_speed": "6", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "397", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", "melee_animation": "395", "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "6", + "range_level": "1", "respawn_delay": "60", - "defence_animation": "397", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Khazard Guard", - "defence_level": "22", "safespot": null, - "lifepoints": "31", "strength_level": "22", + "weakness": "6" + }, + { "id": "255", - "range_level": "1", - "attack_level": "22" - }, - { + "name": "Khazard Guard", "examine": "His armour indicates he's a Khazard Guard.", + "attack_level": "22", + "attack_speed": "6", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "397", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", "melee_animation": "395", "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "6", + "range_level": "1", "respawn_delay": "60", - "defence_animation": "397", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Khazard Guard", - "defence_level": "22", "safespot": null, - "lifepoints": "31", "strength_level": "22", + "weakness": "6" + }, + { "id": "256", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "He takes the slaves to the arena. He rarely takes them back..", + "name": "Khazard Guard", + "examine": "His armour indicates he's a Khazard Guard.", + "attack_level": "22", + "attack_speed": "6", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "397", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", "melee_animation": "395", "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "397", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Khazard Guard", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "257", "range_level": "1", - "attack_level": "22" + "respawn_delay": "60", + "safespot": null, + "strength_level": "22", + "weakness": "6" }, { + "id": "257", + "name": "Khazard Guard", + "examine": "He takes the slaves to the arena. He rarely takes them back..", + "attack_level": "22", + "attack_speed": "6", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "397", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "395", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "22", + "weakness": "6" + }, + { + "id": "258", + "name": "General Khazard", "examine": "He looks really nasty. Smells bad too.", + "attack_level": "75", + "attack_speed": "4", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "7050", + "defence_level": "80", + "lifepoints": "170", + "magic_animation": "0", "melee_animation": "7049", "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "4", + "range_level": "1", "respawn_delay": "60", - "defence_animation": "7050", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "General Khazard", - "defence_level": "80", "safespot": null, - "lifepoints": "170", "strength_level": "78", - "id": "258", - "range_level": "1", - "attack_level": "75" + "weakness": "6" }, { - "examine": "A tough looking barman.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "397", - "weakness": "6", - "magic_animation": "0", - "death_animation": "0", - "name": "Khazard barman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", "id": "259", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A slave fighter. He looks mistreated and weak.", + "name": "Khazard barman", + "examine": "A tough looking barman.", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "397", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fightslave", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "262", "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She looks wealthy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Lady Servil", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "264", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A young squire. He looks worse for wear.", - "magic_animation": "0", - "death_animation": "0", - "name": "Jeremy Servil", - "defence_level": "0", - "safespot": null, - "lifepoints": "10", - "strength_level": "0", - "id": "265", - "clue_level": "0", - "range_level": "0", - "attack_level": "0" - }, - { - "examine": "A young squire. He looks worse for wear.", - "magic_animation": "0", - "death_animation": "0", - "name": "Jeremy Servil", - "defence_level": "0", - "safespot": null, - "lifepoints": "10", - "strength_level": "0", - "id": "266", - "clue_level": "0", - "range_level": "0", - "attack_level": "0" - }, - { - "examine": "Jeremy father, Sir Servil.", - "magic_animation": "0", - "death_animation": "0", - "name": "Justin Servil", - "defence_level": "0", - "safespot": null, - "lifepoints": "10", - "strength_level": "0", - "id": "267", - "clue_level": "0", - "range_level": "0", - "attack_level": "0" - }, - { - "examine": "A scruffy looking chap.", - "magic_animation": "0", - "death_animation": "0", - "name": "Local", - "defence_level": "0", - "safespot": null, - "lifepoints": "10", - "strength_level": "0", - "id": "268", - "clue_level": "0", - "range_level": "0", - "attack_level": "0" - }, - { - "melee_animation": "6581", "respawn_delay": "60", - "defence_animation": "6578", - "death_animation": "6576", - "name": "Bouncer", - "defence_level": "120", "safespot": null, - "lifepoints": "116", - "strength_level": "120", - "id": "269", - "aggressive": "true", - "range_level": "1", - "attack_level": "120" + "strength_level": "1", + "weakness": "6" }, { + "id": "260", + "name": "Kelvin" + }, + { + "id": "261", + "name": "Joe" + }, + { + "id": "262", + "name": "Fightslave", + "examine": "A slave fighter. He looks mistreated and weak.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "263", + "name": "Hengrad" + }, + { + "id": "264", + "name": "Lady Servil", + "examine": "She looks wealthy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "265", + "name": "Jeremy Servil", + "examine": "A young squire. He looks worse for wear.", + "attack_level": "0", + "clue_level": "0", + "death_animation": "0", + "defence_level": "0", + "lifepoints": "10", + "magic_animation": "0", + "range_level": "0", + "safespot": null, + "strength_level": "0" + }, + { + "id": "266", + "name": "Jeremy Servil", + "examine": "A young squire. He looks worse for wear.", + "attack_level": "0", + "clue_level": "0", + "death_animation": "0", + "defence_level": "0", + "lifepoints": "10", + "magic_animation": "0", + "range_level": "0", + "safespot": null, + "strength_level": "0" + }, + { + "id": "267", + "name": "Justin Servil", + "examine": "Jeremy father, Sir Servil.", + "attack_level": "0", + "clue_level": "0", + "death_animation": "0", + "defence_level": "0", + "lifepoints": "10", + "magic_animation": "0", + "range_level": "0", + "safespot": null, + "strength_level": "0" + }, + { + "id": "268", + "name": "Local", + "examine": "A scruffy looking chap.", + "attack_level": "0", + "clue_level": "0", + "death_animation": "0", + "defence_level": "0", + "lifepoints": "10", + "magic_animation": "0", + "range_level": "0", + "safespot": null, + "strength_level": "0" + }, + { + "id": "269", + "name": "Bouncer", + "aggressive": "true", + "attack_level": "120", + "death_animation": "6576", + "defence_animation": "6578", + "defence_level": "120", + "lifepoints": "116", + "melee_animation": "6581", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "120" + }, + { + "id": "270", + "name": "Khazard Ogre", "examine": "Khazard's strongest ogre warrior.", + "aggressive": "true", + "attack_level": "46", + "attack_speed": "6", + "bonuses": "22,22,22,0,0,0,0,0,0,0,0,20,0,0,0", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "46", + "lifepoints": "65", + "magic_animation": "359", + "magic_level": "1", "melee_animation": "359", "range_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "25", - "defence_animation": "360", - "magic_animation": "359", - "death_animation": "361", - "name": "Khazard Ogre", - "defence_level": "46", - "safespot": null, - "lifepoints": "65", - "strength_level": "46", - "id": "270", - "aggressive": "true", - "bonuses": "22,22,22,0,0,0,0,0,0,0,0,20,0,0,0", "range_level": "1", - "attack_level": "46" + "respawn_delay": "25", + "safespot": null, + "strength_level": "46" }, { + "id": "271", + "name": "Khazard Scorpion", "examine": "A large angry scorpion", + "aggressive": "true", + "attack_level": "27", + "combat_audio": "3611,3612,3610", + "death_animation": "6256", + "defence_animation": "0", + "defence_level": "36", + "lifepoints": "51", + "magic_animation": "0", "melee_animation": "6254", "range_animation": "0", - "combat_audio": "3611,3612,3610", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "6256", - "name": "Khazard Scorpion", - "defence_level": "36", - "safespot": null, - "lifepoints": "51", - "strength_level": "27", - "id": "271", - "aggressive": "true", "range_level": "36", - "attack_level": "27" + "safespot": null, + "strength_level": "27", + "weakness": "2" }, { + "id": "272", + "name": "Lucien", "examine": "He walks with a slight limp.", + "aggressive": "", + "attack_level": "12", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "10", + "lifepoints": "17", + "magic_animation": "0", + "magic_level": "1", "melee_animation": "401", "range_animation": "0", - "combat_audio": "511,513,512", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "404", - "weakness": "", - "magic_animation": "0", - "death_animation": "836", - "name": "Lucien", - "defence_level": "10", - "safespot": null, - "lifepoints": "17", - "strength_level": "11", - "id": "272", - "aggressive": "", "range_level": "1", - "attack_level": "12" + "respawn_delay": "30", + "safespot": null, + "strength_level": "11", + "weakness": "" }, { + "id": "273", + "name": "Lucien", "examine": "He walks with a slight limp.", + "aggressive": "", + "attack_level": "12", + "combat_audio": "", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "", + "lifepoints": "", + "magic_animation": "", "melee_animation": "", "range_animation": "", - "combat_audio": "", - "defence_animation": "404", - "weakness": "", - "magic_animation": "", - "death_animation": "836", - "name": "Lucien", - "defence_level": "", - "safespot": null, - "lifepoints": "", - "strength_level": "", - "id": "273", - "aggressive": "", "range_level": "", - "attack_level": "12" + "safespot": null, + "strength_level": "", + "weakness": "" }, { - "examine": "A guard who has devoted their life to Armadyl.", - "range_animation": "0", - "melee_animation": "401", - "combat_audio": "511,513,512", - "respawn_delay": "60", - "defence_animation": "404", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Guardian of Armadyl", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", "id": "274", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "A guard who has devoted their life to Armadyl.", - "range_animation": "0", - "melee_animation": "401", - "combat_audio": "511,513,512", - "respawn_delay": "60", - "defence_animation": "404", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", "name": "Guardian of Armadyl", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "275", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Intimidating!", - "start_gfx": "99", - "combat_style": "2", - "start_height": "96", - "melee_animation": "0", - "range_animation": "0", + "examine": "A guard who has devoted their life to Armadyl.", + "attack_level": "30", "combat_audio": "511,513,512", - "attack_speed": "8", - "magic_level": "62", - "end_gfx": "101", - "respawn_delay": "60", - "defence_animation": "425", - "weakness": "3", - "magic_animation": "711", "death_animation": "836", - "name": "Fire Warrior of Lesarkus", - "defence_level": "78", + "defence_animation": "404", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "401", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", "safespot": null, - "lifepoints": "59", - "strength_level": "78", + "strength_level": "30", + "weakness": "8" + }, + { + "id": "275", + "name": "Guardian of Armadyl", + "examine": "A guard who has devoted their life to Armadyl.", + "attack_level": "30", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "401", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "8" + }, + { + "id": "276", + "name": "Winelda" + }, + { "id": "277", - "range_level": "1", + "name": "Fire Warrior of Lesarkus", + "examine": "Intimidating!", + "attack_level": "55", + "attack_speed": "8", + "combat_audio": "511,513,512", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "78", + "end_gfx": "101", + "lifepoints": "59", + "magic_animation": "711", + "magic_level": "62", + "melee_animation": "0", "projectile": "127", - "attack_level": "55" + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "99", + "start_height": "96", + "strength_level": "78", + "weakness": "3" }, { - "examine": "Lumbridge Castle's head cook.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cook", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", "id": "278", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An old monk.", + "name": "Cook", + "examine": "Lumbridge Castle's head cook.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brother Omad", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { "id": "279", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An old drunk monk.", + "name": "Brother Omad", + "examine": "An old monk.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brother Cedric", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "280", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "280", + "name": "Brother Cedric", + "examine": "An old drunk monk.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "281", + "name": "Monk", "examine": "An Ardougne Monk.", + "attack_level": "4", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "4", + "lifepoints": "5", + "magic_animation": "0", "melee_animation": "422", "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Monk", - "defence_level": "4", - "safespot": null, - "lifepoints": "5", - "strength_level": "4", - "id": "281", "range_level": "1", - "attack_level": "4" + "safespot": null, + "strength_level": "4", + "weakness": "9" }, { + "id": "282", + "name": "Thief", "examine": "A dastardly blanket thief.", + "attack_level": "15", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "15", + "lifepoints": "21", + "magic_animation": "0", "melee_animation": "386", "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Thief", - "defence_level": "15", - "safespot": null, - "lifepoints": "21", - "strength_level": "15", - "id": "282", "range_level": "1", - "attack_level": "15" + "respawn_delay": "60", + "safespot": null, + "strength_level": "15", + "weakness": "9" }, { + "id": "283", + "name": "Head Thief", "examine": "The head of the treacherous blanket stealing gang.", + "attack_level": "18", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "18", + "lifepoints": "25", + "magic_animation": "0", "melee_animation": "390", "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Head Thief", - "defence_level": "18", + "range_level": "1", "safespot": null, - "lifepoints": "25", "strength_level": "18", - "id": "283", - "range_level": "1", - "attack_level": "18" + "weakness": "9" }, { - "examine": "A dwarf smith. Quite handy with a hammer.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Doric", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", "id": "284", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She doesn't look too happy.", + "name": "Doric", + "examine": "A dwarf smith. Quite handy with a hammer.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Veronica", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "285", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "285", + "name": "Veronica", + "examine": "She doesn't look too happy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "286", + "name": "Professor Oddenstein", + "examine": "A mad scientist if I ever saw one!" + }, + { + "id": "287", + "name": "Ernest" + }, + { + "id": "288", + "name": "Chicken", "examine": "Yep. Definitely a chicken.", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "355,357,356", + "death_animation": "5389", + "defence_animation": "5388", + "defence_level": "1", + "lifepoints": "3", + "magic_animation": "5387", "melee_animation": "5387", "range_animation": "5387", - "combat_audio": "355,357,356", - "attack_speed": "6", + "range_level": "1", "respawn_delay": "18", - "defence_animation": "5388", - "magic_animation": "5387", - "death_animation": "5389", - "name": "Chicken", - "defence_level": "1", "safespot": null, - "lifepoints": "3", - "strength_level": "1", - "id": "288", - "range_level": "1", - "attack_level": "1" + "strength_level": "1" }, { - "examine": "An official of Ardougne.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Councillor Halgrive", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", "id": "289", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A serious-looking doctor.", + "name": "Councillor Halgrive", + "examine": "An official of Ardougne.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Doctor Orbon", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { "id": "290", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A farmer who's seen happier times.", + "name": "Doctor Orbon", + "examine": "A serious-looking doctor.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Farmer Brumty", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { "id": "291", + "name": "Farmer Brumty", + "examine": "A farmer who's seen happier times.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" + }, + { + "id": "292", + "name": "Guard" }, { - "examine": "He tries to keep order around here.", - "melee_animation": "7218", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "7219", - "name": "Guard", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", "id": "296", - "clue_level": "1", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He tries to keep order around here.", - "melee_animation": "7218", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "7220", "name": "Guard", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "297", - "clue_level": "1", - "range_level": "1", - "attack_level": "25" - }, - { "examine": "He tries to keep order around here.", - "melee_animation": "7218", - "range_animation": "0", - "combat_audio": "511,513,512", + "attack_level": "25", "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", + "clue_level": "1", + "combat_audio": "511,513,512", "death_animation": "7219", - "name": "Guard", + "defence_animation": "0", "defence_level": "25", - "safespot": null, "lifepoints": "35", - "strength_level": "25", - "id": "298", - "clue_level": "1", + "magic_animation": "0", + "melee_animation": "7218", + "range_animation": "0", "range_level": "1", - "attack_level": "25" + "respawn_delay": "60", + "safespot": null, + "strength_level": "25", + "weakness": "7" }, { + "id": "297", + "name": "Guard", "examine": "He tries to keep order around here.", + "attack_level": "25", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "7220", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "7218", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "25", + "weakness": "7" + }, + { + "id": "298", + "name": "Guard", + "examine": "He tries to keep order around here.", + "attack_level": "25", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "7219", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "7218", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "25", + "weakness": "7" + }, + { + "id": "299", + "name": "Guard", + "examine": "He tries to keep order around here.", + "attack_level": "25", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "7213", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", "melee_animation": "583", "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", + "range_level": "1", "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "7213", - "name": "Guard", - "defence_level": "25", "safespot": null, - "lifepoints": "35", "strength_level": "25", - "id": "299", - "clue_level": "1", - "range_level": "1", - "attack_level": "25" + "weakness": "7" + }, + { + "id": "300", + "name": "Sedridor", + "examine": "Chief of research at Wizards Tower." + }, + { + "id": "301", + "name": "Twig" + }, + { + "id": "302", + "name": "Hadley" + }, + { + "id": "303", + "name": "Gerald" + }, + { + "id": "304", + "name": "Almera" + }, + { + "id": "305", + "name": "Hudon" + }, + { + "id": "306", + "name": "Golrie" }, { - "examine": "An old motherly witch with a curious smile and a hooked nose.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Hetty", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", "id": "307", + "name": "Hetty", + "examine": "An old motherly witch with a curious smile and a hooked nose.", "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The man in charge of the fishing guild.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Master fisher", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { "id": "308", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He has a colourful personality.", + "name": "Master fisher", + "examine": "The man in charge of the fishing guild.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Da Vinci", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { + "id": "309", + "name": "Fishing spot" + }, + { + "id": "310", + "name": "Fishing spot" + }, + { + "id": "311", + "name": "Fishing spot" + }, + { + "id": "312", + "name": "Fishing spot" + }, + { + "id": "313", + "name": "Fishing spot" + }, + { + "id": "314", + "name": "Fishing spot" + }, + { + "id": "315", + "name": "Fishing spot" + }, + { + "id": "316", + "name": "Fishing spot" + }, + { + "id": "317", + "name": "Fishing spot" + }, + { + "id": "318", + "name": "Fishing spot" + }, + { + "id": "319", + "name": "Fishing spot" + }, + { + "id": "320", + "name": "Fishing spot" + }, + { + "id": "321", + "name": "Fishing spot" + }, + { + "id": "322", + "name": "Fishing spot" + }, + { + "id": "323", + "name": "Fishing spot", + "examine": "I can see fish swimming in the water." + }, + { + "id": "324", + "name": "Fishing spot" + }, + { + "id": "325", + "name": "Fishing spot" + }, + { + "id": "326", + "name": "Fishing spot" + }, + { + "id": "327", + "name": "Fishing spot" + }, + { + "id": "328", + "name": "Fishing spot" + }, + { + "id": "329", + "name": "Fishing spot" + }, + { + "id": "330", + "name": "Fishing spot" + }, + { + "id": "331", + "name": "Fishing spot" + }, + { + "id": "332", + "name": "Fishing spot" + }, + { + "id": "333", + "name": "Fishing spot" + }, + { + "id": "334", + "name": "Fishing spot" + }, + { + "id": "335", + "name": "Elena", + "examine": "She doesn't look too happy." + }, + { "id": "336", + "name": "Da Vinci", + "examine": "He has a colourful personality.", "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's ready for a bet.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Chancy", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { + "id": "337", + "name": "Da Vinci" + }, + { "id": "338", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's ready for a bet.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", "name": "Chancy", + "examine": "He's ready for a bet.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", "defence_level": "1", - "safespot": null, "lifepoints": "10", - "strength_level": "1", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { "id": "339", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's drunk.", + "name": "Chancy", + "examine": "He's ready for a bet.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Hops", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { "id": "340", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's drunk.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", "name": "Hops", + "examine": "He's drunk.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", "defence_level": "1", - "safespot": null, "lifepoints": "10", - "strength_level": "1", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { "id": "341", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She looks rather concerned.", + "name": "Hops", + "examine": "He's drunk.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guidor's wife", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { "id": "342", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He tries to keep order around here.", + "name": "Guidor's wife", + "examine": "She looks rather concerned.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { + "id": "343", + "name": "Guidor" + }, + { "id": "344", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { + "name": "Guard", "examine": "He tries to keep order around here.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { "id": "345", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "346", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "", - "combat_audio": "511,513,512", - "attack_speed": "4", - "defence_animation": "404", - "weakness": "", - "magic_animation": "", - "death_animation": "836", - "name": "Man", - "defence_level": "1", - "safespot": null, - "lifepoints": "13", - "strength_level": "1", - "id": "351", - "clue_level": "", - "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "2" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "", - "combat_audio": "511,506,505", - "attack_speed": "4", - "respawn_delay": "50", - "defence_animation": "404", - "weakness": "", - "magic_animation": "", - "death_animation": "836", - "name": "Woman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "352", - "clue_level": "", - "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "2" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "", - "combat_audio": "511,506,505", - "attack_speed": "4", - "respawn_delay": "50", - "defence_animation": "404", - "weakness": "", - "magic_animation": "", - "death_animation": "836", - "name": "Woman", - "defence_level": "1", - "safespot": null, - "lifepoints": "13", - "strength_level": "1", - "id": "353", - "clue_level": "", - "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "2" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "", - "combat_audio": "511,506,505", - "attack_speed": "4", - "respawn_delay": "50", - "defence_animation": "404", - "weakness": "", - "magic_animation": "", - "death_animation": "836", - "name": "Woman", - "defence_level": "1", - "safespot": null, - "lifepoints": "13", - "strength_level": "1", - "id": "354", - "clue_level": "", - "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "2" - }, - { - "examine": "A child of West Ardougne.", - "melee_animation": "", - "range_animation": "", - "magic_level": "", - "defence_animation": "", - "poison_amount": "", - "magic_animation": "", - "death_animation": "", - "name": "Child", - "defence_level": "", - "safespot": null, - "movement_radius": "", - "lifepoints": "", - "strength_level": "", - "id": "355", - "range_level": "", - "attack_level": "" - }, - { - "examine": "A child of West Ardougne.", - "melee_animation": "", - "range_animation": "", - "magic_level": "", - "defence_animation": "", - "poison_amount": "", - "magic_animation": "", - "death_animation": "", - "name": "Child", - "defence_level": "", - "safespot": null, - "movement_radius": "", - "lifepoints": "", - "strength_level": "", - "id": "356", - "range_level": "", - "attack_level": "" - }, - { - "examine": "A holy man.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Priest", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "358", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "magic_level": "6", - "respawn_delay": "18", - "defence_animation": "404", - "weakness": "9", - "magic_animation": "422", - "death_animation": "9055", - "name": "Man", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "2", - "id": "359", - "clue_level": "0", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "", - "combat_audio": "511,506,505", - "attack_speed": "4", - "respawn_delay": "50", - "defence_animation": "404", - "weakness": "", - "magic_animation": "", - "death_animation": "836", - "name": "Woman", - "defence_level": "1", - "safespot": null, - "lifepoints": "13", - "strength_level": "1", - "id": "360", - "clue_level": "", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "2" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,506,505", - "attack_speed": "4", - "respawn_delay": "50", - "defence_animation": "404", - "weakness": "", - "magic_animation": "", - "death_animation": "836", - "name": "Woman", - "defence_level": "10", - "safespot": null, - "lifepoints": "13", - "strength_level": "10", - "id": "361", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "", - "combat_audio": "511,506,505", - "attack_speed": "4", - "respawn_delay": "50", - "defence_animation": "404", - "weakness": "", - "magic_animation": "", - "death_animation": "836", - "name": "Woman", - "defence_level": "2", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "362", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "", - "combat_audio": "511,506,505", - "attack_speed": "4", - "respawn_delay": "50", - "defence_animation": "404", - "weakness": "", - "magic_animation": "", - "death_animation": "836", - "name": "Woman", - "defence_level": "10", - "safespot": null, - "lifepoints": "23", - "strength_level": "10", - "id": "363", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "King Lathas of East Ardougne.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "King Lathas", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "364", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A holy warrior.", - "name": "Paladin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "365", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Smells very chemically...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Chemist", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "367", - "range_level": "1", - "attack_level": "1" - }, - { "examine": "He tries to keep order around here.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "368", + "attack_level": "1", "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She's quite a looker!", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Nurse Sarah", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "373", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { + "id": "346", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "347", + "name": "Mourner", + "examine": "A mourner, or plague healer.", + "attack_level": "8", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "836", + "defence_level": "8", + "lifepoints": "18", + "melee_animation": "428", + "strength_level": "8" + }, + { + "id": "348", + "name": "Mourner", + "examine": "A mourner, or plague healer.", + "attack_level": "19", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "836", + "defence_level": "19", + "lifepoints": "30", + "melee_animation": "422", + "strength_level": "19" + }, + { + "id": "349", + "name": "Kilron" + }, + { + "id": "350", + "name": "Omart" + }, + { + "id": "351", + "name": "Man", + "examine": "One of Gielinor's many citizens.", + "attack_level": "2", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0", + "clue_level": "", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "13", + "magic_animation": "", + "melee_animation": "422", + "range_animation": "", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "" + }, + { + "id": "352", + "name": "Woman", + "examine": "One of Gielinor's many citizens.", + "attack_level": "2", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0", + "clue_level": "", + "combat_audio": "511,506,505", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "", + "melee_animation": "422", + "range_animation": "", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "1", + "weakness": "" + }, + { + "id": "353", + "name": "Woman", + "examine": "One of Gielinor's many citizens.", + "attack_level": "2", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0", + "clue_level": "", + "combat_audio": "511,506,505", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "13", + "magic_animation": "", + "melee_animation": "422", + "range_animation": "", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "1", + "weakness": "" + }, + { + "id": "354", + "name": "Woman", + "examine": "One of Gielinor's many citizens.", + "attack_level": "2", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,1,1,1,0,0,0,0,0,0,0", + "clue_level": "", + "combat_audio": "511,506,505", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "13", + "magic_animation": "", + "melee_animation": "422", + "range_animation": "", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "1", + "weakness": "" + }, + { + "id": "355", + "name": "Child", + "examine": "A child of West Ardougne.", + "attack_level": "", + "death_animation": "", + "defence_animation": "", + "defence_level": "", + "lifepoints": "", + "magic_animation": "", + "magic_level": "", + "melee_animation": "", + "movement_radius": "", + "poison_amount": "", + "range_animation": "", + "range_level": "", + "safespot": null, + "strength_level": "" + }, + { + "id": "356", + "name": "Child", + "examine": "A child of West Ardougne.", + "attack_level": "", + "death_animation": "", + "defence_animation": "", + "defence_level": "", + "lifepoints": "", + "magic_animation": "", + "magic_level": "", + "melee_animation": "", + "movement_radius": "", + "poison_amount": "", + "range_animation": "", + "range_level": "", + "safespot": null, + "strength_level": "" + }, + { + "id": "357", + "name": "Mourner", + "examine": "A mourner, or plague healer.", + "attack_level": "14", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "836", + "defence_level": "14", + "lifepoints": "24", + "melee_animation": "428", + "strength_level": "14" + }, + { + "id": "358", + "name": "Priest", + "examine": "A holy man.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "359", + "name": "Man", + "examine": "One of Gielinor's many citizens.", + "attack_level": "5", + "attack_speed": "4", + "clue_level": "0", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "422", + "magic_level": "6", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "respawn_delay": "18", + "safespot": null, + "strength_level": "2", + "weakness": "9" + }, + { + "id": "360", + "name": "Woman", + "examine": "One of Gielinor's many citizens.", + "attack_level": "2", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "", + "combat_audio": "511,506,505", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "13", + "magic_animation": "", + "melee_animation": "422", + "range_animation": "", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "1", + "weakness": "" + }, + { + "id": "361", + "name": "Woman", + "examine": "One of Gielinor's many citizens.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "511,506,505", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "10", + "lifepoints": "13", + "magic_animation": "", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "10", + "weakness": "" + }, + { + "id": "362", + "name": "Woman", + "examine": "One of Gielinor's many citizens.", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "511,506,505", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "2", + "lifepoints": "10", + "magic_animation": "", + "melee_animation": "422", + "range_animation": "", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "1", + "weakness": "" + }, + { + "id": "363", + "name": "Woman", + "examine": "One of Gielinor's many citizens.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "511,506,505", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "10", + "lifepoints": "23", + "magic_animation": "", + "melee_animation": "422", + "range_animation": "", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "10", + "weakness": "" + }, + { + "id": "364", + "name": "King Lathas", + "examine": "King Lathas of East Ardougne.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "365", + "name": "Paladin", + "examine": "A holy warrior.", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "366", + "name": "Jerico" + }, + { + "id": "367", + "name": "Chemist", + "examine": "Smells very chemically...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "368", + "name": "Guard", + "examine": "He tries to keep order around here.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "369", + "name": "Mourner", + "examine": "A mourner, or plague healer.", + "attack_level": "19", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "836", + "defence_level": "19", + "lifepoints": "30", + "melee_animation": "422", + "strength_level": "19" + }, + { + "id": "370", + "name": "Mourner (boss)", + "examine": "A mourner, or plague healer.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,3,2,4,0,0,0,0,0,0,0", + "death_animation": "836", + "defence_level": "10", + "lifepoints": "19", + "melee_animation": "428", + "strength_level": "10" + }, + { + "id": "371", + "name": "Mourner", + "examine": "A mourner, or plague healer.", + "attack_level": "8", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "836", + "defence_level": "8", + "lifepoints": "20", + "melee_animation": "422", + "strength_level": "8" + }, + { + "id": "372", + "name": "Mourner", + "examine": "A mourner, or plague healer." + }, + { + "id": "373", + "name": "Nurse Sarah", + "examine": "She's quite a looker!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "374", + "name": "Ogre", "examine": "Big, ugly, and smelly.", + "aggressive": "true", + "attack_level": "27", + "attack_speed": "6", + "bonuses": "15,15,10,20,40,15,50,50,50,20,50,58,0,0,0", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "27", + "lifepoints": "60", + "magic_animation": "359", + "magic_level": "27", "melee_animation": "359", "range_animation": "359", - "attack_speed": "6", - "magic_level": "27", - "respawn_delay": "25", - "defence_animation": "360", - "weakness": "8", - "magic_animation": "359", - "death_animation": "361", - "name": "Ogre", - "defence_level": "27", - "safespot": null, - "lifepoints": "60", - "strength_level": "27", - "id": "374", - "aggressive": "true", - "bonuses": "15,15,10,20,40,15,50,50,50,20,50,58,0,0,0", "range_level": "27", - "attack_level": "27" + "respawn_delay": "25", + "safespot": null, + "strength_level": "27", + "weakness": "8" }, { - "examine": "A pirate. Smells of brine and brimstone. Also vomit.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "498,500,499", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Redbeard Frank", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", "id": "375", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Inspects people's packages.", + "name": "Redbeard Frank", + "examine": "A pirate. Smells of brine and brimstone. Also vomit.", + "attack_level": "1", + "combat_audio": "498,500,499", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Customs officer", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { + "id": "376", + "name": "Captain Tobias", + "examine": "An old sea dog." + }, + { + "id": "377", + "name": "Seaman Lorris", + "examine": "A young sailor." + }, + { + "id": "378", + "name": "Seaman Thresnor", + "examine": "A young sailor." + }, + { + "id": "379", + "name": "Luthas", + "examine": "Owner of the banana plantation." + }, + { "id": "380", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A dwarf who looks after the mining guild.", + "name": "Customs officer", + "examine": "Inspects people's packages.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "0", - "name": "Dwarf", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { + "id": "381", + "name": "Dwarf" + }, + { "id": "382", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not very civilised looking.", + "name": "Dwarf", + "examine": "A dwarf who looks after the mining guild.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Barbarian guard", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "slayer_exp": "16", + "strength_level": "1" + }, + { + "id": "383", + "name": "Stankers" + }, + { "id": "384", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks vicious!", + "name": "Barbarian guard", + "examine": "Not very civilised looking.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "combat_audio": "3611,3612,3610", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Kharid Scorpion", - "defence_level": "1", + "range_level": "1", "safespot": null, - "lifepoints": "10", - "strength_level": "1", + "strength_level": "1" + }, + { "id": "385", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks vicious!", "name": "Kharid Scorpion", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "3611,3612,3610", - "strength_level": "1", - "id": "386", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { "examine": "Looks vicious!", - "name": "Kharid Scorpion", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", + "attack_level": "1", "combat_audio": "3611,3612,3610", - "strength_level": "1", - "id": "387", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "Could do with a shave...", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "slayer_exp": "25", - "magic_animation": "0", - "death_animation": "0", - "name": "Seer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "388", "range_level": "1", - "attack_level": "1" + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" }, { + "id": "386", + "name": "Kharid Scorpion", + "examine": "Looks vicious!", + "attack_level": "1", + "combat_audio": "3611,3612,3610", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "387", + "name": "Kharid Scorpion", + "examine": "Looks vicious!", + "attack_level": "1", + "combat_audio": "3611,3612,3610", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "388", + "name": "Seer", + "examine": "Could do with a shave...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "389", + "name": "Thormac", + "examine": "Nice hat." + }, + { + "id": "390", + "name": "Big fish", "examine": "A brightly coloured game bird.", + "attack_level": "3", + "death_animation": "2373", + "defence_animation": "0", + "defence_level": "3", + "lifepoints": "1", + "magic_animation": "0", "melee_animation": "2371", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "2373", - "name": "Big fish", - "defence_level": "3", - "safespot": null, - "lifepoints": "1", - "strength_level": "3", - "id": "390", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "Likes fish... hates people.", - "melee_animation": "284", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "285", - "magic_animation": "0", - "death_animation": "287", - "name": "River troll", - "defence_level": "32", - "safespot": null, - "lifepoints": "35", - "strength_level": "32", - "id": "392", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "32" - }, - { - "examine": "Beefy.", - "melee_animation": "5849", - "range_animation": "5849", - "combat_audio": "369,371,370", - "attack_speed": "5", - "defence_animation": "5850", - "weakness": "8", - "slayer_exp": "8", - "magic_animation": "5849", - "death_animation": "5851", - "name": "Cow", - "defence_level": "1", - "safespot": null, - "lifepoints": "8", - "strength_level": "1", - "id": "397", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Legends Guild guard; he protects the entrance to the Legends Guild.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Legends guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "398", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He deals in exotic types of wood.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Jungle forester", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "401", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She deals in exotic types of wood.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Jungle forester", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "402", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Insects buzzing around.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "819,821,820", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Swarm", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "411", - "aggressive": "false", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An annoying flappy thing.", - "melee_animation": "4915", - "range_animation": "4915", - "attack_speed": "5", - "magic_level": "10", - "respawn_delay": "30", - "defence_animation": "4916", - "weakness": "4", - "slayer_exp": "8", - "death_animation": "4918", - "name": "Bat", - "defence_level": "2", - "safespot": null, - "lifepoints": "8", - "strength_level": "1", - "id": "412", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Dead man walking.", - "melee_animation": "5578", - "range_animation": "5578", - "combat_audio": "931,923,922", - "attack_speed": "5", - "magic_level": "5", - "defence_animation": "5574", - "magic_animation": "5578", - "death_animation": "5575", - "name": "Zombie", - "defence_level": "20", - "safespot": null, - "lifepoints": "14", - "strength_level": "5", - "id": "419", - "range_level": "5", - "attack_level": "5" - }, - { - "examine": "Dead man walking.", - "melee_animation": "5578", - "range_animation": "5578", - "combat_audio": "931,923,922", - "attack_speed": "5", - "magic_level": "10", - "defence_animation": "5574", - "magic_animation": "5578", - "death_animation": "5575", - "name": "Zombie", - "defence_level": "40", - "safespot": null, - "lifepoints": "14", - "strength_level": "10", - "id": "420", - "range_level": "10", - "attack_level": "10" - }, - { - "examine": "Dead man walking.", - "melee_animation": "5578", - "range_animation": "5578", - "combat_audio": "931,923,922", - "attack_speed": "5", - "magic_level": "15", - "defence_animation": "5574", - "magic_animation": "5578", - "death_animation": "5575", - "name": "Zombie", - "defence_level": "50", - "safespot": null, - "lifepoints": "30", - "strength_level": "15", - "id": "421", - "range_level": "15", - "attack_level": "15" - }, - { - "examine": "Dead man walking.", - "melee_animation": "5578", - "range_animation": "5578", - "combat_audio": "931,923,922", - "attack_speed": "5", - "magic_level": "45", - "defence_animation": "5574", - "magic_animation": "5578", - "death_animation": "5575", - "name": "Zombie", - "defence_level": "60", - "safespot": null, - "lifepoints": "79", - "strength_level": "45", - "id": "422", - "range_level": "45", - "attack_level": "45" - }, - { - "examine": "Dead man walking.", - "melee_animation": "5578", - "range_animation": "5578", - "combat_audio": "931,923,922", - "attack_speed": "5", - "magic_level": "35", - "defence_animation": "5574", - "magic_animation": "5578", - "death_animation": "5575", - "name": "Zombie", - "defence_level": "70", - "safespot": null, - "lifepoints": "120", - "strength_level": "45", - "id": "423", - "range_level": "45", - "attack_level": "45" - }, - { - "examine": "Dead man walking.", - "melee_animation": "5578", - "range_animation": "5578", - "combat_audio": "931,923,922", - "attack_speed": "5", - "magic_level": "45", - "defence_animation": "5574", - "magic_animation": "5578", - "death_animation": "5575", - "name": "Zombie", - "defence_level": "90", - "safespot": null, - "lifepoints": "159", - "strength_level": "45", - "id": "424", - "range_level": "45", - "attack_level": "45" - }, - { - "examine": "Dead but not gone.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,439,438", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Shade", - "defence_level": "7", - "safespot": null, - "lifepoints": "8", - "strength_level": "6", - "id": "425", - "range_level": "1", - "attack_level": "6" - }, - { - "examine": "Dead but not gone.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,439,438", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Shade", - "defence_level": "30", - "safespot": null, - "lifepoints": "17", - "strength_level": "20", - "id": "426", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "Dead but not gone.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,439,438", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Shade", - "defence_level": "45", - "safespot": null, - "lifepoints": "28", - "strength_level": "43", - "id": "427", - "range_level": "1", - "attack_level": "43" - }, - { - "examine": "Dead but not gone.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,439,438", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "4.2", - "magic_animation": "0", - "death_animation": "836", - "name": "Shade", - "defence_level": "80", - "safespot": null, - "lifepoints": "42", - "strength_level": "74", - "id": "428", - "range_level": "1", - "attack_level": "74" - }, - { - "examine": "Dead but not gone.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,439,438", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "4.2", - "magic_animation": "0", - "death_animation": "836", - "name": "Shade", - "defence_level": "130", - "safespot": null, - "lifepoints": "170", - "strength_level": "90", - "id": "429", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "130" - }, - { - "examine": "Dead but not gone.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Shade", - "defence_level": "105", - "safespot": null, - "lifepoints": "100", - "strength_level": "150", - "id": "430", - "range_level": "1", - "attack_level": "150" - }, - { - "examine": "I hope he's not dead!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fallen Man", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "435", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Entrance clerk for the Brimhaven Agility Arena.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "498,500,499", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cap'n Izzy No-Beard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "437", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very angry nymph.", - "melee_animation": "94", - "combat_audio": "498,500,499", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "95", - "death_animation": "97", - "name": "Tree spirit", - "defence_level": "8", - "safespot": null, - "lifepoints": "25", - "strength_level": "8", - "id": "438", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "8" - }, - { - "examine": "A very angry nymph.", - "melee_animation": "94", - "combat_audio": "498,500,499", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "95", - "death_animation": "97", - "name": "Tree spirit", - "defence_level": "17", - "safespot": null, - "lifepoints": "40", - "strength_level": "17", - "id": "439", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "17" - }, - { - "examine": "A very angry nymph.", - "melee_animation": "94", - "combat_audio": "498,500,499", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "95", - "death_animation": "97", - "name": "Tree spirit", - "defence_level": "38", - "safespot": null, - "lifepoints": "60", - "strength_level": "38", - "id": "440", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "A very angry nymph.", - "melee_animation": "94", - "combat_audio": "498,500,499", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "95", - "death_animation": "97", - "name": "Tree spirit", - "defence_level": "64", - "safespot": null, - "lifepoints": "86", - "strength_level": "64", - "id": "441", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "64" - }, - { - "examine": "A very angry nymph.", - "melee_animation": "94", - "combat_audio": "498,500,499", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "95", - "death_animation": "97", - "name": "Tree spirit", - "defence_level": "100", - "safespot": null, - "lifepoints": "120", - "strength_level": "100", - "id": "442", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "100" - }, - { - "examine": "A very angry nymph.", - "melee_animation": "94", - "combat_audio": "498,500,499", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "95", - "death_animation": "97", - "name": "Tree spirit", - "defence_level": "130", - "safespot": null, - "lifepoints": "170", - "strength_level": "130", - "id": "443", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "130" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "444", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "445", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Overgrown vermin.", - "melee_animation": "4933", - "range_animation": "0", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4934", - "weakness": "8", - "magic_animation": "0", - "death_animation": "4935", - "name": "Giant rat", - "defence_level": "2", - "safespot": null, - "lifepoints": "5", - "strength_level": "5", - "id": "446", - "aggressive": "true", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "I wonder who he's guarding?", - "melee_animation": "401", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Jail guard", - "defence_level": "21", - "safespot": null, - "lifepoints": "32", - "strength_level": "23", - "id": "447", - "aggressive": "true", - "range_level": "1", - "attack_level": "19" - }, - { - "examine": "I wonder who he's guarding?", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Jail guard", - "defence_level": "21", - "safespot": null, - "lifepoints": "32", - "strength_level": "23", - "id": "448", - "aggressive": "true", - "range_level": "1", - "attack_level": "19" - }, - { - "examine": "I wonder who he's guarding?", - "melee_animation": "401", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Jail guard", - "defence_level": "21", - "safespot": null, - "lifepoints": "32", - "strength_level": "23", - "id": "449", - "aggressive": "true", - "range_level": "1", - "attack_level": "19" - }, - { - "examine": "A large well built farmer.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Seth Groats", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "452", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Aargh! It's alive!", - "melee_animation": "390", - "range_animation": "0", - "attack_speed": "5", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Suit of armour", - "defence_level": "9", - "safespot": null, - "lifepoints": "29", - "strength_level": "14", - "id": "453", - "bonuses": "8,8,8,0,0,46,50,46,-12,45,0,10,0,0,0", - "range_level": "1", - "attack_level": "16" - }, - { - "examine": "He seems to be very devout.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Father Aereck", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "456", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eek! A ghost!", - "name": "Restless ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "457", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Very holy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Father Urhney", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "458", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Wizard of the Magic Guild.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Wizard Frumscone", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "460", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Supplier of Magical items.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Magic Store owner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "461", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Head of the Magic Guild.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Wizard Distentor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "462", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a gnome. He looks important.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "King Bolren", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "469", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a tree gnome.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Commander Montai", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "470", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's one of General Khazard's warriors.", - "melee_animation": "401", - "range_animation": "0", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Khazard trooper", - "defence_level": "32", - "safespot": null, - "lifepoints": "45", - "strength_level": "32", - "id": "475", - "range_level": "1", - "attack_level": "32" - }, - { - "examine": "An open eye of World-gorger.", - "magic_level": "5", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "name": "Khazard trooper", - "defence_level": "5", - "safespot": null, - "lifepoints": "11", - "strength_level": "1", - "id": "476", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks real nasty", - "melee_animation": "401", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Khazard warlord", - "defence_level": "38", - "safespot": null, - "lifepoints": "54", - "strength_level": "38", - "id": "477", - "aggressive": "true", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "It's one of General Khazard's commanders.", - "melee_animation": "428", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Khazard commander", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "478", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "It's a tree gnome trooper.", - "melee_animation": "190", - "range_animation": "0", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "196", - "name": "Gnome troop", - "defence_level": "32", - "safespot": null, - "lifepoints": "45", - "strength_level": "24", - "id": "479", - "range_level": "32", - "attack_level": "24" - }, - { - "examine": "It's a gnome who specialises in covert operations.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tracker gnome 1", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "481", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a gnome who specialises in covert operations.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tracker gnome 2", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "482", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a gnome who specialises in covert operations.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tracker gnome 3", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "483", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a young tree gnome.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Local Gnome", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "485", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I guess he wants to be more than just the muscle.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Giant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "487", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A man, learned in the ways of the stars.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Observatory professor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "488", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He doesn't look like he'd trust his own mother.", - "melee_animation": "6199", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6190", - "name": "Goblin guard", - "defence_level": "37", - "safespot": null, - "lifepoints": "43", - "strength_level": "37", - "id": "489", - "range_level": "1", - "attack_level": "32" - }, - { - "examine": "If the mummy is at school", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mummy", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "490", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5540", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5541", - "slayer_exp": "25", - "death_animation": "5542", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "id": "491", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The essence of evil.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Spirit of Scorpius", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "492", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A vicious", - "melee_animation": "6261", - "range_animation": "0", - "combat_audio": "3611,3612,3610", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "6260", - "name": "Grave scorpion", - "defence_level": "7", - "safespot": null, - "lifepoints": "10", - "strength_level": "5", - "id": "493", - "aggressive": "true", - "range_level": "7", - "attack_level": "5" - }, - { - "examine": "He can look after my money.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "494", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Good with money.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "495", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Manages money momentarily.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "498", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He can look after my money.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "499", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A minion of Rashiliyia.", - "melee_animation": "5485", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Undead one", - "defence_level": "32", - "safespot": null, - "lifepoints": "45", - "strength_level": "32", - "id": "502", - "aggressive": "true", - "range_level": "1", - "attack_level": "32" - }, - { - "examine": "A minion of Rashiliyia.", - "melee_animation": "5485", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Undead one", - "defence_level": "33", - "safespot": null, - "lifepoints": "47", - "strength_level": "33", - "id": "503", "range_level": "1", - "attack_level": "33" - }, - { - "examine": "The animated dead; one of Rashiliyia's minions.", - "melee_animation": "5568", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5569", - "name": "Undead one", - "defence_level": "32", "safespot": null, - "lifepoints": "45", - "strength_level": "32", - "id": "504", - "aggressive": "true", - "range_level": "1", - "attack_level": "32" - }, - { - "examine": "The animated dead; one of Rashiliyia's minions.", - "melee_animation": "5571", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5575", - "name": "Undead one", - "defence_level": "33", - "safespot": null, - "lifepoints": "47", - "strength_level": "33", - "id": "505", - "aggressive": "true", - "range_level": "1", - "attack_level": "33" - }, - { - "melee_animation": "5571", - "respawn_delay": "60", - "defence_animation": "5574", - "death_animation": "5575", - "name": "Nazastarool", - "defence_level": "1", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "507", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5507", - "respawn_delay": "60", - "defence_animation": "5508", - "death_animation": "5509", - "name": "Nazastarool", - "defence_level": "1", - "safespot": null, - "lifepoints": "75", - "strength_level": "1", - "id": "508", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5532", - "respawn_delay": "60", - "defence_animation": "5533", - "death_animation": "5534", - "name": "Nazastarool", - "defence_level": "1", - "safespot": null, - "lifepoints": "110", - "strength_level": "1", - "id": "509", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's the Captain of the 'Lady of the Waves'.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Shanks", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "518", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An expert on axes.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bob", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "519", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Sells stuff.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shopkeeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "520", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Helps sell stuff.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shop assistant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "521", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Likes people spending money.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shopkeeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "522", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Likes helping sell stuff.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shop assistant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "523", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A product of a consumerist society.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shopkeeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "524", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Likes you more, the more you spend.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shop assistant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "525", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A product of a consumerist society.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shopkeeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "526", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Likes you more, the more you spend.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shop assistant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "527", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Has an interesting assortment of items for sale.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shopkeeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "530", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Works on commission.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shop assistant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "531", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He clearly takes pride in his appearance.", - "range_animation": "0", - "magic_level": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "name": "Shopkeeper Kofi", - "defence_level": "60", - "safespot": null, - "lifepoints": "285", - "strength_level": "60", - "id": "532", - "aggressive": "true", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "Needs a haircut.", - "range_animation": "0", - "magic_level": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "name": "Shop assistant", - "defence_level": "60", - "safespot": null, - "lifepoints": "285", - "strength_level": "60", - "id": "533", - "aggressive": "true", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "Sells stuff.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fairy shopkeeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "534", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Sells stuff.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fairy shop assistant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "535", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Very snappily dressed.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Silk trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "539", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Makes his money selling rocks.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gem trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "540", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "For the finest in armoured legware.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Louie Legs", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "542", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Ironically, makes a living from swords.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shopkeeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "551", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Helps the shopkeeper sell swords.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shop assistant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "552", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "For the interesting clothing items you just can't find elsewhere.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fancy-dress shop owner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "554", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Has a fine moustache.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shopkeeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "555", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Could stand to lose a few pounds.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shopkeeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "561", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Has an odd smell about him.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Candle-maker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "562", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A being from a mysterious realm.", - "name": "Jukat", - "id": "564" - }, - { - "examine": "Is he invisible, or just floating clothing?", - "name": "Irksol", - "id": "566" - }, - { - "examine": "Looks strange and mysterious.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fairy", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "567", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks fairly well fed.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Silver merchant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "569", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems very well-off.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gem merchant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "570", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "So where are the butcher and the candlestick-maker?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Baker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "571", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Has a very exotic aroma about him.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Spice seller", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "572", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Knows how to keep warm in the winter.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fur trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "573", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems very well-off.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Silk merchant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "574", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He runs a Mining store.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Drogo dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "579", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I wonder if he wants to buy my junk?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "582", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He seems to sell tea.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tea seller", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "595", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A pizza expert; in both making and eating.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fat Tony", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "596", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Anyone fancy a trim?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Hairdresser", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "598", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Master of the mystical make-over.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Make-over Mage", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "599", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Indentured servant of a Knight.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "606", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A generic evil henchman.", - "melee_animation": "428", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Fortress Guard", - "defence_level": "26", - "safespot": null, - "lifepoints": "37", - "strength_level": "26", - "id": "609", - "range_level": "1", - "attack_level": "26" - }, - { - "examine": "One of the Black Knights.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Black Knight Captain", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "610", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Black Knights' resident witch.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Witch", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "611", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This person is working on the site.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Digsite workman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "613", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This person is working on the site.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Doug Deeping", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "614", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A student busy studying the digsite.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Student", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "615", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A student busy studying the digsite.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Student", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "616", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A student busy studying the digsite.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Student", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "617", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Upon examining the examiner you examine it is indeed an examiner!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Examiner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "618", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An expert on archaeology.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Archaeological expert", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "619", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A specialist in panning for gold.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Panning guide", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "620", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A professional gnome baller.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gnome baller", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "621", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A professional gnome baller.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gnome winger", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "633", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Keeps the game fair.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gnome ball referee", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "635", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A dealer in potions.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Apothecary", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "638", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A religious man... And occasional drunk.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Father Lawrence", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "640", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks down on his luck.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Charlie the Tramp", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "641", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks kind of obsessive...", - "melee_animation": "390", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Weaponsmaster", - "defence_level": "15", - "safespot": null, - "lifepoints": "42", - "strength_level": "15", - "id": "643", - "range_level": "1", - "attack_level": "15" - }, - { - "examine": "Looks kind of shifty...", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "498,500,499", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Jonny the beard", - "defence_level": "1", - "safespot": null, - "lifepoints": "2", - "strength_level": "1", - "id": "645", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Curator of the museum.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Curator Haig Halen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "646", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Varrock's resident monarch.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "King Roald", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "648", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She looks quite experienced.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Archer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "649", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks big and dumb.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Warrior", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "650", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks holy.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Monk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "651", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks kind of puny...", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Wizard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "652", - "range_level": "1", - "attack_level": "1", - "prj_height": "3" - }, - { - "examine": "Guardian of the dramen tree.", - "melee_animation": "5532", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5534", - "name": "Tree spirit", - "defence_level": "45", - "safespot": null, - "lifepoints": "64", - "strength_level": "45", - "id": "655", - "range_level": "1", - "attack_level": "45" - }, - { - "examine": "Unsurprisingly monk like.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave monk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "656", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Holy looking.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Monk of Entrana", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "657", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Holy looking.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Monk of Entrana", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "658", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He likes to paaaarty!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Party Pete", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "659", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Knight", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "660", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Man", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "663", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A short and angry dwarf.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Boot", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "665", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Chronozon the blood demon.", - "melee_animation": "64", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "65", - "death_animation": "67", - "name": "Chronozon", - "defence_level": "173", - "safespot": null, - "lifepoints": "60", - "strength_level": "172", - "id": "667", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "173" - }, - { - "examine": "An important looking gnome.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "King Narnode Shareen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "670", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The boss!", - "melee_animation": "422", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Foreman", - "defence_level": "20", - "safespot": null, - "lifepoints": "28", - "strength_level": "20", - "id": "674", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "A big, scary, jet-black demon.", - "melee_animation": "64", - "range_animation": "64", - "combat_audio": "397,399,398", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "157", - "magic_animation": "64", - "death_animation": "67", - "name": "Black demon", - "defence_level": "152", - "safespot": null, - "lifepoints": "157", - "strength_level": "148", - "id": "677", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "145" - }, - { - "examine": "Keeps order in the ranging guild.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "678", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The keeper of the gates to the ranging guild.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ranging Guild Doorman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "679", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An expert leatherworker.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Leatherworker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "680", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Mysterious swamp lights...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Held vampyre juvinate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "681", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Supplier of Rangers armour.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Armour salesman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "682", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Supplier of Archery equipment.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bow and Arrow salesman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "683", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Tower keeper and competition judge.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tower Advisor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "684", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Defender of the north tower.", - "combat_style": "1", - "melee_animation": "426", - "range_animation": "426", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Tower Archer", - "defence_level": "10", - "safespot": null, - "lifepoints": "14", - "strength_level": "7", - "id": "688", - "aggressive": "true", - "range_level": "10", - "attack_level": "7" - }, - { - "examine": "Defender of the east tower.", - "combat_style": "1", - "melee_animation": "426", - "range_animation": "426", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Tower Archer", - "defence_level": "20", - "safespot": null, - "lifepoints": "28", - "strength_level": "15", - "id": "689", - "aggressive": "true", - "range_level": "20", - "attack_level": "15" - }, - { - "examine": "Defender of the south tower.", - "combat_style": "1", - "melee_animation": "426", - "range_animation": "426", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Tower Archer", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "22", - "id": "690", - "aggressive": "true", - "range_level": "30", - "attack_level": "22" - }, - { - "examine": "Defender of the west tower.", - "combat_style": "1", - "melee_animation": "426", - "range_animation": "426", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Tower Archer", - "defence_level": "40", - "safespot": null, - "lifepoints": "57", - "strength_level": "30", - "id": "691", - "aggressive": "true", - "range_level": "40", - "attack_level": "30" - }, - { - "examine": "Supplier of authentic throwing weapons.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tribal Weapon Salesman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "692", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Sells equipment in exchange for archery tickets.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ticket Merchant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "694", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Harlan, ready to teach swordplay.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Melee tutor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "705", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An old wizard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Wizard Mizgog", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "706", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A cheeky little imp.", - "melee_animation": "169", - "range_animation": "169", - "combat_audio": "534,536,535", - "attack_speed": "5", - "defence_animation": "170", - "weakness": "7", - "magic_animation": "169", - "death_animation": "172", - "name": "Imp", - "defence_level": "2", - "safespot": null, - "movement_radius": "25", - "lifepoints": "8", - "strength_level": "2", - "id": "708", - "range_level": "1", - "attack_level": "2" - }, - { - "examine": "A cheeky little imp.", - "melee_animation": "169", - "range_animation": "169", - "combat_audio": "534,536,535", - "attack_speed": "5", - "defence_animation": "170", - "magic_animation": "169", - "death_animation": "172", - "name": "Imp", - "defence_level": "1", - "safespot": null, - "movement_radius": "25", - "lifepoints": "8", - "strength_level": "1", - "id": "709", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A bureaucratic administrator.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Clerk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "713", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "", - "examine": "A local civilian.", - "name": "Edmond", - "defence_level": "", - "safespot": null, - "lifepoints": "", - "combat_audio": "", - "strength_level": "", - "id": "714", - "range_level": "", - "attack_level": "" - }, - { - "slayer_exp": "", - "examine": "A local civilian.", - "name": "Edmond", - "defence_level": "", - "safespot": null, - "lifepoints": "", - "combat_audio": "", - "strength_level": "", - "id": "3213", - "range_level": "", - "attack_level": "" - }, - { - "slayer_exp": "", - "examine": "A local civilian.", - "name": "Edmond", - "defence_level": "", - "safespot": null, - "lifepoints": "", - "combat_audio": "", - "strength_level": "", - "id": "3214", - "range_level": "", - "attack_level": "" - }, - { - "examine": "A member of the Ardougne Royal Army.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Recruiter", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "720", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Gielinor's many citizens.", - "name": "Man", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "726", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Gielinor's many citizens.", - "name": "Man", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "727", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "", - "range_animation": "", - "combat_audio": "", - "protect_style": "", - "respawn_delay": "", - "defence_animation": "0", - "slayer_exp": "", - "magic_animation": "", - "death_animation": "0", - "name": "Man", - "defence_level": "1", - "safespot": "", - "lifepoints": "", - "strength_level": "", - "id": "728", - "clue_level": "", - "range_level": "", - "attack_level": "" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "", - "range_animation": "", - "combat_audio": "", - "defence_animation": "", - "magic_animation": "", - "death_animation": "", - "name": "Man", - "defence_level": "", - "safespot": null, - "lifepoints": "", - "strength_level": "", - "id": "729", - "clue_level": "", - "range_level": "", - "attack_level": "" - }, - { - "examine": "One of Gielinor's many citizens.", - "name": "Man", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "730", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I could get a beer from him.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bartender", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "731", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I could get a beer from him.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bartender", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "732", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I could get a beer from him.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bartender", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "735", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I could get a beer from him.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bartender", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "737", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I could get a beer from him.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bartender", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "738", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I could get a beer from him.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bartender", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "739", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Duke Horacio of Lumbridge.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Duke Horacio", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "741", - "range_level": "1", - "attack_level": "1" - }, - { - "agg_radius": "64", - "examine": "Roar! A dragon!", - "melee_animation": "80", - "attack_speed": "4", - "magic_level": "70", - "respawn_delay": "35", - "defence_animation": "89", - "death_animation": "4642", - "name": "Elvarg", - "defence_level": "70", - "safespot": null, - "lifepoints": "80", - "strength_level": "70", - "id": "742", - "aggressive": "true", - "bonuses": "0,0,0,0,0,20,40,40,30,20,0,0,0,0,0", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "A badly-behaved goblin.", - "melee_animation": "6184", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "6204", - "name": "Wormbrain", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "strength_level": "1", - "id": "745", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks a tad upset.", - "melee_animation": "6726", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6727", - "name": "Angry barbarian spirit", - "defence_level": "76", - "safespot": null, - "lifepoints": "108", - "strength_level": "76", - "id": "749", - "aggressive": "true", - "range_level": "1", - "attack_level": "76" - }, - { - "examine": "He looks a tad upset.", - "melee_animation": "6726", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6727", - "name": "Enraged barbarian spirit", - "defence_level": "76", - "safespot": null, - "lifepoints": "108", - "strength_level": "76", - "id": "750", - "aggressive": "true", - "range_level": "1", - "attack_level": "76" - }, - { - "examine": "He looks a tad upset.", - "melee_animation": "6726", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6727", - "name": "Berserk barbarian spirit", - "defence_level": "76", - "safespot": null, - "lifepoints": "108", - "strength_level": "76", - "id": "751", - "aggressive": "true", - "range_level": "1", - "attack_level": "76" - }, - { - "examine": "He looks a tad upset.", - "melee_animation": "6726", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6727", - "name": "Ferocious barbarian spirit", - "defence_level": "76", - "safespot": null, - "lifepoints": "190", - "strength_level": "76", - "id": "752", - "aggressive": "true", - "bonuses": "80,100,60,70,85,70,70,90,60,100,50,90,90,0,0", - "range_level": "1", - "attack_level": "76" - }, - { - "examine": "He looks totally insane!", - "melee_animation": "423", - "range_animation": "0", - "magic_level": "28", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "836", - "name": "Melzar the Mad", - "defence_level": "28", - "safespot": null, - "lifepoints": "40", - "strength_level": "28", - "id": "753", - "aggressive": "true", - "range_level": "28", - "attack_level": "28" - }, - { - "examine": "Stop looking and run!", - "melee_animation": "422", - "range_animation": "422", - "attack_speed": "5", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Count Draynor", - "defence_level": "20", - "safespot": null, - "lifepoints": "4", - "strength_level": "1", - "id": "757", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "A well-fed farmer.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fred the Farmer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "758", - "range_level": "1", - "attack_level": "1" - }, - { - "combat_style": "2", - "melee_animation": "192", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "194", - "death_animation": "196", - "name": "Crate", - "defence_level": "1", - "safespot": null, - "lifepoints": "88", - "strength_level": "1", - "id": "767", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Overgrown cat", - "defence_level": "1", - "safespot": null, - "lifepoints": "66", - "strength_level": "1", - "id": "778", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A citizen of Ardougne.", - "melee_animation": "", - "range_animation": "", - "defence_animation": "", - "magic_animation": "", - "death_animation": "", - "name": "Civilian", - "defence_level": "", - "safespot": null, - "lifepoints": "", - "strength_level": "", - "id": "785", - "range_level": "", - "attack_level": "" - }, - { - "examine": "A citizen of Ardougne.", - "melee_animation": "", - "range_animation": "", - "defence_animation": "", - "magic_animation": "", - "death_animation": "", - "name": "Civilian", - "defence_level": "", - "safespot": null, - "lifepoints": "", - "strength_level": "", - "id": "786", - "range_level": "", - "attack_level": "" - }, - { - "examine": "A citizen of Ardougne.", - "melee_animation": "", - "range_animation": "", - "defence_animation": "", - "magic_animation": "", - "death_animation": "", - "name": "Civilian", - "defence_level": "", - "safespot": null, - "lifepoints": "", - "strength_level": "", - "id": "787", - "range_level": "", - "attack_level": "" - }, - { - "examine": "A gnome who's supposed to be cleaning up a mess.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Letham", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "790", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Smartly dressed, and ready to deliver food.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Alfonse the waiter", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "793", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Distinctly cook-like.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Charlie the cook", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "794", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A cold hearted lady.", - "melee_animation": "422", - "range_animation": "0", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "836", - "name": "Ice Queen", - "defence_level": "95", - "safespot": null, - "lifepoints": "104", - "strength_level": "94", - "id": "795", - "bonuses": "0,0,0,0,0,30,40,20,10,30,0,0,0,0,0", - "range_level": "1", - "attack_level": "95" - }, - { - "examine": "He looks cold and hungry.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Velrak the explorer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "798", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A morally ambiguous guard.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Pirate Guard", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "799", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "It looks like there might be eels swimming in the lava.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fishing spot", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "800", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A holy man.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Abbot Langley", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "801", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A holy man.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brother Jered", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "802", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A holy man.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Monk", - "defence_level": "12", - "safespot": null, - "lifepoints": "17", - "strength_level": "12", - "id": "803", - "range_level": "1", - "attack_level": "12" - }, - { - "examine": "Manufacturer of fine leathers.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tanner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "804", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's in charge of the Crafting Guild.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Master Crafter", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "805", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks very tired...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Donovan the Family Handyman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "806", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An officer of the Law.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "812", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of those people who love to gossip!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gossip", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "813", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He sure likes to sell stuff!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Poison Salesman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "820", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Big, noisy, and scary looking!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sinclair Guard dog", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "821", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It looks like he's been here a long time.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Male slave", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "825", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks a bit aggressive.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Rowdy slave", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "827", - "aggressive": "true", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "He looks a bit aggressive.", - "melee_animation": "390", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Mercenary Captain", - "defence_level": "20", - "safespot": null, - "lifepoints": "28", - "strength_level": "1", - "id": "830", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's in control of the whole mining camp.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Siad", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "831", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Bedabin nomad", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bedabin Nomad", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "833", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Bedabin nomad guard - it looks like he's protecting an area.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bedabin Nomad Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "834", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He patrols the Shantay Pass.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Shantay Guard", - "defence_level": "11", - "safespot": null, - "lifepoints": "15", - "strength_level": "11", - "id": "837", - "range_level": "1", - "attack_level": "11" - }, - { - "examine": "He patrols the Shantay Pass.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shantay Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "838", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A vicious desert wolf.", - "melee_animation": "6559", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "6558", - "name": "Desert Wolf", - "defence_level": "11", - "safespot": null, - "lifepoints": "15", - "strength_level": "11", - "id": "839", - "range_level": "1", - "attack_level": "11" - }, - { - "death_animation": "9674", - "name": "Ugthanki", - "defence_level": "1", - "safespot": null, - "lifepoints": "46", - "strength_level": "1", - "attack_speed": "5", - "id": "840", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "He looks busy attending to his cart.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mine cart driver", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "841", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This pickaxe has been possessed by a dwarf ancestor spirit.", - "melee_animation": "185", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "188", - "name": "Rowdy Guard", - "defence_level": "40", - "safespot": null, - "lifepoints": "400", - "strength_level": "40", - "id": "842", - "aggressive": "true", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Inefficient looking.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "RPDT employee", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "843", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Despite his name", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Head chef", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "847", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The famous tree gnome chef.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Aluft Gianne snr.", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "850", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He can serve you gnome food.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gnome Waiter", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "851", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Tough-looking.", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "300", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "name": "Ogre chieftain", - "defence_level": "75", - "safespot": null, - "lifepoints": "60", - "strength_level": "71", - "id": "852", - "bonuses": "5,5,5,0,0,0,0,0,0,0,0,7,0,0,0", - "range_level": "1", - "attack_level": "75" - }, - { - "name": "Gorad", - "defence_level": "1", - "safespot": null, - "lifepoints": "81", - "strength_level": "1", - "id": "856", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "These ogres protect the city.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "0", - "name": "Ogre guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "858", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ogre that guards.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "0", - "name": "Ogre guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "859", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Tries to keep the peace.", - "melee_animation": "2100", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "8576", - "name": "City guard", - "defence_level": "58", - "safespot": null, - "lifepoints": "331", - "strength_level": "58", - "id": "862", - "range_level": "1", - "attack_level": "58" - }, - { - "examine": "Frightened-looking.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Scared skavid", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "863", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks mad.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mad skavid", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "864", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Big and ugly looking.", - "melee_animation": "2100", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "8576", - "name": "Enclave guard", - "defence_level": "58", - "safespot": null, - "lifepoints": "331", - "strength_level": "58", - "id": "870", - "range_level": "1", - "attack_level": "58" - }, - { - "examine": "The hat is a dead giveaway.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Watchtower Wizard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "872", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Funnily enough", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ogre trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "873", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Funnily enough", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ogre merchant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "874", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Funnily enough", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ogre trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "875", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Tries to keep the peace.", - "melee_animation": "386", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Tower guard", - "defence_level": "17", - "safespot": null, - "lifepoints": "97", - "strength_level": "17", - "id": "877", - "range_level": "1", - "attack_level": "17" - }, - { - "melee_animation": "395", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Colonel Radick", - "defence_level": "1", - "safespot": null, - "lifepoints": "71", - "strength_level": "1", - "id": "878", - "range_level": "1", - "attack_level": "1" - }, - { - "death_animation": "67", - "name": "Delrith", - "defence_level": "1", - "safespot": null, - "lifepoints": "7", - "melee_animation": "64", - "strength_level": "1", - "id": "879", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "65" - }, - { - "examine": "The head of the palace guard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Rovin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "884", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Head of the Carnillean household.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ceril Carnillean", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "885", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "On special duty to protect the Canilleans.", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "887", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of the Hazeel cult.", - "melee_animation": "811", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Clivet", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "893", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of the Hazeel cult.", - "melee_animation": "422", - "range_animation": "0", - "magic_level": "20", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "836", - "name": "Hazeel Cultist", - "defence_level": "20", - "safespot": null, - "lifepoints": "28", - "strength_level": "15", - "id": "894", - "range_level": "1", - "attack_level": "15" - }, - { - "examine": "A sad looking child.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Boy", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "895", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks unnatural.", - "melee_animation": "255", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "258", - "name": "Witch's experiment", - "defence_level": "19", - "safespot": null, - "lifepoints": "21", - "strength_level": "10", - "id": "897", - "range_level": "1", - "attack_level": "18" - }, - { - "examine": "Looks unnatural.", - "melee_animation": "5327", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "5329", - "name": "Witch's experiment (second form)", - "defence_level": "29", - "safespot": null, - "lifepoints": "31", - "strength_level": "20", - "id": "898", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "Looks unnatural.", - "melee_animation": "4925", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "4929", - "name": "Witch's experiment (third form)", - "defence_level": "39", - "safespot": null, - "lifepoints": "41", - "strength_level": "30", - "id": "899", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "Looks unnatural.", - "melee_animation": "6559", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6558", - "name": "Witch's experiment (fourth form)", - "defence_level": "49", - "safespot": null, - "lifepoints": "51", - "strength_level": "40", - "id": "900", - "range_level": "1", - "attack_level": "48" - }, - { - "examine": "He hasn't seen much sun lately.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Chamber guardian", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "904", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "0", - "examine": "Runs the Mage Arena.", - "name": "Kolodion", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "905", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's a shape-shifter", - "combat_style": "2", - "melee_animation": "811", - "attack_speed": "7", - "magic_level": "75", - "defence_animation": "404", - "slayer_exp": "0", - "death_animation": "1816", - "name": "Kolodion", - "defence_level": "20", - "safespot": null, - "lifepoints": "3", - "strength_level": "1", - "id": "907", - "range_level": "1", - "attack_level": "42" - }, - { - "examine": "He's a shape-shifter", - "combat_style": "2", - "melee_animation": "132", - "attack_speed": "7", - "magic_level": "89", - "defence_animation": "404", - "slayer_exp": "0", - "death_animation": "133", - "name": "Kolodion", - "defence_level": "25", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "908", - "range_level": "1", - "attack_level": "74" - }, - { - "examine": "He's a shape-shifter", - "combat_style": "2", - "melee_animation": "5322", - "attack_speed": "7", - "magic_level": "89", - "defence_animation": "5320", - "slayer_exp": "0", - "death_animation": "5323", - "name": "Kolodion", - "defence_level": "28", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "909", - "range_level": "1", - "attack_level": "74" - }, - { - "examine": "He's a shape-shifter", - "combat_style": "2", - "melee_animation": "811", - "attack_speed": "7", - "magic_level": "89", - "defence_animation": "404", - "slayer_exp": "0", - "death_animation": "714", - "name": "Kolodion", - "defence_level": "30", - "safespot": null, - "lifepoints": "78", - "strength_level": "1", - "id": "910", - "range_level": "1", - "attack_level": "74" - }, - { - "examine": "He's a shape-shifter", - "melee_animation": "69", - "attack_speed": "7", - "magic_level": "80", - "defence_animation": "65", - "slayer_exp": "0", - "death_animation": "68", - "name": "Kolodion", - "defence_level": "105", - "safespot": null, - "lifepoints": "107", - "strength_level": "98", - "id": "911", - "range_level": "1", - "attack_level": "85" - }, - { - "examine": "He kills in the name of Zamorak.", - "combat_style": "2", - "melee_animation": "811", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "50", - "respawn_delay": "150", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "836", - "name": "Battle mage", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "id": "912", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He kills in the name of Saradomin.", - "combat_style": "2", - "melee_animation": "811", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "50", - "respawn_delay": "150", - "defence_animation": "0", - "weakness": "3", - "slayer_exp": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Battle mage", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "id": "913", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He kills in the name of Guthix.", - "combat_style": "2", - "melee_animation": "197", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "50", - "respawn_delay": "150", - "defence_animation": "0", - "weakness": "3", - "slayer_exp": "0", - "magic_animation": "0", - "death_animation": "196", - "name": "Battle mage", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "id": "914", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A crafter at the pinnacle of his art.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Joe", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "916", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I wonder who he's guarding?", - "melee_animation": "401", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Jail guard", - "defence_level": "21", - "safespot": null, - "lifepoints": "32", - "strength_level": "23", - "id": "917", - "aggressive": "true", - "range_level": "1", - "attack_level": "19" - }, - { - "examine": "The emir's chief advisor and physician.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Hassan", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "923", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Guards the border between Al Kharid and the Kingdom of Misthalin.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Border Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "925", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An aggressive native of the Kharazi Jungle.", - "melee_animation": "428", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Jungle savage", - "defence_level": "44", - "safespot": null, - "lifepoints": "62", - "strength_level": "44", - "id": "931", - "aggressive": "true", - "range_level": "1", - "attack_level": "44" - }, - { - "melee_animation": "64", - "respawn_delay": "60", - "defence_animation": "65", - "death_animation": "67", - "name": "Nezikchened", - "defence_level": "1", - "safespot": null, - "lifepoints": "150", - "strength_level": "1", - "id": "934", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5485", - "respawn_delay": "60", - "defence_animation": "5489", - "death_animation": "5491", - "name": "Ranalph Devere", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "id": "938", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I wonder what this is doing here.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Boulder", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "939", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Must be related to Elvarg.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "68", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "75", - "magic_animation": "80", - "death_animation": "92", - "name": "Green dragon", - "defence_level": "68", - "safespot": null, - "lifepoints": "75", - "strength_level": "68", - "id": "941", - "aggressive": "true", - "bonuses": "0,0,0,0,0,20,40,40,30,20,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "An expert on all things culinary.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Master chef", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "942", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Very much an outdoors type.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Survival expert", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "943", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An expert on all forms of combat.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Combat instructor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "944", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Your introduction to the world of Gielinor.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "RuneScape guide", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "945", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A master of Magic.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Magic instructor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "946", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An official representative from the First National Bank of Gielinor.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Financial advisor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "947", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An expert on Mining-related skills.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mining instructor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "948", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Your introduction to the world of Gielinor.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Quest guide", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "949", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "4933", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4934", - "death_animation": "4935", - "name": "Giant rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "950", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Yep. Definitely a chicken.", - "melee_animation": "5387", - "range_animation": "5387", - "combat_audio": "355,357,356", - "attack_speed": "6", - "respawn_delay": "18", - "defence_animation": "5388", - "magic_animation": "5387", - "death_animation": "5389", - "name": "Chicken", - "defence_level": "1", - "safespot": null, - "lifepoints": "3", - "strength_level": "1", - "id": "951", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A holy man.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brother Brace", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "954", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Converts grass to beef.", - "melee_animation": "5849", - "range_animation": "5849", - "combat_audio": "369,371,370", - "attack_speed": "5", - "defence_animation": "5850", - "weakness": "8", - "slayer_exp": "8", - "magic_animation": "5849", - "death_animation": "5851", - "name": "Cow", - "defence_level": "1", - "safespot": null, - "lifepoints": "8", - "strength_level": "1", - "id": "955", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's had a fair bit to drink...", - "start_gfx": "", - "combat_style": "1", - "melee_animation": "99", - "range_animation": "99", - "combat_audio": "2707,419,418", - "attack_speed": "5", - "magic_level": "20", - "defence_animation": "101", - "slayer_exp": "0", - "magic_animation": "99", - "death_animation": "102", - "name": "Drunken Dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "5", - "id": "956", - "range_level": "6", - "projectile": "33", - "attack_level": "5", - "prj_height": "45" - }, - { - "examine": "This doctor really knows her stuff.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Surgeon General Tafani", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "961", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's one of Iban's pets.", - "melee_animation": "5327", - "range_animation": "0", - "combat_audio": "537,539,538", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "5329", - "name": "Blessed spider", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "22", - "id": "977", - "range_level": "30", - "attack_level": "22" - }, - { - "examine": "It's one of Iban's pet vermin.", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "name": "Blessed giant rat", - "defence_level": "12", - "safespot": null, - "lifepoints": "17", - "strength_level": "12", - "id": "978", - "range_level": "1", - "attack_level": "12" - }, - { - "examine": "A wretched slave of Iban.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Slave", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "979", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A wretched slave of Iban.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Slave", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "980", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A wretched slave of Iban.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Slave", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "981", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A wretched slave of Iban.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Slave", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "982", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A wretched slave of Iban.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Slave", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "983", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A wretched slave of Iban.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Slave", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "984", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A wretched slave of Iban.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Slave", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "985", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Precariously balanced...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Boulder", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "986", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Unicorn", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "369,371,370", - "strength_level": "1", - "id": "987", - "range_level": "1", - "attack_level": "1" - }, - { - "death_animation": "836", - "name": "Sir Jerro", - "defence_level": "1", - "safespot": null, - "lifepoints": "57", - "melee_animation": "400", - "strength_level": "1", - "id": "988", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "death_animation": "836", - "name": "Sir Carl", - "defence_level": "1", - "safespot": null, - "lifepoints": "57", - "melee_animation": "400", - "strength_level": "1", - "id": "989", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "death_animation": "836", - "name": "Sir Harry", - "defence_level": "1", - "safespot": null, - "lifepoints": "57", - "melee_animation": "400", - "strength_level": "1", - "id": "990", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "examine": "A creature empty of emotion.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Half-soulless", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "991", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Curiosity is yet to kill this one...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Witch's cat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "993", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A giant spider.", - "melee_animation": "5319", - "respawn_delay": "60", - "defence_animation": "5320", - "death_animation": "5321", - "name": "Kalrag", - "defence_level": "1", - "safespot": null, - "lifepoints": "91", - "strength_level": "1", - "id": "997", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the guardians of Iban.", - "melee_animation": "64", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "65", - "death_animation": "67", - "name": "Othainian", - "defence_level": "1", - "safespot": null, - "lifepoints": "90", - "strength_level": "1", - "id": "998", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the guardians of Iban.", - "melee_animation": "64", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "65", - "death_animation": "67", - "name": "Doomion", - "defence_level": "1", - "safespot": null, - "lifepoints": "90", - "strength_level": "1", - "id": "999", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the guardians of Iban.", - "melee_animation": "64", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "65", - "death_animation": "67", - "name": "Holthion", - "defence_level": "1", - "safespot": null, - "lifepoints": "90", - "strength_level": "1", - "id": "1000", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A user of dark magic.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "0", - "name": "Dark mage", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1001", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A dark magic user.", - "melee_animation": "422", - "range_animation": "0", - "magic_level": "32", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "836", - "name": "Disciple of Iban", - "defence_level": "32", - "safespot": null, - "lifepoints": "45", - "strength_level": "24", - "id": "1002", - "range_level": "1", - "attack_level": "24" - }, - { - "examine": "Incey wincey.", - "melee_animation": "6249", - "respawn_delay": "60", - "defence_animation": "6250", - "death_animation": "6251", - "name": "Spider", - "defence_level": "1", - "safespot": null, - "lifepoints": "2", - "strength_level": "1", - "id": "1004", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An annoying flappy thing.", - "combat_audio": "292,294,293", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "slayer_exp": "8", - "name": "Giant bat", - "defence_level": "22", - "safespot": null, - "lifepoints": "32", - "strength_level": "22", - "id": "1005", - "bonuses": "0,0,0,0,0,10,10,12,10,8,0,0,0,0,0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "A rather nasty looking crustacean.", - "name": "Sea slug", - "id": "1006" - }, - { - "examine": "A servant of Zamorak.", - "combat_style": "2", - "melee_animation": "811", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "60", - "spell_id": "43", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "811", - "death_animation": "836", - "name": "Zamorak wizard", - "defence_level": "50", - "safespot": null, - "lifepoints": "73", - "strength_level": "50", - "id": "1007", - "aggressive": "true", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "A nasty, poisonous arachnid.", - "melee_animation": "5327", - "range_animation": "0", - "combat_audio": "537,539,538", - "attack_speed": "4", - "poisonous": "true", - "respawn_delay": "30", - "defence_animation": "5328", - "weakness": "2", - "poison_amount": "30", - "magic_animation": "0", - "death_animation": "5329", - "name": "Poison spider", - "safespot": null, - "defence_level": "28", - "lifepoints": "25", - "strength_level": "28", - "id": "1009", - "aggressive": "true", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A green skinned croaker", - "melee_animation": "0", - "range_animation": "0", - "respawn_delay": "34", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Swamp toad", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1013", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Useful for hitting rocks.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "0", - "name": "Iron pickaxe", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1015", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Yep. Definitely a chicken.", - "melee_animation": "5387", - "range_animation": "5387", - "combat_audio": "355,357,356", - "attack_speed": "6", - "respawn_delay": "18", - "defence_animation": "5388", - "weakness": "9", - "magic_animation": "5387", - "death_animation": "5389", - "name": "Chicken", - "defence_level": "1", - "safespot": null, - "lifepoints": "3", - "strength_level": "1", - "id": "1017", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He rules the", - "melee_animation": "5387", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5389", - "name": "Rooster", - "defence_level": "2", - "safespot": null, - "lifepoints": "2", - "strength_level": "2", - "id": "1018", - "range_level": "1", - "attack_level": "2" - }, - { - "examine": "A fire elemental.", - "melee_animation": "1029", - "range_animation": "0", - "combat_audio": "1534,1536,1535", - "magic_level": "32", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "1031", - "name": "Fire elemental", - "defence_level": "32", - "safespot": null, - "movement_radius": "4", - "lifepoints": "45", - "strength_level": "24", - "id": "1019", - "range_level": "1", - "attack_level": "24" - }, - { - "examine": "An earth elemental.", - "melee_animation": "4868", - "range_animation": "0", - "combat_audio": "1531,1533,1532", - "attack_speed": "6", - "magic_level": "10", - "respawn_delay": "50", - "defence_animation": "4869", - "weakness": "7", - "magic_animation": "0", - "death_animation": "4870", - "name": "Earth elemental", - "defence_level": "35", - "safespot": null, - "movement_radius": "4", - "lifepoints": "35", - "strength_level": "32", - "id": "1020", - "aggressive": "false", - "range_level": "30", - "attack_level": "20" - }, - { - "examine": "An air elemental.", - "melee_animation": "1040", - "range_animation": "0", - "combat_audio": "1527,1529,1528", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "1041", - "name": "Air elemental", - "defence_level": "32", - "safespot": null, - "movement_radius": "4", - "lifepoints": "45", - "strength_level": "24", - "id": "1021", - "range_level": "32", - "attack_level": "24" - }, - { - "examine": "A water elemental.", - "melee_animation": "1044", - "range_animation": "0", - "combat_audio": "1546,1543,1545", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "1048", - "name": "Water elemental", - "defence_level": "32", - "safespot": null, - "movement_radius": "4", - "lifepoints": "45", - "strength_level": "24", - "id": "1022", - "range_level": "32", - "attack_level": "24" - }, - { - "examine": "It looks very hungry!", - "melee_animation": "7183", - "slayer_exp": "50", - "death_animation": "7185", - "name": "Vampire", - "defence_level": "52", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1023", - "clue_level": "1", - "range_level": "1", - "attack_level": "52" - }, - { - "examine": "An evil human cleric.", - "start_gfx": "99", - "combat_style": "2", - "combat_audio": "511,513,512", - "melee_animation": "422", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "25", - "end_gfx": "101", - "respawn_delay": "60", - "defence_animation": "404", - "weakness": "3", - "magic_animation": "711", - "death_animation": "836", - "name": "Monk of Zamorak", - "defence_level": "22", - "safespot": null, - "lifepoints": "20", - "strength_level": "18", - "id": "1044", - "aggressive": "true", - "range_level": "1", - "projectile": "100", - "attack_level": "18" - }, - { - "examine": "An evil human cleric.", - "start_gfx": "99", - "combat_style": "2", - "combat_audio": "511,513,512", - "melee_animation": "422", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "25", - "end_gfx": "101", - "respawn_delay": "60", - "defence_animation": "404", - "weakness": "3", - "magic_animation": "711", - "death_animation": "836", - "name": "Monk of Zamorak", - "defence_level": "17", - "safespot": null, - "lifepoints": "10", - "strength_level": "8", - "id": "1045", - "aggressive": "true", - "range_level": "1", - "projectile": "100", - "attack_level": "8" - }, - { - "examine": "An evil human cleric.", - "start_gfx": "99", - "combat_style": "2", - "combat_audio": "511,513,512", - "melee_animation": "422", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "40", - "end_gfx": "101", - "respawn_delay": "60", - "defence_animation": "404", - "weakness": "3", - "magic_animation": "711", - "death_animation": "836", - "name": "Monk of Zamorak", - "defence_level": "25", - "safespot": null, - "lifepoints": "25", - "strength_level": "25", - "id": "1046", - "aggressive": "true", - "range_level": "1", - "projectile": "100", - "attack_level": "25" - }, - { - "examine": "Arrghhh... a Ghast.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "433,435,434", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "0", - "name": "Ghast", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1052", - "aggressive": "false", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Arrghhh... A Ghast.", - "death_gfx": "265", - "range_animation": "0", - "melee_animation": "1087", - "combat_audio": "433,435,434", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "1088", - "weakness": "9", - "magic_animation": "0", - "death_animation": "1089", - "name": "Ghast", - "defence_level": "18", - "safespot": null, - "lifepoints": "45", - "strength_level": "22", - "id": "1053", - "aggressive": "true", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Ticket trader for the Brimhaven Agility Arena.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Pirate Jackie the Fruit", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1055", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of the audience.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Strange watcher", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1057", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of the audience.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Strange watcher", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1058", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of the audience.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Strange watcher", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1059", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Commander of the Imperial Guard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Denulth", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1060", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A sergeant of the Imperial Guard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sergeant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1061", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A sergeant of the Imperial Guard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sergeant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1062", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A soldier of the Imperial Guard.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Soldier", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1063", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A soldier of the Imperial Guard.", - "name": "Soldier", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "1064", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A soldier of the Imperial Guard.", - "name": "Soldier", - "defence_level": "44", - "safespot": null, - "lifepoints": "55", - "combat_audio": "511,513,512", - "strength_level": "44", - "id": "1065", - "magic_level": "1", - "range_level": "1", - "attack_level": "44" - }, - { - "examine": "A soldier of the Imperial Guard.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Soldier", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1066", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A soldier of the Imperial Guard.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Soldier", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1067", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A soldier of the Imperial Guard.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Soldier", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1068", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A soldier of the Imperial Guard.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Soldier", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1069", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Burthorpe Castle cook.", - "melee_animation": "422", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Eadburg", - "defence_level": "3", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "1072", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "A Burthorpe Castle Archer.", - "start_gfx": "19", - "combat_style": "1", - "melee_animation": "426", - "range_animation": "426", - "magic_level": "1", - "respawn_delay": "12", - "defence_animation": "404", - "magic_animation": "426", - "death_animation": "9055", - "name": "Archer", - "defence_level": "44", - "safespot": null, - "lifepoints": "55", - "strength_level": "1", - "id": "1073", - "bonuses": "54,68,75,72,67,81,54,35,35,0,0,0,0,0,0", - "range_level": "44", - "projectile": "10", - "attack_level": "1" - }, - { - "examine": "A Burthorpe Castle Archer.", - "start_gfx": "19", - "combat_style": "1", - "melee_animation": "426", - "range_animation": "426", - "magic_level": "1", - "respawn_delay": "12", - "defence_animation": "404", - "magic_animation": "426", - "death_animation": "9055", - "name": "Archer", - "defence_level": "44", - "safespot": null, - "lifepoints": "55", - "strength_level": "1", - "id": "1074", - "bonuses": "54,68,75,72,67,81,54,35,35,0,0,0,0,0,0", - "range_level": "44", - "projectile": "10", - "attack_level": "1" - }, - { - "examine": "A Burthorpe Castle guard.", - "melee_animation": "401", - "combat_audio": "511,513,512", - "magic_level": "1", - "defence_animation": "404", - "death_animation": "836", - "name": "Guard", - "defence_level": "33", - "safespot": null, - "lifepoints": "44", - "strength_level": "33", - "id": "1076", - "clue_level": "1", - "range_level": "1", - "attack_level": "33" - }, - { - "examine": "A Burthorpe Castle guard.", - "melee_animation": "401", - "combat_audio": "511,513,512", - "magic_level": "1", - "defence_animation": "404", - "death_animation": "836", - "name": "Guard", - "defence_level": "33", - "safespot": null, - "lifepoints": "44", - "strength_level": "33", - "id": "1077", - "clue_level": "1", - "range_level": "1", - "attack_level": "33" - }, - { - "examine": "An off-duty Burthorpe Castle guard.", - "name": "Harold", - "id": "1078" - }, - { - "examine": "Barman of the Toad and Chicken.", - "name": "Tostig", - "id": "1079" - }, - { - "examine": "Head servant for Prince Anlaf.", - "name": "Eohric", - "id": "1080" - }, - { - "examine": "A servant for Prince Anlaf.", - "melee_animation": "422", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Servant", - "defence_level": "3", - "safespot": null, - "lifepoints": "10", - "strength_level": "3", - "id": "1081", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "Smithy for Burthorpe.", - "name": "Dunstan", - "id": "1082" - }, - { - "examine": "Shopkeeper for Burthorpe.", - "name": "Wistan", - "id": "1083" - }, - { - "examine": "A citizen of Burthorpe.", - "melee_animation": "422", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Breoca", - "defence_level": "3", - "safespot": null, - "lifepoints": "10", - "strength_level": "3", - "id": "1084", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "A citizen of Burthorpe.", - "melee_animation": "422", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Ocga", - "defence_level": "3", - "safespot": null, - "lifepoints": "10", - "strength_level": "3", - "id": "1085", - "range_level": "1", - "attack_level": "3" - }, - { - "name": "Man", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "1086", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A citizen of Burthorpe.", - "melee_animation": "422", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Penda", - "defence_level": "3", - "safespot": null, - "lifepoints": "10", - "strength_level": "3", - "id": "1087", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "A citizen of Burthorpe.", - "melee_animation": "422", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Hygd", - "defence_level": "3", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "1088", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "A citizen of Burthorpe.", - "melee_animation": "422", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Ceolburg", - "defence_level": "3", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "1089", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "A pretty young woman with an air of mystery around her.", - "name": "Hild", - "id": "1090" - }, - { - "examine": "The knight seems to be watching something.", - "melee_animation": "7042", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "8", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "White Knight", - "defence_level": "27", - "safespot": null, - "lifepoints": "38", - "strength_level": "27", - "id": "1092", - "range_level": "1", - "attack_level": "27" - }, - { - "examine": "The biggest and baddest troll.", - "melee_animation": "6523", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "name": "Rock", - "defence_level": "70", - "safespot": null, - "lifepoints": "140", - "strength_level": "110", - "id": "1095", - "aggressive": "true", - "bonuses": "60,60,60,0,0,35,60,35,200,200,0,100,0,0,0", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Careful, he is a big.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "7", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "7", - "magic_animation": "0", - "death_animation": "287", - "name": "Stick", - "defence_level": "60", - "safespot": null, - "lifepoints": "135", - "strength_level": "110", - "id": "1096", - "aggressive": "true", - "bonuses": "50,50,50,0,0,30,30,50,200,200,0,80,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "A nasty looking troll.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "7", - "magic_animation": "284", - "death_animation": "287", - "name": "Pee Hat", - "defence_level": "50", - "safespot": null, - "lifepoints": "120", - "strength_level": "100", - "id": "1097", - "aggressive": "true", - "bonuses": "40,40,40,0,0,25,25,40,200,200,0,70,0,0,0", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "A nasty looking troll.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "7", - "magic_animation": "284", - "death_animation": "287", - "name": "Kraka", - "defence_level": "50", - "safespot": null, - "lifepoints": "120", - "strength_level": "100", - "id": "1098", - "aggressive": "true", - "bonuses": "40,40,40,0,0,25,25,40,200,400,0,70,0,0,0", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "Human is his speciality.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dung", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1099", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Human is his speciality.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ash", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1100", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "agg_radius": "6", - "examine": "Small for a troll, but mean, ugly and throws rocks.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "7", - "respawn_delay": "35", - "defence_animation": "285", - "weakness": "0", - "magic_animation": "284", - "death_animation": "287", - "name": "Thrower Troll", - "defence_level": "30", - "safespot": null, - "lifepoints": "95", - "strength_level": "41", - "id": "1101", - "range_level": "40", - "projectile": "276", - "attack_level": "41" - }, - { - "agg_radius": "6", - "examine": "Small for a troll, but mean, ugly and throws rocks.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "7", - "respawn_delay": "35", - "defence_animation": "285", - "weakness": "0", - "magic_animation": "284", - "death_animation": "287", - "name": "Thrower Troll", - "defence_level": "30", - "safespot": null, - "lifepoints": "95", - "strength_level": "41", - "id": "1102", - "range_level": "40", - "projectile": "276", - "attack_level": "41" - }, - { - "agg_radius": "6", - "examine": "Small for a troll, but mean, ugly and throws rocks.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "7", - "respawn_delay": "35", - "defence_animation": "285", - "weakness": "0", - "magic_animation": "284", - "death_animation": "287", - "name": "Thrower Troll", - "defence_level": "30", - "safespot": null, - "lifepoints": "95", - "strength_level": "41", - "id": "1103", - "range_level": "40", - "projectile": "276", - "attack_level": "41" - }, - { - "agg_radius": "6", - "examine": "Small for a troll, but mean, ugly and throws rocks.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "7", - "respawn_delay": "35", - "defence_animation": "285", - "weakness": "0", - "magic_animation": "284", - "death_animation": "287", - "name": "Thrower Troll", - "defence_level": "30", - "safespot": null, - "lifepoints": "95", - "strength_level": "41", - "id": "1104", - "range_level": "40", - "projectile": "276", - "attack_level": "41" - }, - { - "agg_radius": "6", - "examine": "Small for a troll, but mean, ugly and throws rocks.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "7", - "respawn_delay": "35", - "defence_animation": "285", - "weakness": "0", - "magic_animation": "284", - "death_animation": "287", - "name": "Thrower Troll", - "defence_level": "30", - "safespot": null, - "lifepoints": "95", - "strength_level": "41", - "id": "1105", - "range_level": "40", - "projectile": "276", - "attack_level": "41" - }, - { - "examine": "Small for a troll, but mean and ugly.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "5", - "defence_animation": "285", - "weakness": "7", - "magic_animation": "284", - "death_animation": "287", - "name": "Mountain troll", - "defence_level": "53", - "safespot": null, - "lifepoints": "90", - "strength_level": "20", - "id": "1106", - "range_level": "1", - "attack_level": "53" - }, - { - "examine": "Small for a troll, but mean and ugly.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "5", - "defence_animation": "285", - "weakness": "7", - "magic_animation": "284", - "death_animation": "287", - "name": "Mountain troll", - "defence_level": "53", - "safespot": null, - "lifepoints": "90", - "strength_level": "20", - "id": "1107", - "range_level": "1", - "attack_level": "53" - }, - { - "examine": "Small for a troll, but mean and ugly.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "5", - "defence_animation": "285", - "weakness": "7", - "magic_animation": "284", - "death_animation": "287", - "name": "Mountain troll", - "defence_level": "53", - "safespot": null, - "lifepoints": "90", - "strength_level": "20", - "id": "1108", - "range_level": "1", - "attack_level": "53" - }, - { - "examine": "Small for a troll, but mean and ugly.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "5", - "defence_animation": "285", - "weakness": "7", - "magic_animation": "284", - "death_animation": "287", - "name": "Mountain troll", - "defence_level": "53", - "safespot": null, - "lifepoints": "90", - "strength_level": "20", - "id": "1109", - "range_level": "1", - "attack_level": "53" - }, - { - "examine": "Small for a troll, but mean and ugly.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "5", - "defence_animation": "285", - "weakness": "7", - "magic_animation": "284", - "death_animation": "287", - "name": "Mountain troll", - "defence_level": "53", - "safespot": null, - "lifepoints": "90", - "strength_level": "20", - "id": "1110", - "range_level": "1", - "attack_level": "53" - }, - { - "examine": "Small for a troll, but mean and ugly.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "5", - "defence_animation": "285", - "weakness": "7", - "magic_animation": "284", - "death_animation": "287", - "name": "Mountain troll", - "defence_level": "53", - "safespot": null, - "lifepoints": "90", - "strength_level": "20", - "id": "1111", - "range_level": "1", - "attack_level": "53" - }, - { - "examine": "Small for a troll, but mean and ugly.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "5", - "defence_animation": "285", - "weakness": "7", - "magic_animation": "284", - "death_animation": "287", - "name": "Mountain troll", - "defence_level": "53", - "safespot": null, - "lifepoints": "90", - "strength_level": "20", - "id": "1112", - "range_level": "1", - "attack_level": "53" - }, - { - "examine": "One of the troll generals.", - "melee_animation": "1259", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "287", - "name": "Troll general", - "defence_level": "65", - "safespot": null, - "lifepoints": "92", - "strength_level": "65", - "id": "1115", - "aggressive": "true", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "One of the troll generals.", - "melee_animation": "1259", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "287", - "name": "Troll general", - "defence_level": "65", - "safespot": null, - "lifepoints": "92", - "strength_level": "65", - "id": "1116", - "aggressive": "true", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "One of the troll generals.", - "melee_animation": "1259", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "287", - "name": "Troll general", - "defence_level": "65", - "safespot": null, - "lifepoints": "92", - "strength_level": "65", - "id": "1117", - "aggressive": "true", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "He's watching the arena.", - "melee_animation": "1259", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "287", - "name": "Troll spectator", - "defence_level": "47", - "safespot": null, - "lifepoints": "67", - "strength_level": "47", - "id": "1118", - "range_level": "1", - "attack_level": "47" - }, - { - "examine": "He's watching the arena.", - "melee_animation": "1259", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "287", - "name": "Troll spectator", - "defence_level": "47", - "safespot": null, - "lifepoints": "67", - "strength_level": "47", - "id": "1119", - "range_level": "1", - "attack_level": "47" - }, - { - "examine": "He's watching the arena.", - "melee_animation": "1259", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "287", - "name": "Troll spectator", - "defence_level": "47", - "safespot": null, - "lifepoints": "67", - "strength_level": "47", - "id": "1120", - "range_level": "1", - "attack_level": "47" - }, - { - "examine": "He's watching the arena.", - "melee_animation": "1259", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "287", - "name": "Troll spectator", - "defence_level": "47", - "safespot": null, - "lifepoints": "67", - "strength_level": "47", - "id": "1121", - "range_level": "1", - "attack_level": "47" - }, - { - "examine": "He's watching the arena.", - "melee_animation": "1259", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "287", - "name": "Troll spectator", - "defence_level": "47", - "safespot": null, - "lifepoints": "67", - "strength_level": "47", - "id": "1122", - "range_level": "1", - "attack_level": "47" - }, - { - "examine": "He's watching the arena.", - "melee_animation": "1259", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "287", - "name": "Troll spectator", - "defence_level": "47", - "safespot": null, - "lifepoints": "67", - "strength_level": "47", - "id": "1123", - "range_level": "1", - "attack_level": "47" - }, - { - "examine": "He's watching the arena.", - "melee_animation": "1259", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "287", - "name": "Troll spectator", - "defence_level": "47", - "safespot": null, - "lifepoints": "67", - "strength_level": "47", - "id": "1124", - "range_level": "1", - "attack_level": "47" - }, - { - "examine": "An unusually large troll.", - "melee_animation": "1158", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "287", - "name": "Dad", - "defence_level": "50", - "safespot": null, - "lifepoints": "120", - "strength_level": "120", - "id": "1125", - "bonuses": "40,40,40,0,0,25,25,40,200,200,0,70,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "He's guarding the cells.", - "range_animation": "0", - "melee_animation": "1158", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "287", - "name": "Twig", - "defence_level": "25", - "safespot": null, - "lifepoints": "90", - "strength_level": "90", - "id": "1126", - "aggressive": "true", - "bonuses": "20,20,20,0,0,0,0,10,200,200,0,20,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "He's guarding the cells.", - "range_animation": "0", - "melee_animation": "1158", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "287", - "name": "Berry", - "defence_level": "40", - "safespot": null, - "lifepoints": "90", - "strength_level": "90", - "id": "1127", - "aggressive": "true", - "bonuses": "20,20,20,0,0,0,0,10,200,200,0,20,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "He's guarding the cells.", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "name": "Twig", - "defence_level": "25", - "safespot": null, - "lifepoints": "90", - "strength_level": "90", - "id": "1128", - "bonuses": "20,20,20,0,0,0,0,10,200,200,0,20,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "He's guarding the cells.", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "name": "Berry", - "defence_level": "40", - "safespot": null, - "lifepoints": "90", - "strength_level": "90", - "id": "1129", - "bonuses": "20,20,20,0,0,0,0,10,200,200,0,20,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Small for a troll, but it's mean, ugly and throws rocks.", - "start_gfx": "33", - "combat_style": "1", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "7", - "respawn_delay": "35", - "defence_animation": "285", - "weakness": "0", - "magic_animation": "284", - "death_animation": "287", - "name": "Thrower troll", - "defence_level": "30", - "safespot": null, - "lifepoints": "95", - "strength_level": "41", - "id": "1130", - "aggressive": "true", - "bonuses": "30,60,40,40,50,70,50,0,0,0,0,0,0,0,0", - "range_level": "40", - "projectile": "276", - "attack_level": "41" - }, - { - "agg_radius": "6", - "examine": "Small for a troll, but it's mean, ugly and throws rocks.", - "start_gfx": "33", - "combat_style": "1", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "7", - "respawn_delay": "35", - "defence_animation": "285", - "weakness": "0", - "magic_animation": "284", - "death_animation": "287", - "name": "Thrower troll", - "defence_level": "30", - "safespot": null, - "lifepoints": "95", - "strength_level": "41", - "id": "1131", - "aggressive": "true", - "bonuses": "30,60,40,40,50,70,50,0,0,0,0,0,0,0,0", - "range_level": "40", - "projectile": "276", - "attack_level": "41" - }, - { - "agg_radius": "6", - "examine": "Small for a troll, but it's mean, ugly and throws rocks.", - "start_gfx": "33", - "combat_style": "1", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "7", - "respawn_delay": "35", - "defence_animation": "285", - "weakness": "0", - "magic_animation": "284", - "death_animation": "287", - "name": "Thrower troll", - "defence_level": "30", - "safespot": null, - "lifepoints": "95", - "strength_level": "41", - "id": "1132", - "aggressive": "true", - "bonuses": "30,60,40,40,50,70,50,0,0,0,0,0,0,0,0", - "range_level": "40", - "projectile": "276", - "attack_level": "41" - }, - { - "agg_radius": "6", - "examine": "Small for a troll, but it's mean, ugly and throws rocks.", - "start_gfx": "33", - "combat_style": "1", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "7", - "respawn_delay": "35", - "defence_animation": "285", - "weakness": "0", - "magic_animation": "284", - "death_animation": "287", - "name": "Thrower troll", - "defence_level": "30", - "safespot": null, - "lifepoints": "95", - "strength_level": "41", - "id": "1133", - "aggressive": "true", - "bonuses": "30,60,40,40,50,70,50,0,0,0,0,0,0,0,0", - "range_level": "40", - "projectile": "276", - "attack_level": "41" - }, - { - "agg_radius": "6", - "examine": "Small for a troll, but it's mean, ugly and throws rocks.", - "start_gfx": "33", - "combat_style": "1", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "7", - "respawn_delay": "35", - "defence_animation": "285", - "weakness": "0", - "magic_animation": "284", - "death_animation": "287", - "name": "Thrower troll", - "defence_level": "30", - "safespot": null, - "lifepoints": "95", - "strength_level": "41", - "id": "1134", - "aggressive": "true", - "bonuses": "30,60,40,40,50,70,50,0,0,0,0,0,0,0,0", - "range_level": "40", - "projectile": "276", - "attack_level": "41" - }, - { - "examine": "Human is his speciality.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cook", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1135", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Human is his speciality.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cook", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1136", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Human is his speciality.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cook", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1137", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Small for a troll, but mean and ugly.", - "melee_animation": "284", - "range_animation": "284", - "attack_speed": "5", - "defence_animation": "285", - "weakness": "7", - "magic_animation": "284", - "death_animation": "287", - "name": "Mountain troll", - "defence_level": "53", - "safespot": null, - "lifepoints": "90", - "strength_level": "20", - "id": "1138", - "range_level": "1", - "attack_level": "53" - }, - { - "examine": "He's fast asleep.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "0", - "name": "Mushroom", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1139", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This beast doesn't need climbing boots.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mountain goat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1140", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This beast doesn't need climbing boots.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mountain goat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1141", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's guarding the storeroom.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1142", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's guarding the storeroom.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1143", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "1144", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "1145", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "1146", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "1147", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "1148", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "death_animation": "", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "1149", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's guarding the goutweed.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1150", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Human is his speciality.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Burntmeat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1151", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "What's he mumbling about?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Weird Old Man", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1152", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I don't think insect repellent will work...", - "melee_animation": "6223", - "range_animation": "6223", - "combat_audio": "571,573,572", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "38", - "defence_animation": "6232", - "weakness": "7", - "slayer_exp": "40", - "magic_animation": "6223", - "death_animation": "6230", - "name": "Kalphite Worker", - "defence_level": "20", - "safespot": null, - "lifepoints": "40", - "strength_level": "20", - "id": "1153", - "bonuses": "0,0,0,0,0,5,5,1,10,10,0,0,0,0,0", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "I don't think insect repellent will work...", - "melee_animation": "6224", - "range_animation": "0", - "combat_audio": "567,569,568", - "attack_speed": "4", - "poisonous": "true", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "6227", - "weakness": "7", - "slayer_exp": "90", - "poison_amount": "20", - "magic_animation": "0", - "death_animation": "6228", - "name": "Kalphite Soldier", - "defence_level": "70", - "safespot": null, - "lifepoints": "90", - "strength_level": "70", - "id": "1154", - "aggressive": "true", - "bonuses": "0,0,0,0,0,25,25,5,50,50,0,0,0,0,0", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "I don't think insect repellent will work...", - "melee_animation": "6223", - "range_animation": "6223", - "attack_speed": "4", - "poisonous": "true", - "magic_level": "1", - "respawn_delay": "65", - "defence_animation": "6232", - "weakness": "7", - "poison_amount": "30", - "magic_animation": "6223", - "death_animation": "6230", - "name": "Kalphite Guardian", - "defence_level": "110", - "safespot": null, - "lifepoints": "170", - "strength_level": "110", - "id": "1155", - "aggressive": "true", - "bonuses": "0,0,0,0,0,25,25,5,50,50,0,0,0,0,0", - "range_level": "1", - "attack_level": "110" - }, - { - "examine": "I don't think insect repellent will work...", - "melee_animation": "6223", - "range_animation": "6223", - "combat_audio": "571,573,572", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "38", - "defence_animation": "6232", - "weakness": "7", - "slayer_exp": "40", - "magic_animation": "6223", - "death_animation": "6230", - "name": "Kalphite Worker", - "defence_level": "20", - "safespot": null, - "lifepoints": "40", - "strength_level": "20", - "id": "1156", - "bonuses": "0,0,0,0,0,5,5,1,10,10,0,0,0,0,0", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "I don't think insect repellent will work...", - "melee_animation": "6223", - "range_animation": "6223", - "attack_speed": "4", - "poisonous": "true", - "magic_level": "1", - "respawn_delay": "65", - "defence_animation": "6232", - "weakness": "7", - "poison_amount": "30", - "magic_animation": "6223", - "death_animation": "6230", - "name": "Kalphite Guardian", - "defence_level": "110", - "safespot": null, - "lifepoints": "170", - "strength_level": "110", - "id": "1157", - "aggressive": "true", - "bonuses": "0,0,0,0,0,25,25,5,50,50,0,0,0,0,0", - "range_level": "1", - "attack_level": "110" - }, - { - "agg_radius": "64", - "examine": "I don't think insect repellent will work...", - "melee_animation": "6241", - "range_animation": "6241", - "attack_speed": "4", - "poisonous": "", - "magic_level": "150", - "respawn_delay": "0", - "defence_animation": "6232", - "weakness": "10", - "magic_animation": "6241", - "death_animation": "6242", - "name": "Kalphite Queen", - "defence_level": "300", - "safespot": null, - "lifepoints": "255", - "strength_level": "300", - "id": "1158", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,50,10,100,100,0,0,0,0,0", - "range_level": "1000", - "attack_level": "300" - }, - { - "agg_radius": "64", - "examine": "I don't think insect repellent will work...", - "melee_animation": "6235", - "range_animation": "6235", - "attack_speed": "4", - "magic_level": "150", - "respawn_delay": "45", - "defence_animation": "6234", - "weakness": "10", - "magic_animation": "6235", - "death_animation": "6233", - "name": "Kalphite Queen", - "defence_level": "300", - "safespot": null, - "lifepoints": "255", - "strength_level": "300", - "id": "1160", - "aggressive": "true", - "bonuses": "0,0,0,0,0,100,100,100,10,10,0,0,0,0,0", - "range_level": "1000", - "attack_level": "300" - }, - { - "examine": "I don't think insect repellent will work...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Kalphite Larva", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1161", - "aggressive": "false", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A huge beast, resembling in some ways a lion, but mostly a twisted nightmare.", - "melee_animation": "1199", - "range_animation": "1197", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "1200", - "weakness": "9", - "magic_animation": "1197", - "death_animation": "1201", - "name": "The Shaikahan", - "defence_level": "50", - "safespot": null, - "lifepoints": "100", - "strength_level": "50", - "id": "1172", - "aggressive": "true", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "He looks pretty handy with that bow.", - "start_gfx": "250", - "combat_style": "1", - "melee_animation": "428", - "range_animation": "426", - "combat_audio": "425,427,426", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "836", - "name": "Elf warrior", - "defence_level": "64", - "safespot": null, - "lifepoints": "91", - "strength_level": "1", - "id": "1183", - "clue_level": "2", - "range_level": "72", - "projectile": "249", - "attack_level": "1" - }, - { - "examine": "I don't wanna be at the wrong end of that pike.", - "melee_animation": "428", - "range_animation": "0", - "combat_audio": "425,427,426", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Elf warrior", - "defence_level": "68", - "safespot": null, - "lifepoints": "85", - "strength_level": "68", - "id": "1184", - "clue_level": "2", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "An elven city guard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Elven city guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1185", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A cute bunny rabbit.", - "melee_animation": "6090", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "6092", - "name": "Rabbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "strength_level": "1", - "id": "1192", - "range_level": "1", - "attack_level": "1" - }, - { - "death_animation": "6092", - "name": "Rabbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "melee_animation": "6090", - "strength_level": "1", - "id": "1193", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "6091" - }, - { - "death_animation": "6092", - "name": "Rabbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "melee_animation": "6090", - "strength_level": "1", - "id": "1194", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "6091" - }, - { - "examine": "It's an NPC.", - "melee_animation": "4921", - "combat_audio": "300,302,301", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "4927", - "slayer_exp": "0", - "death_animation": "4929", - "name": "Grizzly bear", - "defence_level": "35", - "safespot": null, - "lifepoints": "35", - "strength_level": "36", - "id": "1195", - "aggressive": "true", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Eek! A bear cub!", - "range_animation": "0", - "combat_audio": "498,500,499", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "name": "Grizzly bear cub", - "defence_level": "21", - "safespot": null, - "lifepoints": "30", - "strength_level": "21", - "id": "1196", - "range_level": "1", - "attack_level": "21" - }, - { - "name": "Grizzly bear cub", - "defence_level": "1", - "safespot": null, - "lifepoints": "35", - "combat_audio": "498,500,499", - "strength_level": "1", - "id": "1197", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "What big teeth you have.", - "melee_animation": "6559", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "6558", - "name": "Dire Wolf", - "defence_level": "33", - "safespot": null, - "lifepoints": "47", - "strength_level": "33", - "id": "1198", - "range_level": "1", - "attack_level": "33" - }, - { - "examine": "An elf tracker.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Elf Tracker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1199", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of King Tyras's men.", - "melee_animation": "414", - "range_animation": "0", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Tyras guard", - "defence_level": "42", - "safespot": null, - "lifepoints": "60", - "strength_level": "42", - "id": "1200", - "range_level": "1", - "attack_level": "42" - }, - { - "examine": "I don't want to get on the wrong side of him.", - "start_gfx": "250", - "combat_style": "1", - "melee_animation": "426", - "combat_audio": "425,427,426", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Elf warrior", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "id": "1201", - "clue_level": "2", - "range_level": "1", - "projectile": "249", - "attack_level": "1" - }, - { - "examine": "One of King Tyras's men.", - "melee_animation": "395", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Tyras guard", - "defence_level": "110", - "safespot": null, - "lifepoints": "110", - "strength_level": "105", - "id": "1203", - "range_level": "50", - "attack_level": "95" - }, - { - "examine": "One of King Tyras's men.", - "melee_animation": "395", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Tyras guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "112", - "strength_level": "1", - "id": "1204", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Responsible for the food and equipment of the troops.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Quartermaster", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1208", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Mysterious swamp lights...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Will o' the wisp", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1211", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He seems strangely familiar...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Parroty Pete", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1216", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An old gardener.", - "melee_animation": "433", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Gardener", - "defence_level": "4", - "safespot": null, - "lifepoints": "5", - "strength_level": "4", - "id": "1217", - "range_level": "1", - "attack_level": "4" - }, - { - "examine": "A scary, man eating ghoul.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "442,444,443", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "defence_animation": "404", - "weakness": "9", - "slayer_exp": "50", - "magic_animation": "422", - "death_animation": "9055", - "name": "Ghoul", - "defence_level": "30", - "safespot": null, - "lifepoints": "50", - "strength_level": "40", - "id": "1218", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Yuck! It's all slimy!", - "melee_animation": "1273", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "1272", - "name": "Leech", - "defence_level": "42", - "safespot": null, - "lifepoints": "60", - "strength_level": "42", - "id": "1219", - "aggressive": "true", - "range_level": "1", - "attack_level": "42" - }, - { - "examine": "It looks very hungry!", - "melee_animation": "1264", - "slayer_exp": "50", - "death_animation": "7185", - "name": "Vampire", - "defence_level": "52", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1220", - "clue_level": "1", - "range_level": "1", - "attack_level": "52" - }, - { - "slayer_exp": "40", - "examine": "It looks very hungry!", - "name": "Vampire", - "defence_level": "1", - "safespot": null, - "melee_animation": "1264", - "lifepoints": "50", - "strength_level": "1", - "id": "1223", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It looks very hungry!", - "name": "Vampire", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1225", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A marsh coloured blamish snail, these types are said to spit acid.", - "combat_style": "1", - "melee_animation": "8143", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "0", - "magic_animation": "0", - "death_animation": "8144", - "name": "Myre Blamish Snail", - "defence_level": "22", - "safespot": null, - "lifepoints": "8", - "strength_level": "0", - "id": "1227", - "aggressive": "true", - "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", - "range_level": "5", - "attack_level": "0" - }, - { - "examine": "A blood coloured blamish snail, these types are said to spit acid.", - "combat_style": "1", - "melee_animation": "8143", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "0", - "magic_animation": "0", - "death_animation": "8144", - "name": "Blood Blamish Snail", - "defence_level": "45", - "safespot": null, - "lifepoints": "13", - "strength_level": "0", - "id": "1228", - "aggressive": "true", - "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", - "range_level": "12", - "attack_level": "0" - }, - { - "examine": "A muddy coloured blamish snail, these types are said to spit acid.", - "combat_style": "1", - "melee_animation": "8143", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "0", - "magic_animation": "0", - "death_animation": "8144", - "name": "Ochre Blamish Snail", - "defence_level": "18", - "safespot": null, - "lifepoints": "10", - "strength_level": "0", - "id": "1229", - "aggressive": "true", - "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", - "range_level": "7", - "attack_level": "0" - }, - { - "examine": "A bruise blue coloured blamish snail, these types are said to spit acid.", - "combat_style": "1", - "melee_animation": "8143", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "0", - "magic_animation": "0", - "death_animation": "8144", - "name": "Bruise Blamish Snail", - "defence_level": "40", - "safespot": null, - "lifepoints": "12", - "strength_level": "0", - "id": "1230", - "aggressive": "true", - "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", - "range_level": "15", - "attack_level": "0" - }, - { - "agg_radius": "", - "examine": "A branch bark coloured blamish snail, these types are said to spit acid.", - "combat_style": "1", - "melee_animation": "8143", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "0", - "magic_animation": "0", - "death_animation": "8144", - "name": "Bark Blamish Snail", - "defence_level": "20", - "safespot": null, - "lifepoints": "22", - "strength_level": "0", - "id": "1231", - "aggressive": "true", - "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", - "range_level": "10", - "attack_level": "0" - }, - { - "examine": "A marsh coloured blamish snail, these types are said to spit acid.", - "combat_style": "1", - "melee_animation": "8143", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "0", - "magic_animation": "0", - "death_animation": "8144", - "name": "Myre Blamish Snail", - "defence_level": "22", - "safespot": null, - "lifepoints": "8", - "strength_level": "0", - "id": "1232", - "aggressive": "true", - "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", - "range_level": "5", - "attack_level": "0" - }, - { - "examine": "A blood coloured blamish snail, these types are said to spit acid.", - "combat_style": "1", - "melee_animation": "8143", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "0", - "magic_animation": "0", - "death_animation": "8144", - "name": "Blood Blamish Snail", - "defence_level": "45", - "safespot": null, - "lifepoints": "13", - "strength_level": "0", - "id": "1233", - "aggressive": "true", - "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", - "range_level": "12", - "attack_level": "0" - }, - { - "examine": "A muddy coloured blamish snail, these types are said to spit acid.", - "combat_style": "1", - "melee_animation": "8143", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "0", - "magic_animation": "0", - "death_animation": "8144", - "name": "Ochre Blamish Snail", - "defence_level": "18", - "safespot": null, - "lifepoints": "10", - "strength_level": "0", - "id": "1234", - "aggressive": "true", - "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", - "range_level": "7", - "attack_level": "0" - }, - { - "examine": "A bruise blue coloured blamish snail, these types are said to spit acid.", - "combat_style": "1", - "melee_animation": "8143", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "0", - "magic_animation": "0", - "death_animation": "8144", - "name": "Bruise Blamish Snail", - "defence_level": "40", - "safespot": null, - "lifepoints": "12", - "strength_level": "0", - "id": "1235", - "aggressive": "true", - "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", - "range_level": "15", - "attack_level": "0" - }, - { - "examine": "A Bedabin nomad fighter - a sandy swordsman.", - "melee_animation": "390", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Bedabin Nomad Fighter", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "1239", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "A shadowy sort of entity", - "melee_animation": "0", - "range_animation": "0", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "0", - "name": "Loar Shadow", - "defence_level": "26", - "safespot": null, - "lifepoints": "38", - "strength_level": "30", - "id": "1240", - "aggressive": "true", - "range_level": "1", - "attack_level": "45" - }, - { - "examine": "The shadowy remains of a long departed soul.", - "melee_animation": "1283", - "range_animation": "0", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "1284", - "weakness": "3", - "magic_animation": "0", - "death_animation": "1308", - "name": "Loar Shade", - "defence_level": "26", - "safespot": null, - "lifepoints": "38", - "strength_level": "30", - "id": "1241", - "aggressive": "true", - "range_level": "1", - "attack_level": "45" - }, - { - "examine": "A shadowy sort of entity", - "melee_animation": "0", - "range_animation": "0", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "0", - "name": "Phrin Shadow", - "defence_level": "42", - "safespot": null, - "lifepoints": "56", - "strength_level": "47", - "id": "1243", - "aggressive": "true", - "range_level": "1", - "attack_level": "64" - }, - { - "examine": "The shadowy remains of a long departed soul.", - "melee_animation": "1283", - "range_animation": "0", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "1287", - "name": "Phrin Shade", - "defence_level": "42", - "safespot": null, - "lifepoints": "56", - "strength_level": "47", - "id": "1244", - "aggressive": "true", - "range_level": "1", - "attack_level": "64" - }, - { - "examine": "A shadowy sort of entity", - "melee_animation": "0", - "range_animation": "0", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "0", - "name": "Riyl Shadow", - "defence_level": "60", - "safespot": null, - "lifepoints": "76", - "strength_level": "55", - "id": "1245", - "aggressive": "true", - "range_level": "1", - "attack_level": "88" - }, - { - "examine": "The shadowy remains of a long departed soul.", - "melee_animation": "1283", - "range_animation": "0", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "1287", - "name": "Riyl Shade", - "defence_level": "60", - "safespot": null, - "lifepoints": "76", - "strength_level": "55", - "id": "1246", - "aggressive": "true", - "range_level": "1", - "attack_level": "88" - }, - { - "examine": "A shadowy sort of entity", - "melee_animation": "0", - "range_animation": "0", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "0", - "name": "Asyn Shadow", - "defence_level": "70", - "safespot": null, - "lifepoints": "90", - "strength_level": "84", - "id": "1247", - "aggressive": "true", - "range_level": "1", - "attack_level": "102" - }, - { - "examine": "The shadowy remains of a long departed soul.", - "melee_animation": "1283", - "range_animation": "0", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "1287", - "name": "Asyn Shade", - "defence_level": "70", - "safespot": null, - "lifepoints": "90", - "strength_level": "84", - "id": "1248", - "aggressive": "true", - "range_level": "1", - "attack_level": "102" - }, - { - "examine": "A shadowy sort of entity", - "melee_animation": "0", - "range_animation": "0", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "0", - "name": "Fiyr Shadow", - "defence_level": "85", - "safespot": null, - "lifepoints": "110", - "strength_level": "100", - "id": "1249", - "aggressive": "true", - "range_level": "1", - "attack_level": "120" - }, - { - "examine": "The shadowy remains of a long departed soul.", - "melee_animation": "1283", - "range_animation": "0", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "1287", - "name": "Fiyr Shade", - "defence_level": "85", - "safespot": null, - "lifepoints": "110", - "strength_level": "100", - "id": "1250", - "aggressive": "true", - "range_level": "1", - "attack_level": "120" - }, - { - "examine": "A local villager of Mort'ton.", - "melee_animation": "422", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Afflicted", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "1257", - "range_level": "1", - "attack_level": "43" - }, - { - "examine": "A local villager of Mort'ton.", - "melee_animation": "422", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Afflicted", - "defence_level": "44", - "safespot": null, - "lifepoints": "62", - "strength_level": "44", - "id": "1258", - "range_level": "1", - "attack_level": "44" - }, - { - "examine": "A local villager of Mort'ton.", - "melee_animation": "422", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Afflicted", - "defence_level": "45", - "safespot": null, - "lifepoints": "64", - "strength_level": "45", - "id": "1261", - "range_level": "1", - "attack_level": "45" - }, - { - "examine": "A local villager of Mort'ton.", - "melee_animation": "422", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Afflicted", - "defence_level": "46", - "safespot": null, - "lifepoints": "65", - "strength_level": "46", - "id": "1262", - "aggressive": "true", - "range_level": "1", - "attack_level": "46" - }, - { - "examine": "Slightly more magical.", - "name": "Wizard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "1263", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A follower of Saradomin.", - "melee_animation": "376", - "range_animation": "0", - "poisonous": "true", - "magic_level": "90", - "spell_id": "41", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "poison_amount": "30", - "magic_animation": "811", - "death_animation": "836", - "name": "Saradomin wizard", - "defence_level": "70", - "safespot": null, - "lifepoints": "120", - "strength_level": "90", - "id": "1264", - "aggressive": "true", - "range_level": "70", - "attack_level": "90" - }, - { - "examine": "No one likes crabs...", - "melee_animation": "1312", - "range_animation": "1312", - "combat_audio": "717,723,722", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "1313", - "weakness": "7", - "magic_animation": "1312", - "death_animation": "1314", - "name": "Rock Crab", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1265", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A rocky outcrop.", - "melee_animation": "1312", - "range_animation": "1312", - "attack_speed": "5", - "defence_animation": "1313", - "weakness": "7", - "magic_animation": "1312", - "death_animation": "1314", - "name": "Rocks", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1266", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "No one likes crabs...", - "melee_animation": "1312", - "range_animation": "1312", - "combat_audio": "717,723,722", - "attack_speed": "4", - "respawn_delay": "50", - "defence_animation": "1313", - "magic_animation": "1312", - "death_animation": "1314", - "name": "Rock Crab", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1267", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A rocky outcrop.", - "melee_animation": "1312", - "range_animation": "1312", - "attack_speed": "5", - "defence_animation": "1313", - "magic_animation": "1312", - "death_animation": "1314", - "name": "Rocks", - "defence_level": "4", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1268", - "aggressive": "true", - "range_level": "1", - "attack_level": "4" - }, - { - "examine": "A Fremennik bard.", - "melee_animation": "1312", - "range_animation": "1312", - "attack_speed": "5", - "defence_animation": "1313", - "magic_animation": "1312", - "death_animation": "1314", - "name": "Olaf the Bard", - "defence_level": "8", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1269", - "aggressive": "true", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "Distinctly troll-shaped.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Lalli", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1270", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Freshly shorn.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Golden sheep", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1271", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Lovely thick wool.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Golden sheep", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1272", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A powerful spirit that lives in this lake.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fossegrimen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1273", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks like he's had a few drinks already.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ospak", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1274", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Doesn't look like the musical type.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Styrmir", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1275", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Waiting for the show.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Torbrund", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1276", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He sits impatiently with his friends.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fridgeir", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1277", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's fat, he's round, he bounces on the ground. That's how he got the job.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Longhall Bouncer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1278", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A fearful spirit of the drowned.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "The Draugen", - "defence_level": "40", - "safespot": null, - "lifepoints": "57", - "strength_level": "40", - "id": "1279", - "aggressive": "true", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "A Fremennik hunter.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sigli the Huntsman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1281", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Fremennik merchant.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sigmund The Merchant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1282", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Fremennik navigator.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Swensen the Navigator", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1283", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Every innkeeper's best friend!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Manni the Reveller", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1286", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Supposedly fixes things around Gielinor.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Council workman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1287", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Fremennik riddler.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Peer the Seer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1288", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Fremennik hero.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Thorvald the Warrior", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1289", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Your challenge awaits! ", - "melee_animation": "390", - "range_animation": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "836", - "name": "Koschei the deathless", - "defence_level": "13", - "safespot": null, - "lifepoints": "14", - "strength_level": "13", - "id": "1290", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "He lives again!", - "melee_animation": "390", - "range_animation": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "836", - "name": "Koschei the deathless", - "defence_level": "13", - "safespot": null, - "lifepoints": "14", - "strength_level": "13", - "id": "1291", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "He keeps on living!", - "melee_animation": "390", - "range_animation": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "836", - "name": "Koschei the deathless", - "defence_level": "13", - "safespot": null, - "lifepoints": "14", - "strength_level": "13", - "id": "1292", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "He just keeps on going.", - "melee_animation": "390", - "range_animation": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "836", - "name": "Koschei the deathless", - "defence_level": "13", - "safespot": null, - "lifepoints": "14", - "strength_level": "13", - "id": "1293", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "The Fremennik tribe's chieftain.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brundt the Chieftain", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1294", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Stands around and looks at stuff all day.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1296", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "1297", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "What a rubbish job he has.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Town Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1298", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Longhall barkeep", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "A bartender.", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1300", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Pretty shabbily dressed for a clothes shop owner.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Yrsa", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1301", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "There's something fishy about this guy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fisherman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1302", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Sells and makes weapons and armour.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Skulgrimen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1303", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's strong to the finish", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sailor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1304", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Rellekka's many citizens.", - "melee_animation": "422", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Agnar", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1305", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Rellekka's many citizens.", - "melee_animation": "422", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Freidir", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1306", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Rellekka's many citizens.", - "melee_animation": "395", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Borrokar", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1307", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Rellekka's many citizens.", - "melee_animation": "422", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Lanzig", - "defence_level": "1", - "safespot": null, - "lifepoints": "51", - "strength_level": "1", - "id": "1308", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Rellekka's many citizens.", - "melee_animation": "422", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pontak", - "defence_level": "1", - "safespot": null, - "lifepoints": "51", - "strength_level": "1", - "id": "1309", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Rellekka's many citizens.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sassilik", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1313", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Rellekka's many citizens.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Inga", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1314", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Fish-tastic!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish monger", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1315", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I wonder what he does with all that fur?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fur trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1316", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Keeps the stalls secure.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Market Guard", - "defence_level": "28", - "safespot": null, - "lifepoints": "40", - "strength_level": "28", - "id": "1317", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A hardened Fremennik warrior.", - "melee_animation": "401", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Warrior", - "defence_level": "28", - "safespot": null, - "lifepoints": "40", - "strength_level": "28", - "id": "1318", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A cunning animal.", - "melee_animation": "6562", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6570", - "name": "Fox", - "defence_level": "32", - "safespot": null, - "lifepoints": "45", - "strength_level": "32", - "id": "1319", - "range_level": "1", - "attack_level": "32" - }, - { - "examine": "Hoppity", - "melee_animation": "1245", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "1246", - "name": "Bunny", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "strength_level": "1", - "id": "1320", - "range_level": "1", - "attack_level": "1" - }, - { - "death_animation": "1246", - "name": "Bunny", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "melee_animation": "1245", - "strength_level": "1", - "id": "1321", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "1244" - }, - { - "examine": "Cute. But deadly.", - "range_animation": "0", - "combat_audio": "498,500,499", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "name": "Bear Cub", - "defence_level": "8", - "safespot": null, - "lifepoints": "11", - "strength_level": "8", - "id": "1326", - "aggressive": "true", - "range_level": "1", - "attack_level": "8" - }, - { - "examine": "Cute. But deadly.", - "name": "Bear Cub", - "defence_level": "1", - "safespot": null, - "lifepoints": "20", - "combat_audio": "498,500,499", - "strength_level": "1", - "id": "1327", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "Horned horsey.", - "melee_animation": "6376", - "range_animation": "6376", - "combat_audio": "369,371,370", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "90", - "defence_animation": "6375", - "weakness": "7", - "magic_animation": "6376", - "death_animation": "6377", - "name": "Unicorn Foal", - "defence_level": "10", - "safespot": null, - "lifepoints": "15", - "strength_level": "6", - "id": "1328", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "Cute but evil.", - "melee_animation": "6376", - "range_animation": "0", - "combat_audio": "369,371,370", - "attack_speed": "4", - "respawn_delay": "20", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6377", - "name": "Black unicorn Foal", - "defence_level": "18", - "safespot": null, - "lifepoints": "25", - "strength_level": "18", - "id": "1329", - "aggressive": "false", - "range_level": "1", - "attack_level": "18" - }, - { - "examine": "Fearsome predator found only in the Fremennik Province", - "melee_animation": "6559", - "range_animation": "0", - "combat_audio": "481,491,490", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "slayer_exp": "69", - "magic_animation": "0", - "death_animation": "6558", - "name": "Wolf", - "defence_level": "35", - "safespot": null, - "lifepoints": "69", - "strength_level": "35", - "id": "1330", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "A horror from the ocean depths...", - "combat_style": "1", - "melee_animation": "1340", - "range_animation": "1340", - "attack_speed": "5", - "defence_animation": "1341", - "magic_animation": "1340", - "death_animation": "1342", - "name": "Dagannoth", - "defence_level": "70", - "safespot": null, - "lifepoints": "70", - "strength_level": "80", - "id": "1338", - "clue_level": "1", - "range_level": "85", - "projectile": "288", - "attack_level": "80" - }, - { - "examine": "A horror from the ocean depths...", - "combat_style": "1", - "melee_animation": "1343", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Dagannoth", - "defence_level": "1", - "safespot": null, - "lifepoints": "70", - "strength_level": "1", - "id": "1339", - "aggressive": "true", - "clue_level": "1", - "range_level": "1", - "projectile": "288", - "attack_level": "1" - }, - { - "examine": "A horror from the ocean depths...", - "combat_style": "1", - "melee_animation": "1343", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Dagannoth", - "defence_level": "1", - "safespot": null, - "lifepoints": "70", - "strength_level": "1", - "id": "1340", - "aggressive": "true", - "clue_level": "1", - "range_level": "1", - "projectile": "288", - "attack_level": "1" - }, - { - "examine": "A horror from the ocean depths...", - "melee_animation": "1341", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Dagannoth", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "id": "1341", - "aggressive": "true", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A horror from the ocean depths...", - "melee_animation": "1341", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Dagannoth", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "id": "1342", - "aggressive": "true", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A horror from the ocean depths...", - "melee_animation": "1341", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Dagannoth", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "id": "1343", - "aggressive": "true", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A horror from the ocean depths...", - "name": "Dagannoth", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1344", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A horror from the ocean depths...", - "name": "Dagannoth", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1345", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A horror from the ocean depths...", - "name": "Dagannoth", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1346", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A horror from the ocean depths...", - "name": "Dagannoth", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1347", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A horror from the ocean depths.", - "melee_animation": "1341", - "range_animation": "0", - "magic_level": "60", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "1342", - "name": "Dagannoth mother", - "defence_level": "60", - "safespot": null, - "lifepoints": "128", - "strength_level": "60", - "id": "1351", - "aggressive": "true", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "A horror from the ocean depths.", - "melee_animation": "1341", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Dagannoth mother", - "defence_level": "1", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "1352", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A horror from the ocean depths.", - "melee_animation": "1341", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Dagannoth mother", - "defence_level": "1", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "1353", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A horror from the ocean depths.", - "melee_animation": "1341", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Dagannoth mother", - "defence_level": "1", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "1354", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A horror from the ocean depths.", - "melee_animation": "1341", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Dagannoth mother", - "defence_level": "1", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "1355", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A horror from the ocean depths.", - "melee_animation": "1341", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Dagannoth mother", - "defence_level": "1", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "1356", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Pretty barmaid.", - "name": "Sam", - "id": "1357" - }, - { - "examine": "Pretty barmaid.", - "name": "Rachael", - "id": "1358" - }, - { - "examine": "He seems happy to see you.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1360", - "range_level": "1", - "attack_level": "1" - }, - { - "death_animation": "836", - "name": "Skraeling", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "melee_animation": "401", - "strength_level": "1", - "id": "1367", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "death_animation": "836", - "name": "Skraeling", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "melee_animation": "395", - "strength_level": "1", - "id": "1368", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "examine": "Hmm", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fishmonger", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1369", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "At least he eats his greens.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Greengrocer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1370", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's guarding the throne room.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1374", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's cutting the wheat.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Farmer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1377", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "No-one would mistake her for a duchess.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Flower Girl", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1378", - "range_level": "1", - "attack_level": "1" - }, - { - "death_animation": "836", - "name": "Alrik", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "melee_animation": "422", - "strength_level": "1", - "id": "1381", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "examine": "He's strong to the finish, because he eats cabbage.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sailor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1385", - "range_level": "1", - "attack_level": "1" - }, - { - "death_animation": "836", - "name": "Rannveig", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "melee_animation": "422", - "strength_level": "1", - "id": "1386", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "death_animation": "836", - "name": "Valgerd", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "melee_animation": "422", - "strength_level": "1", - "id": "1388", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "death_animation": "836", - "name": "Skraeling", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "melee_animation": "395", - "strength_level": "1", - "id": "1389", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "death_animation": "836", - "name": "Broddi", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "melee_animation": "422", - "strength_level": "1", - "id": "1390", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "death_animation": "836", - "name": "Skraeling", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "melee_animation": "395", - "strength_level": "1", - "id": "1391", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "death_animation": "836", - "name": "Ragnvald", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "melee_animation": "810", - "strength_level": "1", - "id": "1392", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "examine": "Hmm", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fishmonger", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1393", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "At least he eats his greens.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Greengrocer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1394", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's a lumberjack", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Lumberjack Leif", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1395", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's just mining his own business.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Miner Magnus", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1396", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "There's something fishy about him.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fisherman Frodi", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1397", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She's looking a bit weedy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gardener Gunnhild", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1398", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Yep. Definitely a chicken.", - "melee_animation": "5387", - "range_animation": "5387", - "combat_audio": "355,357,356", - "attack_speed": "6", - "respawn_delay": "18", - "defence_animation": "5388", - "magic_animation": "5387", - "death_animation": "5389", - "name": "Chicken", - "defence_level": "1", - "safespot": null, - "lifepoints": "3", - "strength_level": "1", - "id": "1401", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Yep. Definitely a chicken.", - "melee_animation": "5387", - "range_animation": "5387", - "combat_audio": "355,357,356", - "attack_speed": "6", - "respawn_delay": "18", - "defence_animation": "5388", - "magic_animation": "5387", - "death_animation": "5389", - "name": "Chicken", - "defence_level": "1", - "safespot": null, - "lifepoints": "3", - "strength_level": "1", - "id": "1402", - "range_level": "1", - "attack_level": "1" - }, - { - "death_animation": "5389", - "name": "Rooster", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "melee_animation": "5387", - "strength_level": "1", - "id": "1403", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "5388" - }, - { - "death_animation": "6092", - "name": "Rabbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "melee_animation": "6090", - "strength_level": "1", - "id": "1404", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "6091" - }, - { - "examine": "There to help me make my bids.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Lumdo", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1419", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An official looking Gnome with small beady eyes.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "G.L.O. Caranock", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1427", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "1383", - "respawn_delay": "60", - "defence_animation": "1393", - "death_animation": "1384", - "name": "Duke", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "id": "1442", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "1383", - "respawn_delay": "60", - "defence_animation": "1393", - "death_animation": "1384", - "name": "Oipuis", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "id": "1443", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "1383", - "respawn_delay": "60", - "defence_animation": "1393", - "death_animation": "1384", - "name": "Uyoro", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "id": "1444", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "1383", - "respawn_delay": "60", - "defence_animation": "1387", - "death_animation": "1384", - "name": "Ouhai", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "id": "1445", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "1383", - "respawn_delay": "60", - "defence_animation": "1393", - "death_animation": "1384", - "name": "Uodai", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "id": "1446", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "1383", - "respawn_delay": "60", - "defence_animation": "1393", - "death_animation": "1384", - "name": "Padulah", - "defence_level": "1", - "safespot": null, - "lifepoints": "133", - "strength_level": "1", - "id": "1447", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A rather sleepy looking guard", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "629,631,630", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sleeping Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1451", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An adorable little monkey child.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "629,631,630", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Monkey Child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1452", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks like the Monkey's Uncle.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "629,631,630", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "The Monkey's Uncle", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1453", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She looks like the Monkey's Aunt.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "629,631,630", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "The Monkey's Aunt", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1454", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A scimitar wielding ninja monkey.", - "melee_animation": "1392", - "range_animation": "0", - "combat_audio": "629,631,630", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "1384", - "name": "Monkey Guard", - "defence_level": "66", - "safespot": null, - "lifepoints": "94", - "strength_level": "66", - "id": "1455", - "range_level": "1", - "attack_level": "66" - }, - { - "examine": "A bow wielding ninja monkey.", - "combat_style": "1", - "melee_animation": "0", - "range_animation": "1394", - "combat_audio": "629,631,630", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "0", - "name": "Monkey Archer", - "defence_level": "58", - "safespot": null, - "lifepoints": "82", - "strength_level": "43", - "id": "1456", - "aggressive": "true", - "range_level": "58", - "attack_level": "43" - }, - { - "combat_style": "1", - "melee_animation": "1394", - "combat_audio": "629,631,630", - "respawn_delay": "60", - "defence_animation": "1393", - "death_animation": "1384", - "name": "Monkey Archer", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1457", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "combat_style": "1", - "melee_animation": "1394", - "combat_audio": "629,631,630", - "respawn_delay": "60", - "defence_animation": "1393", - "death_animation": "1384", - "name": "Monkey Archer", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1458", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A huge brutish gorilla armoured with dangerous looking vambraces.", - "melee_animation": "1402", - "range_animation": "1402", - "combat_audio": "629,631,630", - "attack_speed": "6", - "defence_animation": "1403", - "weakness": "8", - "magic_animation": "1402", - "death_animation": "1404", - "name": "Monkey Guard", - "defence_level": "90", - "safespot": null, - "lifepoints": "130", - "strength_level": "130", - "id": "1459", - "range_level": "1", - "attack_level": "100" - }, - { - "examine": "A huge brutish gorilla armoured with dangerous looking vambraces.", - "melee_animation": "1402", - "range_animation": "0", - "combat_audio": "629,631,630", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "1404", - "name": "Monkey Guard", - "defence_level": "63", - "safespot": null, - "lifepoints": "90", - "strength_level": "63", - "id": "1460", - "aggressive": "true", - "range_level": "1", - "attack_level": "63" - }, - { - "examine": "A huge brutish gorilla stands here", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Elder Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1461", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "1463", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "1464", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A large and lumbering undead monkey.", - "melee_animation": "1383", - "range_animation": "0", - "combat_audio": "629,631,630", - "attack_speed": "4", - "magic_level": "60", - "respawn_delay": "50", - "defence_animation": "1393", - "weakness": "6", - "magic_animation": "0", - "death_animation": "1384", - "name": "Monkey Zombie", - "defence_level": "60", - "safespot": null, - "lifepoints": "60", - "strength_level": "60", - "id": "1465", - "aggressive": "true", - "bonuses": "35,35,35,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "150" - }, - { - "examine": "A large and lumbering undead monkey stands here, blocking the way.", - "melee_animation": "1392", - "combat_audio": "629,631,630", - "attack_speed": "4", - "magic_level": "90", - "respawn_delay": "13", - "defence_animation": "1393", - "death_animation": "1384", - "name": "Monkey Zombie", - "defence_level": "90", - "safespot": null, - "lifepoints": "90", - "strength_level": "110", - "id": "1466", - "aggressive": "true", - "bonuses": "35,35,35,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "150" - }, - { - "examine": "A recently deceased monkey. Its flesh seems to be worse for the wear.", - "melee_animation": "1392", - "combat_audio": "629,631,630", - "attack_speed": "4", - "magic_level": "60", - "respawn_delay": "50", - "defence_animation": "1393", - "death_animation": "1384", - "name": "Monkey Zombie", - "defence_level": "60", - "safespot": null, - "lifepoints": "60", - "strength_level": "60", - "id": "1467", - "aggressive": "true", - "bonuses": "15,15,15,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "100" - }, - { - "examine": "He looks like the type of guy who would mind monkeys.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "629,631,630", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Monkey minder", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1469", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Greater Jungle demon. A magical aura emanates from its hide.", - "range_animation": "0", - "combat_audio": "400,404,403", - "attack_speed": "2", - "magic_level": "50", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "name": "Jungle demon", - "defence_level": "50", - "safespot": null, - "lifepoints": "428", - "strength_level": "50", - "id": "1472", - "aggressive": "true", - "range_level": "50", - "attack_level": "50" - }, - { - "melee_animation": "6249", - "respawn_delay": "60", - "defence_animation": "6250", - "death_animation": "6251", - "name": "Spider", - "defence_level": "1", - "safespot": null, - "lifepoints": "2", - "strength_level": "1", - "id": "1473", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a brightly coloured bird of the jungle.", - "melee_animation": "6775", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "6779", - "name": "Bird", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "1475", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "It's a brightly coloured bird of the jungle. It flies very quickly.", - "melee_animation": "6775", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "6777", - "name": "Bird", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "1476", - "range_level": "1", - "attack_level": "5" - }, - { - "slayer_exp": "17", - "name": "Scorpion", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "3611,3612,3610", - "strength_level": "1", - "id": "1477", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very dangerous looking spider", - "melee_animation": "5327", - "range_animation": "0", - "combat_audio": "537,539,538", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "5329", - "name": "Jungle spider", - "defence_level": "63", - "safespot": null, - "lifepoints": "90", - "strength_level": "47", - "id": "1478", - "aggressive": "true", - "range_level": "63", - "attack_level": "47" - }, - { - "name": "Snake", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "3609,3608,3610", - "strength_level": "1", - "id": "1479", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Small ninja monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "1480", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Medium ninja monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "1481", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Bearded gorilla", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "498,500,499", - "strength_level": "1", - "id": "1483", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Ancient monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "1484", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Small zombie monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "1485", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Large zombie monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "1486", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "1487", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A huge nail beast. Its nails appear very sharp.", - "melee_animation": "5989", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "5990", - "name": "Nail beast", - "defence_level": "20", - "safespot": null, - "lifepoints": "550", - "strength_level": "150", - "id": "1521", - "range_level": "1", - "attack_level": "150" - }, - { - "examine": "He is one", - "melee_animation": "5970", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "5972", - "name": "Undead Lumberjack", - "defence_level": "10", - "safespot": null, - "lifepoints": "100", - "strength_level": "73", - "id": "1524", - "range_level": "1", - "attack_level": "73" - }, - { - "examine": "His robes prominently display the star of Saradomin.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Zealot", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1528", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Imp", - "defence_level": "1", - "safespot": null, - "movement_radius": "25", - "lifepoints": "8", - "strength_level": "1", - "id": "1531", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Handy for hindering the enemy team's movement.", - "combat_style": "1", - "melee_animation": "0", - "range_animation": "0", - "attack_speed": "5", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "9658", - "name": "Barricade", - "defence_level": "1", - "poison_immune": "true", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1532", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Handy for hindering the enemy team's movement.", - "combat_style": "1", - "melee_animation": "0", - "range_animation": "0", - "attack_speed": "5", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "9658", - "name": "Barricade", - "defence_level": "1", - "poison_immune": "true", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1533", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Handy for hindering the enemy team's movement.", - "melee_animation": "0", - "range_animation": "0", - "attack_speed": "5", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "9658", - "name": "Barricade", - "defence_level": "1", - "poison_immune": "true", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1534", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Handy for hindering the enemy team's movement.", - "melee_animation": "0", - "range_animation": "0", - "attack_speed": "5", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "9658", - "name": "Barricade", - "defence_level": "1", - "poison_immune": "true", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1535", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "185", - "respawn_delay": "60", - "defence_animation": "186", - "death_animation": "188", - "name": "Possessed pickaxe", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "strength_level": "1", - "id": "1536", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A strange disturbance in the air.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "0", - "name": "Haze", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1537", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Well", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "0", - "name": "Corpse", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1538", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I don't think the pickaxe is for hitting rocks.", - "melee_animation": "5485", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "slayer_exp": "0", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeletal miner", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "1539", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "melee_animation": "5540", - "respawn_delay": "60", - "defence_animation": "5541", - "death_animation": "5542", - "name": "Treus Dayth", - "defence_level": "1", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "1540", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "25", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "1541", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5540", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5541", - "slayer_exp": "25", - "death_animation": "5542", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "1549", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A large boisterous bird, a delicacy for ogres.", - "melee_animation": "6761", - "range_animation": "0", - "combat_audio": "1449,1451,1450", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "6762", - "name": "Chompy bird", - "defence_level": "3", - "safespot": null, - "poison_immune": "true", - "lifepoints": "10", - "strength_level": "5", - "id": "1550", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "5" - }, - { - "name": "Mischievous ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "1551", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Ug", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "1553", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Arrg", - "defence_level": "1", - "safespot": null, - "lifepoints": "150", - "strength_level": "1", - "attack_speed": "5", - "id": "1556", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Ug", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "1557", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not man's best friend.", - "melee_animation": "6559", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6558", - "name": "Ice wolf", - "defence_level": "51", - "safespot": null, - "lifepoints": "72", - "strength_level": "51", - "id": "1558", - "aggressive": "true", - "range_level": "1", - "attack_level": "51" - }, - { - "examine": "Brrrrr...he must be cold!", - "melee_animation": "284", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice Troll", - "defence_level": "60", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "1560", - "aggressive": "true", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Brrrrr...he must be cold!", - "melee_animation": "284", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice Troll", - "defence_level": "60", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "1561", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Brrrrr...he must be cold!", - "melee_animation": "284", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice Troll", - "defence_level": "60", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "1562", - "aggressive": "true", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Brrrrr...he must be cold!", - "melee_animation": "284", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice Troll", - "defence_level": "60", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "1563", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Brrrrr...he must be cold!", - "melee_animation": "284", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice Troll", - "defence_level": "60", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "1564", - "aggressive": "true", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Brrrrr...he must be cold!", - "melee_animation": "284", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice Troll", - "defence_level": "60", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "1565", - "aggressive": "true", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Brrrrr...he must be cold!", - "melee_animation": "284", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice Troll", - "defence_level": "60", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "1566", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "A tall and imposing man who's more than familiar with boating.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cyreg Paddlehorn", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1567", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very large elemental adversary.", - "melee_animation": "4666", - "range_animation": "4666", - "combat_audio": "447,451,450", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "4664", - "weakness": "1", - "slayer_exp": "111", - "magic_animation": "4666", - "death_animation": "4668", - "name": "Fire giant", - "defence_level": "65", - "safespot": null, - "lifepoints": "111", - "strength_level": "65", - "id": "1582", - "aggressive": "true", - "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "A very large elemental adversary.", - "melee_animation": "4666", - "range_animation": "4666", - "combat_audio": "447,451,450", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "4664", - "weakness": "1", - "slayer_exp": "111", - "magic_animation": "4666", - "death_animation": "4668", - "name": "Fire giant", - "defence_level": "65", - "safespot": null, - "lifepoints": "111", - "strength_level": "65", - "id": "1583", - "aggressive": "true", - "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "A very large elemental adversary.", - "melee_animation": "4666", - "range_animation": "4666", - "combat_audio": "447,451,450", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "4664", - "weakness": "1", - "slayer_exp": "111", - "magic_animation": "4666", - "death_animation": "4668", - "name": "Fire giant", - "defence_level": "65", - "safespot": null, - "lifepoints": "111", - "strength_level": "65", - "id": "1584", - "aggressive": "true", - "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "A very large elemental adversary.", - "melee_animation": "4666", - "range_animation": "4666", - "combat_audio": "447,451,450", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "4664", - "weakness": "1", - "slayer_exp": "111", - "magic_animation": "4666", - "death_animation": "4668", - "name": "Fire giant", - "defence_level": "65", - "safespot": null, - "lifepoints": "111", - "strength_level": "65", - "id": "1585", - "aggressive": "true", - "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "A very large elemental adversary.", - "melee_animation": "4666", - "range_animation": "4666", - "combat_audio": "447,451,450", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "4664", - "weakness": "1", - "slayer_exp": "111", - "magic_animation": "4666", - "death_animation": "4668", - "name": "Fire giant", - "defence_level": "65", - "safespot": null, - "lifepoints": "111", - "strength_level": "65", - "id": "1586", - "aggressive": "true", - "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "His beard seems to have a life of its own.", - "melee_animation": "4666", - "range_animation": "4666", - "combat_audio": "449,451,450", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4665", - "weakness": "1", - "slayer_exp": "60", - "magic_animation": "4666", - "death_animation": "4668", - "name": "Moss giant", - "defence_level": "30", - "safespot": null, - "lifepoints": "60", - "strength_level": "30", - "id": "1587", - "aggressive": "true", - "bonuses": "33,33,33,0,0,0,0,0,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "His beard seems to have a life of its own.", - "melee_animation": "4666", - "range_animation": "4666", - "combat_audio": "449,451,450", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4665", - "weakness": "1", - "slayer_exp": "60", - "magic_animation": "4666", - "death_animation": "4668", - "name": "Moss giant", - "defence_level": "30", - "safespot": null, - "lifepoints": "60", - "strength_level": "30", - "id": "1588", - "aggressive": "true", - "bonuses": "33,33,33,0,0,0,0,0,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Young but still dangerous.", - "melee_animation": "25", - "range_animation": "25", - "combat_audio": "405,407,406", - "attack_speed": "5", - "magic_level": "40", - "respawn_delay": "32", - "defence_animation": "26", - "weakness": "3", - "magic_animation": "25", - "death_animation": "28", - "name": "Baby red dragon", - "defence_level": "42", - "safespot": null, - "lifepoints": "50", - "strength_level": "40", - "id": "1589", - "aggressive": "true", - "bonuses": "50,40,64,60,30,45,40,40,20,40,40,20,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Its scales seem to be made of bronze.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "100", - "respawn_delay": "40", - "defence_animation": "89", - "weakness": "7", - "slayer_exp": "125", - "magic_animation": "80", - "death_animation": "92", - "name": "Bronze dragon", - "defence_level": "112", - "safespot": null, - "lifepoints": "122", - "strength_level": "112", - "id": "1590", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,30,90,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "112" - }, - { - "examine": "Its scales seem to be made of iron.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "100", - "respawn_delay": "45", - "defence_animation": "89", - "weakness": "7", - "slayer_exp": "173", - "magic_animation": "80", - "death_animation": "92", - "name": "Iron dragon", - "defence_level": "165", - "safespot": null, - "lifepoints": "165", - "strength_level": "165", - "id": "1591", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,30,90,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "165" - }, - { - "examine": "Its scales seem to be made of steel.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "100", - "respawn_delay": "45", - "defence_animation": "89", - "weakness": "7", - "slayer_exp": "221", - "magic_animation": "80", - "death_animation": "92", - "name": "Steel dragon", - "defence_level": "215", - "safespot": null, - "lifepoints": "210", - "strength_level": "215", - "id": "1592", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,30,90,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "215" - }, - { - "examine": "An unsuitable pet.", - "melee_animation": "6562", - "range_animation": "6562", - "magic_level": "20", - "respawn_delay": "20", - "defence_animation": "6563", - "weakness": "7", - "magic_animation": "6562", - "death_animation": "6564", - "name": "Wild dog", - "defence_level": "25", - "safespot": null, - "lifepoints": "62", - "strength_level": "25", - "id": "1593", - "aggressive": "true", - "bonuses": "10,15,5,10,30,5,30,30,30,10,30,5,40,5,5", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "Looks like it's got Rabies!", - "melee_animation": "6562", - "range_animation": "6562", - "magic_level": "20", - "respawn_delay": "20", - "defence_animation": "6563", - "magic_animation": "6562", - "death_animation": "6564", - "name": "Wild dog", - "defence_level": "25", - "safespot": null, - "lifepoints": "62", - "strength_level": "25", - "id": "1594", - "aggressive": "true", - "bonuses": "10,15,5,10,30,5,30,30,30,10,30,5,40,5,5", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "She looks dangerous!", - "name": "Chaeldar", - "id": "1598" - }, - { - "examine": "A spiky crawling critter. ", - "melee_animation": "266", - "range_animation": "266", - "combat_audio": "341,343,342", - "attack_speed": "4", - "poisonous": "true", - "respawn_delay": "25", - "defence_animation": "267", - "weakness": "1", - "slayer_exp": "22", - "poison_amount": "40", - "magic_animation": "266", - "death_animation": "265", - "name": "Cave crawler", - "defence_level": "30", - "safespot": null, - "lifepoints": "23", - "strength_level": "30", - "id": "1600", - "bonuses": "30,60,60,60,60,66,0,0,0,0,0,0,0,0,0", - "range_level": "38", - "attack_level": "28" - }, - { - "examine": "A spiky crawling critter. ", - "melee_animation": "266", - "range_animation": "266", - "combat_audio": "341,343,342", - "attack_speed": "4", - "poisonous": "true", - "respawn_delay": "25", - "defence_animation": "267", - "slayer_exp": "22", - "poison_amount": "40", - "magic_animation": "266", - "death_animation": "265", - "name": "Cave crawler", - "defence_level": "30", - "safespot": null, - "lifepoints": "23", - "strength_level": "30", - "id": "1601", - "bonuses": "30,60,60,60,60,66,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A spiky crawling critter. ", - "melee_animation": "266", - "range_animation": "266", - "combat_audio": "341,343,342", - "attack_speed": "4", - "poisonous": "true", - "respawn_delay": "25", - "defence_animation": "267", - "slayer_exp": "22", - "poison_amount": "40", - "magic_animation": "266", - "death_animation": "265", - "name": "Cave crawler", - "defence_level": "30", - "safespot": null, - "lifepoints": "23", - "strength_level": "30", - "id": "1602", - "bonuses": "30,60,60,60,60,66,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A spiky crawling critter. ", - "melee_animation": "266", - "range_animation": "266", - "combat_audio": "341,343,342", - "attack_speed": "4", - "poisonous": "true", - "respawn_delay": "25", - "defence_animation": "267", - "slayer_exp": "22", - "poison_amount": "40", - "magic_animation": "266", - "death_animation": "265", - "name": "Cave crawler", - "defence_level": "30", - "safespot": null, - "lifepoints": "23", - "strength_level": "30", - "id": "1603", - "bonuses": "30,60,60,60,60,66,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A very smelly ghost.", - "start_gfx": "334", - "combat_style": "2", - "melee_animation": "9466", - "attack_speed": "4", - "weakness": "5", - "slayer_exp": "90", - "magic_animation": "9466", - "death_animation": "9467", - "lifepoints": "90", - "id": "1604", - "aggressive": "true", - "bonuses": "0,0,0,0,0,20,20,20,0,15,0,0,0,0,0", - "range_animation": "1507", - "combat_audio": "272,275,274", - "magic_level": "105", - "end_gfx": "336", - "defence_animation": "9468", - "name": "Aberrant spectre", - "defence_level": "90", - "safespot": null, - "strength_level": "1", - "clue_level": "2", - "range_level": "1", - "projectile": "335", - "attack_level": "1" - }, - { - "examine": "A very smelly ghost.", - "start_gfx": "334", - "combat_style": "2", - "melee_animation": "9466", - "attack_speed": "4", - "weakness": "5", - "slayer_exp": "90", - "magic_animation": "9466", - "death_animation": "9467", - "lifepoints": "90", - "id": "1605", - "aggressive": "true", - "bonuses": "0,0,0,0,0,20,20,20,0,15,0,0,0,0,0", - "range_animation": "1507", - "combat_audio": "272,275,274", - "magic_level": "105", - "end_gfx": "336", - "defence_animation": "9468", - "name": "Aberrant spectre", - "defence_level": "90", - "safespot": null, - "strength_level": "1", - "clue_level": "2", - "range_level": "1", - "projectile": "335", - "attack_level": "1" - }, - { - "examine": "A very smelly ghost.", - "start_gfx": "334", - "combat_style": "2", - "melee_animation": "9466", - "attack_speed": "4", - "weakness": "5", - "slayer_exp": "90", - "magic_animation": "9466", - "death_animation": "9467", - "lifepoints": "90", - "id": "1606", - "aggressive": "true", - "bonuses": "0,0,0,0,0,20,20,20,0,15,0,0,0,0,0", - "range_animation": "1507", - "combat_audio": "272,275,274", - "magic_level": "105", - "end_gfx": "336", - "defence_animation": "9468", - "name": "Aberrant spectre", - "defence_level": "90", - "safespot": null, - "strength_level": "1", - "clue_level": "2", - "range_level": "1", - "projectile": "335", - "attack_level": "1" - }, - { - "examine": "A very smelly ghost.", - "start_gfx": "334", - "combat_style": "2", - "melee_animation": "9466", - "attack_speed": "4", - "weakness": "5", - "slayer_exp": "90", - "magic_animation": "9466", - "death_animation": "9467", - "lifepoints": "90", - "id": "1607", - "aggressive": "true", - "bonuses": "0,0,0,0,0,20,20,20,0,15,0,0,0,0,0", - "range_animation": "1507", - "combat_audio": "272,275,274", - "magic_level": "105", - "end_gfx": "336", - "defence_animation": "9468", - "name": "Aberrant spectre", - "defence_level": "90", - "safespot": null, - "strength_level": "1", - "clue_level": "2", - "range_level": "1", - "projectile": "335", - "attack_level": "1" - }, - { - "examine": "Large, heavy, with sharp things attached to its head.", - "melee_animation": "9439", - "range_animation": "9439", - "combat_audio": "588,590,589", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "9441", - "slayer_exp": "97", - "magic_animation": "9439", - "death_animation": "9440", - "name": "Kurask", - "defence_level": "105", - "safespot": null, - "lifepoints": "97", - "strength_level": "105", - "id": "1608", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "67" - }, - { - "examine": "Large, heavy, with sharp things attached to its head.", - "melee_animation": "9439", - "range_animation": "9439", - "combat_audio": "588,590,589", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "9441", - "slayer_exp": "97", - "magic_animation": "9439", - "death_animation": "9440", - "name": "Kurask", - "defence_level": "105", - "safespot": null, - "lifepoints": "97", - "strength_level": "105", - "id": "1609", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "67" - }, - { - "examine": "Flies like a rock.", - "melee_animation": "9454", - "range_animation": "1516", - "combat_audio": "428,430,429", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "9455", - "slayer_exp": "105", - "magic_animation": "1516", - "death_animation": "1518", - "name": "Gargoyle", - "defence_level": "107", - "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "1610", - "aggressive": "true", - "bonuses": "0,0,0,0,0,20,20,0,20,20,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "75" - }, - { - "examine": "Flies like a rock.", - "melee_animation": "1516", - "range_animation": "1516", - "attack_speed": "5", - "defence_animation": "0", - "weakness": "0", - "slayer_exp": "105", - "magic_animation": "1516", - "death_animation": "1518", - "name": "Swarming turoth", - "defence_level": "42", - "safespot": null, - "lifepoints": "105", - "strength_level": "104", - "id": "1611", - "clue_level": "2", - "range_level": "49", - "attack_level": "45" - }, - { - "examine": "A tortured screaming soul.", - "melee_animation": "9449", - "range_animation": "1523", - "combat_audio": "284,286,285", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "9451", - "slayer_exp": "22", - "magic_animation": "1523", - "death_animation": "9450", - "name": "Banshee", - "defence_level": "22", - "safespot": null, - "lifepoints": "22", - "strength_level": "15", - "id": "1612", - "aggressive": "true", - "clue_level": "0", - "bonuses": "0,0,0,0,0,5,5,5,0,5,0,0,0,0,0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "An evil death demon.", - "melee_animation": "9487", - "range_animation": "1528", - "combat_audio": "645,647,646", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "9489", - "magic_animation": "1528", - "death_animation": "9488", - "name": "Nechryael", - "defence_level": "105", - "safespot": null, - "lifepoints": "105", - "strength_level": "97", - "id": "1613", - "bonuses": "0,0,0,0,0,20,20,20,0,20,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "97" - }, - { - "examine": "An evil death spawn.", - "melee_animation": "1540", - "range_animation": "1540", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "1540", - "death_animation": "9460", - "name": "Death spawn", - "defence_level": "30", - "poison_immune": "true", - "safespot": null, - "lifepoints": "60", - "strength_level": "7", - "id": "1614", - "aggressive": "true", - "bonuses": "0,0,0,0,0,20,20,20,0,20,0,0,0,0,0", - "range_level": "1", - "attack_level": "67" - }, - { - "examine": "A denizen of the Abyss!", - "melee_animation": "1537", - "range_animation": "1537", - "combat_audio": "276,278,277", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "0", - "weakness": "1", - "slayer_exp": "150", - "magic_animation": "1537", - "death_animation": "1538", - "name": "Abyssal demon", - "defence_level": "135", - "safespot": null, - "lifepoints": "150", - "strength_level": "67", - "id": "1615", - "bonuses": "0,0,0,0,0,20,20,20,0,20,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "97" - }, - { - "examine": "The eyes of evil.", - "melee_animation": "260", - "range_animation": "260", - "combat_audio": "288,290,289", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "261", - "slayer_exp": "75", - "magic_animation": "260", - "death_animation": "264", - "name": "Basilisk", - "defence_level": "75", - "safespot": null, - "lifepoints": "75", - "strength_level": "45", - "id": "1616", - "aggressive": "false", - "bonuses": "0,0,0,0,0,20,20,0,20,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "The eyes of evil.", - "melee_animation": "260", - "range_animation": "260", - "combat_audio": "288,290,289", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "261", - "slayer_exp": "75", - "magic_animation": "260", - "death_animation": "264", - "name": "Basilisk", - "defence_level": "75", - "safespot": null, - "lifepoints": "75", - "strength_level": "45", - "id": "1617", - "aggressive": "false", - "bonuses": "0,0,0,0,0,20,20,0,20,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "The tongue of evil.", - "melee_animation": "9130", - "range_animation": "1552", - "combat_audio": "312,314,313", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "9132", - "slayer_exp": "120", - "magic_animation": "1552", - "death_animation": "9131", - "name": "Bloodveld", - "defence_level": "30", - "safespot": null, - "lifepoints": "120", - "strength_level": "45", - "id": "1618", - "aggressive": "false", - "clue_level": "2", - "range_level": "1", - "attack_level": "75" - }, - { - "examine": "The tongue of evil.", - "melee_animation": "9130", - "range_animation": "1552", - "combat_audio": "312,314,313", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "9132", - "slayer_exp": "120", - "magic_animation": "1552", - "death_animation": "9131", - "name": "Bloodveld", - "defence_level": "30", - "safespot": null, - "lifepoints": "120", - "strength_level": "45", - "id": "1619", - "aggressive": "true", - "clue_level": "2", - "range_level": "1", - "attack_level": "75" - }, - { - "examine": "The winged reptile.", - "melee_animation": "7762", - "range_animation": "7762", - "combat_audio": "363,365,364", - "attack_speed": "5", - "defence_animation": "7761", - "weakness": "2", - "slayer_exp": "37", - "magic_animation": "7762", - "death_animation": "7763", - "name": "Cockatrice", - "defence_level": "35", - "safespot": null, - "lifepoints": "37", - "strength_level": "32", - "id": "1620", - "bonuses": "30,30,30,30,30,35,0,0,0,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "32", - "attack_level": "32" - }, - { - "examine": "The winged reptile.", - "melee_animation": "7762", - "range_animation": "7762", - "combat_audio": "363,365,364", - "attack_speed": "5", - "defence_animation": "7761", - "slayer_exp": "37", - "magic_animation": "7762", - "death_animation": "7763", - "name": "Cockatrice", - "defence_level": "35", - "safespot": null, - "lifepoints": "37", - "strength_level": "32", - "id": "1621", - "bonuses": "30,30,30,30,30,35,0,0,0,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "32" - }, - { - "examine": "He's one big leg short!", - "melee_animation": "9471", - "range_animation": "9471", - "combat_audio": "873,875,874", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "9473", - "magic_animation": "9471", - "death_animation": "9472", - "name": "Turoth", - "defence_level": "85", - "safespot": null, - "lifepoints": "78", - "strength_level": "85", - "id": "1622", - "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "55" - }, - { - "examine": "He's one big leg short!", - "melee_animation": "9471", - "range_animation": "9471", - "combat_audio": "873,875,874", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "9473", - "magic_animation": "9471", - "death_animation": "9472", - "name": "Turoth", - "defence_level": "88", - "safespot": null, - "lifepoints": "81", - "strength_level": "88", - "id": "1623", - "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "58" - }, - { - "examine": "The vacuumed face of evil.", - "melee_animation": "1557", - "range_animation": "1557", - "combat_audio": "414,416,415", - "attack_speed": "4", - "defence_animation": "1555", - "weakness": "2", - "slayer_exp": "105", - "magic_animation": "1557", - "death_animation": "1558", - "name": "Dust devil", - "defence_level": "40", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "1624", - "range_level": "1", - "attack_level": "105" - }, - { - "examine": "The cave-dwelling cousin of the dust devils.", - "melee_animation": "1557", - "range_animation": "0", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "1558", - "name": "Smokedevil", - "defence_level": "61", - "safespot": null, - "lifepoints": "87", - "strength_level": "105", - "id": "1625", - "range_level": "61", - "attack_level": "105" - }, - { - "examine": "She's one leg short!", - "melee_animation": "9471", - "range_animation": "9471", - "combat_audio": "873,875,874", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "9473", - "magic_animation": "9471", - "death_animation": "9472", - "name": "Turoth", - "defence_level": "86", - "safespot": null, - "lifepoints": "79", - "strength_level": "86", - "id": "1626", - "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "56" - }, - { - "examine": "It's one leg short!", - "melee_animation": "9471", - "range_animation": "9471", - "combat_audio": "873,875,874", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "9473", - "magic_animation": "9471", - "death_animation": "9472", - "name": "Turoth", - "defence_level": "84", - "safespot": null, - "lifepoints": "77", - "strength_level": "84", - "id": "1627", - "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "54" - }, - { - "examine": "It's one small leg short!", - "melee_animation": "9471", - "range_animation": "9471", - "combat_audio": "873,875,874", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "9473", - "magic_animation": "9471", - "death_animation": "9472", - "name": "Turoth", - "defence_level": "83", - "safespot": null, - "lifepoints": "76", - "strength_level": "83", - "id": "1628", - "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "53" - }, - { - "examine": "He's one big leg short!", - "melee_animation": "9471", - "range_animation": "9471", - "combat_audio": "873,875,874", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "9473", - "magic_animation": "9471", - "death_animation": "9472", - "name": "Turoth", - "defence_level": "87", - "safespot": null, - "lifepoints": "80", - "strength_level": "87", - "id": "1629", - "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "57" - }, - { - "examine": "He's one big leg short!", - "melee_animation": "9471", - "range_animation": "9471", - "combat_audio": "873,875,874", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "9473", - "magic_animation": "9471", - "death_animation": "9472", - "name": "Turoth", - "defence_level": "87", - "safespot": null, - "lifepoints": "80", - "strength_level": "87", - "id": "1630", - "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "57" - }, - { - "spawn_animation": "8081", - "examine": "A small fire demon.", - "melee_animation": "8080", - "combat_audio": "696,698,697", - "attack_speed": "5", - "magic_level": "10", - "respawn_delay": "60", - "defence_animation": "8084", - "weakness": "4", - "slayer_exp": "45", - "death_animation": "8078", - "name": "Pyrefiend", - "defence_level": "19", - "safespot": null, - "lifepoints": "45", - "strength_level": "29", - "id": "1633", - "bonuses": "52,30,22,1,1,0,0,0,0,0,0,10,10,10,0", - "clue_level": "1", - "range_level": "19", - "attack_level": "22" - }, - { - "spawn_animation": "8081", - "examine": "A small fire demon.", - "melee_animation": "8080", - "combat_audio": "696,698,697", - "attack_speed": "5", - "magic_level": "10", - "respawn_delay": "60", - "defence_animation": "8084", - "weakness": "4", - "slayer_exp": "45", - "death_animation": "8078", - "name": "Pyrefiend", - "defence_level": "19", - "safespot": null, - "lifepoints": "45", - "strength_level": "29", - "id": "1634", - "bonuses": "52,30,22,1,1,0,0,0,0,0,0,10,10,10,0", - "clue_level": "1", - "range_level": "19", - "attack_level": "22" - }, - { - "spawn_animation": "8081", - "examine": "A small fire demon.", - "melee_animation": "8080", - "combat_audio": "696,698,697", - "attack_speed": "5", - "magic_level": "10", - "respawn_delay": "60", - "defence_animation": "8084", - "weakness": "4", - "slayer_exp": "45", - "death_animation": "8078", - "name": "Pyrefiend", - "defence_level": "19", - "safespot": null, - "lifepoints": "45", - "strength_level": "29", - "id": "1635", - "bonuses": "52,30,22,1,1,0,0,0,0,0,0,10,10,10,0", - "clue_level": "1", - "range_level": "19", - "attack_level": "22" - }, - { - "spawn_animation": "8081", - "examine": "A small fire demon.", - "melee_animation": "8080", - "combat_audio": "696,698,697", - "attack_speed": "5", - "magic_level": "10", - "respawn_delay": "60", - "defence_animation": "8084", - "weakness": "4", - "slayer_exp": "45", - "death_animation": "8078", - "name": "Pyrefiend", - "defence_level": "19", - "safespot": null, - "lifepoints": "45", - "strength_level": "29", - "id": "1636", - "bonuses": "52,30,22,1,1,0,0,0,0,0,0,10,10,10,0", - "clue_level": "1", - "range_level": "19", - "attack_level": "22" - }, - { - "examine": "It's a Jelly.", - "melee_animation": "8569", - "range_animation": "8569", - "combat_audio": "547,550,549", - "attack_speed": "5", - "magic_level": "40", - "defence_animation": "8571", - "weakness": "2", - "slayer_exp": "75", - "magic_animation": "8569", - "death_animation": "8570", - "name": "Jelly", - "defence_level": "40", - "safespot": null, - "lifepoints": "75", - "strength_level": "45", - "id": "1637", - "clue_level": "2", - "range_level": "40", - "attack_level": "40" - }, - { - "examine": "Doesn't look so tough...", - "melee_animation": "8569", - "range_animation": "0", - "combat_audio": "547,550,549", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "slayer_exp": "75", - "magic_animation": "0", - "death_animation": "8570", - "name": "Jelly", - "defence_level": "49", - "safespot": null, - "lifepoints": "70", - "strength_level": "1", - "id": "1638", - "clue_level": "2", - "range_level": "49", - "attack_level": "1" - }, - { - "examine": "Wibbly.", - "melee_animation": "8569", - "range_animation": "0", - "combat_audio": "547,550,549", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "slayer_exp": "75", - "magic_animation": "0", - "death_animation": "8570", - "name": "Jelly", - "defence_level": "49", - "safespot": null, - "lifepoints": "70", - "strength_level": "1", - "id": "1639", - "clue_level": "2", - "range_level": "49", - "attack_level": "1" - }, - { - "examine": "There's always room for jelly.", - "melee_animation": "8569", - "range_animation": "0", - "combat_audio": "547,550,549", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "slayer_exp": "75", - "magic_animation": "0", - "death_animation": "8570", - "name": "Jelly", - "defence_level": "49", - "safespot": null, - "lifepoints": "140", - "strength_level": "1", - "id": "1640", - "clue_level": "2", - "range_level": "49", - "attack_level": "1" - }, - { - "melee_animation": "8569", - "combat_audio": "547,550,549", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "8571", - "slayer_exp": "75", - "name": "Jelly", - "defence_level": "1", - "safespot": null, - "lifepoints": "75", - "strength_level": "1", - "id": "1641", - "clue_level": "2", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "8569", - "combat_audio": "547,550,549", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "8571", - "slayer_exp": "75", - "name": "Jelly", - "defence_level": "1", - "safespot": null, - "lifepoints": "75", - "strength_level": "1", - "id": "1642", - "clue_level": "2", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An evil magic user.", - "start_gfx": "99", - "combat_style": "2", - "melee_animation": "811", - "range_animation": "811", - "magic_level": "75", - "respawn_delay": "12", - "end_gfx": "101", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "811", - "death_animation": "836", - "name": "Infernal Mage", - "defence_level": "60", - "safespot": null, - "lifepoints": "60", - "strength_level": "1", - "id": "1643", - "bonuses": "0,0,0,0,0,0,0,0,40,0,0,0,0,0,0", - "range_level": "1", - "projectile": "100", - "attack_level": "1" - }, - { - "start_gfx": "99", - "combat_style": "2", - "melee_animation": "811", - "range_animation": "811", - "magic_level": "75", - "respawn_delay": "12", - "end_gfx": "101", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "811", - "death_animation": "836", - "name": "Infernal Mage", - "defence_level": "60", - "safespot": null, - "lifepoints": "60", - "strength_level": "1", - "id": "1644", - "bonuses": "0,0,0,0,0,0,0,0,40,0,0,0,0,0,0", - "range_level": "1", - "projectile": "100", - "attack_level": "1" - }, - { - "examine": "An evil magic user.", - "start_gfx": "99", - "combat_style": "2", - "melee_animation": "811", - "range_animation": "811", - "magic_level": "75", - "respawn_delay": "12", - "end_gfx": "101", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "811", - "death_animation": "836", - "name": "Infernal Mage", - "defence_level": "60", - "safespot": null, - "lifepoints": "60", - "strength_level": "1", - "id": "1645", - "bonuses": "0,0,0,0,0,0,0,0,40,0,0,0,0,0,0", - "range_level": "1", - "projectile": "100", - "attack_level": "1" - }, - { - "examine": "An evil magic user.", - "start_gfx": "99", - "combat_style": "2", - "melee_animation": "811", - "range_animation": "811", - "magic_level": "75", - "respawn_delay": "12", - "end_gfx": "101", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "811", - "death_animation": "836", - "name": "Infernal Mage", - "defence_level": "60", - "safespot": null, - "lifepoints": "60", - "strength_level": "1", - "id": "1646", - "bonuses": "0,0,0,0,0,0,0,0,40,0,0,0,0,0,0", - "range_level": "1", - "projectile": "100", - "attack_level": "1" - }, - { - "examine": "An evil magic user.", - "start_gfx": "99", - "combat_style": "2", - "melee_animation": "811", - "range_animation": "811", - "magic_level": "75", - "respawn_delay": "12", - "end_gfx": "101", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "811", - "death_animation": "836", - "name": "Infernal Mage", - "defence_level": "60", - "safespot": null, - "lifepoints": "60", - "strength_level": "1", - "id": "1647", - "bonuses": "0,0,0,0,0,0,0,0,40,0,0,0,0,0,0", - "range_level": "1", - "projectile": "100", - "attack_level": "1" - }, - { - "examine": "Now THAT'S handy.", - "melee_animation": "9125", - "range_animation": "9125", - "combat_audio": "377,379,378", - "attack_speed": "5", - "respawn_delay": "20", - "defence_animation": "9127", - "weakness": "9", - "slayer_exp": "19", - "magic_animation": "9125", - "death_animation": "9126", - "name": "Crawling Hand", - "defence_level": "5", - "safespot": null, - "lifepoints": "16", - "strength_level": "5", - "id": "1648", - "bonuses": "5,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "Gimmie five. Actually", - "melee_animation": "9125", - "range_animation": "0", - "combat_audio": "377,379,378", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "19", - "magic_animation": "0", - "death_animation": "9126", - "name": "Crawling Hand", - "defence_level": "8", - "safespot": null, - "lifepoints": "5", - "strength_level": "8", - "id": "1649", - "range_level": "1", - "attack_level": "8" - }, - { - "examine": "Gimmie five. Actually", - "melee_animation": "9125", - "range_animation": "0", - "combat_audio": "377,379,378", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "9126", - "name": "Crawling Hand", - "defence_level": "8", - "safespot": null, - "lifepoints": "5", - "strength_level": "8", - "id": "1650", - "range_level": "1", - "attack_level": "8" - }, - { - "examine": "Gimmie five. Actually", - "melee_animation": "9125", - "range_animation": "0", - "combat_audio": "377,379,378", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "19", - "magic_animation": "0", - "death_animation": "9126", - "name": "Crawling Hand", - "defence_level": "8", - "safespot": null, - "lifepoints": "5", - "strength_level": "8", - "id": "1651", - "range_level": "1", - "attack_level": "8" - }, - { - "examine": "Gimmie five. Actually", - "melee_animation": "9125", - "range_animation": "0", - "combat_audio": "377,379,378", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "19", - "magic_animation": "0", - "death_animation": "9126", - "name": "Crawling Hand", - "defence_level": "8", - "safespot": null, - "lifepoints": "5", - "strength_level": "8", - "id": "1652", - "range_level": "1", - "attack_level": "8" - }, - { - "examine": "Now THAT's handy.", - "melee_animation": "9444", - "range_animation": "0", - "combat_audio": "377,379,378", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "9445", - "name": "Crawling Hand", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "13", - "id": "1653", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "I'm glad it's just the hand I can see...", - "melee_animation": "9444", - "range_animation": "0", - "combat_audio": "377,379,378", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "9445", - "name": "Crawling Hand", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "13", - "id": "1654", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "A big severed hand.", - "melee_animation": "9444", - "range_animation": "0", - "combat_audio": "377,379,378", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "9445", - "name": "Crawling Hand", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "13", - "id": "1655", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "Give the guy a big hand.....", - "melee_animation": "9444", - "range_animation": "0", - "combat_audio": "377,379,378", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "9445", - "name": "Crawling Hand", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "13", - "id": "1656", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "A big severed hand.", - "melee_animation": "9444", - "range_animation": "0", - "combat_audio": "377,379,378", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "9445", - "name": "Crawling Hand", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "13", - "id": "1657", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "A Supplier of Magical robes.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Robe Store owner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1658", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's in charge of the Skullball Course.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Skullball Boss", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1660", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's in charge of the Agility Course.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Agility Boss", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1661", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A skullball guide.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Skullball Trainer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1662", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A werewolf agility trainer.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Agility Trainer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1663", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks like he's guarding a trapdoor...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Werewolf", - "defence_level": "1", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "1665", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Gardener Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "1675", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "His beard seems to have a life of its own.", - "melee_animation": "4666", - "range_animation": "4666", - "combat_audio": "449,451,450", - "magic_level": "1", - "defence_animation": "4665", - "weakness": "3", - "magic_animation": "4666", - "death_animation": "4668", - "name": "Moss giant", - "defence_level": "60", - "safespot": null, - "lifepoints": "120", - "strength_level": "60", - "id": "1681", - "aggressive": "true", - "bonuses": "66,62,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "A ghost disciple.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "436,439,438", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ghost disciple", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1686", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A trader from across the eastern sea.", - "start_gfx": "0", - "start_height": "0", - "melee_animation": "386", - "range_animation": "0", - "magic_level": "1", - "respawn_delay": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Ak-Haranu", - "defence_level": "1", - "movement_radius": "2", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1688", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's an undead cow.", - "melee_animation": "5849", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "5", - "defence_animation": "5850", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5851", - "name": "Undead cow", - "defence_level": "1", - "safespot": null, - "lifepoints": "8", - "strength_level": "3", - "id": "1691", - "aggressive": "false", - "bonuses": "-15,-15,-15,0,0,-21,-21,-21,-21,-21,0,-15,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Yup, definitely a chicken... an undead chicken.", - "melee_animation": "5387", - "range_animation": "0", - "combat_audio": "355,357,356", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "5389", - "name": "Undead chicken", - "defence_level": "1", - "safespot": null, - "lifepoints": "3", - "strength_level": "1", - "id": "1692", - "aggressive": "false", - "bonuses": "-47,-47,-47,0,0,-42,-42,-42,-42,-42,0,-42,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An extremely vicious lobster.", - "melee_animation": "6265", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6267", - "name": "Giant lobster", - "defence_level": "30", - "safespot": null, - "lifepoints": "128", - "strength_level": "30", - "id": "1693", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "An old", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Old crone", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1695", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A creaky old man.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Old man", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1696", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A spooky ghost villager.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "436,439,438", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ghost villager", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1697", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This poor soul cannot understand why it has not passed to the next world.", - "melee_animation": "422", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "slayer_exp": "51", - "magic_animation": "0", - "death_animation": "836", - "name": "Tortured soul", - "defence_level": "38", - "safespot": null, - "lifepoints": "51", - "strength_level": "62", - "id": "1698", - "aggressive": "true", - "range_level": "1", - "attack_level": "52" - }, - { - "examine": "Beware the ghostly shopkeeper's wares!", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "436,439,438", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ghost shopkeeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1699", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Doesn't look like the bar's open anymore.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "436,439,438", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ghost innkeeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1700", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Ghost farmer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "1701", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A ghost banker.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "436,439,438", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ghost banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1702", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A ghost sailor.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "436,439,438", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ghost sailor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1703", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A ghostship captain.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "436,439,438", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ghost captain", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1704", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Ghost captain", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "1705", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This ghost guards the gates of Port Phasmatys.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "436,439,438", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ghost guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1706", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Ghost (?)", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "1707", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Ghost (?)", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "1708", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guard for the humans against monster group.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "H.A.M. Guard", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "1710", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "A guard for the humans against monster group.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "H.A.M. Guard", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "1711", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "A guard for the humans against monster group.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "H.A.M. Guard", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "1712", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "A deacon in the Humans Against Monsters group. A rather enthusiastic chap.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "H.A.M. Deacon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1713", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of the 'Humans Against Monsters' group.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "H.A.M. Member", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1714", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of the 'Humans Against Monsters' group.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "H.A.M. Member", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1715", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of the 'Humans Against Monsters' group.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "H.A.M. Member", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1716", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of the 'Humans Against Monsters' group.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "H.A.M. Member", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1717", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A young man with a dark and mysterious past.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Jimmy the Chisel", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1718", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Manages the mill.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Oak", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1739", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Sigmund's elite guards.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Yew", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1740", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Sigmund's elite guards.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Evergreen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1741", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of Sigmund's H.A.M. splinter group.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Evergreen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1742", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of Sigmund's H.A.M. splinter group.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Evergreen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1743", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of Sigmund's H.A.M. splinter group.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tree", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1744", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of Sigmund's H.A.M. splinter group.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dead tree", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1745", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of Sigmund's H.A.M. splinter group.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Achey Tree", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1746", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of Sigmund's H.A.M. splinter group.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tree", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1747", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of Sigmund's H.A.M. splinter group.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tree", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1748", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A giant raptor.", - "melee_animation": "1010", - "combat_audio": "832,834,833", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "1012", - "magic_animation": "0", - "death_animation": "1013", - "name": "Terrorbird", - "defence_level": "19", - "safespot": null, - "lifepoints": "34", - "strength_level": "23", - "id": "1751", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "23" - }, - { - "examine": "These gnomes know how to get around!", - "melee_animation": "6790", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6791", - "name": "Mounted terrorbird gnome", - "defence_level": "33", - "safespot": null, - "lifepoints": "37", - "strength_level": "33", - "id": "1752", - "range_level": "1", - "attack_level": "33" - }, - { - "examine": "A farmer's enemy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Crow", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1754", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He grows the crops in this area.", - "melee_animation": "7181", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Farmer", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "1757", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "He grows the crops in this area.", - "melee_animation": "7181", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Farmer", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "1758", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "Farming.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Farmer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1759", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He grows the crops in this area.", - "melee_animation": "7181", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "7185", - "name": "Farmer", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "1760", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "Farming the wheat.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Farmer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1761", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "White and fluffy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sheep", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1763", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Young, but still beefy.", - "melee_animation": "5849", - "range_animation": "5849", - "combat_audio": "366,368,367", - "attack_speed": "5", - "defence_animation": "5850", - "slayer_exp": "8", - "magic_animation": "5849", - "death_animation": "5851", - "name": "Cow calf", - "defence_level": "1", - "safespot": null, - "lifepoints": "6", - "strength_level": "1", - "id": "1766", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Where beef comes from.", - "melee_animation": "5849", - "range_animation": "5849", - "combat_audio": "369,371,370", - "attack_speed": "5", - "defence_animation": "5850", - "weakness": "8", - "slayer_exp": "8", - "magic_animation": "5849", - "death_animation": "5851", - "name": "Cow", - "defence_level": "1", - "safespot": null, - "lifepoints": "8", - "strength_level": "1", - "id": "1767", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Young, but still beefy.", - "melee_animation": "5849", - "range_animation": "5849", - "combat_audio": "366,368,367", - "attack_speed": "5", - "defence_animation": "5850", - "slayer_exp": "8", - "magic_animation": "5849", - "death_animation": "5851", - "name": "Cow calf", - "defence_level": "1", - "safespot": null, - "lifepoints": "6", - "strength_level": "1", - "id": "1768", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "weakness": "7", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "1769", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "weakness": "7", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "1770", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "weakness": "7", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "1771", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "weakness": "7", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "1772", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "weakness": "7", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "1773", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "weakness": "7", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "1774", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "weakness": "7", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "1775", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "weakness": "7", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "1776", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks quite independent in an aggressive and business like way.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "498,500,499", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Hammerspike Stoutbeard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1794", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A short stout menacing fellow.", - "melee_animation": "99", - "range_animation": "0", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "102", - "name": "Dwarf gang member", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "1795", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "A short stout menacing fellow.", - "melee_animation": "99", - "range_animation": "0", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "102", - "name": "Dwarf gang member", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "1796", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "A short stout menacing fellow.", - "melee_animation": "99", - "range_animation": "0", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "102", - "name": "Dwarf gang member", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "1797", - "range_level": "1", - "attack_level": "25" - }, - { - "melee_animation": "1750", - "respawn_delay": "60", - "defence_animation": "1751", - "death_animation": "1752", - "name": "Slagilith", - "defence_level": "1", - "safespot": null, - "lifepoints": "60", - "strength_level": "1", - "id": "1802", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A pile of boulders.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Rock pile", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1803", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He seems to be guarding a pile of rocks. Interesting job.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1805", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He seems to be guarding a single rock. Interesting job.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1806", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Chieftain of the mountain camp.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Hamal the Chieftain", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1807", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Is that a bear... or a man?", - "melee_animation": "1760", - "range_animation": "0", - "magic_level": "23", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "1759", - "name": "The Kendal", - "defence_level": "23", - "safespot": null, - "lifepoints": "85", - "strength_level": "23", - "id": "1812", - "aggressive": "true", - "range_level": "23", - "attack_level": "23" - }, - { - "melee_animation": "1760", - "respawn_delay": "60", - "defence_animation": "1758", - "death_animation": "1759", - "name": "The Kendal", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "1813", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the inhabitants of the camp.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Camp dweller", - "defence_level": "11", - "safespot": null, - "lifepoints": "15", - "strength_level": "11", - "id": "1814", - "range_level": "1", - "attack_level": "11" - }, - { - "examine": "One of the inhabitants of the camp.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Camp dweller", - "defence_level": "11", - "safespot": null, - "lifepoints": "15", - "strength_level": "11", - "id": "1815", - "range_level": "1", - "attack_level": "11" - }, - { - "examine": "One of the inhabitants of the camp.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Camp dweller", - "defence_level": "11", - "safespot": null, - "lifepoints": "15", - "strength_level": "11", - "id": "1816", - "range_level": "1", - "attack_level": "11" - }, - { - "examine": "One of the inhabitants of the camp.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Camp dweller", - "defence_level": "11", - "safespot": null, - "lifepoints": "15", - "strength_level": "11", - "id": "1817", - "range_level": "1", - "attack_level": "11" - }, - { - "examine": "One of the inhabitants of the camp.", - "melee_animation": "422", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Camp dweller", - "defence_level": "11", - "safespot": null, - "lifepoints": "15", - "strength_level": "11", - "id": "1818", - "range_level": "1", - "attack_level": "11" - }, - { - "examine": "Looks a little underfed.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mountain Goat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1819", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This goat belongs to the mountain camp people.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mountain Goat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1820", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A goblin with big bulging eyes.", - "melee_animation": "6001", - "range_animation": "0", - "combat_audio": "469,472,471", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6003", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "strength_level": "1", - "id": "1822", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A goblin with big bulging eyes.", - "melee_animation": "6001", - "range_animation": "0", - "combat_audio": "469,472,471", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6003", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "strength_level": "1", - "id": "1823", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A goblin with big bulging eyes.", - "melee_animation": "6001", - "range_animation": "0", - "combat_audio": "469,472,471", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6003", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "strength_level": "1", - "id": "1824", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A goblin with big bulging eyes.", - "melee_animation": "6001", - "range_animation": "0", - "combat_audio": "469,472,471", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6003", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "strength_level": "1", - "id": "1825", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A human zombie.", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "defence_animation": "5567", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "30", - "safespot": null, - "lifepoints": "50", - "strength_level": "30", - "id": "1826", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Flies like a rock.", - "melee_animation": "9454", - "range_animation": "1516", - "combat_audio": "428,430,429", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "9455", - "slayer_exp": "105", - "magic_animation": "1516", - "death_animation": "1518", - "name": "Gargoyle", - "defence_level": "107", - "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "1827", - "aggressive": "true", - "bonuses": "0,0,0,0,0,20,20,0,20,20,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "75" - }, - { - "examine": "It didn't get that big eating flies!", - "melee_animation": "1793", - "range_animation": "1793", - "attack_speed": "6", - "defence_animation": "1794", - "weakness": "1", - "magic_animation": "1793", - "death_animation": "1795", - "name": "Giant frog", - "defence_level": "60", - "safespot": null, - "lifepoints": "100", - "strength_level": "45", - "id": "1828", - "bonuses": "10,10,10,10,10,10,1,10,10,10,10,37,0,0,0", - "range_level": "32", - "attack_level": "45" - }, - { - "examine": "It didn't get that big eating flies.", - "melee_animation": "1793", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "1795", - "name": "Big frog", - "defence_level": "26", - "safespot": null, - "lifepoints": "37", - "strength_level": "1", - "id": "1829", - "range_level": "26", - "attack_level": "1" - }, - { - "examine": "A foul-smelling blob of protoplasm.", - "melee_animation": "1789", - "range_animation": "0", - "combat_audio": "784,786,785", - "attack_speed": "4", - "poisonous": "true", - "magic_level": "13", - "respawn_delay": "15", - "defence_animation": "0", - "weakness": "1", - "slayer_exp": "25", - "poison_amount": "15", - "magic_animation": "0", - "death_animation": "1792", - "name": "Cave slime", - "defence_level": "35", - "safespot": null, - "lifepoints": "25", - "strength_level": "13", - "id": "1831", - "aggressive": "false", - "clue_level": "0", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "A nasty crawling critter.", - "melee_animation": "6079", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "slayer_exp": "5", - "magic_animation": "0", - "death_animation": "6082", - "name": "Cave bug", - "defence_level": "6", - "safespot": null, - "lifepoints": "5", - "strength_level": "5", - "id": "1832", - "bonuses": "0,0,0,0,0,10,10,5,5,10,0,0,0,0,0", - "range_level": "1", - "attack_level": "6" - }, - { - "examine": "A little", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave bug larva", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1833", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Has an odd smell about him.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Candle seller", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1834", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A short angry guy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dwarven Engineer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1840", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The little guy is having trouble standing up right.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Khorvak, a dwarven engineer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1842", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's probably you who will be paying the ferryman.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dwarven Ferryman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1843", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's probably you who will be paying the ferryman.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dwarven Ferryman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1844", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He seems to be in charge of the ship on the river.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dwarven Boatman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1846", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It is the avatar of the Arzinian Being of Bordanzan", - "melee_animation": "1840", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "1841", - "name": "Arzinian Avatar of Strength", - "defence_level": "40", - "safespot": null, - "lifepoints": "114", - "strength_level": "40", - "id": "1850", - "range_level": "1", - "attack_level": "40" - }, - { - "melee_animation": "1840", - "respawn_delay": "60", - "defence_animation": "1842", - "death_animation": "1843", - "name": "Arzinian Avatar of Strength", - "defence_level": "1", - "safespot": null, - "lifepoints": "110", - "strength_level": "1", - "id": "1851", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "1840", - "respawn_delay": "60", - "defence_animation": "1842", - "death_animation": "1843", - "name": "Arzinian Avatar of Strength", - "defence_level": "1", - "safespot": null, - "lifepoints": "70", - "strength_level": "1", - "id": "1852", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It is the avatar of the Arzinian Being of Bordanzan", - "melee_animation": "1843", - "range_animation": "1843", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "1841", - "name": "Arzinian Avatar of Ranging", - "defence_level": "40", - "safespot": null, - "lifepoints": "114", - "strength_level": "30", - "id": "1853", - "aggressive": "true", - "range_level": "40", - "attack_level": "30" - }, - { - "melee_animation": "1840", - "respawn_delay": "60", - "defence_animation": "1842", - "death_animation": "1843", - "name": "Arzinian Avatar of Ranging", - "defence_level": "1", - "safespot": null, - "lifepoints": "110", - "strength_level": "1", - "id": "1854", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "1840", - "respawn_delay": "60", - "defence_animation": "1842", - "death_animation": "1843", - "name": "Arzinian Avatar of Ranging", - "defence_level": "1", - "safespot": null, - "lifepoints": "70", - "strength_level": "1", - "id": "1855", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It is the avatar of the Arzinian Being of Bordanzan", - "melee_animation": "1844", - "range_animation": "0", - "magic_level": "40", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "1841", - "name": "Arzinian Avatar of Magic", - "defence_level": "40", - "safespot": null, - "lifepoints": "114", - "strength_level": "30", - "id": "1856", - "aggressive": "true", - "range_level": "1", - "attack_level": "30" - }, - { - "melee_animation": "1840", - "respawn_delay": "60", - "defence_animation": "1842", - "death_animation": "1843", - "name": "Arzinian Avatar of Magic", - "defence_level": "1", - "safespot": null, - "lifepoints": "110", - "strength_level": "1", - "id": "1857", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "1840", - "respawn_delay": "60", - "defence_animation": "1842", - "death_animation": "1843", - "name": "Arzinian Avatar of Magic", - "defence_level": "1", - "safespot": null, - "lifepoints": "70", - "strength_level": "1", - "id": "1858", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's the Arzinian Being", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Arzinian Being of Bordanzan", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1859", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He sells ranging equipment.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brian", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1866", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Nemarti looks ready to teach you about ranged combat.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ranged Tutor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1861", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Drunk man.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Drunken Ali", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1863", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A hassled looking barman.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ali The barman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1864", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A kebab seller.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ali the Kebab seller", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1865", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Ali the discount animal seller.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ali the Camel Man", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1867", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A mischievous looking child.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Street urchin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1868", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An old Hag named Alice.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ali the Hag", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1871", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A snake charmer.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "3609,3608,3610", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ali the Snake Charmer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1872", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A foul tempered ugly lumpy yellow horse prone to spitting.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ali the Camel", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1873", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A slithering serpent.", - "melee_animation": "275", - "range_animation": "0", - "combat_audio": "3609,3608,3610", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "278", - "name": "Desert snake", - "defence_level": "6", - "safespot": null, - "lifepoints": "8", - "strength_level": "4", - "id": "1874", - "range_level": "6", - "attack_level": "4" - }, - { - "examine": "A toothless old Snake.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "3609,3608,3610", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Snake", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1875", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very tough-looking bandit.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Bandit champion", - "defence_level": "39", - "safespot": null, - "lifepoints": "55", - "strength_level": "39", - "id": "1885", - "aggressive": "true", - "range_level": "1", - "attack_level": "39" - }, - { - "examine": "Probably the weakest bandit in the world ....ever.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cowardly Bandit", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1886", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Smooth operator.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "attack_speed": "4", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ali the Operator", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1902", - "bonuses": "0,0,0,0,0,10,10,5,5,10,0,0,0,0,0", - "range_level": "1", - "attack_level": "6" - }, - { - "examine": "Menaphite thug.", - "melee_animation": "0", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "0", - "respawn_delay": "5", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "0", - "name": "Menaphite Thug", - "defence_level": "20", - "safespot": null, - "lifepoints": "60", - "strength_level": "50", - "id": "1904", - "aggressive": "false", - "bonuses": "4,4,4,0,0,9,8,10,0,0,0,9,0,0,0", - "range_level": "0", - "attack_level": "60" - }, - { - "examine": "Menaphite thug.", - "melee_animation": "395", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "0", - "respawn_delay": "5", - "defence_animation": "425", - "magic_animation": "0", - "death_animation": "836", - "name": "Menaphite Thug", - "defence_level": "20", - "safespot": null, - "lifepoints": "60", - "strength_level": "50", - "id": "1905", - "aggressive": "false", - "bonuses": "4,4,4,0,0,9,8,10,0,0,0,9,0,0,0", - "range_level": "0", - "attack_level": "60" - }, - { - "examine": "Tough looking Menaphite.", - "melee_animation": "395", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Tough Guy", - "defence_level": "39", - "safespot": null, - "lifepoints": "114", - "strength_level": "39", - "id": "1906", - "aggressive": "true", - "range_level": "1", - "attack_level": "39" - }, - { - "examine": "Definitely not a chicken.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Desert Phoenix", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1911", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Ice warrior.", - "melee_animation": "440", - "range_animation": "440", - "attack_speed": "5", - "defence_animation": "404", - "magic_animation": "412", - "death_animation": "9055", - "name": "Kamil", - "defence_level": "135", - "safespot": null, - "lifepoints": "130", - "strength_level": "80", - "id": "1913", - "bonuses": "0,60,0,0,0,35,60,35,0,0,0,100,0,0,0", - "range_level": "1", - "attack_level": "190" - }, - { - "examine": "A vampyre warrior of Zamorak.", - "melee_animation": "1264", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Dessous", - "defence_level": "99", - "safespot": null, - "lifepoints": "200", - "strength_level": "99", - "id": "1914", - "aggressive": "true", - "bonuses": "0,0,50,0,0,10,150,150,0,0,0,50,0,0,0", - "range_level": "1", - "attack_level": "99" - }, - { - "examine": "A vampyre warrior of Zamorak.", - "melee_animation": "1264", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Dessous", - "defence_level": "99", - "safespot": null, - "lifepoints": "200", - "strength_level": "99", - "id": "1915", - "aggressive": "true", - "bonuses": "0,0,50,0,0,10,150,150,0,0,0,50,0,0,0", - "range_level": "1", - "attack_level": "99" - }, - { - "examine": "Luckily, I can't see much of his face.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ruantun", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1916", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I guess he sells what he steals...?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bandit shopkeeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1917", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Hardened by the cutthroat world of archaeology.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Archaeologist", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1918", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Very mysterious looking...", - "melee_animation": "377", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Stranger", - "defence_level": "58", - "safespot": null, - "lifepoints": "82", - "strength_level": "58", - "id": "1919", - "aggressive": "true", - "range_level": "1", - "attack_level": "58" - }, - { - "examine": "One of Morytania's vampyric nobility.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Malak", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1920", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks like a rough-and-ready type.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bartender", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1921", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A tough-looking criminal.", - "melee_animation": "412", - "range_animation": "412", - "attack_speed": "5", - "defence_animation": "404", - "magic_animation": "412", - "death_animation": "9055", - "name": "Bandit", - "defence_level": "30", - "safespot": null, - "lifepoints": "65", - "strength_level": "70", - "id": "1926", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "This is an NPC.", - "melee_animation": "412", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "100", - "defence_animation": "404", - "magic_animation": "0", - "death_animation": "9055", - "name": "Bandit", - "defence_level": "1", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "1931", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ice troll.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ice troll", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1935", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Brrrrr...he must be cold!", - "melee_animation": "284", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll", - "defence_level": "64", - "safespot": null, - "lifepoints": "91", - "strength_level": "64", - "id": "1936", - "aggressive": "true", - "range_level": "1", - "attack_level": "64" - }, - { - "examine": "Brrrrr...he must be cold!", - "melee_animation": "284", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll", - "defence_level": "64", - "safespot": null, - "lifepoints": "91", - "strength_level": "64", - "id": "1937", - "range_level": "1", - "attack_level": "64" - }, - { - "examine": "Brrrrr...he must be cold!", - "melee_animation": "284", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll", - "defence_level": "64", - "safespot": null, - "lifepoints": "91", - "strength_level": "64", - "id": "1938", - "aggressive": "true", - "range_level": "1", - "attack_level": "64" - }, - { - "examine": "Brrrrr...he must be cold!", - "melee_animation": "284", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll", - "defence_level": "64", - "safespot": null, - "lifepoints": "91", - "strength_level": "64", - "id": "1939", - "range_level": "1", - "attack_level": "64" - }, - { - "examine": "Brrrrr...he must be cold!", - "melee_animation": "284", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll", - "defence_level": "64", - "safespot": null, - "lifepoints": "91", - "strength_level": "64", - "id": "1940", - "aggressive": "true", - "range_level": "1", - "attack_level": "64" - }, - { - "examine": "Brrrrr...he must be cold!", - "melee_animation": "284", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll", - "defence_level": "64", - "safespot": null, - "lifepoints": "91", - "strength_level": "64", - "id": "1941", - "aggressive": "true", - "range_level": "1", - "attack_level": "64" - }, - { - "examine": "Brrrrr...he must be cold!", - "melee_animation": "284", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll", - "defence_level": "64", - "safespot": null, - "lifepoints": "91", - "strength_level": "64", - "id": "1942", - "range_level": "1", - "attack_level": "64" - }, - { - "examine": "A troll frozen in a block of ice.", - "melee_animation": "0", - "range_animation": "0", - "respawn_delay": "1", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "0", - "name": "Ice block", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1943", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A troll frozen in a block of ice.", - "melee_animation": "0", - "range_animation": "0", - "respawn_delay": "1", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "0", - "name": "Ice block", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1944", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A troll frozen in a block of ice.", - "melee_animation": "0", - "range_animation": "0", - "respawn_delay": "1", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "0", - "name": "Ice block", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1945", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A troll frozen in a block of ice.", - "melee_animation": "0", - "range_animation": "0", - "respawn_delay": "1", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "0", - "name": "Ice block", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1946", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ice troll.", - "name": "Troll father", - "id": "1947" - }, - { - "examine": "An ice troll.", - "name": "Troll father", - "id": "1948" - }, - { - "examine": "An ice troll.", - "name": "Troll mother", - "id": "1949" - }, - { - "examine": "An ice troll.", - "name": "Troll mother", - "id": "1950" - }, - { - "examine": "Not a man's best friend.", - "melee_animation": "6579", - "range_animation": "6579", - "magic_level": "30", - "respawn_delay": "28", - "defence_animation": "6578", - "magic_animation": "6579", - "death_animation": "6576", - "name": "Ice wolf", - "defence_level": "60", - "safespot": null, - "lifepoints": "72", - "strength_level": "60", - "id": "1951", - "aggressive": "true", - "bonuses": "40,120,150,150,150,40,130,75,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Not a man's best friend.", - "melee_animation": "6579", - "range_animation": "6579", - "magic_level": "30", - "respawn_delay": "28", - "defence_animation": "6578", - "magic_animation": "6579", - "death_animation": "6576", - "name": "Ice wolf", - "defence_level": "60", - "safespot": null, - "lifepoints": "72", - "strength_level": "60", - "id": "1952", - "aggressive": "true", - "bonuses": "40,120,150,150,150,40,130,75,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Not a man's best friend.", - "melee_animation": "6579", - "range_animation": "6579", - "magic_level": "30", - "respawn_delay": "28", - "defence_animation": "6578", - "magic_animation": "6579", - "death_animation": "6576", - "name": "Ice wolf", - "defence_level": "60", - "safespot": null, - "lifepoints": "72", - "strength_level": "60", - "id": "1953", - "aggressive": "true", - "bonuses": "40,120,150,150,150,40,130,75,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Not a man's best friend.", - "melee_animation": "6579", - "range_animation": "6579", - "magic_level": "30", - "respawn_delay": "28", - "defence_animation": "6578", - "magic_animation": "6579", - "death_animation": "6576", - "name": "Ice wolf", - "defence_level": "60", - "safespot": null, - "lifepoints": "72", - "strength_level": "60", - "id": "1954", - "aggressive": "true", - "bonuses": "40,120,150,150,150,40,130,75,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Not a man's best friend.", - "melee_animation": "6579", - "range_animation": "6579", - "magic_level": "30", - "respawn_delay": "28", - "defence_animation": "6578", - "magic_animation": "6579", - "death_animation": "6576", - "name": "Ice wolf", - "defence_level": "60", - "safespot": null, - "lifepoints": "72", - "strength_level": "60", - "id": "1955", - "aggressive": "true", - "bonuses": "40,120,150,150,150,40,130,75,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Not a man's best friend.", - "melee_animation": "6579", - "range_animation": "6579", - "magic_level": "30", - "respawn_delay": "28", - "defence_animation": "6578", - "magic_animation": "6579", - "death_animation": "6576", - "name": "Ice wolf", - "defence_level": "60", - "safespot": null, - "lifepoints": "72", - "strength_level": "60", - "id": "1956", - "aggressive": "true", - "bonuses": "40,120,150,150,150,40,130,75,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Highly flammable!", - "melee_animation": "5549", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5555", - "name": "Mummy", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "55", - "id": "1958", - "range_level": "1", - "attack_level": "55" - }, - { - "examine": "A tightly-wrapped monster.", - "melee_animation": "5549", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5555", - "name": "Mummy", - "defence_level": "90", - "safespot": null, - "lifepoints": "90", - "strength_level": "90", - "id": "1961", - "aggressive": "true", - "range_level": "1", - "attack_level": "90" - }, - { - "examine": "Spooky, bandaged dead dude.", - "melee_animation": "5549", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5555", - "name": "Mummy", - "defence_level": "90", - "poison_immune": "true", - "safespot": null, - "lifepoints": "90", - "strength_level": "90", - "id": "1962", - "aggressive": "true", - "range_level": "1", - "attack_level": "90" - }, - { - "examine": "A victim of poor first aid.", - "melee_animation": "5549", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5555", - "name": "Mummy", - "defence_level": "90", - "poison_immune": "true", - "safespot": null, - "lifepoints": "90", - "strength_level": "90", - "id": "1963", - "aggressive": "true", - "range_level": "1", - "attack_level": "90" - }, - { - "examine": "But who's the daddy?", - "melee_animation": "5549", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5555", - "name": "Mummy", - "defence_level": "90", - "safespot": null, - "lifepoints": "90", - "strength_level": "90", - "id": "1964", - "aggressive": "true", - "range_level": "1", - "attack_level": "90" - }, - { - "examine": "A tightly-wrapped monster.", - "melee_animation": "5549", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5555", - "name": "Mummy", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "55", - "id": "1965", - "range_level": "1", - "attack_level": "55" - }, - { - "examine": "A victim of poor first aid.", - "melee_animation": "5549", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5555", - "name": "Mummy", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "55", - "id": "1967", - "range_level": "1", - "attack_level": "55" - }, - { - "examine": "I think they're some kind of beetle...", - "melee_animation": "1948", - "range_animation": "0", - "attack_speed": "3", - "poisonous": "true", - "defence_animation": "1946", - "weakness": "7", - "poison_amount": "15", - "magic_animation": "0", - "death_animation": "5464", - "name": "Scarabs", - "defence_level": "10", - "safespot": null, - "lifepoints": "25", - "strength_level": "2", - "id": "1969", - "range_level": "1", - "attack_level": "255" - }, - { - "examine": "A wandering merchant.", - "name": "Rasolo", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1972", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A giant skeleton.", - "melee_animation": "5499", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5503", - "name": "Giant skeleton", - "defence_level": "60", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "1973", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "The warrior of darkness.", - "melee_animation": "440", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Damis", - "defence_level": "90", - "safespot": null, - "lifepoints": "90", - "strength_level": "90", - "id": "1974", - "bonuses": "0,0,0,0,0,60,60,60,60,60,0,80,0,0,0", - "range_level": "1", - "attack_level": "90" - }, - { - "examine": "The warrior of darkness.", - "melee_animation": "440", - "range_animation": "0", - "attack_speed": "3", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Damis", - "defence_level": "160", - "safespot": null, - "lifepoints": "200", - "strength_level": "100", - "id": "1975", - "bonuses": "0,0,0,0,0,100,100,100,80,120,0,100,0,0,0", - "range_level": "1", - "attack_level": "160" - }, - { - "examine": "Looks hungry!", - "melee_animation": "6565", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6564", - "name": "Shadow Hound", - "defence_level": "48", - "safespot": null, - "lifepoints": "68", - "strength_level": "48", - "id": "1976", - "range_level": "1", - "attack_level": "48" - }, - { - "examine": "Zamorak's warrior of fire.", - "melee_animation": "799", - "magic_level": "100", - "respawn_delay": "60", - "defence_animation": "434", - "death_animation": "836", - "name": "Fareed", - "defence_level": "135", - "safespot": null, - "lifepoints": "130", - "strength_level": "120", - "id": "1977", - "aggressive": "true", - "bonuses": "0,0,0,0,0,100,100,100,0,0,0,120,0,0,0", - "range_level": "100", - "attack_level": "190" - }, - { - "examine": "A malnourished worker.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Slave", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1978", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A malnourished worker.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Slave", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1979", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A strange-smelling merchant.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Embalmer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1980", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A block of a man.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Carpenter", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1981", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Preach my brother!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Priest", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1988", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He has a dangerous glint in his eye.", - "combat_style": "2", - "melee_animation": "429", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "836", - "name": "Possessed Priest", - "defence_level": "40", - "safespot": null, - "lifepoints": "57", - "strength_level": "30", - "id": "1991", - "aggressive": "true", - "range_level": "40", - "attack_level": "30" - }, - { - "melee_animation": "7588", - "combat_audio": "386,388,387", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "7590", - "slayer_exp": "62", - "death_animation": "7591", - "name": "Crocodile", - "defence_level": "1", - "safespot": null, - "lifepoints": "63", - "strength_level": "1", - "id": "1993", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He has had his day.", - "melee_animation": "6568", - "range_animation": "0", - "combat_audio": "544,546,545", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6567", - "name": "Jackal", - "defence_level": "15", - "safespot": null, - "lifepoints": "27", - "strength_level": "18", - "id": "1994", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "17" - }, - { - "examine": "Obnoxious", - "melee_animation": "2015", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "2013", - "name": "Locust", - "defence_level": "12", - "safespot": null, - "lifepoints": "34", - "strength_level": "12", - "id": "1995", - "aggressive": "true", - "range_level": "1", - "attack_level": "12" - }, - { - "examine": "A very smelly frog.", - "melee_animation": "1021", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "1022", - "name": "Plague frog", - "defence_level": "15", - "safespot": null, - "lifepoints": "42", - "strength_level": "15", - "id": "1997", - "aggressive": "true", - "range_level": "1", - "attack_level": "15" - }, - { - "examine": "I might give the burgers a miss in this town.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "0", - "name": "Plague cow", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1998", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I don't fancy eating any part of this.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "0", - "name": "Plague cow", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "1999", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I think they're some kind of beetle.", - "melee_animation": "1948", - "range_animation": "0", - "attack_speed": "2", - "poisonous": "true", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "poison_amount": "15", - "magic_animation": "0", - "death_animation": "1946", - "name": "Scarab swarm", - "defence_level": "9", - "safespot": null, - "lifepoints": "900", - "strength_level": "9", - "id": "2001", - "aggressive": "true", - "range_level": "1", - "attack_level": "9" - }, - { - "examine": "This mummy looks like it means business!", - "melee_animation": "5554", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5555", - "name": "Mummy", - "defence_level": "50", - "safespot": null, - "lifepoints": "71", - "strength_level": "50", - "id": "2015", - "aggressive": "true", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "An irate warrior-mummy.", - "melee_animation": "5554", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5555", - "name": "Mummy", - "defence_level": "50", - "safespot": null, - "lifepoints": "71", - "strength_level": "50", - "id": "2016", - "aggressive": "true", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "This mummy looks like it means business!", - "melee_animation": "5554", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5555", - "name": "Mummy", - "defence_level": "50", - "safespot": null, - "lifepoints": "71", - "strength_level": "50", - "id": "2017", - "aggressive": "true", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "An irate mummy.", - "melee_animation": "5554", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5555", - "name": "Mummy", - "defence_level": "50", - "safespot": null, - "lifepoints": "71", - "strength_level": "50", - "id": "2018", - "aggressive": "true", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "A wizened old warrior.", - "melee_animation": "5554", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5555", - "name": "Mummy", - "defence_level": "50", - "safespot": null, - "lifepoints": "71", - "strength_level": "50", - "id": "2019", - "aggressive": "true", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "A shimmering creature of blue light.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Light creature", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2021", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Wonder how long he's been here...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Strange Old Man", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2024", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A vengeful spirit corrupted by dark magic.", - "start_gfx": "155", - "combat_style": "2", - "start_height": "96", - "melee_animation": "1162", - "range_animation": "1162", - "attack_speed": "5", - "magic_level": "100", - "end_gfx": "157", - "defence_animation": "420", - "weakness": "3", - "magic_animation": "1162", - "death_animation": "7197", - "name": "Ahrim the Blighted", - "defence_level": "100", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "2025", - "aggressive": "true", - "bonuses": "68,68,68,73,-19,103,85,117,73,0,0,68,0,49,0", - "range_level": "1", - "projectile": "156", - "attack_level": "1" - }, - { - "examine": "A vengeful spirit corrupted by dark magic.", - "melee_animation": "2066", - "range_animation": "2066", - "attack_speed": "7", - "magic_level": "1", - "respawn_delay": "0", - "defence_animation": "2063", - "weakness": "9", - "magic_animation": "2066", - "death_animation": "7197", - "name": "Dharok the Wretched", - "defence_level": "100", - "safespot": null, - "lifepoints": "100", - "strength_level": "100", - "id": "2026", - "aggressive": "true", - "bonuses": "105,105,105,-58,-18,252,250,244,-11,249,0,105,0,0,0", - "range_level": "1", - "attack_level": "100" - }, - { - "examine": "A vengeful spirit corrupted by dark magic.", - "melee_animation": "2080", - "range_animation": "2080", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "0", - "defence_animation": "2079", - "weakness": "6", - "magic_animation": "2080", - "death_animation": "7197", - "name": "Guthan the Infested", - "defence_level": "100", - "safespot": null, - "lifepoints": "100", - "strength_level": "100", - "id": "2027", - "aggressive": "true", - "bonuses": "75,75,75,-50,-19,259,247,241,-11,-250,0,75,0,0,0", - "range_level": "1", - "attack_level": "100" - }, - { - "examine": "A vengeful spirit corrupted by dark magic.", - "combat_style": "1", - "melee_animation": "2075", - "range_animation": "2075", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "16", - "defence_animation": "424", - "weakness": "0", - "magic_animation": "2075", - "death_animation": "7197", - "name": "Karil the Tainted", - "defence_level": "100", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "2028", - "aggressive": "true", - "bonuses": "0,0,0,-26,134,79,71,90,106,100,0,0,0,0,61", - "range_level": "100", - "projectile": "27", - "attack_level": "1" - }, - { - "examine": "A vengeful spirit corrupted by dark magic.", - "melee_animation": "2068", - "range_animation": "2068", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "0", - "defence_animation": "404", - "weakness": "7", - "magic_animation": "2068", - "death_animation": "7197", - "name": "Torag the Corrupted", - "defence_level": "100", - "safespot": null, - "lifepoints": "100", - "strength_level": "100", - "id": "2029", - "aggressive": "true", - "bonuses": "72,72,72,-33,-11,221,235,222,0,221,0,72,0,0,0", - "range_level": "1", - "attack_level": "100" - }, - { - "examine": "A vengeful spirit corrupted by dark magic.", - "melee_animation": "2062", - "range_animation": "2062", - "combat_audio": "", - "attack_speed": "5", - "magic_level": "1", - "defence_animation": "2063", - "weakness": "8", - "magic_animation": "2062", - "death_animation": "7197", - "name": "Verac the Defiled", - "defence_level": "100", - "safespot": null, - "lifepoints": "100", - "strength_level": "100", - "id": "2030", - "aggressive": "true", - "bonuses": "72,72,72,-42,-14,227,230,221,0,225,72,78,0,0,0", - "range_level": "1", - "attack_level": "100" - }, - { - "examine": "I think I should keep my distance...", - "melee_animation": "2070", - "range_animation": "2070", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "26", - "defence_animation": "2072", - "weakness": "6", - "magic_animation": "2070", - "death_animation": "2073", - "name": "Bloodworm", - "defence_level": "35", - "safespot": null, - "lifepoints": "45", - "strength_level": "20", - "id": "2031", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "80" - }, - { - "examine": "A nasty little rodent.", - "melee_animation": "240", - "range_animation": "240", - "combat_audio": "703,705,704", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "241", - "weakness": "9", - "magic_animation": "240", - "death_animation": "243", - "name": "Crypt rat", - "defence_level": "20", - "safespot": null, - "lifepoints": "35", - "strength_level": "20", - "id": "2032", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "A nasty overgrown rodent.", - "melee_animation": "4933", - "range_animation": "4933", - "combat_audio": "703,705,704", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4934", - "weakness": "9", - "magic_animation": "4933", - "death_animation": "4935", - "name": "Giant crypt rat", - "defence_level": "65", - "safespot": null, - "lifepoints": "70", - "strength_level": "50", - "id": "2033", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "80" - }, - { - "examine": "Incey wincey.", - "melee_animation": "6249", - "range_animation": "6249", - "combat_audio": "537,539,538", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "25", - "defence_animation": "6250", - "weakness": "7", - "magic_animation": "6249", - "death_animation": "6251", - "name": "Crypt spider", - "defence_level": "45", - "safespot": null, - "lifepoints": "45", - "strength_level": "47", - "id": "2034", - "aggressive": "true", - "bonuses": "0,0,0,0,0,20,20,10,17,20,0,0,0,0,0", - "range_level": "1", - "attack_level": "45" - }, - { - "examine": "Not very incey wincey.", - "melee_animation": "5327", - "range_animation": "5327", - "combat_audio": "537,539,538", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "defence_animation": "5328", - "weakness": "7", - "magic_animation": "5327", - "death_animation": "5329", - "name": "Giant crypt spider", - "defence_level": "65", - "safespot": null, - "lifepoints": "80", - "strength_level": "67", - "id": "2035", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "A partially decomposing zombie ogre.", - "combat_audio": "", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "360", - "slayer_exp": "", - "weakness": "7", - "magic_animation": "359", - "death_animation": "361", - "name": "Zogre", - "defence_level": "35", - "safespot": null, - "lifepoints": "71", - "strength_level": "36", - "id": "2044", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "A partially decomposing zombie ogre.", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "360", - "slayer_exp": "", - "weakness": "7", - "magic_animation": "359", - "death_animation": "361", - "name": "Zogre", - "defence_level": "35", - "safespot": null, - "lifepoints": "71", - "strength_level": "36", - "id": "2045", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "A partially decomposing zombie ogre.", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "360", - "slayer_exp": "", - "weakness": "7", - "magic_animation": "359", - "death_animation": "361", - "name": "Zogre", - "defence_level": "35", - "safespot": null, - "lifepoints": "71", - "strength_level": "36", - "id": "2046", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "A partially decomposing zombie ogre.", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "360", - "slayer_exp": "", - "weakness": "7", - "magic_animation": "359", - "death_animation": "361", - "name": "Zogre", - "defence_level": "35", - "safespot": null, - "lifepoints": "71", - "strength_level": "36", - "id": "2047", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "A partially decomposing zombie ogre.", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "360", - "slayer_exp": "", - "weakness": "7", - "magic_animation": "359", - "death_animation": "361", - "name": "Zogre", - "defence_level": "35", - "safespot": null, - "lifepoints": "71", - "strength_level": "36", - "id": "2048", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "A partially decomposing zombie ogre.", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "360", - "slayer_exp": "", - "weakness": "7", - "magic_animation": "359", - "death_animation": "361", - "name": "Zogre", - "defence_level": "35", - "safespot": null, - "lifepoints": "71", - "strength_level": "36", - "id": "2049", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "It's falling apart!", - "combat_audio": "", - "range_animation": "359", - "melee_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "360", - "weakness": "7", - "slayer_exp": "", - "magic_animation": "359", - "death_animation": "361", - "name": "Skogre", - "defence_level": "35", - "safespot": null, - "lifepoints": "71", - "strength_level": "36", - "id": "2050", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "A partially decomposing zombie ogre.", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "360", - "slayer_exp": "", - "weakness": "7", - "magic_animation": "359", - "death_animation": "361", - "name": "Zogre", - "defence_level": "35", - "safespot": null, - "lifepoints": "71", - "strength_level": "36", - "id": "2051", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "A partially decomposing zombie ogre.", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "360", - "slayer_exp": "", - "weakness": "7", - "magic_animation": "359", - "death_animation": "361", - "name": "Zogre", - "defence_level": "35", - "safespot": null, - "lifepoints": "71", - "strength_level": "36", - "id": "2052", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "A partially decomposing zombie ogre.", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "360", - "slayer_exp": "", - "weakness": "7", - "magic_animation": "359", - "death_animation": "361", - "name": "Zogre", - "defence_level": "35", - "safespot": null, - "lifepoints": "71", - "strength_level": "36", - "id": "2053", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "A partially decomposing zombie ogre.", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "360", - "slayer_exp": "", - "weakness": "7", - "magic_animation": "359", - "death_animation": "361", - "name": "Zogre", - "defence_level": "35", - "safespot": null, - "lifepoints": "71", - "strength_level": "36", - "id": "2054", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "A partially decomposing zombie ogre.", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "360", - "slayer_exp": "", - "weakness": "7", - "magic_animation": "359", - "death_animation": "361", - "name": "Zogre", - "defence_level": "35", - "safespot": null, - "lifepoints": "71", - "strength_level": "36", - "id": "2055", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "It's falling apart!", - "combat_audio": "", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "360", - "slayer_exp": "", - "weakness": "7", - "magic_animation": "359", - "death_animation": "361", - "name": "Skogre", - "defence_level": "35", - "safespot": null, - "lifepoints": "71", - "strength_level": "36", - "id": "2056", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "It's falling apart!", - "combat_audio": "", - "range_animation": "359", - "melee_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "360", - "slayer_exp": "", - "weakness": "7", - "magic_animation": "359", - "death_animation": "361", - "name": "Skogre", - "defence_level": "35", - "safespot": null, - "lifepoints": "71", - "strength_level": "36", - "id": "2057", - "aggressive": "true", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "What could be hiding in that crack in the wall?", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "931,923,922", - "attack_speed": "5", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "7", - "slayer_exp": "30", - "magic_animation": "0", - "death_animation": "0", - "name": "Hole in the wall", - "defence_level": "1", - "safespot": null, - "lifepoints": "60", - "strength_level": "1", - "id": "2058", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A partially decomposing zombie ogre.", - "slayer_task": "64", - "combat_audio": "", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "360", - "slayer_exp": "", - "weakness": "7", - "magic_animation": "359", - "death_animation": "361", - "name": "Slash Bash", - "defence_level": "60", - "safespot": null, - "lifepoints": "100", - "strength_level": "120", - "id": "2060", - "aggressive": "true", - "range_level": "100", - "attack_level": "100" - }, - { - "examine": "I can see fish swimming in the water.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fishing spot", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2067", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This one is slacking off.", - "melee_animation": "6007", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "6008", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6003", - "name": "Cave goblin miner", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "2069", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "This one is slacking off.", - "melee_animation": "6007", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "6008", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6003", - "name": "Cave goblin miner", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "2070", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "This one is slacking off.", - "melee_animation": "6007", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "6008", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6003", - "name": "Cave goblin miner", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "2071", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "This one is slacking off.", - "melee_animation": "6007", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "6008", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6003", - "name": "Cave goblin miner", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "2072", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "He protects the miners.", - "melee_animation": "6007", - "range_animation": "0", - "combat_audio": "469,472,471", - "respawn_delay": "60", - "defence_animation": "6008", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6003", - "name": "Cave goblin guard", - "defence_level": "15", - "safespot": null, - "lifepoints": "21", - "strength_level": "15", - "id": "2073", - "range_level": "1", - "attack_level": "15" - }, - { - "examine": "He protects the miners.", - "melee_animation": "6007", - "range_animation": "0", - "combat_audio": "469,472,471", - "respawn_delay": "60", - "defence_animation": "6008", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6003", - "name": "Cave goblin guard", - "defence_level": "15", - "safespot": null, - "lifepoints": "21", - "strength_level": "15", - "id": "2074", - "range_level": "1", - "attack_level": "15" - }, - { - "examine": "He's working hard!", - "melee_animation": "6007", - "combat_audio": "469,472,471", - "defence_animation": "6008", - "death_animation": "6003", - "name": "Cave goblin miner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2075", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's working hard!", - "melee_animation": "6007", - "combat_audio": "469,472,471", - "defence_animation": "6008", - "death_animation": "6003", - "name": "Cave goblin miner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2076", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's working hard!", - "melee_animation": "6007", - "combat_audio": "469,472,471", - "defence_animation": "6008", - "death_animation": "6003", - "name": "Cave goblin miner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2077", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's working hard!", - "melee_animation": "6007", - "combat_audio": "469,472,471", - "defence_animation": "6008", - "death_animation": "6003", - "name": "Cave goblin miner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2078", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Advisor to the Duke of Lumbridge.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sigmund", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2082", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5327", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5328", - "death_animation": "5329", - "name": "Secretary", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2091", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The head secretary of the Purple Pewter mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Purple Pewter Secretary", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2092", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The head secretary of the Yellow Fortune mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Yellow Fortune Secretary", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2093", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The head secretary of the Blue Opal mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Blue Opal Secretary", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2094", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The head secretary of the Green Gemstone mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Green Gemstone Secretary", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2095", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The head secretary of the White Chisel mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "White Chisel Secretary", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2096", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The head secretary of the Silver Cog mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Silver Cog Secretary", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2097", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The head secretary of the Brown Engine mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brown Engine Secretary", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2098", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the leaders of the business Consortium", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Purple Pewter Director", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2100", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the leaders of the business Consortium", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Blue Opal Director", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2101", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the leaders of the business Consortium", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Yellow Fortune Director", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2102", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the leaders of the business Consortium", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Green Gemstone Director", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2103", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the leaders of the business Consortium", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "White Chisel Director", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2104", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the leaders of the business Consortium", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Silver Cog Director", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2105", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the leaders of the business Consortium", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brown Engine Director", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2106", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A trader for the Purple Pewter mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2109", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A trader for the Purple Pewter mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2110", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A trader for the Blue Opal mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2111", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A trader for the Blue Opal mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2112", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A trader for the Yellow Fortune mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2113", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A trader for the Yellow Fortune mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2114", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A trader for the Green Gemstone mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2115", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A trader for the Green Gemstone mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2116", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A trader for the White Chisel mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2117", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A trader for the White Chisel mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2118", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A trader for the Silver Cog mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2119", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A trader for the Silver Cog mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2120", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A trader for the Brown Engine mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2121", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A trader for the Brown Engine mining company.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2122", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He is regulating the flow of goods on the trade floor and maintaining order.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trade Referee", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2127", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A member of the Black Guard", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Black Guard", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "2130", - "range_level": "1", - "attack_level": "34" - }, - { - "examine": "A member of the Black Guard", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Black Guard", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "2131", - "range_level": "1", - "attack_level": "34" - }, - { - "examine": "A member of the Black Guard", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Black Guard", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "2132", - "range_level": "1", - "attack_level": "34" - }, - { - "examine": "A member of the Black Guard", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Black Guard", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "2133", - "range_level": "1", - "attack_level": "34" - }, - { - "examine": "An elite member of the Black Guard.", - "melee_animation": "99", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "102", - "name": "Black Guard Berserker", - "defence_level": "38", - "safespot": null, - "lifepoints": "54", - "strength_level": "38", - "id": "2134", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "An elite member of the Black Guard.", - "melee_animation": "99", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "102", - "name": "Black Guard Berserker", - "defence_level": "38", - "safespot": null, - "lifepoints": "54", - "strength_level": "38", - "id": "2135", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "An elite member of the Black Guard.", - "melee_animation": "99", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "102", - "name": "Black Guard Berserker", - "defence_level": "38", - "safespot": null, - "lifepoints": "54", - "strength_level": "38", - "id": "2136", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "A gnome traveller, visiting Keldagrim.", - "name": "Gnome traveller", - "defence_level": "1", - "force_talk": "", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2138", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A gnome traveller, visiting Keldagrim.", - "name": "Gnome traveller", - "defence_level": "1", - "force_talk": "", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2139", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Very protective of his master... and his property.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dromund's cat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2140", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Makes sculptures.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Blasidar the sculptor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2141", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Proprietor of Gunslik's Assorted Items.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gunslik", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2154", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An old mining dwarf, now he sells pickaxes and generally acts grumpy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tati", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2160", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A rather personable banker lady.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2163", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A rather serious old fella.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2164", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He takes care of the library and its many books.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Librarian", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2165", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A customer looking for books.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Customer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2167", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks like a human traveler visiting the library.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Customer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2168", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He tends to the plants in the palace garden.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Rind the gardener", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2170", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks after the factory.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Factory Manager", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2171", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Works hard at whatever it is he does.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Factory Worker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2172", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Works hard at whatever it is he does.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Factory Worker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2173", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Works hard at whatever it is he does.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Factory Worker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2174", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Works hard at whatever it is he does.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Factory Worker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2175", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "These Dwarf ladies are so attractive!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Barmaid", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2178", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He makes sure the carts don't run anyone over.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cart conductor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2180", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He makes sure the carts don't run anyone over.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cart conductor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2181", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He makes sure the carts don't run anyone over.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cart conductor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2182", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He makes sure the carts don't run anyone over.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cart conductor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2183", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He makes sure the carts don't run anyone over.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cart conductor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2184", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Remember: don't drink and ride in mine carts.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cart conductor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2185", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Keeps the line clear of traffic.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cart conductor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2186", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A loud, drunk and generally obnoxious dwarf.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Rowdy dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2187", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A sad old dwarf living in a sad old home.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Runvastr", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2190", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He seems to always be busy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sune", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2191", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This dwarf doesn't seem to be very well off.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bentamir", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2192", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A dwarf minding his own business.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ulifed", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2193", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A short, merry guy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Karl", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2195", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "His kebabs certainly smell delicious.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Kjut", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2198", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He seems to be very well off.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Audmann", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2201", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's had a fair bit to drink...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Drunken Dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2202", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's had a fair bit to drink...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Drunken Dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2203", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "You cannot see his ship, but presumably he has one.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dwarven Boatman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2205", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "You cannot see his ship, but presumably he has one.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dwarven Boatman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2206", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He carries a heavy load.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dwarven Miner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2207", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An elite member of the Black Guard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Black Guard Berserker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2232", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A master at farming.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Master Farmer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2234", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A master at farming.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Master Farmer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2235", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He guards the Draynor Market stalls from thieves.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "2547,1979,512", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Market Guard", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "2236", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "A local farmer. He may be able to provide some useful information.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gee", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2237", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "There to help me make my bids.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Pig", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2240", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "There to help me make my bids.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Piglet", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2241", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Porcine.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Piglet", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2242", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He provides new players with useful information.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Lumbridge Guide", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2244", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's one of General Khazard's warriors.", - "melee_animation": "401", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Khazard trooper", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "2245", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's one of General Khazard's warriors.", - "melee_animation": "429", - "range_animation": "0", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Khazard trooper", - "defence_level": "32", - "safespot": null, - "lifepoints": "45", - "strength_level": "32", - "id": "2246", - "range_level": "1", - "attack_level": "32" - }, - { - "examine": "It's a tree gnome trooper.", - "combat_style": "1", - "melee_animation": "190", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "193", - "death_animation": "196", - "name": "Gnome troop", - "defence_level": "1", - "safespot": null, - "lifepoints": "3", - "strength_level": "1", - "id": "2247", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a tree gnome trooper.", - "combat_style": "1", - "melee_animation": "190", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "193", - "death_animation": "196", - "name": "Gnome troop", - "defence_level": "1", - "safespot": null, - "lifepoints": "3", - "strength_level": "1", - "id": "2248", - "range_level": "1", - "attack_level": "1" - }, - { - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Paladin", - "defence_level": "1", - "safespot": null, - "lifepoints": "66", - "strength_level": "1", - "id": "2256", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An initiate of Zamorak.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dark mage", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2262", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A blood-drinking denizen of the abyss.", - "melee_animation": "2181", - "range_animation": "0", - "combat_audio": "232,231,230", - "attack_speed": "3", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "slayer_exp": "0", - "magic_animation": "0", - "death_animation": "2183", - "name": "Abyssal leech", - "defence_level": "52", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2263", - "aggressive": "true", - "range_level": "52", - "attack_level": "1" - }, - { - "examine": "It seems to have eyes in the back of its head...", - "melee_animation": "2186", - "range_animation": "2186", - "attack_speed": "6", - "magic_level": "57", - "defence_animation": "2188", - "weakness": "3", - "slayer_exp": "0", - "magic_animation": "2186", - "death_animation": "2189", - "name": "Abyssal guardian", - "defence_level": "65", - "safespot": null, - "lifepoints": "50", - "strength_level": "96", - "id": "2264", - "aggressive": "true", - "range_level": "135", - "attack_level": "65" - }, - { - "examine": "Apparently walks the abyss.", - "melee_animation": "2192", - "range_animation": "2192", - "combat_audio": "233,235,234", - "attack_speed": "5", - "defence_animation": "2193", - "weakness": "8", - "slayer_exp": "0", - "magic_animation": "2192", - "death_animation": "2194", - "name": "Abyssal walker", - "defence_level": "55", - "safespot": null, - "lifepoints": "95", - "strength_level": "116", - "id": "2265", - "aggressive": "true", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Sparkles the Tinsel Snake", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Rogue Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2267", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A snowman armed with a holly bow.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Rogue Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2269", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A snowman armed with an ice sword.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Emerald Benedict", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2271", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A snowman armed with a winter staff.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Spin Blades", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2272", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "2274", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "2275", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "2276", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "2277", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "2278", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "2279", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "2280", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "2281", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An observer for the Temple Knights.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sir Spishyus", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2282", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An observer for the Temple Knights.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Lady Table", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2283", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An observer for the Temple Knights.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sir Kuam Ferentse", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2284", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A warrior blessed by Saradomin.", - "melee_animation": "400", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Sir Leye", - "defence_level": "15", - "safespot": null, - "lifepoints": "21", - "strength_level": "18", - "id": "2285", - "aggressive": "true", - "range_level": "1", - "attack_level": "18" - }, - { - "examine": "An observer for the Temple Knights.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sir Tinley", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2286", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An observer for the Temple Knights.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sir Ren Itchood", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2287", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An observer for the Temple Knights.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Miss Cheevers", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2288", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An observer for the Temple Knights.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ms. Hynn Terprett", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2289", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Head of recruitment for the Temple Knights.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sir Tiffy Cashien", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2290", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A carpet merchant.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Rug Merchant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2291", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A carpet merchant.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Rug Merchant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2292", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A man who deals in rugs.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Rug Merchant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2293", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A man who deals in rugs.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Rug Merchant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2294", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Perhaps our oldest relatives.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "629,631,630", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2301", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Young, but still beefy.", - "melee_animation": "5849", - "range_animation": "5849", - "combat_audio": "366,368,367", - "attack_speed": "5", - "defence_animation": "5850", - "weakness": "8", - "slayer_exp": "8", - "magic_animation": "5849", - "death_animation": "5851", - "name": "Cow calf", - "defence_level": "2", - "safespot": null, - "lifepoints": "6", - "strength_level": "2", - "id": "2310", - "range_level": "1", - "attack_level": "2" - }, - { - "examine": "Farmer/sheep liaison officer. Go on - give the dog a bone!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sheepdog", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2311", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He rules the", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Rooster", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2312", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Yep. Definitely a chicken.", - "melee_animation": "5387", - "range_animation": "5387", - "combat_audio": "355,357,356", - "attack_speed": "6", - "respawn_delay": "18", - "defence_animation": "5388", - "magic_animation": "5387", - "death_animation": "5389", - "name": "Chicken", - "defence_level": "1", - "safespot": null, - "lifepoints": "3", - "strength_level": "1", - "id": "2313", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Yep. Definitely a chicken.", - "melee_animation": "5387", - "range_animation": "5387", - "combat_audio": "355,357,356", - "attack_speed": "6", - "respawn_delay": "18", - "defence_animation": "5388", - "magic_animation": "5387", - "death_animation": "5389", - "name": "Chicken", - "defence_level": "1", - "safespot": null, - "lifepoints": "3", - "strength_level": "1", - "id": "2314", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Yep. Definitely a chicken.", - "melee_animation": "5387", - "range_animation": "5387", - "combat_audio": "355,357,356", - "attack_speed": "6", - "respawn_delay": "18", - "defence_animation": "5388", - "magic_animation": "5387", - "death_animation": "5389", - "name": "Chicken", - "defence_level": "1", - "safespot": null, - "lifepoints": "3", - "strength_level": "1", - "id": "2315", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Swine.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Pig", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2316", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Porker.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Pig", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2317", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Hog.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Piglet", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2318", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Porcine.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Piglet", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2319", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He has a certain bovine aroma.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Piglet", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2320", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An expert on the brewing of ales and cider.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Blandebir", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2321", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Only the Grim Reaper would have a pet like this.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Muncher", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2329", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Perhaps this farmer might look after your crops for you.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Vasquen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2333", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Taria", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2336", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fayeth", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2342", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He can look after my money.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2354", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She can look after my money.", - "combat_style": "2", - "melee_animation": "0", - "range_animation": "0", - "respawn_delay": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "476", - "strength_level": "1", - "id": "2355", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I don't wanna be at the wrong end of that pike.", - "melee_animation": "428", - "range_animation": "0", - "combat_audio": "425,427,426", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Elf warrior", - "defence_level": "60", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "2359", - "clue_level": "2", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "I don't wanna be at the wrong end of that pike.", - "melee_animation": "428", - "range_animation": "0", - "combat_audio": "425,427,426", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Elf warrior", - "defence_level": "60", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "2360", - "clue_level": "2", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "He looks pretty handy with that bow.", - "start_gfx": "250", - "combat_style": "1", - "melee_animation": "428", - "range_animation": "426", - "combat_audio": "425,427,426", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "836", - "name": "Elf warrior", - "defence_level": "64", - "safespot": null, - "lifepoints": "91", - "strength_level": "1", - "id": "2361", - "clue_level": "2", - "range_level": "64", - "projectile": "249", - "attack_level": "1" - }, - { - "examine": "He looks pretty handy with that bow.", - "start_gfx": "250", - "combat_style": "1", - "melee_animation": "428", - "range_animation": "426", - "combat_audio": "425,427,426", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "836", - "name": "Elf warrior", - "defence_level": "64", - "safespot": null, - "lifepoints": "91", - "strength_level": "1", - "id": "2362", - "clue_level": "2", - "range_level": "64", - "projectile": "249", - "attack_level": "1" - }, - { - "examine": "A Mourner showing his true identity.", - "melee_animation": "", - "range_animation": "", - "defence_animation": "", - "magic_animation": "", - "death_animation": "", - "name": "Head mourner", - "defence_level": "", - "safespot": null, - "lifepoints": "", - "strength_level": "", - "id": "2372", - "range_level": "", - "attack_level": "" - }, - { - "examine": "A mourner, or plague healer.", - "melee_animation": "428", - "range_animation": "", - "attack_speed": "4", - "defence_animation": "", - "weakness": "", - "magic_animation": "", - "death_animation": "836", - "name": "Mourner", - "defence_level": "80", - "safespot": null, - "lifepoints": "87", - "strength_level": "61", - "id": "2373", - "aggressive": "true", - "range_level": "", - "attack_level": "61" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2381", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2382", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2383", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2384", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2385", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2386", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2387", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2388", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2389", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2390", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2391", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2392", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2393", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2394", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2395", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2396", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2397", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2398", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2399", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2400", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2401", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to flitter in and out of existence...", - "name": "Mysterious ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2402", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "61", - "weakness": "6", - "examine": "A dwarf gone bad.", - "name": "Chaos dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2423", - "respawn_delay": "150", - "range_level": "1", - "attack_level": "1" - }, - { - "death_animation": "9230", - "name": "Jarvald", - "defence_level": "10", - "safespot": null, - "lifepoints": "10", - "melee_animation": "9232", - "strength_level": "10", - "id": "2436", - "range_level": "1", - "attack_level": "10", - "defence_animation": "9231" - }, - { - "examine": "Looks like a wanna be Fremennik.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Askeladden", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2439", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This support is propping the door closed.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Door-support", - "defence_level": "1", - "safespot": null, - "lifepoints": "0", - "strength_level": "1", - "id": "2443", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "No one likes crabs... especially really big ones!", - "melee_animation": "2368", - "range_animation": "0", - "combat_audio": "717,723,722", - "attack_speed": "4", - "respawn_delay": "50", - "defence_animation": "1313", - "weakness": "9", - "magic_animation": "0", - "death_animation": "1314", - "name": "Giant Rock Crab", - "defence_level": "200", - "safespot": null, - "lifepoints": "180", - "strength_level": "80", - "id": "2452", - "aggressive": "true", - "bonuses": "0,0,0,0,0,225,200,175,-10,250,0,0,0,0,0", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "Heavy rock!", - "melee_animation": "0", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Boulder", - "defence_level": "1", - "safespot": null, - "lifepoints": "240", - "strength_level": "1", - "id": "2453", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A teeny-tiny horror from the ocean depths...", - "melee_animation": "1341", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "1342", - "name": "Dagannoth spawn", - "defence_level": "47", - "safespot": null, - "lifepoints": "67", - "strength_level": "47", - "id": "2454", - "aggressive": "true", - "range_level": "1", - "attack_level": "47" - }, - { - "examine": "A horror from the ocean depths...", - "melee_animation": "1343", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "1340", - "slayer_exp": "120", - "death_animation": "1342", - "name": "Dagannoth", - "defence_level": "71", - "safespot": null, - "lifepoints": "120", - "strength_level": "70", - "id": "2455", - "aggressive": "true", - "clue_level": "1", - "range_level": "1", - "projectile": "294", - "attack_level": "68" - }, - { - "examine": "A horror from the ocean depths...", - "combat_style": "1", - "melee_animation": "1343", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "1340", - "slayer_exp": "0", - "death_animation": "1342", - "name": "Dagannoth", - "defence_level": "50", - "safespot": null, - "lifepoints": "70", - "strength_level": "70", - "id": "2456", - "aggressive": "true", - "clue_level": "1", - "range_level": "70", - "projectile": "294", - "attack_level": "68" - }, - { - "examine": "A fearsome magical creature from the deep.", - "combat_style": "2", - "melee_animation": "2365", - "combat_audio": "1077,1079,1078", - "attack_speed": "6", - "spell_id": "48", - "magic_level": "100", - "respawn_delay": "60", - "defence_animation": "2366", - "magic_animation": "2365", - "death_animation": "2367", - "name": "Wallasalki", - "defence_level": "80", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "id": "2457", - "aggressive": "true", - "bonuses": "0,0,0,0,0,100,150,175,250,-10,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A brightly coloured game bird.", - "melee_animation": "2372", - "range_animation": "2372", - "combat_audio": "690,692,691", - "attack_speed": "6", - "respawn_delay": "18", - "defence_animation": "2371", - "magic_animation": "2372", - "death_animation": "2373", - "name": "Pheasant", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "2459", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A brightly coloured game bird.", - "melee_animation": "2372", - "range_animation": "2372", - "combat_audio": "690,692,691", - "attack_speed": "6", - "respawn_delay": "18", - "defence_animation": "2371", - "magic_animation": "2372", - "death_animation": "2373", - "name": "Pheasant", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "2460", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A brightly coloured game bird.", - "melee_animation": "2372", - "range_animation": "2372", - "combat_audio": "690,692,691", - "attack_speed": "6", - "respawn_delay": "18", - "defence_animation": "2371", - "magic_animation": "2372", - "death_animation": "2373", - "name": "Pheasant", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "2461", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A brightly coloured game bird.", - "melee_animation": "2372", - "range_animation": "2372", - "combat_audio": "690,692,691", - "attack_speed": "6", - "respawn_delay": "18", - "defence_animation": "2371", - "magic_animation": "2372", - "death_animation": "2373", - "name": "Pheasant", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "2462", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A fowl beast.", - "combat_style": "2", - "melee_animation": "2302", - "range_animation": "2302", - "combat_audio": "2288,357,356", - "magic_level": "5", - "respawn_delay": "25", - "defence_animation": "2300", - "magic_animation": "2302", - "death_animation": "2301", - "name": "Evil Chicken", - "defence_level": "20", - "safespot": null, - "lifepoints": "19", - "strength_level": "5", - "id": "2463", - "aggressive": "true", - "bonuses": "25,85,105,75,103,85,65,0,0,0,0,0,0,0,0", - "range_level": "5", - "projectile": "337", - "attack_level": "5" - }, - { - "examine": "A fowl beast.", - "combat_style": "2", - "melee_animation": "2302", - "range_animation": "2302", - "combat_audio": "2288,357,356", - "magic_level": "10", - "respawn_delay": "25", - "defence_animation": "2300", - "magic_animation": "2302", - "death_animation": "2301", - "name": "Evil Chicken", - "defence_level": "40", - "safespot": null, - "lifepoints": "40", - "strength_level": "10", - "id": "2464", - "aggressive": "true", - "bonuses": "35,105,125,95,128,105,85,0,0,0,0,0,0,0,0", - "range_level": "10", - "projectile": "337", - "attack_level": "10" - }, - { - "examine": "A fowl beast.", - "combat_style": "2", - "melee_animation": "2302", - "range_animation": "2302", - "combat_audio": "2288,357,356", - "magic_level": "15", - "respawn_delay": "25", - "defence_animation": "2300", - "magic_animation": "2302", - "death_animation": "2301", - "name": "Evil Chicken", - "defence_level": "50", - "safespot": null, - "lifepoints": "60", - "strength_level": "15", - "id": "2465", - "aggressive": "true", - "bonuses": "35,185,185,155,188,125,165,0,0,0,0,0,0,0,0", - "range_level": "15", - "projectile": "337", - "attack_level": "15" - }, - { - "examine": "A fowl beast.", - "combat_style": "2", - "melee_animation": "2302", - "range_animation": "2302", - "combat_audio": "2288,357,356", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "2300", - "magic_animation": "2302", - "death_animation": "2301", - "name": "Evil Chicken", - "defence_level": "60", - "safespot": null, - "lifepoints": "80", - "strength_level": "45", - "id": "2466", - "aggressive": "true", - "bonuses": "45,235,235,205,238,145,165,0,0,0,0,0,0,0,0", - "range_level": "45", - "projectile": "337", - "attack_level": "45" - }, - { - "examine": "A fowl beast.", - "combat_style": "2", - "melee_animation": "2302", - "range_animation": "2302", - "combat_audio": "2288,357,356", - "magic_level": "35", - "respawn_delay": "25", - "defence_animation": "2300", - "magic_animation": "2302", - "death_animation": "2301", - "name": "Evil Chicken", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "45", - "id": "2467", - "aggressive": "true", - "bonuses": "45,285,285,255,288,145,165,0,0,0,0,0,0,0,0", - "range_level": "45", - "projectile": "337", - "attack_level": "45" - }, - { - "examine": "A fowl beast.", - "combat_style": "2", - "melee_animation": "2302", - "range_animation": "2302", - "combat_audio": "2288,357,356", - "magic_level": "45", - "respawn_delay": "25", - "defence_animation": "2300", - "weakness": "9", - "magic_animation": "2302", - "death_animation": "2301", - "name": "Evil Chicken", - "defence_level": "90", - "safespot": null, - "lifepoints": "120", - "strength_level": "45", - "id": "2468", - "aggressive": "true", - "bonuses": "45,285,285,255,288,145,165,0,0,0,0,0,0,0,0", - "range_level": "45", - "projectile": "337", - "attack_level": "45" - }, - { - "examine": "A Retired Highwayman", - "combat_style": "1", - "melee_animation": "4230", - "range_animation": "4230", - "combat_audio": "2695,513,512", - "attack_speed": "5", - "magic_level": "30", - "defence_animation": "404", - "magic_animation": "4230", - "death_animation": "9055", - "name": "Rick Turpentine", - "defence_level": "8", - "safespot": null, - "lifepoints": "10", - "strength_level": "8", - "id": "2476", - "bonuses": "30,20,10,20,20,30,30,10,20,10,30,30,20,30,20", - "range_level": "20", - "projectile": "27", - "attack_level": "8", - "prj_height": "" - }, - { - "examine": "Apparently a master of quizzes!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Quiz Master", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2477", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Hey, it's Bob the cat! Or... is it?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Evil Bob", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2479", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Servant of Evil Bob.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Servant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2481", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Annoying flappy thing.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "292,294,293", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "defence_animation": "0", - "slayer_exp": "8", - "magic_animation": "0", - "death_animation": "0", - "name": "Giant bat", - "defence_level": "22", - "safespot": null, - "lifepoints": "32", - "strength_level": "22", - "id": "2482", - "bonuses": "0,0,0,0,0,10,10,12,10,8,0,0,0,0,0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "A slithering serpent that likes to hide in the bush.", - "melee_animation": "275", - "range_animation": "0", - "combat_audio": "3609,3608,3610", - "attack_speed": "7", - "poisonous": "true", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "276", - "weakness": "1", - "poison_amount": "55", - "magic_animation": "0", - "death_animation": "278", - "name": "Bush snake", - "defence_level": "50", - "safespot": null, - "lifepoints": "25", - "strength_level": "25", - "id": "2489", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "A slithering serpent that likes to hide in the bush.", - "melee_animation": "275", - "combat_audio": "3609,3608,3610", - "range_animation": "0", - "attack_speed": "7", - "poisonous": "true", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "276", - "poison_amount": "55", - "magic_animation": "0", - "death_animation": "278", - "name": "Bush snake", - "defence_level": "50", - "safespot": null, - "lifepoints": "25", - "strength_level": "25", - "id": "2490", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "", - "melee_animation": "5327", - "combat_audio": "537,539,538", - "respawn_delay": "60", - "defence_animation": "5328", - "death_animation": "5329", - "name": "Jungle spider", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "2491", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5327", - "combat_audio": "537,539,538", - "respawn_delay": "60", - "defence_animation": "5328", - "death_animation": "5329", - "name": "Jungle spider", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "2492", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A flying bloodsucker.", - "melee_animation": "2397", - "range_animation": "0", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "2398", - "name": "Large mosquito", - "defence_level": "63", - "safespot": null, - "lifepoints": "90", - "strength_level": "1", - "id": "2493", - "range_level": "63", - "attack_level": "1" - }, - { - "examine": "A swarm of three highly agile mosquitoes.", - "melee_animation": "2397", - "range_animation": "0", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "2398", - "name": "Mosquito swarm", - "defence_level": "66", - "safespot": null, - "lifepoints": "94", - "strength_level": "1", - "id": "2494", - "range_level": "66", - "attack_level": "1" - }, - { - "examine": "A swarm of five highly agile mosquitoes.", - "melee_animation": "2397", - "range_animation": "0", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "2398", - "name": "Mosquito swarm", - "defence_level": "68", - "safespot": null, - "lifepoints": "97", - "strength_level": "1", - "id": "2495", - "range_level": "68", - "attack_level": "1" - }, - { - "name": "Tribesman", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "strength_level": "1", - "id": "2496", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A vicious warrior.", - "melee_animation": "428", - "range_animation": "0", - "attack_speed": "4", - "poisonous": "true", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "9", - "poison_amount": "55", - "magic_animation": "0", - "death_animation": "836", - "name": "Tribesman", - "defence_level": "26", - "safespot": null, - "lifepoints": "39", - "strength_level": "27", - "id": "2497", - "aggressive": "true", - "clue_level": "1", - "bonuses": "8,8,8,0,0,4,6,6,0,0,0,5,0,0,0", - "range_level": "1", - "attack_level": "23" - }, - { - "examine": "An undead victim of some ancient murderous ritual; his skin appears deep green.", - "combat_style": "2", - "melee_animation": "0", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Broodoo victim", - "defence_level": "45", - "safespot": null, - "lifepoints": "64", - "strength_level": "45", - "id": "2499", - "aggressive": "true", - "range_level": "1", - "attack_level": "45" - }, - { - "examine": "An undead victim of some ancient murderous ritual; his skin appears pale yellow.", - "combat_style": "2", - "melee_animation": "428", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Broodoo victim", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "2501", - "aggressive": "true", - "range_level": "1", - "attack_level": "43" - }, - { - "combat_style": "2", - "melee_animation": "810", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Broodoo victim", - "defence_level": "1", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "2503", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He used to swashbuckle his away across the seven seas.", - "combat_style": "1", - "melee_animation": "4230", - "range_animation": "4230", - "attack_speed": "5", - "magic_level": "20", - "defence_animation": "404", - "magic_animation": "4230", - "death_animation": "9055", - "name": "Cap'n Hand", - "defence_level": "10", - "safespot": null, - "lifepoints": "10", - "strength_level": "10", - "id": "2539", - "bonuses": "10,30,20,30,10,20,15,30,10,30,15,20,20,0,0", - "range_level": "30", - "attack_level": "30" - }, - { - "examine": "A crazy, evil druid.", - "start_gfx": "105", - "melee_animation": "422", - "range_animation": "422", - "attack_speed": "4", - "magic_level": "10", - "end_gfx": "107", - "respawn_delay": "25", - "defence_animation": "404", - "weakness": "3", - "magic_animation": "422", - "death_animation": "9055", - "name": "Chaos druid", - "defence_level": "12", - "safespot": null, - "lifepoints": "20", - "strength_level": "8", - "id": "2547", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "projectile": "106", - "attack_level": "8" - }, - { - "examine": "A colourful character.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ali the dyer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2549", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks after the blast furnace.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Blast Furnace Foreman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2553", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He smells of rock dust.", - "name": "Ordan", - "id": "2564" - }, - { - "examine": "He buys stuff.", - "name": "Jorzik", - "id": "2565" - }, - { - "death_animation": "836", - "name": "Market Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "23", - "melee_animation": "400", - "strength_level": "1", - "id": "2571", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "examine": "He's guarding the bank.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bank guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2574", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A holy man.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brother Althric", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2588", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks like some kind of mystic.", - "start_gfx": "1618", - "combat_style": "2", - "melee_animation": "9260", - "range_animation": "9260", - "attack_speed": "5", - "magic_level": "70", - "end_gfx": "1621", - "defence_animation": "9287", - "magic_animation": "9260", - "death_animation": "9291", - "name": "TzHaar-Mej", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "2591", - "bonuses": "60,120,90,120,60,60,50,45,0,0,0,0,0,0,0", - "range_level": "70", - "projectile": "1617", - "attack_level": "70" - }, - { - "examine": "Looks like some kind of mystic.", - "start_gfx": "1618", - "combat_style": "2", - "melee_animation": "9260", - "range_animation": "9260", - "attack_speed": "5", - "magic_level": "70", - "end_gfx": "1621", - "defence_animation": "9287", - "magic_animation": "9260", - "death_animation": "9291", - "name": "TzHaar-Mej", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "2592", - "bonuses": "60,120,90,120,60,60,50,45,0,0,0,0,0,0,0", - "range_level": "70", - "projectile": "1617", - "attack_level": "70" - }, - { - "examine": "Looks like some kind of mystic.", - "start_gfx": "1618", - "combat_style": "2", - "melee_animation": "9260", - "range_animation": "9260", - "attack_speed": "5", - "magic_level": "70", - "end_gfx": "1621", - "defence_animation": "9287", - "magic_animation": "9260", - "death_animation": "9291", - "name": "TzHaar-Mej", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "2593", - "bonuses": "60,120,90,120,60,60,50,45,0,0,0,0,0,0,0", - "range_level": "70", - "projectile": "1617", - "attack_level": "70" - }, - { - "examine": "Looks like some kind of mystic.", - "start_gfx": "1618", - "combat_style": "2", - "melee_animation": "9260", - "range_animation": "9260", - "attack_speed": "5", - "magic_level": "70", - "end_gfx": "1621", - "defence_animation": "9287", - "magic_animation": "9260", - "death_animation": "9291", - "name": "TzHaar-Mej", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "2594", - "bonuses": "60,120,90,120,60,60,50,45,0,0,0,0,0,0,0", - "range_level": "70", - "projectile": "1617", - "attack_level": "70" - }, - { - "examine": "Looks like some kind of mystic.", - "start_gfx": "1618", - "combat_style": "2", - "melee_animation": "9260", - "range_animation": "9260", - "attack_speed": "5", - "magic_level": "70", - "end_gfx": "1621", - "defence_animation": "9287", - "magic_animation": "9260", - "death_animation": "9291", - "name": "TzHaar-Mej", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "2595", - "bonuses": "60,120,90,120,60,60,50,45,0,0,0,0,0,0,0", - "range_level": "70", - "projectile": "1617", - "attack_level": "70" - }, - { - "examine": "Looks like some kind of mystic.", - "start_gfx": "1618", - "combat_style": "2", - "melee_animation": "9260", - "range_animation": "9260", - "attack_speed": "5", - "magic_level": "70", - "end_gfx": "1621", - "defence_animation": "9287", - "magic_animation": "9260", - "death_animation": "9291", - "name": "TzHaar-Mej", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "2596", - "bonuses": "60,120,90,120,60,60,50,45,0,0,0,0,0,0,0", - "range_level": "70", - "projectile": "1617", - "attack_level": "70" - }, - { - "examine": "Looks like some kind of mystic.", - "start_gfx": "1618", - "combat_style": "2", - "melee_animation": "9260", - "range_animation": "9260", - "attack_speed": "5", - "magic_level": "70", - "end_gfx": "1621", - "defence_animation": "9287", - "magic_animation": "9260", - "death_animation": "9291", - "name": "TzHaar-Mej", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "2597", - "bonuses": "60,120,90,120,60,60,50,45,0,0,0,0,0,0,0", - "range_level": "70", - "projectile": "1617", - "attack_level": "70" - }, - { - "examine": "Looks like a craftsman of some kind.", - "melee_animation": "9286", - "range_animation": "9286", - "attack_speed": "5", - "magic_level": "50", - "defence_animation": "9287", - "magic_animation": "9286", - "death_animation": "9288", - "name": "TzHaar-Hur", - "defence_level": "50", - "safespot": null, - "lifepoints": "80", - "strength_level": "50", - "id": "2598", - "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "50" - }, - { - "examine": "Looks like a craftsman of some kind.", - "melee_animation": "9286", - "range_animation": "9286", - "attack_speed": "5", - "magic_level": "50", - "defence_animation": "9287", - "magic_animation": "9286", - "death_animation": "9288", - "name": "TzHaar-Hur", - "defence_level": "50", - "safespot": null, - "lifepoints": "80", - "strength_level": "50", - "id": "2599", - "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "50" - }, - { - "examine": "Looks like a craftsman of some kind.", - "melee_animation": "9286", - "range_animation": "9286", - "attack_speed": "5", - "magic_level": "50", - "defence_animation": "9287", - "magic_animation": "9286", - "death_animation": "9288", - "name": "TzHaar-Hur", - "defence_level": "50", - "safespot": null, - "lifepoints": "80", - "strength_level": "50", - "id": "2600", - "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "50" - }, - { - "examine": "Looks like a craftsman of some kind.", - "melee_animation": "9286", - "range_animation": "9286", - "attack_speed": "5", - "magic_level": "50", - "defence_animation": "9287", - "magic_animation": "9286", - "death_animation": "9288", - "name": "TzHaar-Hur", - "defence_level": "50", - "safespot": null, - "lifepoints": "80", - "strength_level": "50", - "id": "2601", - "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "50" - }, - { - "examine": "Looks like a craftsman of some kind.", - "melee_animation": "9286", - "range_animation": "9286", - "attack_speed": "5", - "magic_level": "50", - "defence_animation": "9287", - "magic_animation": "9286", - "death_animation": "9288", - "name": "TzHaar-Hur", - "defence_level": "50", - "safespot": null, - "lifepoints": "80", - "strength_level": "50", - "id": "2602", - "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "50" - }, - { - "examine": "Looks like a craftsman of some kind.", - "melee_animation": "9286", - "range_animation": "9286", - "attack_speed": "5", - "magic_level": "50", - "defence_animation": "9287", - "magic_animation": "9286", - "death_animation": "9288", - "name": "TzHaar-Hur", - "defence_level": "50", - "safespot": null, - "lifepoints": "80", - "strength_level": "50", - "id": "2603", - "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "50" - }, - { - "examine": "Doesn't look very social.", - "melee_animation": "9345", - "range_animation": "9345", - "magic_level": "70", - "defence_animation": "9287", - "magic_animation": "9345", - "death_animation": "9291", - "name": "TzHaar-Xil", - "defence_level": "70", - "safespot": null, - "lifepoints": "120", - "strength_level": "70", - "id": "2604", - "bonuses": "50,30,120,120,120,130,20,50,45,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "Doesn't look very social.", - "melee_animation": "9345", - "range_animation": "9345", - "magic_level": "70", - "defence_animation": "9287", - "magic_animation": "9345", - "death_animation": "9291", - "name": "TzHaar-Xil", - "defence_level": "70", - "safespot": null, - "lifepoints": "120", - "strength_level": "70", - "id": "2605", - "bonuses": "50,30,120,120,120,130,20,50,45,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "Doesn't look very social.", - "combat_style": "1", - "melee_animation": "9345", - "range_animation": "9345", - "magic_level": "70", - "defence_animation": "9287", - "magic_animation": "9345", - "death_animation": "9291", - "name": "TzHaar-Xil", - "defence_level": "70", - "safespot": null, - "lifepoints": "120", - "strength_level": "70", - "id": "2606", - "bonuses": "50,30,80,56,80,80,100,60,50,45,45,0,0,0,0", - "range_level": "70", - "projectile": "442", - "attack_level": "70" - }, - { - "examine": "Doesn't look very social.", - "melee_animation": "9345", - "range_animation": "9345", - "magic_level": "70", - "defence_animation": "9287", - "magic_animation": "9345", - "death_animation": "9291", - "name": "TzHaar-Xil", - "defence_level": "70", - "safespot": null, - "lifepoints": "120", - "strength_level": "70", - "id": "2607", - "bonuses": "50,30,120,120,120,130,20,50,45,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "Doesn't look very social.", - "melee_animation": "9345", - "range_animation": "9345", - "magic_level": "70", - "defence_animation": "9287", - "magic_animation": "9345", - "death_animation": "9291", - "name": "TzHaar-Xil", - "defence_level": "70", - "safespot": null, - "lifepoints": "120", - "strength_level": "70", - "id": "2608", - "bonuses": "50,30,120,120,120,130,20,50,45,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "Doesn't look very social.", - "combat_style": "1", - "melee_animation": "9345", - "range_animation": "9345", - "magic_level": "70", - "defence_animation": "9287", - "slayer_exp": "0", - "magic_animation": "9345", - "death_animation": "9291", - "name": "TzHaar-Xil", - "defence_level": "70", - "safespot": null, - "lifepoints": "120", - "strength_level": "70", - "id": "2609", - "bonuses": "50,30,80,56,80,80,100,60,50,45,45,0,0,0,0", - "range_level": "70", - "projectile": "442", - "attack_level": "70" - }, - { - "examine": "Must be a guard or something.", - "melee_animation": "9345", - "range_animation": "9345", - "magic_level": "70", - "defence_animation": "9287", - "magic_animation": "9345", - "death_animation": "9288", - "name": "TzHaar-Ket", - "defence_level": "70", - "safespot": null, - "lifepoints": "140", - "strength_level": "70", - "id": "2610", - "bonuses": "50,120,120,120,130,20,60,45,0,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "Must be a guard or something.", - "melee_animation": "9345", - "range_animation": "9345", - "magic_level": "70", - "defence_animation": "9287", - "magic_animation": "9345", - "death_animation": "9288", - "name": "TzHaar-Ket", - "defence_level": "70", - "safespot": null, - "lifepoints": "140", - "strength_level": "70", - "id": "2611", - "bonuses": "50,120,120,120,130,20,60,45,0,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "Must be a guard or something.", - "melee_animation": "9345", - "range_animation": "9345", - "magic_level": "70", - "defence_animation": "9287", - "magic_animation": "9345", - "death_animation": "9288", - "name": "TzHaar-Ket", - "defence_level": "70", - "safespot": null, - "lifepoints": "140", - "strength_level": "70", - "id": "2612", - "bonuses": "50,120,120,120,130,20,60,45,0,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "Must be a guard or something.", - "melee_animation": "9345", - "range_animation": "9345", - "magic_level": "70", - "defence_animation": "9287", - "magic_animation": "9345", - "death_animation": "9288", - "name": "TzHaar-Ket", - "defence_level": "70", - "safespot": null, - "lifepoints": "140", - "strength_level": "70", - "id": "2613", - "bonuses": "50,120,120,120,130,20,60,45,0,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "Must be a guard or something.", - "melee_animation": "9345", - "range_animation": "9345", - "magic_level": "70", - "defence_animation": "9287", - "magic_animation": "9345", - "death_animation": "9288", - "name": "TzHaar-Ket", - "defence_level": "70", - "safespot": null, - "lifepoints": "140", - "strength_level": "70", - "id": "2614", - "bonuses": "50,120,120,120,130,20,60,45,0,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "Must be a guard or something.", - "melee_animation": "9345", - "range_animation": "9345", - "magic_level": "70", - "defence_animation": "9287", - "magic_animation": "9345", - "death_animation": "9288", - "name": "TzHaar-Ket", - "defence_level": "70", - "safespot": null, - "lifepoints": "140", - "strength_level": "70", - "id": "2615", - "bonuses": "50,120,120,120,130,20,60,45,0,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "Must be a guard or something.", - "melee_animation": "9345", - "range_animation": "9345", - "magic_level": "70", - "defence_animation": "9287", - "magic_animation": "9345", - "death_animation": "9288", - "name": "TzHaar-Ket", - "defence_level": "70", - "safespot": null, - "lifepoints": "140", - "strength_level": "70", - "id": "2616", - "bonuses": "50,120,120,120,130,20,60,45,0,0,0,0,0,0,0", - "range_level": "70", - "attack_level": "70" - }, - { - "name": "Tz-Kih", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "attack_speed": "7", - "id": "2627", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Tz-Kih", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "attack_speed": "7", - "id": "2628", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Tz-Kek", - "defence_level": "1", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "attack_speed": "5", - "id": "2629", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Tz-Kek", - "defence_level": "1", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "attack_speed": "5", - "id": "2630", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "The Tok-Xil fires deadly spines out of its arm", - "range_animation": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "name": "Tok-Xil", - "defence_level": "80", - "safespot": null, - "lifepoints": "114", - "strength_level": "1", - "id": "2631", - "aggressive": "true", - "range_level": "80", - "attack_level": "1" - }, - { - "examine": "A busy-body who loves a bit of gossip.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Miss Schism", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2634", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Dragonkin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "408,410,409", - "strength_level": "1", - "id": "2641", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Nice but dim.", - "name": "Unferth", - "id": "2655" - }, - { - "examine": "Known for his light-fingered qualities.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Thief", - "defence_level": "10", - "safespot": null, - "lifepoints": "14", - "strength_level": "10", - "id": "2674", - "range_level": "1", - "attack_level": "10" - }, - { - "name": "Man", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "2675", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He holds up passers by.", - "melee_animation": "799", - "range_animation": "799", - "combat_audio": "511,513,512", - "attack_speed": "5", - "defence_animation": "404", - "weakness": "7", - "magic_animation": "799", - "death_animation": "9055", - "name": "Highwayman", - "defence_level": "8", - "safespot": null, - "lifepoints": "13", - "strength_level": "8", - "id": "2677", - "aggressive": "true", - "range_level": "1", - "attack_level": "8" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "2678", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "2679", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "2680", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "2", - "id": "2681", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "3102,3104,3103", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "2", - "strength_level": "1", - "id": "2682", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A citizen of Rimmington.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Hengel", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2683", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A citizen of Rimmington.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Anja", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2684", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly smelly creature.", - "melee_animation": "164", - "range_animation": "164", - "combat_audio": "469,472,471", - "attack_speed": "6", - "defence_animation": "165", - "magic_animation": "164", - "death_animation": "167", - "name": "Hobgoblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "29", - "strength_level": "10", - "id": "2685", - "aggressive": "true", - "range_level": "20", - "attack_level": "20" - }, - { - "examine": "An ugly smelly creature.", - "melee_animation": "164", - "range_animation": "164", - "combat_audio": "469,472,471", - "attack_speed": "6", - "defence_animation": "165", - "magic_animation": "164", - "death_animation": "167", - "name": "Hobgoblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "29", - "strength_level": "10", - "id": "2686", - "aggressive": "true", - "range_level": "20", - "attack_level": "20" - }, - { - "examine": "An ugly smelly creature.", - "melee_animation": "164", - "range_animation": "164", - "combat_audio": "469,472,471", - "attack_speed": "6", - "defence_animation": "165", - "magic_animation": "164", - "death_animation": "167", - "name": "Hobgoblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "29", - "strength_level": "10", - "id": "2687", - "aggressive": "true", - "range_level": "20", - "attack_level": "20" - }, - { - "examine": "An ugly smelly creature, with a spear.", - "melee_animation": "163", - "range_animation": "163", - "combat_audio": "3520,472,471", - "attack_speed": "6", - "defence_animation": "165", - "magic_animation": "163", - "death_animation": "167", - "name": "Hobgoblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "29", - "strength_level": "10", - "id": "2688", - "aggressive": "true", - "range_level": "20", - "attack_level": "20" - }, - { - "examine": "Didn't the mage say this procedure was totally safe?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Frog", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2689", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A salty seafarer. Needs a wash.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Jack Seagull", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2690", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A strange man with a strange name. Probably a strange past, too.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Longbow Ben", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2691", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She quackers.", - "melee_animation": "0", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "3468", - "name": "Duck", - "defence_level": "1", - "water_npc": "true", - "safespot": null, - "lifepoints": "1", - "strength_level": "1", - "id": "2693", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Mini quackers.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "3468", - "name": "Duckling", - "defence_level": "1", - "water_npc": "true", - "safespot": null, - "lifepoints": "1", - "strength_level": "1", - "id": "2694", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This one's had too much to drink!", - "melee_animation": "422", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "id": "2695", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Known for his light-fingered qualities.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Thief", - "defence_level": "11", - "safespot": null, - "lifepoints": "15", - "strength_level": "11", - "id": "2696", - "range_level": "1", - "attack_level": "11" - }, - { - "examine": "He doesn't look so happy now he's in jail.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Mugger", - "defence_level": "11", - "safespot": null, - "lifepoints": "15", - "strength_level": "11", - "id": "2697", - "aggressive": "true", - "range_level": "1", - "attack_level": "11" - }, - { - "examine": "A dark-hearted knight.", - "melee_animation": "422", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Black knight", - "defence_level": "25", - "safespot": null, - "lifepoints": "42", - "strength_level": "24", - "id": "2698", - "aggressive": "true", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He's guarding the prison.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "13", - "id": "2699", - "clue_level": "1", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "A prison guard.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "13", - "id": "2700", - "clue_level": "1", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "A prison guard.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "13", - "id": "2701", - "clue_level": "1", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "A prison guard.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "13", - "id": "2702", - "clue_level": "1", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "A prison guard.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "13", - "id": "2703", - "clue_level": "1", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "He's asleep.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2704", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Keeping an eye out for suspicious activity.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2705", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "No one likes crabs...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Crab", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2706", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A sea bird.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "309,311,310", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Seagull", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2707", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Caution: HOT!", - "start_gfx": "99", - "combat_style": "2", - "start_height": "80", - "melee_animation": "414", - "range_animation": "0", - "magic_level": "18", - "respawn_delay": "60", - "end_gfx": "101", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "711", - "death_animation": "2553", - "name": "Fire wizard", - "defence_level": "18", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "2709", - "range_level": "1", - "projectile": "100", - "attack_level": "1" - }, - { - "examine": "Hydro-power!", - "combat_style": "2", - "start_gfx": "93", - "start_height": "80", - "melee_animation": "414", - "range_animation": "0", - "magic_level": "14", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "711", - "death_animation": "2553", - "name": "Water wizard", - "defence_level": "14", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "id": "2710", - "range_level": "1", - "projectile": "94", - "attack_level": "1" - }, - { - "examine": "His hands are covered in mud, at least.", - "start_gfx": "96", - "combat_style": "2", - "start_height": "80", - "melee_animation": "414", - "range_animation": "0", - "magic_level": "16", - "respawn_delay": "60", - "end_gfx": "98", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "711", - "death_animation": "2553", - "name": "Earth wizard", - "defence_level": "16", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "2711", - "range_level": "1", - "projectile": "97", - "attack_level": "1" - }, - { - "examine": "At least he looks solid enough to fight.", - "start_gfx": "90", - "combat_style": "2", - "start_height": "80", - "melee_animation": "414", - "range_animation": "0", - "magic_level": "12", - "respawn_delay": "60", - "end_gfx": "92", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "711", - "death_animation": "2553", - "name": "Air wizard", - "defence_level": "12", - "safespot": null, - "lifepoints": "17", - "strength_level": "1", - "id": "2712", - "range_level": "1", - "projectile": "91", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "2714", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "25", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2716", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She'll store my items for me.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Betty", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2718", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A wise barbarian, apparently. He still looks like a thug.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Otto Godblessed", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2725", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Holy looking.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Monk of Entrana", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2728", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Holy looking.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Monk of Entrana", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2729", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Holy looking.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Monk of Entrana", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2731", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He works in the Crafting Guild.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Master Crafter", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2732", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He wanders around the Crafting Guild pretending to be working.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Master Crafter", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2733", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Hangs out in caves.", - "melee_animation": "9232", - "range_animation": "9232", - "attack_speed": "5", - "respawn_delay": "0", - "defence_animation": "9231", - "magic_animation": "9232", - "death_animation": "9230", - "name": "Tz-Kih", - "defence_level": "11", - "safespot": null, - "lifepoints": "10", - "strength_level": "27", - "id": "2734", - "aggressive": "true", - "bonuses": "150,22,22,22,22,11,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Hangs out in caves.", - "melee_animation": "9232", - "range_animation": "9232", - "attack_speed": "5", - "respawn_delay": "0", - "defence_animation": "9231", - "magic_animation": "9232", - "death_animation": "9230", - "name": "Tz-Kih", - "defence_level": "11", - "safespot": null, - "lifepoints": "10", - "strength_level": "27", - "id": "2735", - "aggressive": "true", - "bonuses": "150,22,22,22,22,11,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Looks like living lava...", - "melee_animation": "9233", - "range_animation": "9233", - "attack_speed": "5", - "magic_level": "20", - "defence_animation": "9235", - "magic_animation": "9233", - "death_animation": "9234", - "name": "Tz-Kek", - "defence_level": "22", - "safespot": null, - "lifepoints": "20", - "strength_level": "60", - "id": "2736", - "aggressive": "true", - "bonuses": "80,45,45,45,45,22,0,0,0,0,0,0,0,0,0", - "range_level": "20", - "attack_level": "60" - }, - { - "examine": "Looks like living lava...", - "melee_animation": "9233", - "range_animation": "9233", - "attack_speed": "5", - "magic_level": "20", - "defence_animation": "9235", - "magic_animation": "9233", - "death_animation": "9234", - "name": "Tz-Kek", - "defence_level": "22", - "safespot": null, - "lifepoints": "20", - "strength_level": "60", - "id": "2737", - "aggressive": "true", - "bonuses": "80,45,45,45,45,22,0,0,0,0,0,0,0,0,0", - "range_level": "20", - "attack_level": "60" - }, - { - "examine": "Looks like living lava...", - "melee_animation": "9233", - "range_animation": "9233", - "attack_speed": "5", - "defence_animation": "9235", - "magic_animation": "9233", - "death_animation": "9234", - "name": "Tz-Kek", - "defence_level": "11", - "safespot": null, - "lifepoints": "10", - "strength_level": "30", - "id": "2738", - "bonuses": "60,22,22,22,22,11,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "I don't like the look of those spines...", - "melee_animation": "9245", - "range_animation": "9245", - "attack_speed": "5", - "defence_animation": "9242", - "weakness": "4", - "magic_animation": "9245", - "death_animation": "9239", - "name": "Tok-Xil", - "defence_level": "45", - "safespot": null, - "lifepoints": "40", - "strength_level": "80", - "id": "2739", - "bonuses": "80,90,86,90,90,90,45,55,26,55,0,0,0,0,0", - "range_level": "80", - "attack_level": "80" - }, - { - "examine": "I don't like the look of those spines...", - "melee_animation": "9245", - "range_animation": "9245", - "attack_speed": "5", - "defence_animation": "9242", - "weakness": "4", - "magic_animation": "9245", - "death_animation": "9239", - "name": "Tok-Xil", - "defence_level": "45", - "safespot": null, - "lifepoints": "40", - "strength_level": "80", - "id": "2740", - "bonuses": "80,90,86,90,90,90,45,55,26,55,0,0,0,0,0", - "range_level": "80", - "attack_level": "80" - }, - { - "examine": "Holy reptile...", - "melee_animation": "9252", - "range_animation": "9252", - "attack_speed": "5", - "defence_animation": "9249", - "magic_animation": "9252", - "death_animation": "9257", - "name": "Yt-MejKot", - "defence_level": "90", - "safespot": null, - "lifepoints": "80", - "strength_level": "100", - "id": "2741", - "aggressive": "true", - "bonuses": "100,180,180,180,180,90,97,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "100" - }, - { - "examine": "Holy reptile...", - "melee_animation": "9252", - "range_animation": "9252", - "attack_speed": "5", - "defence_animation": "9249", - "magic_animation": "9252", - "death_animation": "9257", - "name": "Yt-MejKot", - "defence_level": "90", - "safespot": null, - "lifepoints": "80", - "strength_level": "100", - "id": "2742", - "aggressive": "true", - "bonuses": "100,180,180,180,180,90,97,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "100" - }, - { - "examine": "That's one hot dog!", - "melee_animation": "9265", - "range_animation": "9265", - "attack_speed": "5", - "magic_level": "150", - "defence_animation": "9268", - "magic_animation": "9265", - "death_animation": "9269", - "name": "Ket-Zek", - "defence_level": "180", - "safespot": null, - "lifepoints": "160", - "strength_level": "150", - "id": "2743", - "bonuses": "180,180,280,280,280,250,140,152,131,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "150" - }, - { - "examine": "That's one hot dog!", - "melee_animation": "9265", - "range_animation": "9265", - "attack_speed": "5", - "magic_level": "150", - "defence_animation": "9268", - "magic_animation": "9265", - "death_animation": "9269", - "name": "Ket-Zek", - "defence_level": "180", - "safespot": null, - "lifepoints": "160", - "strength_level": "150", - "id": "2744", - "bonuses": "180,180,280,280,280,250,140,152,131,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "150" - }, - { - "agg_radius": "64", - "examine": "This is going to hurt...", - "melee_animation": "9277", - "range_animation": "9277", - "attack_speed": "8", - "magic_level": "480", - "defence_animation": "9278", - "weakness": "10", - "slayer_exp": "0", - "magic_animation": "9277", - "death_animation": "9279", - "name": "TzTok-Jad", - "defence_level": "480", - "safespot": null, - "lifepoints": "250", - "strength_level": "960", - "id": "2745", - "aggressive": "true", - "bonuses": "0,0,0,60,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "960", - "attack_level": "640" - }, - { - "examine": "Mini Menace.", - "melee_animation": "9252", - "range_animation": "9252", - "attack_speed": "5", - "defence_animation": "9253", - "magic_animation": "9252", - "death_animation": "9257", - "name": "Yt-HurKot", - "defence_level": "75", - "safespot": null, - "lifepoints": "40", - "strength_level": "75", - "id": "2746", - "aggressive": "true", - "bonuses": "100,110,110,110,110,60,110,30,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "75" - }, - { - "examine": "She can look after my money.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "null", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2759", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Woman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,506,505", - "strength_level": "1", - "id": "2776", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Ranger of the Temple Knights.", - "melee_animation": "426", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Ranger", - "defence_level": "1", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "id": "2779", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A shadow.", - "melee_animation": "2738", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "2739", - "name": "Shadow", - "defence_level": "68", - "safespot": null, - "lifepoints": "100", - "strength_level": "68", - "id": "2782", - "aggressive": "true", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "From a darker dimension.", - "melee_animation": "2731", - "range_animation": "2731", - "combat_audio": "389,391,390", - "attack_speed": "4", - "magic_level": "160", - "defence_animation": "2732", - "weakness": "4", - "slayer_exp": "225", - "magic_animation": "2731", - "death_animation": "2733", - "name": "Dark beast", - "defence_level": "120", - "safespot": null, - "lifepoints": "220", - "can_tolerate": "false", - "strength_level": "160", - "id": "2783", - "aggressive": "true", - "bonuses": "0,0,0,0,0,30,40,100,90,100,0,0,0,0,0", - "range_level": "1", - "attack_level": "140" - }, - { - "examine": "Digging.", - "melee_animation": "", - "range_animation": "", - "defence_animation": "", - "magic_animation": "", - "death_animation": "", - "name": "Slave", - "defence_level": "", - "safespot": null, - "lifepoints": "", - "strength_level": "", - "id": "2785", - "range_level": "", - "attack_level": "" - }, - { - "examine": "Digging.", - "melee_animation": "", - "range_animation": "", - "defence_animation": "", - "magic_animation": "", - "death_animation": "", - "name": "Slave", - "defence_level": "", - "safespot": null, - "lifepoints": "", - "strength_level": "", - "id": "2786", - "range_level": "", - "attack_level": "" - }, - { - "examine": "Confused.", - "melee_animation": "", - "range_animation": "", - "defence_animation": "", - "magic_animation": "", - "death_animation": "", - "name": "Slave", - "defence_level": "", - "safespot": null, - "lifepoints": "", - "strength_level": "", - "id": "2787", - "range_level": "", - "attack_level": "" - }, - { - "examine": "Drill Sergeant from heck!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sergeant Damien", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2790", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A man down on his luck.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tramp", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2792", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Big, ugly, and smelly.", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "defence_animation": "360", - "magic_animation": "359", - "death_animation": "361", - "name": "Ogre", - "defence_level": "54", - "safespot": null, - "lifepoints": "60", - "strength_level": "54", - "id": "2801", - "aggressive": "true", - "range_level": "1", - "attack_level": "54" - }, - { - "examine": "They just call him 'Coach'.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gnome Coach", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2802", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A cold-blooded creature, partial to warmth.", - "melee_animation": "2776", - "range_animation": "2776", - "attack_speed": "5", - "defence_animation": "2777", - "weakness": "0", - "slayer_exp": "40", - "magic_animation": "2776", - "death_animation": "2778", - "name": "Lizard", - "defence_level": "55", - "safespot": null, - "lifepoints": "40", - "strength_level": "1", - "id": "2803", - "aggressive": "true", - "range_level": "55", - "attack_level": "1" - }, - { - "examine": "A cold-blooded creature, partial to warmth.", - "melee_animation": "2776", - "range_animation": "2776", - "attack_speed": "5", - "defence_animation": "2777", - "weakness": "0", - "slayer_exp": "25", - "magic_animation": "2776", - "death_animation": "2778", - "name": "Desert Lizard", - "defence_level": "45", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "2804", - "aggressive": "true", - "range_level": "45", - "attack_level": "1" - }, - { - "examine": "A cold-blooded creature, partial to warmth.", - "melee_animation": "2776", - "range_animation": "2776", - "attack_speed": "5", - "defence_animation": "2777", - "weakness": "0", - "slayer_exp": "25", - "magic_animation": "2776", - "death_animation": "2778", - "name": "Desert Lizard", - "defence_level": "45", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "2805", - "aggressive": "true", - "range_level": "45", - "attack_level": "1" - }, - { - "examine": "A cold-blooded creature, partial to warmth.", - "melee_animation": "2776", - "range_animation": "2776", - "attack_speed": "5", - "defence_animation": "2777", - "slayer_exp": "25", - "magic_animation": "2776", - "death_animation": "2778", - "name": "Desert Lizard", - "defence_level": "45", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "2806", - "aggressive": "true", - "range_level": "45", - "attack_level": "1" - }, - { - "examine": "A cold-blooded creature, partial to warmth.", - "melee_animation": "2776", - "range_animation": "2776", - "attack_speed": "5", - "defence_animation": "2777", - "weakness": "0", - "slayer_exp": "15", - "magic_animation": "2776", - "death_animation": "2778", - "name": "Small Lizard", - "defence_level": "15", - "safespot": null, - "lifepoints": "15", - "strength_level": "1", - "id": "2807", - "range_level": "15", - "attack_level": "1" - }, - { - "examine": "A cold-blooded creature, partial to warmth.", - "melee_animation": "2776", - "range_animation": "2776", - "attack_speed": "5", - "defence_animation": "2777", - "weakness": "0", - "magic_animation": "2776", - "death_animation": "2778", - "name": "Small Lizard", - "defence_level": "15", - "safespot": null, - "lifepoints": "15", - "strength_level": "1", - "id": "2808", - "aggressive": "true", - "range_level": "15", - "attack_level": "1" - }, - { - "examine": "A camel who has the soul of a poet.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Al the Camel", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2809", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A camel whose love is unrequited.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Elly the Camel", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2810", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A camel who wants to fly some day.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ollie the Camel", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2811", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A camel who likes to rest.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cam the Camel", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2812", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A camel who wants to see the world.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Neferti the Camel", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2815", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A shifty-looking character.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Pirate Pete", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2825", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate Pete", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "2826", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A shabby-looking leader.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Braindeath", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2827", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Most of an angry", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "50% Luke", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2828", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I wonder if it was all the 'rum' that pickled him.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Donnie", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2830", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Sticking it to 'The Man'.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Zombie protester", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2831", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Sticking it to 'The Man'.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Zombie protester", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2832", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Sticking it to 'The Man'.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Zombie protester", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2833", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Sticking it to 'The Man'.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Zombie protester", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2834", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Sticking it to 'The Man'.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Zombie protester", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2835", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Sticking it to 'The Man'.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Zombie protester", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2836", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An undead sea scoundrel.", - "melee_animation": "5647", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "36", - "safespot": null, - "lifepoints": "51", - "strength_level": "36", - "id": "2837", - "aggressive": "true", - "range_level": "1", - "attack_level": "36" - }, - { - "examine": "An undead sea scoundrel.", - "melee_animation": "5651", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5654", - "name": "Zombie pirate", - "defence_level": "36", - "safespot": null, - "lifepoints": "51", - "strength_level": "36", - "id": "2838", - "aggressive": "true", - "range_level": "1", - "attack_level": "36" - }, - { - "examine": "An undead sea scoundrel.", - "melee_animation": "5651", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5654", - "name": "Zombie pirate", - "defence_level": "36", - "safespot": null, - "lifepoints": "51", - "strength_level": "36", - "id": "2839", - "aggressive": "true", - "range_level": "1", - "attack_level": "36" - }, - { - "examine": "An undead sea scoundrel.", - "melee_animation": "5651", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5654", - "name": "Zombie pirate", - "defence_level": "36", - "safespot": null, - "lifepoints": "51", - "strength_level": "36", - "id": "2840", - "aggressive": "true", - "range_level": "1", - "attack_level": "36" - }, - { - "examine": "An undead sea scoundrel.", - "melee_animation": "5647", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "36", - "safespot": null, - "lifepoints": "51", - "strength_level": "36", - "id": "2841", - "aggressive": "true", - "range_level": "1", - "attack_level": "36" - }, - { - "examine": "An undead sea scoundrel.", - "melee_animation": "5647", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "36", - "safespot": null, - "lifepoints": "51", - "strength_level": "36", - "id": "2842", - "aggressive": "true", - "range_level": "1", - "attack_level": "36" - }, - { - "examine": "He talks a good fight.", - "melee_animation": "5647", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5649", - "name": "Zombie swab", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "2843", - "aggressive": "true", - "range_level": "1", - "attack_level": "34" - }, - { - "examine": "He talks a good fight.", - "melee_animation": "5647", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5649", - "name": "Zombie swab", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "2844", - "aggressive": "true", - "range_level": "1", - "attack_level": "34" - }, - { - "examine": "He talks a good fight.", - "melee_animation": "5651", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5654", - "name": "Zombie swab", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "2845", - "aggressive": "true", - "range_level": "1", - "attack_level": "34" - }, - { - "examine": "He talks a good fight.", - "melee_animation": "5651", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5654", - "name": "Zombie swab", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "2846", - "aggressive": "true", - "range_level": "1", - "attack_level": "34" - }, - { - "examine": "He talks a good fight.", - "melee_animation": "5647", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5649", - "name": "Zombie swab", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "2847", - "aggressive": "true", - "range_level": "1", - "attack_level": "34" - }, - { - "examine": "He talks a good fight.", - "melee_animation": "5647", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5649", - "name": "Zombie swab", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "2848", - "aggressive": "true", - "range_level": "1", - "attack_level": "34" - }, - { - "examine": "The pun was intended.", - "melee_animation": "2804", - "range_animation": "0", - "magic_level": "40", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "2805", - "name": "Evil spirit", - "defence_level": "40", - "safespot": null, - "lifepoints": "57", - "strength_level": "40", - "id": "2849", - "aggressive": "true", - "range_level": "40", - "attack_level": "40" - }, - { - "examine": "A bunch of legs, eyes and teeth.", - "melee_animation": "5319", - "range_animation": "0", - "combat_audio": "537,539,538", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "slayer_exp": "40", - "magic_animation": "0", - "death_animation": "5321", - "name": "Fever spider", - "defence_level": "40", - "safespot": null, - "lifepoints": "40", - "strength_level": "30", - "id": "2850", - "bonuses": "0,0,0,0,0,20,15,10,15,15,0,0,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "A worker in the brewery.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brewer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2851", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A worker in the brewery.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brewer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2852", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A worker in the brewery.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brewer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2853", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A worker in the brewery.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brewer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2854", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A worker in the brewery.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brewer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2855", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A worker in the brewery.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brewer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2856", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A worker in the brewery.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brewer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2857", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A worker in the brewery.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brewer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2858", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "2863", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "2866", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "2869", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "2878", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A knee-high horror from the ocean depths...", - "melee_animation": "1579", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "1581", - "name": "Dagannoth fledgeling", - "defence_level": "52", - "safespot": null, - "lifepoints": "74", - "strength_level": "52", - "id": "2880", - "aggressive": "true", - "range_level": "1", - "attack_level": "52" - }, - { - "agg_radius": "8", - "examine": "The Dagannoth King responsible for the death of Bukalla.", - "combat_style": "1", - "melee_animation": "2855", - "attack_speed": "4", - "magic_level": "255", - "respawn_delay": "60", - "defence_animation": "2852", - "death_animation": "2856", - "name": "Dagannoth Supreme", - "defence_level": "128", - "movement_radius": "8", - "safespot": null, - "lifepoints": "255", - "strength_level": "255", - "id": "2881", - "aggressive": "true", - "bonuses": "0,0,0,0,0,10,10,10,255,550,0,0,0,0,0", - "clue_level": "2", - "range_level": "255", - "projectile": "475", - "attack_level": "255" - }, - { - "agg_radius": "8", - "examine": "A legendary Dagannoth King, rumoured to fly on the North winds.", - "combat_style": "2", - "melee_animation": "2854", - "attack_speed": "4", - "magic_level": "255", - "spell_id": "48", - "respawn_delay": "60", - "defence_animation": "2852", - "death_animation": "2856", - "name": "Dagannoth Prime", - "defence_level": "255", - "movement_radius": "8", - "safespot": null, - "lifepoints": "255", - "strength_level": "255", - "id": "2882", - "aggressive": "true", - "bonuses": "0,0,0,0,0,255,255,255,255,10,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "255" - }, - { - "agg_radius": "8", - "examine": "Firstborn of the legendary Dagannoth Kings.", - "melee_animation": "2853", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "2852", - "death_animation": "2856", - "name": "Dagannoth Rex", - "defence_level": "255", - "movement_radius": "8", - "safespot": null, - "lifepoints": "255", - "strength_level": "255", - "id": "2883", - "aggressive": "true", - "bonuses": "0,0,0,0,0,255,255,255,10,255,0,0,0,0,0", - "clue_level": "2", - "range_level": "255", - "attack_level": "255" - }, - { - "melee_animation": "1312", - "combat_audio": "717,723,722", - "attack_speed": "4", - "respawn_delay": "50", - "defence_animation": "1313", - "death_animation": "1314", - "name": "Giant Rock Crab", - "defence_level": "200", - "safespot": null, - "lifepoints": "180", - "strength_level": "80", - "id": "2885", - "aggressive": "true", - "bonuses": "0,0,0,0,0,225,200,175,-10,250,0,0,0,0,0", - "range_level": "1", - "attack_level": "50" - }, - { - "name": "Boulder", - "defence_level": "1", - "safespot": null, - "lifepoints": "240", - "strength_level": "1", - "attack_speed": "5", - "id": "2886", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "combat_style": "1", - "melee_animation": "1343", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Dagannoth", - "defence_level": "1", - "safespot": null, - "lifepoints": "85", - "strength_level": "1", - "id": "2887", - "aggressive": "true", - "clue_level": "1", - "range_level": "1", - "projectile": "288", - "attack_level": "1" - }, - { - "combat_style": "1", - "melee_animation": "1343", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Dagannoth", - "defence_level": "1", - "safespot": null, - "lifepoints": "70", - "strength_level": "1", - "id": "2888", - "aggressive": "true", - "clue_level": "1", - "range_level": "1", - "projectile": "288", - "attack_level": "1" - }, - { - "examine": "It wasn't a rock... It was a rock lobster!", - "melee_animation": "2860", - "range_animation": "2860", - "combat_audio": "726,728,727", - "attack_speed": "2", - "defence_animation": "2861", - "weakness": "7", - "magic_animation": "2860", - "death_animation": "2862", - "name": "Rock lobster", - "defence_level": "100", - "safespot": null, - "movement_radius": "30", - "lifepoints": "150", - "strength_level": "100", - "id": "2889", - "bonuses": "0,0,0,0,0,100,100,50,50,150,0,0,0,0,0", - "range_level": "1", - "attack_level": "100" - }, - { - "examine": "A Rock.", - "melee_animation": "2860", - "range_animation": "2860", - "attack_speed": "2", - "defence_animation": "2861", - "weakness": "7", - "magic_animation": "2860", - "death_animation": "2861", - "name": "Large rock", - "defence_level": "100", - "safespot": null, - "lifepoints": "150", - "strength_level": "100", - "id": "2890", - "aggressive": "true", - "range_level": "1", - "attack_level": "100" - }, - { - "agg_radius": "12", - "examine": "A sneaky, spiny, subterranean sea-dwelling scamp.", - "combat_style": "2", - "melee_animation": "2868", - "range_animation": "2866", - "attack_speed": "6", - "magic_level": "65", - "spell_id": "14", - "respawn_delay": "55", - "defence_animation": "2869", - "slayer_exp": "0", - "magic_animation": "2866", - "death_animation": "2866", - "name": "Spinolyp", - "defence_level": "1", - "safespot": null, - "lifepoints": "75", - "strength_level": "10", - "id": "2892", - "aggressive": "true", - "bonuses": "70,50,60,50,10,60,30,10,60,60,70,50,0,0,0", - "range_level": "20", - "projectile": "294", - "attack_level": "1" - }, - { - "agg_radius": "12", - "examine": "A sneaky, spiny, subterranean sea-dwelling scamp.", - "combat_style": "2", - "melee_animation": "2868", - "range_animation": "2866", - "attack_speed": "6", - "magic_level": "65", - "spell_id": "14", - "respawn_delay": "55", - "defence_animation": "2869", - "magic_animation": "2866", - "death_animation": "2866", - "name": "Spinolyp", - "defence_level": "1", - "safespot": null, - "lifepoints": "75", - "strength_level": "10", - "id": "2894", - "aggressive": "true", - "bonuses": "70,50,60,50,10,60,30,10,60,60,70,50,0,0,0", - "range_level": "20", - "projectile": "294", - "attack_level": "1" - }, - { - "agg_radius": "12", - "examine": "A sneaky, spiny, subterranean sea-dwelling scamp.", - "combat_style": "2", - "melee_animation": "2868", - "range_animation": "2866", - "attack_speed": "6", - "magic_level": "65", - "spell_id": "14", - "respawn_delay": "55", - "defence_animation": "2869", - "slayer_exp": "0", - "magic_animation": "2866", - "death_animation": "2866", - "name": "Spinolyp", - "defence_level": "1", - "safespot": null, - "lifepoints": "75", - "strength_level": "60", - "id": "2896", - "aggressive": "true", - "bonuses": "70,50,60,50,10,60,30,10,60,60,70,50,0,0,0", - "range_level": "70", - "projectile": "294", - "attack_level": "1" - }, - { - "melee_animation": "64", - "respawn_delay": "60", - "defence_animation": "65", - "death_animation": "67", - "name": "Agrith Naar", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "id": "2919", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "25", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "2931", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Who ate all the rats?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "The Beast", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2941", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Lovely, cute, and possibly what dreams are made of.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bones", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2945", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Obviously punches above his weight.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Hooknosed Jack", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2948", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks rich like an actor of sorts.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Jimmy Dazzler", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2949", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Once beautiful, now repugnant.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "The Face", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2950", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "What is he?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Smokin' Joe", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2952", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks fairly well fed.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Silver merchant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2958", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "2962", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "2963", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "2964", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "2965", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "2966", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "2967", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "2968", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "2969", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "2970", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "2971", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "2972", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "2973", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "2980", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "2981", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The master of all rats.", - "name": "King rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "2982", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not a soft touch.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Pusskins", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2984", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A not-so friendly, not-so little cat.", - "melee_animation": "0", - "range_animation": "0", - "attack_speed": "4", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Tom", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2986", - "aggressive": "true", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A fully grown feline.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mittens", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2988", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Cute and fluffy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Topsy", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2990", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A friendly feline?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gertrude's cat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2997", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Very well to do. I wonder what he's doing here.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gambler", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2998", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Rich.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gambler", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3001", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Poor.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gambler", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3002", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Poor.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gambler", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3003", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Poor.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gambler", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3004", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Poor.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gambler", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3005", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Poor.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gambler", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3006", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "3007", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "3008", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "3009", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "3010", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "3011", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "3012", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "3013", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "3014", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "3015", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "3016", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "3017", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "3018", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks after your Farming tools.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tool leprechaun", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3021", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Phenomenal cosmic powers", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Genie", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3022", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An animated clay statue.", - "melee_animation": "2917", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "2919", - "name": "Black golem", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "55", - "id": "3026", - "aggressive": "true", - "range_level": "1", - "attack_level": "55" - }, - { - "examine": "An animated clay statue.", - "melee_animation": "2917", - "range_animation": "0", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "2919", - "name": "White golem", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "55", - "id": "3027", - "aggressive": "true", - "range_level": "1", - "attack_level": "55" - }, - { - "examine": "An animated clay statue.", - "melee_animation": "2917", - "range_animation": "0", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "2919", - "name": "Grey golem", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "55", - "id": "3028", - "aggressive": "true", - "range_level": "1", - "attack_level": "55" - }, - { - "examine": "The oldest man in Nardah.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ghaslor the Elder", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3029", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A water salesman from Pollnivneach.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ali the Carter", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3030", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Mayor of Nardah.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Awusah the Mayor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3040", - "range_level": "1", - "attack_level": "1" - }, - { - "death_animation": "836", - "name": "Poltenip", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "melee_animation": "395", - "strength_level": "1", - "id": "3042", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "death_animation": "836", - "name": "Radat", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "melee_animation": "395", - "strength_level": "1", - "id": "3043", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "examine": "Custodian of the shrine to Elidinis.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shiratti the Custodian", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3044", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A banker of Nardah.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Nardah Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3046", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A mysterious watcher.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mystery figure", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3051", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A mysterious watcher.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mystery figure", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3052", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A mysterious watcher.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mystery figure", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3053", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A mysterious watcher.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mystery figure", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3054", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A mysterious watcher.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mystery figure", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3055", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A mysterious watcher.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mystery figure", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3056", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Champion of the earth warriors.", - "melee_animation": "2951", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "2946", - "name": "Earth Warrior Champion", - "defence_level": "84", - "safespot": null, - "lifepoints": "108", - "strength_level": "84", - "id": "3057", - "aggressive": "true", - "range_level": "1", - "attack_level": "84" - }, - { - "examine": "Champion of the giants.", - "melee_animation": "6368", - "range_animation": "0", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "slayer_exp": "35", - "magic_animation": "0", - "death_animation": "6369", - "name": "Giant Champion", - "defence_level": "52", - "safespot": null, - "lifepoints": "70", - "strength_level": "44", - "id": "3058", - "aggressive": "true", - "range_level": "1", - "attack_level": "36" - }, - { - "examine": "Champion of the ghouls.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "441,444,443", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "50", - "magic_animation": "0", - "death_animation": "836", - "name": "Ghoul Champion", - "defence_level": "60", - "safespot": null, - "lifepoints": "100", - "strength_level": "80", - "id": "3059", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "Champion of the goblins.", - "melee_animation": "6188", - "range_animation": "0", - "combat_audio": "469,472,471", - "attack_speed": "4", - "magic_level": "26", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "6190", - "name": "Goblin Champion", - "defence_level": "14", - "safespot": null, - "lifepoints": "32", - "strength_level": "1", - "id": "3060", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Champion of the hobgoblins.", - "combat_style": "1", - "melee_animation": "164", - "range_animation": "164", - "combat_audio": "469,472,471", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "165", - "weakness": "0", - "magic_animation": "164", - "death_animation": "167", - "name": "Hobgoblin Champion", - "defence_level": "48", - "safespot": null, - "lifepoints": "58", - "strength_level": "48", - "id": "3061", - "aggressive": "true", - "range_level": "44", - "attack_level": "44" - }, - { - "examine": "Champion of the imps.", - "melee_animation": "5285", - "range_animation": "0", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "172", - "name": "Imp Champion", - "defence_level": "5", - "safespot": null, - "lifepoints": "40", - "strength_level": "5", - "id": "3062", - "aggressive": "true", - "range_level": "5", - "attack_level": "5" - }, - { - "examine": "Champion of the jogres.", - "melee_animation": "2936", - "range_animation": "2936", - "poisonous": "true", - "respawn_delay": "60", - "defence_animation": "2937", - "weakness": "9", - "poison_amount": "40", - "magic_animation": "2936", - "death_animation": "2938", - "name": "Jogre Champion", - "defence_level": "86", - "safespot": null, - "lifepoints": "120", - "strength_level": "86", - "id": "3063", - "aggressive": "true", - "range_level": "1", - "attack_level": "86" - }, - { - "examine": "Champion of the lesser demons.", - "melee_animation": "64", - "range_animation": "0", - "combat_audio": "396,402,401", - "magic_level": "136", - "respawn_delay": "60", - "defence_animation": "65", - "weakness": "5", - "slayer_exp": "79", - "magic_animation": "0", - "death_animation": "67", - "name": "Lesser Demon Champion", - "defence_level": "142", - "safespot": null, - "lifepoints": "148", - "strength_level": "140", - "id": "3064", - "aggressive": "true", - "range_level": "1", - "attack_level": "136" - }, - { - "examine": "Champion of the jogres.", - "melee_animation": "5485", - "range_animation": "5493", - "poisonous": "", - "respawn_delay": "60", - "defence_animation": "5493", - "weakness": "9", - "magic_animation": "0", - "death_animation": "1444", - "name": "Skeleton Champion", - "defence_level": "54", - "safespot": null, - "lifepoints": "58", - "strength_level": "1", - "id": "3065", - "aggressive": "true", - "range_level": "36", - "attack_level": "1" - }, - { - "examine": "Champion of the zombies.", - "melee_animation": "5581", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5575", - "name": "Zombies Champion", - "defence_level": "26", - "safespot": null, - "lifepoints": "37", - "strength_level": "26", - "id": "3066", - "aggressive": "true", - "range_level": "1", - "attack_level": "26" - }, - { - "melee_animation": "7049", - "respawn_delay": "60", - "defence_animation": "7050", - "death_animation": "836", - "name": "Leon d'Cour", - "defence_level": "1", - "safespot": null, - "lifepoints": "123", - "strength_level": "1", - "id": "3067", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very dangerous pile of animated Wyvern bones.", - "start_gfx": "499", - "melee_animation": "2985", - "attack_speed": "6", - "weakness": "9", - "slayer_exp": "210", - "magic_animation": "2985", - "death_animation": "2987", - "lifepoints": "200", - "id": "3068", - "aggressive": "true", - "bonuses": "0,0,0,0,0,140,90,90,80,140,0,0,0,0,0", - "agg_radius": "6", - "range_animation": "2989", - "combat_audio": "0,771,770", - "magic_level": "125", - "end_gfx": "501", - "defence_animation": "2983", - "name": "Skeletal Wyvern", - "defence_level": "120", - "safespot": null, - "strength_level": "116", - "clue_level": "2", - "range_level": "120", - "projectile": "500", - "attack_level": "125" - }, - { - "examine": "A very dangerous pile of animated Wyvern bones.", - "start_gfx": "499", - "melee_animation": "2985", - "attack_speed": "6", - "weakness": "9", - "slayer_exp": "210", - "magic_animation": "2985", - "death_animation": "2987", - "lifepoints": "200", - "id": "3069", - "aggressive": "true", - "bonuses": "0,0,0,0,0,140,90,90,80,140,0,0,0,0,0", - "agg_radius": "6", - "range_animation": "2989", - "combat_audio": "0,771,770", - "magic_level": "125", - "end_gfx": "501", - "defence_animation": "2983", - "name": "Skeletal Wyvern", - "defence_level": "120", - "safespot": null, - "strength_level": "116", - "clue_level": "2", - "range_level": "120", - "projectile": "500", - "attack_level": "125" - }, - { - "examine": "A very dangerous pile of animated Wyvern bones.", - "start_gfx": "499", - "melee_animation": "2985", - "attack_speed": "6", - "weakness": "9", - "slayer_exp": "210", - "magic_animation": "2985", - "death_animation": "2987", - "lifepoints": "200", - "id": "3070", - "aggressive": "true", - "bonuses": "0,0,0,0,0,140,90,90,80,140,0,0,0,0,0", - "agg_radius": "6", - "range_animation": "2989", - "combat_audio": "0,771,770", - "magic_level": "125", - "end_gfx": "501", - "defence_animation": "2983", - "name": "Skeletal Wyvern", - "defence_level": "120", - "safespot": null, - "strength_level": "116", - "clue_level": "2", - "range_level": "120", - "projectile": "500", - "attack_level": "125" - }, - { - "examine": "A very dangerous pile of animated Wyvern bones.", - "start_gfx": "499", - "melee_animation": "2985", - "attack_speed": "6", - "weakness": "9", - "slayer_exp": "210", - "magic_animation": "2985", - "death_animation": "2987", - "lifepoints": "200", - "id": "3071", - "aggressive": "true", - "bonuses": "0,0,0,0,0,140,90,90,80,140,0,0,0,0,0", - "agg_radius": "6", - "range_animation": "2989", - "combat_audio": "0,771,770", - "magic_level": "125", - "end_gfx": "501", - "defence_animation": "2983", - "name": "Skeletal Wyvern", - "defence_level": "120", - "safespot": null, - "strength_level": "116", - "clue_level": "2", - "range_level": "120", - "projectile": "500", - "attack_level": "125" - }, - { - "examine": "He's got icicles in his beard.", - "melee_animation": "4672", - "range_animation": "0", - "combat_audio": "448,451,450", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "70", - "magic_animation": "0", - "death_animation": "4673", - "name": "Ice giant", - "defence_level": "40", - "safespot": null, - "lifepoints": "70", - "strength_level": "40", - "id": "3072", - "aggressive": "true", - "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "A cold-hearted elemental warrior.", - "melee_animation": "451", - "range_animation": "451", - "combat_audio": "2500,530,529", - "attack_speed": "4", - "respawn_delay": "30", - "defence_animation": "404", - "weakness": "9", - "slayer_exp": "59", - "magic_animation": "451", - "death_animation": "843", - "name": "Ice warrior", - "defence_level": "47", - "safespot": null, - "lifepoints": "59", - "strength_level": "47", - "id": "3073", - "aggressive": "true", - "bonuses": "0,0,0,0,0,30,40,20,10,30,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "47" - }, - { - "name": "Monk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "3074", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "3075", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "3079", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "3080", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "3089", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A mighty warrior", - "melee_animation": "7048", - "range_animation": "0", - "combat_audio": "511,513,512", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "", - "defence_level": "17", - "safespot": null, - "lifepoints": "24", - "strength_level": "17", - "id": "3090", - "aggressive": "true", - "range_level": "1", - "attack_level": "17" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "3091", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The book moves by itself!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Flying Book", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3094", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guardian of the arena.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Entrance Guardian", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3097", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guardian of the arena.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Telekinetic Guardian", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3098", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guardian of the arena.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Alchemy Guardian", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3099", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guardian of the arena.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Enchantment Guardian", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3100", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guardian of the arena.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Graveyard Guardian", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3101", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guardian of the arena.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Maze Guardian", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3102", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guardian of the arena.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Rewards Guardian", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3103", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Equipment that moves by itself!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Charmed Warrior", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3104", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Equipment that moves by itself!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Charmed Warrior", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3105", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Equipment that moves by itself!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Charmed Warrior", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3106", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This guard looks rather drunk and has beer stains down his armour.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard Captain", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3109", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks after farming tools.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Balloon Animal", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3121", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I saw the witchdoctor", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Balloon Animal", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3122", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks like he's seen the inside of a few tombs.", - "melee_animation": "422", - "range_animation": "422", - "attack_speed": "5", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Simon Templeton", - "defence_level": "1", - "safespot": "0", - "lifepoints": "12", - "strength_level": "1", - "id": "3123", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It seems to be blocked.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Furnace grate", - "defence_level": "1", - "safespot": null, - "lifepoints": "0", - "strength_level": "1", - "id": "3135", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Knight", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "3150", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A swarm of bugs.", - "melee_animation": "1584", - "range_animation": "0", - "combat_audio": "2743,2745,2744", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "2", - "slayer_exp": "25", - "magic_animation": "0", - "death_animation": "1585", - "name": "Harpie Bug Swarm", - "defence_level": "32", - "safespot": null, - "lifepoints": "25", - "strength_level": "46", - "id": "3153", - "aggressive": "true", - "bonuses": "0,0,0,0,0,10,5,10,5,10,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "54" - }, - { - "examine": "Bill Teach the pirate.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bill Teach", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3155", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3167", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3168", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3169", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3170", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3171", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3172", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3173", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3174", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3175", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3176", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3177", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3178", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3179", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3180", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3181", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3182", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3183", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3184", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3185", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "3186", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "422", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "52", - "strength_level": "1", - "id": "3187", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Arghh matey!", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "20", - "defence_animation": "388", - "death_animation": "9055", - "name": "Pirate", - "defence_level": "40", - "safespot": null, - "lifepoints": "45", - "strength_level": "40", - "id": "3188", - "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Arghh matey!", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "20", - "defence_animation": "388", - "death_animation": "9055", - "name": "Pirate", - "defence_level": "40", - "safespot": null, - "lifepoints": "45", - "strength_level": "40", - "id": "3189", - "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Arghh matey!", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "20", - "defence_animation": "388", - "death_animation": "9055", - "name": "Pirate", - "defence_level": "40", - "safespot": null, - "lifepoints": "45", - "strength_level": "40", - "id": "3190", - "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Arghh matey!", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "20", - "defence_animation": "388", - "death_animation": "9055", - "name": "Pirate", - "defence_level": "40", - "safespot": null, - "lifepoints": "45", - "strength_level": "40", - "id": "3191", - "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Arghh matey!", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "20", - "defence_animation": "388", - "death_animation": "9055", - "name": "Pirate", - "defence_level": "40", - "safespot": null, - "lifepoints": "45", - "strength_level": "40", - "id": "3192", - "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Arghh matey!", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "20", - "defence_animation": "388", - "death_animation": "9055", - "name": "Pirate", - "defence_level": "40", - "safespot": null, - "lifepoints": "45", - "strength_level": "40", - "id": "3193", - "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Arghh matey!", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "20", - "defence_animation": "388", - "death_animation": "9055", - "name": "Pirate", - "defence_level": "40", - "safespot": null, - "lifepoints": "45", - "strength_level": "40", - "id": "3194", - "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Arghh matey!", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "20", - "defence_animation": "388", - "death_animation": "9055", - "name": "Pirate", - "defence_level": "40", - "safespot": null, - "lifepoints": "45", - "strength_level": "40", - "id": "3195", - "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", - "range_level": "1", - "attack_level": "40" - }, - { - "melee_animation": "400", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "52", - "strength_level": "1", - "id": "3196", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He can look after my money.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3198", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He can look after my money.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3199", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "pUre A cHaOs of crEatuRe!", - "start_gfx": "556", - "melee_animation": "3146", - "attack_speed": "5", - "respawn_delay": "100", - "weakness": "4", - "magic_animation": "5443", - "death_animation": "3147", - "lifepoints": "250", - "id": "3200", - "aggressive": "true", - "bonuses": "0,0,0,0,0,70,70,70,70,70,0,0,0,0,0", - "agg_radius": "16", - "range_animation": "5443", - "combat_audio": "345,351,347", - "magic_level": "270", - "end_gfx": "558", - "defence_animation": "3149", - "name": "Chaos Elemental", - "defence_level": "270", - "movement_radius": "30", - "safespot": "true", - "strength_level": "270", - "range_level": "270", - "projectile": "557", - "attack_level": "270" - }, - { - "slayer_exp": "51", - "name": "Killerwatt", - "defence_level": "1", - "safespot": null, - "lifepoints": "51", - "strength_level": "1", - "attack_speed": "3", - "id": "3201", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "slayer_exp": "51", - "name": "Killerwatt", - "defence_level": "1", - "safespot": null, - "lifepoints": "51", - "strength_level": "1", - "attack_speed": "3", - "id": "3202", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "A very small storm!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Storm Cloud", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3203", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very small storm!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Storm Cloud", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3204", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Loves mining.", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Dwarf", - "defence_level": "28", - "safespot": null, - "lifepoints": "40", - "strength_level": "28", - "id": "3219", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "Loves mining.", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Dwarf", - "defence_level": "32", - "safespot": null, - "lifepoints": "45", - "strength_level": "32", - "id": "3220", - "range_level": "1", - "attack_level": "32" - }, - { - "examine": "Loves mining.", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Dwarf", - "defence_level": "28", - "safespot": null, - "lifepoints": "40", - "strength_level": "28", - "id": "3221", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Man", - "defence_level": "3", - "safespot": null, - "lifepoints": "4", - "strength_level": "3", - "id": "3223", - "range_level": "1", - "attack_level": "3" - }, - { - "name": "Man", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "3224", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Gielinor's many citizens. He looks worried about something.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Man", - "defence_level": "3", - "safespot": null, - "lifepoints": "4", - "strength_level": "3", - "id": "3225", - "clue_level": "0", - "range_level": "1", - "attack_level": "3" - }, - { - "melee_animation": "422", - "combat_audio": "511,506,505", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Woman", - "defence_level": "1", - "safespot": null, - "lifepoints": "9", - "strength_level": "1", - "id": "3226", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Gielinor's many citizens.", - "name": "Woman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,506,505", - "strength_level": "1", - "id": "3227", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He tries to keep order around here.", - "melee_animation": "386", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "404", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "13", - "id": "3228", - "clue_level": "1", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "He tries to keep order around here.", - "melee_animation": "4230", - "range_animation": "2075", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "404", - "weakness": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "1", - "id": "3229", - "clue_level": "1", - "range_level": "13", - "attack_level": "1" - }, - { - "examine": "He tries to keep order around here.", - "melee_animation": "395", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "404", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "13", - "id": "3230", - "clue_level": "1", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "He tries to keep order around here.", - "melee_animation": "422", - "range_animation": "426", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "1", - "id": "3231", - "clue_level": "1", - "range_level": "13", - "attack_level": "1" - }, - { - "examine": "Keeping an eye out for threats to the city.", - "melee_animation": "422", - "range_animation": "426", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "1", - "id": "3232", - "clue_level": "1", - "range_level": "13", - "attack_level": "1" - }, - { - "examine": "Keeping an eye out for threats to the city.", - "melee_animation": "422", - "range_animation": "426", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "1", - "id": "3233", - "clue_level": "1", - "range_level": "13", - "attack_level": "1" - }, - { - "examine": "An old gardener.", - "melee_animation": "433", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Gardener", - "defence_level": "4", - "safespot": null, - "lifepoints": "5", - "strength_level": "4", - "id": "3234", - "range_level": "1", - "attack_level": "4" - }, - { - "examine": "He's learning a trade.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Apprentice workman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3235", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A busy workman", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Workman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3236", - "range_level": "1", - "attack_level": "1" - }, - { - "agg_radius": "", - "examine": "He looks a bit dodgy.", - "melee_animation": "422", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Cuffs", - "defence_level": "1", - "safespot": null, - "lifepoints": "7", - "strength_level": "1", - "id": "3237", - "range_level": "1", - "attack_level": "1" - }, - { - "agg_radius": "", - "examine": "Looks unpleasant.", - "melee_animation": "422", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Narf", - "defence_level": "1", - "safespot": null, - "lifepoints": "7", - "strength_level": "1", - "id": "3238", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems to be loitering.", - "melee_animation": "422", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Rusty", - "defence_level": "1", - "safespot": null, - "lifepoints": "7", - "strength_level": "1", - "id": "3239", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Untrustworthy.", - "melee_animation": "422", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Jeff", - "defence_level": "1", - "safespot": null, - "lifepoints": "7", - "strength_level": "1", - "id": "3240", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "395", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "404", - "death_animation": "836", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "3241", - "aggressive": "true", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A practicer of dark arts.", - "combat_style": "2", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "magic_level": "25", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "711", - "death_animation": "836", - "name": "Dark wizard", - "defence_level": "25", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "3242", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A practicer of dark arts.", - "combat_style": "2", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "magic_level": "27", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "711", - "death_animation": "836", - "name": "Dark wizard", - "defence_level": "27", - "safespot": null, - "lifepoints": "38", - "strength_level": "1", - "id": "3243", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A practicer of dark arts.", - "combat_style": "2", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "magic_level": "16", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "711", - "death_animation": "836", - "name": "Dark wizard", - "defence_level": "16", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "3244", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A practicer of dark arts.", - "combat_style": "2", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "magic_level": "16", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "711", - "death_animation": "836", - "name": "Dark wizard", - "defence_level": "16", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "3245", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Alberich, a fierce barbarian warrior.", - "melee_animation": "2067", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "3246", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Fafner, a tough barbarian warrior.", - "melee_animation": "7048", - "range_animation": "7048", - "attack_speed": "6", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "7048", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "22", - "safespot": null, - "lifepoints": "18", - "strength_level": "22", - "id": "3247", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Fasolt, a strong barbarian warrior.", - "melee_animation": "2067", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "3248", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Siegmund, a guard in the Barbarian Village.", - "melee_animation": "401", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "3249", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Siegfried, a young guard in the Barbarian Village.", - "melee_animation": "2067", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "3250", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Lydspor, a well-traveld barbarian warrior.", - "melee_animation": "7048", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "3251", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Hagen, a guard in the Barbarian Village.", - "melee_animation": "2067", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "3252", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Minarch, a barbarian who likes his beer.", - "melee_animation": "401", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "3253", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Wotan, a sturdy barbarian warrior.", - "melee_animation": "401", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "3255", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Acelin, a guard in the Barbarian Village.", - "melee_animation": "390", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "3256", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Adelino, a barbarian warrior with a big axe.", - "melee_animation": "2067", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "3257", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Adolpho, a barbarian warrior with a warhammer.", - "melee_animation": "401", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "3258", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Aitan, a barbarian archer.", - "melee_animation": "426", - "range_animation": "426", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "3259", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Brunnhilde, a fierce barbarian warrior.", - "melee_animation": "428", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "20", - "safespot": null, - "lifepoints": "28", - "strength_level": "20", - "id": "3260", - "clue_level": "0", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "Gutrune, a mighty barbarian warrior.", - "melee_animation": "428", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "20", - "safespot": null, - "lifepoints": "28", - "strength_level": "20", - "id": "3261", - "clue_level": "0", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "Edelschwarz, a barbarian warrior with a spear.", - "melee_animation": "428", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "20", - "safespot": null, - "lifepoints": "28", - "strength_level": "20", - "id": "3262", - "clue_level": "0", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "Sieglinde, a muscular barbarian warrior.", - "melee_animation": "428", - "range_animation": "428", - "attack_speed": "6", - "defence_animation": "404", - "weakness": "8", - "magic_animation": "428", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "22", - "safespot": null, - "lifepoints": "20", - "strength_level": "20", - "id": "3263", - "clue_level": "0", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "3264", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "3265", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "3266", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "470,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "3267", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A dwarven worker.", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Dwarf", - "defence_level": "10", - "safespot": null, - "lifepoints": "14", - "strength_level": "10", - "id": "3268", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A dwarven worker.", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Dwarf", - "defence_level": "10", - "safespot": null, - "lifepoints": "14", - "strength_level": "10", - "id": "3269", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A dwarven worker.", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Dwarf", - "defence_level": "10", - "safespot": null, - "lifepoints": "14", - "strength_level": "10", - "id": "3270", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A dwarven worker.", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Dwarf", - "defence_level": "10", - "safespot": null, - "lifepoints": "14", - "strength_level": "10", - "id": "3271", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A dwarven worker.", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Dwarf", - "defence_level": "10", - "safespot": null, - "lifepoints": "14", - "strength_level": "10", - "id": "3272", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A dwarven worker.", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Dwarf", - "defence_level": "10", - "safespot": null, - "lifepoints": "14", - "strength_level": "10", - "id": "3273", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A dwarven worker.", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Dwarf", - "defence_level": "10", - "safespot": null, - "lifepoints": "14", - "strength_level": "10", - "id": "3274", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A dwarven worker.", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Dwarf", - "defence_level": "10", - "safespot": null, - "lifepoints": "14", - "strength_level": "10", - "id": "3275", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A member of the Black Guard", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Black Guard", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "3276", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "A member of the Black Guard", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Black Guard", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "3277", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "A member of the Black Guard", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Black Guard", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "3278", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "A member of the Black Guard", - "melee_animation": "99", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "102", - "name": "Black Guard", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "3279", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "He looks busy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Engineering assistant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3280", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's building a cannon.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Engineer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3282", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Bushy tail!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squirrel", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3283", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A raccoon.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Raccoon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3286", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A raccoon.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Raccoon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3288", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She'll store my items for me.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "null", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3293", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A dwarf who looks after the mining guild.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "0", - "name": "Dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3294", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A dwarf who looks after the mining guild.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "0", - "name": "Dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3295", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A graceful bird.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Swan", - "defence_level": "1", - "safespot": null, - "water_npc": true, - "lifepoints": "10", - "strength_level": "1", - "id": "3296", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Keeps this magic area tidy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sweeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3298", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A master at gardening.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Martin the Master Gardener", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3299", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Manages the fairies.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Co-ordinator", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3302", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I'm gonna make him an offer he can't refuse.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fairy Godfather", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3304", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Guardian of the market gate.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gatekeeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3307", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Converts grass to beef.", - "melee_animation": "5849", - "range_animation": "5849", - "combat_audio": "369,371,370", - "attack_speed": "5", - "defence_animation": "5850", - "weakness": "8", - "slayer_exp": "8", - "magic_animation": "5849", - "death_animation": "5851", - "name": "Cow", - "defence_level": "1", - "safespot": null, - "lifepoints": "8", - "strength_level": "1", - "id": "3309", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "White and fluffy", - "name": "Sheep", - "id": "3310" - }, - { - "name": "Tanglefoot", - "defence_level": "1", - "safespot": null, - "lifepoints": "102", - "strength_level": "1", - "id": "3313", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "An animated shrub.", - "range_animation": "0", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "name": "Baby tanglefoot", - "defence_level": "41", - "safespot": null, - "lifepoints": "58", - "strength_level": "1", - "id": "3319", - "range_level": "41", - "attack_level": "1" - }, - { - "examine": "An aggressive bush.", - "range_animation": "0", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "name": "Baby tanglefoot", - "defence_level": "41", - "safespot": null, - "lifepoints": "58", - "strength_level": "1", - "id": "3320", - "range_level": "41", - "attack_level": "1" - }, - { - "examine": "Rather more tired than most.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Jeremy Clerksin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3327", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks a little green around the gills.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Barfy Bill", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3331", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's made of pure fire.", - "attack_speed": "6", - "magic_level": "300", - "respawn_delay": "25", - "name": "Cavemouth", - "defence_level": "500", - "safespot": null, - "lifepoints": "1000", - "strength_level": "1500", - "id": "3334", - "aggressive": "true", - "bonuses": "126,98,86,297,311,304,319,13,284,30,0,0,0,0,0", - "range_level": "300", - "attack_level": "200" - }, - { - "examine": "Holy Mole-y!", - "melee_animation": "3312", - "range_animation": "3312", - "combat_audio": "1642,1646,1645", - "attack_speed": "4", - "magic_level": "200", - "respawn_delay": "56", - "defence_animation": "3311", - "weakness": "7", - "magic_animation": "3312", - "death_animation": "3310", - "name": "Giant Mole", - "defence_level": "200", - "safespot": null, - "lifepoints": "200", - "strength_level": "200", - "id": "3340", - "bonuses": "0,0,0,0,0,60,80,100,80,60,0,0,0,0,0", - "range_level": "1", - "attack_level": "200" - }, - { - "examine": "I will call him, Mini Mole.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Baby Mole", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3341", - "aggressive": "false", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A fun guy. No wait, that's awful. Plus it doesn't even make sense.", - "melee_animation": "0", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fungi", - "defence_level": "1", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "3344", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A fun guy. No wait, that's awful. Plus it doesn't even make sense.", - "melee_animation": "2776", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "2775", - "death_animation": "2777", - "name": "Fungi", - "defence_level": "1", - "safespot": null, - "lifepoints": "75", - "strength_level": "1", - "id": "3345", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A bouncy fungus.", - "melee_animation": "2776", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "2777", - "name": "Zygomite", - "defence_level": "42", - "safespot": null, - "lifepoints": "60", - "strength_level": "1", - "id": "3346", - "range_level": "42", - "attack_level": "1" - }, - { - "examine": "Have a fungus.", - "melee_animation": "2776", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "2775", - "death_animation": "2777", - "name": "Zygomite", - "defence_level": "1", - "safespot": null, - "lifepoints": "75", - "strength_level": "1", - "id": "3347", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "7049", - "combat_audio": "511,513,512", - "attack_speed": "8", - "respawn_delay": "60", - "defence_animation": "7050", - "death_animation": "836", - "name": "White Knight", - "defence_level": "1", - "safespot": null, - "lifepoints": "53", - "strength_level": "1", - "id": "3348", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "7049", - "combat_audio": "511,513,512", - "attack_speed": "8", - "respawn_delay": "60", - "defence_animation": "7050", - "death_animation": "836", - "name": "White Knight", - "defence_level": "1", - "safespot": null, - "lifepoints": "53", - "strength_level": "1", - "id": "3349", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "7049", - "combat_audio": "511,513,512", - "attack_speed": "8", - "respawn_delay": "60", - "defence_animation": "7050", - "death_animation": "836", - "name": "White Knight", - "defence_level": "1", - "safespot": null, - "lifepoints": "53", - "strength_level": "1", - "id": "3350", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Evil Chicken", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "355,357,356", - "strength_level": "1", - "id": "3366", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Evil Chicken", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "355,357,356", - "strength_level": "1", - "id": "3367", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Evil Chicken", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "355,357,356", - "strength_level": "1", - "id": "3368", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Evil Chicken", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "355,357,356", - "strength_level": "1", - "id": "3369", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Evil Chicken", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "355,357,356", - "strength_level": "1", - "id": "3370", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Evil Chicken", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "355,357,356", - "strength_level": "1", - "id": "3371", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A fowl beast.", - "melee_animation": "2299", - "range_animation": "0", - "combat_audio": "355,357,356", - "magic_level": "55", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "2301", - "name": "Evil Chicken", - "defence_level": "55", - "safespot": null, - "lifepoints": "117", - "strength_level": "55", - "id": "3375", - "aggressive": "true", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "Young but still dangerous.", - "melee_animation": "25", - "range_animation": "25", - "combat_audio": "405,407,406", - "attack_speed": "5", - "magic_level": "40", - "respawn_delay": "32", - "defence_animation": "26", - "weakness": "3", - "slayer_exp": "0", - "magic_animation": "25", - "death_animation": "28", - "name": "Baby black dragon", - "defence_level": "42", - "safespot": null, - "lifepoints": "50", - "strength_level": "80", - "id": "3376", - "aggressive": "true", - "bonuses": "50,40,64,60,30,45,40,40,20,40,40,20,0,0,0", - "range_level": "1", - "attack_level": "80" - }, - { - "examine": "He seems to like wearing black.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Evil Dave", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3378", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Vermin from the underworld.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Hell-Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3382", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A shifty-looking character.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Pirate Pete", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3389", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks short and grumpy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "0", - "name": "Mountain Dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3390", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "General Wartface", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3391", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "General Bentnoze", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3392", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He provides new players with useful information.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Lumbridge Guide", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3393", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He seems to like wearing black.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Evil Dave", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3394", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Rutmir's assistant.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "null", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3404", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A small ice demon.", - "range_animation": "0", - "combat_audio": "531,533,532", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "name": "Icefiend", - "defence_level": "60", - "safespot": null, - "lifepoints": "171", - "strength_level": "60", - "id": "3406", - "aggressive": "true", - "clue_level": "0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "He tries to keep order around here.", - "melee_animation": "7218", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "7219", - "name": "Guard", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "3407", - "clue_level": "1", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He tries to keep order around here.", - "melee_animation": "583", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "7213", - "name": "Guard", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "3408", - "clue_level": "1", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "A sentient plant - ready", - "melee_animation": "7246", - "range_animation": "0", - "poisonous": "true", - "magic_level": "65", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "poison_amount": "35", - "magic_animation": "0", - "death_animation": "7249", - "name": "Wild jade vine", - "defence_level": "65", - "safespot": null, - "lifepoints": "185", - "strength_level": "65", - "id": "3409", - "aggressive": "true", - "range_level": "65", - "attack_level": "65" - }, - { - "examine": "A sentient plant - ready", - "melee_animation": "7246", - "range_animation": "0", - "poisonous": "true", - "magic_level": "65", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "poison_amount": "35", - "magic_animation": "0", - "death_animation": "7249", - "name": "Wild jade vine", - "defence_level": "65", - "safespot": null, - "lifepoints": "185", - "strength_level": "65", - "id": "3410", - "aggressive": "true", - "range_level": "65", - "attack_level": "65" - }, - { - "examine": "A sentient plant - ready", - "melee_animation": "7246", - "range_animation": "0", - "poisonous": "true", - "magic_level": "65", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "poison_amount": "35", - "magic_animation": "0", - "death_animation": "7249", - "name": "Wild jade vine", - "defence_level": "65", - "safespot": null, - "lifepoints": "185", - "strength_level": "65", - "id": "3411", - "aggressive": "true", - "range_level": "65", - "attack_level": "65" - }, - { - "examine": "A sentient plant - ready", - "melee_animation": "7246", - "range_animation": "0", - "poisonous": "true", - "magic_level": "65", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "poison_amount": "35", - "magic_animation": "0", - "death_animation": "7249", - "name": "Wild jade vine", - "defence_level": "65", - "safespot": null, - "lifepoints": "185", - "strength_level": "65", - "id": "3412", - "aggressive": "true", - "range_level": "65", - "attack_level": "65" - }, - { - "examine": "He's got funky socks, but he's still an ugly green creature.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Goblin Cook", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3413", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "More like a goblin cooked.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Goblin Cook", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3414", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Half way up the wall is maybe not a naturally tenable position for a goblin.", - "name": "Goblin Cook", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "3415", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He'll store my items for me.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Pirate Pete", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3416", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He'll store my items for me.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Pirate Pete", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3418", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Big, ugly, and smelly.", - "slayer_task": "64", - "melee_animation": "359", - "attack_speed": "7", - "respawn_delay": "60", - "defence_animation": "360", - "weakness": "8", - "death_animation": "361", - "name": "Ogre", - "defence_level": "27", - "safespot": null, - "lifepoints": "60", - "strength_level": "27", - "id": "3419", - "aggressive": "true", - "attack_level": "1" - }, - { - "examine": "An angry Ogre in a highly amusing hat.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mogre Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3420", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Nice claw!", - "melee_animation": "3428", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "3430", - "name": "Crab", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "3421", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Not the most beautiful fish in the sea.", - "melee_animation": "3433", - "range_animation": "0", - "combat_audio": "241,243,242", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "10", - "defence_animation": "3434", - "weakness": "9", - "magic_animation": "0", - "death_animation": "3435", - "name": "Mudskipper", - "defence_level": "26", - "safespot": null, - "lifepoints": "20", - "strength_level": "29", - "id": "3422", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "29" - }, - { - "examine": "Not the most beautiful fish in the sea.", - "melee_animation": "3433", - "combat_audio": "241,243,242", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "5", - "defence_animation": "3434", - "death_animation": "3435", - "name": "Mudskipper", - "defence_level": "29", - "safespot": null, - "lifepoints": "20", - "strength_level": "30", - "id": "3423", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "death_animation": "3430", - "name": "Crab", - "defence_level": "1", - "safespot": null, - "lifepoints": "18", - "melee_animation": "3428", - "strength_level": "1", - "id": "3424", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "3429" - }, - { - "examine": "A Red Fantail.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3425", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Red Fantail.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3426", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Red Fantail.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3427", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An Angel Fish.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3431", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An Angel Fish.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3432", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An Angel Fish.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3433", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Harlequin Fish.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3434", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Harlequin Fish.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3435", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Harlequin Fish.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3436", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Discus Fish.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3437", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Discus Fish.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3438", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Discus Fish.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3439", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A shoal of Neon Tetra.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3443", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A shoal of Neon Tetra.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3444", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A shoal of Neon Tetra.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3445", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Lumbridge Guide", - "defence_level": "1", - "safespot": null, - "lifepoints": "60", - "strength_level": "1", - "attack_speed": "7", - "id": "3449", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "null", - "defence_level": "1", - "safespot": null, - "lifepoints": "60", - "strength_level": "1", - "attack_speed": "7", - "id": "3450", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Lumbridge Guide", - "defence_level": "1", - "safespot": null, - "lifepoints": "60", - "strength_level": "1", - "attack_speed": "7", - "id": "3451", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "What restful music!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Skrach Uglogwee", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3463", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A large boisterous bird", - "melee_animation": "6800", - "range_animation": "0", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "6801", - "name": "Jubbly bird", - "defence_level": "8", - "safespot": null, - "lifepoints": "11", - "strength_level": "6", - "id": "3476", - "aggressive": "true", - "range_level": "8", - "attack_level": "6" - }, - { - "name": "King Awowogei", - "defence_level": "1", - "safespot": null, - "lifepoints": "328", - "strength_level": "1", - "id": "3478", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "A big snake.", - "melee_animation": "3538", - "range_animation": "0", - "combat_audio": "3609,3608,3610", - "poisonous": "true", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "3540", - "name": "Big Snake", - "defence_level": "46", - "safespot": null, - "lifepoints": "65", - "strength_level": "46", - "id": "3484", - "aggressive": "true", - "range_level": "1", - "attack_level": "46" - }, - { - "name": "Culinaromancer", - "defence_level": "1", - "safespot": null, - "lifepoints": "140", - "strength_level": "1", - "id": "3491", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "melee_animation": "3501", - "respawn_delay": "60", - "defence_animation": "3500", - "death_animation": "3503", - "name": "Agrith-Na-Na", - "defence_level": "1", - "safespot": null, - "lifepoints": "200", - "strength_level": "1", - "id": "3493", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "1750", - "respawn_delay": "60", - "defence_animation": "1751", - "death_animation": "1752", - "name": "Flambeed", - "defence_level": "1", - "safespot": null, - "lifepoints": "210", - "strength_level": "1", - "id": "3494", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "422", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Karamel", - "defence_level": "1", - "safespot": null, - "lifepoints": "240", - "strength_level": "1", - "id": "3495", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "3507", - "respawn_delay": "60", - "defence_animation": "3505", - "death_animation": "3510", - "name": "Dessourt", - "defence_level": "1", - "safespot": null, - "lifepoints": "140", - "strength_level": "1", - "id": "3496", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Deadly AND fruity!", - "melee_animation": "1341", - "range_animation": "0", - "magic_level": "65", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "1342", - "name": "Gelatinnoth Mother", - "defence_level": "65", - "safespot": null, - "lifepoints": "139", - "strength_level": "48", - "id": "3497", - "aggressive": "true", - "range_level": "1", - "attack_level": "48" - }, - { - "melee_animation": "1341", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Gelatinnoth Mother", - "defence_level": "1", - "safespot": null, - "lifepoints": "240", - "strength_level": "1", - "id": "3498", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "1341", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Gelatinnoth Mother", - "defence_level": "1", - "safespot": null, - "lifepoints": "240", - "strength_level": "1", - "id": "3499", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "1341", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Gelatinnoth Mother", - "defence_level": "1", - "safespot": null, - "lifepoints": "240", - "strength_level": "1", - "id": "3500", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "1341", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Gelatinnoth Mother", - "defence_level": "1", - "safespot": null, - "lifepoints": "240", - "strength_level": "1", - "id": "3501", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "1341", - "respawn_delay": "60", - "defence_animation": "1340", - "death_animation": "1342", - "name": "Gelatinnoth Mother", - "defence_level": "1", - "safespot": null, - "lifepoints": "240", - "strength_level": "1", - "id": "3502", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Chronicler and regaler of your piratical exploits.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sorin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3509", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An initiate juvenile vampyre.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Vampyre Juvinate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3514", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An initiate juvenile vampyre.", - "melee_animation": "5783", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "5798", - "name": "Vampyre Juvinate", - "defence_level": "45", - "safespot": null, - "lifepoints": "64", - "strength_level": "1", - "id": "3521", - "aggressive": "true", - "range_level": "45", - "attack_level": "1" - }, - { - "death_animation": "5798", - "name": "Vampyre Juvinate", - "defence_level": "1", - "safespot": null, - "lifepoints": "85", - "melee_animation": "5783", - "strength_level": "1", - "id": "3522", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "death_animation": "5798", - "name": "Vampyre Juvinate", - "defence_level": "1", - "safespot": null, - "lifepoints": "85", - "melee_animation": "5783", - "strength_level": "1", - "id": "3523", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "death_animation": "5798", - "name": "Vampyre Juvinate", - "defence_level": "1", - "safespot": null, - "lifepoints": "85", - "melee_animation": "5783", - "strength_level": "1", - "id": "3524", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "death_animation": "5798", - "name": "Vampyre Juvinate", - "defence_level": "1", - "safespot": null, - "lifepoints": "85", - "melee_animation": "5783", - "strength_level": "1", - "id": "3525", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "An initiate juvenile vampyre", - "melee_animation": "6016", - "range_animation": "0", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "6031", - "name": "Vampyre Juvinate", - "defence_level": "46", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "3526", - "range_level": "46", - "attack_level": "1" - }, - { - "examine": "A Juvinate vampyre", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "5798", - "name": "Held Vampyre Juvinate", - "defence_level": "45", - "safespot": null, - "lifepoints": "64", - "strength_level": "1", - "id": "3527", - "range_level": "45", - "attack_level": "1" - }, - { - "examine": "He looks really hungry!", - "melee_animation": "6276", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6781", - "name": "Vampyre Juvenile", - "defence_level": "40", - "safespot": null, - "lifepoints": "57", - "strength_level": "40", - "id": "3531", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "She looks really hungry!", - "melee_animation": "6276", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6781", - "name": "Vampyre Juvenile", - "defence_level": "40", - "safespot": null, - "lifepoints": "57", - "strength_level": "40", - "id": "3532", - "range_level": "1", - "attack_level": "40" - }, - { - "death_animation": "6781", - "name": "Vampyre Juvenile", - "defence_level": "1", - "safespot": null, - "lifepoints": "60", - "melee_animation": "6276", - "strength_level": "1", - "id": "3533", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "He looks really hungry!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6781", - "name": "Held Vampyre Juvenile", - "defence_level": "40", - "safespot": null, - "lifepoints": "57", - "strength_level": "40", - "id": "3534", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "An initiate juvenile vampyre", - "melee_animation": "6016", - "range_animation": "0", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "6031", - "name": "Juvinate", - "defence_level": "46", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "3577", - "range_level": "46", - "attack_level": "1" - }, - { - "examine": "Is it a sheep?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sheep", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3579", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "49", - "name": "Guard dog", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3582", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "164", - "combat_audio": "469,472,471", - "respawn_delay": "60", - "defence_animation": "163", - "death_animation": "167", - "name": "Hobgoblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "29", - "strength_level": "1", - "id": "3583", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "No spider could grow that big! It's unrealistic!", - "melee_animation": "5319", - "range_animation": "0", - "combat_audio": "537,539,538", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "5321", - "name": "Huge spider", - "defence_level": "72", - "safespot": null, - "lifepoints": "122", - "strength_level": "1", - "id": "3585", - "aggressive": "true", - "range_level": "72", - "attack_level": "1" - }, - { - "examine": "Good doggy...", - "melee_animation": "6562", - "range_animation": "0", - "combat_audio": "3717,3719,3718", - "attack_speed": "4", - "respawn_delay": "50", - "defence_animation": "0", - "weakness": "7", - "slayer_exp": "116", - "magic_animation": "0", - "death_animation": "6576", - "name": "Hellhound", - "defence_level": "102", - "safespot": null, - "lifepoints": "116", - "strength_level": "104", - "id": "3586", - "aggressive": "true", - "clue_level": "2", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "105" - }, - { - "examine": "Big, ugly, and smelly.", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "27", - "respawn_delay": "25", - "defence_animation": "360", - "magic_animation": "359", - "death_animation": "361", - "name": "Rantz", - "defence_level": "27", - "safespot": null, - "lifepoints": "60", - "strength_level": "27", - "id": "3587", - "aggressive": "true", - "bonuses": "15,15,10,20,40,15,50,50,50,20,50,58,0,0,0", - "range_level": "27", - "attack_level": "27" - }, - { - "examine": "Young but still dangerous.", - "melee_animation": "25", - "range_animation": "25", - "combat_audio": "405,407,406", - "attack_speed": "5", - "magic_level": "40", - "respawn_delay": "32", - "defence_animation": "26", - "weakness": "8", - "magic_animation": "25", - "death_animation": "28", - "name": "Baby red dragon", - "defence_level": "42", - "safespot": null, - "lifepoints": "50", - "strength_level": "40", - "id": "3588", - "aggressive": "true", - "bonuses": "20,10,10,20,40,40,20,40,40,20,0,0,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "I don't think insect repellent will work...", - "melee_animation": "6223", - "range_animation": "0", - "combat_audio": "567,569,568", - "attack_speed": "4", - "poisonous": "true", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "6227", - "weakness": "6", - "poison_amount": "20", - "magic_animation": "0", - "death_animation": "6228", - "name": "Kalphite Soldier", - "defence_level": "70", - "safespot": null, - "lifepoints": "90", - "strength_level": "70", - "id": "3589", - "aggressive": "true", - "bonuses": "0,0,0,0,0,25,25,5,50,50,0,0,0,0,0", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Its scales seem to be made of steel.", - "combat_audio": "408,410,409", - "magic_level": "72", - "respawn_delay": "35", - "weakness": "8", - "slayer_exp": "221", - "name": "Steel dragon", - "defence_level": "238", - "safespot": null, - "lifepoints": "210", - "strength_level": "229", - "id": "3590", - "aggressive": "true", - "bonuses": "56,42,104,51,212,115,232,302,331,21,264,100,100,40,0", - "clue_level": "2", - "range_level": "185", - "attack_level": "234" - }, - { - "examine": "A darkened horror from the ocean depths.", - "name": "Dagannoth", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3591", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Arrgh! Look at its pointy teeth!", - "range_animation": "0", - "combat_audio": "400,404,403", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "name": "Demon", - "defence_level": "75", - "safespot": null, - "lifepoints": "107", - "strength_level": "75", - "id": "3593", - "aggressive": "true", - "range_level": "1", - "attack_level": "75" - }, - { - "examine": "A large snake that thrives in swamps.", - "melee_animation": "3538", - "range_animation": "3538", - "combat_audio": "3609,3608,3610", - "attack_speed": "5", - "defence_animation": "3539", - "weakness": "0", - "magic_animation": "3538", - "death_animation": "3540", - "name": "Swamp snake", - "defence_level": "40", - "safespot": null, - "lifepoints": "121", - "strength_level": "33", - "id": "3599", - "bonuses": "10,10,10,10,10,10,1,10,6,10,6,4,0,0,0", - "range_level": "45", - "attack_level": "35" - }, - { - "examine": "A large snake that thrives in swamps.", - "melee_animation": "3538", - "range_animation": "3538", - "combat_audio": "3609,3608,3610", - "attack_speed": "5", - "defence_animation": "3539", - "magic_animation": "3538", - "death_animation": "3540", - "name": "Swamp snake", - "defence_level": "60", - "safespot": null, - "lifepoints": "121", - "strength_level": "50", - "id": "3600", - "bonuses": "10,10,10,10,10,10,1,10,6,10,6,4,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "A large snake that thrives in swamps.", - "melee_animation": "3538", - "range_animation": "3538", - "combat_audio": "3609,3608,3610", - "attack_speed": "5", - "defence_animation": "3539", - "weakness": "7", - "magic_animation": "3538", - "death_animation": "3540", - "name": "Swamp snake", - "defence_level": "40", - "safespot": null, - "lifepoints": "121", - "strength_level": "33", - "id": "3601", - "bonuses": "10,10,10,10,10,10,1,10,6,10,6,4,0,0,0", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "A large snake that thrives in swamps.", - "melee_animation": "3538", - "range_animation": "3538", - "combat_audio": "3609,3608,3610", - "attack_speed": "5", - "defence_animation": "3539", - "magic_animation": "3538", - "death_animation": "3540", - "name": "Swamp snake", - "defence_level": "40", - "safespot": null, - "lifepoints": "121", - "strength_level": "33", - "id": "3602", - "bonuses": "10,10,10,10,10,10,1,10,6,10,6,4,0,0,0", - "range_level": "1", - "attack_level": "35" - }, - { - "name": "Dead swamp snake", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "3609,3608,3610", - "strength_level": "1", - "id": "3603", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Dead swamp snake", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "3609,3608,3610", - "strength_level": "1", - "id": "3604", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Dead swamp snake", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "3609,3608,3610", - "strength_level": "1", - "id": "3605", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I'm glad I can't see the rest of it!", - "melee_animation": "3618", - "range_animation": "3618", - "magic_level": "80", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "3620", - "name": "Tentacle", - "defence_level": "60", - "safespot": null, - "lifepoints": "171", - "strength_level": "80", - "id": "3618", - "aggressive": "true", - "range_level": "80", - "attack_level": "80" - }, - { - "examine": "I'm glad I can't see the rest of it!", - "melee_animation": "3731", - "range_animation": "0", - "attack_speed": "10", - "magic_level": "80", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "3733", - "name": "Head", - "defence_level": "60", - "safespot": null, - "lifepoints": "171", - "strength_level": "85", - "id": "3619", - "aggressive": "true", - "range_level": "80", - "attack_level": "85" - }, - { - "melee_animation": "3731", - "attack_speed": "10", - "respawn_delay": "60", - "defence_animation": "3732", - "death_animation": "3733", - "name": "Head", - "defence_level": "1", - "safespot": null, - "lifepoints": "150", - "strength_level": "1", - "id": "3620", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "3622", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A high-ranking Vyrewatch", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fyiona Fray", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3634", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks a little on the cross side!", - "range_animation": "0", - "combat_audio": "297,299,298", - "melee_animation": "4927", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "4927", - "weakness": "9", - "magic_animation": "0", - "death_animation": "4929", - "name": "Angry bear", - "defence_level": "38", - "safespot": null, - "lifepoints": "35", - "strength_level": "41", - "id": "3645", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "He looks a little on the cross side!", - "melee_animation": "6376", - "range_animation": "0", - "combat_audio": "876,878,877", - "attack_speed": "4", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "6377", - "name": "Angry unicorn", - "defence_level": "38", - "safespot": null, - "lifepoints": "50", - "strength_level": "41", - "id": "3646", - "aggressive": "false", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "He looks a little on the cross side!", - "melee_animation": "4933", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "4934", - "weakness": "9", - "magic_animation": "0", - "death_animation": "4935", - "name": "Angry giant rat", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "3647", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He looks a little on the cross side!", - "melee_animation": "6185", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "6183", - "weakness": "9", - "magic_animation": "0", - "death_animation": "6182", - "name": "Angry goblin", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "3648", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "AHHHHH!", - "melee_animation": "3812", - "range_animation": "0", - "combat_audio": "297,299,298", - "attack_speed": "4", - "defence_animation": "3811", - "weakness": "", - "magic_animation": "0", - "death_animation": "3813", - "name": "Fear reaper", - "defence_level": "40", - "safespot": null, - "lifepoints": "25", - "strength_level": "41", - "id": "3649", - "range_level": "1", - "attack_level": "41" - }, - { - "examine": "What on Gielinor is that?!?", - "melee_animation": "3818", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "3821", - "name": "Confusion beast", - "defence_level": "28", - "safespot": null, - "lifepoints": "40", - "strength_level": "28", - "id": "3650", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A hopeless poor creature.", - "melee_animation": "3823", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "3827", - "name": "Hopeless creature", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "3655", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He looks a little on the cross side!", - "melee_animation": "6376", - "range_animation": "0", - "combat_audio": "876,878,877", - "attack_speed": "4", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "6377", - "name": "Angry unicorn", - "defence_level": "38", - "safespot": null, - "lifepoints": "50", - "strength_level": "41", - "id": "3661", - "aggressive": "false", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "He looks a little on the cross side!", - "combat_audio": "703,705,704", - "melee_animation": "4933", - "defence_animation": "4934", - "death_animation": "4935", - "name": "Angry giant rat", - "defence_level": "38", - "safespot": null, - "lifepoints": "50", - "strength_level": "41", - "id": "3662", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "He looks a little on the cross side!", - "melee_animation": "6185", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "6183", - "weakness": "9", - "magic_animation": "0", - "death_animation": "6182", - "name": "Angry goblin", - "defence_level": "38", - "safespot": null, - "lifepoints": "50", - "strength_level": "41", - "id": "3663", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "He looks a little on the cross side!", - "combat_audio": "297,299,298", - "melee_animation": "4927", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "4927", - "death_animation": "4929", - "name": "Angry bear", - "defence_level": "38", - "safespot": null, - "lifepoints": "10", - "strength_level": "41", - "id": "3664", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "AHHHHH!", - "melee_animation": "3812", - "combat_audio": "297,299,298", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "3811", - "death_animation": "3813", - "name": "Fear reaper", - "defence_level": "45", - "safespot": null, - "lifepoints": "57", - "strength_level": "48", - "id": "3665", - "bonuses": "", - "range_level": "1", - "attack_level": "45" - }, - { - "examine": "What on Gielinor is that?!?", - "melee_animation": "3818", - "combat_audio": "297,299,298", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "3820", - "death_animation": "3821", - "name": "Confusion beast", - "defence_level": "52", - "safespot": null, - "lifepoints": "64", - "strength_level": "55", - "id": "3666", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "52" - }, - { - "examine": "He looks a little on the cross side!", - "melee_animation": "3823", - "combat_audio": "297,299,298", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "0", - "death_animation": "3827", - "name": "Hopeless creature", - "defence_level": "59", - "safespot": null, - "lifepoints": "71", - "strength_level": "62", - "id": "3667", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "59" - }, - { - "examine": "That's a lot of bones on his back...", - "name": "Odd Old Man", - "id": "3670" - }, - { - "examine": "Freshly sheared.", - "melee_animation": "5341", - "range_animation": "0", - "combat_audio": "757,759,758", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5337", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5343", - "name": "Ram", - "defence_level": "1", - "safespot": null, - "lifepoints": "8", - "strength_level": "1", - "id": "3672", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "White and fluffy.", - "melee_animation": "5338", - "range_animation": "0", - "combat_audio": "757,759,758", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5337", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5336", - "name": "Ram", - "defence_level": "1", - "safespot": null, - "lifepoints": "8", - "strength_level": "1", - "id": "3673", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Sack", - "id": "3674" - }, - { - "examine": "If you see them circling, run.", - "melee_animation": "2019", - "range_animation": "0", - "combat_audio": "890,892,891", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "2024", - "weakness": "9", - "magic_animation": "0", - "death_animation": "2021", - "name": "Vulture", - "defence_level": "10", - "safespot": null, - "lifepoints": "10", - "strength_level": "40", - "id": "3675", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "If you see them circling, run.", - "melee_animation": "2025", - "combat_audio": "890,892,891", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "2024", - "death_animation": "2026", - "name": "Vulture", - "defence_level": "10", - "safespot": null, - "lifepoints": "10", - "strength_level": "40", - "id": "3676", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "A young boy handing out flyers.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ali the Leaflet Dropper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3680", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Ulfric", - "defence_level": "1", - "safespot": null, - "lifepoints": "60", - "melee_animation": "6118", - "strength_level": "1", - "id": "3706", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "Eww", - "melee_animation": "6117", - "range_animation": "0", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "50", - "magic_animation": "0", - "death_animation": "6115", - "name": "Brine rat", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "3707", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "A Wilderness fighter of massive repute.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Boulder", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3709", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An annoying flappy thing.", - "melee_animation": "4915", - "range_animation": "4915", - "combat_audio": "292,294,293", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "defence_animation": "4916", - "weakness": "4", - "slayer_exp": "8", - "magic_animation": "4915", - "death_animation": "4917", - "name": "Giant bat", - "defence_level": "22", - "safespot": null, - "lifepoints": "32", - "strength_level": "22", - "id": "3711", - "aggressive": "true", - "bonuses": "0,0,0,0,0,10,10,12,10,8,0,0,0,0,0", - "range_level": "1", - "attack_level": "12" - }, - { - "melee_animation": "395", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "3715", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "3726", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Don't burst its bubble!", - "melee_animation": "3891", - "range_animation": "3891", - "combat_audio": "809,811,810", - "magic_level": "5", - "respawn_delay": "120", - "defence_animation": "3890", - "weakness": "8", - "magic_animation": "3891", - "death_animation": "3888", - "name": "Splatter", - "defence_level": "20", - "safespot": null, - "lifepoints": "13", - "strength_level": "20", - "id": "3727", - "bonuses": "5,10,10,10,10,2,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "Don't burst its bubble!", - "melee_animation": "3891", - "range_animation": "3891", - "combat_audio": "809,811,810", - "magic_level": "10", - "respawn_delay": "120", - "defence_animation": "3890", - "magic_animation": "3891", - "death_animation": "3888", - "name": "Splatter", - "defence_level": "25", - "safespot": null, - "lifepoints": "23", - "strength_level": "25", - "id": "3728", - "bonuses": "10,15,15,15,15,5,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "Don't burst its bubble!", - "melee_animation": "3891", - "range_animation": "3891", - "combat_audio": "809,811,810", - "magic_level": "10", - "respawn_delay": "120", - "defence_animation": "3890", - "magic_animation": "3891", - "death_animation": "3888", - "name": "Splatter", - "defence_level": "30", - "safespot": null, - "lifepoints": "23", - "strength_level": "30", - "id": "3729", - "bonuses": "15,20,20,20,20,8,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Don't burst its bubble!", - "melee_animation": "3891", - "range_animation": "3891", - "combat_audio": "809,811,810", - "magic_level": "15", - "respawn_delay": "120", - "defence_animation": "3890", - "magic_animation": "3891", - "death_animation": "3888", - "name": "Splatter", - "defence_level": "35", - "safespot": null, - "lifepoints": "23", - "strength_level": "35", - "id": "3730", - "bonuses": "20,25,25,25,25,10,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Don't burst its bubble!", - "melee_animation": "3891", - "range_animation": "3891", - "combat_audio": "809,811,810", - "magic_level": "20", - "respawn_delay": "120", - "defence_animation": "3890", - "magic_animation": "3891", - "death_animation": "3888", - "name": "Splatter", - "defence_level": "40", - "safespot": null, - "lifepoints": "23", - "strength_level": "40", - "id": "3731", - "bonuses": "25,30,30,30,30,15,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Nippy little thing!", - "melee_animation": "3901", - "range_animation": "3901", - "combat_audio": "766,768,767", - "magic_level": "14", - "respawn_delay": "127", - "defence_animation": "3902", - "weakness": "9", - "magic_animation": "3901", - "death_animation": "3903", - "name": "Shifter", - "defence_level": "28", - "poison_immune": "true", - "safespot": null, - "lifepoints": "23", - "strength_level": "28", - "id": "3732", - "aggressive": "true", - "bonuses": "20,25,20,40,40,40,40,5,18,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "Nippy little thing!", - "melee_animation": "3901", - "range_animation": "3901", - "combat_audio": "766,768,767", - "magic_level": "14", - "respawn_delay": "127", - "defence_animation": "3902", - "magic_animation": "3901", - "death_animation": "3903", - "name": "Shifter", - "defence_level": "28", - "poison_immune": "true", - "safespot": null, - "lifepoints": "23", - "strength_level": "28", - "id": "3733", - "aggressive": "true", - "bonuses": "20,25,20,40,40,40,40,5,18,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "Nippy little thing!", - "melee_animation": "3901", - "range_animation": "3901", - "combat_audio": "766,768,767", - "magic_level": "20", - "respawn_delay": "127", - "defence_animation": "3902", - "magic_animation": "3901", - "death_animation": "3903", - "name": "Shifter", - "defence_level": "42", - "poison_immune": "true", - "safespot": null, - "lifepoints": "38", - "strength_level": "42", - "id": "3734", - "aggressive": "true", - "bonuses": "30,35,30,50,50,50,50,10,15,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "42" - }, - { - "examine": "Nippy little thing!", - "melee_animation": "3901", - "range_animation": "3901", - "combat_audio": "766,768,767", - "magic_level": "20", - "respawn_delay": "127", - "defence_animation": "3902", - "magic_animation": "3901", - "death_animation": "3903", - "name": "Shifter", - "defence_level": "42", - "poison_immune": "true", - "safespot": null, - "lifepoints": "38", - "strength_level": "42", - "id": "3735", - "aggressive": "true", - "bonuses": "30,35,30,50,50,50,50,10,15,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "42" - }, - { - "examine": "Nippy little thing!", - "melee_animation": "3901", - "range_animation": "3901", - "combat_audio": "766,768,767", - "magic_level": "25", - "respawn_delay": "127", - "defence_animation": "3902", - "magic_animation": "3901", - "death_animation": "3903", - "name": "Shifter", - "defence_level": "54", - "poison_immune": "true", - "safespot": null, - "lifepoints": "53", - "strength_level": "54", - "id": "3736", - "aggressive": "true", - "bonuses": "35,40,35,60,60,60,60,20,15,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "54" - }, - { - "examine": "Nippy little thing!", - "melee_animation": "3901", - "range_animation": "3901", - "combat_audio": "766,768,767", - "magic_level": "25", - "respawn_delay": "127", - "defence_animation": "3902", - "magic_animation": "3901", - "death_animation": "3903", - "name": "Shifter", - "defence_level": "54", - "poison_immune": "true", - "safespot": null, - "lifepoints": "53", - "strength_level": "54", - "id": "3737", - "aggressive": "true", - "bonuses": "35,40,35,60,60,60,60,20,15,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "54" - }, - { - "examine": "Nippy little thing!", - "melee_animation": "3901", - "range_animation": "3901", - "combat_audio": "766,768,767", - "magic_level": "30", - "respawn_delay": "127", - "defence_animation": "3902", - "magic_animation": "3901", - "death_animation": "3903", - "name": "Shifter", - "defence_level": "60", - "poison_immune": "true", - "safespot": null, - "lifepoints": "68", - "strength_level": "60", - "id": "3738", - "aggressive": "true", - "bonuses": "40,50,40,70,70,70,70,30,15,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Nippy little thing!", - "melee_animation": "3901", - "range_animation": "3901", - "combat_audio": "766,768,767", - "magic_level": "30", - "respawn_delay": "127", - "defence_animation": "3902", - "magic_animation": "3901", - "death_animation": "3903", - "name": "Shifter", - "defence_level": "60", - "poison_immune": "true", - "safespot": null, - "lifepoints": "68", - "strength_level": "60", - "id": "3739", - "aggressive": "true", - "bonuses": "40,50,40,70,70,70,70,30,15,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Nippy little thing!", - "melee_animation": "3901", - "range_animation": "3901", - "combat_audio": "766,768,767", - "magic_level": "35", - "respawn_delay": "127", - "defence_animation": "3902", - "magic_animation": "3901", - "death_animation": "3903", - "name": "Shifter", - "defence_level": "70", - "poison_immune": "true", - "safespot": null, - "lifepoints": "83", - "strength_level": "70", - "id": "3740", - "aggressive": "true", - "bonuses": "50,60,50,80,70,90,80,35,14,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Nippy little thing!", - "melee_animation": "3901", - "range_animation": "3901", - "combat_audio": "766,768,767", - "magic_level": "35", - "respawn_delay": "127", - "defence_animation": "3902", - "magic_animation": "3901", - "death_animation": "3903", - "name": "Shifter", - "defence_level": "70", - "poison_immune": "true", - "safespot": null, - "lifepoints": "83", - "strength_level": "70", - "id": "3741", - "aggressive": "true", - "bonuses": "50,60,50,80,70,90,80,35,14,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Worse than termites!", - "melee_animation": "3915", - "range_animation": "3915", - "combat_audio": "714,716,715", - "attack_speed": "5", - "magic_level": "10", - "respawn_delay": "120", - "defence_animation": "3916", - "weakness": "7", - "magic_animation": "3915", - "death_animation": "3917", - "name": "Ravager", - "defence_level": "15", - "safespot": null, - "lifepoints": "23", - "strength_level": "30", - "id": "3742", - "bonuses": "45,45,45,45,50,5,45,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "15" - }, - { - "examine": "Worse than termites!", - "melee_animation": "3915", - "range_animation": "3915", - "combat_audio": "714,716,715", - "attack_speed": "5", - "magic_level": "15", - "respawn_delay": "120", - "defence_animation": "3916", - "magic_animation": "3915", - "death_animation": "3917", - "name": "Ravager", - "defence_level": "20", - "safespot": null, - "lifepoints": "38", - "strength_level": "40", - "id": "3743", - "bonuses": "45,45,45,45,50,5,55,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "Worse than termites!", - "melee_animation": "3915", - "range_animation": "3915", - "combat_audio": "714,716,715", - "attack_speed": "5", - "magic_level": "20", - "respawn_delay": "120", - "defence_animation": "3916", - "magic_animation": "3915", - "death_animation": "3917", - "name": "Ravager", - "defence_level": "30", - "safespot": null, - "lifepoints": "53", - "strength_level": "60", - "id": "3744", - "bonuses": "45,55,55,55,50,10,45,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Worse than termites!", - "melee_animation": "3915", - "range_animation": "3915", - "combat_audio": "714,716,715", - "attack_speed": "5", - "magic_level": "30", - "respawn_delay": "120", - "defence_animation": "3916", - "magic_animation": "3915", - "death_animation": "3917", - "name": "Ravager", - "defence_level": "45", - "safespot": null, - "lifepoints": "53", - "strength_level": "75", - "id": "3745", - "bonuses": "60,60,60,60,80,10,45,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "45" - }, - { - "examine": "Worse than termites!", - "melee_animation": "3915", - "range_animation": "3915", - "combat_audio": "714,716,715", - "attack_speed": "5", - "magic_level": "40", - "respawn_delay": "120", - "defence_animation": "3916", - "magic_animation": "3915", - "death_animation": "3917", - "name": "Ravager", - "defence_level": "60", - "safespot": null, - "lifepoints": "53", - "strength_level": "80", - "id": "3746", - "bonuses": "65,70,70,70,90,20,56,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Eeewww!", - "melee_animation": "3908", - "range_animation": "3908", - "combat_audio": "805,807,806", - "magic_level": "10", - "respawn_delay": "125", - "defence_animation": "3909", - "weakness": "6", - "magic_animation": "3908", - "death_animation": "3910", - "name": "Spinner", - "defence_level": "20", - "safespot": null, - "lifepoints": "33", - "strength_level": "20", - "id": "3747", - "bonuses": "20,40,40,40,40,10,38,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "Eeewww!", - "melee_animation": "3908", - "range_animation": "3908", - "combat_audio": "805,807,806", - "magic_level": "15", - "respawn_delay": "125", - "defence_animation": "3909", - "magic_animation": "3908", - "death_animation": "3910", - "name": "Spinner", - "defence_level": "30", - "safespot": null, - "lifepoints": "50", - "strength_level": "30", - "id": "3748", - "bonuses": "30,60,60,60,60,15,38,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Eeewww!", - "melee_animation": "3908", - "range_animation": "3908", - "combat_audio": "805,807,806", - "magic_level": "20", - "respawn_delay": "125", - "defence_animation": "3909", - "magic_animation": "3908", - "death_animation": "3910", - "name": "Spinner", - "defence_level": "40", - "safespot": null, - "lifepoints": "67", - "strength_level": "40", - "id": "3749", - "bonuses": "50,70,70,70,70,20,38,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Eeewww!", - "melee_animation": "3908", - "range_animation": "3908", - "combat_audio": "805,807,806", - "magic_level": "30", - "respawn_delay": "125", - "defence_animation": "3909", - "magic_animation": "3908", - "death_animation": "3910", - "name": "Spinner", - "defence_level": "60", - "safespot": null, - "lifepoints": "101", - "strength_level": "60", - "id": "3750", - "bonuses": "60,100,100,100,100,30,25,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Eeewww!", - "melee_animation": "3908", - "range_animation": "3908", - "combat_audio": "805,807,806", - "magic_level": "25", - "respawn_delay": "125", - "defence_animation": "3909", - "magic_animation": "3908", - "death_animation": "3910", - "name": "Spinner", - "defence_level": "50", - "safespot": null, - "lifepoints": "84", - "strength_level": "50", - "id": "3751", - "bonuses": "55,80,80,80,85,25,30,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "Burn, baby, burn!", - "start_gfx": "646", - "combat_style": "2", - "melee_animation": "3882", - "range_animation": "3882", - "combat_audio": "845,848,846", - "magic_level": "25", - "respawn_delay": "120", - "end_gfx": "648", - "defence_animation": "3880", - "weakness": "5", - "magic_animation": "3882", - "death_animation": "3881", - "name": "Torcher", - "defence_level": "25", - "safespot": null, - "lifepoints": "18", - "strength_level": "1", - "id": "3752", - "aggressive": "true", - "bonuses": "30,30,30,30,15,30,40,0,0,0,0,0,0,0,0", - "range_level": "1", - "projectile": "647", - "attack_level": "1" - }, - { - "examine": "Burn, baby, burn!", - "start_gfx": "646", - "combat_style": "2", - "melee_animation": "3882", - "range_animation": "3882", - "combat_audio": "845,848,846", - "magic_level": "25", - "respawn_delay": "120", - "end_gfx": "648", - "defence_animation": "3880", - "magic_animation": "3882", - "death_animation": "3881", - "name": "Torcher", - "defence_level": "25", - "safespot": null, - "lifepoints": "18", - "strength_level": "1", - "id": "3753", - "aggressive": "true", - "bonuses": "30,30,30,30,15,30,40,0,0,0,0,0,0,0,0", - "range_level": "1", - "projectile": "647", - "attack_level": "1" - }, - { - "examine": "Burn, baby, burn!", - "start_gfx": "646", - "combat_style": "2", - "melee_animation": "3882", - "range_animation": "3882", - "combat_audio": "845,848,846", - "magic_level": "40", - "respawn_delay": "120", - "end_gfx": "648", - "defence_animation": "3880", - "magic_animation": "3882", - "death_animation": "3881", - "name": "Torcher", - "defence_level": "40", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "3754", - "aggressive": "true", - "bonuses": "45,40,40,40,25,35,35,0,0,0,0,0,0,0,0", - "range_level": "1", - "projectile": "647", - "attack_level": "1" - }, - { - "examine": "Burn, baby, burn!", - "start_gfx": "646", - "combat_style": "2", - "melee_animation": "3882", - "range_animation": "3882", - "combat_audio": "845,848,846", - "magic_level": "40", - "respawn_delay": "120", - "end_gfx": "648", - "defence_animation": "3880", - "magic_animation": "3882", - "death_animation": "3881", - "name": "Torcher", - "defence_level": "40", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "3755", - "aggressive": "true", - "bonuses": "45,40,40,40,25,35,35,0,0,0,0,0,0,0,0", - "range_level": "1", - "projectile": "647", - "attack_level": "1" - }, - { - "examine": "Burn, baby, burn!", - "start_gfx": "646", - "combat_style": "2", - "melee_animation": "3882", - "range_animation": "3882", - "combat_audio": "845,848,846", - "magic_level": "50", - "respawn_delay": "120", - "end_gfx": "648", - "defence_animation": "3880", - "magic_animation": "3882", - "death_animation": "3881", - "name": "Torcher", - "defence_level": "50", - "safespot": null, - "lifepoints": "42", - "strength_level": "1", - "id": "3756", - "aggressive": "true", - "bonuses": "35,40,40,40,30,35,35,0,0,0,0,0,0,0,0", - "range_level": "1", - "projectile": "647", - "attack_level": "1" - }, - { - "examine": "Burn, baby, burn!", - "start_gfx": "646", - "combat_style": "2", - "melee_animation": "3882", - "range_animation": "3882", - "combat_audio": "845,848,846", - "magic_level": "50", - "respawn_delay": "120", - "end_gfx": "648", - "defence_animation": "3880", - "magic_animation": "3882", - "death_animation": "3881", - "name": "Torcher", - "defence_level": "50", - "safespot": null, - "lifepoints": "42", - "strength_level": "1", - "id": "3757", - "aggressive": "true", - "bonuses": "35,40,40,40,30,35,35,0,0,0,0,0,0,0,0", - "range_level": "1", - "projectile": "647", - "attack_level": "1" - }, - { - "examine": "Burn, baby, burn!", - "start_gfx": "646", - "combat_style": "2", - "melee_animation": "3882", - "range_animation": "3882", - "combat_audio": "845,848,846", - "magic_level": "60", - "respawn_delay": "120", - "end_gfx": "648", - "defence_animation": "3880", - "magic_animation": "3882", - "death_animation": "3881", - "name": "Torcher", - "defence_level": "60", - "safespot": null, - "lifepoints": "51", - "strength_level": "1", - "id": "3758", - "aggressive": "true", - "bonuses": "60,80,80,80,50,50,35,0,0,0,0,0,0,0,0", - "range_level": "1", - "projectile": "647", - "attack_level": "1" - }, - { - "examine": "Burn, baby, burn!", - "start_gfx": "646", - "combat_style": "2", - "melee_animation": "3882", - "range_animation": "3882", - "combat_audio": "845,848,846", - "magic_level": "60", - "respawn_delay": "120", - "end_gfx": "648", - "defence_animation": "3880", - "magic_animation": "3882", - "death_animation": "3881", - "name": "Torcher", - "defence_level": "60", - "safespot": null, - "lifepoints": "51", - "strength_level": "1", - "id": "3759", - "aggressive": "true", - "bonuses": "60,80,80,80,50,50,35,0,0,0,0,0,0,0,0", - "range_level": "1", - "projectile": "647", - "attack_level": "1" - }, - { - "examine": "Burn, baby, burn!", - "start_gfx": "646", - "combat_style": "2", - "melee_animation": "3882", - "range_animation": "3882", - "combat_audio": "845,848,846", - "magic_level": "70", - "respawn_delay": "120", - "end_gfx": "648", - "defence_animation": "3880", - "magic_animation": "3882", - "death_animation": "3881", - "name": "Torcher", - "defence_level": "70", - "safespot": null, - "lifepoints": "62", - "strength_level": "1", - "id": "3760", - "aggressive": "true", - "bonuses": "40,100,100,100,50,50,35,0,0,0,0,0,0,0,0", - "range_level": "1", - "projectile": "647", - "attack_level": "1" - }, - { - "examine": "Burn, baby, burn!", - "start_gfx": "646", - "combat_style": "2", - "melee_animation": "3882", - "range_animation": "3882", - "combat_audio": "845,848,846", - "magic_level": "70", - "respawn_delay": "120", - "end_gfx": "648", - "defence_animation": "3880", - "magic_animation": "3882", - "death_animation": "3881", - "name": "Torcher", - "defence_level": "70", - "safespot": null, - "lifepoints": "62", - "strength_level": "1", - "id": "3761", - "aggressive": "true", - "bonuses": "40,100,100,100,50,50,35,0,0,0,0,0,0,0,0", - "range_level": "1", - "projectile": "647", - "attack_level": "1" - }, - { - "examine": "Duck!", - "start_gfx": "657", - "combat_style": "1", - "melee_animation": "3920", - "range_animation": "3920", - "combat_audio": "392,394,393", - "magic_level": "30", - "respawn_delay": "120", - "defence_animation": "3921", - "weakness": "0", - "magic_animation": "3920", - "death_animation": "3922", - "name": "Defiler", - "defence_level": "25", - "safespot": null, - "lifepoints": "27", - "strength_level": "1", - "id": "3762", - "aggressive": "true", - "bonuses": "20,40,40,40,40,40,40,40,0,0,0,0,0,0,0", - "range_level": "25", - "projectile": "657", - "attack_level": "1" - }, - { - "examine": "Duck!", - "combat_style": "1", - "melee_animation": "3920", - "range_animation": "3920", - "combat_audio": "392,394,393", - "magic_level": "30", - "respawn_delay": "120", - "defence_animation": "3921", - "magic_animation": "3920", - "death_animation": "3922", - "name": "Defiler", - "defence_level": "25", - "safespot": null, - "lifepoints": "27", - "strength_level": "1", - "id": "3763", - "aggressive": "true", - "bonuses": "20,40,40,40,40,40,40,40,0,0,0,0,0,0,0", - "range_level": "25", - "projectile": "657", - "attack_level": "1" - }, - { - "examine": "Duck!", - "start_gfx": "657", - "combat_style": "1", - "melee_animation": "3920", - "range_animation": "3920", - "combat_audio": "392,394,393", - "magic_level": "40", - "respawn_delay": "120", - "defence_animation": "3921", - "magic_animation": "3920", - "death_animation": "3922", - "name": "Defiler", - "defence_level": "40", - "safespot": null, - "lifepoints": "45", - "strength_level": "1", - "id": "3764", - "aggressive": "true", - "bonuses": "30,50,60,60,60,60,40,40,0,0,0,0,0,0,0", - "range_level": "40", - "projectile": "657", - "attack_level": "1" - }, - { - "examine": "Duck!", - "combat_style": "1", - "melee_animation": "3920", - "range_animation": "3920", - "combat_audio": "392,394,393", - "magic_level": "40", - "respawn_delay": "120", - "defence_animation": "3921", - "magic_animation": "3920", - "death_animation": "3922", - "name": "Defiler", - "defence_level": "40", - "safespot": null, - "lifepoints": "45", - "strength_level": "1", - "id": "3765", - "aggressive": "true", - "bonuses": "30,40,60,60,60,60,40,40,0,0,0,0,0,0,0", - "range_level": "40", - "projectile": "657", - "attack_level": "1" - }, - { - "examine": "Duck!", - "start_gfx": "657", - "combat_style": "1", - "melee_animation": "3920", - "range_animation": "3920", - "combat_audio": "392,394,393", - "magic_level": "50", - "respawn_delay": "120", - "defence_animation": "3921", - "magic_animation": "3920", - "death_animation": "3922", - "name": "Defiler", - "defence_level": "50", - "safespot": null, - "lifepoints": "62", - "strength_level": "1", - "id": "3766", - "aggressive": "true", - "bonuses": "35,65,70,70,70,70,40,40,0,0,0,0,0,0,0", - "range_level": "50", - "projectile": "657", - "attack_level": "1" - }, - { - "examine": "Duck!", - "combat_style": "1", - "melee_animation": "3920", - "range_animation": "3920", - "combat_audio": "392,394,393", - "magic_level": "50", - "respawn_delay": "120", - "defence_animation": "3921", - "magic_animation": "3920", - "death_animation": "3922", - "name": "Defiler", - "defence_level": "50", - "safespot": null, - "lifepoints": "62", - "strength_level": "1", - "id": "3767", - "aggressive": "true", - "bonuses": "35,65,70,70,70,70,40,40,0,0,0,0,0,0,0", - "range_level": "50", - "projectile": "657", - "attack_level": "1" - }, - { - "examine": "Duck!", - "start_gfx": "657", - "combat_style": "1", - "melee_animation": "3920", - "range_animation": "3920", - "combat_audio": "392,394,393", - "magic_level": "60", - "respawn_delay": "120", - "defence_animation": "3921", - "magic_animation": "3920", - "death_animation": "3922", - "name": "Defiler", - "defence_level": "60", - "safespot": null, - "lifepoints": "78", - "strength_level": "1", - "id": "3768", - "aggressive": "true", - "bonuses": "40,90,80,80,80,80,40,40,0,0,0,0,0,0,0", - "range_level": "60", - "projectile": "657", - "attack_level": "1" - }, - { - "examine": "Duck!", - "combat_style": "1", - "melee_animation": "3920", - "range_animation": "3920", - "combat_audio": "392,394,393", - "magic_level": "60", - "respawn_delay": "120", - "defence_animation": "3921", - "magic_animation": "3920", - "death_animation": "3922", - "name": "Defiler", - "defence_level": "60", - "safespot": null, - "lifepoints": "78", - "strength_level": "1", - "id": "3769", - "aggressive": "true", - "bonuses": "40,90,80,80,80,80,40,40,0,0,0,0,0,0,0", - "range_level": "60", - "projectile": "657", - "attack_level": "1" - }, - { - "examine": "Duck!", - "start_gfx": "657", - "combat_style": "1", - "melee_animation": "3920", - "range_animation": "3920", - "combat_audio": "392,394,393", - "magic_level": "70", - "respawn_delay": "120", - "defence_animation": "3921", - "magic_animation": "3920", - "death_animation": "3922", - "name": "Defiler", - "defence_level": "70", - "safespot": null, - "lifepoints": "97", - "strength_level": "1", - "id": "3770", - "aggressive": "true", - "bonuses": "50,100,100,100,120,100,40,40,80,0,0,0,0,0,0", - "range_level": "70", - "projectile": "657", - "attack_level": "1" - }, - { - "examine": "Duck!", - "combat_style": "1", - "melee_animation": "3920", - "range_animation": "3920", - "combat_audio": "392,394,393", - "magic_level": "70", - "respawn_delay": "120", - "defence_animation": "3921", - "magic_animation": "3920", - "death_animation": "3922", - "name": "Defiler", - "defence_level": "70", - "safespot": null, - "lifepoints": "97", - "strength_level": "1", - "id": "3771", - "aggressive": "true", - "bonuses": "50,100,100,100,120,100,40,40,80,0,0,0,0,0,0", - "range_level": "70", - "projectile": "657", - "attack_level": "1" - }, - { - "examine": "Mind your toes!", - "melee_animation": "3896", - "range_animation": "3896", - "combat_audio": "323,326,325", - "magic_level": "14", - "respawn_delay": "120", - "defence_animation": "3895", - "weakness": "9", - "magic_animation": "3896", - "death_animation": "3894", - "name": "Brawler", - "defence_level": "28", - "safespot": null, - "lifepoints": "53", - "strength_level": "28", - "id": "3772", - "aggressive": "true", - "bonuses": "45,45,50,50,50,50,50,15,50,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "Mind your toes!", - "melee_animation": "3896", - "range_animation": "3896", - "combat_audio": "323,326,325", - "magic_level": "21", - "respawn_delay": "120", - "defence_animation": "3895", - "magic_animation": "3896", - "death_animation": "3894", - "name": "Brawler", - "defence_level": "42", - "safespot": null, - "lifepoints": "83", - "strength_level": "42", - "id": "3773", - "aggressive": "true", - "bonuses": "45,45,60,50,50,50,50,15,50,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "42" - }, - { - "examine": "Mind your toes!", - "melee_animation": "3896", - "range_animation": "3896", - "combat_audio": "323,326,325", - "magic_level": "32", - "respawn_delay": "120", - "defence_animation": "3895", - "magic_animation": "3896", - "death_animation": "3894", - "name": "Brawler", - "defence_level": "56", - "safespot": null, - "lifepoints": "113", - "strength_level": "56", - "id": "3774", - "aggressive": "true", - "bonuses": "45,45,60,80,80,80,80,25,50,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "56" - }, - { - "examine": "Mind your toes!", - "melee_animation": "3896", - "range_animation": "3896", - "combat_audio": "323,326,325", - "magic_level": "38", - "respawn_delay": "120", - "defence_animation": "3895", - "magic_animation": "3896", - "death_animation": "3894", - "name": "Brawler", - "defence_level": "74", - "safespot": null, - "lifepoints": "143", - "strength_level": "74", - "id": "3775", - "aggressive": "true", - "bonuses": "45,45,60,60,60,60,60,20,50,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "74" - }, - { - "examine": "Mind your toes!", - "melee_animation": "3896", - "range_animation": "3896", - "combat_audio": "323,326,325", - "magic_level": "45", - "respawn_delay": "120", - "defence_animation": "3895", - "magic_animation": "3896", - "death_animation": "3894", - "name": "Brawler", - "defence_level": "88", - "safespot": null, - "lifepoints": "173", - "strength_level": "88", - "id": "3776", - "aggressive": "true", - "bonuses": "45,45,80,100,100,100,100,30,46,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "88" - }, - { - "examine": "Cheerful, helpful and optimistic, I'll bet.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Doomsayer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3777", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "attack_speed": "5", - "magic_level": "80", - "respawn_delay": "120", - "name": "Void Knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "200", - "strength_level": "1", - "id": "3782", - "bonuses": "180,180,180,180,80,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Long legged licker.", - "melee_animation": "7260", - "range_animation": "0", - "poisonous": "true", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "7256", - "name": "Frog", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "55", - "id": "3783", - "range_level": "1", - "attack_level": "55" - }, - { - "name": "Void Knight", - "defence_level": "1", - "safespot": null, - "lifepoints": "200", - "strength_level": "1", - "attack_speed": "0", - "id": "3784", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "attack_speed": "5", - "magic_level": "80", - "respawn_delay": "120", - "name": "Void Knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "200", - "strength_level": "1", - "id": "3785", - "bonuses": "180,180,180,180,80,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A powerful knight of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Void Knight", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3786", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A powerful knight of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Void Knight", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3788", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3790", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3791", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3792", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3793", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3794", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3795", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3796", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3797", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3798", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3799", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3800", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3801", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire (Novice)", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3802", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Posts things.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Postie Pete", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3805", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Miss Millicent Miller the Miller of Mill Lane Mill.", - "name": "Millie Miller", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3806", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Gillie the Milkmaid milks cows. She's udderly fantastic at it.", - "name": "Gillie Groats", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3807", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Massive beast of War with extra Gnome.", - "melee_animation": "3960", - "range_animation": "3954", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "3962", - "name": "Tortoise", - "defence_level": "36", - "safespot": null, - "lifepoints": "121", - "strength_level": "36", - "id": "3808", - "range_level": "1", - "attack_level": "36" - }, - { - "examine": "Tally Ho!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Dalbur", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3809", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Huzzah!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Bleemadge", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3810", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Up up and away!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Errdo", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3811", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Up up and away!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Klemfoodle", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3812", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Gnome Arrow-chucker", - "combat_style": "1", - "melee_animation": "190", - "range_animation": "190", - "respawn_delay": "60", - "defence_animation": "193", - "weakness": "2", - "magic_animation": "0", - "death_animation": "196", - "name": "Gnome Archer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3814", - "aggressive": "true", - "range_level": "5", - "projectile": "10", - "attack_level": "1", - "prj_height": "30" - }, - { - "examine": "Yee haa!", - "melee_animation": "3969", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "193", - "weakness": "9", - "magic_animation": "0", - "death_animation": "196", - "name": "Gnome Driver", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3815", - "aggressive": "true", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "A battle mage of the gnomish variety.", - "combat_style": "2", - "start_gfx": "93", - "start_height": "80", - "melee_animation": "3968", - "range_animation": "0", - "magic_level": "5", - "spell_id": "", - "respawn_delay": "60", - "defence_animation": "193", - "weakness": "5", - "magic_animation": "200", - "death_animation": "196", - "name": "Gnome Mage", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3816", - "aggressive": "true", - "range_level": "1", - "projectile": "94", - "attack_level": "1", - "prj_height": "30" - }, - { - "examine": "The cruel tortoise trainer. Boo!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trainer Nacklepen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3818", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A large tortoise.", - "melee_animation": "3960", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "3962", - "name": "Tortoise", - "defence_level": "36", - "safespot": null, - "lifepoints": "101", - "strength_level": "36", - "id": "3819", - "range_level": "1", - "attack_level": "36" - }, - { - "agg_radius": "64", - "melee_animation": "6241", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "6240", - "death_animation": "6242", - "name": "Kalphite Queen", - "defence_level": "1", - "safespot": null, - "lifepoints": "255", - "strength_level": "1", - "id": "3835", - "aggressive": "true", - "range_level": "1000", - "attack_level": "1" - }, - { - "agg_radius": "64", - "melee_animation": "6234", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "6237", - "death_animation": "6233", - "name": "Kalphite Queen", - "defence_level": "1", - "safespot": null, - "lifepoints": "255", - "strength_level": "1", - "id": "3836", - "aggressive": "true", - "range_level": "1000", - "attack_level": "1" - }, - { - "examine": "An aquatic troll.", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "name": "Sea troll", - "defence_level": "45", - "safespot": null, - "lifepoints": "64", - "strength_level": "45", - "id": "3840", - "aggressive": "true", - "range_level": "1", - "attack_level": "45" - }, - { - "examine": "An aquatic troll.", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "name": "Sea troll", - "defence_level": "60", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "3843", - "aggressive": "true", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "The mother of all sea trolls!", - "melee_animation": "3991", - "range_animation": "0", - "magic_level": "65", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "3993", - "name": "Sea Troll Queen", - "defence_level": "65", - "safespot": null, - "lifepoints": "428", - "strength_level": "65", - "id": "3847", - "aggressive": "true", - "range_level": "65", - "attack_level": "65" - }, - { - "examine": "What have they done to him?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fishing spot", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3849", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Man", - "defence_level": "1", - "safespot": null, - "lifepoints": "7", - "strength_level": "1", - "id": "3915", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "His bark's worse than his blight.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Carpenter Kjallak", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3916", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks a bit seedy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Farmer Fromund", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3917", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Snake", - "melee_animation": "3538", - "range_animation": "0", - "combat_audio": "3609,3608,3610", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "3540", - "name": "Sea Snake Young", - "defence_level": "45", - "safespot": null, - "lifepoints": "128", - "strength_level": "33", - "id": "3939", - "aggressive": "true", - "range_level": "45", - "attack_level": "33" - }, - { - "examine": "A baby sea snake. Snaaaaaaake!", - "melee_animation": "3538", - "range_animation": "0", - "combat_audio": "3609,3608,3610", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "3540", - "name": "Sea Snake Hatchling", - "defence_level": "45", - "safespot": null, - "lifepoints": "100", - "strength_level": "33", - "id": "3940", - "aggressive": "true", - "range_level": "45", - "attack_level": "33" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "3941", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's guarding the entrance to the dungeons.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "3942", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A big snake that lives in the sea. How did it get in here?", - "melee_animation": "4040", - "range_animation": "0", - "combat_audio": "3609,3608,3610", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "4039", - "name": "Giant Sea Snake", - "defence_level": "45", - "safespot": null, - "lifepoints": "385", - "strength_level": "33", - "id": "3943", - "aggressive": "true", - "range_level": "45", - "attack_level": "33" - }, - { - "slayer_exp": "37", - "name": "Cockatrice", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4227", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "75", - "name": "Basilisk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "288,290,289", - "strength_level": "1", - "id": "4228", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Large, heavy, with sharp things attached to its head.", - "melee_animation": "9439", - "range_animation": "9439", - "combat_audio": "588,590,589", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "9441", - "slayer_exp": "97", - "magic_animation": "9439", - "death_animation": "9440", - "name": "Kurask", - "defence_level": "105", - "safespot": null, - "lifepoints": "97", - "strength_level": "105", - "id": "4229", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "67" - }, - { - "examine": "A denizen of the Abyss!", - "melee_animation": "1537", - "range_animation": "1537", - "combat_audio": "276,278,277", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "0", - "weakness": "1", - "slayer_exp": "150", - "magic_animation": "1537", - "death_animation": "1538", - "name": "Abyssal demon", - "defence_level": "135", - "safespot": null, - "lifepoints": "150", - "strength_level": "67", - "id": "4230", - "bonuses": "0,0,0,0,0,20,20,20,0,20,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "97" - }, - { - "name": "Demon butler", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "400,404,403", - "strength_level": "1", - "id": "4243", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Head of the servants' guild.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Chief servant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4245", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She smells unpleasantly of chemicals.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Taxidermist", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4246", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A fancy businessman with a mighty fine hat.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Estate agent", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4247", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Someone has to get rid of all the stone they dug Keldagrim out of.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Stonemason", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4248", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He changes the shape of wood.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "facing_booth": "true", - "magic_animation": "0", - "death_animation": "0", - "name": "Sawmill operator", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4250", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She has green fingers. (Not literally.)", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Garden supplier", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4251", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Beak areful with this one", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Macaroni Penguin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4252", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "4257", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A dwarven guard.", - "melee_animation": "99", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "102", - "name": "Guard", - "defence_level": "12", - "safespot": null, - "lifepoints": "17", - "strength_level": "12", - "id": "4258", - "aggressive": "true", - "clue_level": "1", - "range_level": "1", - "attack_level": "12" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "4259", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "4260", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4261", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4262", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4263", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4264", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4265", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4266", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4267", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4268", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4269", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4270", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4271", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4272", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4273", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4274", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4275", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4276", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Animated bronze armour.", - "melee_animation": "386", - "range_animation": "386", - "combat_audio": "2549,1979,512", - "attack_speed": "4", - "respawn_delay": "20", - "defence_animation": "388", - "weakness": "7", - "magic_animation": "386", - "death_animation": "4167", - "name": "Animated Bronze Armour", - "defence_level": "10", - "safespot": null, - "poison_immune": "true", - "lifepoints": "10", - "strength_level": "10", - "id": "4278", - "aggressive": "true", - "bonuses": "4,4,4,0,0,50,25,19,400,400,0,5,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "Animated iron armour.", - "melee_animation": "386", - "range_animation": "386", - "combat_audio": "2549,1979,512", - "attack_speed": "4", - "respawn_delay": "20", - "defence_animation": "388", - "weakness": "7", - "magic_animation": "386", - "death_animation": "4167", - "name": "Animated Iron Armour", - "defence_level": "20", - "safespot": null, - "poison_immune": "true", - "lifepoints": "20", - "strength_level": "20", - "id": "4279", - "aggressive": "true", - "bonuses": "4,4,4,0,0,50,25,19,400,400,0,5,0,0,0", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "Animated steel armour.", - "melee_animation": "386", - "range_animation": "386", - "combat_audio": "2549,1979,512", - "attack_speed": "4", - "respawn_delay": "20", - "defence_animation": "388", - "weakness": "7", - "magic_animation": "386", - "death_animation": "4167", - "name": "Animated Steel Armour", - "defence_level": "40", - "safespot": null, - "poison_immune": "true", - "lifepoints": "40", - "strength_level": "40", - "id": "4280", - "aggressive": "true", - "bonuses": "4,4,4,0,0,50,25,19,400,400,0,5,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Animated black armour.", - "melee_animation": "386", - "range_animation": "386", - "combat_audio": "2549,1979,512", - "attack_speed": "4", - "respawn_delay": "20", - "defence_animation": "388", - "weakness": "7", - "magic_animation": "386", - "death_animation": "4167", - "name": "Animated Black Armour", - "defence_level": "60", - "safespot": null, - "poison_immune": "true", - "lifepoints": "60", - "strength_level": "60", - "id": "4281", - "aggressive": "true", - "bonuses": "4,4,4,0,0,50,25,19,400,400,0,5,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Animated mithril armour.", - "melee_animation": "386", - "range_animation": "386", - "combat_audio": "2549,1979,512", - "attack_speed": "4", - "respawn_delay": "20", - "defence_animation": "388", - "weakness": "7", - "magic_animation": "386", - "death_animation": "4167", - "name": "Animated Mithril Armour", - "defence_level": "80", - "safespot": null, - "poison_immune": "true", - "lifepoints": "80", - "strength_level": "80", - "id": "4282", - "aggressive": "true", - "bonuses": "4,4,4,0,0,50,25,19,400,400,0,5,0,0,0", - "range_level": "1", - "attack_level": "80" - }, - { - "examine": "Animated adamant armour.", - "melee_animation": "386", - "range_animation": "386", - "combat_audio": "2549,1979,512", - "attack_speed": "4", - "respawn_delay": "20", - "defence_animation": "388", - "weakness": "7", - "magic_animation": "386", - "death_animation": "4167", - "name": "Animated Adamant Armour", - "defence_level": "99", - "safespot": null, - "poison_immune": "true", - "lifepoints": "99", - "strength_level": "99", - "id": "4283", - "aggressive": "true", - "bonuses": "4,4,4,0,0,50,25,19,400,400,0,5,0,0,0", - "range_level": "1", - "attack_level": "99" - }, - { - "examine": "Animated rune armour.", - "melee_animation": "386", - "range_animation": "386", - "combat_audio": "2549,1979,512", - "attack_speed": "4", - "respawn_delay": "20", - "defence_animation": "388", - "weakness": "7", - "magic_animation": "386", - "death_animation": "4167", - "name": "Animated Rune Armour", - "defence_level": "120", - "safespot": null, - "poison_immune": "true", - "lifepoints": "120", - "strength_level": "120", - "id": "4284", - "aggressive": "true", - "bonuses": "4,4,4,0,0,50,25,19,400,400,0,5,0,0,0", - "range_level": "1", - "attack_level": "120" - }, - { - "examine": "The big door man.", - "name": "Ghommal", - "id": "4285" - }, - { - "examine": "Guild Master.", - "name": "Harrallak Menarous", - "id": "4286" - }, - { - "examine": "The guild engineer.", - "name": "Gamfred", - "id": "4287" - }, - { - "examine": "Used to be a black knight.", - "name": "Ajjat", - "id": "4288" - }, - { - "examine": "Blademistress, skillful female warrior.", - "name": "Kamfreena", - "id": "4289" - }, - { - "examine": "A warrior mage from the east.", - "name": "Shanomi", - "id": "4290" - }, - { - "examine": "A one-eyed man eater.", - "melee_animation": "4652", - "range_animation": "0", - "combat_audio": "448,451,450", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4651", - "weakness": "8", - "slayer_exp": "75", - "magic_animation": "0", - "death_animation": "4653", - "name": "Cyclops", - "defence_level": "26", - "safespot": null, - "lifepoints": "75", - "strength_level": "50", - "id": "4291", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "47" - }, - { - "examine": "A one-eyed woman eater.", - "melee_animation": "4652", - "range_animation": "0", - "combat_audio": "448,451,450", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4651", - "weakness": "1", - "slayer_exp": "100", - "magic_animation": "0", - "death_animation": "4653", - "name": "Cyclops", - "defence_level": "35", - "safespot": null, - "lifepoints": "100", - "strength_level": "65", - "id": "4292", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "Food shopkeeper.", - "name": "Lidio", - "id": "4293" - }, - { - "examine": "Potion shopkeeper.", - "name": "Lilly", - "id": "4294" - }, - { - "examine": "Armour shopkeeper.", - "name": "Anton", - "id": "4295" - }, - { - "examine": "Bank staff.", - "name": "Jade", - "id": "4296" - }, - { - "examine": "He looks like a strong warrior.", - "name": "Sloane", - "id": "4297" - }, - { - "examine": "He looks a bit drunk.", - "name": "Jimmy", - "id": "4298" - }, - { - "examine": "He looks fair and reliable.", - "name": "Ref", - "id": "4299" - }, - { - "examine": "He looks fair and reliable.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ref", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4300", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "4301", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "4302", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "4303", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "4304", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "4305", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "4306", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guard for the humans against monster group.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "26", - "safespot": null, - "lifepoints": "37", - "strength_level": "26", - "id": "4307", - "clue_level": "1", - "range_level": "1", - "attack_level": "26" - }, - { - "melee_animation": "395", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "4308", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "395", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "4309", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "395", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "4310", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "395", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "4311", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "16", - "name": "Dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4316", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "H.A.M. Member", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4318", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "H.A.M. Member", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4320", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "H.A.M. Deacon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4329", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "395", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "4336", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Snake! Snaaaaake! ", - "combat_audio": "3609,3608,3610", - "range_animation": "0", - "melee_animation": "275", - "attack_speed": "3", - "poisonous": "true", - "magic_level": "1", - "end_gfx": "", - "respawn_delay": "30", - "defence_animation": "276", - "poison_amount": "15", - "end_height": "", - "magic_animation": "0", - "death_animation": "278", - "name": "Snake", - "defence_level": "50", - "safespot": null, - "lifepoints": "25", - "strength_level": "25", - "id": "4343", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "25" - }, - { - "melee_animation": "220", - "combat_audio": "629,631,630", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "221", - "death_animation": "223", - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "12", - "strength_level": "1", - "id": "4344", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's all white by me.", - "melee_animation": "4915", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "4917", - "name": "Albino bat", - "defence_level": "31", - "safespot": null, - "lifepoints": "44", - "strength_level": "31", - "id": "4345", - "range_level": "1", - "attack_level": "31" - }, - { - "examine": "A flying blood sucker.", - "melee_animation": "2397", - "range_animation": "0", - "attack_speed": "10", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "2398", - "name": "Giant mosquito", - "defence_level": "63", - "safespot": null, - "lifepoints": "90", - "strength_level": "63", - "id": "4347", - "range_level": "1", - "attack_level": "63" - }, - { - "examine": "A horrible, emaciated ape like creature with beady red eyes.", - "melee_animation": "4235", - "range_animation": "0", - "combat_audio": "496,500,499", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "4232", - "weakness": "7", - "slayer_exp": "45", - "magic_animation": "0", - "death_animation": "4233", - "name": "Jungle horror", - "defence_level": "55", - "safespot": null, - "lifepoints": "45", - "strength_level": "70", - "id": "4348", - "aggressive": "true", - "clue_level": "1", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "A horrible, emaciated ape like creature with beady yellow eyes.", - "melee_animation": "4234", - "combat_audio": "496,500,499", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "4232", - "slayer_exp": "45", - "death_animation": "4233", - "name": "Jungle horror", - "defence_level": "55", - "safespot": null, - "lifepoints": "45", - "strength_level": "70", - "id": "4349", - "aggressive": "true", - "clue_level": "1", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "A horrible, emaciated ape like creature with beady green eyes.", - "melee_animation": "4235", - "range_animation": "0", - "combat_audio": "496,500,499", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "4232", - "weakness": "7", - "slayer_exp": "45", - "magic_animation": "0", - "death_animation": "4233", - "name": "Jungle horror", - "defence_level": "55", - "safespot": null, - "lifepoints": "45", - "strength_level": "70", - "id": "4350", - "aggressive": "true", - "clue_level": "1", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "A horrible, emaciated ape like creature with beady blue eyes.", - "melee_animation": "4234", - "combat_audio": "496,500,499", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "4232", - "slayer_exp": "45", - "death_animation": "4233", - "name": "Jungle horror", - "defence_level": "55", - "safespot": null, - "lifepoints": "45", - "strength_level": "70", - "id": "4351", - "aggressive": "true", - "clue_level": "1", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "A horrible, emaciated ape like creature with beady pink eyes.", - "melee_animation": "4234", - "combat_audio": "496,500,499", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "4232", - "slayer_exp": "45", - "death_animation": "4233", - "name": "Jungle horror", - "defence_level": "55", - "safespot": null, - "lifepoints": "45", - "strength_level": "70", - "id": "4352", - "aggressive": "true", - "clue_level": "1", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "A horrible, emaciated ape like creature with beady red eyes.", - "melee_animation": "4234", - "range_animation": "4234", - "combat_audio": "496,500,499", - "attack_speed": "4", - "magic_level": "80", - "respawn_delay": "50", - "defence_animation": "4232", - "weakness": "6", - "slayer_exp": "55", - "magic_animation": "4234", - "death_animation": "4233", - "name": "Cave horror", - "defence_level": "62", - "safespot": null, - "lifepoints": "55", - "strength_level": "77", - "id": "4353", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "80" - }, - { - "examine": "A horrible, emaciated ape like creature with beady red eyes.", - "melee_animation": "4234", - "range_animation": "4234", - "combat_audio": "496,500,499", - "attack_speed": "4", - "magic_level": "80", - "respawn_delay": "50", - "defence_animation": "4232", - "weakness": "6", - "slayer_exp": "55", - "magic_animation": "4234", - "death_animation": "4233", - "name": "Cave horror", - "defence_level": "62", - "safespot": null, - "lifepoints": "55", - "strength_level": "77", - "id": "4354", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "80" - }, - { - "examine": "A horrible, emaciated ape like creature with beady red eyes.", - "melee_animation": "4234", - "range_animation": "4234", - "combat_audio": "496,500,499", - "attack_speed": "4", - "magic_level": "80", - "respawn_delay": "50", - "defence_animation": "4232", - "weakness": "6", - "slayer_exp": "55", - "magic_animation": "4234", - "death_animation": "4233", - "name": "Cave horror", - "defence_level": "62", - "safespot": null, - "lifepoints": "55", - "strength_level": "77", - "id": "4355", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "80" - }, - { - "examine": "A horrible, emaciated ape like creature with beady red eyes.", - "melee_animation": "4234", - "range_animation": "4234", - "combat_audio": "496,500,499", - "attack_speed": "4", - "magic_level": "80", - "respawn_delay": "50", - "defence_animation": "4232", - "weakness": "6", - "slayer_exp": "55", - "magic_animation": "4234", - "death_animation": "4233", - "name": "Cave horror", - "defence_level": "62", - "safespot": null, - "lifepoints": "55", - "strength_level": "77", - "id": "4356", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "80" - }, - { - "examine": "A horrible, emaciated ape like creature with beady red eyes.", - "melee_animation": "4234", - "range_animation": "4234", - "combat_audio": "496,500,499", - "attack_speed": "4", - "magic_level": "80", - "respawn_delay": "50", - "defence_animation": "4232", - "weakness": "6", - "slayer_exp": "55", - "magic_animation": "4234", - "death_animation": "4233", - "name": "Cave horror", - "defence_level": "62", - "safespot": null, - "lifepoints": "55", - "strength_level": "77", - "id": "4357", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "80" - }, - { - "examine": "Patchy the pirate.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Patchy", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4359", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very flamboyant pirate.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fancy Dan", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4361", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I can't wait to buy from a guy with Honest in his name...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Honest Jimmy", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4362", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "4363", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Blue Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "4371", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Red Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "4372", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A colourful bird.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Parrot", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4373", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A retired Gielinor security guard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Security Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4375", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A boney ghost.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "924,926,925", - "attack_speed": "4", - "defence_animation": "404", - "slayer_exp": "60", - "magic_animation": "422", - "death_animation": "9055", - "name": "Ankou", - "defence_level": "50", - "safespot": null, - "lifepoints": "60", - "strength_level": "69", - "id": "4381", - "aggressive": "true", - "clue_level": "2", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "A boney ghost.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "924,926,925", - "attack_speed": "4", - "defence_animation": "404", - "slayer_exp": "60", - "magic_animation": "422", - "death_animation": "9055", - "name": "Ankou", - "defence_level": "50", - "safespot": null, - "lifepoints": "66", - "strength_level": "69", - "id": "4382", - "aggressive": "true", - "clue_level": "2", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "A boney ghost.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "924,926,925", - "attack_speed": "4", - "defence_animation": "404", - "slayer_exp": "60", - "magic_animation": "422", - "death_animation": "9055", - "name": "Ankou", - "defence_level": "55", - "safespot": null, - "lifepoints": "66", - "strength_level": "74", - "id": "4383", - "aggressive": "true", - "clue_level": "2", - "range_level": "1", - "attack_level": "60" - }, - { - "melee_animation": "5540", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5541", - "slayer_exp": "25", - "death_animation": "5542", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "36", - "strength_level": "1", - "id": "4387", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eeek! A ghost!", - "melee_animation": "5532", - "range_animation": "0", - "combat_audio": "436,439,438", - "attack_speed": "5", - "magic_level": "30", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "1", - "id": "4388", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I don't think insect repellent will work.", - "melee_animation": "1184", - "range_animation": "1184", - "combat_audio": "571,573,572", - "attack_speed": "3", - "respawn_delay": "30", - "defence_animation": "1186", - "weakness": "0", - "slayer_exp": "25", - "magic_animation": "1184", - "death_animation": "1190", - "name": "Flesh Crawler", - "defence_level": "10", - "safespot": null, - "lifepoints": "25", - "strength_level": "2", - "id": "4389", - "aggressive": "true", - "bonuses": "0,0,0,0,0,15,15,15,15,15,15,15,15,15,15", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "I don't think insect repellent will work.", - "melee_animation": "1184", - "range_animation": "1184", - "combat_audio": "571,573,572", - "attack_speed": "3", - "respawn_delay": "30", - "defence_animation": "1186", - "slayer_exp": "25", - "magic_animation": "1184", - "death_animation": "1190", - "name": "Flesh Crawler", - "defence_level": "10", - "safespot": null, - "lifepoints": "25", - "strength_level": "2", - "id": "4390", - "aggressive": "true", - "bonuses": "0,0,0,0,0,15,15,15,15,15,15,15,15,15,15", - "range_level": "1", - "attack_level": "80" - }, - { - "examine": "I don't think insect repellent will work.", - "melee_animation": "1184", - "range_animation": "1184", - "combat_audio": "571,573,572", - "attack_speed": "3", - "respawn_delay": "30", - "defence_animation": "1186", - "slayer_exp": "25", - "magic_animation": "1184", - "death_animation": "1190", - "name": "Flesh Crawler", - "defence_level": "10", - "safespot": null, - "lifepoints": "25", - "strength_level": "2", - "id": "4391", - "aggressive": "true", - "bonuses": "0,0,0,0,0,15,15,15,15,15,15,15,15,15,15", - "range_level": "1", - "attack_level": "100" - }, - { - "examine": "Dead man walking.", - "melee_animation": "5568", - "range_animation": "5568", - "combat_audio": "918,923,922", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "5567", - "slayer_exp": "30", - "magic_animation": "5568", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "25", - "safespot": null, - "lifepoints": "23", - "strength_level": "1", - "id": "4392", - "aggressive": "true", - "bonuses": "15,25,25,25,25,25,25,15,15,25,25,25,25,25,25", - "range_level": "1", - "attack_level": "24" - }, - { - "examine": "Dead man walking.", - "melee_animation": "5578", - "range_animation": "5578", - "combat_audio": "918,923,922", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "5579", - "slayer_exp": "30", - "magic_animation": "5578", - "death_animation": "5580", - "name": "Zombie", - "defence_level": "28", - "safespot": null, - "lifepoints": "18", - "strength_level": "1", - "id": "4393", - "aggressive": "true", - "bonuses": "15,25,28,28,25,28,28,15,15,28,25,25,25,25,25", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Dead man walking.", - "melee_animation": "5578", - "range_animation": "5578", - "combat_audio": "918,923,922", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "5579", - "slayer_exp": "30", - "magic_animation": "5578", - "death_animation": "5580", - "name": "Zombie", - "defence_level": "48", - "safespot": null, - "lifepoints": "40", - "strength_level": "1", - "id": "4394", - "aggressive": "true", - "bonuses": "35,45,45,45,45,45,45,35,35,45,45,45,45,45,45", - "range_level": "1", - "attack_level": "47" - }, - { - "examine": "Overgrown vermin.", - "combat_audio": "703,705,704", - "melee_animation": "4933", - "attack_speed": "5", - "defence_animation": "4934", - "weakness": "9", - "death_animation": "4935", - "name": "Giant rat", - "defence_level": "23", - "safespot": null, - "lifepoints": "26", - "strength_level": "20", - "id": "4395", - "aggressive": "true", - "bonuses": "19,15,15,34,36,38,33,31,30,14,0,0,0,0,0", - "range_level": "1", - "attack_level": "21" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "710,713,711", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "2", - "strength_level": "1", - "id": "4396", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Big Cow-like... But cows don't have serpent tails!", - "melee_animation": "4271", - "combat_audio": "511,330,329", - "attack_speed": "5", - "magic_level": "38", - "spell_id": "7", - "respawn_delay": "74", - "defence_animation": "4273", - "slayer_exp": "50", - "magic_animation": "4272", - "death_animation": "4270", - "name": "Catablepon", - "defence_level": "38", - "safespot": null, - "lifepoints": "50", - "strength_level": "38", - "id": "4397", - "aggressive": "true", - "bonuses": "5,20,15,3,10,20,10,10,20,15,23,25,15,25,10", - "clue_level": "1", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "Big Cow-like... But cows don't have serpent tails!", - "melee_animation": "4271", - "combat_audio": "511,330,329", - "attack_speed": "5", - "magic_level": "38", - "spell_id": "7", - "respawn_delay": "74", - "defence_animation": "4273", - "slayer_exp": "50", - "magic_animation": "4272", - "death_animation": "4270", - "name": "Catablepon", - "defence_level": "38", - "safespot": null, - "lifepoints": "70", - "strength_level": "38", - "id": "4398", - "aggressive": "true", - "bonuses": "20,25,10,20,25,10,10,11,0,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "Big Cow-like... But cows don't have serpent tails!", - "melee_animation": "4271", - "combat_audio": "511,330,329", - "attack_speed": "5", - "magic_level": "45", - "spell_id": "7", - "respawn_delay": "74", - "defence_animation": "4273", - "slayer_exp": "50", - "magic_animation": "4272", - "death_animation": "4270", - "name": "Catablepon", - "defence_level": "38", - "safespot": null, - "lifepoints": "50", - "strength_level": "58", - "id": "4399", - "aggressive": "true", - "bonuses": "50,45,50,40,45,20,30,25,33,25,25,20,20,40,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "I think this spider has been genetically modified.", - "melee_animation": "5327", - "range_animation": "5327", - "combat_audio": "537,539,538", - "defence_animation": "5328", - "magic_animation": "5327", - "death_animation": "5329", - "name": "Giant spider", - "defence_level": "51", - "safespot": null, - "lifepoints": "50", - "strength_level": "45", - "id": "4400", - "aggressive": "true", - "bonuses": "19,21,19,62,45,51,54,63,60,18,0,0,0,0,0", - "range_level": "1", - "attack_level": "48" - }, - { - "melee_animation": "6249", - "combat_audio": "3604,3609,3608", - "respawn_delay": "60", - "defence_animation": "6250", - "death_animation": "6251", - "name": "Spider", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "4401", - "aggressive": "false", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An extremely vicious scorpion.", - "melee_animation": "6254", - "range_animation": "6254", - "combat_audio": "3611,3612,3610", - "attack_speed": "5", - "defence_animation": "6255", - "slayer_exp": "17", - "magic_animation": "6254", - "death_animation": "6256", - "name": "Scorpion", - "defence_level": "49", - "safespot": null, - "lifepoints": "55", - "strength_level": "51", - "id": "4402", - "aggressive": "true", - "bonuses": "12,23,10,51,32,62,29,54,48,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "An extremely vicious scorpion.", - "melee_animation": "6254", - "range_animation": "6254", - "combat_audio": "3611,3612,3610", - "attack_speed": "5", - "defence_animation": "6255", - "slayer_exp": "17", - "magic_animation": "6254", - "death_animation": "6256", - "name": "Scorpion", - "defence_level": "35", - "safespot": null, - "lifepoints": "37", - "strength_level": "31", - "id": "4403", - "aggressive": "true", - "bonuses": "15,16,12,32,19,38,18,34,32,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "He doesn't look very pleased to see you.", - "melee_animation": "4266", - "range_animation": "4266", - "combat_audio": "626,628,627", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "4267", - "weakness": "7", - "slayer_exp": "10", - "magic_animation": "4266", - "death_animation": "4265", - "name": "Minotaur", - "defence_level": "10", - "safespot": null, - "lifepoints": "10", - "strength_level": "10", - "id": "4404", - "aggressive": "false", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "12" - }, - { - "examine": "He doesn't look very pleased to see you.", - "melee_animation": "4266", - "range_animation": "4266", - "combat_audio": "626,628,627", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "4267", - "magic_animation": "4266", - "death_animation": "4265", - "name": "Minotaur", - "defence_level": "10", - "safespot": null, - "lifepoints": "10", - "strength_level": "10", - "id": "4405", - "aggressive": "false", - "bonuses": "11,11,13,11,11,13,11,11,11,13,11,11,11,11,11", - "clue_level": "0", - "range_level": "1", - "attack_level": "12" - }, - { - "examine": "He doesn't look very pleased to see you.", - "melee_animation": "4266", - "range_animation": "4266", - "combat_audio": "626,628,627", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "15", - "defence_animation": "4267", - "slayer_exp": "22", - "magic_animation": "4266", - "death_animation": "4265", - "name": "Minotaur", - "defence_level": "25", - "safespot": null, - "lifepoints": "22", - "strength_level": "25", - "id": "4406", - "aggressive": "false", - "bonuses": "0,0,0,0,0,-10,-10,-10,21,-10,0,0,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "23" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "3520,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "5", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4407", - "bonuses": "3,3,3,3,3,3,3,3,3,3,3,3,3,3,3", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "3520,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "16", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "11", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4408", - "bonuses": "8,8,8,8,8,8,8,8,8,8,8,8,8,8,8", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "3520,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "7", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "9", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4409", - "bonuses": "6,6,6,6,6,6,6,6,6,6,6,6,6,6,6", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "3520,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "10", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4410", - "bonuses": "8,8,8,8,8,8,8,8,8,8,8,8,8,8,8", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "3520,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "17", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4411", - "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "3520,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "10", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4412", - "bonuses": "8,8,8,8,8,8,8,8,8,8,8,8,8,8,8", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "They say inside you there are two wolves...", - "melee_animation": "6559", - "range_animation": "6559", - "combat_audio": "481,491,490", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "6557", - "slayer_exp": "15", - "magic_animation": "6559", - "death_animation": "6558", - "name": "Wolf", - "defence_level": "9", - "safespot": null, - "lifepoints": "15", - "strength_level": "1", - "id": "4413", - "bonuses": "7,7,7,7,7,7,7,7,7,7,7,7,7,7,7", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "They say inside you there are two wolves...", - "melee_animation": "6559", - "range_animation": "6559", - "combat_audio": "481,491,490", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "6557", - "slayer_exp": "10", - "magic_animation": "6559", - "death_animation": "6558", - "name": "Wolf", - "defence_level": "7", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4414", - "bonuses": "5,5,5,5,5,5,5,5,5,5,5,5,5,5,5", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "710,713,711", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "3", - "defence_animation": "2706", - "slayer_exp": "2", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "2", - "strength_level": "1", - "id": "4415", - "bonuses": "-47,-47,-47,0,0,-42,-42,-42,-42,-42,-42,-53,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "4300", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4301", - "slayer_exp": "112", - "death_animation": "4302", - "name": "Gorak", - "defence_level": "1", - "safespot": null, - "lifepoints": "112", - "strength_level": "1", - "id": "4418", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A highly enlightened being.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cosmic Being", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4419", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A healing fairy.", - "name": "Fairy Nuff", - "id": "4434" - }, - { - "examine": "Horseplay.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Centaur", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4438", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Horseplay.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Centaur", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4439", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A noble creature!", - "melee_animation": "6376", - "range_animation": "0", - "combat_audio": "812,814,813", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "90", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6377", - "name": "Stag", - "defence_level": "13", - "safespot": null, - "lifepoints": "19", - "strength_level": "13", - "id": "4440", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "11" - }, - { - "examine": "Twiggy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Wood Dryad", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4441", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Fairy ring maintenance division.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fairy Fixit", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4455", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He works in the bank.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ork", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4457", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She works in the bank.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ork", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4458", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She works in the bank.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ork", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4459", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very angry nymph.", - "melee_animation": "94", - "range_animation": "0", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "97", - "name": "Tree spirit", - "defence_level": "9", - "safespot": null, - "lifepoints": "12", - "strength_level": "9", - "id": "4470", - "aggressive": "true", - "range_level": "1", - "attack_level": "9" - }, - { - "examine": "A magic training dummy", - "melee_animation": "94", - "range_animation": "0", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "97", - "name": "Magic dummy", - "defence_level": "1", - "safespot": null, - "lifepoints": "15", - "strength_level": "1", - "id": "4474", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Who's your mummy?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guardian mummy", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4476", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4479", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4480", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4481", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4482", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4483", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4484", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4485", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4486", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4487", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4488", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4489", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4490", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4491", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4492", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "General Wartface", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4494", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "attack_speed": "5", - "defence_animation": "6183", - "slayer_exp": "5", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "4499", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Is he real or is it just my imagination?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ethereal Man", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4501", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Does she really exist?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ethereal Lady", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4502", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He reminds me of my old mathematics teacher.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ethereal Numerator", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4503", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The master of accomplishment.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ethereal Expert", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4504", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He knows what is possible.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ethereal Perceptive", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4505", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He knows the past, present and future. But what of my shoe size?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ethereal Guide", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4506", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Luck is probably on his side.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ethereal Fluke", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4507", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's like looking in the mirror.", - "melee_animation": "414", - "range_animation": "0", - "magic_level": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Me", - "defence_level": "60", - "safespot": null, - "lifepoints": "171", - "strength_level": "60", - "id": "4509", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "It's like looking in the mirror.", - "melee_animation": "414", - "range_animation": "0", - "magic_level": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Me", - "defence_level": "60", - "safespot": null, - "lifepoints": "171", - "strength_level": "60", - "id": "4510", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "Spiritual leader of the Moonclan.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Oneiromancer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4511", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The craziest house I ever did see!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "House", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4512", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "How does it see where to sweep?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Enchanted Broom", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4521", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I'm not sure if it's actually doing anything of use.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Enchanted Bucket", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4524", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "4388", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4384", - "death_animation": "4389", - "name": "Suqah", - "defence_level": "95", - "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "4529", - "aggressive": "true", - "clue_level": "2", - "bonuses": "0,0,0,0,0,50,70,70,90,50,0,0,0,0,0", - "range_level": "1", - "attack_level": "95" - }, - { - "melee_animation": "4388", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4385", - "death_animation": "4389", - "name": "Suqah", - "defence_level": "95", - "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "4530", - "aggressive": "true", - "clue_level": "2", - "bonuses": "0,0,0,0,0,50,70,70,90,50,0,0,0,0,0", - "range_level": "1", - "attack_level": "95" - }, - { - "melee_animation": "4388", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4385", - "death_animation": "4389", - "name": "Suqah", - "defence_level": "95", - "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "4531", - "aggressive": "true", - "clue_level": "2", - "bonuses": "0,0,0,0,0,50,70,70,70,50,0,0,0,0,0", - "range_level": "1", - "attack_level": "95" - }, - { - "melee_animation": "4388", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4384", - "death_animation": "4389", - "name": "Suqah", - "defence_level": "95", - "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "4533", - "aggressive": "true", - "clue_level": "2", - "bonuses": "0,0,0,0,0,50,70,70,90,50,0,0,0,0,0", - "range_level": "1", - "attack_level": "95" - }, - { - "examine": "His beard seems to have a life of its own.", - "melee_animation": "4666", - "range_animation": "4666", - "combat_audio": "449,451,450", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4665", - "weakness": "1", - "slayer_exp": "85", - "magic_animation": "4666", - "death_animation": "4668", - "name": "Moss giant", - "defence_level": "30", - "safespot": null, - "lifepoints": "85", - "strength_level": "30", - "id": "4534", - "aggressive": "true", - "bonuses": "33,33,33,0,0,0,0,0,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Either a very fremennikey pirate, or a very piratey fremnnik.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Lokar Searunner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4537", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I always wondered what that job description actually meant...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cabin boy", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4539", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The High Priest has been transformed into an avatar of Bandos.", - "range_animation": "0", - "magic_level": "55", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Bentley", - "defence_level": "55", - "safespot": null, - "lifepoints": "214", - "strength_level": "55", - "id": "4540", - "aggressive": "true", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "A stickler for hygiene in the kitchen.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "'Beefy' Burns", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4541", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A keen-eyed lookout with a telescope.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "'Eagle-eye' Shultz", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4542", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "First mate to Captain Bentley.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "First mate 'Davey-boy", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4543", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A pirate through and through.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "'Picarron' Pete", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4545", - "range_level": "1", - "attack_level": "1" - }, - { - "death_animation": "836", - "name": "Jake", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "melee_animation": "422", - "strength_level": "1", - "id": "4546", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "examine": "He got his name from his favourite hobby. Reading about beds.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bedread the bold", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4547", - "range_level": "1", - "attack_level": "1" - }, - { - "death_animation": "836", - "name": "Wilson", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "melee_animation": "395", - "strength_level": "1", - "id": "4548", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "examine": "Nobody really knows why he's called Tommy 2-times...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tommy 2-times", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4549", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Don't look him straight in the eyes. He'll eat you alive!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Murky Pat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4550", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Nice beard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Jack Sails", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4551", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Is he looking at me?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "'Beedy-eye' Jones", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4554", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Yes", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Jenny Blade", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4555", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A low-down", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "'Lecherous' Lee", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4556", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Apparently his nickname comes from his fondness for jam.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "'Sticky' Sanders", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4557", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This person is working on the site.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Digsite workman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4564", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This person is working on the site.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Digsite workman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4565", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Upon examining the examiner you examine it is indeed an examiner!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Examiner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4566", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Upon examining the examiner you examine it is indeed an examiner!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Examiner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4567", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Must be hard at work.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Researcher", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4568", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He makes pots.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Generic Diplomat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4579", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's very diplomatic.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ambassador Gimblewap", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4580", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Peaceful man!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ambassador Spanfipple", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4581", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Peaceful man!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ambassador Ferrnook", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4582", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Your common man.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sorrn", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4589", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Your common woman.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mimm", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4590", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Your common man.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Portobello", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4593", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A gnome pilot off duty", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Ninto", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4594", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A gnome pilot off duty", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Daerkin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4595", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks alert and ready for action.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard Vemmeldo", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4600", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A generic evil henchman.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Fortress Guard", - "defence_level": "26", - "safespot": null, - "lifepoints": "37", - "strength_level": "26", - "id": "4603", - "range_level": "1", - "attack_level": "26" - }, - { - "examine": "A generic evil henchman.", - "melee_animation": "428", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Fortress Guard", - "defence_level": "26", - "safespot": null, - "lifepoints": "37", - "strength_level": "26", - "id": "4604", - "range_level": "1", - "attack_level": "26" - }, - { - "examine": "A generic evil henchman.", - "melee_animation": "428", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Fortress Guard", - "defence_level": "26", - "safespot": null, - "lifepoints": "37", - "strength_level": "26", - "id": "4605", - "range_level": "1", - "attack_level": "26" - }, - { - "examine": "A generic evil henchman.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Fortress Guard", - "defence_level": "26", - "safespot": null, - "lifepoints": "37", - "strength_level": "26", - "id": "4606", - "range_level": "1", - "attack_level": "26" - }, - { - "examine": "A witch's black cat.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "0", - "name": "Black Cat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4607", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "4608", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Swine.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Saboteur", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4611", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "What is that thing!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "0", - "name": "Evil creature", - "defence_level": "1", - "safespot": null, - "lifepoints": "0", - "strength_level": "1", - "id": "4615", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "4633", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "4634", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "4635", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "4636", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "4637", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A little warrior.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gnome soldier", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4638", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A little warrior.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gnome soldier", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4639", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A little warrior.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gnome soldier", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4640", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A little warrior.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gnome soldier", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4641", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A little warrior.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gnome soldier", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4642", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "King Healthorg riding his War Tortoise.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Healthorg and tortoise", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4643", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A weasly, shifty-looking Gnome Mage.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Glouphrie the Untrusted", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4645", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "With the prices he charges, no wonder he can afford to look so sharp.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader Stan", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4650", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks very stylish.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader Crewmember", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4651", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "That suit looks a little briny around the edges.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader Crewmember", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4652", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "First storm he is in that hat will blow away.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader Crewmember", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4653", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She'll never be able to climb rigging in that.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader Crewmember", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4654", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "High heels on a ship? What is she thinking?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader Crewmember", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4655", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The effect is sort of spoiled by all those tattoos.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader Crewmember", - "defence_level": "1", - "movement_radius": "710", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4656", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He works evil magic.", - "start_gfx": "93", - "combat_style": "2", - "start_height": "80", - "melee_animation": "810", - "range_animation": "0", - "combat_audio": "511,513,512", - "magic_level": "6", - "end_gfx": "95", - "respawn_delay": "60", - "defence_animation": "425", - "magic_animation": "711", - "death_animation": "836", - "name": "Dark wizard", - "defence_level": "5", - "safespot": null, - "lifepoints": "12", - "strength_level": "2", - "id": "4659", - "aggressive": "true", - "range_level": "1", - "projectile": "94", - "attack_level": "5" - }, - { - "examine": "He works evil magic.", - "start_gfx": "96", - "combat_style": "2", - "start_height": "80", - "melee_animation": "810", - "range_animation": "0", - "combat_audio": "511,513,512", - "magic_level": "22", - "end_gfx": "98", - "respawn_delay": "60", - "defence_animation": "425", - "magic_animation": "711", - "death_animation": "836", - "name": "Dark wizard", - "defence_level": "14", - "safespot": null, - "lifepoints": "24", - "strength_level": "17", - "id": "4660", - "aggressive": "true", - "range_level": "1", - "projectile": "97", - "attack_level": "17" - }, - { - "examine": "He works evil magic.", - "combat_style": "2", - "combat_audio": "511,513,512", - "attack_speed": "4", - "magic_level": "15", - "respawn_delay": "20", - "defence_animation": "404", - "magic_animation": "711", - "death_animation": "9055", - "name": "Dark wizard", - "defence_level": "15", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "4661", - "aggressive": "true", - "range_level": "1", - "projectile": "98", - "attack_level": "1" - }, - { - "examine": "Young but still dangerous.", - "melee_animation": "25", - "range_animation": "25", - "combat_audio": "405,407,406", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "26", - "weakness": "3", - "slayer_exp": "50", - "magic_animation": "25", - "death_animation": "28", - "name": "Baby blue dragon", - "defence_level": "40", - "safespot": null, - "lifepoints": "50", - "strength_level": "40", - "id": "4665", - "aggressive": "true", - "bonuses": "0,0,0,0,0,30,50,50,40,30,0,0,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Young but still dangerous.", - "combat_audio": "405,407,406", - "melee_animation": "25", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "26", - "slayer_exp": "50", - "weakness": "3", - "magic_animation": "25", - "death_animation": "28", - "name": "Baby blue dragon", - "defence_level": "40", - "safespot": null, - "lifepoints": "50", - "strength_level": "40", - "id": "4666", - "aggressive": "true", - "bonuses": "0,0,0,0,0,30,50,50,40,30,0,0,0,0,0", - "range_level": "1", - "attack_level": "45" - }, - { - "examine": "Young but still dangerous.", - "name": "Baby red dragon", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "combat_audio": "405,407,406", - "strength_level": "1", - "id": "4667", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "Young but still dangerous.", - "name": "Baby red dragon", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "combat_audio": "405,407,406", - "strength_level": "1", - "id": "4668", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "A big powerful dragon.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "143", - "magic_animation": "80", - "death_animation": "92", - "name": "Red dragon", - "defence_level": "130", - "safespot": null, - "lifepoints": "140", - "strength_level": "130", - "id": "4669", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "130" - }, - { - "examine": "A big powerful dragon.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "143", - "magic_animation": "80", - "death_animation": "92", - "name": "Red dragon", - "defence_level": "130", - "safespot": null, - "lifepoints": "140", - "strength_level": "130", - "id": "4670", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "130" - }, - { - "examine": "A big powerful dragon.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "143", - "magic_animation": "80", - "death_animation": "92", - "name": "Red dragon", - "defence_level": "130", - "safespot": null, - "lifepoints": "140", - "strength_level": "130", - "id": "4671", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "130" - }, - { - "examine": "A big powerful dragon.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "143", - "magic_animation": "80", - "death_animation": "92", - "name": "Red dragon", - "defence_level": "130", - "safespot": null, - "lifepoints": "140", - "strength_level": "130", - "id": "4672", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "130" - }, - { - "examine": "A fierce dragon with black scales!", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "100", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "200", - "magic_animation": "80", - "death_animation": "92", - "name": "Black dragon", - "defence_level": "200", - "safespot": null, - "lifepoints": "190", - "strength_level": "200", - "id": "4673", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "200" - }, - { - "examine": "A fierce dragon with black scales!", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "100", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "200", - "magic_animation": "80", - "death_animation": "92", - "name": "Black dragon", - "defence_level": "200", - "safespot": null, - "lifepoints": "190", - "strength_level": "200", - "id": "4674", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "200" - }, - { - "examine": "A fierce dragon with black scales!", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "100", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "200", - "magic_animation": "80", - "death_animation": "92", - "name": "Black dragon", - "defence_level": "200", - "safespot": null, - "lifepoints": "190", - "strength_level": "200", - "id": "4675", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "200" - }, - { - "examine": "A fierce dragon with black scales!", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "100", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "200", - "magic_animation": "80", - "death_animation": "92", - "name": "Black dragon", - "defence_level": "200", - "safespot": null, - "lifepoints": "190", - "strength_level": "200", - "id": "4676", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "200" - }, - { - "examine": "Must be related to Elvarg.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "68", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "75", - "magic_animation": "80", - "death_animation": "92", - "name": "Green dragon", - "defence_level": "68", - "safespot": null, - "lifepoints": "75", - "strength_level": "68", - "id": "4677", - "aggressive": "true", - "bonuses": "0,0,0,0,0,20,40,40,30,20,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "Must be related to Elvarg.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "68", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "75", - "magic_animation": "80", - "death_animation": "92", - "name": "Green dragon", - "defence_level": "68", - "safespot": null, - "lifepoints": "75", - "strength_level": "68", - "id": "4678", - "aggressive": "true", - "bonuses": "0,0,0,0,0,20,40,40,30,20,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "Must be related to Elvarg.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "68", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "75", - "magic_animation": "80", - "death_animation": "92", - "name": "Green dragon", - "defence_level": "68", - "safespot": null, - "lifepoints": "75", - "strength_level": "68", - "id": "4679", - "aggressive": "true", - "bonuses": "0,0,0,0,0,20,40,40,30,20,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "Must be related to Elvarg.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "68", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "75", - "magic_animation": "80", - "death_animation": "92", - "name": "Green dragon", - "defence_level": "68", - "safespot": null, - "lifepoints": "75", - "strength_level": "68", - "id": "4680", - "aggressive": "true", - "bonuses": "0,0,0,0,0,20,40,40,30,20,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "A mother dragon.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "108", - "magic_animation": "80", - "death_animation": "92", - "name": "Blue dragon", - "defence_level": "95", - "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "4681", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "95" - }, - { - "examine": "A mother dragon.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "108", - "magic_animation": "80", - "death_animation": "92", - "name": "Blue dragon", - "defence_level": "95", - "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "4682", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "95" - }, - { - "examine": "A mother dragon.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "108", - "magic_animation": "80", - "death_animation": "92", - "name": "Blue dragon", - "defence_level": "95", - "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "4683", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "95" - }, - { - "examine": "A mother dragon.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "108", - "magic_animation": "80", - "death_animation": "92", - "name": "Blue dragon", - "defence_level": "95", - "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "4684", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "95" - }, - { - "examine": "He's got icicles in his beard.", - "melee_animation": "4672", - "range_animation": "0", - "combat_audio": "448,451,450", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "70", - "magic_animation": "0", - "death_animation": "4673", - "name": "Ice giant", - "defence_level": "40", - "safespot": null, - "lifepoints": "70", - "strength_level": "40", - "id": "4685", - "aggressive": "true", - "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "He's got icicles in his beard.", - "melee_animation": "4672", - "range_animation": "0", - "combat_audio": "448,451,450", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "70", - "magic_animation": "0", - "death_animation": "4673", - "name": "Ice giant", - "defence_level": "40", - "safespot": null, - "lifepoints": "70", - "strength_level": "40", - "id": "4686", - "aggressive": "true", - "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "He's got icicles in his beard.", - "melee_animation": "4672", - "range_animation": "0", - "combat_audio": "448,451,450", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "70", - "magic_animation": "0", - "death_animation": "4673", - "name": "Ice giant", - "defence_level": "40", - "safespot": null, - "lifepoints": "70", - "strength_level": "40", - "id": "4687", - "aggressive": "true", - "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "His beard seems to have a life of its own.", - "melee_animation": "4666", - "range_animation": "4666", - "combat_audio": "449,451,450", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4665", - "weakness": "1", - "slayer_exp": "60", - "magic_animation": "4666", - "death_animation": "4668", - "name": "Moss giant", - "defence_level": "30", - "safespot": null, - "lifepoints": "60", - "strength_level": "30", - "id": "4688", - "aggressive": "true", - "bonuses": "33,33,33,0,0,0,0,0,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "A very large foe.", - "melee_animation": "4652", - "range_animation": "4652", - "combat_audio": "448,451,450", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4651", - "weakness": "6", - "slayer_exp": "35", - "magic_animation": "4652", - "death_animation": "4653", - "name": "Hill Giant", - "defence_level": "26", - "safespot": null, - "lifepoints": "35", - "strength_level": "22", - "id": "4689", - "aggressive": "true", - "bonuses": "18,18,18,0,0,0,0,0,0,0,0,16,0,0,0", - "range_level": "1", - "attack_level": "18" - }, - { - "examine": "A very large foe.", - "melee_animation": "4652", - "range_animation": "4652", - "combat_audio": "448,451,450", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4651", - "weakness": "6", - "slayer_exp": "35", - "magic_animation": "4652", - "death_animation": "4653", - "name": "Hill Giant", - "defence_level": "26", - "safespot": null, - "lifepoints": "35", - "strength_level": "22", - "id": "4690", - "aggressive": "true", - "bonuses": "18,18,18,0,0,0,0,0,0,0,0,16,0,0,0", - "range_level": "1", - "attack_level": "18" - }, - { - "examine": "A very large foe.", - "melee_animation": "4652", - "range_animation": "4652", - "combat_audio": "448,451,450", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4651", - "weakness": "6", - "slayer_exp": "35", - "magic_animation": "4652", - "death_animation": "4653", - "name": "Hill Giant", - "defence_level": "26", - "safespot": null, - "lifepoints": "35", - "strength_level": "22", - "id": "4691", - "aggressive": "true", - "bonuses": "18,18,18,0,0,0,0,0,0,0,0,16,0,0,0", - "range_level": "1", - "attack_level": "18" - }, - { - "examine": "A very large foe.", - "melee_animation": "4652", - "range_animation": "4652", - "combat_audio": "448,451,450", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4651", - "weakness": "6", - "slayer_exp": "35", - "magic_animation": "4652", - "death_animation": "4653", - "name": "Hill Giant", - "defence_level": "26", - "safespot": null, - "lifepoints": "35", - "strength_level": "22", - "id": "4692", - "aggressive": "true", - "bonuses": "18,18,18,0,0,0,0,0,0,0,0,16,0,0,0", - "range_level": "1", - "attack_level": "18" - }, - { - "examine": "A very large foe.", - "melee_animation": "4652", - "range_animation": "4652", - "combat_audio": "448,451,450", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4651", - "weakness": "6", - "slayer_exp": "35", - "magic_animation": "4652", - "death_animation": "4653", - "name": "Hill Giant", - "defence_level": "26", - "safespot": null, - "lifepoints": "35", - "strength_level": "22", - "id": "4693", - "aggressive": "true", - "bonuses": "18,18,18,0,0,0,0,0,0,0,0,16,0,0,0", - "range_level": "1", - "attack_level": "18" - }, - { - "examine": "Lesser, but still pretty big.", - "melee_animation": "4630", - "range_animation": "4630", - "combat_audio": "400,404,403", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "79", - "magic_animation": "4630", - "death_animation": "67", - "name": "Lesser demon", - "defence_level": "71", - "safespot": null, - "lifepoints": "79", - "strength_level": "70", - "id": "4694", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "Lesser, but still pretty big.", - "melee_animation": "4630", - "range_animation": "4630", - "combat_audio": "400,404,403", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "79", - "magic_animation": "4630", - "death_animation": "67", - "name": "Lesser demon", - "defence_level": "71", - "safespot": null, - "lifepoints": "79", - "strength_level": "70", - "id": "4695", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "Lesser, but still pretty big.", - "melee_animation": "4630", - "range_animation": "4630", - "combat_audio": "400,404,403", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "79", - "magic_animation": "4630", - "death_animation": "67", - "name": "Lesser demon", - "defence_level": "71", - "safespot": null, - "lifepoints": "79", - "strength_level": "70", - "id": "4696", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "Lesser, but still pretty big.", - "melee_animation": "4630", - "range_animation": "4630", - "combat_audio": "400,404,403", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "79", - "magic_animation": "4630", - "death_animation": "67", - "name": "Lesser demon", - "defence_level": "71", - "safespot": null, - "lifepoints": "79", - "strength_level": "70", - "id": "4697", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "Big, red, and incredibly evil.", - "melee_animation": "64", - "range_animation": "64", - "combat_audio": "400,404,403", - "attack_speed": "5", - "magic_level": "59", - "respawn_delay": "32", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "87", - "magic_animation": "64", - "death_animation": "68", - "name": "Greater demon", - "defence_level": "59", - "safespot": null, - "lifepoints": "87", - "strength_level": "59", - "id": "4698", - "aggressive": "true", - "bonuses": "30,20,20,30,20,50,50,50,10,50,20,0,0,0,0", - "clue_level": "2", - "range_level": "59", - "attack_level": "59" - }, - { - "examine": "Big, red, and incredibly evil.", - "melee_animation": "64", - "range_animation": "64", - "combat_audio": "400,404,403", - "attack_speed": "5", - "magic_level": "59", - "respawn_delay": "32", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "87", - "magic_animation": "64", - "death_animation": "68", - "name": "Greater demon", - "defence_level": "59", - "safespot": null, - "lifepoints": "87", - "strength_level": "59", - "id": "4699", - "aggressive": "true", - "bonuses": "30,20,20,30,20,50,50,50,10,50,20,0,0,0,0", - "clue_level": "2", - "range_level": "59", - "attack_level": "59" - }, - { - "examine": "Big, red, and incredibly evil.", - "melee_animation": "64", - "range_animation": "64", - "combat_audio": "400,404,403", - "attack_speed": "5", - "magic_level": "59", - "respawn_delay": "32", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "87", - "magic_animation": "64", - "death_animation": "68", - "name": "Greater demon", - "defence_level": "59", - "safespot": null, - "lifepoints": "87", - "strength_level": "59", - "id": "4700", - "aggressive": "true", - "bonuses": "30,20,20,30,20,50,50,50,10,50,20,0,0,0,0", - "clue_level": "2", - "range_level": "59", - "attack_level": "59" - }, - { - "examine": "Big, red, and incredibly evil.", - "melee_animation": "64", - "range_animation": "64", - "combat_audio": "400,404,403", - "attack_speed": "5", - "magic_level": "59", - "respawn_delay": "32", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "87", - "magic_animation": "64", - "death_animation": "68", - "name": "Greater demon", - "defence_level": "59", - "safespot": null, - "lifepoints": "87", - "strength_level": "59", - "id": "4701", - "aggressive": "true", - "bonuses": "30,20,20,30,20,50,50,50,10,50,20,0,0,0,0", - "clue_level": "2", - "range_level": "59", - "attack_level": "59" - }, - { - "examine": "A big, scary, jet-black demon.", - "melee_animation": "64", - "range_animation": "64", - "combat_audio": "397,399,398", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "157", - "magic_animation": "64", - "death_animation": "67", - "name": "Black demon", - "defence_level": "152", - "safespot": null, - "lifepoints": "157", - "strength_level": "148", - "id": "4702", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "145" - }, - { - "examine": "A big, scary, jet-black demon.", - "melee_animation": "64", - "range_animation": "64", - "combat_audio": "397,399,398", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "157", - "magic_animation": "64", - "death_animation": "67", - "name": "Black demon", - "defence_level": "152", - "safespot": null, - "lifepoints": "157", - "strength_level": "148", - "id": "4703", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "145" - }, - { - "examine": "A big, scary, jet-black demon.", - "melee_animation": "64", - "range_animation": "64", - "combat_audio": "397,399,398", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "157", - "magic_animation": "64", - "death_animation": "67", - "name": "Black demon", - "defence_level": "152", - "safespot": null, - "lifepoints": "157", - "strength_level": "148", - "id": "4704", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "145" - }, - { - "examine": "A big, scary, jet-black demon.", - "melee_animation": "64", - "range_animation": "64", - "combat_audio": "397,399,398", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "157", - "magic_animation": "64", - "death_animation": "67", - "name": "Black demon", - "defence_level": "152", - "safespot": null, - "lifepoints": "157", - "strength_level": "148", - "id": "4705", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "145" - }, - { - "examine": "His beard seems to have a life of its own.", - "melee_animation": "4666", - "range_animation": "4666", - "combat_audio": "449,451,450", - "attack_speed": "6", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4665", - "weakness": "1", - "slayer_exp": "85", - "magic_animation": "4666", - "death_animation": "4668", - "name": "Moss giant", - "defence_level": "30", - "safespot": null, - "lifepoints": "85", - "strength_level": "30", - "id": "4706", - "aggressive": "true", - "bonuses": "33,33,33,0,0,0,0,0,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Mikasi looks ready to teach you about magic.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Magic Tutor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4707", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A flea-infested", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Old Man Ral", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4708", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A flea-infested black market trader.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trader Sven", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4716", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A flea-infested", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4717", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A flea-infested", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4718", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4719", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4720", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4721", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4722", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4723", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4724", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4725", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4726", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Cowardly mage.", - "magic_level": "90", - "defence_animation": "0", - "magic_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "60", - "safespot": null, - "lifepoints": "28", - "strength_level": "1", - "id": "4733", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4734", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4735", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4736", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4737", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4738", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4739", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4740", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks pale", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch citizen", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4741", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A poor street urchin!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "A Meiyerditch child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4746", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A poor street urchin!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "A Meiyerditch child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4747", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A poor street urchin!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "A Meiyerditch child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4748", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A poor street urchin!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "A Meiyerditch child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4749", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A poor street urchin!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "A Meiyerditch child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4750", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A poor street urchin!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "A Meiyerditch child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4751", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A poor street urchin!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "A Meiyerditch child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4752", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A poor street urchin!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "A Meiyerditch child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4753", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A poor street urchin!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "A Meiyerditch child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4754", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A poor street urchin!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "A Meiyerditch child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4755", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks dirty and tired!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch miner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4756", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks dirty and tired!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch miner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4757", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This citizen looks dirty and tired!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Meiyerditch miner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4759", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Some rubbish.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "null", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4765", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks like it's got fleas!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Stray dog", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4766", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A smelly cat.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4768", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An initiate juvenile vampyre; a guard for the mining area.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Juvinate guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4772", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An initiate juvenile vampyre; a guard for the mining area.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Juvinate guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4773", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A juvenile vampyre.", - "melee_animation": "6276", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6781", - "name": "Vampyre juvenile", - "defence_level": "40", - "safespot": null, - "lifepoints": "57", - "strength_level": "40", - "id": "4774", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "A juvenile vampyre.", - "melee_animation": "6276", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6781", - "name": "Vampyre juvenile", - "defence_level": "40", - "safespot": null, - "lifepoints": "57", - "strength_level": "40", - "id": "4775", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "An initiate juvenile vampyre; seems to be a servant.", - "melee_animation": "5783", - "range_animation": "0", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "5798", - "name": "Vampyre juvinate", - "defence_level": "44", - "safespot": null, - "lifepoints": "62", - "strength_level": "1", - "id": "4776", - "range_level": "44", - "attack_level": "1" - }, - { - "examine": "An initiate juvenile vampyre.", - "melee_animation": "5783", - "range_animation": "0", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "5798", - "name": "Vampyre juvinate", - "defence_level": "44", - "safespot": null, - "lifepoints": "62", - "strength_level": "1", - "id": "4777", - "range_level": "44", - "attack_level": "1" - }, - { - "examine": "A juvenile vampyre.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6781", - "name": "Held vampyre juvenile", - "defence_level": "40", - "safespot": null, - "lifepoints": "57", - "strength_level": "40", - "id": "4778", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "A juvenile vampyre.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6781", - "name": "Held vampyre juvenile", - "defence_level": "40", - "safespot": null, - "lifepoints": "57", - "strength_level": "40", - "id": "4779", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "An initiate juvenile vampyre; seems to be a servant.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "5798", - "name": "Held vampyre juvinate", - "defence_level": "44", - "safespot": null, - "lifepoints": "62", - "strength_level": "1", - "id": "4780", - "range_level": "44", - "attack_level": "1" - }, - { - "examine": "An enraged vampyre!", - "melee_animation": "6016", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "6031", - "name": "Angry vampyre", - "defence_level": "42", - "safespot": null, - "lifepoints": "60", - "strength_level": "42", - "id": "4789", - "range_level": "1", - "attack_level": "42" - }, - { - "name": "Vanstrom Klause", - "defence_level": "1", - "safespot": null, - "lifepoints": "155", - "strength_level": "1", - "id": "4793", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "Not as strong as Thok.", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "name": "Vanstrom Klause", - "defence_level": "60", - "safespot": null, - "lifepoints": "28", - "strength_level": "90", - "id": "4796", - "aggressive": "true", - "range_level": "1", - "attack_level": "90" - }, - { - "examine": "An evil", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "50", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "0", - "name": "Vyrewatch", - "defence_level": "50", - "safespot": null, - "lifepoints": "71", - "strength_level": "1", - "id": "4805", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An evil", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "52", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "0", - "name": "Vyrewatch", - "defence_level": "52", - "safespot": null, - "lifepoints": "74", - "strength_level": "1", - "id": "4806", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An evil", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "54", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "0", - "name": "Vyrewatch", - "defence_level": "54", - "safespot": null, - "lifepoints": "77", - "strength_level": "1", - "id": "4807", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An evil", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "56", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "0", - "name": "Vyrewatch", - "defence_level": "56", - "safespot": null, - "lifepoints": "80", - "strength_level": "1", - "id": "4808", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very high-ranking vampyre.", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "70", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "7524", - "name": "Flying female vampire", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "4810", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very high-ranking vampyre.", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "70", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "7524", - "name": "Flying female vampire", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "4811", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very high-ranking vampyre.", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "70", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "7524", - "name": "Flying female vampire", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "4812", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A thirsty-looking", - "melee_animation": "6783", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "50", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "6861", - "name": "Vyrewatch", - "defence_level": "50", - "safespot": null, - "lifepoints": "71", - "strength_level": "1", - "id": "4813", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A thirsty-looking", - "melee_animation": "6783", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "52", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "6861", - "name": "Vyrewatch", - "defence_level": "52", - "safespot": null, - "lifepoints": "74", - "strength_level": "1", - "id": "4814", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A thirsty-looking", - "melee_animation": "6783", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "54", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "6861", - "name": "Vyrewatch", - "defence_level": "54", - "safespot": null, - "lifepoints": "77", - "strength_level": "1", - "id": "4815", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A thirsty-looking", - "melee_animation": "6783", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "56", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "6861", - "name": "Vyrewatch", - "defence_level": "56", - "safespot": null, - "lifepoints": "80", - "strength_level": "1", - "id": "4816", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An evil", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "50", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "0", - "name": "Vyrewatch", - "defence_level": "50", - "safespot": null, - "lifepoints": "71", - "strength_level": "1", - "id": "4817", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An evil", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "52", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "0", - "name": "Vyrewatch", - "defence_level": "52", - "safespot": null, - "lifepoints": "74", - "strength_level": "1", - "id": "4818", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An evil", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "54", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "0", - "name": "Vyrewatch", - "defence_level": "54", - "safespot": null, - "lifepoints": "77", - "strength_level": "1", - "id": "4819", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An evil", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "56", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "0", - "name": "Vyrewatch", - "defence_level": "56", - "safespot": null, - "lifepoints": "80", - "strength_level": "1", - "id": "4820", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very high-ranking vampyre.", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "70", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "7524", - "name": "Vyrewatch", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "4821", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very high-ranking vampyre.", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "70", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "7524", - "name": "Vyrewatch", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "4822", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very high-ranking vampyre.", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "70", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "7524", - "name": "Vyrewatch", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "4823", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very high-ranking vampyre.", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "70", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "7524", - "name": "Vyrewatch", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "4824", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A thirsty-looking", - "melee_animation": "6783", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "50", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "6861", - "name": "Vyrewatch", - "defence_level": "50", - "safespot": null, - "lifepoints": "71", - "strength_level": "1", - "id": "4825", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A thirsty-looking", - "melee_animation": "6783", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "52", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "6861", - "name": "Vyrewatch", - "defence_level": "52", - "safespot": null, - "lifepoints": "74", - "strength_level": "1", - "id": "4826", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A thirsty-looking", - "melee_animation": "6783", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "54", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "6861", - "name": "Vyrewatch", - "defence_level": "54", - "safespot": null, - "lifepoints": "77", - "strength_level": "1", - "id": "4827", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A thirsty-looking", - "melee_animation": "6783", - "range_animation": "0", - "attack_speed": "6", - "magic_level": "56", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "6861", - "name": "Vyrewatch", - "defence_level": "56", - "safespot": null, - "lifepoints": "80", - "strength_level": "1", - "id": "4828", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "4829", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "4830", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "4831", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "attack_speed": "6", - "id": "4832", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "4833", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "4834", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "4835", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "attack_speed": "6", - "id": "4836", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "4837", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "4838", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "4839", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "attack_speed": "6", - "id": "4840", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "4841", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "4842", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "4843", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "attack_speed": "6", - "id": "4844", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "A very high-ranking vampyre.", - "melee_animation": "7435", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "70", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "7524", - "name": "Flying female vampire", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "1", - "id": "4845", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Flying female vampire", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "4847", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Flying female vampire", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "4848", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "4849", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "4850", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "4851", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "4852", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "Her knives tickle Thok.", - "magic_animation": "0", - "name": "Holgart", - "defence_level": "60", - "safespot": null, - "lifepoints": "28", - "strength_level": "1", - "id": "4868", - "aggressive": "true", - "range_level": "90", - "attack_level": "1", - "defence_animation": "0" - }, - { - "examine": "Not Thok's pretty lass.", - "magic_level": "90", - "defence_animation": "0", - "magic_animation": "0", - "name": "Fisherman", - "defence_level": "60", - "safespot": null, - "lifepoints": "28", - "strength_level": "1", - "id": "4870", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A child of aquatic evil.", - "melee_animation": "4829", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "4830", - "name": "Slug Prince", - "defence_level": "37", - "safespot": null, - "lifepoints": "105", - "strength_level": "37", - "id": "4890", - "aggressive": "true", - "range_level": "1", - "attack_level": "37" - }, - { - "examine": "An extremely vicious lobster.", - "melee_animation": "6265", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "6267", - "name": "Giant Lobster", - "defence_level": "29", - "safespot": null, - "lifepoints": "82", - "strength_level": "29", - "id": "4893", - "aggressive": "true", - "range_level": "1", - "attack_level": "29" - }, - { - "examine": "A rather nasty looking crustacean.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sea slug", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4894", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "164", - "combat_audio": "3520,472,471", - "respawn_delay": "60", - "defence_animation": "163", - "death_animation": "167", - "name": "Hobgoblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "29", - "strength_level": "1", - "id": "4898", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Cordero looks ready to teach you how to cook.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cooking Tutor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4899", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Cadmus, looking a little bit crafty.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Crafting Tutor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4900", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Finlay, mending a crayfish cage.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fishing Tutor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4901", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Monlum, surveying the rocks.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mining Tutor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4902", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Yauchomi, follower of Saradomin.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Prayer Tutor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4903", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Feoras looks a bit fiery.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Smelting Tutor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4904", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Wilfred, a chip off the old block.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Woodcutting Tutor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4906", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Barb, ready to teach you about banking.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bank Tutor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4907", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "His motives are see-through.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fritz the Glassblower", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4909", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An earth elemental.", - "melee_animation": "4868", - "combat_audio": "1531,1533,1532", - "attack_speed": "6", - "magic_level": "10", - "respawn_delay": "5", - "defence_animation": "4869", - "death_animation": "4870", - "name": "Earth elemental", - "defence_level": "35", - "safespot": null, - "lifepoints": "35", - "strength_level": "35", - "id": "4910", - "aggressive": "false", - "range_level": "30", - "attack_level": "20" - }, - { - "examine": "An elemental rock.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "0", - "name": "Elemental rock", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4911", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A nasty overgrown rodent.", - "melee_animation": "4933", - "range_animation": "4933", - "combat_audio": "703,705,704", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4934", - "weakness": "9", - "magic_animation": "4933", - "death_animation": "4935", - "name": "Giant crypt rat", - "defence_level": "65", - "safespot": null, - "lifepoints": "70", - "strength_level": "50", - "id": "4920", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "80" - }, - { - "examine": "A nasty overgrown rodent.", - "melee_animation": "4933", - "range_animation": "4933", - "combat_audio": "703,705,704", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "4934", - "weakness": "9", - "magic_animation": "4933", - "death_animation": "4935", - "name": "Giant crypt rat", - "defence_level": "65", - "safespot": null, - "lifepoints": "70", - "strength_level": "50", - "id": "4921", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "80" - }, - { - "examine": "Overgrown vermin.", - "melee_animation": "4933", - "range_animation": "0", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4934", - "weakness": "8", - "magic_animation": "0", - "death_animation": "4935", - "name": "Giant rat", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "4922", - "aggressive": "true", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "Overgrown vermin.", - "melee_animation": "4933", - "range_animation": "0", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4934", - "weakness": "8", - "magic_animation": "0", - "death_animation": "4935", - "name": "Giant rat", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "4923", - "aggressive": "true", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "Overgrown vermin.", - "melee_animation": "4933", - "range_animation": "0", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4934", - "weakness": "8", - "magic_animation": "0", - "death_animation": "4935", - "name": "Giant rat", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "4924", - "aggressive": "true", - "range_level": "1", - "attack_level": "5" - }, - { - "melee_animation": "4933", - "combat_audio": "703,705,704", - "defence_animation": "4934", - "death_animation": "4935", - "name": "Giant rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4925", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Overgrown vermin.", - "melee_animation": "4933", - "range_animation": "0", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4934", - "weakness": "8", - "magic_animation": "0", - "death_animation": "4935", - "name": "Giant rat", - "defence_level": "7", - "safespot": null, - "lifepoints": "10", - "strength_level": "7", - "id": "4926", - "aggressive": "true", - "range_level": "1", - "attack_level": "7" - }, - { - "examine": "Overgrown vermin.", - "melee_animation": "4933", - "range_animation": "0", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4934", - "weakness": "8", - "magic_animation": "0", - "death_animation": "4935", - "name": "Giant rat", - "defence_level": "7", - "safespot": null, - "lifepoints": "10", - "strength_level": "7", - "id": "4927", - "aggressive": "true", - "range_level": "1", - "attack_level": "7" - }, - { - "examine": "Overgrown vermin.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4934", - "weakness": "8", - "magic_animation": "0", - "death_animation": "4935", - "name": "Dungeon rat", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "13", - "id": "4928", - "aggressive": "true", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "Overgrown vermin.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4934", - "weakness": "8", - "magic_animation": "0", - "death_animation": "4935", - "name": "Dungeon rat", - "defence_level": "13", - "safespot": null, - "lifepoints": "18", - "strength_level": "13", - "id": "4929", - "aggressive": "true", - "range_level": "1", - "attack_level": "13" - }, - { - "examine": "They'll eat anything!", - "melee_animation": "5341", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5343", - "name": "Goat", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "4930", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "They'll eat anything!", - "melee_animation": "5341", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5343", - "name": "Goat", - "defence_level": "5", - "safespot": null, - "lifepoints": "7", - "strength_level": "5", - "id": "4931", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "They'll eat anything!", - "melee_animation": "5341", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5343", - "name": "Billy Goat", - "defence_level": "11", - "safespot": null, - "lifepoints": "15", - "strength_level": "11", - "id": "4932", - "range_level": "1", - "attack_level": "11" - }, - { - "death_animation": "5343", - "name": "Goat", - "defence_level": "1", - "safespot": null, - "lifepoints": "21", - "melee_animation": "5341", - "strength_level": "1", - "id": "4933", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "5342" - }, - { - "death_animation": "5343", - "name": "Goat", - "defence_level": "1", - "safespot": null, - "lifepoints": "21", - "melee_animation": "5341", - "strength_level": "1", - "id": "4934", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "5342" - }, - { - "death_animation": "5343", - "name": "Billy Goat", - "defence_level": "1", - "safespot": null, - "lifepoints": "28", - "melee_animation": "5341", - "strength_level": "1", - "id": "4935", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "5342" - }, - { - "examine": "A dirty rat.", - "melee_animation": "4933", - "range_animation": "0", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "4935", - "name": "Dungeon rat", - "defence_level": "8", - "safespot": null, - "lifepoints": "11", - "strength_level": "8", - "id": "4936", - "aggressive": "true", - "range_level": "1", - "attack_level": "8" - }, - { - "examine": "A dirty rat.", - "melee_animation": "4933", - "range_animation": "0", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "4935", - "name": "Dungeon rat", - "defence_level": "8", - "safespot": null, - "lifepoints": "11", - "strength_level": "8", - "id": "4937", - "aggressive": "true", - "range_level": "1", - "attack_level": "8" - }, - { - "name": "Angry giant rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "4938", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Angry giant rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "4939", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks a little on the cross side!", - "melee_animation": "4933", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "4935", - "name": "Angry giant rat", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "4940", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "It's one of Iban's pet vermin.", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "name": "Blessed giant rat", - "defence_level": "12", - "safespot": null, - "lifepoints": "17", - "strength_level": "12", - "id": "4941", - "range_level": "1", - "attack_level": "12" - }, - { - "melee_animation": "4933", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4934", - "death_animation": "4935", - "name": "Giant rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "4942", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "4933", - "combat_audio": "703,705,704", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4934", - "death_animation": "4935", - "name": "Giant rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "4943", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Overgrown vermin.", - "combat_audio": "703,705,704", - "melee_animation": "4933", - "attack_speed": "5", - "defence_animation": "4934", - "death_animation": "4935", - "name": "Giant rat", - "defence_level": "23", - "safespot": null, - "lifepoints": "26", - "strength_level": "20", - "id": "4944", - "aggressive": "true", - "bonuses": "19,15,15,34,36,38,33,31,30,14,0,0,0,0,0", - "range_level": "1", - "attack_level": "21" - }, - { - "examine": "Overgrown vermin.", - "combat_audio": "703,705,704", - "melee_animation": "4933", - "attack_speed": "5", - "defence_animation": "4934", - "weakness": "9", - "death_animation": "4935", - "name": "Giant rat", - "defence_level": "23", - "safespot": null, - "lifepoints": "26", - "strength_level": "20", - "id": "4945", - "aggressive": "true", - "bonuses": "19,15,15,34,36,38,33,31,30,14,0,0,0,0,0", - "range_level": "1", - "attack_level": "21" - }, - { - "examine": "Trollish.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "My Arm", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4947", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An old sailor.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Barnaby", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4962", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a leprechaun sunbathing on a mountain.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tool Leprechaun", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4965", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A mountain-dwelling bird. Cute", - "melee_animation": "5031", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "5033", - "name": "Baby Roc", - "defence_level": "40", - "safespot": null, - "lifepoints": "100", - "strength_level": "40", - "id": "4971", - "aggressive": "true", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "A very", - "melee_animation": "5024", - "range_animation": "5025", - "magic_level": "55", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "5027", - "name": "Giant Roc", - "defence_level": "55", - "safespot": null, - "lifepoints": "285", - "strength_level": "55", - "id": "4972", - "aggressive": "true", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "It looks like he's been here a long time.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Male slave", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4975", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She looks like she's been down here a long time.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Female slave", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4977", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks a bit aggressive.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Mercenary", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "4989", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He looks a bit aggressive.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Mercenary", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "4990", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He looks a bit aggressive.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Mercenary", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "4991", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He looks a bit aggressive.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Mercenary", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "4992", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He looks a bit aggressive.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "4993", - "clue_level": "1", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He looks a bit aggressive.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "4994", - "clue_level": "1", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He looks a bit aggressive.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "4995", - "clue_level": "1", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He looks a bit aggressive.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "4996", - "clue_level": "1", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He looks a bit aggressive.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "4997", - "clue_level": "1", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He looks a bit aggressive.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Guard", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "4998", - "clue_level": "1", - "range_level": "1", - "attack_level": "25" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "4999", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "5000", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "5001", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "5002", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An apprentice.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Egg launcher", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5026", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A tired old wizard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Egg launcher", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5027", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An egg launcher.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Egg launcher", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5028", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A slightly more approachable barbarian.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Commander Connad", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5029", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks pretty mean.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Cain", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5030", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A stressed out barbarian private.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Private Paldo", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5031", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A barbarian private.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Private Pendron", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5032", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A barbarian private.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Private Pierreb", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5033", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A barbarian private.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Private Paldon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5034", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A barbarian army teacher.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Major Attack", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5035", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A barbarian army teacher.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Major Collect", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5036", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A barbarian army teacher.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Major Defend", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5037", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A barbarian army teacher.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Major Heal", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5038", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's keeping a close eye on that nearby door.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sergeant Sambur", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5039", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "What on Gielinor is that?", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "670,672,671", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Penance Fighter", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5040", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Shooty-shooty.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Penance Ranger", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5041", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's making a run for it!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Penance Runner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5042", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A nasty piece of work.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Penance Healer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5043", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not as strong as Thok.", - "melee_animation": "401", - "range_animation": "0", - "magic_level": "80", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "836", - "name": "Jeff", - "defence_level": "40", - "safespot": null, - "lifepoints": "22", - "strength_level": "80", - "id": "5048", - "aggressive": "true", - "range_level": "80", - "attack_level": "80" - }, - { - "examine": "Time to run away...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shark", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5067", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It blends in very well with its surroundings.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tropical wagtail", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5072", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This bird obviously doesn't believe in subtlety.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Crimson swift", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5073", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Best served ice cold.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cerulean twitch", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5074", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Actually", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Golden warbler", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5075", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Nothing much to get in a flap about.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Copper longtail", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5076", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Chinchompa", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "strength_level": "1", - "id": "5079", - "range_level": "1", - "attack_level": "1", - "death_animation": "5183", - "examine": "Handle with care." - }, - { - "examine": "It looks fluffy and cute; it's probably deadly.", - "melee_animation": "0", - "range_animation": "0", - "magic_level": "2", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "5183", - "name": "Carnivorous chinchompa", - "defence_level": "2", - "safespot": null, - "lifepoints": "10", - "strength_level": "2", - "id": "5080", - "range_level": "2", - "attack_level": "2" - }, - { - "examine": "Wild.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ferret", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5081", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A black warlock. The air seems to distort wherever it passes.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Black warlock", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5082", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a snowy knight butterfly.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Snowy knight", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5083", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A sapphire glacialis. It doesn't look as pretentious as its name sounds.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sapphire glacialis", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5084", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a ruby harvest butterfly.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ruby harvest", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5085", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Curls up into a ball to protect itself from attack.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Prickly kebbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5086", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Now that's a big overbite.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sabre-toothed kebbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5087", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It uses its tail to hunt and skewer fish.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Barb-tailed kebbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5088", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "That's a mean looking set of claws.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Wild kebbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5089", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Ha! Thok much stronger.", - "melee_animation": "395", - "range_animation": "0", - "magic_level": "80", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "836", - "name": "Gyr Falcon", - "defence_level": "40", - "safespot": null, - "lifepoints": "22", - "strength_level": "80", - "id": "5097", - "aggressive": "true", - "range_level": "80", - "attack_level": "80" - }, - { - "examine": "It seems to be on a permanent sugar rush.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Spotted kebbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5098", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Quieter than a ninja mouse with slippers on.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dark kebbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5099", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Now you see it; now you don't.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dashing kebbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5100", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's just like a big, white, furry, deadly can opener.", - "melee_animation": "5228", - "range_animation": "5228", - "attack_speed": "5", - "respawn_delay": "10", - "defence_animation": "404", - "magic_animation": "5228", - "death_animation": "5234", - "name": "Sabre-toothed kyatt", - "defence_level": "99", - "safespot": null, - "lifepoints": "10", - "strength_level": "25", - "id": "5103", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "If you tried to ride that, you'd just impale yourself!", - "melee_animation": "5228", - "range_animation": "5228", - "attack_speed": "5", - "defence_animation": "404", - "magic_animation": "5228", - "death_animation": "5234", - "name": "Spined larupia", - "defence_level": "99", - "safespot": null, - "lifepoints": "10", - "strength_level": "15", - "id": "5104", - "range_level": "1", - "attack_level": "15" - }, - { - "examine": "Get in a graahk's way and you're going to know about it... however briefly.", - "melee_animation": "5228", - "range_animation": "5228", - "attack_speed": "5", - "defence_animation": "404", - "magic_animation": "5228", - "death_animation": "5234", - "name": "Horned graahk", - "defence_level": "99", - "safespot": null, - "lifepoints": "10", - "strength_level": "25", - "id": "5105", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "It's just like a big, white, furry, deadly can opener.", - "melee_animation": "5228", - "range_animation": "5228", - "attack_speed": "5", - "defence_animation": "404", - "magic_animation": "5228", - "death_animation": "9055", - "name": "null", - "defence_level": "40", - "safespot": null, - "lifepoints": "10", - "strength_level": "20", - "id": "5106", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "He must be good at hunting; even his hair blends in with the surroundings.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Hunting expert", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5112", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "With all the furs", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Hunting expert", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5113", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Slightly slimy but kind of cute.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Orange salamander", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5114", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Slightly slimy but certainly striking.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Red salamander", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5115", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Slightly slimy and somewhat menacing.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Black salamander", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5116", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Very slimy and generally disgusting.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Swamp lizard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5117", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very large", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Eagle", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5120", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very large", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Desert eagle", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5130", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very large", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Jungle eagle", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5131", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very large", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Polar eagle", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5132", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It seems to be protecting the nest.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Eagle", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5133", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Kebbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "melee_animation": "5304", - "strength_level": "1", - "id": "5137", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "5305" - }, - { - "examine": "Now", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Boulder", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5140", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's playing both sides!", - "melee_animation": "422", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "75", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Double agent", - "defence_level": "75", - "safespot": null, - "lifepoints": "85", - "strength_level": "75", - "id": "5144", - "aggressive": "true", - "range_level": "1", - "attack_level": "75" - }, - { - "melee_animation": "422", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Double agent", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "id": "5145", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "How cute!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Li'l lamb", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5146", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The black sheep of the family.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Lamb", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5147", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "White and fluffy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sheep", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5162", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "White and fluffy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sheep", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5163", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "White and fluffy", - "name": "Sheep", - "id": "5164" - }, - { - "examine": "This goat belongs to the mountain camp people.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mountain Goat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5166", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This goat belongs to the mountain camp people.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mountain Goat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5167", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "White and fluffy.", - "melee_animation": "5338", - "combat_audio": "757,759,758", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5337", - "weakness": "9", - "death_animation": "5336", - "name": "Ram", - "defence_level": "1", - "safespot": null, - "lifepoints": "8", - "strength_level": "1", - "id": "5168", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "White and fluffy.", - "melee_animation": "5338", - "combat_audio": "757,759,758", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5337", - "weakness": "9", - "death_animation": "5336", - "name": "Ram", - "defence_level": "1", - "safespot": null, - "lifepoints": "8", - "strength_level": "1", - "id": "5169", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "White and fluffy.", - "melee_animation": "5338", - "range_animation": "0", - "combat_audio": "757,759,758", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5337", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5336", - "name": "Ram", - "defence_level": "1", - "safespot": null, - "lifepoints": "8", - "strength_level": "1", - "id": "5170", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This beast doesn't need climbing boots.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mountain goat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5171", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Freshly shorn.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Golden sheep", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5172", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Lovely thick wool.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Golden sheep", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5173", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seems intelligent... for an ogre.", - "combat_style": "2", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "name": "Ogre shaman", - "defence_level": "65", - "safespot": null, - "lifepoints": "371", - "strength_level": "65", - "id": "5176", - "aggressive": "true", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "A mother dragon.", - "melee_animation": "80", - "range_animation": "80", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "35", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "108", - "magic_animation": "80", - "death_animation": "92", - "name": "Blue dragon", - "defence_level": "95", - "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "5178", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "95" - }, - { - "examine": "Seems intelligent... for an ogre.", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "name": "Ogre shaman", - "defence_level": "65", - "safespot": null, - "lifepoints": "371", - "strength_level": "65", - "id": "5181", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "Seems intelligent... for an ogre.", - "combat_style": "2", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "name": "Ogre shaman", - "defence_level": "65", - "safespot": null, - "lifepoints": "371", - "strength_level": "65", - "id": "5184", - "aggressive": "true", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "Seems intelligent... for an ogre.", - "combat_style": "2", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "name": "Ogre shaman", - "defence_level": "65", - "safespot": null, - "lifepoints": "371", - "strength_level": "65", - "id": "5187", - "aggressive": "true", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "It's Nial", - "melee_animation": "8946", - "range_animation": "0", - "magic_level": "58", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8948", - "name": "Saff Waldon", - "defence_level": "58", - "safespot": null, - "lifepoints": "165", - "strength_level": "58", - "id": "5188", - "aggressive": "true", - "range_level": "58", - "attack_level": "58" - }, - { - "examine": "Seems intelligent. For an ogre.", - "combat_style": "2", - "name": "Ogre shaman", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "strength_level": "1", - "id": "5190", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "Seems intelligent. For an ogre.", - "combat_style": "2", - "name": "Ogre shaman", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "strength_level": "1", - "id": "5193", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "A wizard.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Wizard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5195", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A wizard.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Wizard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5196", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A wizard.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Wizard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5197", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She needs to work out before facing Thok.", - "melee_animation": "7041", - "range_animation": "0", - "magic_level": "80", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "836", - "name": "Alice's husband", - "defence_level": "40", - "safespot": null, - "lifepoints": "22", - "strength_level": "80", - "id": "5204", - "aggressive": "true", - "range_level": "80", - "attack_level": "80" - }, - { - "examine": "It's an undead cow.", - "melee_animation": "5849", - "range_animation": "5849", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "5", - "defence_animation": "5850", - "magic_animation": "5849", - "death_animation": "5851", - "name": "Undead cow", - "defence_level": "1", - "safespot": null, - "lifepoints": "8", - "strength_level": "1", - "id": "5211", - "aggressive": "false", - "bonuses": "-15,-15,-15,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Shooty-shooty.", - "combat_style": "1", - "melee_animation": "5395", - "respawn_delay": "60", - "defence_animation": "5396", - "death_animation": "5937", - "name": "Penance Ranger", - "defence_level": "1", - "strength_level": "1", - "id": "5229", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Shooty-shooty.", - "combat_style": "1", - "melee_animation": "5395", - "respawn_delay": "60", - "defence_animation": "5396", - "death_animation": "5397", - "name": "Penance Ranger", - "defence_level": "1", - "lifepoints": "10", - "strength_level": "1", - "id": "5230", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Shooty-shooty.", - "combat_style": "1", - "melee_animation": "5395", - "respawn_delay": "60", - "defence_animation": "5396", - "death_animation": "5397", - "name": "Penance Ranger", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5237", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Run away! Run away!", - "melee_animation": "5411", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "5412", - "name": "Penance Queen", - "defence_level": "132", - "safespot": null, - "lifepoints": "71", - "strength_level": "260", - "id": "5247", - "aggressive": "true", - "range_level": "116", - "attack_level": "260" - }, - { - "examine": "What's it looking at?", - "melee_animation": "5092", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "5093", - "name": "Queen spawn", - "defence_level": "50", - "safespot": null, - "lifepoints": "450", - "strength_level": "60", - "id": "5248", - "aggressive": "true", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "He looks embarrassed", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain Errdo", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5249", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Part scarab, part man.", - "combat_style": "2", - "melee_animation": "7615", - "range_animation": "0", - "magic_level": "54", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "7616", - "name": "Scarab mage", - "defence_level": "54", - "safespot": null, - "lifepoints": "77", - "strength_level": "40", - "id": "5250", - "aggressive": "true", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "A mounted lancer.", - "melee_animation": "7584", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "7581", - "name": "Locust rider", - "defence_level": "54", - "safespot": null, - "lifepoints": "77", - "strength_level": "54", - "id": "5251", - "aggressive": "true", - "range_level": "1", - "attack_level": "54" - }, - { - "examine": "A mounted archer.", - "melee_animation": "5451", - "range_animation": "5451", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "7581", - "name": "Locust rider", - "defence_level": "54", - "safespot": null, - "lifepoints": "77", - "strength_level": "40", - "id": "5252", - "aggressive": "true", - "range_level": "54", - "attack_level": "40" - }, - { - "examine": "A huge scarab beast.", - "melee_animation": "5457", - "range_animation": "0", - "magic_level": "62", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "5456", - "name": "Giant scarab", - "defence_level": "62", - "safespot": null, - "lifepoints": "571", - "strength_level": "62", - "id": "5253", - "aggressive": "true", - "range_level": "62", - "attack_level": "62" - }, - { - "examine": "Part scarab, part man.", - "combat_style": "2", - "melee_animation": "7615", - "respawn_delay": "60", - "defence_animation": "7617", - "death_animation": "7616", - "name": "Scarab mage", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "5254", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He can look after my money.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5258", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She can look after my money.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5260", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guard of Sophanem.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sophanem guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5270", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guard of Sophanem.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sophanem guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5274", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guard of Menaphos.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Menaphite guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5277", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Flings annoying splinters at Thok.", - "melee_animation": "426", - "range_animation": "426", - "magic_level": "80", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "836", - "name": "Osman", - "defence_level": "40", - "safespot": null, - "lifepoints": "22", - "strength_level": "80", - "id": "5285", - "aggressive": "true", - "range_level": "80", - "attack_level": "80" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "5293", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "5294", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "5295", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "5296", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "5297", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "5298", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "5299", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "5300", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "5301", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "5302", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "5303", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "5304", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "range_animation": "5568", - "combat_audio": "931,923,922", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "5567", - "slayer_exp": "30", - "magic_animation": "5568", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "10", - "safespot": null, - "lifepoints": "18", - "strength_level": "1", - "id": "5305", - "bonuses": "6,15,15,15,15,15,15,6,6,15,15,15,15,15,15", - "range_level": "1", - "attack_level": "11" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "5306", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "range_animation": "5568", - "combat_audio": "931,923,922", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "5567", - "slayer_exp": "30", - "magic_animation": "5568", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "10", - "safespot": null, - "lifepoints": "18", - "strength_level": "1", - "id": "5307", - "bonuses": "6,15,15,15,15,15,15,6,6,15,15,15,15,15,15", - "range_level": "1", - "attack_level": "11" - }, - { - "examine": "Brains!", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "24", - "strength_level": "1", - "id": "5308", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Brains!", - "melee_animation": "5571", - "range_animation": "5571", - "combat_audio": "931,923,922", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "5574", - "slayer_exp": "30", - "magic_animation": "5571", - "death_animation": "5575", - "name": "Zombie", - "defence_level": "16", - "safespot": null, - "lifepoints": "40", - "strength_level": "1", - "id": "5309", - "bonuses": "10,15,16,16,15,16,16,10,10,16,15,15,15,15,15", - "range_level": "1", - "attack_level": "15" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "24", - "strength_level": "1", - "id": "5310", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "24", - "strength_level": "1", - "id": "5311", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "24", - "strength_level": "1", - "id": "5312", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "24", - "strength_level": "1", - "id": "5313", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5314", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5315", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5316", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5317", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5318", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Examine not added", - "melee_animation": "5571", - "range_animation": "5571", - "combat_audio": "931,923,922", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "5574", - "slayer_exp": "30", - "magic_animation": "5571", - "death_animation": "5575", - "name": "Zombie", - "defence_level": "20", - "safespot": null, - "lifepoints": "40", - "strength_level": "1", - "id": "5319", - "bonuses": "12,20,20,20,20,20,20,12,12,20,20,20,20,20,20", - "range_level": "1", - "attack_level": "15" - }, - { - "examine": "Examine not added", - "melee_animation": "5571", - "range_animation": "5571", - "combat_audio": "931,923,922", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "5574", - "slayer_exp": "30", - "magic_animation": "5571", - "death_animation": "5575", - "name": "Zombie", - "defence_level": "20", - "safespot": null, - "lifepoints": "40", - "strength_level": "1", - "id": "5320", - "bonuses": "12,20,20,20,20,20,20,12,12,20,20,20,20,20,20", - "range_level": "1", - "attack_level": "18" - }, - { - "examine": "Examine not added", - "melee_animation": "5571", - "range_animation": "5571", - "combat_audio": "931,923,922", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "5574", - "slayer_exp": "30", - "magic_animation": "5571", - "death_animation": "5575", - "name": "Zombie", - "defence_level": "20", - "safespot": null, - "lifepoints": "40", - "strength_level": "1", - "id": "5321", - "bonuses": "12,20,20,20,20,20,20,12,12,20,20,20,20,20,20", - "range_level": "1", - "attack_level": "18" - }, - { - "examine": "Dead man walking.", - "melee_animation": "5571", - "range_animation": "5571", - "combat_audio": "931,923,922", - "attack_speed": "5", - "defence_animation": "5574", - "slayer_exp": "30", - "magic_animation": "5571", - "death_animation": "5575", - "name": "Zombie", - "defence_level": "23", - "safespot": null, - "lifepoints": "30", - "strength_level": "19", - "id": "5322", - "aggressive": "true", - "bonuses": "21,19,20,42,44,34,41,38,40,21,0,0,0,0,0", - "range_level": "1", - "attack_level": "20" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5323", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5324", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5325", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5326", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5327", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5328", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5329", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "", - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5330", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5331", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eeek! A ghost!", - "melee_animation": "5532", - "range_animation": "0", - "combat_audio": "436,439,438", - "attack_speed": "5", - "magic_level": "18", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "slayer_exp": "25", - "magic_animation": "0", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "18", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "5342", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eeek! A ghost!", - "melee_animation": "5532", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5533", - "slayer_exp": "25", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "5343", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eeek! A ghost!", - "melee_animation": "5532", - "range_animation": "0", - "combat_audio": "436,439,438", - "attack_speed": "5", - "magic_level": "18", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "slayer_exp": "25", - "magic_animation": "0", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "18", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "5344", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eeek! A ghost!", - "melee_animation": "5532", - "range_animation": "0", - "combat_audio": "436,439,438", - "attack_speed": "5", - "magic_level": "18", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "slayer_exp": "25", - "magic_animation": "0", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "18", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "5345", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eeek! A ghost!", - "melee_animation": "5532", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5533", - "slayer_exp": "25", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "5346", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eeek! A ghost!", - "melee_animation": "5532", - "range_animation": "0", - "combat_audio": "436,439,438", - "attack_speed": "5", - "magic_level": "18", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "slayer_exp": "25", - "magic_animation": "0", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "18", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "5347", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eeek! A ghost!", - "melee_animation": "5532", - "range_animation": "0", - "combat_audio": "436,439,438", - "attack_speed": "5", - "magic_level": "18", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "slayer_exp": "25", - "magic_animation": "0", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "18", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "5348", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eeek! A ghost!", - "melee_animation": "5532", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5533", - "slayer_exp": "25", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "5349", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eeek! A ghost!", - "melee_animation": "5532", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5533", - "slayer_exp": "25", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "5350", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eeek! A ghost!", - "melee_animation": "5532", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5533", - "slayer_exp": "25", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "5351", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eeek! A ghost!", - "melee_animation": "5532", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5533", - "slayer_exp": "25", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "5352", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A minion of Rashiliyia.", - "melee_animation": "5485", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Undead one", - "defence_level": "32", - "safespot": null, - "lifepoints": "45", - "strength_level": "32", - "id": "5353", - "aggressive": "true", - "range_level": "1", - "attack_level": "32" - }, - { - "examine": "A minion of Rashiliyia.", - "melee_animation": "5487", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Undead one", - "defence_level": "33", - "safespot": null, - "lifepoints": "47", - "strength_level": "33", - "id": "5354", - "range_level": "1", - "attack_level": "33" - }, - { - "examine": "The animated dead; one of Rashiliyia's minions.", - "melee_animation": "5568", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5569", - "name": "Undead one", - "defence_level": "32", - "safespot": null, - "lifepoints": "45", - "strength_level": "32", - "id": "5355", - "aggressive": "true", - "range_level": "1", - "attack_level": "32" - }, - { - "examine": "The animated dead; one of Rashiliyia's minions.", - "melee_animation": "5568", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5569", - "name": "Undead one", - "defence_level": "32", - "safespot": null, - "lifepoints": "45", - "strength_level": "32", - "id": "5356", - "aggressive": "true", - "range_level": "1", - "attack_level": "32" - }, - { - "examine": "The animated dead; one of Rashiliyia's minions.", - "melee_animation": "5571", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5575", - "name": "Undead one", - "defence_level": "33", - "safespot": null, - "lifepoints": "47", - "strength_level": "33", - "id": "5357", - "aggressive": "true", - "range_level": "1", - "attack_level": "33" - }, - { - "examine": "The animated dead; one of Rashiliyia's minions.", - "melee_animation": "5571", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5575", - "name": "Undead one", - "defence_level": "33", - "safespot": null, - "lifepoints": "47", - "strength_level": "33", - "id": "5358", - "aggressive": "true", - "range_level": "1", - "attack_level": "33" - }, - { - "examine": "A giant skeleton.", - "melee_animation": "5499", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5503", - "name": "Giant skeleton", - "defence_level": "60", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "5359", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "A fiendish embodiment of water.", - "combat_style": "1", - "melee_animation": "299", - "range_animation": "299", - "combat_audio": "3774,3773,3772", - "attack_speed": "4", - "magic_level": "105", - "defence_animation": "301", - "weakness": "4", - "magic_animation": "299", - "death_animation": "300", - "name": "Waterfiend", - "defence_level": "128", - "poison_immune": "true", - "safespot": null, - "lifepoints": "128", - "strength_level": "0", - "id": "5361", - "aggressive": "true", - "bonuses": "0,0,0,0,0,100,100,10,100,100,0,0,0,0,0", - "range_level": "105", - "projectile": "16", - "attack_level": "0" - }, - { - "examine": "It appears to be intelligent and savage.", - "melee_animation": "91", - "range_animation": "91", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "168", - "defence_animation": "89", - "weakness": "3", - "slayer_exp": "183", - "magic_animation": "91", - "death_animation": "92", - "name": "Brutal green dragon", - "defence_level": "168", - "poison_immune": "true", - "safespot": null, - "lifepoints": "175", - "strength_level": "168", - "id": "5362", - "aggressive": "true", - "clue_level": "2", - "range_level": "0", - "attack_level": "268" - }, - { - "examine": "Experimenting with mithril gone bad!", - "melee_animation": "91", - "range_animation": "91", - "combat_audio": "408,410,409", - "attack_speed": "4", - "magic_level": "168", - "respawn_delay": "30", - "defence_animation": "89", - "weakness": "8", - "slayer_exp": "273", - "magic_animation": "91", - "death_animation": "92", - "name": "Mithril dragon", - "defence_level": "268", - "safespot": null, - "lifepoints": "254", - "strength_level": "268", - "id": "5363", - "aggressive": "true", - "bonuses": "0,0,0,0,0,50,100,70,30,90,0,0,0,0,0", - "clue_level": "2", - "range_level": "168", - "attack_level": "268" - }, - { - "weakness": "7", - "examine": "It appears to be intelligent and savage.", - "name": "Confused barbarian", - "defence_level": "50", - "safespot": null, - "lifepoints": "175", - "strength_level": "167", - "attack_speed": "6", - "id": "5364", - "range_level": "167", - "attack_level": "70" - }, - { - "examine": "Eeek! A ghost!", - "melee_animation": "5532", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5533", - "slayer_exp": "25", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "36", - "strength_level": "1", - "id": "5369", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eeek! A ghost!", - "melee_animation": "5532", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5533", - "slayer_exp": "25", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "36", - "strength_level": "1", - "id": "5370", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eeek! A ghost!", - "melee_animation": "5532", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5533", - "slayer_exp": "25", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "36", - "strength_level": "1", - "id": "5371", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Why does it attack with twigs? Swords and axes much better.", - "melee_animation": "5532", - "range_animation": "426", - "combat_audio": "436,439,438", - "magic_level": "80", - "defence_animation": "5533", - "weakness": "10", - "slayer_exp": "25", - "magic_animation": "0", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "40", - "safespot": null, - "lifepoints": "36", - "strength_level": "80", - "id": "5372", - "aggressive": "true", - "range_level": "80", - "attack_level": "80" - }, - { - "examine": "Are these twigs meant to hurt Thok?", - "melee_animation": "5532", - "range_animation": "426", - "combat_audio": "436,439,438", - "magic_level": "80", - "defence_animation": "5533", - "weakness": "10", - "slayer_exp": "25", - "magic_animation": "0", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "40", - "safespot": null, - "lifepoints": "36", - "strength_level": "80", - "id": "5373", - "aggressive": "true", - "range_level": "80", - "attack_level": "80" - }, - { - "examine": "It thinks it scary. Thok show it scary.", - "melee_animation": "5532", - "range_animation": "0", - "combat_audio": "436,439,438", - "magic_level": "80", - "defence_animation": "5533", - "weakness": "10", - "slayer_exp": "25", - "magic_animation": "0", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "70", - "safespot": null, - "lifepoints": "36", - "strength_level": "80", - "id": "5374", - "aggressive": "true", - "range_level": "80", - "attack_level": "80" - }, - { - "examine": "Dead man walking.", - "melee_animation": "5568", - "range_animation": "5568", - "combat_audio": "918,923,922", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "5567", - "slayer_exp": "30", - "magic_animation": "5568", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "25", - "safespot": null, - "lifepoints": "23", - "strength_level": "1", - "id": "5375", - "aggressive": "true", - "bonuses": "15,25,25,25,25,25,25,15,15,25,25,25,25,25,25", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "Dead man walking.", - "melee_animation": "5568", - "range_animation": "5568", - "combat_audio": "918,923,922", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "5567", - "slayer_exp": "30", - "magic_animation": "5568", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "25", - "safespot": null, - "lifepoints": "23", - "strength_level": "1", - "id": "5376", - "aggressive": "true", - "bonuses": "15,25,25,25,25,25,25,15,15,25,25,25,25,25,25", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "Dead man walking.", - "melee_animation": "5578", - "range_animation": "5578", - "combat_audio": "918,923,922", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "5579", - "slayer_exp": "30", - "magic_animation": "5578", - "death_animation": "5580", - "name": "Zombie", - "defence_level": "28", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5377", - "aggressive": "true", - "bonuses": "15,25,28,28,25,28,28,15,15,28,25,25,25,25,25", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "Dead man walking.", - "melee_animation": "5578", - "range_animation": "5578", - "combat_audio": "918,923,922", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "5579", - "slayer_exp": "30", - "magic_animation": "5578", - "death_animation": "5580", - "name": "Zombie", - "defence_level": "28", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "5378", - "aggressive": "true", - "bonuses": "15,25,28,28,25,28,28,15,15,28,25,25,25,25,25", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "The walking dead.", - "melee_animation": "5578", - "range_animation": "5578", - "combat_audio": "918,923,922", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "5579", - "slayer_exp": "30", - "magic_animation": "5578", - "death_animation": "5580", - "name": "Zombie", - "defence_level": "48", - "safespot": null, - "lifepoints": "40", - "strength_level": "1", - "id": "5379", - "aggressive": "true", - "bonuses": "35,45,45,45,45,45,45,35,35,45,45,45,45,45,45", - "range_level": "1", - "attack_level": "47" - }, - { - "examine": "The walking dead.", - "melee_animation": "5578", - "range_animation": "5578", - "combat_audio": "918,923,922", - "attack_speed": "5", - "respawn_delay": "30", - "defence_animation": "5579", - "slayer_exp": "30", - "magic_animation": "5578", - "death_animation": "5580", - "name": "Zombie", - "defence_level": "48", - "safespot": null, - "lifepoints": "40", - "strength_level": "1", - "id": "5380", - "aggressive": "true", - "bonuses": "35,45,45,45,45,45,45,35,35,45,45,45,45,45,45", - "range_level": "1", - "attack_level": "47" - }, - { - "examine": "Animated steel armour.", - "melee_animation": "386", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "4167", - "name": "Animated steel armour", - "defence_level": "28", - "safespot": null, - "lifepoints": "40", - "strength_level": "28", - "id": "5382", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "Big and bony, just how I like them.", - "start_gfx": "2713", - "melee_animation": "5499", - "range_animation": "5499", - "attack_speed": "2", - "defence_animation": "5489", - "magic_animation": "5499", - "death_animation": "5503", - "name": "Giant skeleton", - "defence_level": "85", - "poison_immune": "true", - "safespot": null, - "lifepoints": "100", - "strength_level": "95", - "id": "5384", - "aggressive": "true", - "bonuses": "25,25,25,25,25,25,25,25,25,25,25,25,25,25,25", - "range_level": "1", - "projectile": "2718", - "attack_level": "95" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "56", - "strength_level": "1", - "id": "5393", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "combat_audio": "931,923,922", - "melee_animation": "5578", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "strength_level": "1", - "id": "5394", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "5395", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "5396", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "5397", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "5398", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "5399", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "5400", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "5401", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "5402", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "5403", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5568", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5567", - "slayer_exp": "30", - "death_animation": "5569", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "92", - "strength_level": "1", - "id": "5404", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "5405", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "5406", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "5407", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "5408", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "5409", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "5410", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "How does it move of its own accord?", - "melee_animation": "5591", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5592", - "name": "Possessed pickaxe", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "55", - "id": "5413", - "aggressive": "true", - "range_level": "1", - "attack_level": "55" - }, - { - "examine": "How does it move of its own accord?", - "melee_animation": "5597", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5596", - "name": "Animated spade", - "defence_level": "52", - "safespot": null, - "lifepoints": "74", - "strength_level": "52", - "id": "5414", - "range_level": "1", - "attack_level": "52" - }, - { - "examine": "A terrifying dog beast.", - "melee_animation": "5625", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "5628", - "name": "Terror dog", - "defence_level": "47", - "safespot": null, - "lifepoints": "134", - "strength_level": "47", - "id": "5417", - "aggressive": "true", - "range_level": "1", - "attack_level": "47" - }, - { - "melee_animation": "5625", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5626", - "death_animation": "5627", - "name": "Terror dog", - "defence_level": "1", - "safespot": null, - "lifepoints": "82", - "strength_level": "1", - "id": "5418", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5617", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "5618", - "death_animation": "5619", - "name": "Tarn", - "defence_level": "1", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "5420", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I preferred him when he was human.", - "melee_animation": "5617", - "range_animation": "0", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5619", - "name": "Mutant tarn", - "defence_level": "57", - "safespot": null, - "lifepoints": "325", - "strength_level": "57", - "id": "5421", - "aggressive": "true", - "range_level": "1", - "attack_level": "57" - }, - { - "examine": "What restful music!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "null", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5439", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "What restful music!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "KGP Agent", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5442", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Instructs agility.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Agility Instructor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5447", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An army commander.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Army Commander", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5448", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Sturdy cold being.", - "melee_animation": "5724", - "range_animation": "5725", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "5726", - "name": "Icelord", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "22", - "id": "5452", - "aggressive": "true", - "range_level": "30", - "attack_level": "22" - }, - { - "examine": "Sturdy cold being.", - "melee_animation": "5724", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5726", - "name": "Icelord", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "5453", - "aggressive": "true", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Sturdy cold being.", - "melee_animation": "5724", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5726", - "name": "Icelord", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "5454", - "aggressive": "true", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Sturdy cold being.", - "melee_animation": "5724", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "5726", - "name": "Icelord", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "5455", - "aggressive": "true", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "An impressive-looking troll.", - "melee_animation": "5374", - "range_animation": "0", - "magic_level": "65", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "5209", - "name": "Ice Troll King", - "defence_level": "65", - "safespot": null, - "lifepoints": "185", - "strength_level": "65", - "id": "5472", - "aggressive": "true", - "range_level": "65", - "attack_level": "65" - }, - { - "examine": "An ice troll youngling.", - "range_animation": "0", - "melee_animation": "284", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll runt", - "defence_level": "70", - "safespot": null, - "lifepoints": "60", - "strength_level": "70", - "id": "5473", - "aggressive": "true", - "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "A male troll wielding a large club.", - "range_animation": "0", - "melee_animation": "284", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll male", - "defence_level": "40", - "safespot": null, - "lifepoints": "80", - "strength_level": "80", - "id": "5474", - "aggressive": "true", - "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", - "range_level": "1", - "attack_level": "80" - }, - { - "examine": "An ice troll with a bag of rocks.", - "combat_style": "1", - "range_animation": "1142", - "melee_animation": "1142", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "0", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll female", - "defence_level": "40", - "safespot": null, - "lifepoints": "80", - "strength_level": "80", - "id": "5475", - "aggressive": "true", - "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", - "range_level": "1", - "projectile": "276", - "attack_level": "80" - }, - { - "examine": "A large ice troll.", - "melee_animation": "4332", - "range_animation": "0", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "name": "Ice troll grunt", - "defence_level": "60", - "safespot": null, - "lifepoints": "80", - "strength_level": "100", - "id": "5476", - "aggressive": "true", - "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", - "range_level": "1", - "attack_level": "100" - }, - { - "examine": "An ill-tempered king.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "King Gjuki Sorvott IV", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5478", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Thorkel Silkbeard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "498,500,499", - "strength_level": "1", - "id": "5480", - "range_level": "1", - "attack_level": "1" - }, - { - "facing_booth": "true", - "name": "Magnus Gram", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "498,500,499", - "strength_level": "1", - "id": "5488", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guard on insult duty.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5489", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "5490", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "5491", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of King Sorvott's militia.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5492", - "aggressive": "true", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A miner at work.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Miner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5497", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Burgher's protectors.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "0", - "name": "Honour guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5514", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Burgher's protectors.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "0", - "name": "Honour guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5516", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of your militia.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "0", - "name": "Honour guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5517", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ice troll youngling.", - "range_animation": "0", - "melee_animation": "284", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll runt", - "defence_level": "70", - "safespot": null, - "lifepoints": "60", - "strength_level": "70", - "id": "5521", - "aggressive": "true", - "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "A male troll wielding a large club.", - "range_animation": "0", - "melee_animation": "284", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll male", - "defence_level": "40", - "safespot": null, - "lifepoints": "80", - "strength_level": "80", - "id": "5522", - "aggressive": "true", - "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", - "range_level": "1", - "attack_level": "80" - }, - { - "examine": "An ice troll with a bag of rocks.", - "combat_style": "1", - "range_animation": "1142", - "melee_animation": "1142", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "0", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll female", - "defence_level": "40", - "safespot": null, - "lifepoints": "80", - "strength_level": "80", - "id": "5523", - "aggressive": "true", - "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", - "range_level": "1", - "projectile": "276", - "attack_level": "80" - }, - { - "examine": "An ice troll youngling.", - "range_animation": "0", - "melee_animation": "284", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll runt", - "defence_level": "70", - "safespot": null, - "lifepoints": "60", - "strength_level": "70", - "id": "5525", - "aggressive": "true", - "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "A male troll wielding a large club.", - "range_animation": "0", - "melee_animation": "284", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "9", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll male", - "defence_level": "40", - "safespot": null, - "lifepoints": "80", - "strength_level": "80", - "id": "5526", - "aggressive": "true", - "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", - "range_level": "1", - "attack_level": "80" - }, - { - "examine": "An ice troll with a bag of rocks.", - "combat_style": "1", - "range_animation": "1142", - "melee_animation": "1142", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "285", - "weakness": "0", - "magic_animation": "0", - "death_animation": "287", - "name": "Ice troll female", - "defence_level": "40", - "safespot": null, - "lifepoints": "80", - "strength_level": "80", - "id": "5527", - "aggressive": "true", - "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", - "range_level": "1", - "projectile": "276", - "attack_level": "80" - }, - { - "examine": "A hairy, smelly, grazing animal.", - "melee_animation": "5782", - "range_animation": "5782", - "combat_audio": "3378,3380,3379", - "attack_speed": "4", - "defence_animation": "5783", - "weakness": "7", - "magic_animation": "5782", - "death_animation": "5784", - "name": "Yak", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "10", - "id": "5529", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "Antisocial.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sorceress", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5531", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Come", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Apprentice", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5532", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An autumn elemental.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Autumn Elemental", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5533", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A spring elemental.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Spring Elemental", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5539", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A summer elemental.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Summer Elemental", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5547", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A winter elemental.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Winter Elemental", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5553", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It dare attack Pretty Lass? Thok crush its puny skull!", - "range_animation": "0", - "magic_level": "95", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "name": "Osman", - "defence_level": "50", - "safespot": null, - "lifepoints": "157", - "strength_level": "95", - "id": "5561", - "aggressive": "true", - "range_level": "95", - "attack_level": "95" - }, - { - "examine": "She's honest about the things you aren't.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sin Seer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5571", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Shadow Realm guardian.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "436,439,438", - "defence_animation": "0", - "slayer_exp": "25", - "magic_animation": "0", - "death_animation": "0", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5572", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Is it male or female?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Homunculus", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5581", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Strong", - "range_animation": "0", - "magic_level": "95", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "name": "Cage", - "defence_level": "70", - "safespot": null, - "lifepoints": "85", - "strength_level": "95", - "id": "5584", - "aggressive": "true", - "range_level": "95", - "attack_level": "95" - }, - { - "examine": "Famous for his fights.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "'Black-eye", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5589", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Count them pinkies!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "'No fingers", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5590", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He wishes he had teeth.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "'Gummy", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5591", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Is it a frog", - "melee_animation": "5842", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "5841", - "name": "Frogeel", - "defence_level": "49", - "safespot": null, - "lifepoints": "70", - "strength_level": "36", - "id": "5593", - "aggressive": "true", - "range_level": "49", - "attack_level": "36" - }, - { - "death_animation": "146", - "name": "Spidine", - "defence_level": "1", - "safespot": null, - "lifepoints": "35", - "melee_animation": "143", - "strength_level": "1", - "id": "5594", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "144" - }, - { - "examine": "Definitely not a chicken or a swordfish.", - "melee_animation": "5387", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "5389", - "name": "Swordchick", - "defence_level": "45", - "safespot": null, - "lifepoints": "64", - "strength_level": "45", - "id": "5595", - "range_level": "1", - "attack_level": "45" - }, - { - "melee_animation": "6800", - "respawn_delay": "60", - "defence_animation": "6802", - "death_animation": "6801", - "name": "Jubster", - "defence_level": "1", - "safespot": null, - "lifepoints": "60", - "strength_level": "1", - "id": "5596", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Since when did newts have beaks?", - "melee_animation": "2299", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "2301", - "name": "Newtroost", - "defence_level": "40", - "safespot": null, - "lifepoints": "57", - "strength_level": "40", - "id": "5597", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Half unicorn", - "melee_animation": "5849", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "41", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "5851", - "name": "Unicow", - "defence_level": "41", - "safespot": null, - "lifepoints": "58", - "strength_level": "30", - "id": "5603", - "aggressive": "true", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Holier than thou.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Monk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5608", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Holier than thou.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Monk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5609", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Holier than thou.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Monk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5610", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Holier than thou.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Monk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5611", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I'd prefer it if it were a muffin...", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Puffin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5614", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "5619", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "5620", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "5621", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "5622", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Bedside manner is a little lacking", - "melee_animation": "5643", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5658", - "name": "Sorebones", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5627", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "I hope his hands don't shake.", - "melee_animation": "5643", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5658", - "name": "Sorebones", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5628", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Aaaarg", - "melee_animation": "5647", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5629", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "melee_animation": "5647", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "5648", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "52", - "strength_level": "1", - "id": "5630", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Aaaarg", - "melee_animation": "5647", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5631", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "melee_animation": "5647", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "5648", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "52", - "strength_level": "1", - "id": "5632", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Aaaarg", - "melee_animation": "5647", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5633", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Aaaarg", - "melee_animation": "5647", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5634", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Aaaarg", - "melee_animation": "5647", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5635", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "melee_animation": "5647", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "5648", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "52", - "strength_level": "1", - "id": "5636", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Aaaarg", - "melee_animation": "5651", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5654", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5637", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Aaaarg", - "melee_animation": "5651", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5654", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5638", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Aaaarg", - "melee_animation": "5651", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5654", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5639", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Aaaarg", - "melee_animation": "5651", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5654", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5640", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Aaaarg", - "melee_animation": "5651", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5654", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5641", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Aaaarg", - "melee_animation": "5880", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5654", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5642", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Aaaarg", - "melee_animation": "5880", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5654", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5643", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Aaaarg", - "melee_animation": "5880", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5654", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5644", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Aaaarg", - "melee_animation": "5880", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5654", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5645", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Aaaarg", - "melee_animation": "5880", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5654", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5646", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Aaaarg", - "melee_animation": "5884", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5886", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5647", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Aaaarg", - "melee_animation": "5884", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5886", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5648", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "melee_animation": "5647", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "5648", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "52", - "strength_level": "1", - "id": "5649", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Aaaarg", - "melee_animation": "5884", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5886", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5650", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "melee_animation": "5647", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "5648", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "52", - "strength_level": "1", - "id": "5651", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Aaaarg", - "melee_animation": "5884", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5886", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5652", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "melee_animation": "5647", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "5648", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "52", - "strength_level": "1", - "id": "5653", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Aaaarg", - "melee_animation": "5884", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5886", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5654", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "melee_animation": "5647", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "5648", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "52", - "strength_level": "1", - "id": "5655", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Aaaarg", - "melee_animation": "5889", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5891", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5656", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "melee_animation": "5647", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "5648", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "52", - "strength_level": "1", - "id": "5657", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Aaaarg", - "melee_animation": "5889", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5891", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5658", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Aaaarg", - "melee_animation": "5889", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5891", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5659", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "melee_animation": "5647", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "5648", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "52", - "strength_level": "1", - "id": "5660", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Aaaarg", - "melee_animation": "5889", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5891", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5661", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "melee_animation": "5647", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "5648", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "52", - "strength_level": "1", - "id": "5662", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Aaaarg", - "melee_animation": "5889", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5891", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5663", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "melee_animation": "5647", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "5648", - "death_animation": "5649", - "name": "Zombie pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "52", - "strength_level": "1", - "id": "5664", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Aaaarg", - "melee_animation": "5889", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5891", - "name": "Zombie pirate", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "5665", - "aggressive": "true", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "It's trying to mash you flat! Less examine", - "melee_animation": "5895", - "range_animation": "0", - "magic_level": "52", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "5898", - "name": "Barrelchest", - "defence_level": "52", - "safespot": null, - "lifepoints": "285", - "strength_level": "52", - "id": "5666", - "aggressive": "true", - "range_level": "52", - "attack_level": "52" - }, - { - "examine": "He is one", - "melee_animation": "5970", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "5972", - "name": "Undead Lumberjack", - "defence_level": "10", - "safespot": null, - "lifepoints": "100", - "strength_level": "73", - "id": "5680", - "range_level": "1", - "attack_level": "73" - }, - { - "examine": "A big", - "melee_animation": "6079", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "slayer_exp": "93", - "magic_animation": "0", - "death_animation": "6081", - "name": "Cave bug", - "defence_level": "84", - "safespot": null, - "lifepoints": "93", - "strength_level": "80", - "id": "5750", - "bonuses": "0,0,0,0,0,72,59,35,25,95,0,0,0,0,0", - "range_level": "1", - "attack_level": "82" - }, - { - "examine": "A strange mole-like being.", - "melee_animation": "6012", - "combat_audio": "3492,3494,3493", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "6013", - "slayer_exp": "52", - "death_animation": "6014", - "name": "Molanisk", - "defence_level": "50", - "safespot": null, - "lifepoints": "52", - "strength_level": "40", - "id": "5751", - "aggressive": "true", - "clue_level": "1", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "One of the many citizens of Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5752", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the many citizens of Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5753", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5754", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the many citizens of Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5755", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the many citizens of Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5756", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the many citizens of Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5757", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the many citizens of Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5758", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the many citizens of Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5759", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5760", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the many citizens of Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5761", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5762", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5763", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the many citizens of Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5764", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the many citizens of Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5765", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the many citizens of Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5766", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the many citizens of Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5767", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the many citizens of Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5768", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5769", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks after cave goblin money.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5776", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks after cave goblin money.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5777", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the many citizens of Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5783", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Taking a terribly important box from one place to another.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Crate goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5784", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the many citizens of Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5785", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Good at shorthand.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Goblin scribe", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5786", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He keeps order in the city.", - "melee_animation": "6007", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6003", - "name": "Guard", - "defence_level": "42", - "safespot": null, - "lifepoints": "60", - "strength_level": "42", - "id": "5800", - "clue_level": "1", - "range_level": "1", - "attack_level": "42" - }, - { - "examine": "He keeps order in the city.", - "melee_animation": "6007", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6003", - "name": "Guard", - "defence_level": "42", - "safespot": null, - "lifepoints": "60", - "strength_level": "42", - "id": "5801", - "clue_level": "1", - "range_level": "1", - "attack_level": "42" - }, - { - "examine": "A goblin baby.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Young 'un", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5803", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A goblin baby.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Nipper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5805", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5807", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5808", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5809", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5810", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5811", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5812", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5813", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5814", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5815", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5816", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5817", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5818", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5819", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5820", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5821", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5822", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Don't spit", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Spit goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5823", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A bug-eyed little goblin fish. How cute.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Goblin fish", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5824", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Annoying little flappy things.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Moths", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5827", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "death_animation": "6092", - "name": "Rabbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "melee_animation": "6090", - "strength_level": "1", - "id": "5829", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "6091" - }, - { - "name": "Rat Burgiss", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "703,705,704", - "strength_level": "1", - "id": "5833", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A mean looking outlaw. Don't get too close!", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Outlaw", - "defence_level": "23", - "safespot": null, - "lifepoints": "32", - "strength_level": "23", - "id": "5842", - "range_level": "1", - "attack_level": "23" - }, - { - "examine": "A mean looking outlaw. Don't get too close!", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Outlaw", - "defence_level": "23", - "safespot": null, - "lifepoints": "32", - "strength_level": "23", - "id": "5843", - "range_level": "1", - "attack_level": "23" - }, - { - "examine": "A mean looking outlaw. Don't get too close!", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Outlaw", - "defence_level": "23", - "safespot": null, - "lifepoints": "32", - "strength_level": "23", - "id": "5844", - "range_level": "1", - "attack_level": "23" - }, - { - "examine": "A mean looking outlaw. Don't get too close!", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Outlaw", - "defence_level": "23", - "safespot": null, - "lifepoints": "32", - "strength_level": "23", - "id": "5845", - "range_level": "1", - "attack_level": "23" - }, - { - "examine": "A mean looking outlaw. Don't get too close!", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Outlaw", - "defence_level": "23", - "safespot": null, - "lifepoints": "32", - "strength_level": "23", - "id": "5846", - "range_level": "1", - "attack_level": "23" - }, - { - "examine": "A mean looking outlaw. Don't get too close!", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Outlaw", - "defence_level": "23", - "safespot": null, - "lifepoints": "32", - "strength_level": "23", - "id": "5847", - "range_level": "1", - "attack_level": "23" - }, - { - "examine": "A mean looking outlaw. Don't get too close!", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Outlaw", - "defence_level": "23", - "safespot": null, - "lifepoints": "32", - "strength_level": "23", - "id": "5848", - "range_level": "1", - "attack_level": "23" - }, - { - "examine": "A mean looking outlaw. Don't get too close!", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Outlaw", - "defence_level": "23", - "safespot": null, - "lifepoints": "32", - "strength_level": "23", - "id": "5849", - "range_level": "1", - "attack_level": "23" - }, - { - "examine": "A mean looking outlaw. Don't get too close!", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Outlaw", - "defence_level": "23", - "safespot": null, - "lifepoints": "32", - "strength_level": "23", - "id": "5850", - "range_level": "1", - "attack_level": "23" - }, - { - "examine": "A mean looking outlaw. Don't get too close!", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Outlaw", - "defence_level": "23", - "safespot": null, - "lifepoints": "32", - "strength_level": "23", - "id": "5851", - "range_level": "1", - "attack_level": "23" - }, - { - "examine": "Weird eyeball thing. Reminds Thok of breakfast.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "629,631,630", - "magic_level": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "name": "Monkey", - "defence_level": "40", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "5852", - "aggressive": "true", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "For sitting on.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bench", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5854", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5855", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5856", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks pretty skilled with that bow.", - "melee_animation": "426", - "range_animation": "0", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "H.A.M. Archer", - "defence_level": "20", - "safespot": null, - "lifepoints": "57", - "strength_level": "15", - "id": "5859", - "aggressive": "true", - "clue_level": "0", - "range_level": "20", - "attack_level": "15" - }, - { - "examine": "He bristles with arcane power.", - "combat_style": "2", - "melee_animation": "429", - "range_animation": "0", - "magic_level": "20", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "death_animation": "836", - "name": "H.A.M. Mage", - "defence_level": "20", - "safespot": null, - "lifepoints": "57", - "strength_level": "15", - "id": "5860", - "aggressive": "true", - "clue_level": "0", - "range_level": "1", - "attack_level": "15" - }, - { - "examine": "No match for Thok. Silly demon.", - "magic_level": "85", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "name": "Zanik", - "defence_level": "85", - "safespot": null, - "lifepoints": "71", - "strength_level": "85", - "id": "5861", - "aggressive": "true", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "A worker on the train link.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Builder", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5864", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A worker on the train link.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Builder", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5865", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A worker on the train link.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Builder", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5866", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A worker on the train link.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Builder", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5867", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5873", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A goblin with big", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5874", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A goblin with big", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5875", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5876", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5877", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Cave goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "5878", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He sells tickets to Keldagrim.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ticket goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5879", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A dwarf from Keldagrim.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "0", - "name": "Dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5880", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A dwarf from Keldagrim.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "0", - "name": "Dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5881", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A dwarf from Keldagrim.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "slayer_exp": "16", - "magic_animation": "0", - "death_animation": "0", - "name": "Dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5882", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "16", - "examine": "A dwarf from Keldagrim.", - "name": "Dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5883", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "16", - "examine": "A dwarf from Keldagrim.", - "name": "Dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5884", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "16", - "examine": "A dwarf from Keldagrim.", - "name": "Dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5885", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He sells tickets to Dorgesh-Kaan.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ticket dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5886", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Are you good enough to fight?", - "melee_animation": "6318", - "range_animation": "0", - "magic_level": "70", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "6322", - "name": "The Inadequacy", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "5902", - "aggressive": "true", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "Can you endure long enough?", - "melee_animation": "6345", - "range_animation": "0", - "magic_level": "67", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "6347", - "name": "The Everlasting", - "defence_level": "67", - "safespot": null, - "lifepoints": "191", - "strength_level": "67", - "id": "5903", - "aggressive": "true", - "range_level": "67", - "attack_level": "67" - }, - { - "examine": "Can you bring yourself to hurt another?", - "melee_animation": "6329", - "range_animation": "0", - "magic_level": "65", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "6331", - "name": "The Untouchable", - "defence_level": "75", - "safespot": null, - "lifepoints": "100", - "strength_level": "65", - "id": "5904", - "aggressive": "true", - "range_level": "65", - "attack_level": "65" - }, - { - "examine": "What if you don't know how to win?", - "melee_animation": "6342", - "range_animation": "0", - "magic_level": "63", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "0", - "name": "The Illusive", - "defence_level": "63", - "safespot": null, - "lifepoints": "90", - "strength_level": "63", - "id": "5905", - "aggressive": "true", - "range_level": "63", - "attack_level": "63" - }, - { - "examine": "You can't escape your inadequacy!", - "melee_animation": "6310", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "6315", - "name": "A Doubt", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "55", - "id": "5906", - "aggressive": "true", - "range_level": "1", - "attack_level": "55" - }, - { - "examine": "Dead stone defending a dead throne room.", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "name": "Dying tree", - "defence_level": "50", - "safespot": null, - "lifepoints": "142", - "strength_level": "50", - "id": "5908", - "aggressive": "true", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "Don't let her arm-wrestle you for money.", - "melee_animation": "422", - "range_animation": "0", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Barbarian", - "defence_level": "20", - "safespot": null, - "lifepoints": "28", - "strength_level": "20", - "id": "5909", - "clue_level": "0", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "A greasy, grimy gourmet.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cook", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5910", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's suspiciously talented with a meat-cleaver.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cook", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5911", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This grizzled soldier is here to distribute Rated Clan Wars badges.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Iffie", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5914", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Does what too many people aren't interested in doing.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cleaner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5916", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A mangy mutt.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Stray dog", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5917", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He tries to keep order around here. His bizarre uniform isn't helping.", - "melee_animation": "6489", - "range_animation": "0", - "combat_audio": "2548,1979,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6490", - "name": "Guard", - "defence_level": "18", - "safespot": null, - "lifepoints": "25", - "strength_level": "18", - "id": "5919", - "clue_level": "1", - "range_level": "1", - "attack_level": "18" - }, - { - "examine": "He tries to keep order around here. His bizarre uniform isn't helping.", - "melee_animation": "6489", - "range_animation": "0", - "combat_audio": "2548,1979,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "6490", - "name": "Guard", - "defence_level": "18", - "safespot": null, - "lifepoints": "25", - "strength_level": "18", - "id": "5920", - "clue_level": "1", - "range_level": "1", - "attack_level": "18" - }, - { - "examine": "He's studying to be a guard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trainee Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5921", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Trains the guards of the future.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Captain", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5922", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Man", - "defence_level": "3", - "safespot": null, - "lifepoints": "4", - "strength_level": "3", - "id": "5923", - "clue_level": "0", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "One of Gielinor's many citizens.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,506,505", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Woman", - "defence_level": "3", - "safespot": null, - "lifepoints": "4", - "strength_level": "3", - "id": "5924", - "clue_level": "0", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "Known for his light-fingered qualities.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Thief", - "defence_level": "9", - "safespot": null, - "lifepoints": "25", - "strength_level": "9", - "id": "5926", - "range_level": "1", - "attack_level": "9" - }, - { - "examine": "Known for his light-fingered qualities.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Thief", - "defence_level": "9", - "safespot": null, - "lifepoints": "25", - "strength_level": "9", - "id": "5927", - "range_level": "1", - "attack_level": "9" - }, - { - "examine": "Known for her light-fingered qualities.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Thief", - "defence_level": "8", - "safespot": null, - "lifepoints": "24", - "strength_level": "9", - "id": "5928", - "range_level": "1", - "attack_level": "9" - }, - { - "examine": "Known for her light-fingered qualities.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Thief", - "defence_level": "8", - "safespot": null, - "lifepoints": "24", - "strength_level": "9", - "id": "5929", - "range_level": "1", - "attack_level": "9" - }, - { - "examine": "Jacques Netis - a slightly pompous art expert.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Art Critic Jacques", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5930", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Seth Minas - an aged expert in Gielinor history.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Historian Minas", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5931", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A lady with lots of information about the Museum.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Information clerk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5938", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A teacher and one of his pupils.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Teacher and pupil", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5944", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks kind of familiar.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Schoolboy", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5945", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A teacher and one of her pupils.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Teacher and pupil", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5947", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks hard at work.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Workman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5952", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Could there be something exciting in his wheelbarrow?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Workman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5954", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A powerful knight of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Void Knight", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5956", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Wheelbarrow loader.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Digsite workman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5958", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Working hard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Barge workman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5959", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Working hard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Barge workman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5960", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Working hard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Barge workman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5961", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Working hard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Barge workman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5962", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Working hard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Barge foreman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5963", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An aged expert in natural history.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Natural historian", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5966", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Bloodsuckers!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Leech display", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5971", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Slugs of the sea variety.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sea slugs display", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5972", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A house on its back.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Snail display", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5973", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A cheeky little monkey.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "629,631,630", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Monkey display", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5974", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A scaly little fellow.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Lizard display", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5975", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Nice suit.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Penguin display", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5976", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's got the hump.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Camel display", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5977", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Terrifying!", - "melee_animation": "1010", - "range_animation": "0", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Terrorbird display", - "defence_level": "1", - "safespot": null, - "lifepoints": "34", - "strength_level": "23", - "id": "5978", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks like a fire-breather.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "408,410,409", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dragon display", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5979", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Needs a good square meal.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Wyvern display", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5980", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A huge beast.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Battle tortoise display", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5981", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Loves making molehills.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mole display", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5982", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It hides in stone", - "range_animation": "0", - "magic_level": "95", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "name": "Workman", - "defence_level": "1", - "safespot": null, - "lifepoints": "34", - "strength_level": "95", - "id": "5986", - "aggressive": "true", - "range_level": "95", - "attack_level": "95" - }, - { - "name": "Rupert the Beard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "498,500,499", - "strength_level": "1", - "id": "5990", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Rupert the Beard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "498,500,499", - "strength_level": "1", - "id": "5992", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very odd looking creature.", - "melee_animation": "6513", - "range_animation": "0", - "magic_level": "46", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "6512", - "name": "Experiment No.2", - "defence_level": "46", - "safespot": null, - "lifepoints": "131", - "strength_level": "46", - "id": "5993", - "range_level": "46", - "attack_level": "46" - }, - { - "examine": "A huge mouse. It looks hungry...", - "melee_animation": "6519", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "6521", - "name": "Mouse", - "defence_level": "44", - "safespot": null, - "lifepoints": "62", - "strength_level": "44", - "id": "5994", - "aggressive": "true", - "range_level": "1", - "attack_level": "44" - }, - { - "melee_animation": "6501", - "respawn_delay": "60", - "defence_animation": "6503", - "death_animation": "6502", - "name": "Glod", - "defence_level": "1", - "safespot": null, - "lifepoints": "160", - "strength_level": "1", - "id": "5996", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Rupert the Beard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "498,500,499", - "strength_level": "1", - "id": "5999", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Rupert the Beard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "498,500,499", - "strength_level": "1", - "id": "6001", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6006", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6007", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6008", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6009", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6010", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6011", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6012", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6013", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6014", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6015", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6016", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6017", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6018", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6019", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6020", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6021", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6022", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6023", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6024", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Eek! A werewolf!", - "melee_animation": "6536", - "range_animation": "", - "combat_audio": "481,491,490", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "6538", - "weakness": "", - "magic_animation": "", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "70", - "safespot": null, - "lifepoints": "100", - "strength_level": "70", - "id": "6025", - "aggressive": "false", - "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "A traveling man. Are those fleas?", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Boris", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6026", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A well organised shop keeper.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Imre", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6027", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "He's staring at the moon.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Yuri", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6028", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "He keeps calling me comrade.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Joseph", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6029", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "There's a set of brows that mean business.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Nikolai", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6030", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "This is one feral looking innkeeper.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Eduard", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6031", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A tough looking villager.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Lev", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6032", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A simple villager.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Georgy", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6033", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "Seems a bit of a drama queen.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Svetlana", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6034", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "I bet she works out.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Irina", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6035", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "She doesn't say much.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Alexis", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6036", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "She looks like she can handle herself.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Milla", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6037", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "She seems light on her feet.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Galina", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6038", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A wise villager.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Sofiya", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6039", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "Not exactly a warrior princess.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Ksenia", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6040", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A well off villager.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Yadviga", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6041", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "The woman.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Nikita", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6042", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "She seems sure of herself.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Vera", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6043", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "A healthy villager.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Zoja", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6044", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "examine": "She's looking for flowers.", - "melee_animation": "422", - "combat_audio": "511,513,512", - "attack_speed": "4", - "respawn_delay": "15", - "defence_animation": "425", - "death_animation": "836", - "name": "Liliya", - "defence_level": "10", - "safespot": null, - "lifepoints": "60", - "strength_level": "10", - "id": "6045", - "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", - "range_level": "1", - "attack_level": "10" - }, - { - "melee_animation": "6559", - "combat_audio": "909,912,911", - "respawn_delay": "60", - "defence_animation": "6557", - "slayer_exp": "74", - "death_animation": "6558", - "name": "Big Wolf", - "defence_level": "1", - "safespot": null, - "lifepoints": "74", - "strength_level": "1", - "id": "6046", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A vicious mountain wolf.", - "melee_animation": "6579", - "range_animation": "6579", - "combat_audio": "909,912,911", - "attack_speed": "6", - "defence_animation": "6578", - "slayer_exp": "34", - "magic_animation": "6579", - "death_animation": "6576", - "name": "Wolf", - "defence_level": "22", - "safespot": null, - "lifepoints": "69", - "strength_level": "1", - "id": "6047", - "aggressive": "true", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Now it has no armour", - "range_animation": "0", - "combat_audio": "481,491,490", - "magic_level": "95", - "defence_animation": "0", - "weakness": "10", - "slayer_exp": "34", - "magic_animation": "0", - "name": "Wolf", - "defence_level": "1", - "safespot": null, - "lifepoints": "157", - "strength_level": "95", - "id": "6048", - "aggressive": "true", - "range_level": "95", - "attack_level": "95" - }, - { - "examine": "A big coward. Thok mocks scaredy man.", - "combat_audio": "481,491,490", - "magic_level": "75", - "defence_animation": "0", - "weakness": "10", - "slayer_exp": "34", - "magic_animation": "0", - "name": "Wolf", - "defence_level": "75", - "safespot": null, - "lifepoints": "100", - "strength_level": "75", - "id": "6049", - "aggressive": "true", - "range_level": "75", - "attack_level": "75" - }, - { - "examine": "A vicious desert wolf.", - "melee_animation": "6579", - "range_animation": "6579", - "attack_speed": "5", - "defence_animation": "6578", - "weakness": "9", - "magic_animation": "6579", - "death_animation": "6558", - "name": "Desert Wolf", - "defence_level": "5", - "safespot": null, - "lifepoints": "55", - "strength_level": "20", - "id": "6050", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "A vicious desert wolf.", - "melee_animation": "6579", - "range_animation": "6579", - "attack_speed": "5", - "defence_animation": "6578", - "magic_animation": "6579", - "death_animation": "6558", - "name": "Desert Wolf", - "defence_level": "5", - "safespot": null, - "lifepoints": "55", - "strength_level": "20", - "id": "6051", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "Not man's best friend.", - "melee_animation": "6559", - "respawn_delay": "60", - "defence_animation": "6557", - "death_animation": "6558", - "name": "Ice wolf", - "defence_level": "1", - "safespot": null, - "lifepoints": "70", - "strength_level": "1", - "id": "6052", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An impling who likes the word \"dragon\".", - "name": "Dragon impling", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "408,410,409", - "strength_level": "1", - "id": "6054", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An impling who likes the word \"dragon.\"", - "name": "Dragon impling", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "408,410,409", - "strength_level": "1", - "id": "6064", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She tends the wheat.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fairy Aeryka", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6072", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks a little lost.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Wandering impling", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6073", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An angry little imp. Grrr.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Imp defender", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6074", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A one-eyed man eater.", - "melee_animation": "4652", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "25", - "defence_animation": "4651", - "weakness": "8", - "slayer_exp": "75", - "magic_animation": "0", - "death_animation": "4653", - "name": "Cyclops", - "defence_level": "35", - "safespot": null, - "lifepoints": "75", - "strength_level": "65", - "id": "6078", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "A one-eyed woman eater.", - "melee_animation": "4652", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "4651", - "weakness": "1", - "slayer_exp": "100", - "magic_animation": "0", - "death_animation": "4653", - "name": "Cyclops", - "defence_level": "65", - "safespot": null, - "lifepoints": "100", - "strength_level": "65", - "id": "6079", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "A one-eyed man eater.", - "melee_animation": "4652", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "25", - "defence_animation": "4651", - "weakness": "8", - "slayer_exp": "75", - "magic_animation": "0", - "death_animation": "4653", - "name": "Cyclops", - "defence_level": "35", - "safespot": null, - "lifepoints": "75", - "strength_level": "65", - "id": "6080", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "A one-eyed woman eater.", - "melee_animation": "4652", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "4651", - "weakness": "1", - "slayer_exp": "100", - "magic_animation": "0", - "death_animation": "4653", - "name": "Cyclops", - "defence_level": "65", - "safespot": null, - "lifepoints": "100", - "strength_level": "65", - "id": "6081", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "Overgrown undead vermin.", - "melee_animation": "4933", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "4935", - "name": "Zombie rat", - "defence_level": "2", - "safespot": null, - "lifepoints": "2", - "strength_level": "2", - "id": "6088", - "range_level": "1", - "attack_level": "2" - }, - { - "examine": "Overgrown undead vermin.", - "melee_animation": "4933", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "4935", - "name": "Zombie rat", - "defence_level": "2", - "safespot": null, - "lifepoints": "2", - "strength_level": "2", - "id": "6089", - "range_level": "1", - "attack_level": "2" - }, - { - "examine": "Overgrown undead vermin.", - "melee_animation": "4933", - "range_animation": "0", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "4935", - "name": "Zombie rat", - "defence_level": "2", - "safespot": null, - "lifepoints": "2", - "strength_level": "2", - "id": "6090", - "range_level": "1", - "attack_level": "2" - }, - { - "melee_animation": "5540", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5541", - "slayer_exp": "25", - "death_animation": "5542", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "6094", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5532", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5533", - "slayer_exp": "25", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "6095", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5532", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5533", - "slayer_exp": "25", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "6096", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5532", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5533", - "slayer_exp": "25", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "6097", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5532", - "combat_audio": "436,439,438", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5533", - "slayer_exp": "25", - "death_animation": "5534", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "6098", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5571", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5574", - "slayer_exp": "30", - "death_animation": "5575", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "6099", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "5571", - "combat_audio": "931,923,922", - "respawn_delay": "60", - "defence_animation": "5574", - "slayer_exp": "30", - "death_animation": "5575", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "6100", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Lesser, but still pretty big.", - "melee_animation": "4630", - "range_animation": "4630", - "combat_audio": "400,404,403", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "30", - "defence_animation": "65", - "weakness": "4", - "slayer_exp": "79", - "magic_animation": "4630", - "death_animation": "67", - "name": "Lesser demon", - "defence_level": "71", - "safespot": null, - "lifepoints": "79", - "strength_level": "70", - "id": "6101", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "His face is expressionless.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Lost barbarian", - "defence_level": "60", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "6102", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Probably not a chicken.", - "melee_animation": "6811", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "6812", - "name": "Entrana firebird", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "6108", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "These gnomes know how to get around!", - "melee_animation": "6790", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "6791", - "name": "Mounted terrorbird gnome", - "defence_level": "38", - "safespot": null, - "lifepoints": "54", - "strength_level": "38", - "id": "6109", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "These gnomes know how to get around!", - "melee_animation": "6790", - "respawn_delay": "60", - "defence_animation": "6792", - "death_animation": "6791", - "name": "Mounted terrorbird gnome", - "defence_level": "1", - "safespot": null, - "lifepoints": "55", - "strength_level": "1", - "id": "6110", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "These gnomes know how to get around!", - "melee_animation": "6790", - "respawn_delay": "60", - "defence_animation": "6792", - "death_animation": "6791", - "name": "Mounted terrorbird gnome", - "defence_level": "1", - "safespot": null, - "lifepoints": "55", - "strength_level": "1", - "id": "6111", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Aww, cute.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ducklings", - "defence_level": "1", - "water_npc": "true", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6112", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Quackers.", - "melee_animation": "747", - "respawn_delay": "60", - "defence_animation": "3268", - "death_animation": "750", - "name": "Duck", - "defence_level": "1", - "safespot": null, - "lifepoints": "3", - "strength_level": "1", - "id": "6113", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A messy bird.", - "melee_animation": "3467", - "range_animation": "3467", - "combat_audio": "309,311,310", - "attack_speed": "5", - "defence_animation": "1014", - "weakness": "6", - "magic_animation": "3467", - "death_animation": "3468", - "name": "Seagull", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "6115", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A messy bird.", - "melee_animation": "3467", - "range_animation": "3467", - "combat_audio": "309,311,310", - "attack_speed": "5", - "defence_animation": "1014", - "magic_animation": "3467", - "death_animation": "3468", - "name": "Seagull", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "6116", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Do not upset this teacher. You have been warned!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mr. Mordaut", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6117", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He helps the professor.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Observatory assistant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6118", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Sleeping like an ugly baby.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Sleeping guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6122", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An old goblin hag.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Naghead", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6123", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A young goblin 'beauty'.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Wagchin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6124", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ugly green creature.", - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6125", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6126", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Big appetite for a small creature.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Greasycheeks", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6127", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Likes drink a little too much.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Smellytoes", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6128", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Lean and green.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Creakyknees", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6129", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "30", - "name": "Zombie", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "combat_audio": "931,923,922", - "strength_level": "1", - "id": "6131", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6132", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6133", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This imp is clearly the class clown.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dunce", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6134", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Get useful information from this guy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Town crier", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6135", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire (Intermediate)", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6140", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A squire of balance.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire (Veteran)", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6141", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not somewhere I want to go...", - "attack_speed": "5", - "magic_level": "50", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "50", - "safespot": null, - "lifepoints": "200", - "strength_level": "1", - "id": "6142", - "bonuses": "100,100,100,50,50,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not somewhere I want to go...", - "attack_speed": "5", - "magic_level": "25", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "50", - "safespot": null, - "lifepoints": "200", - "strength_level": "1", - "id": "6143", - "bonuses": "100,100,100,100,25,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not somewhere I want to go...", - "attack_speed": "5", - "magic_level": "50", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "50", - "safespot": null, - "lifepoints": "200", - "strength_level": "1", - "id": "6144", - "bonuses": "100,100,50,100,50,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not somewhere I want to go...", - "attack_speed": "5", - "magic_level": "50", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "50", - "safespot": null, - "lifepoints": "200", - "strength_level": "1", - "id": "6145", - "bonuses": "50,50,100,100,50,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Void Knight will soon weaken the shield.", - "attack_speed": "5", - "magic_level": "30", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "30", - "safespot": null, - "lifepoints": "200", - "strength_level": "1", - "id": "6146", - "bonuses": "100,100,100,50,50,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Void Knight will soon weaken the shield.", - "attack_speed": "5", - "magic_level": "15", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "30", - "safespot": null, - "lifepoints": "200", - "strength_level": "1", - "id": "6147", - "bonuses": "100,100,100,100,25,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Void Knight will soon weaken the shield.", - "attack_speed": "5", - "magic_level": "30", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "30", - "safespot": null, - "lifepoints": "200", - "strength_level": "1", - "id": "6148", - "bonuses": "100,100,50,100,50,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Void Knight will soon weaken the shield.", - "attack_speed": "5", - "magic_level": "30", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "30", - "safespot": null, - "lifepoints": "200", - "strength_level": "1", - "id": "6149", - "bonuses": "50,50,100,100,50,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not somewhere I want to go...", - "attack_speed": "5", - "magic_level": "70", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "70", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "6150", - "bonuses": "150,150,150,75,75,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not somewhere I want to go...", - "attack_speed": "5", - "magic_level": "40", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "70", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "6151", - "bonuses": "150,150,150,150,37,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not somewhere I want to go...", - "attack_speed": "5", - "magic_level": "70", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "70", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "6152", - "bonuses": "150,150,75,150,75,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not somewhere I want to go...", - "attack_speed": "5", - "magic_level": "70", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "70", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "6153", - "bonuses": "75,75,150,150,75,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Void Knight will soon weaken the shield.", - "attack_speed": "5", - "magic_level": "30", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "30", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "6154", - "bonuses": "100,100,100,50,50,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Void Knight will soon weaken the shield.", - "attack_speed": "5", - "magic_level": "15", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "30", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "6155", - "bonuses": "100,100,100,100,25,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Void Knight will soon weaken the shield.", - "attack_speed": "5", - "magic_level": "30", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "30", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "6156", - "bonuses": "100,100,50,100,50,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Void Knight will soon weaken the shield.", - "attack_speed": "5", - "magic_level": "30", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "30", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "6157", - "bonuses": "50,50,100,100,50,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It is cold and solid. Thok will strap it to Marmaros's leg.", - "range_animation": "0", - "magic_level": "50", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "name": "Workman", - "defence_level": "65", - "safespot": null, - "lifepoints": "114", - "strength_level": "50", - "id": "6159", - "aggressive": "true", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "Squire to the Knights of the Round Table.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Squire", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6169", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "400", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "422", - "death_animation": "836", - "name": "Sir Lancelot", - "defence_level": "1", - "safespot": null, - "lifepoints": "118", - "strength_level": "1", - "id": "6170", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An officer of the law.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6183", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An officer of the law.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6184", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He isn't very friendly.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "0", - "name": "Renegade knight", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6188", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A dark-hearted knight.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "2503,15,512", - "attack_speed": "5", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Black Knight", - "defence_level": "25", - "safespot": null, - "lifepoints": "42", - "strength_level": "25", - "id": "6189", - "aggressive": "true", - "bonuses": "18,18,18,0,0,73,76,70,-11,72,0,16,0,0,0", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "Primping with combs and hair clips.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6190", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The name isn't just for show.", - "range_animation": "0", - "magic_level": "55", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "name": "Sinclair", - "defence_level": "55", - "safespot": null, - "lifepoints": "85", - "strength_level": "55", - "id": "6198", - "aggressive": "true", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "He can look after my money.", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6200", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Knight", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "6201", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A servant of the god Zamorak. ", - "melee_animation": "6945", - "attack_speed": "6", - "poisonous": "", - "respawn_delay": "150", - "weakness": "9", - "slayer_exp": "350", - "poison_amount": "", - "magic_animation": "6945", - "death_animation": "6946", - "lifepoints": "255", - "id": "6203", - "aggressive": "true", - "bonuses": "160,160,160,0,0,80,80,80,130,80,0,31,0,0,0", - "agg_radius": "64", - "range_animation": "6945", - "magic_level": "200", - "defence_animation": "6944", - "name": "K'ril Tsutsaroth", - "defence_level": "270", - "poison_immune": "true", - "safespot": null, - "strength_level": "300", - "clue_level": "2", - "range_level": "1", - "attack_level": "340" - }, - { - "agg_radius": "64", - "examine": "Destroyer of 1000 planes!", - "melee_animation": "6945", - "range_animation": "6945", - "attack_speed": "5", - "magic_level": "50", - "respawn_delay": "50", - "defence_animation": "6944", - "weakness": "9", - "slayer_exp": "142", - "magic_animation": "6945", - "death_animation": "6946", - "name": "Tstanon Karlak", - "defence_level": "125", - "safespot": null, - "lifepoints": "142", - "strength_level": "118", - "id": "6204", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,-5,0,0,14,0,0,0", - "range_level": "50", - "attack_level": "124" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "6205", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Scourge of light.", - "start_gfx": "1208", - "combat_style": "1", - "melee_animation": "7033", - "attack_speed": "5", - "respawn_delay": "50", - "weakness": "0", - "slayer_exp": "150", - "magic_animation": "7033", - "death_animation": "6946", - "lifepoints": "150", - "id": "6206", - "aggressive": "true", - "bonuses": "0,0,0,0,20,0,0,0,-5,0,0,0,0,0,20", - "agg_radius": "64", - "range_animation": "7033", - "magic_level": "50", - "defence_animation": "6945", - "name": "Zakl'n Gritch", - "defence_level": "127", - "safespot": null, - "strength_level": "76", - "range_level": "150", - "projectile": "1209", - "attack_level": "83" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "6207", - "range_level": "1", - "attack_level": "1" - }, - { - "agg_radius": "64", - "examine": "Despoiler of Ullek.", - "start_gfx": "1212", - "combat_style": "2", - "melee_animation": "7033", - "range_animation": "7033", - "attack_speed": "5", - "magic_level": "150", - "respawn_delay": "50", - "defence_animation": "6944", - "slayer_exp": "161", - "magic_animation": "7033", - "death_animation": "6946", - "name": "Balfrug Kreeyath", - "defence_level": "153", - "safespot": null, - "lifepoints": "161", - "strength_level": "60", - "id": "6208", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,10,0,0,0,0,0,0", - "range_level": "1", - "projectile": "1213", - "attack_level": "115" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "6209", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "From the maws of hell.", - "melee_animation": "6579", - "range_animation": "6579", - "combat_audio": "3717,3719,3718", - "attack_speed": "4", - "respawn_delay": "50", - "defence_animation": "6578", - "weakness": "7", - "slayer_exp": "116", - "magic_animation": "6579", - "death_animation": "6576", - "name": "Hellhound", - "defence_level": "102", - "safespot": null, - "lifepoints": "116", - "strength_level": "104", - "id": "6210", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "105" - }, - { - "examine": "Have you checked your pockets lately?", - "melee_animation": "169", - "range_animation": "169", - "combat_audio": "534,536,535", - "defence_animation": "170", - "weakness": "7", - "magic_animation": "169", - "death_animation": "172", - "name": "Imp", - "defence_level": "4", - "safespot": null, - "movement_radius": "25", - "lifepoints": "10", - "strength_level": "4", - "id": "6211", - "aggressive": "true", - "bonuses": "10,5,5,10,10,10,10,10,10,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "4" - }, - { - "examine": "He doesn't look pleased to see me.", - "melee_animation": "6536", - "range_animation": "6536", - "respawn_delay": "25", - "defence_animation": "6538", - "weakness": "7", - "magic_animation": "6536", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "64", - "safespot": null, - "lifepoints": "100", - "strength_level": "64", - "id": "6212", - "aggressive": "true", - "bonuses": "50,40,45,60,70,70,70,40,40,50,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "64" - }, - { - "examine": "He doesn't look pleased to see me.", - "melee_animation": "6536", - "range_animation": "6536", - "respawn_delay": "25", - "defence_animation": "6538", - "weakness": "7", - "magic_animation": "6536", - "death_animation": "6537", - "name": "Werewolf", - "defence_level": "64", - "safespot": null, - "lifepoints": "100", - "strength_level": "64", - "id": "6213", - "aggressive": "true", - "bonuses": "50,40,45,60,70,70,70,40,40,50,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "64" - }, - { - "examine": "It looks really hungry!", - "melee_animation": "810", - "range_animation": "810", - "respawn_delay": "25", - "defence_animation": "404", - "magic_animation": "810", - "death_animation": "9055", - "name": "Vampire", - "defence_level": "44", - "safespot": null, - "lifepoints": "60", - "strength_level": "44", - "id": "6214", - "aggressive": "true", - "bonuses": "30,35,30,40,50,50,50,25,30,30,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "44" - }, - { - "examine": "The tongue of evil.", - "melee_animation": "9130", - "range_animation": "1552", - "combat_audio": "312,314,313", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "9132", - "slayer_exp": "120", - "magic_animation": "1552", - "death_animation": "9131", - "name": "Bloodveld", - "defence_level": "30", - "safespot": null, - "lifepoints": "120", - "strength_level": "45", - "id": "6215", - "aggressive": "true", - "clue_level": "2", - "range_level": "1", - "attack_level": "75" - }, - { - "examine": "A small fire demon.", - "melee_animation": "1582", - "range_animation": "1582", - "combat_audio": "696,698,697", - "respawn_delay": "25", - "defence_animation": "1581", - "weakness": "7", - "magic_animation": "1582", - "death_animation": "1580", - "name": "Pyrefiend", - "defence_level": "25", - "safespot": null, - "lifepoints": "48", - "strength_level": "25", - "id": "6216", - "aggressive": "true", - "bonuses": "25,25,20,40,40,40,15,30,20,60,20,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "A small ice demon.", - "melee_animation": "8080", - "range_animation": "8080", - "combat_audio": "531,533,532", - "respawn_delay": "25", - "defence_animation": "8079", - "magic_animation": "8080", - "death_animation": "8078", - "name": "Icefiend", - "defence_level": "5", - "safespot": null, - "lifepoints": "15", - "strength_level": "5", - "id": "6217", - "bonuses": "5,5,5,5,10,10,10,10,10,10,5,0,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "Those horns look pretty sharp...", - "melee_animation": "4300", - "range_animation": "4300", - "respawn_delay": "25", - "defence_animation": "4301", - "weakness": "9", - "slayer_exp": "112", - "magic_animation": "4300", - "death_animation": "4302", - "name": "Gorak", - "defence_level": "70", - "safespot": null, - "lifepoints": "112", - "strength_level": "70", - "id": "6218", - "aggressive": "true", - "bonuses": "30,30,50,70,40,70,70,50,60,55,0,0,0,0,0", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "Warrior of Zamorak.", - "melee_animation": "390", - "range_animation": "390", - "attack_speed": "5", - "respawn_delay": "25", - "defence_animation": "1156", - "weakness": "6", - "magic_animation": "390", - "death_animation": "9055", - "name": "Spiritual warrior", - "defence_level": "66", - "safespot": null, - "lifepoints": "102", - "strength_level": "66", - "id": "6219", - "aggressive": "true", - "bonuses": "40,60,60,60,60,20,50,55,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "66" - }, - { - "examine": "A ranger spirit dedicated to Zamorak.", - "start_gfx": "18", - "combat_style": "1", - "start_height": "96", - "melee_animation": "426", - "range_animation": "426", - "respawn_delay": "25", - "defence_animation": "404", - "weakness": "1", - "magic_animation": "426", - "death_animation": "9055", - "name": "Spiritual ranger", - "defence_level": "70", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "id": "6220", - "aggressive": "true", - "bonuses": "50,70,50,50,50,70,50,85,85,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "70", - "projectile": "9", - "attack_level": "1" - }, - { - "examine": "A deadly servant of Zamorak.", - "combat_style": "2", - "melee_animation": "811", - "attack_speed": "5", - "respawn_delay": "25", - "weakness": "3", - "magic_animation": "811", - "death_animation": "9055", - "lifepoints": "75", - "id": "6221", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_animation": "811", - "magic_level": "180", - "end_gfx": "78", - "defence_animation": "404", - "end_height": "0", - "name": "Spiritual mage", - "defence_level": "61", - "safespot": null, - "strength_level": "1", - "clue_level": "2", - "range_level": "1", - "projectile": "78", - "attack_level": "1" - }, - { - "agg_radius": "64", - "examine": "Graceful avatar of Armadyl.", - "melee_animation": "6977", - "range_animation": "6977", - "attack_speed": "3", - "magic_level": "200", - "respawn_delay": "150", - "defence_animation": "6974", - "weakness": "10", - "slayer_exp": "357", - "magic_animation": "6977", - "death_animation": "6975", - "name": "Kree'arra", - "defence_level": "260", - "poison_immune": "true", - "safespot": null, - "lifepoints": "255", - "strength_level": "200", - "id": "6222", - "aggressive": "true", - "bonuses": "136,136,136,0,120,180,180,180,200,200,0,12,0,0,0", - "clue_level": "2", - "range_level": "380", - "attack_level": "300" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "2", - "melee_animation": "6952", - "attack_speed": "5", - "respawn_delay": "50", - "weakness": "3", - "slayer_exp": "124", - "magic_animation": "6952", - "death_animation": "6956", - "lifepoints": "121", - "id": "6223", - "aggressive": "true", - "bonuses": "45,45,45,0,0,0,0,0,0,0,0,25,0,0,0", - "prj_height": "92", - "agg_radius": "64", - "range_animation": "6952", - "magic_level": "150", - "defence_animation": "6955", - "name": "Wingman Skree", - "defence_level": "160", - "poison_immune": "false", - "safespot": null, - "strength_level": "50", - "range_level": "100", - "projectile": "1199", - "attack_level": "80" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "6224", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "attack_speed": "5", - "respawn_delay": "50", - "weakness": "4", - "slayer_exp": "133", - "magic_animation": "6953", - "death_animation": "6956", - "lifepoints": "132", - "id": "6225", - "aggressive": "true", - "bonuses": "0,0,0,0,60,0,0,0,0,0,0,0,0,0,0", - "prj_height": "92", - "agg_radius": "64", - "range_animation": "6953", - "magic_level": "50", - "defence_animation": "6955", - "name": "Flockleader Geerin", - "defence_level": "175", - "poison_immune": "false", - "safespot": null, - "strength_level": "80", - "range_level": "150", - "projectile": "1190", - "attack_level": "80" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "6226", - "range_level": "1", - "attack_level": "1" - }, - { - "agg_radius": "64", - "examine": "Graceful, bird-like creature.", - "melee_animation": "6954", - "range_animation": "6954", - "attack_speed": "5", - "magic_level": "50", - "respawn_delay": "50", - "defence_animation": "6955", - "weakness": "6", - "slayer_exp": "133", - "magic_animation": "6954", - "death_animation": "6956", - "name": "Flight Kilisa", - "defence_level": "175", - "safespot": null, - "lifepoints": "133", - "strength_level": "118", - "id": "6227", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,14,0,0,0", - "range_level": "169", - "attack_level": "124" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "6228", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A servant of Armadyl.", - "combat_style": "1", - "melee_animation": "6954", - "range_animation": "6954", - "respawn_delay": "25", - "defence_animation": "6955", - "weakness": "6", - "magic_animation": "6954", - "death_animation": "6956", - "name": "Spiritual warrior", - "defence_level": "70", - "safespot": null, - "lifepoints": "98", - "strength_level": "70", - "id": "6229", - "aggressive": "true", - "bonuses": "40,40,50,50,20,50,50,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "68", - "attack_level": "70" - }, - { - "examine": "Armadyl's favourite servant.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "weakness": "4", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Spiritual ranger", - "defence_level": "70", - "safespot": null, - "lifepoints": "89", - "strength_level": "1", - "id": "6230", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "70", - "projectile": "1190", - "attack_level": "1", - "prj_height": "92" - }, - { - "examine": "A mage who serves Armadyl above all else - even death.", - "combat_style": "2", - "melee_animation": "6952", - "range_animation": "6952", - "attack_speed": "5", - "magic_level": "150", - "respawn_delay": "25", - "defence_animation": "6955", - "weakness": "4", - "magic_animation": "6952", - "death_animation": "6956", - "name": "Spiritual mage", - "defence_level": "111", - "safespot": null, - "lifepoints": "75", - "strength_level": "1", - "id": "6231", - "aggressive": "true", - "bonuses": "0,0,0,0,0,9,12,5,45,28,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "projectile": "1199", - "prj_height": "92", - "attack_level": "1" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Aviansie", - "defence_level": "40", - "safespot": null, - "lifepoints": "70", - "strength_level": "1", - "id": "6232", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "40", - "projectile": "1191", - "attack_level": "1", - "prj_height": "92" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Aviansie", - "defence_level": "45", - "safespot": null, - "lifepoints": "83", - "strength_level": "1", - "id": "6233", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "45", - "projectile": "1190", - "attack_level": "1", - "prj_height": "92" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Aviansie", - "defence_level": "50", - "safespot": null, - "lifepoints": "86", - "strength_level": "1", - "id": "6234", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "50", - "projectile": "1190", - "attack_level": "1", - "prj_height": "92" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Aviansie", - "defence_level": "50", - "safespot": null, - "lifepoints": "86", - "strength_level": "1", - "id": "6235", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "50", - "projectile": "1190", - "attack_level": "1", - "prj_height": "92" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Aviansie", - "defence_level": "55", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "id": "6236", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "55", - "projectile": "1190", - "attack_level": "1", - "prj_height": "92" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Aviansie", - "defence_level": "55", - "safespot": null, - "lifepoints": "98", - "strength_level": "1", - "id": "6237", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "55", - "projectile": "1191", - "attack_level": "1", - "prj_height": "92" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Aviansie", - "defence_level": "65", - "safespot": null, - "lifepoints": "124", - "strength_level": "1", - "id": "6238", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "65", - "projectile": "1190", - "attack_level": "1", - "prj_height": "92" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Aviansie", - "defence_level": "65", - "safespot": null, - "lifepoints": "139", - "strength_level": "1", - "id": "6239", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "65", - "projectile": "1191", - "attack_level": "1", - "prj_height": "92" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Aviansie", - "defence_level": "40", - "safespot": null, - "lifepoints": "63", - "strength_level": "1", - "id": "6240", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "40", - "projectile": "1191", - "attack_level": "1", - "prj_height": "92" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Aviansie", - "defence_level": "40", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "6241", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "40", - "projectile": "1190", - "attack_level": "1", - "prj_height": "92" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Aviansie", - "defence_level": "40", - "safespot": null, - "lifepoints": "83", - "strength_level": "1", - "id": "6242", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "40", - "projectile": "1190", - "attack_level": "1", - "prj_height": "92" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Aviansie", - "defence_level": "50", - "safespot": null, - "lifepoints": "69", - "strength_level": "1", - "id": "6243", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "50", - "projectile": "1190", - "attack_level": "1", - "prj_height": "92" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Aviansie", - "defence_level": "55", - "safespot": null, - "lifepoints": "75", - "strength_level": "1", - "id": "6244", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "55", - "projectile": "1190", - "attack_level": "1", - "prj_height": "92" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Aviansie", - "defence_level": "55", - "safespot": null, - "lifepoints": "98", - "strength_level": "1", - "id": "6245", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "55", - "projectile": "1190", - "attack_level": "1", - "prj_height": "92" - }, - { - "examine": "Graceful, bird-like creature.", - "combat_style": "1", - "melee_animation": "6953", - "range_animation": "6953", - "respawn_delay": "25", - "defence_animation": "6955", - "magic_animation": "6953", - "death_animation": "6956", - "name": "Aviansie", - "defence_level": "65", - "safespot": null, - "lifepoints": "73", - "strength_level": "1", - "id": "6246", - "aggressive": "true", - "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "65", - "projectile": "1191", - "attack_level": "1", - "prj_height": "92" - }, - { - "agg_radius": "64", - "examine": "Commander of Saradomin's forces. ", - "melee_animation": "6964", - "range_animation": "6964", - "attack_speed": "2", - "magic_level": "300", - "respawn_delay": "150", - "defence_animation": "6966", - "weakness": "7", - "slayer_exp": "360", - "magic_animation": "6964", - "death_animation": "6965", - "name": "Commander Zilyana", - "defence_level": "300", - "poison_immune": "true", - "safespot": null, - "lifepoints": "255", - "strength_level": "196", - "id": "6247", - "aggressive": "true", - "bonuses": "195,195,195,200,0,100,100,100,100,100,0,20,0,0,0", - "clue_level": "2", - "range_level": "250", - "attack_level": "280" - }, - { - "agg_radius": "64", - "examine": "The bane of darkness.", - "melee_animation": "6376", - "range_animation": "6376", - "combat_audio": "3829,3866,3849", - "attack_speed": "5", - "magic_level": "125", - "respawn_delay": "50", - "defence_animation": "6375", - "weakness": "7", - "slayer_exp": "0", - "magic_animation": "6376", - "death_animation": "6377", - "name": "Starlight", - "defence_level": "120", - "poison_immune": "false", - "safespot": null, - "lifepoints": "160", - "strength_level": "125", - "id": "6248", - "aggressive": "true", - "bonuses": "60,60,60,0,0,12,14,13,5,13,0,10,0,0,0", - "range_level": "1", - "attack_level": "120" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "6249", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Defender of the faithful.", - "start_gfx": "1184", - "combat_style": "2", - "melee_animation": "7019", - "attack_speed": "5", - "respawn_delay": "50", - "slayer_exp": "0", - "magic_animation": "7019", - "death_animation": "7016", - "lifepoints": "146", - "id": "6250", - "aggressive": "true", - "bonuses": "10,10,10,0,0,12,14,14,18,5,0,7,0,0,0", - "prj_height": "0", - "agg_radius": "64", - "range_animation": "7019", - "combat_audio": "3830,3869,3867", - "magic_level": "150", - "end_gfx": "1186", - "defence_animation": "7017", - "name": "Growler", - "defence_level": "120", - "safespot": null, - "strength_level": "101", - "range_level": "1", - "projectile": "1185", - "attack_level": "100" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "6251", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Champion of Truth.", - "combat_style": "1", - "melee_animation": "7009", - "attack_speed": "5", - "respawn_delay": "50", - "weakness": "0", - "slayer_exp": "0", - "magic_animation": "7009", - "death_animation": "7011", - "lifepoints": "162", - "id": "6252", - "aggressive": "true", - "bonuses": "10,10,10,0,0,12,14,14,18,5,0,7,0,0,0", - "prj_height": "50", - "agg_radius": "64", - "range_animation": "7009", - "magic_level": "80", - "end_gfx": "24", - "defence_animation": "7010", - "name": "Bree", - "defence_level": "130", - "safespot": null, - "strength_level": "80", - "range_level": "150", - "projectile": "1188", - "attack_level": "110" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "6253", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A holy man wearing ancient clothing.", - "combat_style": "2", - "melee_animation": "811", - "range_animation": "811", - "poisonous": "", - "magic_level": "60", - "respawn_delay": "25", - "end_gfx": "76", - "defence_animation": "404", - "weakness": "3", - "magic_animation": "811", - "death_animation": "9055", - "name": "Saradomin priest", - "defence_level": "60", - "safespot": null, - "lifepoints": "89", - "strength_level": "1", - "id": "6254", - "aggressive": "true", - "bonuses": "40,40,40,40,20,50,40,55,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Warrior of Saradomin.", - "melee_animation": "390", - "range_animation": "390", - "attack_speed": "5", - "respawn_delay": "25", - "defence_animation": "1156", - "weakness": "8", - "magic_animation": "390", - "death_animation": "9055", - "name": "Spiritual warrior", - "defence_level": "66", - "safespot": null, - "lifepoints": "100", - "strength_level": "66", - "id": "6255", - "aggressive": "true", - "bonuses": "40,60,60,60,60,20,50,45,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "66" - }, - { - "examine": "A ranger spirit dedicated to Saradomin.", - "start_gfx": "18", - "combat_style": "1", - "start_height": "96", - "melee_animation": "426", - "range_animation": "426", - "respawn_delay": "25", - "defence_animation": "404", - "weakness": "0", - "magic_animation": "426", - "death_animation": "9055", - "name": "Spiritual ranger", - "defence_level": "70", - "safespot": null, - "lifepoints": "106", - "strength_level": "1", - "id": "6256", - "aggressive": "true", - "bonuses": "50,70,50,50,50,70,50,65,65,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "70", - "projectile": "9", - "attack_level": "1" - }, - { - "examine": "Saradomin's holy mage.", - "combat_style": "2", - "melee_animation": "811", - "attack_speed": "5", - "respawn_delay": "25", - "weakness": "4", - "magic_animation": "811", - "death_animation": "9055", - "lifepoints": "85", - "id": "6257", - "aggressive": "true", - "bonuses": "0,0,0,0,0,8,7,3,16,2,0,0,0,0,0", - "range_animation": "811", - "magic_level": "160", - "end_gfx": "76", - "defence_animation": "404", - "end_height": "0", - "name": "Spiritual mage", - "defence_level": "86", - "safespot": null, - "strength_level": "1", - "clue_level": "2", - "range_level": "1", - "projectile": "76", - "attack_level": "1" - }, - { - "examine": "A valiant knight.", - "melee_animation": "407", - "range_animation": "407", - "respawn_delay": "25", - "defence_animation": "410", - "weakness": "7", - "magic_animation": "407", - "death_animation": "9055", - "name": "Knight of Saradomin", - "defence_level": "50", - "safespot": null, - "lifepoints": "135", - "strength_level": "50", - "id": "6258", - "aggressive": "true", - "bonuses": "40,40,40,40,50,20,40,50,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "A valiant knight.", - "melee_animation": "401", - "range_animation": "401", - "respawn_delay": "25", - "defence_animation": "424", - "weakness": "7", - "magic_animation": "401", - "death_animation": "9055", - "name": "Knight of Saradomin", - "defence_level": "50", - "safespot": null, - "lifepoints": "108", - "strength_level": "50", - "id": "6259", - "aggressive": "true", - "bonuses": "40,40,40,40,50,20,40,65,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "50" - }, - { - "agg_radius": "64", - "examine": "A huge war chief.", - "melee_animation": "7060", - "range_animation": "7060", - "attack_speed": "6", - "magic_level": "280", - "respawn_delay": "150", - "defence_animation": "7061", - "weakness": "10", - "slayer_exp": "0", - "magic_animation": "7060", - "death_animation": "7062", - "name": "General Graardor", - "defence_level": "250", - "poison_immune": "true", - "safespot": null, - "lifepoints": "255", - "strength_level": "350", - "id": "6260", - "aggressive": "true", - "bonuses": "120,120,120,0,100,90,90,90,65,90,0,43,0,0,0", - "clue_level": "2", - "range_level": "350", - "attack_level": "280" - }, - { - "agg_radius": "64", - "examine": "A battle-honed goblin. ", - "melee_animation": "6154", - "range_animation": "6154", - "attack_speed": "5", - "magic_level": "50", - "respawn_delay": "50", - "defence_animation": "6155", - "weakness": "8", - "magic_animation": "6154", - "death_animation": "6156", - "name": "Sergeant Strongstack", - "defence_level": "126", - "safespot": null, - "lifepoints": "128", - "strength_level": "118", - "id": "6261", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,14,0,0,0", - "range_level": "50", - "attack_level": "124" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "6262", - "range_level": "1", - "attack_level": "1" - }, - { - "agg_radius": "64", - "examine": "A battle-honed goblin. ", - "start_gfx": "1202", - "combat_style": "2", - "melee_animation": "6154", - "range_animation": "6154", - "attack_speed": "5", - "magic_level": "150", - "respawn_delay": "50", - "defence_animation": "6155", - "weakness": "3", - "magic_animation": "6154", - "death_animation": "6156", - "name": "Sergeant Steelwill", - "defence_level": "150", - "safespot": null, - "lifepoints": "127", - "strength_level": "50", - "id": "6263", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,6,0,0,0", - "range_level": "1", - "projectile": "1203", - "attack_level": "80" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "6264", - "range_level": "1", - "attack_level": "1" - }, - { - "agg_radius": "64", - "examine": "A battle-honed goblin. ", - "combat_style": "1", - "melee_animation": "6154", - "range_animation": "6154", - "attack_speed": "5", - "magic_level": "50", - "respawn_delay": "50", - "defence_animation": "6155", - "weakness": "2", - "magic_animation": "6154", - "death_animation": "6156", - "name": "Sergeant Grimspike", - "defence_level": "132", - "safespot": null, - "lifepoints": "146", - "strength_level": "80", - "id": "6265", - "aggressive": "true", - "bonuses": "0,0,0,0,20,0,0,0,0,0,0,0,0,0,20", - "range_level": "150", - "projectile": "1206", - "attack_level": "80" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "6266", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Big, ugly, and smelly.", - "melee_animation": "359", - "range_animation": "359", - "attack_speed": "6", - "magic_level": "27", - "respawn_delay": "25", - "defence_animation": "360", - "magic_animation": "359", - "death_animation": "361", - "name": "Fishing spot", - "defence_level": "27", - "safespot": null, - "lifepoints": "60", - "strength_level": "27", - "id": "6267", - "aggressive": "true", - "bonuses": "15,15,10,20,40,15,50,50,50,20,50,58,0,0,0", - "range_level": "27", - "attack_level": "27" - }, - { - "examine": "Green and aggressive.", - "melee_animation": "2936", - "range_animation": "2936", - "attack_speed": "6", - "respawn_delay": "25", - "defence_animation": "2937", - "weakness": "8", - "magic_animation": "2936", - "death_animation": "2938", - "name": "Jogre", - "defence_level": "62", - "safespot": null, - "lifepoints": "70", - "strength_level": "62", - "id": "6268", - "aggressive": "true", - "bonuses": "10,20,20,20,20,20,10,20,0,0,0,0,0,0,0", - "clue_level": "1", - "range_level": "1", - "attack_level": "62" - }, - { - "examine": "A one-eyed man-eater.", - "melee_animation": "4652", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "25", - "defence_animation": "4651", - "weakness": "8", - "slayer_exp": "110", - "magic_animation": "0", - "death_animation": "4653", - "name": "Cyclops", - "defence_level": "48", - "safespot": null, - "lifepoints": "110", - "strength_level": "70", - "id": "6269", - "aggressive": "true", - "bonuses": "22,22,22,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "A one-eyed man-eater.", - "melee_animation": "4652", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "25", - "defence_animation": "4651", - "weakness": "8", - "slayer_exp": "110", - "magic_animation": "0", - "death_animation": "4653", - "name": "Cyclops", - "defence_level": "48", - "safespot": null, - "lifepoints": "110", - "strength_level": "70", - "id": "6270", - "aggressive": "true", - "bonuses": "22,22,22,0,0,0,0,0,0,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Ugly, fierce and with a bad attitude.", - "melee_animation": "4320", - "range_animation": "4320", - "respawn_delay": "25", - "defence_animation": "4322", - "weakness": "8", - "magic_animation": "4320", - "death_animation": "4321", - "name": "Ork", - "defence_level": "68", - "safespot": null, - "lifepoints": "110", - "strength_level": "68", - "id": "6271", - "aggressive": "true", - "bonuses": "40,20,30,45,45,45,45,20,45,35,0,0,0,0,0", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "Ugly, fierce and with a bad attitude.", - "melee_animation": "4320", - "range_animation": "4320", - "respawn_delay": "25", - "defence_animation": "4322", - "magic_animation": "4320", - "death_animation": "4321", - "name": "Ork", - "defence_level": "68", - "safespot": null, - "lifepoints": "110", - "strength_level": "68", - "id": "6272", - "aggressive": "true", - "bonuses": "40,20,30,45,45,45,45,20,45,35,0,0,0,0,0", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "Ugly, fierce and with a bad attitude.", - "melee_animation": "4320", - "range_animation": "4320", - "respawn_delay": "25", - "defence_animation": "4322", - "magic_animation": "4320", - "death_animation": "4321", - "name": "Ork", - "defence_level": "68", - "safespot": null, - "lifepoints": "110", - "strength_level": "68", - "id": "6273", - "aggressive": "true", - "bonuses": "40,20,30,45,45,45,45,20,45,35,0,0,0,0,0", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "Ugly, fierce and with a bad attitude.", - "melee_animation": "4320", - "range_animation": "4320", - "respawn_delay": "25", - "defence_animation": "4322", - "magic_animation": "4320", - "death_animation": "4321", - "name": "Ork", - "defence_level": "68", - "safespot": null, - "lifepoints": "110", - "strength_level": "68", - "id": "6274", - "aggressive": "true", - "bonuses": "40,20,30,45,45,45,45,20,45,35,0,0,0,0,0", - "range_level": "1", - "attack_level": "68" - }, - { - "examine": "An ugly, smelly creature.", - "melee_animation": "164", - "range_animation": "164", - "combat_audio": "469,472,471", - "respawn_delay": "25", - "defence_animation": "165", - "weakness": "8", - "magic_animation": "164", - "death_animation": "167", - "name": "Hobgoblin", - "defence_level": "40", - "safespot": null, - "lifepoints": "52", - "strength_level": "40", - "id": "6275", - "aggressive": "true", - "bonuses": "20,30,30,30,30,30,10,30,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "The spirit of a ranger, serving bandos beyond death.", - "start_gfx": "95", - "combat_style": "1", - "melee_animation": "4320", - "range_animation": "4320", - "respawn_delay": "25", - "defence_animation": "4322", - "weakness": "0", - "magic_animation": "4320", - "death_animation": "4321", - "name": "Spiritual ranger", - "defence_level": "70", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "id": "6276", - "aggressive": "true", - "bonuses": "30,50,30,30,50,60,50,40,40,0,0,0,0,0,0", - "clue_level": "2", - "range_level": "70", - "projectile": "1195", - "attack_level": "1" - }, - { - "examine": "A true servant of Bandos.", - "melee_animation": "4320", - "range_animation": "4320", - "respawn_delay": "25", - "defence_animation": "4322", - "weakness": "8", - "magic_animation": "4320", - "death_animation": "4321", - "name": "Spiritual warrior", - "defence_level": "70", - "safespot": null, - "lifepoints": "131", - "strength_level": "70", - "id": "6277", - "aggressive": "true", - "bonuses": "50,40,45,60,60,60,60,20,50,60,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "70" - }, - { - "examine": "One of Bandos' chosen.", - "combat_style": "2", - "melee_animation": "4320", - "range_animation": "4320", - "attack_speed": "5", - "magic_level": "142", - "respawn_delay": "25", - "defence_animation": "4322", - "weakness": "4", - "magic_animation": "4320", - "death_animation": "4321", - "name": "Spiritual mage", - "defence_level": "103", - "safespot": null, - "lifepoints": "106", - "strength_level": "1", - "id": "6278", - "aggressive": "true", - "bonuses": "0,0,0,0,0,12,14,13,35,13,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ancient goblin.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "respawn_delay": "25", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "5", - "safespot": null, - "lifepoints": "20", - "strength_level": "5", - "id": "6279", - "aggressive": "true", - "bonuses": "10,20,20,20,20,5,20,10,0,0,0,0,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "A warrior for Bandos.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "respawn_delay": "25", - "defence_animation": "6183", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "5", - "safespot": null, - "lifepoints": "15", - "strength_level": "5", - "id": "6280", - "aggressive": "true", - "bonuses": "10,20,20,20,20,5,20,10,0,0,0,0,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "A soldier to the death.", - "melee_animation": "6188", - "range_animation": "6188", - "combat_audio": "469,472,471", - "respawn_delay": "25", - "defence_animation": "6189", - "magic_animation": "6188", - "death_animation": "6190", - "name": "Goblin", - "defence_level": "5", - "safespot": null, - "lifepoints": "15", - "strength_level": "5", - "id": "6281", - "aggressive": "true", - "bonuses": "5,10,10,10,10,10,5,10,5,0,0,0,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "A soldier to the death.", - "melee_animation": "6188", - "range_animation": "6188", - "combat_audio": "469,472,471", - "respawn_delay": "25", - "defence_animation": "6189", - "magic_animation": "6188", - "death_animation": "6190", - "name": "Goblin", - "defence_level": "5", - "safespot": null, - "lifepoints": "18", - "strength_level": "5", - "id": "6282", - "aggressive": "true", - "bonuses": "5,10,10,10,10,10,5,10,5,0,0,0,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "A warrior for Bandos.", - "melee_animation": "6185", - "range_animation": "6185", - "combat_audio": "469,472,471", - "respawn_delay": "25", - "defence_animation": "6183", - "slayer_exp": "16", - "magic_animation": "6185", - "death_animation": "6182", - "name": "Goblin", - "defence_level": "5", - "safespot": null, - "lifepoints": "16", - "strength_level": "5", - "id": "6283", - "aggressive": "true", - "bonuses": "10,20,20,20,20,5,20,10,0,0,0,0,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "5" - }, - { - "examine": "You don't think you can harm this terrorbird.", - "combat_style": "1", - "melee_animation": "7108", - "range_animation": "0", - "magic_level": "59", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "59", - "safespot": null, - "lifepoints": "168", - "strength_level": "59", - "id": "6285", - "aggressive": "true", - "range_level": "59", - "projectile": "1468", - "attack_level": "59" - }, - { - "examine": "You don't think you can harm this terrorbird.", - "combat_style": "1", - "melee_animation": "7108", - "range_animation": "0", - "magic_level": "59", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "59", - "safespot": null, - "lifepoints": "168", - "strength_level": "59", - "id": "6286", - "aggressive": "true", - "range_level": "59", - "projectile": "1468", - "attack_level": "59" - }, - { - "examine": "You don't think you can harm this terrorbird.", - "combat_style": "1", - "melee_animation": "7108", - "range_animation": "0", - "magic_level": "59", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "59", - "safespot": null, - "lifepoints": "168", - "strength_level": "59", - "id": "6287", - "aggressive": "true", - "range_level": "59", - "projectile": "1468", - "attack_level": "59" - }, - { - "examine": "You don't think you can harm this terrorbird.", - "combat_style": "1", - "melee_animation": "7108", - "range_animation": "0", - "magic_level": "59", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "59", - "safespot": null, - "lifepoints": "168", - "strength_level": "59", - "id": "6288", - "aggressive": "true", - "range_level": "59", - "projectile": "1468", - "attack_level": "59" - }, - { - "examine": "You don't think you can harm this terrorbird.", - "combat_style": "1", - "melee_animation": "7108", - "range_animation": "0", - "magic_level": "59", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "59", - "safespot": null, - "lifepoints": "168", - "strength_level": "59", - "id": "6289", - "aggressive": "true", - "range_level": "59", - "projectile": "1468", - "attack_level": "59" - }, - { - "combat_style": "1", - "melee_animation": "7108", - "respawn_delay": "60", - "defence_animation": "7110", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "1", - "safespot": null, - "lifepoints": "154", - "strength_level": "1", - "id": "6290", - "aggressive": "true", - "range_level": "1", - "projectile": "1468", - "attack_level": "1" - }, - { - "examine": "You don't think you can harm this terrorbird.", - "combat_style": "1", - "melee_animation": "7108", - "range_animation": "0", - "magic_level": "59", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "59", - "safespot": null, - "lifepoints": "168", - "strength_level": "59", - "id": "6291", - "aggressive": "true", - "range_level": "59", - "projectile": "1468", - "attack_level": "59" - }, - { - "examine": "You don't think you can harm this terrorbird.", - "combat_style": "1", - "melee_animation": "7108", - "range_animation": "0", - "magic_level": "59", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "59", - "safespot": null, - "lifepoints": "168", - "strength_level": "59", - "id": "6292", - "aggressive": "true", - "range_level": "59", - "projectile": "1468", - "attack_level": "59" - }, - { - "combat_style": "1", - "melee_animation": "7108", - "respawn_delay": "60", - "defence_animation": "7110", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "1", - "safespot": null, - "lifepoints": "154", - "strength_level": "1", - "id": "6293", - "aggressive": "true", - "range_level": "1", - "projectile": "1468", - "attack_level": "1" - }, - { - "examine": "You don't think you can harm this terrorbird.", - "combat_style": "1", - "melee_animation": "7108", - "range_animation": "0", - "magic_level": "59", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "59", - "safespot": null, - "lifepoints": "308", - "strength_level": "59", - "id": "6294", - "aggressive": "true", - "range_level": "59", - "projectile": "1468", - "attack_level": "59" - }, - { - "examine": "You don't think you can harm this terrorbird.", - "combat_style": "1", - "melee_animation": "7108", - "range_animation": "0", - "magic_level": "59", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "59", - "safespot": null, - "lifepoints": "308", - "strength_level": "59", - "id": "6295", - "aggressive": "true", - "range_level": "59", - "projectile": "1468", - "attack_level": "59" - }, - { - "examine": "You don't think you can harm this creature.", - "melee_animation": "7093", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "52", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "7091", - "name": "Warped tortoise", - "defence_level": "52", - "safespot": null, - "lifepoints": "148", - "strength_level": "39", - "id": "6296", - "range_level": "1", - "attack_level": "39" - }, - { - "melee_animation": "7093", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "7092", - "death_animation": "7091", - "name": "Warped tortoise", - "defence_level": "1", - "safespot": null, - "lifepoints": "87", - "strength_level": "1", - "id": "6297", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Annoyingly easy to squish.", - "melee_animation": "0", - "range_animation": "0", - "magic_level": "2", - "defence_animation": "0", - "magic_animation": "0", - "name": "Bolrie", - "defence_level": "2", - "safespot": null, - "lifepoints": "0", - "strength_level": "1", - "id": "6306", - "aggressive": "true", - "range_level": "2", - "attack_level": "1" - }, - { - "examine": "She looks bored.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard no. 21", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6314", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks even more bored.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard no. 72", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6315", - "range_level": "1", - "attack_level": "1" - }, - { - "combat_style": "1", - "melee_animation": "7108", - "respawn_delay": "60", - "defence_animation": "7110", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "1", - "safespot": null, - "lifepoints": "154", - "strength_level": "1", - "id": "6322", - "aggressive": "true", - "range_level": "1", - "projectile": "1468", - "attack_level": "1" - }, - { - "combat_style": "1", - "melee_animation": "7108", - "respawn_delay": "60", - "defence_animation": "7110", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "1", - "safespot": null, - "lifepoints": "154", - "strength_level": "1", - "id": "6323", - "aggressive": "true", - "range_level": "1", - "projectile": "1468", - "attack_level": "1" - }, - { - "combat_style": "1", - "melee_animation": "7108", - "respawn_delay": "60", - "defence_animation": "7110", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "1", - "safespot": null, - "lifepoints": "154", - "strength_level": "1", - "id": "6324", - "aggressive": "true", - "range_level": "1", - "projectile": "1468", - "attack_level": "1" - }, - { - "combat_style": "1", - "melee_animation": "7108", - "respawn_delay": "60", - "defence_animation": "7110", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "1", - "safespot": null, - "lifepoints": "154", - "strength_level": "1", - "id": "6325", - "aggressive": "true", - "range_level": "1", - "projectile": "1468", - "attack_level": "1" - }, - { - "combat_style": "1", - "melee_animation": "7108", - "respawn_delay": "60", - "defence_animation": "7110", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "1", - "safespot": null, - "lifepoints": "154", - "strength_level": "1", - "id": "6326", - "aggressive": "true", - "range_level": "1", - "projectile": "1468", - "attack_level": "1" - }, - { - "combat_style": "1", - "melee_animation": "7108", - "respawn_delay": "60", - "defence_animation": "7110", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "1", - "safespot": null, - "lifepoints": "154", - "strength_level": "1", - "id": "6327", - "aggressive": "true", - "range_level": "1", - "projectile": "1468", - "attack_level": "1" - }, - { - "combat_style": "1", - "melee_animation": "7108", - "respawn_delay": "60", - "defence_animation": "7110", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "1", - "safespot": null, - "lifepoints": "154", - "strength_level": "1", - "id": "6328", - "aggressive": "true", - "range_level": "1", - "projectile": "1468", - "attack_level": "1" - }, - { - "combat_style": "1", - "melee_animation": "7108", - "respawn_delay": "60", - "defence_animation": "7110", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "1", - "safespot": null, - "lifepoints": "154", - "strength_level": "1", - "id": "6329", - "aggressive": "true", - "range_level": "1", - "projectile": "1468", - "attack_level": "1" - }, - { - "combat_style": "1", - "melee_animation": "7108", - "respawn_delay": "60", - "defence_animation": "7110", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "1", - "safespot": null, - "lifepoints": "154", - "strength_level": "1", - "id": "6330", - "aggressive": "true", - "range_level": "1", - "projectile": "1468", - "attack_level": "1" - }, - { - "combat_style": "1", - "melee_animation": "7108", - "respawn_delay": "60", - "defence_animation": "7110", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "1", - "safespot": null, - "lifepoints": "154", - "strength_level": "1", - "id": "6331", - "aggressive": "true", - "range_level": "1", - "projectile": "1468", - "attack_level": "1" - }, - { - "combat_style": "1", - "melee_animation": "7108", - "respawn_delay": "60", - "defence_animation": "7110", - "death_animation": "7109", - "name": "Warped terrorbird", - "defence_level": "1", - "safespot": null, - "lifepoints": "154", - "strength_level": "1", - "id": "6332", - "aggressive": "true", - "range_level": "1", - "projectile": "1468", - "attack_level": "1" - }, - { - "examine": "A child of West Ardougne.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6334", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A child of West Ardougne.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6335", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A child of West Ardougne.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6336", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A child of West Ardougne.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6337", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A child of West Ardougne.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6338", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A child of West Ardougne.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Child", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6339", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Duck!", - "combat_style": "1", - "melee_animation": "3920", - "range_animation": "3920", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "3922", - "name": "Child", - "defence_level": "65", - "safespot": null, - "lifepoints": "92", - "strength_level": "48", - "id": "6344", - "aggressive": "true", - "range_level": "65", - "attack_level": "48" - }, - { - "examine": "This one's had too much to drink!", - "melee_animation": "390", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "id": "6346", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This one's had too much to drink!", - "melee_animation": "390", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "id": "6347", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This one's had too much to drink!", - "melee_animation": "390", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "id": "6348", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This one's had too much to drink!", - "melee_animation": "390", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "id": "6349", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This one's had too much to drink!", - "melee_animation": "390", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "id": "6350", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "390", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "23", - "strength_level": "1", - "id": "6351", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "390", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "23", - "strength_level": "1", - "id": "6352", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "390", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "23", - "strength_level": "1", - "id": "6353", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "390", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "23", - "strength_level": "1", - "id": "6354", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "390", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "23", - "strength_level": "1", - "id": "6355", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "390", - "combat_audio": "703,705,704", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Pirate", - "defence_level": "1", - "safespot": null, - "lifepoints": "23", - "strength_level": "1", - "id": "6356", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The mother of all pests!", - "attack_speed": "6", - "magic_level": "70", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "0", - "name": "Street urchin", - "defence_level": "70", - "safespot": null, - "lifepoints": "1428", - "strength_level": "70", - "id": "6358", - "aggressive": "true", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "A warrior of Zamorak.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Zamorak warrior", - "defence_level": "44", - "safespot": null, - "lifepoints": "62", - "strength_level": "44", - "id": "6363", - "aggressive": "true", - "range_level": "1", - "attack_level": "44" - }, - { - "examine": "A warrior of Zamorak.", - "melee_animation": "390", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Zamorak warrior", - "defence_level": "47", - "safespot": null, - "lifepoints": "67", - "strength_level": "47", - "id": "6364", - "aggressive": "true", - "range_level": "1", - "attack_level": "47" - }, - { - "examine": "A ranger of Zamorak.", - "combat_style": "1", - "melee_animation": "426", - "range_animation": "426", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "836", - "name": "Zamorak ranger", - "defence_level": "46", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "6365", - "aggressive": "true", - "range_level": "46", - "attack_level": "1" - }, - { - "examine": "A ranger of Zamorak.", - "melee_animation": "426", - "range_animation": "426", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "836", - "name": "Zamorak ranger", - "defence_level": "46", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "6366", - "aggressive": "true", - "range_level": "46", - "attack_level": "1" - }, - { - "examine": "A mage of Zamorak.", - "combat_style": "2", - "melee_animation": "0", - "range_animation": "0", - "magic_level": "49", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "836", - "name": "Zamorak mage", - "defence_level": "49", - "safespot": null, - "lifepoints": "70", - "strength_level": "1", - "id": "6367", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A mage of Zamorak.", - "melee_animation": "0", - "range_animation": "0", - "magic_level": "49", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "836", - "name": "Zamorak mage", - "defence_level": "49", - "safespot": null, - "lifepoints": "70", - "strength_level": "1", - "id": "6368", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A cave dweller.", - "melee_animation": "7207", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "7205", - "name": "Cave lizard", - "defence_level": "47", - "safespot": null, - "lifepoints": "67", - "strength_level": "1", - "id": "6369", - "aggressive": "true", - "range_level": "47", - "attack_level": "1" - }, - { - "examine": "A representative of the Z.M.I.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mage of Zamorak", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6370", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A Z.M.I. runecrafter.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Zamorak crafter", - "defence_level": "19", - "safespot": null, - "lifepoints": "27", - "strength_level": "19", - "id": "6371", - "range_level": "1", - "attack_level": "19" - }, - { - "death_animation": "836", - "name": "Zamorak crafter", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "melee_animation": "422", - "strength_level": "1", - "id": "6372", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1", - "defence_animation": "425" - }, - { - "slayer_exp": "49", - "name": "Guard dog", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6374", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A barely visible deadly spider.", - "melee_animation": "5327", - "combat_audio": "537,539,538", - "respawn_delay": "60", - "defence_animation": "5328", - "death_animation": "5329", - "name": "Jungle spider", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "6376", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A barely visible deadly spider.", - "melee_animation": "5327", - "combat_audio": "537,539,538", - "respawn_delay": "60", - "defence_animation": "5328", - "death_animation": "5329", - "name": "Jungle spider", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "6377", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "I wouldn't want to be footing that bill.", - "melee_animation": "6775", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "6779", - "name": "Tenacious toucan", - "defence_level": "60", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "6378", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "I wonder how much he can lift.", - "melee_animation": "7237", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "7238", - "name": "Giant ant worker", - "defence_level": "35", - "safespot": null, - "lifepoints": "50", - "strength_level": "35", - "id": "6379", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "Gi-ant-ant-ant-ant...", - "melee_animation": "7237", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "7238", - "name": "Giant ant soldier", - "defence_level": "50", - "safespot": null, - "lifepoints": "71", - "strength_level": "50", - "id": "6380", - "aggressive": "true", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "That stinger has to hurt...", - "melee_animation": "7242", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "7244", - "name": "Giant wasp", - "defence_level": "60", - "safespot": null, - "lifepoints": "85", - "strength_level": "60", - "id": "6381", - "aggressive": "true", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "Polynomial - a parrot that goes without breakfast", - "melee_animation": "6775", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "6777", - "name": "Pernicious parrot", - "defence_level": "45", - "safespot": null, - "lifepoints": "64", - "strength_level": "45", - "id": "6382", - "range_level": "1", - "attack_level": "45" - }, - { - "examine": "That stinger has to hurt...", - "melee_animation": "7242", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "7243", - "death_animation": "7244", - "name": "Giant wasp", - "defence_level": "1", - "safespot": null, - "lifepoints": "37", - "strength_level": "1", - "id": "6383", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very large", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Karamjan Jungle eagle", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6385", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Flies like a rock.", - "melee_animation": "9454", - "range_animation": "1516", - "combat_audio": "428,430,429", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "9455", - "slayer_exp": "105", - "magic_animation": "1516", - "death_animation": "1518", - "name": "Gargoyle", - "defence_level": "107", - "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "6389", - "aggressive": "true", - "bonuses": "0,0,0,0,0,20,20,0,20,20,0,0,0,0,0", - "clue_level": "2", - "range_level": "1", - "attack_level": "75" - }, - { - "examine": "I wish I could tell where he was looking. What could be beneath that hood?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Grim Reaper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6390", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6402", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6403", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6404", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6405", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6406", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6407", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6408", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6409", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6410", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6411", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6412", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6413", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6414", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6415", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6416", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6417", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6418", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6419", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6420", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6421", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6422", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6423", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6424", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6425", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6426", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6427", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6428", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6429", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6430", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6431", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6432", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6433", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6434", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6435", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6436", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6437", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6438", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6439", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6440", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6441", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6442", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6443", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6444", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6445", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6446", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6447", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6448", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6449", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6450", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6451", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6452", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6453", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6454", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6455", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6456", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6457", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6458", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6459", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6460", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6461", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6462", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6463", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6464", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6465", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6466", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6467", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A goblin high priest", - "melee_animation": "7317", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "6182", - "name": "Snothead", - "defence_level": "14", - "safespot": null, - "lifepoints": "20", - "strength_level": "14", - "id": "6469", - "aggressive": "true", - "range_level": "1", - "attack_level": "14" - }, - { - "examine": "A goblin high priest", - "melee_animation": "7317", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "6182", - "name": "Snailfeet", - "defence_level": "18", - "safespot": null, - "lifepoints": "25", - "strength_level": "13", - "id": "6470", - "aggressive": "true", - "range_level": "18", - "attack_level": "13" - }, - { - "examine": "A goblin high priest", - "melee_animation": "7317", - "range_animation": "0", - "magic_level": "22", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "6182", - "name": "Mosschin", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "16", - "id": "6471", - "aggressive": "true", - "range_level": "1", - "attack_level": "16" - }, - { - "examine": "A goblin high priest", - "melee_animation": "7317", - "range_animation": "0", - "magic_level": "26", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "6182", - "name": "Redeyes", - "defence_level": "26", - "safespot": null, - "lifepoints": "37", - "strength_level": "19", - "id": "6472", - "aggressive": "true", - "range_level": "1", - "attack_level": "19" - }, - { - "examine": "A goblin high priest", - "melee_animation": "7317", - "range_animation": "0", - "magic_level": "26", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "6182", - "name": "Strongbones", - "defence_level": "26", - "safespot": null, - "lifepoints": "37", - "strength_level": "19", - "id": "6473", - "aggressive": "true", - "range_level": "1", - "attack_level": "19" - }, - { - "examine": "Priest of the Ekeleshuun tribe.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Priest", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6482", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He is expounding the word of the Big High War God.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Preacher", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6488", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6490", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6491", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6492", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6493", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6494", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Goblin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "469,472,471", - "strength_level": "1", - "id": "6495", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He doesn't look very welcoming.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Goblin guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6496", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He doesn't look very welcoming.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "469,472,471", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Goblin guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6497", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guard wearing blue armour.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6498", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guard wearing orange armour.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6499", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guard wearing black armour.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6500", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guard wearing white armour.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6501", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guard wearing purple armour.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6502", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guard wearing yellow armour.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6503", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "25", - "name": "Ghost", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "436,439,438", - "strength_level": "1", - "id": "6504", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very noble spider and attendant to the Queen.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Registrar 2", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6507", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The highest ranking of the Spider Queen's servants.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Registrar 3", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6508", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The head of the Spider Queen's army.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Registrar 4", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6509", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Trying hard to hide his identity.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Jury", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6510", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Sir Amik's loyal squire.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Spectator", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6512", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A being of ore and minerals.", - "magic_animation": "0", - "name": "Spectator", - "defence_level": "1", - "safespot": null, - "lifepoints": "1", - "range_animation": "0", - "strength_level": "1", - "id": "6514", - "range_level": "1", - "attack_level": "1", - "defence_animation": "0" - }, - { - "examine": "A monkey on a mission.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Spectator", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6516", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He works for Doric & Son.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Spectator", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6518", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Gives an introduction to the Grand Exchange.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Grand Exchange Tutor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6521", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The son of Ali M!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Farid Morrisane (ores)", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6523", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's probably seen better days.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bob Barter (herbs)", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6524", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "You can never miss a pirate in disguise.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Murky Matt (runes)", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6525", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A tribal man", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Relobo Blinyo (logs)", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6526", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's travelled a long way.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Hofuthand (armour and weapons)", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6527", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Chief architect of the Spider Realm.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Registrar 5", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6536", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "6543", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "511,513,512", - "strength_level": "1", - "id": "6544", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Tapping his feet and looking very bored.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "null", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6558", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A huge war chief. ", - "melee_animation": "422", - "range_animation": "422", - "attack_speed": "5", - "respawn_delay": "20", - "defence_animation": "7061", - "magic_animation": "422", - "death_animation": "7062", - "name": "null", - "defence_level": "250", - "safespot": null, - "lifepoints": "254", - "strength_level": "251", - "id": "6560", - "aggressive": "true", - "bonuses": "300,300,300,300,300,300,150,300,300,250,43,96,43,30,0", - "range_level": "200", - "attack_level": "250" - }, - { - "spawn_animation": "7410", - "examine": "The essence of an imp slain during the god wars.", - "melee_animation": "7407", - "range_animation": "7501", - "combat_audio": "0,0,0", - "magic_level": "10", - "defence_animation": "7404", - "slayer_exp": "10", - "magic_animation": "7500", - "death_animation": "7408", - "name": "Revenant imp", - "defence_level": "10", - "safespot": null, - "lifepoints": "20", - "strength_level": "10", - "id": "6604", - "range_level": "10", - "attack_level": "10" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6605", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7485", - "examine": "The ghost of an icefiend slain during the God Wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "27", - "defence_animation": "7483", - "slayer_exp": "40", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant icefiend", - "defence_level": "27", - "safespot": null, - "lifepoints": "40", - "strength_level": "27", - "id": "6606", - "clue_level": "1", - "range_level": "27", - "attack_level": "27" - }, - { - "spawn_animation": "7403", - "examine": "The ghost of a werewolf slain during the god wars.", - "melee_animation": "7397", - "range_animation": "7521", - "magic_level": "38", - "defence_animation": "7399", - "magic_animation": "7496", - "death_animation": "7398", - "name": "Revenant werewolf", - "defence_level": "38", - "safespot": null, - "lifepoints": "65", - "strength_level": "38", - "id": "6607", - "clue_level": "2", - "range_level": "38", - "attack_level": "38" - }, - { - "examine": "The ghost of a hobgoblin slain during the God Wars.", - "melee_animation": "7418", - "range_animation": "7516", - "combat_audio": "469,472,471", - "magic_level": "32", - "defence_animation": "7420", - "slayer_exp": "72", - "magic_animation": "7503", - "death_animation": "7419", - "name": "Revenant hobgoblin", - "defence_level": "32", - "safespot": null, - "lifepoints": "72", - "strength_level": "32", - "id": "6608", - "clue_level": "1", - "range_level": "32", - "attack_level": "32" - }, - { - "spawn_animation": "7403", - "examine": "The ghost of a werewolf slain during the god wars.", - "melee_animation": "7397", - "range_animation": "7521", - "magic_level": "38", - "defence_animation": "7399", - "magic_animation": "7496", - "death_animation": "7398", - "name": "Revenant werewolf", - "defence_level": "38", - "safespot": null, - "lifepoints": "65", - "strength_level": "38", - "id": "6609", - "clue_level": "2", - "range_level": "38", - "attack_level": "38" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6610", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7440", - "examine": "A ghost of a knight slain during the god wars.", - "melee_animation": "7441", - "range_animation": "7522", - "poisonous": "", - "magic_level": "80", - "defence_animation": "7443", - "slayer_exp": "143", - "poison_amount": "", - "magic_animation": "7508", - "death_animation": "7442", - "name": "Revenant knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "143", - "strength_level": "80", - "id": "6611", - "clue_level": "2", - "range_level": "80", - "attack_level": "80" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6612", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7426", - "examine": "The ghost of a vampire slain in the god wars.", - "melee_animation": "7427", - "range_animation": "7520", - "magic_level": "34", - "defence_animation": "7429", - "slayer_exp": "60", - "magic_animation": "7507", - "death_animation": "7428", - "name": "Revenant vampire", - "defence_level": "34", - "safespot": null, - "lifepoints": "60", - "strength_level": "34", - "id": "6613", - "clue_level": "1", - "range_level": "34", - "attack_level": "34" - }, - { - "spawn_animation": "7403", - "examine": "The ghost of a werewolf slain during the god wars.", - "melee_animation": "7397", - "range_animation": "7521", - "magic_level": "38", - "defence_animation": "7399", - "magic_animation": "7496", - "death_animation": "7398", - "name": "Revenant werewolf", - "defence_level": "38", - "safespot": null, - "lifepoints": "65", - "strength_level": "38", - "id": "6614", - "clue_level": "2", - "range_level": "38", - "attack_level": "38" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6615", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6616", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7403", - "examine": "The ghost of a werewolf slain during the god wars.", - "melee_animation": "7397", - "range_animation": "7521", - "magic_level": "38", - "defence_animation": "7399", - "magic_animation": "7496", - "death_animation": "7398", - "name": "Revenant werewolf", - "defence_level": "38", - "safespot": null, - "lifepoints": "65", - "strength_level": "38", - "id": "6617", - "clue_level": "2", - "range_level": "38", - "attack_level": "38" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6618", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7440", - "examine": "A ghost of a knight slain during the god wars.", - "melee_animation": "7441", - "range_animation": "7522", - "poisonous": "", - "magic_level": "80", - "defence_animation": "7443", - "slayer_exp": "143", - "poison_amount": "", - "magic_animation": "7508", - "death_animation": "7442", - "name": "Revenant knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "143", - "strength_level": "80", - "id": "6619", - "clue_level": "2", - "range_level": "80", - "attack_level": "80" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6620", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7485", - "examine": "The ghost of an icefiend slain during the God Wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "27", - "defence_animation": "7483", - "slayer_exp": "40", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant icefiend", - "defence_level": "27", - "safespot": null, - "lifepoints": "40", - "strength_level": "27", - "id": "6621", - "clue_level": "1", - "range_level": "27", - "attack_level": "27" - }, - { - "spawn_animation": "7485", - "examine": "The essence of a pyrefiend slain during the god wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "29", - "defence_animation": "7483", - "slayer_exp": "48", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant pyrefiend", - "defence_level": "29", - "safespot": null, - "lifepoints": "48", - "strength_level": "29", - "id": "6622", - "clue_level": "1", - "range_level": "29", - "attack_level": "29" - }, - { - "spawn_animation": "7426", - "examine": "The ghost of a vampire slain in the god wars.", - "melee_animation": "7427", - "range_animation": "7520", - "magic_level": "34", - "defence_animation": "7429", - "slayer_exp": "60", - "magic_animation": "7507", - "death_animation": "7428", - "name": "Revenant vampire", - "defence_level": "34", - "safespot": null, - "lifepoints": "60", - "strength_level": "34", - "id": "6623", - "clue_level": "1", - "range_level": "34", - "attack_level": "34" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6624", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7403", - "examine": "The ghost of a werewolf slain during the god wars.", - "melee_animation": "7397", - "range_animation": "7521", - "magic_level": "38", - "defence_animation": "7399", - "magic_animation": "7496", - "death_animation": "7398", - "name": "Revenant werewolf", - "defence_level": "38", - "safespot": null, - "lifepoints": "65", - "strength_level": "38", - "id": "6625", - "clue_level": "2", - "range_level": "38", - "attack_level": "38" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6626", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7440", - "examine": "A ghost of a knight slain during the god wars.", - "melee_animation": "7441", - "range_animation": "7522", - "poisonous": "", - "magic_level": "80", - "defence_animation": "7443", - "slayer_exp": "143", - "poison_amount": "", - "magic_animation": "7508", - "death_animation": "7442", - "name": "Revenant knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "143", - "strength_level": "80", - "id": "6627", - "clue_level": "2", - "range_level": "80", - "attack_level": "80" - }, - { - "spawn_animation": "7485", - "examine": "The ghost of an icefiend slain during the God Wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "27", - "defence_animation": "7483", - "slayer_exp": "40", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant icefiend", - "defence_level": "27", - "safespot": null, - "lifepoints": "40", - "strength_level": "27", - "id": "6628", - "clue_level": "1", - "range_level": "27", - "attack_level": "27" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6629", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7440", - "examine": "A ghost of a knight slain during the god wars.", - "melee_animation": "7441", - "range_animation": "7522", - "poisonous": "", - "magic_level": "80", - "defence_animation": "7443", - "slayer_exp": "143", - "poison_amount": "", - "magic_animation": "7508", - "death_animation": "7442", - "name": "Revenant knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "143", - "strength_level": "80", - "id": "6630", - "clue_level": "2", - "range_level": "80", - "attack_level": "80" - }, - { - "spawn_animation": "7485", - "examine": "The essence of a pyrefiend slain during the god wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "29", - "defence_animation": "7483", - "slayer_exp": "48", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant pyrefiend", - "defence_level": "29", - "safespot": null, - "lifepoints": "48", - "strength_level": "29", - "id": "6631", - "clue_level": "1", - "range_level": "29", - "attack_level": "29" - }, - { - "spawn_animation": "7403", - "examine": "The ghost of a werewolf slain during the god wars.", - "melee_animation": "7397", - "range_animation": "7521", - "magic_level": "38", - "defence_animation": "7399", - "magic_animation": "7496", - "death_animation": "7398", - "name": "Revenant werewolf", - "defence_level": "38", - "safespot": null, - "lifepoints": "65", - "strength_level": "38", - "id": "6632", - "clue_level": "2", - "range_level": "38", - "attack_level": "38" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6633", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7440", - "examine": "A ghost of a knight slain during the god wars.", - "melee_animation": "7441", - "range_animation": "7522", - "poisonous": "", - "magic_level": "80", - "defence_animation": "7443", - "slayer_exp": "143", - "poison_amount": "", - "magic_animation": "7508", - "death_animation": "7442", - "name": "Revenant knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "143", - "strength_level": "80", - "id": "6634", - "clue_level": "2", - "range_level": "80", - "attack_level": "80" - }, - { - "spawn_animation": "7410", - "examine": "The essence of an imp slain during the god wars.", - "melee_animation": "7407", - "range_animation": "7501", - "combat_audio": "0,0,0", - "magic_level": "10", - "defence_animation": "7404", - "slayer_exp": "10", - "magic_animation": "7500", - "death_animation": "7408", - "name": "Revenant imp", - "defence_level": "10", - "safespot": null, - "lifepoints": "20", - "strength_level": "10", - "id": "6635", - "range_level": "10", - "attack_level": "10" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6636", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6637", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6638", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6639", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7485", - "examine": "The ghost of an icefiend slain during the God Wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "27", - "defence_animation": "7483", - "slayer_exp": "40", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant icefiend", - "defence_level": "27", - "safespot": null, - "lifepoints": "40", - "strength_level": "27", - "id": "6640", - "clue_level": "1", - "range_level": "27", - "attack_level": "27" - }, - { - "spawn_animation": "7485", - "examine": "The essence of a pyrefiend slain during the god wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "29", - "defence_animation": "7483", - "slayer_exp": "48", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant pyrefiend", - "defence_level": "29", - "safespot": null, - "lifepoints": "48", - "strength_level": "29", - "id": "6641", - "clue_level": "1", - "range_level": "29", - "attack_level": "29" - }, - { - "examine": "The ghost of a hobgoblin slain during the God Wars.", - "melee_animation": "7418", - "range_animation": "7516", - "combat_audio": "469,472,471", - "magic_level": "32", - "defence_animation": "7420", - "slayer_exp": "72", - "magic_animation": "7503", - "death_animation": "7419", - "name": "Revenant hobgoblin", - "defence_level": "32", - "safespot": null, - "lifepoints": "72", - "strength_level": "32", - "id": "6642", - "clue_level": "1", - "range_level": "32", - "attack_level": "32" - }, - { - "spawn_animation": "7426", - "examine": "The ghost of a vampire slain in the god wars.", - "melee_animation": "7427", - "range_animation": "7520", - "magic_level": "34", - "defence_animation": "7429", - "slayer_exp": "60", - "magic_animation": "7507", - "death_animation": "7428", - "name": "Revenant vampire", - "defence_level": "34", - "safespot": null, - "lifepoints": "60", - "strength_level": "34", - "id": "6643", - "clue_level": "1", - "range_level": "34", - "attack_level": "34" - }, - { - "spawn_animation": "7403", - "examine": "The ghost of a werewolf slain during the god wars.", - "melee_animation": "7397", - "range_animation": "7521", - "magic_level": "38", - "defence_animation": "7399", - "magic_animation": "7496", - "death_animation": "7398", - "name": "Revenant werewolf", - "defence_level": "38", - "safespot": null, - "lifepoints": "65", - "strength_level": "38", - "id": "6644", - "clue_level": "2", - "range_level": "38", - "attack_level": "38" - }, - { - "spawn_animation": "7457", - "examine": "The ghost of a cyclops slain during the god wars.", - "melee_animation": "7453", - "range_animation": "7510", - "magic_level": "43", - "defence_animation": "7455", - "weakness": "0", - "slayer_exp": "110", - "magic_animation": "7497", - "death_animation": "7454", - "name": "Revenant cyclops", - "defence_level": "43", - "safespot": null, - "lifepoints": "110", - "strength_level": "43", - "id": "6645", - "clue_level": "2", - "range_level": "43", - "attack_level": "43" - }, - { - "spawn_animation": "7464", - "examine": "The essence of a hellhound slain during the god wars.", - "melee_animation": "7460", - "range_animation": "7501", - "combat_audio": "3717,3719,3718", - "magic_level": "50", - "defence_animation": "7462", - "slayer_exp": "80", - "magic_animation": "7515", - "death_animation": "7461", - "name": "Revenant hellhound", - "defence_level": "50", - "safespot": null, - "lifepoints": "80", - "strength_level": "50", - "id": "6646", - "clue_level": "2", - "range_level": "50", - "attack_level": "50" - }, - { - "spawn_animation": "7478", - "examine": "The essence of a demon slain during the god wars.", - "melee_animation": "7474", - "range_animation": "7512", - "combat_audio": "400,404,403", - "magic_level": "60", - "defence_animation": "7476", - "slayer_exp": "80", - "magic_animation": "7498", - "death_animation": "7475", - "name": "Revenant demon", - "defence_level": "60", - "safespot": null, - "lifepoints": "80", - "strength_level": "60", - "id": "6647", - "clue_level": "2", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6648", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7471", - "examine": "The ghost of a dark beast slain during the god wars.", - "melee_animation": "7467", - "range_animation": "7514", - "defence_animation": "7469", - "slayer_exp": "140", - "magic_animation": "7515", - "death_animation": "7468", - "name": "Revenant dark beast", - "defence_level": "80", - "safespot": null, - "lifepoints": "140", - "strength_level": "80", - "id": "6649", - "clue_level": "2", - "range_level": "80", - "attack_level": "80" - }, - { - "spawn_animation": "7440", - "examine": "A ghost of a knight slain during the god wars.", - "melee_animation": "7441", - "range_animation": "7522", - "poisonous": "", - "magic_level": "80", - "defence_animation": "7443", - "slayer_exp": "143", - "poison_amount": "", - "magic_animation": "7508", - "death_animation": "7442", - "name": "Revenant knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "143", - "strength_level": "80", - "id": "6650", - "clue_level": "2", - "range_level": "80", - "attack_level": "80" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6651", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7426", - "examine": "The ghost of a vampire slain in the god wars.", - "melee_animation": "7427", - "range_animation": "7520", - "magic_level": "34", - "defence_animation": "7429", - "slayer_exp": "60", - "magic_animation": "7507", - "death_animation": "7428", - "name": "Revenant vampire", - "defence_level": "34", - "safespot": null, - "lifepoints": "60", - "strength_level": "34", - "id": "6652", - "clue_level": "1", - "range_level": "34", - "attack_level": "34" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6653", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7440", - "examine": "A ghost of a knight slain during the god wars.", - "melee_animation": "7441", - "range_animation": "7522", - "poisonous": "", - "magic_level": "80", - "defence_animation": "7443", - "slayer_exp": "143", - "poison_amount": "", - "magic_animation": "7508", - "death_animation": "7442", - "name": "Revenant knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "143", - "strength_level": "80", - "id": "6654", - "clue_level": "2", - "range_level": "80", - "attack_level": "80" - }, - { - "spawn_animation": "7410", - "examine": "The essence of an imp slain during the god wars.", - "melee_animation": "7407", - "range_animation": "7501", - "combat_audio": "0,0,0", - "magic_level": "10", - "defence_animation": "7404", - "slayer_exp": "10", - "magic_animation": "7500", - "death_animation": "7408", - "name": "Revenant imp", - "defence_level": "10", - "safespot": null, - "lifepoints": "20", - "strength_level": "10", - "id": "6655", - "range_level": "10", - "attack_level": "10" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6656", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "22", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "22", - "safespot": null, - "lifepoints": "34", - "strength_level": "22", - "id": "6657", - "clue_level": "1", - "range_level": "22", - "attack_level": "22" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6658", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7485", - "examine": "The ghost of an icefiend slain during the God Wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "27", - "defence_animation": "7483", - "slayer_exp": "40", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant icefiend", - "defence_level": "27", - "safespot": null, - "lifepoints": "40", - "strength_level": "27", - "id": "6659", - "clue_level": "1", - "range_level": "27", - "attack_level": "27" - }, - { - "spawn_animation": "7485", - "examine": "The essence of a pyrefiend slain during the god wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "29", - "defence_animation": "7483", - "slayer_exp": "48", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant pyrefiend", - "defence_level": "29", - "safespot": null, - "lifepoints": "48", - "strength_level": "29", - "id": "6660", - "clue_level": "1", - "range_level": "29", - "attack_level": "29" - }, - { - "examine": "The ghost of a hobgoblin slain during the God Wars.", - "melee_animation": "7418", - "range_animation": "7516", - "combat_audio": "469,472,471", - "magic_level": "32", - "defence_animation": "7420", - "slayer_exp": "72", - "magic_animation": "7503", - "death_animation": "7419", - "name": "Revenant hobgoblin", - "defence_level": "32", - "safespot": null, - "lifepoints": "72", - "strength_level": "32", - "id": "6661", - "clue_level": "1", - "range_level": "32", - "attack_level": "32" - }, - { - "spawn_animation": "7426", - "examine": "The ghost of a vampire slain in the god wars.", - "melee_animation": "7427", - "range_animation": "7520", - "magic_level": "34", - "defence_animation": "7429", - "slayer_exp": "60", - "magic_animation": "7507", - "death_animation": "7428", - "name": "Revenant vampire", - "defence_level": "34", - "safespot": null, - "lifepoints": "60", - "strength_level": "34", - "id": "6662", - "clue_level": "1", - "range_level": "34", - "attack_level": "34" - }, - { - "spawn_animation": "7403", - "examine": "The ghost of a werewolf slain during the god wars.", - "melee_animation": "7397", - "range_animation": "7521", - "magic_level": "38", - "defence_animation": "7399", - "magic_animation": "7496", - "death_animation": "7398", - "name": "Revenant werewolf", - "defence_level": "38", - "safespot": null, - "lifepoints": "65", - "strength_level": "38", - "id": "6663", - "clue_level": "2", - "range_level": "38", - "attack_level": "38" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "poisonous": "", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6664", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7440", - "examine": "A ghost of a knight slain during the god wars.", - "melee_animation": "7441", - "range_animation": "7522", - "poisonous": "", - "magic_level": "80", - "defence_animation": "7443", - "slayer_exp": "143", - "poison_amount": "", - "magic_animation": "7508", - "death_animation": "7442", - "name": "Revenant knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "143", - "strength_level": "80", - "id": "6665", - "clue_level": "2", - "range_level": "80", - "attack_level": "80" - }, - { - "spawn_animation": "7410", - "examine": "The essence of an imp slain during the god wars.", - "melee_animation": "7407", - "range_animation": "7501", - "combat_audio": "0,0,0", - "magic_level": "10", - "defence_animation": "7404", - "slayer_exp": "10", - "magic_animation": "7500", - "death_animation": "7408", - "name": "Revenant imp", - "defence_level": "10", - "safespot": null, - "lifepoints": "20", - "strength_level": "10", - "id": "6666", - "range_level": "10", - "attack_level": "10" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6667", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7485", - "examine": "The essence of a pyrefiend slain during the god wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "29", - "defence_animation": "7483", - "slayer_exp": "48", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant pyrefiend", - "defence_level": "29", - "safespot": null, - "lifepoints": "48", - "strength_level": "29", - "id": "6668", - "clue_level": "1", - "range_level": "29", - "attack_level": "29" - }, - { - "spawn_animation": "7426", - "examine": "The ghost of a vampire slain in the god wars.", - "melee_animation": "7427", - "range_animation": "7520", - "magic_level": "34", - "defence_animation": "7429", - "slayer_exp": "60", - "magic_animation": "7507", - "death_animation": "7428", - "name": "Revenant vampire", - "defence_level": "34", - "safespot": null, - "lifepoints": "60", - "strength_level": "34", - "id": "6669", - "clue_level": "1", - "range_level": "34", - "attack_level": "34" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6670", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7426", - "examine": "The ghost of a vampire slain in the god wars.", - "melee_animation": "7427", - "range_animation": "7520", - "magic_level": "34", - "defence_animation": "7429", - "slayer_exp": "60", - "magic_animation": "7507", - "death_animation": "7428", - "name": "Revenant vampire", - "defence_level": "34", - "safespot": null, - "lifepoints": "60", - "strength_level": "34", - "id": "6671", - "clue_level": "1", - "range_level": "34", - "attack_level": "34" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6672", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7440", - "examine": "A ghost of a knight slain during the god wars.", - "melee_animation": "7441", - "range_animation": "7522", - "poisonous": "", - "magic_level": "80", - "defence_animation": "7443", - "slayer_exp": "143", - "poison_amount": "", - "magic_animation": "7508", - "death_animation": "7442", - "name": "Revenant knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "143", - "strength_level": "80", - "id": "6673", - "clue_level": "2", - "range_level": "80", - "attack_level": "80", - "prj_height": "" - }, - { - "spawn_animation": "7426", - "examine": "The ghost of a vampire slain in the god wars.", - "melee_animation": "7427", - "range_animation": "7520", - "magic_level": "34", - "defence_animation": "7429", - "slayer_exp": "60", - "magic_animation": "7507", - "death_animation": "7428", - "name": "Revenant vampire", - "defence_level": "34", - "safespot": null, - "lifepoints": "60", - "strength_level": "34", - "id": "6674", - "clue_level": "1", - "range_level": "34", - "attack_level": "34" - }, - { - "spawn_animation": "7403", - "examine": "The ghost of a werewolf slain during the god wars.", - "melee_animation": "7397", - "range_animation": "7521", - "magic_level": "38", - "defence_animation": "7399", - "magic_animation": "7496", - "death_animation": "7398", - "name": "Revenant werewolf", - "defence_level": "38", - "safespot": null, - "lifepoints": "65", - "strength_level": "38", - "id": "6675", - "clue_level": "2", - "range_level": "38", - "attack_level": "38" - }, - { - "spawn_animation": "7440", - "examine": "A ghost of a knight slain during the god wars.", - "melee_animation": "7441", - "range_animation": "7522", - "poisonous": "", - "magic_level": "80", - "defence_animation": "7443", - "slayer_exp": "143", - "poison_amount": "", - "magic_animation": "7508", - "death_animation": "7442", - "name": "Revenant knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "143", - "strength_level": "80", - "id": "6676", - "clue_level": "2", - "range_level": "80", - "attack_level": "80" - }, - { - "spawn_animation": "7410", - "examine": "The essence of an imp slain during the god wars.", - "melee_animation": "7407", - "range_animation": "7501", - "combat_audio": "0,0,0", - "magic_level": "10", - "defence_animation": "7404", - "slayer_exp": "10", - "magic_animation": "7500", - "death_animation": "7408", - "name": "Revenant imp", - "defence_level": "10", - "safespot": null, - "lifepoints": "20", - "strength_level": "10", - "id": "6677", - "range_level": "10", - "attack_level": "10" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6678", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6679", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6680", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6681", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7485", - "examine": "The ghost of an icefiend slain during the God Wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "27", - "defence_animation": "7483", - "slayer_exp": "40", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant icefiend", - "defence_level": "27", - "safespot": null, - "lifepoints": "40", - "strength_level": "27", - "id": "6682", - "clue_level": "1", - "range_level": "27", - "attack_level": "27" - }, - { - "spawn_animation": "7485", - "examine": "The essence of a pyrefiend slain during the god wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "29", - "defence_animation": "7483", - "slayer_exp": "48", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant pyrefiend", - "defence_level": "29", - "safespot": null, - "lifepoints": "48", - "strength_level": "29", - "id": "6683", - "clue_level": "1", - "range_level": "29", - "attack_level": "29" - }, - { - "examine": "The ghost of a hobgoblin slain during the God Wars.", - "melee_animation": "7418", - "range_animation": "7516", - "combat_audio": "469,472,471", - "magic_level": "32", - "defence_animation": "7420", - "slayer_exp": "72", - "magic_animation": "7503", - "death_animation": "7419", - "name": "Revenant hobgoblin", - "defence_level": "32", - "safespot": null, - "lifepoints": "72", - "strength_level": "32", - "id": "6684", - "clue_level": "1", - "range_level": "32", - "attack_level": "32" - }, - { - "spawn_animation": "7426", - "examine": "The ghost of a vampire slain in the god wars.", - "melee_animation": "7427", - "range_animation": "7520", - "magic_level": "34", - "defence_animation": "7429", - "slayer_exp": "60", - "magic_animation": "7507", - "death_animation": "7428", - "name": "Revenant vampire", - "defence_level": "34", - "safespot": null, - "lifepoints": "60", - "strength_level": "34", - "id": "6685", - "clue_level": "1", - "range_level": "34", - "attack_level": "34" - }, - { - "spawn_animation": "7403", - "examine": "The ghost of a werewolf slain during the god wars.", - "melee_animation": "7397", - "range_animation": "7521", - "magic_level": "38", - "defence_animation": "7399", - "magic_animation": "7496", - "death_animation": "7398", - "name": "Revenant werewolf", - "defence_level": "38", - "safespot": null, - "lifepoints": "65", - "strength_level": "38", - "id": "6686", - "clue_level": "2", - "range_level": "38", - "attack_level": "38" - }, - { - "spawn_animation": "7457", - "examine": "The ghost of a cyclops slain during the god wars.", - "melee_animation": "7453", - "range_animation": "7510", - "magic_level": "43", - "defence_animation": "7455", - "weakness": "0", - "slayer_exp": "110", - "magic_animation": "7497", - "death_animation": "7454", - "name": "Revenant cyclops", - "defence_level": "43", - "safespot": null, - "lifepoints": "110", - "strength_level": "43", - "id": "6687", - "clue_level": "2", - "range_level": "43", - "attack_level": "43" - }, - { - "spawn_animation": "7464", - "examine": "The essence of a hellhound slain during the god wars.", - "melee_animation": "7460", - "range_animation": "7501", - "combat_audio": "3717,3719,3718", - "magic_level": "50", - "defence_animation": "7462", - "slayer_exp": "80", - "magic_animation": "7515", - "death_animation": "7461", - "name": "Revenant hellhound", - "defence_level": "50", - "safespot": null, - "lifepoints": "80", - "strength_level": "50", - "id": "6688", - "clue_level": "2", - "range_level": "50", - "attack_level": "50" - }, - { - "spawn_animation": "7478", - "examine": "The essence of a demon slain during the god wars.", - "melee_animation": "7474", - "range_animation": "7512", - "combat_audio": "400,404,403", - "magic_level": "60", - "defence_animation": "7476", - "slayer_exp": "80", - "magic_animation": "7498", - "death_animation": "7475", - "name": "Revenant demon", - "defence_level": "60", - "safespot": null, - "lifepoints": "80", - "strength_level": "60", - "id": "6689", - "clue_level": "2", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6690", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7471", - "examine": "The ghost of a dark beast slain during the god wars.", - "melee_animation": "7467", - "range_animation": "7514", - "defence_animation": "7469", - "slayer_exp": "140", - "magic_animation": "7515", - "death_animation": "7468", - "name": "Revenant dark beast", - "defence_level": "80", - "safespot": null, - "lifepoints": "140", - "strength_level": "80", - "id": "6691", - "clue_level": "2", - "range_level": "80", - "attack_level": "80" - }, - { - "spawn_animation": "7440", - "examine": "A ghost of a knight slain during the god wars.", - "melee_animation": "7441", - "range_animation": "7522", - "poisonous": "", - "magic_level": "80", - "defence_animation": "7443", - "slayer_exp": "143", - "poison_amount": "", - "magic_animation": "7508", - "death_animation": "7442", - "name": "Revenant knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "143", - "strength_level": "80", - "id": "6692", - "clue_level": "2", - "range_level": "80", - "attack_level": "80" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6693", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7485", - "examine": "The ghost of an icefiend slain during the God Wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "27", - "defence_animation": "7483", - "slayer_exp": "40", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant icefiend", - "defence_level": "27", - "safespot": null, - "lifepoints": "40", - "strength_level": "27", - "id": "6694", - "clue_level": "1", - "range_level": "27", - "attack_level": "27" - }, - { - "spawn_animation": "7426", - "examine": "The ghost of a vampire slain in the god wars.", - "melee_animation": "7427", - "range_animation": "7520", - "magic_level": "34", - "defence_animation": "7429", - "slayer_exp": "60", - "magic_animation": "7507", - "death_animation": "7428", - "name": "Revenant vampire", - "defence_level": "34", - "safespot": null, - "lifepoints": "60", - "strength_level": "34", - "id": "6695", - "clue_level": "1", - "range_level": "34", - "attack_level": "34" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6696", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7410", - "examine": "The essence of an imp slain during the god wars.", - "melee_animation": "7407", - "range_animation": "7501", - "combat_audio": "0,0,0", - "magic_level": "10", - "defence_animation": "7404", - "slayer_exp": "10", - "magic_animation": "7500", - "death_animation": "7408", - "name": "Revenant imp", - "defence_level": "10", - "safespot": null, - "lifepoints": "20", - "strength_level": "10", - "id": "6697", - "range_level": "10", - "attack_level": "10" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6698", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6699", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7426", - "examine": "The ghost of a vampire slain in the god wars.", - "melee_animation": "7427", - "range_animation": "7520", - "magic_level": "34", - "defence_animation": "7429", - "slayer_exp": "60", - "magic_animation": "7507", - "death_animation": "7428", - "name": "Revenant vampire", - "defence_level": "34", - "safespot": null, - "lifepoints": "60", - "strength_level": "34", - "id": "6700", - "clue_level": "1", - "range_level": "34", - "attack_level": "34" - }, - { - "spawn_animation": "7403", - "examine": "The ghost of a werewolf slain during the god wars.", - "melee_animation": "7397", - "range_animation": "7521", - "magic_level": "38", - "defence_animation": "7399", - "magic_animation": "7496", - "death_animation": "7398", - "name": "Revenant werewolf", - "defence_level": "38", - "safespot": null, - "lifepoints": "65", - "strength_level": "38", - "id": "6701", - "clue_level": "2", - "range_level": "38", - "attack_level": "38" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6702", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7410", - "examine": "The essence of an imp slain during the god wars.", - "melee_animation": "7407", - "range_animation": "7501", - "combat_audio": "0,0,0", - "magic_level": "10", - "defence_animation": "7404", - "slayer_exp": "10", - "magic_animation": "7500", - "death_animation": "7408", - "name": "Revenant imp", - "defence_level": "10", - "safespot": null, - "lifepoints": "20", - "strength_level": "10", - "id": "6703", - "range_level": "10", - "attack_level": "10" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6704", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6705", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6706", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6707", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7485", - "examine": "The ghost of an icefiend slain during the God Wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "27", - "defence_animation": "7483", - "slayer_exp": "40", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant icefiend", - "defence_level": "27", - "safespot": null, - "lifepoints": "40", - "strength_level": "27", - "id": "6708", - "clue_level": "1", - "range_level": "27", - "attack_level": "27" - }, - { - "spawn_animation": "7485", - "examine": "The essence of a pyrefiend slain during the god wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "29", - "defence_animation": "7483", - "slayer_exp": "48", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant pyrefiend", - "defence_level": "29", - "safespot": null, - "lifepoints": "48", - "strength_level": "29", - "id": "6709", - "clue_level": "1", - "range_level": "29", - "attack_level": "29" - }, - { - "examine": "The ghost of a hobgoblin slain during the God Wars.", - "melee_animation": "7418", - "range_animation": "7516", - "combat_audio": "469,472,471", - "magic_level": "32", - "defence_animation": "7420", - "slayer_exp": "72", - "magic_animation": "7503", - "death_animation": "7419", - "name": "Revenant hobgoblin", - "defence_level": "32", - "safespot": null, - "lifepoints": "72", - "strength_level": "32", - "id": "6710", - "clue_level": "1", - "range_level": "32", - "attack_level": "32" - }, - { - "spawn_animation": "7426", - "examine": "The ghost of a vampire slain in the god wars.", - "melee_animation": "7427", - "range_animation": "7520", - "magic_level": "34", - "defence_animation": "7429", - "slayer_exp": "60", - "magic_animation": "7507", - "death_animation": "7428", - "name": "Revenant vampire", - "defence_level": "34", - "safespot": null, - "lifepoints": "60", - "strength_level": "34", - "id": "6711", - "clue_level": "1", - "range_level": "34", - "attack_level": "34" - }, - { - "spawn_animation": "7403", - "examine": "The ghost of a werewolf slain during the god wars.", - "melee_animation": "7397", - "range_animation": "7521", - "magic_level": "38", - "defence_animation": "7399", - "magic_animation": "7496", - "death_animation": "7398", - "name": "Revenant werewolf", - "defence_level": "38", - "safespot": null, - "lifepoints": "65", - "strength_level": "38", - "id": "6712", - "clue_level": "2", - "range_level": "38", - "attack_level": "38" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6713", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7440", - "examine": "A ghost of a knight slain during the god wars.", - "melee_animation": "7441", - "range_animation": "7522", - "poisonous": "", - "magic_level": "80", - "defence_animation": "7443", - "slayer_exp": "143", - "poison_amount": "", - "magic_animation": "7508", - "death_animation": "7442", - "name": "Revenant knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "143", - "strength_level": "80", - "id": "6714", - "clue_level": "2", - "range_level": "80", - "attack_level": "80" - }, - { - "spawn_animation": "7410", - "examine": "The essence of an imp slain during the god wars.", - "melee_animation": "7407", - "range_animation": "7501", - "combat_audio": "0,0,0", - "magic_level": "10", - "defence_animation": "7404", - "slayer_exp": "10", - "magic_animation": "7500", - "death_animation": "7408", - "name": "Revenant imp", - "defence_level": "10", - "safespot": null, - "lifepoints": "20", - "strength_level": "10", - "id": "6715", - "range_level": "10", - "attack_level": "10" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6716", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6717", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6718", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7447", - "examine": "The ghost of a goblin slain during the god wars.", - "melee_animation": "7449", - "range_animation": "7513", - "combat_audio": "469,472,471", - "magic_level": "12", - "defence_animation": "7450", - "magic_animation": "7499", - "death_animation": "7448", - "name": "Revenant goblin", - "defence_level": "12", - "safespot": null, - "lifepoints": "24", - "strength_level": "12", - "id": "6719", - "clue_level": "1", - "range_level": "12", - "attack_level": "12" - }, - { - "spawn_animation": "7485", - "examine": "The ghost of an icefiend slain during the God Wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "27", - "defence_animation": "7483", - "slayer_exp": "40", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant icefiend", - "defence_level": "27", - "safespot": null, - "lifepoints": "40", - "strength_level": "27", - "id": "6720", - "clue_level": "1", - "range_level": "27", - "attack_level": "27" - }, - { - "spawn_animation": "7485", - "examine": "The essence of a pyrefiend slain during the god wars.", - "melee_animation": "7481", - "range_animation": "7519", - "attack_speed": "3", - "magic_level": "29", - "defence_animation": "7483", - "slayer_exp": "48", - "magic_animation": "7506", - "death_animation": "7482", - "name": "Revenant pyrefiend", - "defence_level": "29", - "safespot": null, - "lifepoints": "48", - "strength_level": "29", - "id": "6721", - "clue_level": "1", - "range_level": "29", - "attack_level": "29" - }, - { - "examine": "The ghost of a hobgoblin slain during the God Wars.", - "melee_animation": "7418", - "range_animation": "7516", - "combat_audio": "469,472,471", - "magic_level": "32", - "defence_animation": "7420", - "slayer_exp": "72", - "magic_animation": "7503", - "death_animation": "7419", - "name": "Revenant hobgoblin", - "defence_level": "32", - "safespot": null, - "lifepoints": "72", - "strength_level": "32", - "id": "6722", - "clue_level": "1", - "range_level": "32", - "attack_level": "32" - }, - { - "spawn_animation": "7426", - "examine": "The ghost of a vampire slain in the god wars.", - "melee_animation": "7427", - "range_animation": "7520", - "magic_level": "34", - "defence_animation": "7429", - "slayer_exp": "60", - "magic_animation": "7507", - "death_animation": "7428", - "name": "Revenant vampire", - "defence_level": "34", - "safespot": null, - "lifepoints": "60", - "strength_level": "34", - "id": "6723", - "clue_level": "1", - "range_level": "34", - "attack_level": "34" - }, - { - "spawn_animation": "7403", - "examine": "The ghost of a werewolf slain during the god wars.", - "melee_animation": "7397", - "range_animation": "7521", - "magic_level": "38", - "defence_animation": "7399", - "magic_animation": "7496", - "death_animation": "7398", - "name": "Revenant werewolf", - "defence_level": "38", - "safespot": null, - "lifepoints": "65", - "strength_level": "38", - "id": "6724", - "clue_level": "2", - "range_level": "38", - "attack_level": "38" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6725", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7440", - "examine": "A ghost of a knight slain during the god wars.", - "melee_animation": "7441", - "range_animation": "7522", - "poisonous": "", - "magic_level": "80", - "defence_animation": "7443", - "slayer_exp": "143", - "poison_amount": "", - "magic_animation": "7508", - "death_animation": "7442", - "name": "Revenant knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "143", - "strength_level": "80", - "id": "6726", - "clue_level": "2", - "range_level": "80", - "attack_level": "80" - }, - { - "examine": "The ghost of a hobgoblin slain during the God Wars.", - "melee_animation": "7418", - "range_animation": "7516", - "combat_audio": "469,472,471", - "magic_level": "32", - "defence_animation": "7420", - "slayer_exp": "72", - "magic_animation": "7503", - "death_animation": "7419", - "name": "Revenant hobgoblin", - "defence_level": "32", - "safespot": null, - "lifepoints": "72", - "strength_level": "32", - "id": "6727", - "clue_level": "1", - "range_level": "32", - "attack_level": "32" - }, - { - "spawn_animation": "7403", - "examine": "The ghost of a werewolf slain during the god wars.", - "melee_animation": "7397", - "range_animation": "7521", - "magic_level": "38", - "defence_animation": "7399", - "magic_animation": "7496", - "death_animation": "7398", - "name": "Revenant werewolf", - "defence_level": "38", - "safespot": null, - "lifepoints": "65", - "strength_level": "38", - "id": "6728", - "clue_level": "2", - "range_level": "38", - "attack_level": "38" - }, - { - "examine": "A ghost of an ork slain during the god wars.", - "melee_animation": "7411", - "range_animation": "7518", - "magic_level": "70", - "defence_animation": "7413", - "magic_animation": "7505", - "death_animation": "7412", - "name": "Revenant ork", - "defence_level": "70", - "safespot": null, - "lifepoints": "105", - "strength_level": "70", - "id": "6729", - "clue_level": "2", - "range_level": "70", - "attack_level": "70" - }, - { - "spawn_animation": "7440", - "examine": "A ghost of a knight slain during the god wars.", - "melee_animation": "7441", - "range_animation": "7522", - "poisonous": "", - "magic_level": "80", - "defence_animation": "7443", - "slayer_exp": "143", - "poison_amount": "", - "magic_animation": "7508", - "death_animation": "7442", - "name": "Revenant knight", - "defence_level": "80", - "safespot": null, - "lifepoints": "143", - "strength_level": "80", - "id": "6730", - "clue_level": "2", - "range_level": "80", - "attack_level": "80" - }, - { - "examine": "Her lack of body heat is unsettling.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Queen of Snow", - "defence_level": "1", - "movement_radius": "5", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6731", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It looks right at home here.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Snow imp", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6739", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Snowflakes swirling in the wind.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Snow", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6740", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A snowman in fake dragon armour.", - "combat_audio": "29,3295,3287", - "melee_animation": "7558", - "defence_animation": "7559", - "death_animation": "7560", - "name": "Dragon snowman", - "defence_level": "1", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "id": "6743", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Arr!", - "combat_audio": "29,3295,3287", - "melee_animation": "7558", - "defence_animation": "7559", - "death_animation": "7560", - "name": "Pirate snowman", - "defence_level": "1", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "id": "6745", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A snowman armed with a holly bow.", - "name": "Snow ranger", - "defence_level": "10", - "safespot": null, - "lifepoints": "30", - "strength_level": "1", - "id": "6747", - "range_level": "30", - "attack_level": "30" - }, - { - "examine": "A snowman armed with an ice sword.", - "name": "Snow ranger", - "defence_level": "10", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "id": "6748", - "magic_level": "30", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "A snowman armed with a winter staff.", - "name": "Snow mage", - "defence_level": "10", - "safespot": null, - "lifepoints": "20", - "strength_level": "1", - "id": "6749", - "range_level": "30", - "attack_level": "30" - }, - { - "examine": "Cut-down and dried.", - "melee_animation": "5568", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "5569", - "name": "Dried zombie", - "defence_level": "48", - "safespot": null, - "lifepoints": "68", - "strength_level": "48", - "id": "6761", - "range_level": "1", - "attack_level": "48" - }, - { - "examine": "Needs moisturising.", - "melee_animation": "5568", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "5569", - "name": "Dried zombie", - "defence_level": "48", - "safespot": null, - "lifepoints": "68", - "strength_level": "48", - "id": "6762", - "range_level": "1", - "attack_level": "48" - }, - { - "examine": "I bet it's parched.", - "melee_animation": "5568", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "5569", - "name": "Dried zombie", - "defence_level": "48", - "safespot": null, - "lifepoints": "68", - "strength_level": "48", - "id": "6763", - "range_level": "1", - "attack_level": "48" - }, - { - "examine": "A guard.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Doorman", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6769", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A huge beast of a beetle.", - "melee_animation": "7596", - "range_animation": "0", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "7595", - "name": "Giant scarab", - "defence_level": "66", - "safespot": null, - "lifepoints": "285", - "strength_level": "49", - "id": "6770", - "aggressive": "true", - "range_level": "66", - "attack_level": "49" - }, - { - "examine": "It's not quite small enough to stamp upon.", - "melee_animation": "7657", - "range_animation": "0", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "7656", - "name": "Scarab larva", - "defence_level": "18", - "safespot": null, - "lifepoints": "25", - "strength_level": "18", - "id": "6772", - "range_level": "1", - "attack_level": "18" - }, - { - "examine": "Bred to shoot you down.", - "start_gfx": "18", - "combat_style": "1", - "melee_animation": "7607", - "range_animation": "7607", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "7609", - "name": "Scabaras ranger", - "defence_level": "55", - "safespot": null, - "lifepoints": "157", - "strength_level": "41", - "id": "6773", - "aggressive": "true", - "range_level": "55", - "projectile": "11", - "attack_level": "41" - }, - { - "examine": "It might be angry...it's hard to tell.", - "melee_animation": "7612", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "7614", - "name": "Scabaras lancer", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "55", - "id": "6774", - "aggressive": "true", - "range_level": "1", - "attack_level": "55" - }, - { - "examine": "A giant, mountable locust.", - "melee_animation": "7586", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "7581", - "name": "Scabaras locust", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "41", - "id": "6776", - "aggressive": "true", - "range_level": "55", - "attack_level": "41" - }, - { - "examine": "Bouncy", - "melee_animation": "7584", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "7581", - "name": "Locust lancer", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "55", - "id": "6777", - "aggressive": "true", - "range_level": "1", - "attack_level": "55" - }, - { - "examine": "He'll have someone's eye out with that.", - "start_gfx": "18", - "combat_style": "1", - "melee_animation": "5451", - "range_animation": "5451", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "2", - "magic_animation": "0", - "death_animation": "7581", - "name": "Locust ranger", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "41", - "id": "6778", - "aggressive": "true", - "range_level": "55", - "projectile": "11", - "attack_level": "41" - }, - { - "melee_animation": "7588", - "combat_audio": "386,388,387", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "7590", - "slayer_exp": "62", - "death_animation": "7591", - "name": "Crocodile", - "defence_level": "1", - "safespot": null, - "lifepoints": "72", - "strength_level": "1", - "id": "6779", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Part scarab, part man.", - "combat_style": "2", - "melee_animation": "7615", - "range_animation": "0", - "magic_level": "55", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "4", - "magic_animation": "0", - "death_animation": "7616", - "name": "Scabaras mage", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "41", - "id": "6780", - "aggressive": "true", - "range_level": "1", - "attack_level": "41" - }, - { - "examine": "Part scarab, part man.", - "combat_style": "2", - "melee_animation": "7620", - "respawn_delay": "60", - "defence_animation": "7617", - "death_animation": "7616", - "name": "Scabaras mage", - "defence_level": "1", - "safespot": null, - "lifepoints": "70", - "strength_level": "1", - "id": "6781", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An animated clay statue.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Clay golem", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6785", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She looks a bit dirty from digging.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Lead archaeologist Abigail", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6786", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks a bit dusty from troweling.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Assistant archaeologist Kerner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6787", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He exudes something like holiness.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "High Priest of Scabaras", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6788", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He exudes something like holiness.", - "melee_animation": "7612", - "range_animation": "0", - "magic_level": "66", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7614", - "name": "High Priest of Scabaras", - "defence_level": "66", - "safespot": null, - "lifepoints": "94", - "strength_level": "66", - "id": "6789", - "range_level": "66", - "attack_level": "66" - }, - { - "examine": "He exudes something like holiness.", - "melee_animation": "7607", - "range_animation": "7607", - "magic_level": "66", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7609", - "name": "High Priest of Scabaras", - "defence_level": "66", - "safespot": null, - "lifepoints": "94", - "strength_level": "66", - "id": "6790", - "range_level": "66", - "attack_level": "66" - }, - { - "examine": "A bird. Literally terrifying.", - "melee_animation": "1010", - "range_animation": "0", - "magic_level": "50", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "1013", - "name": "Spirit terrorbird", - "defence_level": "50", - "safespot": null, - "lifepoints": "74", - "strength_level": "50", - "id": "6794", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "A bird. Literally terrifying.", - "melee_animation": "1010", - "range_animation": "0", - "magic_level": "50", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "1013", - "name": "Spirit terrorbird", - "defence_level": "50", - "safespot": null, - "lifepoints": "74", - "strength_level": "50", - "id": "6795", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "Is it a stone? Is it a crab? No! It's Granite Crab!", - "melee_animation": "8104", - "range_animation": "8104", - "attack_speed": "3", - "magic_level": "13", - "respawn_delay": "50", - "defence_animation": "8105", - "magic_animation": "8104", - "death_animation": "8106", - "name": "Granite crab", - "defence_level": "22", - "safespot": null, - "lifepoints": "39", - "strength_level": "17", - "id": "6796", - "bonuses": "16,9,5,12,4,11,57,53,61,12,45,22,0,0,0", - "range_level": "16", - "attack_level": "18" - }, - { - "examine": "Is it a stone? Is it a crab? No! It's Granite Crab!", - "melee_animation": "8104", - "range_animation": "8104", - "attack_speed": "3", - "magic_level": "13", - "respawn_delay": "50", - "defence_animation": "8105", - "weakness": "10", - "magic_animation": "8104", - "death_animation": "8106", - "name": "Granite crab", - "defence_level": "22", - "safespot": null, - "lifepoints": "39", - "strength_level": "17", - "id": "6797", - "bonuses": "16,9,5,12,4,11,57,53,61,12,45,22,0,0,0", - "range_level": "16", - "attack_level": "18" - }, - { - "examine": "Wax on", - "melee_animation": "8069", - "range_animation": "0", - "magic_level": "60", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8065", - "name": "Praying mantis", - "defence_level": "60", - "safespot": null, - "lifepoints": "107", - "strength_level": "60", - "id": "6798", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "Wax on", - "melee_animation": "8069", - "range_animation": "0", - "magic_level": "60", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8065", - "name": "Praying mantis", - "defence_level": "60", - "safespot": null, - "lifepoints": "107", - "strength_level": "60", - "id": "6799", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "He ent such a bad guy.", - "melee_animation": "7853", - "range_animation": "0", - "magic_level": "60", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7854", - "name": "Giant ent", - "defence_level": "60", - "safespot": null, - "lifepoints": "111", - "strength_level": "60", - "id": "6800", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "He ent such a bad guy.", - "melee_animation": "7853", - "range_animation": "0", - "magic_level": "60", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7854", - "name": "Giant ent", - "defence_level": "60", - "safespot": null, - "lifepoints": "111", - "strength_level": "60", - "id": "6801", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "Serpentine.", - "melee_animation": "8152", - "range_animation": "0", - "magic_level": "55", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8153", - "name": "Spirit cobra", - "defence_level": "55", - "safespot": null, - "lifepoints": "90", - "strength_level": "55", - "id": "6802", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "Serpentine.", - "melee_animation": "8152", - "range_animation": "0", - "magic_level": "55", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8153", - "name": "Spirit cobra", - "defence_level": "55", - "safespot": null, - "lifepoints": "90", - "strength_level": "55", - "id": "6803", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "Face the thing that should not be!", - "melee_animation": "7786", - "range_animation": "0", - "magic_level": "65", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7780", - "name": "Spirit dagannoth", - "defence_level": "65", - "safespot": null, - "lifepoints": "115", - "strength_level": "65", - "id": "6804", - "range_level": "65", - "attack_level": "65" - }, - { - "examine": "Face the thing that should not be!", - "melee_animation": "7786", - "range_animation": "0", - "magic_level": "65", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7780", - "name": "Spirit dagannoth", - "defence_level": "65", - "safespot": null, - "lifepoints": "115", - "strength_level": "65", - "id": "6805", - "range_level": "65", - "attack_level": "65" - }, - { - "examine": "A hermit slug.", - "combat_style": "1", - "melee_animation": "8143", - "range_animation": "8143", - "attack_speed": "5", - "magic_level": "18", - "respawn_delay": "55", - "end_gfx": "1387", - "defence_animation": "8145", - "magic_animation": "8143", - "death_animation": "8143", - "name": "Thorny snail", - "defence_level": "22", - "poison_immune": "true", - "safespot": null, - "lifepoints": "28", - "strength_level": "18", - "id": "6806", - "bonuses": "47,50,52,52,54,49,13,3,13,4,0,0,0,0,0", - "range_level": "21", - "projectile": "1386", - "attack_level": "19" - }, - { - "examine": "A hermit slug.", - "combat_style": "1", - "melee_animation": "8143", - "range_animation": "8143", - "attack_speed": "5", - "magic_level": "18", - "respawn_delay": "55", - "end_gfx": "1387", - "defence_animation": "8145", - "weakness": "10", - "magic_animation": "8143", - "death_animation": "8143", - "name": "Thorny snail", - "defence_level": "22", - "poison_immune": "true", - "safespot": null, - "lifepoints": "28", - "strength_level": "18", - "id": "6807", - "bonuses": "47,50,52,52,54,49,13,3,13,4,0,0,0,0,0", - "range_level": "21", - "projectile": "1386", - "attack_level": "19" - }, - { - "examine": "Kneel before squid!", - "combat_style": "2", - "melee_animation": "7963", - "range_animation": "0", - "magic_level": "50", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7964", - "name": "Karamthulhu overlord", - "defence_level": "50", - "safespot": null, - "lifepoints": "82", - "strength_level": "50", - "id": "6809", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "Kneel before squid!", - "combat_style": "2", - "melee_animation": "7963", - "range_animation": "0", - "magic_level": "50", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7964", - "name": "Karamthulhu overlord", - "defence_level": "50", - "safespot": null, - "lifepoints": "82", - "strength_level": "50", - "id": "6810", - "range_level": "50", - "attack_level": "50" - }, - { - "combat_style": "1", - "melee_animation": "7935", - "respawn_delay": "0", - "defence_animation": "7936", - "death_animation": "7937", - "name": "Hydra", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6811", - "range_level": "1", - "attack_level": "1" - }, - { - "combat_style": "1", - "melee_animation": "7935", - "respawn_delay": "0", - "defence_animation": "7936", - "death_animation": "7937", - "name": "Hydra", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6812", - "range_level": "1", - "attack_level": "1" - }, - { - "death_animation": "7740", - "name": "Bunyip", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "melee_animation": "7741", - "strength_level": "1", - "id": "6813", - "range_level": "1", - "respawn_delay": "0", - "attack_level": "1", - "defence_animation": "7742" - }, - { - "death_animation": "7740", - "name": "Bunyip", - "defence_level": "1", - "safespot": null, - "lifepoints": "40", - "melee_animation": "7741", - "strength_level": "1", - "id": "6814", - "range_level": "1", - "respawn_delay": "0", - "attack_level": "1", - "defence_animation": "7742" - }, - { - "examine": "Definitely not teenaged", - "combat_style": "0", - "melee_animation": "8286", - "range_animation": "0", - "magic_level": "55", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8285", - "name": "War tortoise", - "defence_level": "55", - "safespot": null, - "lifepoints": "95", - "strength_level": "55", - "id": "6815", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "Definitely not teenaged", - "combat_style": "0", - "melee_animation": "8286", - "range_animation": "0", - "magic_level": "55", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8285", - "name": "War tortoise", - "defence_level": "55", - "safespot": null, - "lifepoints": "95", - "strength_level": "55", - "id": "6816", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "Fruity and bat-shaped. A winning combination!.", - "name": "Fruit bat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6817", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's an extra-planar little blood hoover.", - "combat_style": "2", - "melee_animation": "8910", - "range_animation": "0", - "magic_level": "50", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7671", - "name": "Abyssal parasite", - "defence_level": "50", - "safespot": null, - "lifepoints": "77", - "strength_level": "50", - "id": "6818", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "It's an extra-planar little blood hoover.", - "combat_style": "2", - "melee_animation": "8910", - "range_animation": "0", - "magic_level": "50", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7671", - "name": "Abyssal parasite", - "defence_level": "50", - "safespot": null, - "lifepoints": "77", - "strength_level": "50", - "id": "6819", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "Lurking like only a lurker can.", - "melee_animation": "7680", - "range_animation": "0", - "magic_level": "55", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7684", - "name": "Abyssal lurker", - "defence_level": "55", - "safespot": null, - "lifepoints": "88", - "strength_level": "55", - "id": "6820", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "Lurking like only a lurker can.", - "melee_animation": "7680", - "range_animation": "0", - "magic_level": "55", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7684", - "name": "Abyssal lurker", - "defence_level": "55", - "safespot": null, - "lifepoints": "88", - "strength_level": "55", - "id": "6821", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "The pointiest horse on the planet.", - "melee_animation": "6376", - "range_animation": "6376", - "combat_audio": "4135,4196,4195", - "magic_level": "69", - "defence_animation": "6375", - "magic_animation": "6376", - "death_animation": "6377", - "name": "Unicorn stallion", - "defence_level": "70", - "poison_immune": "true", - "safespot": null, - "lifepoints": "100", - "strength_level": "62", - "id": "6822", - "bonuses": "48,59,43,52,104,52,116,123,134,46,127,4,0,0,0", - "range_level": "72", - "attack_level": "64" - }, - { - "examine": "The pointiest horse on the planet.", - "melee_animation": "6376", - "range_animation": "6376", - "combat_audio": "4135,4196,4195", - "magic_level": "69", - "defence_animation": "6375", - "weakness": "10", - "magic_animation": "6376", - "death_animation": "6377", - "name": "Unicorn stallion", - "defence_level": "70", - "poison_immune": "true", - "safespot": null, - "lifepoints": "100", - "strength_level": "62", - "id": "6823", - "bonuses": "48,59,43,52,104,52,116,123,134,46,127,4,0,0,0", - "range_level": "72", - "attack_level": "64" - }, - { - "combat_style": "2", - "melee_animation": "7810", - "attack_speed": "5", - "respawn_delay": "0", - "defence_animation": "5388", - "death_animation": "8012", - "name": "Magpie", - "defence_level": "1", - "safespot": null, - "lifepoints": "16", - "strength_level": "1", - "id": "6824", - "range_level": "1", - "projectile": "1318", - "attack_level": "1" - }, - { - "examine": "Southern fried please!", - "combat_style": "2", - "melee_animation": "7810", - "range_animation": "7810", - "attack_speed": "5", - "magic_level": "23", - "respawn_delay": "50", - "defence_animation": "5388", - "magic_animation": "7810", - "death_animation": "5389", - "name": "Dreadfowl", - "defence_level": "22", - "poison_immune": "true", - "safespot": null, - "lifepoints": "16", - "strength_level": "15", - "id": "6825", - "bonuses": "16,15,29,12,39,13,41,35,29,39,47,2,2,2,7", - "range_level": "16", - "projectile": "1318", - "attack_level": "17" - }, - { - "examine": "Southern fried please!", - "combat_style": "2", - "melee_animation": "7810", - "range_animation": "7810", - "attack_speed": "5", - "magic_level": "23", - "respawn_delay": "50", - "defence_animation": "5388", - "weakness": "10", - "magic_animation": "7810", - "death_animation": "5389", - "name": "Dreadfowl", - "defence_level": "22", - "poison_immune": "true", - "safespot": null, - "lifepoints": "16", - "strength_level": "15", - "id": "6826", - "bonuses": "16,15,29,12,39,13,41,35,29,39,47,2,2,2,7", - "range_level": "16", - "projectile": "1318", - "attack_level": "17" - }, - { - "examine": "It's mean and green!", - "melee_animation": "8208", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "55", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8209", - "name": "Stranger plant", - "defence_level": "55", - "safespot": null, - "lifepoints": "91", - "strength_level": "55", - "id": "6827", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "It's mean and green!", - "melee_animation": "8208", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "55", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8209", - "name": "Stranger plant", - "defence_level": "55", - "safespot": null, - "lifepoints": "91", - "strength_level": "55", - "id": "6828", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "Man's significantly less-domesticated friend.", - "melee_animation": "8292", - "range_animation": "8292", - "attack_speed": "5", - "magic_level": "7", - "defence_animation": "8294", - "magic_animation": "8292", - "death_animation": "8295", - "name": "Spirit wolf", - "defence_level": "21", - "safespot": null, - "lifepoints": "15", - "strength_level": "18", - "id": "6829", - "bonuses": "12,7,4,10,23,5,29,27,16,12,13,17,0,0,0", - "range_level": "9", - "attack_level": "16" - }, - { - "examine": "Man's significantly less-domesticated friend.", - "melee_animation": "8292", - "range_animation": "8292", - "attack_speed": "5", - "magic_level": "7", - "defence_animation": "8294", - "weakness": "10", - "magic_animation": "8292", - "death_animation": "8295", - "name": "Spirit wolf", - "defence_level": "21", - "safespot": null, - "lifepoints": "15", - "strength_level": "18", - "id": "6830", - "bonuses": "12,7,4,10,23,5,29,27,16,12,13,17,0,0,0", - "range_level": "9", - "attack_level": "16" - }, - { - "examine": "Surprisingly slime-free.", - "combat_style": "1", - "melee_animation": "7795", - "range_animation": "0", - "magic_level": "18", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7797", - "name": "Desert wyrm", - "defence_level": "18", - "safespot": null, - "lifepoints": "25", - "strength_level": "18", - "id": "6831", - "range_level": "18", - "attack_level": "18" - }, - { - "examine": "Surprisingly slime-free.", - "combat_style": "1", - "melee_animation": "7795", - "range_animation": "0", - "magic_level": "18", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7797", - "name": "Desert wyrm", - "defence_level": "18", - "safespot": null, - "lifepoints": "25", - "strength_level": "18", - "id": "6832", - "range_level": "18", - "attack_level": "18" - }, - { - "examine": "If you think he's evil", - "combat_style": "1", - "melee_animation": "8248", - "range_animation": "0", - "magic_level": "42", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8250", - "name": "Evil turnip", - "defence_level": "42", - "safespot": null, - "lifepoints": "60", - "strength_level": "42", - "id": "6833", - "range_level": "42", - "attack_level": "42" - }, - { - "examine": "If you think he's evil", - "combat_style": "1", - "melee_animation": "8248", - "range_animation": "0", - "magic_level": "42", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8250", - "name": "Evil turnip", - "defence_level": "42", - "safespot": null, - "lifepoints": "60", - "strength_level": "42", - "id": "6834", - "range_level": "42", - "attack_level": "42" - }, - { - "examine": "It vants to suck my blood!", - "melee_animation": "8275", - "range_animation": "0", - "magic_level": "31", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8276", - "name": "Vampire bat", - "defence_level": "31", - "safespot": null, - "lifepoints": "44", - "strength_level": "31", - "id": "6835", - "range_level": "31", - "attack_level": "31" - }, - { - "examine": "It vants to suck my blood!", - "melee_animation": "8275", - "range_animation": "0", - "magic_level": "31", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8276", - "name": "Vampire bat", - "defence_level": "31", - "safespot": null, - "lifepoints": "44", - "strength_level": "31", - "id": "6836", - "range_level": "31", - "attack_level": "31" - }, - { - "examine": "Salt and vinegaroon.", - "melee_animation": "6254", - "range_animation": "0", - "combat_audio": "3611,3612,3610", - "magic_level": "19", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "6256", - "name": "Spirit scorpion", - "defence_level": "19", - "safespot": null, - "lifepoints": "27", - "strength_level": "19", - "id": "6837", - "range_level": "19", - "attack_level": "19" - }, - { - "examine": "Salt and vinegaroon.", - "melee_animation": "6254", - "range_animation": "0", - "combat_audio": "3611,3612,3610", - "magic_level": "19", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "6256", - "name": "Spirit scorpion", - "defence_level": "19", - "safespot": null, - "lifepoints": "27", - "strength_level": "19", - "id": "6838", - "range_level": "19", - "attack_level": "19" - }, - { - "examine": "Crikey! Look at the size of those teeth!", - "melee_animation": "4925", - "combat_audio": "498,500,499", - "magic_level": "60", - "respawn_delay": "0", - "defence_animation": "4928", - "death_animation": "4929", - "name": "Arctic bear", - "defence_level": "60", - "safespot": null, - "lifepoints": "10", - "strength_level": "60", - "id": "6839", - "bonuses": "90,50,50,60,90,80,50,30,40,100,0,0,0,0,0", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "Crikey! Look at the size of those teeth!", - "melee_animation": "4925", - "range_animation": "0", - "combat_audio": "498,500,499", - "magic_level": "60", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "4929", - "name": "Arctic bear", - "defence_level": "60", - "safespot": null, - "lifepoints": "101", - "strength_level": "60", - "id": "6840", - "bonuses": "90,50,50,60,90,80,50,30,40,100,0,0,0,0,0", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "Would scare anyone off their tuffet.", - "melee_animation": "5327", - "range_animation": "5327", - "combat_audio": "537,539,538", - "magic_level": "15", - "respawn_delay": "50", - "defence_animation": "5328", - "magic_animation": "5327", - "death_animation": "5329", - "name": "Spirit spider", - "defence_level": "17", - "safespot": null, - "lifepoints": "18", - "strength_level": "16", - "id": "6841", - "bonuses": "15,16,11,14,34,12,24,36,46,16,37,0,0,0,0", - "range_level": "12", - "attack_level": "17" - }, - { - "examine": "Would scare anyone off their tuffet.", - "melee_animation": "5327", - "range_animation": "5327", - "combat_audio": "537,539,538", - "magic_level": "15", - "respawn_delay": "50", - "defence_animation": "5328", - "weakness": "10", - "magic_animation": "5327", - "death_animation": "5329", - "name": "Spirit spider", - "defence_level": "17", - "safespot": null, - "lifepoints": "18", - "strength_level": "16", - "id": "6842", - "bonuses": "15,16,11,14,34,12,24,36,46,16,37,0,0,0,0", - "range_level": "12", - "attack_level": "17" - }, - { - "examine": "It's like a little suction pump with eyes.", - "melee_animation": "7657", - "range_animation": "0", - "magic_level": "49", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7656", - "name": "Bloated leech", - "defence_level": "49", - "safespot": null, - "lifepoints": "70", - "strength_level": "49", - "id": "6843", - "range_level": "49", - "attack_level": "49" - }, - { - "examine": "It's like a little suction pump with eyes.", - "melee_animation": "7657", - "range_animation": "0", - "magic_level": "49", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7656", - "name": "Bloated leech", - "defence_level": "49", - "safespot": null, - "lifepoints": "70", - "strength_level": "49", - "id": "6844", - "range_level": "49", - "attack_level": "49" - }, - { - "examine": "Violent little so-and-so.", - "melee_animation": "7928", - "range_animation": "0", - "magic_level": "32", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7925", - "name": "Honey badger", - "defence_level": "32", - "safespot": null, - "lifepoints": "45", - "strength_level": "32", - "id": "6845", - "range_level": "32", - "attack_level": "32" - }, - { - "examine": "Violent little so-and-so.", - "melee_animation": "7928", - "range_animation": "0", - "magic_level": "32", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7925", - "name": "Honey badger", - "defence_level": "32", - "safespot": null, - "lifepoints": "45", - "strength_level": "32", - "id": "6846", - "range_level": "32", - "attack_level": "32" - }, - { - "examine": "The big cheese.", - "combat_audio": "703,705,704", - "magic_level": "27", - "respawn_delay": "50", - "name": "Albino rat", - "defence_level": "32", - "poison_immune": "true", - "safespot": null, - "lifepoints": "68", - "strength_level": "28", - "id": "6847", - "bonuses": "64,42,40,57,64,50,76,82,72,24,75,5,15,5,5", - "range_level": "31", - "attack_level": "31" - }, - { - "examine": "The big cheese.", - "combat_audio": "703,705,704", - "magic_level": "27", - "respawn_delay": "50", - "weakness": "10", - "name": "Albino rat", - "defence_level": "32", - "poison_immune": "true", - "safespot": null, - "lifepoints": "68", - "strength_level": "28", - "id": "6848", - "bonuses": "64,42,40,57,64,50,76,82,72,24,75,5,15,5,5", - "range_level": "31", - "attack_level": "31" - }, - { - "examine": "Puts the 'crust' in 'crustacean'.", - "melee_animation": "8112", - "respawn_delay": "0", - "defence_animation": "8114", - "death_animation": "8113", - "name": "Granite lobster", - "defence_level": "60", - "safespot": null, - "lifepoints": "10", - "strength_level": "60", - "id": "6849", - "bonuses": "93,90,65,90,30,40,50,50,60,40,0,0,0,0,0", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "Puts the 'crust' in 'crustacean'.", - "melee_animation": "8112", - "range_animation": "0", - "magic_level": "60", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8113", - "name": "Granite lobster", - "defence_level": "60", - "safespot": null, - "lifepoints": "105", - "strength_level": "60", - "id": "6850", - "bonuses": "93,90,65,90,30,40,50,50,60,40,0,0,0,0,0", - "range_level": "60", - "attack_level": "60" - }, - { - "death_animation": "8012", - "name": "Macaw", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6851", - "range_level": "1", - "respawn_delay": "0", - "attack_level": "1" - }, - { - "death_animation": "8012", - "name": "Macaw", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6852", - "range_level": "1", - "respawn_delay": "0", - "attack_level": "1" - }, - { - "examine": "He's just a big bully.", - "combat_style": "0", - "melee_animation": "8024", - "magic_level": "1", - "respawn_delay": "0", - "defence_animation": "8023", - "death_animation": "8025", - "name": "Bronze minotaur", - "defence_level": "19", - "safespot": null, - "lifepoints": "133", - "strength_level": "19", - "id": "6853", - "bonuses": "-2,6,3,0,0,15,14,9,-6,14,5,90,0,0,0", - "range_level": "1", - "attack_level": "19" - }, - { - "examine": "He's just a big bully.", - "combat_style": "0", - "melee_animation": "8024", - "range_animation": "0", - "magic_level": "1", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8025", - "name": "Bronze minotaur", - "defence_level": "19", - "safespot": null, - "lifepoints": "133", - "strength_level": "19", - "id": "6854", - "bonuses": "15,20,10,15,10,15,15,15,0,0,0,90,0,0,0", - "range_level": "1", - "attack_level": "19" - }, - { - "examine": "He's just a big bully.", - "combat_style": "0", - "melee_animation": "8024", - "magic_level": "25", - "respawn_delay": "0", - "defence_animation": "8023", - "magic_animation": "", - "death_animation": "8025", - "name": "Iron minotaur", - "defence_level": "25", - "safespot": null, - "lifepoints": "193", - "strength_level": "25", - "id": "6855", - "bonuses": "-2,8,5,0,0,21,17,9,-6,20,5,100,0,100,0", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He's just a big bully.", - "combat_style": "0", - "melee_animation": "8024", - "range_animation": "0", - "magic_level": "25", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8025", - "name": "Iron minotaur", - "defence_level": "25", - "safespot": null, - "lifepoints": "193", - "strength_level": "25", - "id": "6856", - "bonuses": "25,25,25,25,0,25,25,25,25,0,0,100,0,100,0", - "clue_level": "", - "range_level": "1", - "attack_level": "25" - }, - { - "examine": "He's just a big bully!", - "combat_style": "0", - "melee_animation": "8024", - "magic_level": "28", - "respawn_delay": "0", - "defence_animation": "8023", - "death_animation": "8025", - "name": "Steel minotaur", - "defence_level": "28", - "safespot": null, - "lifepoints": "260", - "strength_level": "28", - "id": "6857", - "bonuses": "-2,16,11,0,0,32,31,24,-6,31,5,122,0,122,0", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "He's just a big bully.", - "combat_style": "0", - "melee_animation": "8024", - "range_animation": "0", - "magic_level": "28", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8025", - "name": "Steel minotaur", - "defence_level": "28", - "safespot": null, - "lifepoints": "260", - "strength_level": "28", - "id": "6858", - "bonuses": "40,30,30,30,30,30,30,30,30,30,0,127,0,0,0", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "He's just a big bully", - "combat_style": "0", - "melee_animation": "8024", - "magic_level": "30", - "respawn_delay": "0", - "defence_animation": "8023", - "death_animation": "8025", - "name": "Mithril minotaur", - "defence_level": "30", - "safespot": null, - "lifepoints": "340", - "can_tolerate": "", - "strength_level": "30", - "id": "6859", - "bonuses": "-2,22,17,0,0,46,44,38,-6,44,20,146,0,147,0", - "range_level": "0", - "attack_level": "30" - }, - { - "examine": "He's just a big bully.", - "combat_style": "0", - "melee_animation": "8024", - "range_animation": "0", - "magic_level": "30", - "respawn_delay": "0", - "defence_animation": "8023", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8025", - "name": "Mithril minotaur", - "defence_level": "30", - "safespot": null, - "lifepoints": "340", - "strength_level": "30", - "id": "6860", - "bonuses": "30,30,30,30,0,30,30,30,30,0,30,146,0,147,0", - "range_level": "0", - "attack_level": "30" - }, - { - "examine": "He's just a big bully.", - "combat_style": "0", - "melee_animation": "8024", - "attack_speed": "", - "magic_level": "35", - "respawn_delay": "0", - "defence_animation": "8023", - "death_animation": "8025", - "name": "Adamant minotaur", - "defence_level": "35", - "safespot": null, - "poison_immune": "", - "lifepoints": "441", - "strength_level": "35", - "id": "6861", - "bonuses": "-2,31,26,-3,-17,65,63,55,-6,63,30,146,0,181,0", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "He's just a big bully.", - "combat_style": "0", - "melee_animation": "8024", - "range_animation": "0", - "magic_level": "35", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8025", - "name": "Adamant minotaur", - "defence_level": "35", - "safespot": null, - "lifepoints": "441", - "strength_level": "35", - "id": "6862", - "bonuses": "40,50,40,45,35,20,50,36,30,40,15,180,30,10,0", - "range_level": "1", - "attack_level": "35" - }, - { - "examine": "He's just a big bully.", - "melee_animation": "8024", - "magic_level": "40", - "respawn_delay": "0", - "defence_animation": "8023", - "death_animation": "8025", - "name": "Rune minotaur", - "defence_level": "40", - "safespot": null, - "lifepoints": "570", - "strength_level": "40", - "id": "6863", - "bonuses": "-2,48,43,0,-1,207,209,192,-12,205,102,157,0,195,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "He's just a big bully.", - "melee_animation": "8024", - "magic_level": "40", - "respawn_delay": "0", - "defence_animation": "8023", - "slayer_exp": "0", - "death_animation": "8025", - "name": "Rune minotaur", - "defence_level": "40", - "safespot": null, - "lifepoints": "570", - "strength_level": "40", - "id": "6864", - "bonuses": "50,40,40,56,40,30,50,30,60,30,40,219,50,40,40", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "Well", - "melee_animation": "7816", - "range_animation": "0", - "magic_level": "55", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7818", - "name": "Smoke devil", - "defence_level": "55", - "safespot": null, - "lifepoints": "87", - "strength_level": "55", - "id": "6865", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "Well", - "melee_animation": "7816", - "range_animation": "0", - "magic_level": "55", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7818", - "name": "Smoke devil", - "defence_level": "55", - "safespot": null, - "lifepoints": "87", - "strength_level": "55", - "id": "6866", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "Putting all three of its best feet forward.", - "melee_animation": "7896", - "range_animation": "0", - "magic_level": "40", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7897", - "name": "Bull ant", - "defence_level": "40", - "safespot": null, - "lifepoints": "57", - "strength_level": "40", - "id": "6867", - "range_level": "40", - "attack_level": "40" - }, - { - "examine": "Putting all three of its best feet forward.", - "melee_animation": "7896", - "range_animation": "0", - "magic_level": "40", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7897", - "name": "Bull ant", - "defence_level": "40", - "safespot": null, - "lifepoints": "57", - "strength_level": "40", - "id": "6868", - "range_level": "40", - "attack_level": "40" - }, - { - "examine": "It's just a harmless wee rabbit. ", - "combat_style": "2", - "melee_animation": "8304", - "range_animation": "8304", - "attack_speed": "5", - "magic_level": "95", - "defence_animation": "8306", - "magic_animation": "8304", - "death_animation": "8305", - "name": "Wolpertinger", - "defence_level": "95", - "poison_immune": "true", - "safespot": null, - "lifepoints": "619", - "strength_level": "1", - "id": "6869", - "bonuses": "59,50,50,50,50,50,50,50,50,50,50,50,50,68,0", - "range_level": "95", - "attack_level": "1" - }, - { - "examine": "It's just a harmless wee rabbit. ", - "combat_style": "2", - "melee_animation": "8304", - "range_animation": "8304", - "attack_speed": "5", - "magic_level": "95", - "defence_animation": "8306", - "magic_animation": "8304", - "death_animation": "8305", - "name": "Wolpertinger", - "defence_level": "95", - "poison_immune": "true", - "safespot": null, - "lifepoints": "619", - "strength_level": "1", - "id": "6870", - "bonuses": "59,50,50,50,50,50,50,50,50,50,50,50,50,68,0", - "range_level": "95", - "attack_level": "1" - }, - { - "examine": "I suppose it could smell worse", - "melee_animation": "7769", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "28", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7770", - "name": "Compost mound", - "defence_level": "28", - "safespot": null, - "lifepoints": "40", - "strength_level": "28", - "id": "6871", - "range_level": "28", - "attack_level": "28" - }, - { - "examine": "I suppose it could smell worse", - "melee_animation": "7769", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "28", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7770", - "name": "Compost mound", - "defence_level": "28", - "safespot": null, - "lifepoints": "40", - "strength_level": "28", - "id": "6872", - "range_level": "28", - "attack_level": "28" - }, - { - "examine": "Bulk haulage never smelled so bad.", - "melee_animation": "5782", - "range_animation": "5782", - "attack_speed": "5", - "magic_level": "91", - "defence_animation": "5783", - "magic_animation": "5782", - "death_animation": "5784", - "name": "Pack yak", - "defence_level": "121", - "poison_immune": "true", - "safespot": null, - "lifepoints": "710", - "strength_level": "104", - "id": "6873", - "bonuses": "64,67,5,72,128,49,264,234,164,49,132,40,35,40,40", - "range_level": "86", - "attack_level": "112" - }, - { - "examine": "Bulk haulage never smelled so bad.", - "melee_animation": "5782", - "range_animation": "5782", - "attack_speed": "5", - "magic_level": "91", - "defence_animation": "5783", - "weakness": "10", - "magic_animation": "5782", - "death_animation": "5784", - "name": "Pack yak", - "defence_level": "121", - "poison_immune": "true", - "safespot": null, - "lifepoints": "710", - "strength_level": "104", - "id": "6874", - "bonuses": "64,67,5,72,128,49,264,234,164,49,132,40,35,40,40", - "range_level": "86", - "attack_level": "112" - }, - { - "examine": "If looks could kill... Wait", - "start_gfx": "1467", - "combat_style": "2", - "melee_animation": "7762", - "range_animation": "0", - "magic_level": "43", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7763", - "name": "Spirit cockatrice", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "6875", - "range_level": "43", - "projectile": "1468", - "attack_level": "43" - }, - { - "examine": "If looks could kill... Wait", - "start_gfx": "1467", - "combat_style": "2", - "melee_animation": "7762", - "range_animation": "0", - "magic_level": "43", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7763", - "name": "Spirit cockatrice", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "6876", - "range_level": "43", - "projectile": "1468", - "attack_level": "43" - }, - { - "examine": "If looks could kill... Wait", - "start_gfx": "1467", - "combat_style": "2", - "melee_animation": "7762", - "range_animation": "0", - "magic_level": "43", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7763", - "name": "Spirit guthatrice", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "6877", - "range_level": "43", - "projectile": "1468", - "attack_level": "43" - }, - { - "examine": "If looks could kill... Wait", - "start_gfx": "1467", - "combat_style": "2", - "melee_animation": "7762", - "range_animation": "0", - "magic_level": "43", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7763", - "name": "Spirit guthatrice", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "6878", - "range_level": "43", - "projectile": "1468", - "attack_level": "43" - }, - { - "examine": "If looks could kill... Wait", - "start_gfx": "1467", - "combat_style": "2", - "melee_animation": "7762", - "range_animation": "0", - "combat_audio": "703,705,704", - "magic_level": "43", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7763", - "name": "Spirit saratrice", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "6879", - "range_level": "43", - "projectile": "1468", - "attack_level": "43" - }, - { - "examine": "If looks could kill... Wait", - "start_gfx": "1467", - "combat_style": "2", - "melee_animation": "7762", - "range_animation": "0", - "combat_audio": "703,705,704", - "magic_level": "43", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7763", - "name": "Spirit saratrice", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "6880", - "range_level": "43", - "projectile": "1468", - "attack_level": "43" - }, - { - "examine": "If looks could kill... Wait", - "start_gfx": "1467", - "combat_style": "2", - "melee_animation": "7762", - "range_animation": "0", - "magic_level": "43", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7763", - "name": "Spirit zamatrice", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "6881", - "range_level": "43", - "projectile": "1468", - "attack_level": "43" - }, - { - "examine": "If looks could kill... Wait", - "start_gfx": "1467", - "combat_style": "2", - "melee_animation": "7762", - "range_animation": "0", - "magic_level": "43", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7763", - "name": "Spirit zamatrice", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "6882", - "range_level": "43", - "projectile": "1468", - "attack_level": "43" - }, - { - "examine": "If looks could kill... Wait", - "start_gfx": "1467", - "combat_style": "2", - "melee_animation": "7762", - "range_animation": "0", - "magic_level": "43", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7763", - "name": "Spirit pengatrice", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "6883", - "range_level": "43", - "projectile": "1468", - "attack_level": "43" - }, - { - "examine": "If looks could kill... Wait", - "start_gfx": "1467", - "combat_style": "2", - "melee_animation": "7762", - "range_animation": "0", - "magic_level": "43", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7763", - "name": "Spirit pengatrice", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "6884", - "range_level": "43", - "projectile": "1468", - "attack_level": "43" - }, - { - "examine": "If looks could kill... Wait", - "start_gfx": "1467", - "combat_style": "2", - "melee_animation": "7762", - "range_animation": "0", - "magic_level": "43", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7763", - "name": "Spirit coraxatrice", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "6885", - "range_level": "43", - "projectile": "1468", - "attack_level": "43" - }, - { - "examine": "If looks could kill... Wait", - "start_gfx": "1467", - "combat_style": "2", - "melee_animation": "7762", - "range_animation": "0", - "magic_level": "43", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7763", - "name": "Spirit coraxatrice", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "6886", - "range_level": "43", - "projectile": "1468", - "attack_level": "43" - }, - { - "examine": "If looks could kill... Wait", - "start_gfx": "1467", - "combat_style": "2", - "melee_animation": "7762", - "range_animation": "0", - "magic_level": "43", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7763", - "name": "Spirit vulatrice", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "6887", - "range_level": "43", - "projectile": "1468", - "attack_level": "43" - }, - { - "examine": "If looks could kill... Wait", - "start_gfx": "1467", - "combat_style": "2", - "melee_animation": "7762", - "range_animation": "0", - "magic_level": "43", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7763", - "name": "Spirit vulatrice", - "defence_level": "43", - "safespot": null, - "lifepoints": "61", - "strength_level": "43", - "id": "6888", - "range_level": "43", - "projectile": "1468", - "attack_level": "43" - }, - { - "examine": "The only creature with a mouth big enough to fit a cannon ball into.", - "melee_animation": "7260", - "range_animation": "0", - "magic_level": "55", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7256", - "name": "Barker toad", - "defence_level": "55", - "safespot": null, - "lifepoints": "94", - "strength_level": "55", - "id": "6889", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "The only creature with a mouth big enough to fit a cannon ball into.", - "melee_animation": "7260", - "range_animation": "0", - "magic_level": "55", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7256", - "name": "Barker toad", - "defence_level": "55", - "safespot": null, - "lifepoints": "94", - "strength_level": "55", - "id": "6890", - "range_level": "55", - "attack_level": "55" - }, - { - "examine": "He looks like the type of guy who would keep penguins.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Penguin keeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6891", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The lady of the pet shop.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Pet shop owner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6892", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The man of the pet shop.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Pet shop owner", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6893", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A dalmatian puppy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Dalmatian", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6896", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A bulldog puppy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bulldog", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6897", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Hatchling dragon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "408,410,409", - "strength_level": "1", - "id": "6900", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Baby dragon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "407,405,406", - "strength_level": "1", - "id": "6901", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Hatchling dragon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "408,410,409", - "strength_level": "1", - "id": "6902", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Baby dragon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "407,405,406", - "strength_level": "1", - "id": "6903", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Hatchling dragon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "408,410,409", - "strength_level": "1", - "id": "6904", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Baby dragon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "407,405,406", - "strength_level": "1", - "id": "6905", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Hatchling dragon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "408,410,409", - "strength_level": "1", - "id": "6906", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Baby dragon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "407,405,406", - "strength_level": "1", - "id": "6907", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's so adorably tiny!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Baby gecko", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6917", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A tiny nut-thief.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Baby squirrel", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6921", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "6942", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "6943", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a tiny, cheeky monkey.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "629,631,630", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6944", - "range_level": "1", - "attack_level": "1" - }, - { - "combat_style": "2", - "melee_animation": "8304", - "attack_speed": "5", - "magic_level": "28", - "respawn_delay": "0", - "defence_animation": "8306", - "death_animation": "8305", - "name": "Bulldog puppy", - "defence_level": "1", - "safespot": null, - "lifepoints": "651", - "strength_level": "1", - "id": "6969", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A nature lover.", - "melee_animation": "7181", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "7186", - "weakness": "3", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druid", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6972", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A nature lover.", - "range_animation": "0", - "combat_audio": "511,513,512", - "melee_animation": "7182", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druid", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6973", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A nature lover.", - "range_animation": "0", - "combat_audio": "511,513,512", - "melee_animation": "7182", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druid", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6974", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A nature lover.", - "melee_animation": "7181", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "7186", - "weakness": "3", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druid", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6975", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A nature lover.", - "melee_animation": "7182", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druid", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6976", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A nature lover.", - "melee_animation": "7182", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druid", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6977", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A nature lover.", - "melee_animation": "7182", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druid", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6978", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A nature lover.", - "melee_animation": "7181", - "combat_audio": "511,513,512", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "7186", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druid", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6979", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A nature lover.", - "melee_animation": "7182", - "range_animation": "0", - "combat_audio": "511,513,512", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druid", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6980", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A nature lover.", - "melee_animation": "7182", - "range_animation": "0", - "combat_audio": "511,506,505", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druidess", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6981", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A nature lover.", - "melee_animation": "7181", - "range_animation": "0", - "combat_audio": "511,506,505", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "7186", - "weakness": "3", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druidess", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6982", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A nature lover.", - "melee_animation": "7182", - "range_animation": "0", - "combat_audio": "511,506,505", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druidess", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6983", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A nature lover.", - "melee_animation": "7181", - "range_animation": "0", - "combat_audio": "511,506,505", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "7186", - "weakness": "3", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druidess", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6984", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A nature lover.", - "melee_animation": "7182", - "range_animation": "0", - "combat_audio": "511,506,505", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druidess", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6985", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A nature lover.", - "melee_animation": "7182", - "range_animation": "0", - "combat_audio": "511,506,505", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druidess", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6986", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "A nature lover.", - "melee_animation": "7182", - "range_animation": "0", - "combat_audio": "511,506,505", - "attack_speed": "4", - "magic_level": "25", - "respawn_delay": "25", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "711", - "death_animation": "7185", - "name": "Druidess", - "defence_level": "32", - "safespot": null, - "lifepoints": "30", - "strength_level": "28", - "id": "6987", - "range_level": "1", - "attack_level": "28" - }, - { - "examine": "On Gielinor", - "melee_animation": "8569", - "range_animation": "0", - "magic_level": "50", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8570", - "name": "Spirit jelly", - "defence_level": "50", - "safespot": null, - "lifepoints": "78", - "strength_level": "50", - "id": "6992", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "On Gielinor", - "melee_animation": "8569", - "range_animation": "0", - "magic_level": "50", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8570", - "name": "Spirit jelly", - "defence_level": "50", - "safespot": null, - "lifepoints": "78", - "strength_level": "50", - "id": "6993", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "Hail to the Queen", - "combat_style": "1", - "melee_animation": "6223", - "range_animation": "0", - "magic_level": "25", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "6228", - "name": "Spirit kalphite", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "6994", - "range_level": "25", - "attack_level": "25" - }, - { - "examine": "Hail to the Queen", - "combat_style": "1", - "melee_animation": "6223", - "range_animation": "0", - "magic_level": "25", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "6228", - "name": "Spirit kalphite", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "25", - "id": "6995", - "range_level": "25", - "attack_level": "25" - }, - { - "examine": "A stripy little baby raccoon.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Baby raccoon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "6997", - "range_level": "1", - "attack_level": "1" - }, - { - "spawn_animation": "8595", - "examine": "A ghost of a dragon slain during the god wars.", - "melee_animation": "8591", - "range_animation": "8594", - "combat_audio": "408,410,409", - "poisonous": "", - "defence_animation": "8592", - "poison_amount": "", - "magic_animation": "8594", - "death_animation": "8593", - "name": "Revenant dragon", - "defence_level": "85", - "safespot": null, - "lifepoints": "155", - "strength_level": "85", - "id": "6998", - "clue_level": "2", - "range_level": "85", - "attack_level": "85" - }, - { - "spawn_animation": "8595", - "examine": "A ghost of a dragon slain during the god wars.", - "melee_animation": "8591", - "range_animation": "8594", - "combat_audio": "408,410,409", - "poisonous": "", - "defence_animation": "8592", - "poison_amount": "", - "magic_animation": "8594", - "death_animation": "8593", - "name": "Revenant dragon", - "defence_level": "85", - "safespot": null, - "lifepoints": "155", - "strength_level": "85", - "id": "6999", - "clue_level": "2", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "A very large elemental adversary.", - "melee_animation": "4666", - "range_animation": "4666", - "combat_audio": "447,451,450", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "4664", - "weakness": "1", - "slayer_exp": "111", - "magic_animation": "4666", - "death_animation": "4668", - "name": "Fire giant", - "defence_level": "65", - "safespot": null, - "lifepoints": "111", - "strength_level": "65", - "id": "7003", - "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "A very large elemental adversary.", - "melee_animation": "4666", - "range_animation": "4666", - "combat_audio": "447,451,450", - "attack_speed": "5", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "4664", - "weakness": "1", - "slayer_exp": "111", - "magic_animation": "4666", - "death_animation": "4668", - "name": "Fire giant", - "defence_level": "65", - "safespot": null, - "lifepoints": "111", - "strength_level": "65", - "id": "7004", - "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "Must be the pack leader.", - "melee_animation": "6559", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "slayer_exp": "74", - "magic_animation": "0", - "death_animation": "6558", - "name": "Big wolf", - "defence_level": "62", - "safespot": null, - "lifepoints": "21", - "strength_level": "60", - "id": "7005", - "aggressive": "true", - "range_level": "1", - "attack_level": "60" - }, - { - "examine": "An active spiny creature.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Grenwall", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7010", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A hiding spiny creature.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Grenwall", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7011", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "What a strange little creature.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Pawya", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7012", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Dug by a Pawya (Not actual exam).", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Earth Mound", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7013", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "What a strange little creature.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Pawya", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7014", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A most unlikely creature.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Platypus", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7021", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A most unlikely creature.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Baby platypus", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7024", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An ogre snack with wings.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Wimpy bird", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7031", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A shy creature with a toxic bite.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Diseased kebbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7039", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Fit to wear the uniform?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ogress banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7049", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "She walks as if she owns the place.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Chief Tess", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7051", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A fearsome adversary with no sense of humour.", - "melee_animation": "8636", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "8640", - "name": "Ogress champion", - "defence_level": "48", - "safespot": null, - "lifepoints": "68", - "strength_level": "48", - "id": "7078", - "aggressive": "true", - "range_level": "1", - "attack_level": "48" - }, - { - "examine": "Irascible, belligerent and stupefyingly impolite.", - "melee_animation": "8636", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "8640", - "name": "Ogress warrior", - "defence_level": "45", - "safespot": null, - "lifepoints": "64", - "strength_level": "45", - "id": "7079", - "aggressive": "true", - "range_level": "1", - "attack_level": "45" - }, - { - "examine": "Irascible, beliggerent and stupefyingly impolite.", - "melee_animation": "8637", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "8641", - "name": "Ogress warrior", - "defence_level": "45", - "safespot": null, - "lifepoints": "64", - "strength_level": "45", - "id": "7080", - "aggressive": "true", - "range_level": "1", - "attack_level": "45" - }, - { - "examine": "A large and contentious lady ogre.", - "melee_animation": "8636", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "8640", - "name": "Ogress", - "defence_level": "42", - "safespot": null, - "lifepoints": "60", - "strength_level": "42", - "id": "7081", - "aggressive": "true", - "range_level": "1", - "attack_level": "42" - }, - { - "examine": "A large and contentious lady ogre.", - "melee_animation": "8637", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "8641", - "name": "Ogress", - "defence_level": "42", - "safespot": null, - "lifepoints": "60", - "strength_level": "42", - "id": "7082", - "aggressive": "true", - "range_level": "1", - "attack_level": "42" - }, - { - "examine": "Dead stone defending a dead throne room.", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "name": "Eucalyptus ent", - "defence_level": "51", - "safespot": null, - "lifepoints": "145", - "strength_level": "51", - "id": "7084", - "aggressive": "true", - "range_level": "1", - "attack_level": "51" - }, - { - "examine": "Dead stone defending a dead throne room.", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "name": "Eucalyptus ent", - "defence_level": "54", - "safespot": null, - "lifepoints": "142", - "strength_level": "54", - "id": "7085", - "aggressive": "true", - "range_level": "1", - "attack_level": "54" - }, - { - "examine": "Dead stone defending a dead throne room.", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "name": "Eucalyptus ent", - "defence_level": "57", - "safespot": null, - "lifepoints": "162", - "strength_level": "57", - "id": "7086", - "aggressive": "true", - "range_level": "1", - "attack_level": "57" - }, - { - "examine": "A crazy, evil druid.", - "start_gfx": "105", - "melee_animation": "422", - "range_animation": "422", - "attack_speed": "4", - "magic_level": "10", - "end_gfx": "107", - "respawn_delay": "25", - "defence_animation": "404", - "weakness": "3", - "magic_animation": "422", - "death_animation": "9055", - "name": "Chaos druid", - "defence_level": "12", - "safespot": null, - "lifepoints": "20", - "strength_level": "8", - "id": "7105", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "projectile": "106", - "attack_level": "8" - }, - { - "examine": "Low on brains, high on aggression.", - "melee_animation": "386", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "404", - "magic_animation": "0", - "death_animation": "9055", - "name": "Thug", - "defence_level": "9", - "safespot": null, - "lifepoints": "18", - "strength_level": "5", - "id": "7106", - "aggressive": "true", - "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "7" - }, - { - "examine": "Low on brains, high on aggression.", - "melee_animation": "386", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "404", - "magic_animation": "0", - "death_animation": "9055", - "name": "Thug", - "defence_level": "9", - "safespot": null, - "lifepoints": "18", - "strength_level": "5", - "id": "7107", - "aggressive": "true", - "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "7" - }, - { - "examine": "Low on brains, high on aggression.", - "melee_animation": "386", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "404", - "magic_animation": "0", - "death_animation": "9055", - "name": "Thug", - "defence_level": "9", - "safespot": null, - "lifepoints": "18", - "strength_level": "5", - "id": "7108", - "aggressive": "true", - "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "7" - }, - { - "examine": "Low on brains, high on aggression.", - "melee_animation": "386", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "404", - "magic_animation": "0", - "death_animation": "9055", - "name": "Thug", - "defence_level": "9", - "safespot": null, - "lifepoints": "18", - "strength_level": "5", - "id": "7109", - "aggressive": "true", - "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "7" - }, - { - "examine": "Low on brains, high on aggression.", - "melee_animation": "386", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "404", - "magic_animation": "0", - "death_animation": "9055", - "name": "Thug", - "defence_level": "9", - "safespot": null, - "lifepoints": "18", - "strength_level": "5", - "id": "7110", - "aggressive": "true", - "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "7" - }, - { - "examine": "Low on brains, high on aggression.", - "melee_animation": "386", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "404", - "magic_animation": "0", - "death_animation": "9055", - "name": "Thug", - "defence_level": "9", - "safespot": null, - "lifepoints": "18", - "strength_level": "5", - "id": "7111", - "aggressive": "true", - "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "7" - }, - { - "examine": "Low on brains, high on aggression.", - "melee_animation": "386", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "404", - "magic_animation": "0", - "death_animation": "9055", - "name": "Thug", - "defence_level": "9", - "safespot": null, - "lifepoints": "18", - "strength_level": "5", - "id": "7112", - "aggressive": "true", - "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "7" - }, - { - "examine": "Low on brains, high on aggression.", - "melee_animation": "386", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "404", - "magic_animation": "0", - "death_animation": "9055", - "name": "Thug", - "defence_level": "9", - "safespot": null, - "lifepoints": "18", - "strength_level": "5", - "id": "7113", - "aggressive": "true", - "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "7" - }, - { - "examine": "Low on brains, high on aggression.", - "melee_animation": "386", - "range_animation": "0", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "50", - "defence_animation": "404", - "magic_animation": "0", - "death_animation": "9055", - "name": "Thug", - "defence_level": "9", - "safespot": null, - "lifepoints": "18", - "strength_level": "5", - "id": "7114", - "aggressive": "true", - "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", - "clue_level": "0", - "range_level": "1", - "attack_level": "7" - }, - { - "examine": "He seems to be enjoying his time in the bar.", - "melee_animation": "0", - "range_animation": "0", - "magic_level": "1", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Thaki the delivery dwarf", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7115", - "bonuses": "5,5,0,0,0,0,2,3,3,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of King Tyras's men.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Tyras guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7120", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A hungry-looking rabbit.", - "melee_animation": "0", - "range_animation": "0", - "respawn_delay": "50", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Rabbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7125", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A gnome farmer.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Farmer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7128", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A gnome farmer.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Farmer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7130", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Owner of this homestead.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mrs. Winkin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7132", - "range_level": "1", - "attack_level": "1" - }, - { - "agg_radius": "64", - "examine": "That's one big Ork... ", - "melee_animation": "8754", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "8755", - "death_animation": "8756", - "name": "Bork", - "defence_level": "80", - "poison_immune": "true", - "lifepoints": "300", - "strength_level": "90", - "id": "7133", - "bonuses": "200,120,100,300,300,120,400,500,300,200,300,400,200,90,0", - "range_level": "1", - "attack_level": "100" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Sharimika", - "id": "2505" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Sharimika", - "id": "2506" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Mamma Bufetta", - "id": "2508" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Mamma Bufetta", - "id": "2509" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Layleen", - "id": "2511" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Layleen", - "id": "2512" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Karaday", - "id": "2514" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Karaday", - "id": "2515" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Safta Doc", - "id": "2517" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Safta Doc", - "id": "2518" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Gabooty", - "id": "2520" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Gabooty", - "id": "2521" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Fanellaman", - "id": "2523" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Fanellaman", - "id": "2524" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Jagbakoba", - "id": "2526" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Jagbakoba", - "id": "2527" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Murcaily", - "id": "2529" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Murcaily", - "id": "2530" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Rionasta", - "id": "2532" - }, - { - "examine": "A native of Tai Bwo Wannai.", - "name": "Rionasta", - "id": "2533" - }, - { - "agg_radius": "64", - "melee_animation": "8754", - "attack_speed": "8", - "respawn_delay": "60", - "defence_animation": "8755", - "death_animation": "8756", - "name": "Bork", - "defence_level": "1", - "safespot": null, - "poison_immune": "true", - "lifepoints": "300", - "strength_level": "1", - "id": "7134", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Aww, aren't they the cutest li - Argh!", - "melee_animation": "8760", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "8761", - "name": "Ork legion", - "defence_level": "57", - "poison_immune": "true", - "safespot": null, - "lifepoints": "100", - "strength_level": "68", - "id": "7135", - "aggressive": "true", - "bonuses": "5,10,3,5,3,5,5,5,10,0,0,0,0,0,0", - "range_level": "68", - "attack_level": "68" - }, - { - "examine": "A powerful wizard.", - "combat_style": "2", - "attack_speed": "25", - "magic_level": "90", - "spell_id": "11", - "name": "Dagon'hai Elite", - "defence_level": "40", - "safespot": null, - "lifepoints": "70", - "strength_level": "90", - "id": "7137", - "aggressive": "true", - "bonuses": "220,190,140,120,120,130,90,120,120,200,100,154,150,93,190", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A monk of the Dagon'hai.", - "melee_animation": "422", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "98", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Dagon'hai Monk", - "defence_level": "80", - "safespot": null, - "lifepoints": "88", - "strength_level": "84", - "id": "7138", - "aggressive": "true", - "range_level": "1", - "attack_level": "84" - }, - { - "examine": "A monk of the Dagon'hai.", - "melee_animation": "422", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "98", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Dagon'hai Monk", - "defence_level": "80", - "safespot": null, - "lifepoints": "88", - "strength_level": "84", - "id": "7139", - "aggressive": "true", - "range_level": "1", - "attack_level": "84" - }, - { - "examine": "A monk of the Dagon'hai.", - "melee_animation": "422", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "98", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "836", - "name": "Dagon'hai Monk", - "defence_level": "80", - "safespot": null, - "lifepoints": "88", - "strength_level": "84", - "id": "7140", - "aggressive": "true", - "range_level": "1", - "attack_level": "84" - }, - { - "examine": "He seems to have gone mad.", - "melee_animation": "426", - "range_animation": "426", - "magic_level": "25", - "defence_animation": "0", - "weakness": "1", - "magic_animation": "0", - "death_animation": "836", - "name": "null", - "defence_level": "25", - "safespot": null, - "lifepoints": "4", - "strength_level": "25", - "id": "7141", - "aggressive": "true", - "range_level": "25", - "attack_level": "25" - }, - { - "examine": "He thumps people who cheat.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Guard", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7142", - "clue_level": "1", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An imprisoned gublinch.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gublinch jailmate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7144", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An imprisoned gublinch.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gublinchette jailmate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7145", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An imprisoned gublinch.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gublinchette jailmate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7146", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An imprisoned gublinch.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gublinch jailmate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7147", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An imprisoned gublinch.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gublinch jailmate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7148", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An imprisoned gublinch.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gublinch jailmate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7149", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An imprisoned gublinch.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Gublinch jailmate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7150", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A person sitting an exam.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Student", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7152", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A person sitting an exam.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Student", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7156", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A person sitting an exam.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Student", - "defence_level": "1", - "lifepoints": "10", - "strength_level": "1", - "id": "7157", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A household pest.", - "melee_animation": "8785", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "8788", - "name": "Cockroach drone", - "defence_level": "3", - "safespot": null, - "lifepoints": "4", - "strength_level": "3", - "id": "7158", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "Eurgh! A big bug.", - "melee_animation": "8787", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "8790", - "name": "Cockroach worker", - "defence_level": "70", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "7159", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "Euww! A giant bug.", - "melee_animation": "8786", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "8789", - "name": "Cockroach soldier", - "defence_level": "70", - "safespot": null, - "lifepoints": "97", - "strength_level": "26", - "id": "7160", - "bonuses": "10,10,10,5,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "38" - }, - { - "melee_animation": "422", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Mugger", - "defence_level": "1", - "safespot": null, - "lifepoints": "8", - "strength_level": "1", - "id": "7161", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "422", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Mugger", - "defence_level": "1", - "safespot": null, - "lifepoints": "8", - "strength_level": "1", - "id": "7162", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "4933", - "range_animation": "4933", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "4934", - "magic_animation": "4933", - "death_animation": "4935", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "7202", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "4933", - "range_animation": "4933", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "4934", - "magic_animation": "4933", - "death_animation": "4935", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "7204", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It seems to have eaten a lot of chocolate.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Cockroach", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7206", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's searching for crumbs of chocolate.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Spider", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7207", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It seems to have eaten a lot of chocolate.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Snail", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7209", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7210", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7211", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7212", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7213", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7214", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7215", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7216", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7217", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7218", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7219", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7220", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7221", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7222", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7223", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7224", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7225", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7226", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7227", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a tiny, cheeky monkey.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "629,631,630", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7228", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a tiny, cheeky monkey.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "629,631,630", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7229", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a tiny, cheeky monkey.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "629,631,630", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7230", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a tiny, cheeky monkey.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "629,631,630", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7231", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a tiny, cheeky monkey.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "629,631,630", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7232", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a tiny, cheeky monkey.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "629,631,630", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7233", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a tiny, cheeky monkey.", - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7234", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a tiny, cheeky monkey.", - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7235", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's a tiny, cheeky monkey.", - "name": "Baby monkey", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "629,631,630", - "strength_level": "1", - "id": "7236", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A stripy little baby raccoon.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Baby Raccoon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7275", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's so adorably tiny!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Baby gecko", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7285", - "range_level": "1", - "attack_level": "1" - }, - { - "combat_style": "0", - "melee_animation": "8222", - "magic_level": "70", - "respawn_delay": "0", - "defence_animation": "8224", - "death_animation": "8226", - "name": "Swamp titan", - "defence_level": "78", - "safespot": null, - "lifepoints": "556", - "strength_level": "1", - "id": "7329", - "bonuses": "60,60,60,60,50,50,100,200,200,28,100,100,70,70,70", - "range_level": "70", - "attack_level": "1" - }, - { - "examine": "Do you hear duelling banjos?", - "combat_style": "0", - "melee_animation": "8222", - "range_animation": "0", - "magic_level": "65", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8226", - "name": "Swamp titan", - "defence_level": "65", - "safespot": null, - "lifepoints": "117", - "strength_level": "60", - "id": "7330", - "bonuses": "60,60,60,60,50,50,100,200,200,28,100,100,70,70,70", - "range_level": "65", - "attack_level": "60" - }, - { - "examine": "It buzzes and bites. Nasty.", - "melee_animation": "8032", - "range_animation": "8032", - "magic_level": "21", - "respawn_delay": "50", - "defence_animation": "8034", - "magic_animation": "8032", - "death_animation": "8033", - "name": "Spirit mosquito", - "defence_level": "25", - "poison_immune": "true", - "safespot": null, - "lifepoints": "43", - "strength_level": "24", - "id": "7331", - "bonuses": "45,49,42,39,47,46,29,43,51,16,53,10,0,0,0", - "range_level": "25", - "attack_level": "28" - }, - { - "examine": "It buzzes and bites. Nasty.", - "melee_animation": "8032", - "range_animation": "8032", - "magic_level": "21", - "respawn_delay": "50", - "defence_animation": "8034", - "weakness": "10", - "magic_animation": "8032", - "death_animation": "8033", - "name": "Spirit mosquito", - "defence_level": "25", - "poison_immune": "true", - "safespot": null, - "lifepoints": "43", - "strength_level": "24", - "id": "7332", - "bonuses": "45,49,42,39,47,46,29,43,51,16,53,10,0,0,0", - "range_level": "25", - "attack_level": "28" - }, - { - "examine": "It spins.", - "melee_animation": "8172", - "range_animation": "0", - "magic_level": "34", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8176", - "name": "Void spinner", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "7333", - "range_level": "34", - "attack_level": "34" - }, - { - "examine": "It spins.", - "melee_animation": "8172", - "range_animation": "0", - "magic_level": "34", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8176", - "name": "Void spinner", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "7334", - "range_level": "34", - "attack_level": "34" - }, - { - "examine": "This one will burn right through the net!", - "combat_style": "1", - "melee_animation": "7863", - "range_animation": "0", - "magic_level": "60", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7864", - "name": "Forge regent", - "defence_level": "60", - "safespot": null, - "lifepoints": "108", - "strength_level": "60", - "id": "7335", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "This one will burn right through the net!", - "combat_style": "1", - "melee_animation": "7863", - "range_animation": "0", - "magic_level": "60", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7864", - "name": "Forge regent", - "defence_level": "60", - "safespot": null, - "lifepoints": "108", - "strength_level": "60", - "id": "7336", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "Fast cat is fast.", - "melee_animation": "5228", - "range_animation": "0", - "magic_level": "50", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "5230", - "name": "Spirit larupia", - "defence_level": "50", - "safespot": null, - "lifepoints": "81", - "strength_level": "50", - "id": "7337", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "Fast cat is fast.", - "melee_animation": "5228", - "range_animation": "0", - "magic_level": "50", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "5230", - "name": "Spirit larupia", - "defence_level": "50", - "safespot": null, - "lifepoints": "81", - "strength_level": "50", - "id": "7338", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "It'll kill your enemies, and makes a great cup of tea.", - "combat_style": "1", - "melee_animation": "7879", - "range_animation": "422", - "magic_level": "70", - "respawn_delay": "50", - "defence_animation": "7878", - "weakness": "0", - "magic_animation": "422", - "death_animation": "7880", - "name": "Geyser titan", - "defence_level": "70", - "poison_immune": "true", - "safespot": null, - "lifepoints": "620", - "strength_level": "70", - "id": "7339", - "bonuses": "115,115,115,110,110,102,95,110,110,105,78,120,115,120,120", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "It'll kill your enemies, and makes a great cup of tea.", - "combat_style": "1", - "melee_animation": "7879", - "range_animation": "422", - "magic_level": "70", - "respawn_delay": "50", - "defence_animation": "7878", - "weakness": "0", - "slayer_exp": "0", - "magic_animation": "422", - "death_animation": "7880", - "name": "Geyser titan", - "defence_level": "70", - "poison_immune": "true", - "safespot": null, - "lifepoints": "620", - "strength_level": "70", - "id": "7340", - "bonuses": "115,115,115,110,110,102,95,110,110,105,78,120,115,120,120", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "Made of lava.", - "combat_style": "0", - "melee_animation": "7980", - "range_animation": "0", - "magic_level": "65", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7979", - "name": "Lava titan", - "defence_level": "65", - "safespot": null, - "lifepoints": "115", - "strength_level": "65", - "id": "7341", - "bonuses": "100,120,90,100,90,90,40,50,0,0,0,0,0,0,0", - "range_level": "65", - "attack_level": "65" - }, - { - "examine": "Made of lava.", - "combat_style": "0", - "melee_animation": "7980", - "range_animation": "0", - "magic_level": "65", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7979", - "name": "Lava titan", - "defence_level": "65", - "safespot": null, - "lifepoints": "115", - "strength_level": "65", - "id": "7342", - "bonuses": "100,120,90,100,90,90,40,50,0,0,0,0,0,0,0", - "range_level": "65", - "attack_level": "65" - }, - { - "examine": "The King of the Titans!", - "combat_style": "1", - "melee_animation": "8183", - "range_animation": "8183", - "magic_level": "70", - "respawn_delay": "15", - "defence_animation": "8185", - "weakness": "10", - "slayer_exp": "0", - "magic_animation": "8183", - "death_animation": "8184", - "name": "Steel titan", - "defence_level": "70", - "poison_immune": "true", - "safespot": null, - "lifepoints": "750", - "strength_level": "70", - "id": "7343", - "bonuses": "105,105,105,100,110,102,95,110,110,105,78,120,115,120,120", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "The King of the Titans!", - "combat_style": "1", - "melee_animation": "8183", - "range_animation": "8183", - "magic_level": "70", - "respawn_delay": "15", - "defence_animation": "8185", - "weakness": "10", - "slayer_exp": "0", - "magic_animation": "8183", - "death_animation": "8184", - "name": "Steel titan", - "defence_level": "70", - "poison_immune": "true", - "safespot": null, - "lifepoints": "750", - "strength_level": "70", - "id": "7344", - "bonuses": "105,105,105,100,110,102,95,110,110,105,78,120,115,120,120", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "Four fists can make quite an impression IN someone...", - "melee_animation": "8050", - "magic_level": "60", - "respawn_delay": "0", - "defence_animation": "8051", - "death_animation": "8052", - "name": "Obsidian golem", - "defence_level": "60", - "safespot": null, - "lifepoints": "10", - "strength_level": "60", - "id": "7345", - "bonuses": "100,120,90,100,90,90,40,50,0,0,0,0,0,0,0", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "Four fists can make quite an impression IN someone...", - "melee_animation": "8050", - "range_animation": "0", - "magic_level": "60", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8052", - "name": "Obsidian golem", - "defence_level": "60", - "safespot": null, - "lifepoints": "104", - "strength_level": "60", - "id": "7346", - "bonuses": "100,120,90,100,90,90,40,50,0,0,0,0,0,0,0", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "If a normal black cat is bad luck", - "melee_animation": "5989", - "range_animation": "0", - "magic_level": "60", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "5990", - "name": "Talon beast", - "defence_level": "60", - "safespot": null, - "lifepoints": "110", - "strength_level": "60", - "id": "7347", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "If a normal black cat is bad luck", - "melee_animation": "5989", - "range_animation": "0", - "magic_level": "60", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "5990", - "name": "Talon beast", - "defence_level": "60", - "safespot": null, - "lifepoints": "110", - "strength_level": "60", - "id": "7348", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "Big", - "melee_animation": "7693", - "range_animation": "0", - "magic_level": "70", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7692", - "name": "Abyssal titan", - "defence_level": "70", - "safespot": null, - "lifepoints": "125", - "strength_level": "70", - "id": "7349", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "Big", - "melee_animation": "7693", - "range_animation": "0", - "magic_level": "70", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7692", - "name": "Abyssal titan", - "defence_level": "70", - "safespot": null, - "lifepoints": "125", - "strength_level": "70", - "id": "7350", - "range_level": "70", - "attack_level": "70" - }, - { - "examine": "It torches.", - "combat_style": "2", - "melee_animation": "8235", - "range_animation": "0", - "magic_level": "34", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8236", - "name": "Void torcher", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "7351", - "range_level": "34", - "attack_level": "34" - }, - { - "examine": "It torches.", - "combat_style": "2", - "melee_animation": "8235", - "range_animation": "0", - "magic_level": "34", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8236", - "name": "Void torcher", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "7352", - "range_level": "34", - "attack_level": "34" - }, - { - "examine": "Looks a little...volatile.", - "combat_style": "1", - "melee_animation": "7755", - "range_animation": "0", - "magic_level": "29", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7758", - "name": "Giant chinchompa", - "defence_level": "29", - "safespot": null, - "lifepoints": "41", - "strength_level": "29", - "id": "7353", - "range_level": "29", - "attack_level": "29" - }, - { - "examine": "Looks a little...volatile.", - "combat_style": "1", - "melee_animation": "7755", - "range_animation": "0", - "magic_level": "29", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7758", - "name": "Giant chinchompa", - "defence_level": "29", - "safespot": null, - "lifepoints": "41", - "strength_level": "29", - "id": "7354", - "range_level": "29", - "attack_level": "29" - }, - { - "examine": "Scorching!", - "combat_style": "2", - "melee_animation": "7834", - "range_animation": "7834", - "attack_speed": "5", - "magic_level": "40", - "respawn_delay": "50", - "defence_animation": "7832", - "weakness": "10", - "slayer_exp": "0", - "magic_animation": "7834", - "death_animation": "7833", - "name": "Fire titan", - "defence_level": "40", - "poison_immune": "true", - "safespot": null, - "lifepoints": "476", - "strength_level": "30", - "id": "7355", - "bonuses": "64,45,76,82,120,84,140,120,106,89,113,80,0,0,0", - "range_level": "30", - "attack_level": "40" - }, - { - "examine": "Scorching!", - "combat_style": "2", - "melee_animation": "7834", - "range_animation": "7834", - "attack_speed": "5", - "magic_level": "40", - "respawn_delay": "50", - "defence_animation": "7832", - "weakness": "10", - "slayer_exp": "0", - "magic_animation": "7834", - "death_animation": "7833", - "name": "Fire titan", - "defence_level": "40", - "poison_immune": "true", - "safespot": null, - "lifepoints": "476", - "strength_level": "30", - "id": "7356", - "bonuses": "64,45,76,82,208,84,221,231,179,89,113,23,0,0,0", - "range_level": "30", - "attack_level": "40" - }, - { - "examine": "Gathers rolling stones to bash people with.", - "melee_animation": "7844", - "range_animation": "7834", - "attack_speed": "5", - "magic_level": "40", - "respawn_delay": "50", - "defence_animation": "7832", - "weakness": "10", - "slayer_exp": "0", - "magic_animation": "7834", - "death_animation": "7843", - "name": "Moss titan", - "defence_level": "40", - "poison_immune": "true", - "safespot": null, - "lifepoints": "476", - "strength_level": "30", - "id": "7357", - "bonuses": "64,45,76,82,120,84,140,120,106,89,113,80,0,0,0", - "range_level": "30", - "attack_level": "40" - }, - { - "examine": "Gathers rolling stones to bash people with.", - "melee_animation": "7844", - "range_animation": "7834", - "attack_speed": "5", - "magic_level": "40", - "respawn_delay": "50", - "defence_animation": "7832", - "weakness": "10", - "slayer_exp": "0", - "magic_animation": "7834", - "death_animation": "7843", - "name": "Moss titan", - "defence_level": "40", - "poison_immune": "true", - "safespot": null, - "lifepoints": "476", - "strength_level": "30", - "id": "7358", - "bonuses": "64,45,76,82,120,84,140,120,106,89,113,80,0,0,0", - "range_level": "30", - "attack_level": "40" - }, - { - "examine": "Frosty the highly violent snowman.", - "melee_animation": "7845", - "range_animation": "7834", - "attack_speed": "5", - "magic_level": "40", - "respawn_delay": "50", - "defence_animation": "7832", - "weakness": "10", - "slayer_exp": "0", - "magic_animation": "7834", - "death_animation": "7846", - "name": "Ice titan", - "defence_level": "40", - "poison_immune": "true", - "safespot": null, - "lifepoints": "476", - "strength_level": "30", - "id": "7359", - "bonuses": "64,45,76,82,120,84,140,120,106,89,113,80,0,0,0", - "range_level": "30", - "attack_level": "40" - }, - { - "examine": "Frosty the highly violent snowman.", - "melee_animation": "7845", - "range_animation": "7834", - "attack_speed": "5", - "magic_level": "40", - "respawn_delay": "50", - "defence_animation": "7832", - "weakness": "10", - "slayer_exp": "0", - "magic_animation": "7834", - "death_animation": "7846", - "name": "Ice titan", - "defence_level": "40", - "poison_immune": "true", - "safespot": null, - "lifepoints": "476", - "strength_level": "30", - "id": "7360", - "bonuses": "64,45,76,82,120,84,140,120,106,89,113,80,0,0,0", - "range_level": "30", - "attack_level": "40" - }, - { - "examine": "This bat burned down the belfry.", - "combat_style": "2", - "melee_animation": "8257", - "range_animation": "0", - "attack_speed": "3", - "magic_level": "22", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8258", - "name": "Spirit Tz-Kih", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "7361", - "range_level": "22", - "attack_level": "22" - }, - { - "examine": "This bat burned down the belfry.", - "combat_style": "2", - "melee_animation": "8257", - "range_animation": "0", - "attack_speed": "3", - "magic_level": "22", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8258", - "name": "Spirit Tz-Kih", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "7362", - "range_level": "22", - "attack_level": "22" - }, - { - "examine": "Those spikes are pretty big!", - "start_gfx": "1367", - "melee_animation": "5229", - "range_animation": "0", - "magic_level": "50", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "5230", - "name": "Spirit graahk", - "defence_level": "50", - "safespot": null, - "lifepoints": "81", - "strength_level": "50", - "id": "7363", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "Those spikes are pretty big!", - "start_gfx": "1367", - "melee_animation": "5229", - "range_animation": "0", - "magic_level": "50", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "5230", - "name": "Spirit graahk", - "defence_level": "50", - "safespot": null, - "lifepoints": "81", - "strength_level": "50", - "id": "7364", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "Those teeth are pretty big!", - "start_gfx": "1365", - "melee_animation": "5228", - "range_animation": "0", - "magic_level": "50", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "5230", - "name": "Spirit kyatt", - "defence_level": "50", - "safespot": null, - "lifepoints": "81", - "strength_level": "50", - "id": "7365", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "Those teeth are pretty big!", - "start_gfx": "1365", - "melee_animation": "5228", - "range_animation": "0", - "magic_level": "50", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "5230", - "name": "Spirit kyatt", - "defence_level": "50", - "safespot": null, - "lifepoints": "81", - "strength_level": "50", - "id": "7366", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "It shifts.", - "melee_animation": "8131", - "range_animation": "0", - "magic_level": "34", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8133", - "name": "Void shifter", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "7367", - "range_level": "34", - "attack_level": "34" - }, - { - "examine": "It shifts.", - "melee_animation": "8131", - "range_animation": "0", - "magic_level": "34", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8133", - "name": "Void shifter", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "7368", - "range_level": "34", - "attack_level": "34" - }, - { - "examine": "It ravages.", - "melee_animation": "8086", - "range_animation": "0", - "magic_level": "34", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8087", - "name": "Void ravager", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "7370", - "range_level": "34", - "attack_level": "34" - }, - { - "examine": "It ravages.", - "melee_animation": "8086", - "range_animation": "0", - "magic_level": "34", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8087", - "name": "Void ravager", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "7371", - "range_level": "34", - "attack_level": "34" - }, - { - "examine": "It's like a little stomach on wings.", - "melee_animation": "7994", - "range_animation": "0", - "magic_level": "60", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7996", - "name": "Ravenous locust", - "defence_level": "60", - "safespot": null, - "lifepoints": "100", - "strength_level": "60", - "id": "7373", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "It's like a little stomach on wings.", - "melee_animation": "7994", - "range_animation": "0", - "magic_level": "60", - "respawn_delay": "0", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "7996", - "name": "Ravenous locust", - "defence_level": "60", - "safespot": null, - "lifepoints": "100", - "strength_level": "60", - "id": "7374", - "range_level": "60", - "attack_level": "60" - }, - { - "examine": "He is an iron man!", - "combat_style": "0", - "melee_animation": "7946", - "magic_level": "65", - "respawn_delay": "0", - "defence_animation": "7948", - "weakness": "10", - "death_animation": "7947", - "name": "Iron titan", - "defence_level": "65", - "safespot": null, - "lifepoints": "694", - "strength_level": "65", - "id": "7375", - "bonuses": "120,130,100,109,80,120,102,90,103,80,100,108,105,66,90", - "range_level": "65", - "attack_level": "65" - }, - { - "examine": "He is an iron man!", - "combat_style": "0", - "melee_animation": "7946", - "combat_audio": "0,0,0", - "magic_level": "65", - "respawn_delay": "0", - "defence_animation": "7948", - "weakness": "10", - "slayer_exp": "0", - "death_animation": "7947", - "name": "Iron titan", - "defence_level": "65", - "safespot": null, - "lifepoints": "694", - "strength_level": "65", - "id": "7376", - "bonuses": "120,130,100,109,80,120,102,90,103,80,100,108,105,66,90", - "range_level": "65", - "attack_level": "65" - }, - { - "examine": "Where did I put the marshmallows?", - "melee_animation": "8080", - "range_animation": "0", - "magic_level": "46", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8078", - "name": "Pyrelord", - "defence_level": "46", - "safespot": null, - "lifepoints": "65", - "strength_level": "46", - "id": "7377", - "range_level": "46", - "attack_level": "46" - }, - { - "examine": "Where did I put the marshmallows?", - "melee_animation": "8080", - "range_animation": "0", - "magic_level": "46", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "death_animation": "8078", - "name": "Pyrelord", - "defence_level": "46", - "safespot": null, - "lifepoints": "65", - "strength_level": "46", - "id": "7378", - "range_level": "46", - "attack_level": "46" - }, - { - "melee_animation": "8965", - "respawn_delay": "60", - "defence_animation": "8966", - "death_animation": "8967", - "name": "Elfinlocks", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "id": "7379", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "8965", - "respawn_delay": "60", - "defence_animation": "8966", - "death_animation": "8967", - "name": "Missi Sissi", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "id": "7380", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "combat_style": "2", - "melee_animation": "8955", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "8957", - "death_animation": "8956", - "name": "Missi Sissi", - "defence_level": "1", - "safespot": null, - "lifepoints": "75", - "strength_level": "1", - "id": "7381", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "combat_style": "2", - "melee_animation": "8955", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "8957", - "death_animation": "8956", - "name": "Uberlass", - "defence_level": "1", - "safespot": null, - "lifepoints": "75", - "strength_level": "1", - "id": "7382", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The vengeful spirit of one who died within Daemonheim.", - "melee_animation": "0", - "range_animation": "0", - "magic_level": "25", - "defence_animation": "0", - "weakness": "3", - "magic_animation": "0", - "name": "Elisabeta", - "defence_level": "25", - "safespot": null, - "lifepoints": "7", - "strength_level": "25", - "id": "7398", - "aggressive": "true", - "range_level": "25", - "attack_level": "25" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "2705", - "range_animation": "2705", - "combat_audio": "3102,3104,3103", - "attack_speed": "5", - "defence_animation": "2706", - "magic_animation": "2705", - "death_animation": "2707", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "2", - "strength_level": "1", - "id": "7417", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "An impling manager: what a terrifying thought!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Wigglewoo", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7425", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "This worker looks after the incubator.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Orangeowns", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7426", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Elf warrior", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "425,427,426", - "strength_level": "1", - "id": "7438", - "clue_level": "2", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Elf warrior", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "425,427,426", - "strength_level": "1", - "id": "7439", - "clue_level": "2", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Elf warrior", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "425,427,426", - "strength_level": "1", - "id": "7440", - "clue_level": "2", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Elf warrior", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "425,427,426", - "strength_level": "1", - "id": "7441", - "clue_level": "2", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He holds up passers by.", - "melee_animation": "386", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "836", - "name": "Eudav", - "defence_level": "8", - "safespot": null, - "lifepoints": "11", - "strength_level": "8", - "id": "7443", - "aggressive": "true", - "range_level": "1", - "attack_level": "8" - }, - { - "name": "Fairtrade", - "defence_level": "1", - "safespot": null, - "lifepoints": "75", - "strength_level": "1", - "attack_speed": "5", - "id": "7459", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Teapotspout", - "defence_level": "1", - "safespot": null, - "lifepoints": "75", - "strength_level": "1", - "attack_speed": "5", - "id": "7460", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "A popular dwarven delicacy.", - "melee_animation": "4933", - "range_animation": "4933", - "combat_audio": "703,705,704", - "attack_speed": "5", - "defence_animation": "4934", - "magic_animation": "4933", - "death_animation": "4935", - "name": "Rat", - "defence_level": "1", - "safespot": null, - "lifepoints": "5", - "strength_level": "1", - "id": "7461", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "It's bubbling, gross.", - "melee_animation": "9130", - "range_animation": "9130", - "attack_speed": "5", - "respawn_delay": "20", - "defence_animation": "9132", - "magic_animation": "9130", - "death_animation": "9131", - "name": "Hotwater", - "defence_level": "99", - "safespot": null, - "lifepoints": "120", - "strength_level": "99", - "id": "7462", - "bonuses": "20,20,20,20,20,20,20,20,20,20,20,20,45,20,0", - "range_level": "1", - "attack_level": "99" - }, - { - "examine": "It's bubbling, gross.", - "melee_animation": "9130", - "range_animation": "9130", - "attack_speed": "5", - "respawn_delay": "20", - "defence_animation": "9132", - "magic_animation": "9130", - "death_animation": "9131", - "name": "Hotwater", - "defence_level": "99", - "safespot": null, - "lifepoints": "120", - "strength_level": "99", - "id": "7463", - "bonuses": "20,20,20,20,20,20,20,20,20,20,20,20,45,20,0", - "range_level": "1", - "attack_level": "99" - }, - { - "examine": "His usual sunny disposition is not in evidence.", - "range_animation": "0", - "magic_level": "30", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "10", - "magic_animation": "0", - "name": "Lady Seenit", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7475", - "range_level": "30", - "attack_level": "30" - }, - { - "name": "Berrybree", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "7476", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Stuffstuffer", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "7477", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Learking", - "defence_level": "1", - "safespot": null, - "lifepoints": "60", - "strength_level": "1", - "id": "7479", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Rachael", - "defence_level": "1", - "safespot": null, - "lifepoints": "70", - "strength_level": "1", - "id": "7480", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "You clearly can't live on treasure alone.", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5491", - "name": "Cool Mom227", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7481", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "A testament to the effect of greed.", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5491", - "name": "Purepker895", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7482", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "He wanted loot", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5491", - "name": "Pkmaster0036", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7483", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Eternally looking for that big payday.", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5491", - "name": "Cow1337killr", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7484", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "No more tea-breaks for this one.", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5491", - "name": "Mathdude", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7485", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Even in death you can smell his feet.", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5491", - "name": "Mathdude", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7486", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "An anatomist's dream.", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5491", - "name": "1337sp34kr", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7487", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "A hand seems to be gripping his spine through his chest. Ouch.", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "5491", - "name": "1337sp34kr", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7488", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "A desert dweller taken to banditry.", - "melee_animation": "9705", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Sarah Domin", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7492", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Calls himself an archaeologist.", - "melee_animation": "9715", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Sarah Domin", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7493", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "He hasn't found much of use", - "melee_animation": "9705", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Sue Spammers", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7494", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "An amateur historian with added greed.", - "melee_animation": "9715", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Killerwail", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7495", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "It all started with her love of genealogy.", - "melee_animation": "9705", - "range_animation": "0", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Wise Old Man", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7496", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "A rocky horror.", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "name": "Sabre-toothed kyatt", - "defence_level": "27", - "safespot": null, - "lifepoints": "38", - "strength_level": "27", - "id": "7497", - "range_level": "1", - "attack_level": "27" - }, - { - "examine": "This dung beetle has mistaken you for its staple diet.", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "name": "Cerulean twitch", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7500", - "aggressive": "true", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "It's looking unwell - probably something it ate.", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "name": "Abone", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7501", - "aggressive": "true", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "Once a valuable contributor to the ecosystem.", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "name": "Mythmaster", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7502", - "aggressive": "true", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "This is what happens if you play with your food.", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "name": "Donkey Wrong", - "defence_level": "30", - "safespot": null, - "lifepoints": "42", - "strength_level": "30", - "id": "7503", - "aggressive": "true", - "range_level": "1", - "attack_level": "30" - }, - { - "examine": "He likes a good fight", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Creapantic", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7504", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He likes a good fight", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Frondlike", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7505", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "His favourite must be winning.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Happy Spud", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7506", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Blood-thirsty and enthusiastic.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Nobodyhere", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7507", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Probably discussing the strengths and weaknesses of the fighting slaves.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bluehairlass", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7508", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "His favourite must be winning.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ilikekebabs", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7510", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "His favourite must be winning.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Trunka Lex", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7511", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Probably discussing the strengths and weaknesses of the fighting slaves.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Val Razz", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7512", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Probably discussing the strengths and weaknesses of the fighting slaves.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Abstractclas", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7513", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Bloodthirsty and enthusiastic.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Bigbluebox", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7514", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Bloodthirsty and enthusiastic.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Funorbrox", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7515", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's asleep.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Morrisnorris", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7518", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's propping the bar up. Or is it the other way round?", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Matt Blitzer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7519", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He demands to have some booze.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ketchuppl0x", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7520", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "395", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Redheadmonky", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "7528", - "range_level": "1", - "attack_level": "1" - }, - { - "slayer_exp": "0", - "examine": "It's an NPC.", - "name": "3sacrowd", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7532", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not somewhere I want to go...", - "attack_speed": "90", - "magic_level": "70", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "90", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "7551", - "bonuses": "200,200,200,100,100,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not somewhere I want to go...", - "attack_speed": "5", - "magic_level": "50", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "90", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "7552", - "bonuses": "200,200,200,200,50,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not somewhere I want to go...", - "attack_speed": "5", - "magic_level": "90", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "90", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "7553", - "bonuses": "200,200,100,200,100,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Not somewhere I want to go...", - "melee_animation": "0", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "90", - "respawn_delay": "125", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Portal", - "defence_level": "90", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "7554", - "bonuses": "100,100,200,200,100,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Void Knight will soon weaken the shield.", - "attack_speed": "5", - "magic_level": "30", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "30", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "7555", - "bonuses": "100,100,100,50,50,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Void Knight will soon weaken the shield.", - "attack_speed": "5", - "magic_level": "15", - "respawn_delay": "125", - "name": "Portal", - "defence_level": "30", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "7556", - "bonuses": "100,100,100,100,25,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Void Knight will soon weaken the shield.", - "melee_animation": "0", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "30", - "respawn_delay": "125", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Portal", - "defence_level": "30", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "7557", - "bonuses": "100,100,50,100,50,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Void Knight will soon weaken the shield.", - "melee_animation": "0", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "30", - "respawn_delay": "125", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Portal", - "defence_level": "30", - "safespot": null, - "lifepoints": "250", - "strength_level": "1", - "id": "7558", - "bonuses": "50,50,100,100,50,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks after your Farming tools.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "323,326,325", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brawler", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7559", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks after your Farming tools.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Lostme", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7560", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks after your Farming tools.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Chiercat", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7561", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks after your Farming tools.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Skydischarge", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7562", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks after your Farming tools.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Agplus", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7563", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks after your Farming tools.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Distantthin", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7564", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks after your Farming tools.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Allmarshes", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7565", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks after your Farming tools.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Explosive67", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7566", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks after your Farming tools.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Alpha1beta", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7569", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Enjoys locking up animals in small pens.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Solltalk", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7570", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Enjoys locking up animals in small pens.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Hm Val", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7571", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks like the type of guy who would mind monkeys.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Wizzydumped", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7572", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks like the type of guy who would mind monkeys.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Oddskater", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7573", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Poledragon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "408,410,409", - "strength_level": "1", - "id": "7580", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He likes inflicting pain.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Al Truism", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7582", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The Don of penguins.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ohhhhdude", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7583", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A penguin pushing paper", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "845,848,846", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Torcher", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7585", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A penguin pushing paper", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "845,848,846", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Torcher", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7586", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He's a little rough around the edges.", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "766,768,767", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Shifter", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7593", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He has unbelievable strength!", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Banker", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7605", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "7606", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "7607", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "7608", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "attack_speed": "6", - "id": "7609", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "7614", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "7615", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "7616", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "attack_speed": "6", - "id": "7617", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "7618", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "7619", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "7620", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "attack_speed": "6", - "id": "7621", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "7626", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "7627", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "7628", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "attack_speed": "6", - "id": "7629", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "7631", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "7632", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "7634", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "7635", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "Ew it's still alive.", - "melee_animation": "9125", - "range_animation": "9125", - "attack_speed": "5", - "respawn_delay": "20", - "defence_animation": "9127", - "weakness": "9", - "magic_animation": "9125", - "death_animation": "9126", - "name": "Skeletal hand", - "defence_level": "85", - "safespot": null, - "lifepoints": "90", - "strength_level": "85", - "id": "7640", - "aggressive": "true", - "bonuses": "15,15,15,15,15,15,15,15,15,15,15,15,15,15,15", - "range_level": "1", - "attack_level": "85" - }, - { - "examine": "Ew it's still alive.", - "melee_animation": "9125", - "range_animation": "9125", - "attack_speed": "5", - "respawn_delay": "20", - "defence_animation": "9127", - "weakness": "9", - "magic_animation": "9125", - "death_animation": "9126", - "name": "Zombie hand", - "defence_level": "75", - "safespot": null, - "lifepoints": "90", - "strength_level": "75", - "id": "7641", - "aggressive": "true", - "bonuses": "15,15,15,15,15,15,15,15,15,15,15,15,15,15,15", - "range_level": "1", - "attack_level": "75" - }, - { - "examine": "A bloodveld with a very mixed heritage.", - "melee_animation": "9102", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "206", - "magic_animation": "0", - "death_animation": "9131", - "name": "Mutated bloodveld", - "defence_level": "56", - "safespot": null, - "lifepoints": "112", - "strength_level": "56", - "id": "7642", - "aggressive": "true", - "range_level": "1", - "attack_level": "56" - }, - { - "examine": "A bloodveld with a very mixed heritage.", - "melee_animation": "9102", - "range_animation": "0", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "slayer_exp": "206", - "magic_animation": "0", - "death_animation": "9131", - "name": "Mutated bloodveld", - "defence_level": "58", - "safespot": null, - "lifepoints": "116", - "strength_level": "58", - "id": "7643", - "aggressive": "true", - "range_level": "1", - "attack_level": "58" - }, - { - "name": "Zaromark Sliver", - "defence_level": "1", - "safespot": null, - "lifepoints": "88", - "strength_level": "1", - "id": "7644", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Zaromark Sliver", - "defence_level": "1", - "safespot": null, - "lifepoints": "88", - "strength_level": "1", - "id": "7645", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Zaromark Sliver", - "defence_level": "1", - "safespot": null, - "lifepoints": "88", - "strength_level": "1", - "id": "7646", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Zaromark Sliver", - "defence_level": "1", - "safespot": null, - "lifepoints": "88", - "strength_level": "1", - "id": "7647", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Zaromark Sliver", - "defence_level": "1", - "safespot": null, - "lifepoints": "88", - "strength_level": "1", - "id": "7648", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Zaromark Sliver", - "defence_level": "1", - "safespot": null, - "lifepoints": "88", - "strength_level": "1", - "id": "7649", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Zaromark Sliver", - "defence_level": "1", - "safespot": null, - "lifepoints": "88", - "strength_level": "1", - "id": "7650", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Zaromark Sliver", - "defence_level": "1", - "safespot": null, - "lifepoints": "88", - "strength_level": "1", - "id": "7651", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Fistandantilus", - "defence_level": "1", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "7654", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Fistandantilus", - "defence_level": "1", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "7655", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Fistandantilus", - "defence_level": "1", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "7656", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Fistandantilus", - "defence_level": "1", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "7657", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Fistandantilus", - "defence_level": "1", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "7658", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Fistandantilus", - "defence_level": "1", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "7659", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Fistandantilus", - "defence_level": "1", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "7660", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Fistandantilus", - "defence_level": "1", - "safespot": null, - "lifepoints": "65", - "strength_level": "1", - "id": "7661", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "7682", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "7683", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "7691", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "7692", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "7693", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "7694", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "7695", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "7696", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "7697", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "7698", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "7699", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "7700", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "7701", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "attack_speed": "6", - "id": "7702", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "95", - "strength_level": "1", - "attack_speed": "6", - "id": "7703", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "105", - "strength_level": "1", - "attack_speed": "6", - "id": "7704", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "attack_speed": "6", - "id": "7705", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "name": "Vyrewatch", - "defence_level": "1", - "safespot": null, - "lifepoints": "130", - "strength_level": "1", - "attack_speed": "6", - "id": "7706", - "aggressive": "true", - "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" - }, - { - "examine": "Looks like a big ugly dog.", - "melee_animation": "6565", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "6564", - "name": "Temple guardian", - "defence_level": "24", - "safespot": null, - "lifepoints": "34", - "strength_level": "24", - "id": "7711", - "range_level": "1", - "attack_level": "24" - }, - { - "melee_animation": "8080", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "8084", - "death_animation": "8078", - "name": "Baby icefiend", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "7713", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A small ice demon.", - "melee_animation": "8080", - "range_animation": "0", - "combat_audio": "531,533,532", - "attack_speed": "5", - "magic_level": "25", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "8078", - "name": "Icefiend", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "1", - "id": "7714", - "aggressive": "true", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The icefiend seems to be melting.", - "melee_animation": "8080", - "range_animation": "0", - "combat_audio": "531,533,532", - "attack_speed": "5", - "magic_level": "25", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "8078", - "name": "Icefiend", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "1", - "id": "7715", - "aggressive": "true", - "clue_level": "0", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "The icefiend seems to be melting.", - "melee_animation": "8080", - "range_animation": "0", - "attack_speed": "5", - "magic_level": "25", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "8078", - "name": "null", - "defence_level": "25", - "safespot": null, - "lifepoints": "35", - "strength_level": "1", - "id": "7716", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A holy man.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "511,513,512", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Monk", - "defence_level": "12", - "safespot": null, - "lifepoints": "17", - "strength_level": "12", - "id": "7727", - "range_level": "1", - "attack_level": "12" - }, - { - "melee_animation": "8080", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "8084", - "death_animation": "8078", - "name": "Baby icefiend", - "defence_level": "1", - "safespot": null, - "lifepoints": "50", - "strength_level": "1", - "id": "7736", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Is it full of rats?", - "melee_animation": "0", - "range_animation": "0", - "combat_audio": "703,705,704", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Jiggling crate", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7740", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A warrior who has been long forgotten.", - "range_animation": "0", - "magic_level": "25", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Three little kittens", - "defence_level": "25", - "safespot": null, - "lifepoints": "5", - "strength_level": "30", - "id": "7741", - "aggressive": "true", - "range_level": "25", - "attack_level": "30" - }, - { - "examine": "It looks upset.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "TzHaar-Xil-Tog", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7747", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A TzHaar librarian.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "TzHaar-Mej-Lor", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7752", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A TzHaar-Hur stamping stone tablets.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Library assistant", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7756", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Looks like a craftsman of some kind.", - "melee_animation": "9286", - "range_animation": "9286", - "attack_speed": "5", - "magic_level": "50", - "defence_animation": "9287", - "magic_animation": "9286", - "death_animation": "9288", - "name": "TzHaar-Hur", - "defence_level": "50", - "safespot": null, - "lifepoints": "80", - "strength_level": "50", - "id": "7767", - "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "Looks like a craftsman of some kind.", - "melee_animation": "9286", - "range_animation": "9286", - "attack_speed": "5", - "magic_level": "50", - "defence_animation": "9287", - "magic_animation": "9286", - "death_animation": "9288", - "name": "TzHaar-Hur", - "defence_level": "50", - "safespot": null, - "lifepoints": "80", - "strength_level": "50", - "id": "7768", - "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "Looks like a craftsman of some kind.", - "melee_animation": "9286", - "range_animation": "9286", - "attack_speed": "5", - "magic_level": "50", - "defence_animation": "9287", - "magic_animation": "9286", - "death_animation": "9288", - "name": "TzHaar-Hur", - "defence_level": "50", - "safespot": null, - "lifepoints": "80", - "strength_level": "50", - "id": "7769", - "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "A monster made of magma.", - "combat_style": "1", - "melee_animation": "9337", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "9340", - "name": "Lava monster", - "defence_level": "38", - "safespot": null, - "lifepoints": "54", - "strength_level": "28", - "id": "7772", - "aggressive": "true", - "range_level": "38", - "attack_level": "28" - }, - { - "examine": "A monster like many others", - "combat_style": "2", - "melee_animation": "9341", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "0", - "magic_animation": "0", - "death_animation": "9344", - "name": "Fire monster", - "defence_level": "38", - "safespot": null, - "lifepoints": "54", - "strength_level": "28", - "id": "7773", - "aggressive": "true", - "range_level": "38", - "attack_level": "28" - }, - { - "examine": "Not the best of vocalists.", - "combat_style": "1", - "melee_animation": "9449", - "range_animation": "9382", - "combat_audio": "284,286,285", - "magic_level": "65", - "respawn_delay": "60", - "defence_animation": "9451", - "weakness": "0", - "magic_animation": "9382", - "death_animation": "9450", - "name": "Mighty banshee", - "defence_level": "65", - "safespot": null, - "lifepoints": "85", - "strength_level": "65", - "id": "7786", - "aggressive": "true", - "range_level": "0", - "attack_level": "65" - }, - { - "examine": "A big, scary hand! ", - "melee_animation": "1802", - "attack_speed": "6", - "respawn_delay": "0", - "defence_animation": "1803", - "slayer_exp": "105", - "death_animation": "1804", - "name": "Wall Beast", - "defence_level": "38", - "movement_radius": "0", - "safespot": null, - "lifepoints": "105", - "strength_level": "38", - "id": "7823", - "aggressive": "true", - "range_level": "1", - "attack_level": "38" - }, - { - "examine": "A melee training dummy", - "melee_animation": "94", - "range_animation": "0", - "attack_speed": "6", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "97", - "name": "Melee dummy", - "defence_level": "1", - "safespot": null, - "lifepoints": "15", - "strength_level": "1", - "id": "7891", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A man of his craft.", - "name": "Smelting Tutor", - "defence_level": "1", - "movement_radius": "5", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7958", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A master of his craft.", - "name": "Smelting Tutor", - "defence_level": "1", - "movement_radius": "5", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7959", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He looks like a professional explorer.", - "name": "Explorer Jack", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7969", - "range_level": "1", - "attack_level": "1" - }, - { - "agg_radius": "64", - "examine": "A vision of supernatural horror.", - "melee_animation": "10058", - "attack_speed": "6", - "magic_level": "350", - "respawn_delay": "80", - "defence_animation": "10386", - "magic_animation": "10053", - "death_animation": "10385", - "name": "Corporeal Beast", - "defence_level": "310", - "poison_immune": "true", - "movement_radius": "64", - "safespot": null, - "lifepoints": "2000", - "strength_level": "320", - "id": "8133", - "aggressive": "true", - "bonuses": "50,50,50,0,0,25,200,100,150,230,0,0,0,0,0", - "range_level": "150", - "attack_level": "320" - }, - { - "examine": "He sure looks grave.", - "melee_animation": "5571", - "combat_audio": "931,923,922", - "attack_speed": "6", - "respawn_delay": "35", - "defence_animation": "5574", - "slayer_exp": "30", - "death_animation": "5575", - "name": "Armoured zombie", - "defence_level": "50", - "safespot": null, - "lifepoints": "62", - "strength_level": "50", - "id": "8149", - "aggressive": "true", - "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "This is a rotten one.", - "melee_animation": "5571", - "combat_audio": "931,923,922", - "attack_speed": "6", - "respawn_delay": "35", - "defence_animation": "5574", - "slayer_exp": "30", - "death_animation": "5575", - "name": "Armoured zombie", - "defence_level": "50", - "safespot": null, - "lifepoints": "62", - "strength_level": "50", - "id": "8150", - "aggressive": "true", - "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "It hasn't quite gotten around to dying.", - "melee_animation": "5571", - "combat_audio": "931,923,922", - "attack_speed": "6", - "respawn_delay": "35", - "defence_animation": "5574", - "slayer_exp": "30", - "death_animation": "5575", - "name": "Armoured zombie", - "defence_level": "50", - "safespot": null, - "lifepoints": "62", - "strength_level": "50", - "id": "8151", - "aggressive": "true", - "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", - "range_level": "50", - "attack_level": "50" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "2", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "0", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8349", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "2", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "2", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8350", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "2", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "1", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8351", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "1", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "0", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8352", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "1", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "2", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8353", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "1", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "1", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8354", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "0", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "0", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8355", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "0", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "2", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8356", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "0", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "1", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8357", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "2", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "0", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8358", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "2", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "2", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8359", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "2", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "1", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8360", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "1", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "0", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8361", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "1", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "2", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8362", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "1", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "1", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8363", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "0", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "0", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8364", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "0", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "2", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8365", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", - "combat_style": "0", - "melee_animation": "10922", - "range_animation": "10919", - "attack_speed": "6", - "magic_level": "85", - "protect_style": "1", - "respawn_delay": "100", - "defence_animation": "10923", - "slayer_exp": "136", - "magic_animation": "10918", - "death_animation": "10924", - "name": "Tormented demon", - "defence_level": "85", - "poison_immune": "true", - "safespot": "true", - "movement_radius": "40", - "lifepoints": "326", - "strength_level": "85", - "id": "8366", - "aggressive": "true", - "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", - "range_level": "85", - "attack_level": "85" - }, - { - "examine": "Flappy bird.", - "name": "Gull", - "water_npc": "true", - "id": "1179" - }, - { - "examine": "Flappy bird.", - "name": "Gull", - "water_npc": "true", - "id": "450" - }, - { - "examine": "Flappy bird.", - "name": "Gull", - "water_npc": "true", - "id": "451" - }, - { - "examine": "Tough-looking combat type.", - "name": "Mubariz", - "id": "957" - }, - { - "examine": "Looks kinda bored.", - "name": "Fadli", - "id": "958" - }, - { - "examine": "Trained to deal with all sorts of injuries.", - "name": "A'abla", - "id": "959" - }, - { - "examine": "Wow! She's made a statement with that hair!", - "name": "Sabreen", - "id": "960" - }, - { - "examine": "Has the messy job of putting players back together again.", - "name": "Jaraah", - "id": "962" - }, - { - "examine": "Battle-scarred.", - "name": "Zahwa", - "id": "963" - }, - { - "examine": "A citizen of Al Kharid", - "name": "Ima", - "id": "964" - }, - { - "examine": "A citizen of Al Kharid", - "name": "Sabeil", - "id": "965" - }, - { - "examine": "A citizen of Al Kharid", - "name": "Jadid", - "id": "966" - }, - { - "examine": "A citizen of Al Kharid", - "name": "Dalal", - "id": "967" - }, - { - "examine": "A citizen of Al Kharid", - "name": "Afrah", - "id": "968" - }, - { - "examine": "A citizen of Al Kharid", - "name": "Jeed", - "id": "969" - }, - { - "examine": "He smells funny.", - "name": "Diango", - "id": "970" - }, - { - "examine": "Shopkeeper.", - "name": "Chadwell", - "id": "971" - }, - { - "examine": "The cave guide.", - "name": "Koftik", - "id": "972" - }, - { - "examine": "The cave guide.", - "name": "Koftik", - "id": "973" - }, - { - "examine": "The cave guide.", - "name": "Koftik", - "id": "974" - }, - { - "examine": "The cave guide.", - "name": "Koftik", - "id": "975" - }, - { - "examine": "The cave guide.", - "name": "Koftik", - "id": "976" - }, - { - "examine": "This dwarf looks intoxicated.", - "name": "Kamen", - "id": "996" - }, - { - "examine": "A dwarven maker of gauntlets.", - "name": "Klank", - "id": "995" - }, - { - "examine": "One of King Tyras's men.", - "name": "Tyras guard", - "id": "1206" - }, - { - "examine": "The cave guide.", - "name": "Koftik", - "id": "1209" - }, - { - "examine": "One of King Lathas' messengers.", - "name": "Kings messenger", - "id": "1210" - }, - { - "examine": "Mysterious swamp lights...", - "name": "Will o' the wisp", - "id": "1212" - }, - { - "examine": "He's washing his clothes in the lake.", - "name": "Tegid", - "id": "1213" - }, - { - "examine": "A plant.", - "name": "Thistle", - "id": "1214" - }, - { - "examine": "What a colourful bunch of parrots!", - "name": "Parrots", - "id": "1215" - }, - { - "examine": "Rather dense and soppy looking.", - "name": "Romeo", - "id": "639" - }, - { - "examine": "Newspaper seller.", - "name": "Benny", - "id": "5925" - }, - { - "examine": "One of Gertrude's Sons.", - "name": "Wilough", - "id": "783" - }, - { - "examine": "An old gypsy lady.", - "name": "Gypsy Aris", - "id": "882" - }, - { - "examine": "Interesting assortment of clothes on offer...", - "name": "Thessalia", - "id": "548" - }, - { - "examine": "Sells superior staffs.", - "name": "Zaff", - "id": "546" - }, - { - "examine": "A retired vampyre hunter.", - "name": "Dr Harlow", - "id": "756" - }, - { - "examine": "I could get a beer from him.", - "name": "Bartender", - "id": "733" - }, - { - "examine": "Director of the Grand Exchange.", - "id": "6522" - }, - { - "examine": "He can look after my money. Good with money.", - "id": "6535" - }, - { - "examine": "She can look after my money. Good with money.", - "id": "6532" - }, - { - "examine": "There to help me make my bids.", - "id": "6530" - }, - { - "examine": "There to help me make my bids.", - "id": "6528" - }, - { - "examine": "He can look after my money. Good with money.", - "id": "6534" - }, - { - "examine": "She can look after my money. Good with money.", - "id": "6533" - }, - { - "examine": "There to help me make my bids.", - "id": "6531" - }, - { - "examine": "There to help me make my bids.", - "id": "6529" - }, - { - "examine": "She looks very worried about something.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Caroline", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "696", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A very good sailor.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Holgart", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "698", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Smells a bit fishy.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Ezekial Lovecraft", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4856", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A (semi) retired member of the Temple Knights.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Col. O'Niall", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4872", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "There's something fishy about him.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Mayor Hobb", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4874", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A fresh-faced and innocent priest.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Brother Maledict", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4878", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A down on his luck fisherman.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Witchaven villager", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4883", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A down on her luck fisherman.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Witchaven villager", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4885", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A down on his luck fisherman.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Witchaven villager", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4887", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A villager named Jeb.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Jeb", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "4895", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A little girl. She looks terrified.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Kimberly", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7168", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Stinky! Poor guy.", - "name": "Yeti", - "id": "130" - }, - { - "examine": "A regal cat with an evil glint in its eye.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,513,512", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "HRH Hrafn", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5479", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Harder than the rocks he sells.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,513,512", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Hring Hring", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5483", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Jatizso's fishmonger.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,513,512", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Flossi Dalksson", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5484", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A guy that will sell you armour.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,513,512", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Raum Urda-Stein", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5485", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Jatizso's armour merchant.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,513,512", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Skuli Myrka", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5486", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A rough-looking chef.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,513,512", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Keepa Kettilon", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5487", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Jatizso's many citizens.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,513,512", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Freygerd", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5493", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Jatizso's many citizens.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,513,512", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Lensa", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5494", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A happy, friendly landlady.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,513,512", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Vanligga Gastfrihet", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5495", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Jatizso's many citizens.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,513,512", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Sassilik", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5496", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A bedraggled-looking tramp.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,513,512", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Eric", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5499", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Mina guards the mine entrance.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,513,512", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Gruva Patrull", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5500", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A dwarven trader from Keldagrim.", - "melee_animation": "422", - "range_animation": "422", - "combat_audio": "511,513,512", - "defence_animation": "404", - "magic_animation": "422", - "death_animation": "9055", - "name": "Brendt", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "5501", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A hungry-looking rabbit.", - "melee_animation": "0", - "range_animation": "0", - "respawn_delay": "50", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Rabbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7126", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A gnome farmer.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Farmer", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7129", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of the Burgher's Protectors", - "death_animation": "836", - "name": "Honour Guard", - "melee_animation": "395", - "id": "5515", - "defence_animation": "404" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5485", - "range_animation": "5485", - "combat_audio": "774,775,777", - "attack_speed": "4", - "respawn_delay": "70", - "defence_animation": "5489", - "weakness": "8", - "slayer_exp": "29", - "magic_animation": "5485", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "17", - "safespot": null, - "lifepoints": "29", - "strength_level": "18", - "id": "90", - "range_level": "1", - "attack_level": "15" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5485", - "range_animation": "5485", - "combat_audio": "774,775,777", - "attack_speed": "4", - "defence_animation": "5489", - "weakness": "8", - "slayer_exp": "24", - "magic_animation": "5485", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "17", - "safespot": null, - "lifepoints": "24", - "strength_level": "17", - "id": "91", - "range_level": "1", - "attack_level": "17" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5485", - "range_animation": "5485", - "combat_audio": "774,775,777", - "attack_speed": "4", - "defence_animation": "5489", - "weakness": "8", - "slayer_exp": "17", - "magic_animation": "5485", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "24", - "safespot": null, - "lifepoints": "17", - "strength_level": "24", - "id": "92", - "range_level": "1", - "attack_level": "24" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5485", - "range_animation": "5485", - "combat_audio": "774,775,777", - "attack_speed": "4", - "defence_animation": "5489", - "weakness": "8", - "slayer_exp": "59", - "magic_animation": "5485", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "36", - "safespot": null, - "lifepoints": "59", - "strength_level": "35", - "id": "93", - "range_level": "1", - "attack_level": "32" - }, - { - "examine": "Rogueish.", - "melee_animation": "386", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Rogue", - "defence_level": "7", - "safespot": null, - "lifepoints": "10", - "strength_level": "7", - "aggressive": "false", - "id": "187", - "range_level": "1", - "attack_level": "7" - }, - { - "examine": "It rattles when it moves.", - "combat_style": "2", - "melee_animation": "5485", - "range_animation": "5485", - "combat_audio": "774,775,777", - "magic_level": "5", - "respawn_delay": "60", - "defence_animation": "5489", - "weakness": "3", - "magic_animation": "5485", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "5", - "safespot": null, - "lifepoints": "14", - "strength_level": "3", - "id": "459", - "aggressive": "true", - "range_level": "1", - "attack_level": "3" - }, - { - "examine": "It looks just a bit... underfed.", - "melee_animation": "5519", - "range_animation": "5519", - "combat_audio": "774,775,777", - "attack_speed": "4", - "magic_level": "110", - "respawn_delay": "100", - "defence_animation": "5520", - "weakness": "8", - "slayer_exp": "110", - "magic_animation": "5519", - "death_animation": "5521", - "name": "Skeleton", - "defence_level": "110", - "safespot": null, - "lifepoints": "77", - "strength_level": "90", - "id": "1471", - "aggressive": "true", - "bonuses": "50,50,50,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "180" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5487", - "range_animation": "5487", - "combat_audio": "774,775,777", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "5513", - "weakness": "8", - "magic_animation": "5487", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "72", - "safespot": null, - "lifepoints": "51", - "strength_level": "72", - "id": "2036", - "aggressive": "true", - "bonuses": "0,0,0,0,0,5,5,-5,0,5,0,0,0,0,0", - "range_level": "1", - "attack_level": "72" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5487", - "range_animation": "5487", - "combat_audio": "774,775,777", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "20", - "defence_animation": "5513", - "weakness": "8", - "magic_animation": "5487", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "72", - "safespot": null, - "lifepoints": "51", - "strength_level": "72", - "id": "2037", - "aggressive": "true", - "bonuses": "0,0,0,0,0,5,5,-5,0,5,0,0,0,0,0", - "range_level": "1", - "attack_level": "72" - }, - { - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "774,775,777", - "strength_level": "1", - "id": "2715", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Skeleton mage", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "774,775,777", - "strength_level": "1", - "id": "2717", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "774,775,777", - "strength_level": "1", - "id": "3151", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "One of Gielinor's many citizens, currently incapacitated by alcohol.", - "melee_animation": "422", - "range_animation": "0", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "death_animation": "836", - "name": "Drunken man", - "defence_level": "4", - "safespot": null, - "lifepoints": "5", - "strength_level": "4", - "id": "3222", - "range_level": "1", - "attack_level": "4" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5485", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "8", - "safespot": null, - "lifepoints": "11", - "strength_level": "8", - "id": "3291", - "aggressive": "true", - "range_level": "1", - "attack_level": "8" - }, - { - "examine": "He guards the dungeon with the faithfulness of the undead.", - "melee_animation": "5487", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "70", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "17", - "safespot": null, - "lifepoints": "29", - "strength_level": "18", - "id": "3581", - "aggressive": "true", - "range_level": "1", - "attack_level": "15" - }, - { - "examine": "Could use a good meal.", - "melee_animation": "6128", - "range_animation": "0", - "combat_audio": "774,775,777", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Skeleton fremennik", - "defence_level": "17", - "safespot": null, - "lifepoints": "24", - "strength_level": "17", - "id": "3697", - "range_level": "1", - "attack_level": "17" - }, - { - "melee_animation": "400", - "combat_audio": "774,775,777", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Skeleton fremennik", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "3698", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "400", - "combat_audio": "774,775,777", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Skeleton fremennik", - "defence_level": "1", - "safespot": null, - "lifepoints": "25", - "strength_level": "1", - "id": "3699", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He seems a little underweight.", - "melee_animation": "6128", - "range_animation": "0", - "combat_audio": "774,775,777", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Skeleton fremennik", - "defence_level": "20", - "safespot": null, - "lifepoints": "28", - "strength_level": "20", - "id": "3700", - "range_level": "1", - "attack_level": "20" - }, - { - "examine": "He seems a little underweight.", - "melee_animation": "6128", - "range_animation": "0", - "combat_audio": "774,775,777", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Skeleton fremennik", - "defence_level": "20", - "safespot": null, - "lifepoints": "28", - "strength_level": "20", - "id": "3701", - "range_level": "1", - "attack_level": "20" - }, - { - "melee_animation": "395", - "combat_audio": "774,775,777", - "respawn_delay": "60", - "defence_animation": "425", - "death_animation": "836", - "name": "Skeleton fremennik", - "defence_level": "1", - "safespot": null, - "lifepoints": "35", - "strength_level": "1", - "id": "3702", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "He seems a little underweight.", - "melee_animation": "6128", - "range_animation": "0", - "combat_audio": "774,775,777", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Skeleton fremennik", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "3703", - "range_level": "1", - "attack_level": "22" - }, - { - "examine": "He seems a little underweight.", - "melee_animation": "6128", - "range_animation": "0", - "combat_audio": "774,775,777", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "6", - "magic_animation": "0", - "death_animation": "836", - "name": "Skeleton fremennik", - "defence_level": "22", - "safespot": null, - "lifepoints": "31", - "strength_level": "22", - "id": "3704", - "range_level": "1", - "attack_level": "22" - }, - { - "name": "Skeleton fremennik", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "combat_audio": "774,775,777", - "melee_animation": "5485", - "strength_level": "1", - "id": "3705", - "range_level": "1", - "attack_level": "1" - }, - { - "combat_audio": "774,775,777", - "melee_animation": "5485", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5513", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "68", - "strength_level": "1", - "id": "4384", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5485", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "4385", - "aggressive": "true", - "range_level": "1", - "attack_level": "34" - }, - { - "combat_audio": "774,775,777", - "melee_animation": "5485", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5513", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "85", - "strength_level": "1", - "id": "4386", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "4388", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4384", - "death_animation": "4389", - "name": "Suqah", - "defence_level": "95", - "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "4532", - "aggressive": "true", - "clue_level": "2", - "bonuses": "0,0,0,0,0,50,70,70,90,50,0,0,0,0,0", - "range_level": "1", - "attack_level": "95" - }, - { - "examine": "Could do with gaining a few pounds.", - "combat_audio": "774,775,777", - "melee_animation": "5485", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "70", - "defence_animation": "5513", - "weakness": "8", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "17", - "safespot": null, - "lifepoints": "29", - "strength_level": "18", - "id": "5332", - "aggressive": "true", - "range_level": "1", - "attack_level": "15" - }, - { - "examine": "Could do with gaining a few pounds.", - "range_animation": "0", - "combat_audio": "774,775,777", - "melee_animation": "5485", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "70", - "defence_animation": "5513", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "17", - "safespot": null, - "lifepoints": "29", - "strength_level": "18", - "id": "5333", - "aggressive": "true", - "range_level": "1", - "attack_level": "15" - }, - { - "examine": "Could do with gaining a few pounds.", - "range_animation": "0", - "combat_audio": "774,775,777", - "melee_animation": "5485", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "70", - "defence_animation": "5513", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "17", - "safespot": null, - "lifepoints": "29", - "strength_level": "18", - "id": "5334", - "aggressive": "true", - "range_level": "1", - "attack_level": "15" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5485", - "range_animation": "5485", - "combat_audio": "774,775,777", - "attack_speed": "6", - "defence_animation": "5489", - "magic_animation": "5485", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "24", - "strength_level": "11", - "id": "5335", - "range_level": "1", - "attack_level": "11" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5485", - "range_animation": "5485", - "combat_audio": "774,775,777", - "attack_speed": "6", - "defence_animation": "5489", - "magic_animation": "5485", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "24", - "strength_level": "11", - "id": "5336", - "range_level": "1", - "attack_level": "11" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5485", - "range_animation": "5485", - "combat_audio": "774,775,777", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "60", - "defence_animation": "5489", - "weakness": "8", - "magic_animation": "5485", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "24", - "safespot": null, - "lifepoints": "17", - "strength_level": "24", - "id": "5337", - "aggressive": "true", - "range_level": "1", - "attack_level": "24" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5485", - "range_animation": "5485", - "combat_audio": "774,775,777", - "attack_speed": "6", - "defence_animation": "5489", - "weakness": "8", - "magic_animation": "5485", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "23", - "safespot": null, - "lifepoints": "17", - "strength_level": "12", - "id": "5338", - "range_level": "1", - "attack_level": "12" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5485", - "range_animation": "5485", - "combat_audio": "774,775,777", - "attack_speed": "6", - "defence_animation": "5489", - "weakness": "8", - "magic_animation": "5485", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "23", - "safespot": null, - "lifepoints": "17", - "strength_level": "12", - "id": "5339", - "range_level": "1", - "attack_level": "12" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5485", - "range_animation": "5485", - "combat_audio": "774,775,777", - "attack_speed": "6", - "defence_animation": "5489", - "weakness": "8", - "magic_animation": "5485", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "23", - "safespot": null, - "lifepoints": "17", - "strength_level": "12", - "id": "5340", - "range_level": "1", - "attack_level": "12" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5499", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5503", - "name": "Skeleton", - "defence_level": "42", - "safespot": null, - "lifepoints": "60", - "strength_level": "42", - "id": "5341", - "aggressive": "true", - "range_level": "1", - "attack_level": "42" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5485", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "7", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "34", - "safespot": null, - "lifepoints": "48", - "strength_level": "34", - "id": "5365", - "aggressive": "true", - "range_level": "1", - "attack_level": "34" - }, - { - "examine": "Could do with gaining a few pounds.", - "combat_audio": "774,775,777", - "melee_animation": "5485", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5513", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "60", - "strength_level": "1", - "id": "5366", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Could do with gaining a few pounds.", - "combat_audio": "774,775,777", - "melee_animation": "5485", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5513", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "85", - "strength_level": "1", - "id": "5367", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Could do with gaining a few pounds.", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5513", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "85", - "strength_level": "1", - "id": "5368", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5485", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "62", - "safespot": null, - "lifepoints": "88", - "strength_level": "62", - "id": "5381", - "aggressive": "true", - "range_level": "1", - "attack_level": "62" - }, - { - "examine": "A skeleton in a dress!", - "melee_animation": "5487", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "magic_level": "57", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "5", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "57", - "safespot": null, - "lifepoints": "81", - "strength_level": "1", - "id": "5385", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Achingly thin.", - "melee_animation": "5487", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "55", - "id": "5386", - "aggressive": "true", - "range_level": "1", - "attack_level": "55" - }, - { - "examine": "Look: another skeleton.", - "melee_animation": "5485", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "55", - "id": "5387", - "aggressive": "true", - "range_level": "1", - "attack_level": "55" - }, - { - "examine": "That skeleton's grinning at me.", - "melee_animation": "5487", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "50", - "safespot": null, - "lifepoints": "71", - "strength_level": "50", - "id": "5388", - "aggressive": "true", - "range_level": "1", - "attack_level": "50" - }, - { - "examine": "He needs a tan.", - "melee_animation": "5487", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "51", - "safespot": null, - "lifepoints": "72", - "strength_level": "51", - "id": "5389", - "aggressive": "true", - "range_level": "1", - "attack_level": "51" - }, - { - "examine": "How do you know if a skeleton's male or female?", - "melee_animation": "5485", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "30", - "safespot": null, - "lifepoints": "420", - "strength_level": "36", - "id": "5390", - "aggressive": "true", - "range_level": "1", - "attack_level": "36" - }, - { - "examine": "He obviously hasn't realised he's dead.", - "melee_animation": "5485", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "55", - "id": "5391", - "aggressive": "true", - "range_level": "1", - "attack_level": "55" - }, - { - "examine": "Put some meat on those bones!", - "melee_animation": "5485", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "52", - "safespot": null, - "lifepoints": "74", - "strength_level": "52", - "id": "5392", - "aggressive": "true", - "range_level": "1", - "attack_level": "52" - }, - { - "examine": "An angry skeleton.", - "melee_animation": "5487", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "55", - "safespot": null, - "lifepoints": "78", - "strength_level": "55", - "id": "5411", - "aggressive": "true", - "range_level": "1", - "attack_level": "55" - }, - { - "examine": "Cross bones.", - "melee_animation": "5485", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "57", - "safespot": null, - "lifepoints": "81", - "strength_level": "57", - "id": "5412", - "aggressive": "true", - "range_level": "1", - "attack_level": "57" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5485", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "63", - "safespot": null, - "lifepoints": "90", - "strength_level": "63", - "id": "5422", - "aggressive": "true", - "range_level": "1", - "attack_level": "63" - }, - { - "examine": "Ey.", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5513", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "6091", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Could do with gaining a few pounds.", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5513", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "22", - "strength_level": "1", - "id": "6092", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Could do with gaining a few pounds.", - "melee_animation": "5487", - "range_animation": "0", - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "9", - "safespot": null, - "lifepoints": "12", - "strength_level": "9", - "id": "6093", - "aggressive": "true", - "range_level": "1", - "attack_level": "9" - }, - { - "examine": "An opponent from the grave. He seems unimpressed by your bone rummaging.", - "melee_animation": "2067", - "range_animation": "0", - "combat_audio": "774,775,777", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Skeleton hero", - "defence_level": "53", - "safespot": null, - "lifepoints": "75", - "strength_level": "53", - "id": "6103", - "aggressive": "true", - "range_level": "1", - "attack_level": "53" - }, - { - "examine": "An ex-barbarian, willing to make you ex too.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "774,775,777", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Skeleton brute", - "defence_level": "63", - "safespot": null, - "lifepoints": "90", - "strength_level": "63", - "id": "6104", - "aggressive": "true", - "range_level": "1", - "attack_level": "63" - }, - { - "examine": "He's heartless.", - "melee_animation": "2067", - "range_animation": "0", - "combat_audio": "774,775,777", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Skeleton warlord", - "defence_level": "65", - "safespot": null, - "lifepoints": "92", - "strength_level": "65", - "id": "6105", - "aggressive": "true", - "range_level": "1", - "attack_level": "65" - }, - { - "examine": "He's less heavy now.", - "melee_animation": "390", - "range_animation": "0", - "combat_audio": "774,775,777", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Skeleton heavy", - "defence_level": "64", - "safespot": null, - "lifepoints": "91", - "strength_level": "64", - "id": "6106", - "aggressive": "true", - "range_level": "1", - "attack_level": "64" - }, - { - "examine": "Floats like an anvil, hits like a hammer.", - "melee_animation": "422", - "range_animation": "0", - "combat_audio": "774,775,777", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "8", - "magic_animation": "0", - "death_animation": "836", - "name": "Skeleton thug", - "defence_level": "61", - "safespot": null, - "lifepoints": "87", - "strength_level": "61", - "id": "6107", - "aggressive": "true", - "range_level": "1", - "attack_level": "61" - }, - { - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5513", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "97", - "strength_level": "1", - "id": "6764", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5513", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "108", - "strength_level": "1", - "id": "6765", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5513", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "120", - "strength_level": "1", - "id": "6766", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5513", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "115", - "strength_level": "1", - "id": "6767", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "combat_audio": "774,775,777", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "5513", - "death_animation": "5491", - "name": "Skeleton", - "defence_level": "1", - "safespot": null, - "lifepoints": "140", - "strength_level": "1", - "id": "6768", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A hungry-looking rabbit.", - "melee_animation": "0", - "range_animation": "0", - "respawn_delay": "50", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Rabbit", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "7127", - "aggressive": "true", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A rich landlord, fat and jolly.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Inn Keeper", - "defence_level": "1", - "safespot": null, - "lifepoints": "10", - "strength_level": "1", - "id": "2177", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Likes to cook with mushrooms.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Fairy chef", - "defence_level": "1", - "safespot": null, - "movement_radius": "2", - "lifepoints": "10", - "strength_level": "1", - "id": "3322", - "range_level": "1", - "attack_level": "1" - }, - { - "melee_animation": "4388", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4384", - "death_animation": "4389", - "name": "Suqah", - "defence_level": "95", - "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "4527", - "aggressive": "true", - "clue_level": "2", - "bonuses": "0,0,0,0,0,50,70,70,90,50,0,0,0,0,0", - "range_level": "1", - "attack_level": "95" - }, - { - "melee_animation": "4388", - "attack_speed": "5", - "respawn_delay": "60", - "defence_animation": "4384", - "death_animation": "4389", - "name": "Suqah", - "defence_level": "95", - "safespot": null, - "lifepoints": "105", - "strength_level": "95", - "id": "4528", - "aggressive": "true", - "clue_level": "2", - "bonuses": "0,0,0,0,0,50,70,70,90,50,0,0,0,0,0", - "range_level": "1", - "attack_level": "95" - }, - { - "examine": "A large ice troll.", - "melee_animation": "4332", - "range_animation": "0", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "0", - "weakness": "9", - "magic_animation": "0", - "name": "Ice troll grunt", - "defence_level": "60", - "safespot": null, - "lifepoints": "80", - "strength_level": "100", - "id": "5524", - "aggressive": "true", - "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", - "range_level": "1", - "attack_level": "100" - }, - { - "examine": "Soft but strong... and cute.", - "name": "Labrador puppy", - "id": "7247" - }, - { - "examine": "Soft but strong... and cute.", - "name": "Labrador puppy", - "id": "6962" - }, - { - "examine": "Soft but strong... and cute.", - "name": "Labrador puppy", - "id": "7245" - }, - { - "examine": "My most faithful friend.", - "name": "Labrador", - "id": "7248" - }, - { - "examine": "My most faithful friend.", - "name": "Labrador", - "id": "6963" - }, - { - "examine": "My most faithful friend.", - "name": "Labrador", - "id": "7246" - }, - { - "examine": "One proud little puppy.", - "name": "Bulldog puppy", - "id": "7260" - }, - { - "examine": "One proud little puppy.", - "name": "Bulldog puppy", - "id": "7259" - }, - { - "examine": "Looks like it's chewing a wasp.", - "name": "Bulldog", - "id": "6968" - }, - { - "examine": "Looks like it's chewing a wasp.", - "name": "Bulldog", - "id": "7258" - }, - { - "examine": "Looks like it's chewing a wasp.", - "name": "Bulldog", - "id": "7257" - }, - { - "examine": "Now, if only I could find another hundred...", - "name": "Dalmatian puppy", - "id": "6964" - }, - { - "examine": "Now, if only I could find another hundred...", - "name": "Dalmatian puppy", - "id": "7249" - }, - { - "examine": "Now, if only I could find another hundred...", - "name": "Dalmatian puppy", - "id": "7251" - }, - { - "examine": "A purebred doggy.", - "name": "Dalmatian", - "id": "7252" - }, - { - "examine": "A purebred doggy.", - "name": "Dalmatian", - "id": "7250" - }, - { - "examine": "A purebred doggy.", - "name": "Dalmatian", - "id": "6965" - }, - { - "examine": "This is one fast little pooch.", - "name": "Greyhound puppy", - "id": "6960" - }, - { - "examine": "This is one fast little pooch.", - "name": "Greyhound puppy", - "id": "7241" - }, - { - "examine": "This is one fast little pooch.", - "name": "Greyhound puppy", - "id": "7243" - }, - { - "examine": "An aerodynamic doggy.", - "name": "Greyhound", - "id": "6961" - }, - { - "examine": "An aerodynamic doggy.", - "name": "Greyhound", - "id": "7242" - }, - { - "examine": "An aerodynamic doggy.", - "name": "Greyhound", - "id": "7244" - }, - { - "examine": "It's lively and energetic.", - "name": "Terrier puppy", - "id": "6958" - }, - { - "examine": "A hyperactive little pup.", - "name": "Terrier puppy", - "id": "7237" - }, - { - "examine": "Such a brave doggy.", - "name": "Terrier puppy", - "id": "7239" - }, - { - "examine": "It's lively and energetic.", - "name": "Terrier", - "id": "6959" - }, - { - "examine": "A hyperactive little pup.", - "name": "Terrier", - "id": "7238" - }, - { - "examine": "Such a brave doggy.", - "name": "Terrier", - "id": "7240" - }, - { - "examine": "This little puppy is very quiet.", - "name": "Sheepdog puppy", - "id": "7253" - }, - { - "examine": "This little puppy is very quiet.", - "name": "Sheepdog puppy", - "id": "6966" - }, - { - "examine": "This little puppy is very quiet.", - "name": "Sheepdog puppy", - "id": "7255" - }, - { - "examine": "Come by! Come by!", - "name": "Sheepdog", - "id": "6967" - }, - { - "examine": "Come by! Come by!", - "name": "Sheepdog", - "id": "7254" - }, - { - "examine": "Come by! Come by!", - "name": "Sheepdog", - "id": "7256" - }, - { - "examine": "The sandwich lady.", - "name": "Sandwich lady", - "id": "3117" - }, - { - "examine": "A holy man.", - "name": "Drezel", - "id": "1049" - }, - { - "examine": "A holy man.", - "name": "Drezel", - "id": "7690" - }, - { - "examine": "A holy man.", - "name": "Drezel", - "id": "7707" - }, - { - "examine": "A slightly nervous guard.", - "name": "Ulizius", - "id": "1054" - }, - { - "examine": "A local holy man who supports the people trying to get though Mort Myre.", - "name": "Hiylik Myna", - "id": "1514" - }, - { - "examine": "The animated spirit of a soul not at rest.", - "name": "Filiman Tarlock", - "id": "1050" - }, - { - "examine": "The animated spirit of a soul not at rest.", - "name": "Nature Spirit", - "id": "1051" - }, - { - "examine": "I can see fish swimming in the water.", - "name": "Fishing spot", - "id": "323" - }, - { - "examine": "I can see fish swimming in the water.", - "name": "Fishing spot", - "id": "1176" - }, - { - "examine": "Nice hat.", - "name": "Thormac", - "id": "389" - }, - { - "examine": "An evil priest.", - "name": "Necrovarus", - "id": "1684" - }, - { - "examine": "He looks dangerous.", - "name": "Vannaka", - "id": "1597" - }, - { - "examine": "A soggy, smelly Fremennik.", - "name": "Olaf Hardson", - "id": "2621" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Elstan", - "id": "2323" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Dantaera", - "id": "2324" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Kragen", - "id": "2325" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Lyra", - "id": "2326" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Francis", - "id": "2327" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Rhonen", - "id": "2334" - }, - { - "examine": "Banks gnomish things.", - "name": "Gnome banker", - "id": "166" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Ellena", - "id": "2331" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Alain", - "id": "2339" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Dreven", - "id": "2335" - }, - { - "examine": "Founder and Director of the Piscatoris Fishing Colony.", - "name": "Herman Caranos", - "id": "3822" - }, - { - "examine": "Engineer for the Piscatoris Fishing Colony.", - "name": "Franklin Caranos", - "id": "3823" - }, - { - "examine": "Secretary and Storemaster for the Piscatoris Fishing Colony.", - "name": "Arnold Lydspor", - "id": "3824" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Frizzy Skernip", - "id": "4560" - }, - { - "examine": "She sells farming equipment.", - "name": "Sarah", - "id": "2304" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Garth", - "id": "2330" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Selena", - "id": "2332" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Rhazien", - "id": "2337" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Torrell", - "id": "2338" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Heskel", - "id": "2340" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Treznor", - "id": "2341" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Bolongo", - "id": "2343" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Gileth", - "id": "2344" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Amaethwyr", - "id": "2860" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Praistan Ebola", - "id": "4562" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Imiago", - "id": "8041" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Prissy Scilla", - "id": "1037" - }, - { - "examine": "Looks after your Farming tools.", - "name": "Teclyn", - "id": "2861" - }, - { - "examine": "Perhaps this gardener might look after your crops for you.", - "name": "Yulf Squecks", - "id": "4561" - }, - { - "examine": "The head farmer, apparently.", - "name": "Farmer Blinkin", - "id": "7131" - }, - { - "examine": "The lady of the pet shop.", - "name": "Pet shop owner", - "id": "6750" - }, - { - "examine": "Looks after the Burthorpe vinery.", - "name": "Bernald", - "id": "2580" - }, - { - "examine": "An old druid.", - "name": "Sanfew", - "id": "454" - }, - { - "examine": "He runs the Herblore Shop.", - "name": "Jatix", - "id": "587" - }, - { - "examine": "A wise druid.", - "name": "Kaqemeex", - "id": "455" - }, - { - "examine": "He's a very important druid.", - "name": "Pikkupstix", - "id": "6971" - }, - { - "examine": "Ironically, makes a living from swords.", - "name": "Gaius", - "id": "586" - }, - { - "examine": "A gnarly old man.", - "name": "Sylas", - "id": "5987" - }, - { - "examine": "A terrier puppy.", - "name": "Terrier", - "id": "6894" - }, - { - "examine": "A labrador puppy.", - "name": "Labrador", - "id": "6895" - }, - { - "examine": "Dwarvish.", - "name": "Thurgo", - "id": "604" - }, - { - "examine": "Get useful information from this guy.", - "name": "Town crier", - "id": "6137" - }, - { - "examine": "The mace salesman.", - "name": "Flynn", - "id": "580" - }, - { - "examine": "Works in the Rising Sun.", - "name": "Kaylee", - "id": "3217" - }, - { - "examine": "Works in the Rising Sun.", - "name": "Emily", - "id": "736" - }, - { - "examine": "Nice eyes.", - "name": "Cassie", - "id": "577" - }, - { - "examine": "Chief Herald of Falador.", - "name": "Sir Renitee", - "id": "4249" - }, - { - "examine": "An elderly White Knight.", - "name": "Sir Vyvin", - "id": "605" - }, - { - "examine": "An armourer.", - "name": "Wayne", - "id": "581" - }, - { - "examine": "A master of necromancy!", - "name": "Malignius Mortifer", - "id": "2713" - }, - { - "examine": "She seems like a nice sort of person.", - "name": "Betty", - "id": "583" - }, - { - "examine": "Loves his gold!", - "name": "Grum", - "id": "556" - }, - { - "examine": "Unkempt and a bit smelly.", - "name": "Bellemorde", - "id": "2942" - }, - { - "examine": "A Fishing expert.", - "name": "Gerrant", - "id": "558" - }, - { - "examine": "Likes his food to be kept fresh.", - "name": "Wydin", - "id": "557" - }, - { - "examine": "A sea bird.", - "name": "Gull", - "water_npc": "true", - "id": "2726" - }, - { - "examine": "An old sea dog.", - "name": "Captain Tobias", - "id": "376" - }, - { - "examine": "A young sailor.", - "name": "Klarense", - "id": "744" - }, - { - "examine": "An expert on axes.", - "name": "Brian", - "id": "559" - }, - { - "examine": "I could get a beer from him.", - "name": "Bartender", - "id": "734" - }, - { - "examine": "She is a seed merchant.", - "name": "Olivia", - "id": "2572" - }, - { - "examine": "Get useful information from this guy.", - "name": "Town crier", - "id": "6136" - }, - { - "examine": "Looks like he could do with a sip of Amontillado.", - "name": "Fortunato", - "id": "3671" - }, - { - "examine": "A young sailor.", - "name": "Seaman Thresnor", - "id": "378" - }, - { - "examine": "A young sailor.", - "name": "Seaman Lorris", - "id": "377" - }, - { - "examine": "A venerable and rich sage.", - "name": "Wise Old Man", - "id": "2253" - }, - { - "examine": "She comes from Al-Kharid.", - "name": "Leela", - "id": "915" - }, - { - "examine": "An old sailor.", - "name": "Ned", - "id": "743" - }, - { - "examine": "He looks scared.", - "name": "Morgan", - "id": "755" - }, - { - "examine": "A witch.", - "name": "Aggie", - "id": "922" - }, - { - "examine": "Bacon-in-training.", - "name": "Piglet", - "id": "2243" - }, - { - "examine": "An infamous bandit.", - "name": "Lady Keli", - "id": "919" - }, - { - "examine": "A young prince.", - "name": "Prince Ali", - "id": "920" - }, - { - "examine": "A gnome mage on sabbatical.", - "name": "Professor Onglewip", - "id": "4585" - }, - { - "examine": "Chief of research at Wizards Tower.", - "name": "Sedridor", - "id": "300" - }, - { - "examine": "An old wizard.", - "name": "Traiborn", - "id": "881" - }, - { - "examine": "Master of imps.", - "name": "Wizard Grayzag", - "id": "707" - }, - { - "examine": "A very brave merchant.", - "name": "Edmond", - "id": "1785" - }, - { - "examine": "She's an expert on armoured skirts.", - "name": "Ranael", - "id": "544" - }, - { - "examine": "Spymaster of Al Kharid.", - "name": "Osman", - "id": "924" - }, - { - "examine": "Kebabs are full of meaty goodness!", - "name": "Karim", - "id": "543" - }, - { - "examine": "He can look after my money.", - "name": "Banker", - "id": "496" - }, - { - "examine": "She can look after my money.", - "name": "Banker", - "id": "497" - }, - { - "examine": "Manufacturer of fine leathers.", - "name": "Ellis", - "id": "2824" - }, - { - "examine": "Sells superior scimitars.", - "name": "Zeke", - "id": "541" - }, - { - "examine": "If Crafting's your thing, he's your man.", - "name": "Dommik", - "id": "545" - }, - { - "examine": "He's in control of the Shantay Pass.", - "name": "Shantay", - "id": "836" - }, - { - "examine": "A resident of Al Kharid.", - "name": "Irena", - "id": "835" - }, - { - "examine": "A farmer's enemy.", - "name": "Crow", - "id": "1755" - }, - { - "examine": "The hat's a dead giveaway.", - "name": "Witch", - "id": "5200" - }, - { - "examine": "A mad scientist if I ever saw one!", - "name": "Professor Oddenstein", - "id": "286" - }, - { - "examine": "She's watching you.", - "name": "Ava", - "id": "5198" - }, - { - "examine": "Litara, a barbarian explorer.", - "name": "Litara", - "id": "4376" - }, - { - "examine": "Always up-to-date with the latest helmet fashions.", - "name": "Peksa", - "id": "538" - }, - { - "examine": "A strange little man.", - "name": "Oziach", - "id": "747" - }, - { - "examine": "A very brave merchant.", - "name": "Richard", - "id": "1783" - }, - { - "examine": "Loves you more, the more you spend.", - "name": "Shop assistant", - "id": "529" - }, - { - "examine": "Sells stuff.", - "name": "Shopkeeper", - "id": "528" - }, - { - "examine": "One of the king's knights.", - "name": "Sir Prysin", - "id": "883" - }, - { - "examine": "Reldo the librarian.", - "name": "Reldo", - "id": "2660" - }, - { - "examine": "A powerful wizard.", - "name": "Surok Magis", - "id": "5834" - }, - { - "examine": "Animal skins are a specialty.", - "name": "Baraek", - "id": "547" - }, - { - "examine": "One of Gertrude's Sons.", - "name": "Shilop", - "id": "781" - }, - { - "examine": "The man with the armour.", - "name": "Horvik", - "id": "549" - }, - { - "examine": "Sells arrows.", - "name": "Lowe", - "id": "550" - }, - { - "examine": "This looks like an angry, aggressive man.", - "name": "Draul Leptoc", - "id": "3324" - }, - { - "examine": "A quiet, more reserved sort of lady.", - "name": "Phillipa", - "id": "3325" - }, - { - "examine": "A tearful damsel, maybe I can help her?", - "name": "Juliet", - "id": "637" - }, - { - "agg_radius": "", - "examine": "Like a mini man!", - "combat_style": "1", - "melee_animation": "190", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "193", - "weakness": "", - "end_height": "", - "death_animation": "196", - "name": "Gnome", - "defence_level": "1", - "lifepoints": "2", - "strength_level": "1", - "id": "2250", - "aggressive": "", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "Like a mini man!", - "combat_style": "1", - "melee_animation": "190", - "attack_speed": "4", - "respawn_delay": "60", - "defence_animation": "193", - "death_animation": "196", - "name": "Gnome", - "defence_level": "1", - "lifepoints": "3", - "strength_level": "1", - "id": "2249", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "null", - "defence_level": "1", - "safespot": "null", - "combat_audio": "511,513,512", - "id": "2309", - "range_level": "1", - "attack_level": "1", - "defence_animation": "" - }, - { - "examine": "Yanni Salika; he buys and sells antiques.", - "name": "Yanni Salika", - "id": "515" - }, - { - "examine": "This is Kaleb Paramaya, a warm and friendly inn owner.", - "name": "Kaleb Paramaya", - "id": "512" - }, - { - "examine": "This is Fernahei; he owns the local fishing tackle shop.", - "name": "Fernahei", - "id": "517" - }, - { - "examine": "A warrior from Shilo Village.", - "name": "Mosol Rei", - "id": "500" - }, - { - "examine": "An unquiet soul.", - "name": "Spirit of Zadimus", - "id": "501" - }, - { - "examine": "The animated spirit of Rashiliyia the Zombie Queen.", - "name": "Rashiliyia ", - "id": "506" - }, - { - "examine": "A dwarf miner. He's shoring up the walls.", - "name": "Ferd", - "id": "3937" - }, - { - "examine": "A crafty dwarf.", - "name": "Nolar", - "id": "2158" - }, - { - "examine": "She sells general items at the Legends Guild.", - "name": "Fionella", - "id": "932" - }, - { - "examine": "A dwarf who's currently living in Miscellania.", - "name": "Alviss", - "id": "3933" - }, - { - "examine": "Smithy for Sogthorpe.", - "name": "Derrik", - "id": "1376" - }, - { - "examine": "A rather scared-looking dwarf. He doesn't seem all that drunk.", - "name": "Donal", - "id": "3938" - }, - { - "examine": "Runs the general store.", - "name": "Finn", - "id": "3922" - }, - { - "examine": "A dwarf who's currently living in Miscellania.", - "name": "Fullangr", - "id": "3934" - }, - { - "examine": "A subject of Miscellania.", - "name": "Halla", - "id": "3921" - }, - { - "examine": "A dwarf who's currently living in Miscellania.", - "name": "Jari", - "id": "3935" - }, - { - "examine": "A subject of Miscellania.", - "name": "Einar", - "id": "1380" - }, - { - "examine": "A subject of Miscellania.", - "name": "Ragnar", - "id": "1379" - }, - { - "examine": "A subject of Miscellania.", - "name": "Thora", - "id": "3927" - }, - { - "examine": "A subject of Miscellania.", - "name": "Thorhild", - "id": "1382" - }, - { - "examine": "A subject of Miscellania.", - "name": "Tjorvi", - "id": "3925" + "strength_level": "3" }, { - "examine": "Likes fish... hates people.", - "melee_animation": "284", - "attack_speed": "4", - "magic_level": "1", - "respawn_delay": "", - "defence_animation": "285", - "death_animation": "287", - "name": "River troll", - "defence_level": "17", - "lifepoints": "20", - "strength_level": "17", "id": "391", + "name": "River troll", + "examine": "Likes fish... hates people.", "aggressive": "true", - "clue_level": "", + "attack_level": "17", + "attack_speed": "4", "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "17", + "lifepoints": "20", + "magic_level": "1", + "melee_animation": "284", "range_level": "1", - "attack_level": "17" + "respawn_delay": "", + "strength_level": "17" }, { - "examine": "Likes fish... hates people.", - "melee_animation": "284", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "285", - "death_animation": "287", + "id": "392", "name": "River troll", + "examine": "Likes fish... hates people.", + "aggressive": "true", + "attack_level": "32", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "32", + "lifepoints": "35", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "32" + }, + { + "id": "393", + "name": "River troll", + "examine": "Likes fish... hates people.", + "aggressive": "true", + "attack_level": "48", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "287", + "defence_animation": "285", "defence_level": "48", "lifepoints": "48", - "strength_level": "48", - "id": "393", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "magic_level": "1", + "melee_animation": "284", "range_level": "1", - "attack_level": "48" + "strength_level": "48" }, { - "examine": "Likes fish... hates people.", - "melee_animation": "284", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "285", - "death_animation": "287", + "id": "394", "name": "River troll", + "examine": "Likes fish... hates people.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "287", + "defence_animation": "285", "defence_level": "65", "lifepoints": "85", - "strength_level": "65", - "id": "394", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "magic_level": "1", + "melee_animation": "284", "range_level": "1", - "attack_level": "65" + "strength_level": "65" }, { - "examine": "Likes fish... hates people.", - "melee_animation": "284", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "285", - "death_animation": "287", + "id": "395", "name": "River troll", + "examine": "Likes fish... hates people.", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "287", + "defence_animation": "285", "defence_level": "100", "lifepoints": "120", - "strength_level": "100", - "id": "395", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "magic_level": "1", + "melee_animation": "284", "range_level": "1", - "attack_level": "100" + "strength_level": "100" }, { - "examine": "Likes fish... hates people.", - "melee_animation": "284", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "285", - "death_animation": "287", + "id": "396", "name": "River troll", + "examine": "Likes fish... hates people.", + "aggressive": "true", + "attack_level": "130", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "287", + "defence_animation": "285", "defence_level": "130", "lifepoints": "170", - "strength_level": "130", - "id": "396", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "130" - }, - { - "examine": "Rock with attitude.", - "combat_style": "1", - "range_animation": "5347", - "attack_speed": "6", - "defence_animation": "154", - "death_animation": "156", - "name": "Rock Golem", - "lifepoints": "25", - "strength_level": "8", - "id": "413", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "15", - "projectile": "968", - "attack_level": "8" - }, - { - "examine": "Rock with attitude.", - "combat_style": "1", - "range_animation": "5347", - "attack_speed": "6", - "defence_animation": "154", - "death_animation": "156", - "name": "Rock Golem", - "lifepoints": "40", - "strength_level": "17", - "id": "414", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "30", - "projectile": "968", - "attack_level": "17" - }, - { - "examine": "Rock with attitude.", - "combat_style": "1", - "range_animation": "5347", - "attack_speed": "6", - "defence_animation": "154", - "death_animation": "156", - "name": "Rock Golem", - "lifepoints": "60", - "strength_level": "36", - "id": "415", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "40", - "projectile": "968", - "attack_level": "38" - }, - { - "examine": "Rock with attitude.", - "combat_style": "1", - "range_animation": "5347", - "attack_speed": "6", - "defence_animation": "154", - "death_animation": "156", - "name": "Rock Golem", - "lifepoints": "86", - "strength_level": "64", - "id": "416", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "60", - "projectile": "968", - "attack_level": "64" - }, - { - "examine": "Rock with attitude.", - "combat_style": "1", - "range_animation": "5347", - "attack_speed": "6", - "defence_animation": "154", - "death_animation": "156", - "name": "Rock Golem", - "lifepoints": "120", - "strength_level": "100", - "id": "417", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "75", - "projectile": "968", - "attack_level": "100" - }, - { - "examine": "Rock with attitude.", - "combat_style": "1", - "range_animation": "5347", - "attack_speed": "6", - "defence_animation": "154", - "death_animation": "156", - "name": "Rock Golem", - "lifepoints": "166", - "strength_level": "130", - "id": "418", - "aggressive": "true", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "80", - "projectile": "968", - "attack_level": "130" - }, - { - "examine": "Mooooooooooooole.", - "name": "Baby Mole", - "id": "3342" - }, - { - "examine": "Moley, moley, moley!", - "name": "Baby Mole", - "id": "3343" - }, - { - "examine": "He hungry.", - "combat_style": "1", - "start_gfx": "243", - "name": "Rantz", - "start_height": "100", - "range_animation": "3460", - "id": "1010", - "projectile": "242", - "prj_height": "50" - }, - { - "examine": "One of Fenkenstrain's failed experiments.", - "combat_style": "", - "melee_animation": "1616", - "attack_speed": "4", "magic_level": "1", - "defence_animation": "1617", - "death_animation": "1618", - "name": "Experiment", - "defence_level": "30", - "lifepoints": "100", + "melee_animation": "284", + "range_level": "1", + "strength_level": "130" + }, + { + "id": "397", + "name": "Cow", + "examine": "Beefy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "369,371,370", + "death_animation": "5851", + "defence_animation": "5850", + "defence_level": "1", + "lifepoints": "8", + "magic_animation": "5849", + "melee_animation": "5849", + "range_animation": "5849", + "range_level": "1", + "safespot": null, + "slayer_exp": "8", "strength_level": "1", - "id": "1677", - "aggressive": "", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" + "weakness": "8" }, { - "examine": "It has a key hanging from its collar.", - "melee_animation": "1626", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "1627", - "death_animation": "1628", - "name": "Experiment", - "defence_level": "50", - "lifepoints": "40", - "strength_level": "50", - "id": "1676", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "40" - }, - { - "examine": "One of Fenkenstrain's failed experiments.", - "melee_animation": "1612", - "attack_speed": "4", - "magic_level": "1", - "defence_animation": "1613", - "death_animation": "1611", - "name": "Experiment", - "defence_level": "30", - "lifepoints": "100", - "strength_level": "1", - "id": "1678", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Puro Spawn (Low)", - "id": "6065", - "respawn_delay": "1" - }, - { - "name": "Puro Spawn (Mid)", - "id": "6066", - "respawn_delay": "1" - }, - { - "name": "Puro Spawn (High)", - "id": "6067", - "respawn_delay": "1" - }, - { - "examine": "A baby impling. Ahhh.", - "name": "Baby Impling Puro", - "id": "6055", - "respawn_delay": "7" - }, - { - "examine": "A young impling. It's not fair!", - "name": "Young Impling Puro", - "id": "6056", - "respawn_delay": "7" - }, - { - "examine": "An impling gourmet. Mmmm, tasty.", - "name": "Gourmet Impling Puro", - "id": "6057", - "respawn_delay": "7" - }, - { - "examine": "An earth impling. Rock on.", - "name": "Earth Impling Puro", - "id": "6058", - "respawn_delay": "50" - }, - { - "examine": "An impling who likes magic. Magic!", - "name": "Essence Impling Puro", - "id": "6059", - "respawn_delay": "50" - }, - { - "examine": "An impling with varied tastes.", - "name": "Eclectic Impling Puro", - "id": "6060", - "respawn_delay": "7" - }, - { - "examine": "A very stealthy impling.", - "name": "Ninja Impling Puro", - "id": "6063", - "respawn_delay": "9999" - }, - { - "examine": "A nature impling. Right on, maaan.", - "name": "Nature Impling Puro", - "id": "6061", - "respawn_delay": "9999" - }, - { - "examine": "Ooh, shiny things!", - "name": "Magpie Impling Puro", - "id": "6062", - "respawn_delay": "9999" - }, - { - "examine": "He looks dangerous!", - "name": "Turael", - "id": "8273" - }, - { - "examine": "Doesn't seem to want to go away.", - "combat_style": "2", - "melee_animation": "811", - "range_animation": "811", - "attack_speed": "4", - "magic_level": "100", + "id": "398", + "name": "Legends guard", + "examine": "A Legends Guild guard; he protects the entrance to the Legends Guild.", + "attack_level": "1", + "death_animation": "0", "defence_animation": "0", - "magic_animation": "811", - "death_animation": "836", - "name": "Skeleton Mage", - "defence_level": "60", - "lifepoints": "80", - "strength_level": "10", - "id": "3851", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", "range_level": "1", - "attack_level": "10" + "safespot": null, + "strength_level": "1" }, { - "examine": "Blaec seems to be covered in sand.", - "name": "Blaec", - "id": "3115" + "id": "399", + "name": "Legends guard" }, { - "examine": "Looks otherworldy...", - "name": "Fairy Queen", - "id": "4437" + "id": "400", + "name": "Radimus Erkle" }, { - "examine": "A delicate creature from this strange realm.", - "name": "Fairy", - "id": "4443" + "id": "401", + "name": "Jungle forester", + "examine": "He deals in exotic types of wood.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" }, { + "id": "402", + "name": "Jungle forester", + "examine": "She deals in exotic types of wood.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "403", + "name": "Fishing spot" + }, + { + "id": "404", + "name": "Fishing spot" + }, + { + "id": "405", + "name": "Fishing spot" + }, + { + "id": "406", + "name": "Fishing spot" + }, + { + "id": "407", + "name": "Strange Plant", + "examine": "A very strange plant." + }, + { + "id": "408", + "name": "Strange Plant", "examine": "A very strange plant.", "death_animation": "355", - "name": "Strange Plant", + "defence_animation": "354", "defence_level": "300", - "melee_animation": "353", "lifepoints": "100", - "id": "408", "magic_level": "200", - "defence_animation": "354" + "melee_animation": "353" }, { - "examine": "A very strange plant.", - "name": "Strange Plant", - "id": "407" + "id": "409", + "name": "Genie" }, { - "agg_radius": "", - "examine": "A helmetted, barbarian snowman.", - "death_animation": "7560", - "name": "Barbarian Snowman", - "defence_level": "1", - "melee_animation": "7565", - "lifepoints": "20", - "combat_audio": "12,3295,3287", - "id": "6742", - "defence_animation": "7559" + "id": "410", + "name": "Mysterious Old Man" }, { - "examine": "A snow dwarf.", - "death_animation": "7560", - "name": "Dwarf Snowman", - "defence_level": "1", - "melee_animation": "7565", - "lifepoints": "20", - "combat_audio": "12,3295,3287", - "id": "6744", - "defence_animation": "7559" - }, - { - "examine": "Distinctly heroic.", - "name": "Achietties", - "id": "796" - }, - { - "examine": "The hat is a dead give away.", - "name": "Wizard Cromperty", - "id": "2328" - }, - { - "examine": "An intelligent-looking shop owner.", - "name": "Obli", - "id": "516" - }, - { - "examine": "A person sitting an exam.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", + "id": "411", + "name": "Swarm", + "examine": "Insects buzzing around.", + "aggressive": "false", + "attack_level": "1", + "combat_audio": "819,821,820", "death_animation": "0", - "name": "Student", + "defence_animation": "0", "defence_level": "1", "lifepoints": "10", - "strength_level": "1", - "id": "7151", - "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A person sitting an exam.", + "magic_animation": "0", "melee_animation": "0", "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Student", - "defence_level": "1", - "lifepoints": "10", - "strength_level": "1", - "id": "7153", "range_level": "1", - "attack_level": "1" + "safespot": null, + "strength_level": "1" }, { - "examine": "A person sitting an exam.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Student", - "defence_level": "1", - "lifepoints": "10", - "strength_level": "1", - "id": "7154", + "id": "412", + "name": "Bat", + "examine": "An annoying flappy thing.", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "4918", + "defence_animation": "4916", + "defence_level": "2", + "lifepoints": "8", + "magic_level": "10", + "melee_animation": "4915", + "range_animation": "4915", "range_level": "1", - "attack_level": "1" - }, - { - "examine": "A person sitting an exam.", - "melee_animation": "0", - "range_animation": "0", - "defence_animation": "0", - "magic_animation": "0", - "death_animation": "0", - "name": "Student", - "defence_level": "1", - "lifepoints": "10", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "8", "strength_level": "1", - "id": "7155", - "range_level": "1", - "attack_level": "1" + "weakness": "4" }, { - "examine": "She looks like she means business.", - "name": "Balnea", - "id": "7047" - }, - { - "name": "Schoolgirl", - "id": "17" - }, - { - "name": "Orc", - "id": "70" - }, - { - "name": "Skeleton Mage", - "id": "94" - }, - { - "name": "Skavid", - "id": "129" - }, - { - "name": "Mammoth", - "id": "135" - }, - { - "name": "Mounted terrorchick gnome", - "id": "136" - }, - { - "name": "Gull", - "id": "149" - }, - { - "name": "Gull", - "id": "150" - }, - { - "name": "Fly trap", - "id": "151" - }, - { - "name": "Butterfly", - "id": "152" - }, - { - "name": "Butterfly", - "id": "155" - }, - { - "name": "Butterfly", - "id": "156" - }, - { - "name": "Butterfly", - "id": "157" - }, - { - "name": "Gnome shop keeper", - "id": "165" - }, - { - "name": "Gnome baller", - "id": "167" - }, - { - "name": "Brimstail", - "id": "171" - }, - { - "name": "Witch", - "id": "177" - }, - { - "name": "Bandit", - "id": "195" - }, - { - "name": "Barbarian guard", - "id": "197" - }, - { - "name": "Lord Daquarius", - "id": "200" - }, - { - "name": "Lollk", - "id": "207" - }, - { - "name": "Nulodion", - "id": "209" - }, - { - "name": "Sir Percival", - "id": "211" - }, - { - "name": "Merlin", - "id": "213" - }, - { - "name": "Peasant", - "id": "215" - }, - { - "name": "Crone", - "id": "217" - }, - { - "name": "Galahad", - "id": "218" - }, - { - "name": "Bonzo", - "id": "225" - }, - { - "name": "Morris", - "id": "226" - }, - { - "name": "Big Dave", - "id": "228" - }, - { - "name": "Joshua", - "id": "229" - }, - { - "name": "Austri", - "id": "232" - }, - { - "name": "Fishing spot", - "id": "234" - }, - { - "name": "Fishing spot", - "id": "235" - }, - { - "name": "Fishing spot", - "id": "236" - }, - { - "name": "Sir Lancelot", - "id": "239" - }, - { - "name": "Sir Gawain", - "id": "240" - }, - { - "name": "Sir Kay", - "id": "241" - }, - { - "name": "Sir Bedivere", - "id": "242" - }, - { - "name": "Sir Tristram", - "id": "243" - }, - { - "name": "Sir Pelleas", - "id": "244" - }, - { - "name": "Sir Lucan", - "id": "245" - }, - { - "name": "Morgan Le Faye", - "id": "248" - }, - { - "name": "Merlin", - "id": "249" - }, - { - "name": "The Lady of the Lake", - "id": "250" - }, - { - "name": "Beggar", - "id": "252" - }, - { - "name": "Kelvin", - "id": "260" - }, - { - "name": "Joe", - "id": "261" - }, - { - "name": "Hengrad", - "id": "263" - }, - { - "name": "Winelda", - "id": "276" - }, - { - "name": "Ernest", - "id": "287" - }, - { - "name": "Guard", - "id": "292" - }, - { - "name": "Twig", - "id": "301" - }, - { - "name": "Hadley", - "id": "302" - }, - { - "name": "Gerald", - "id": "303" - }, - { - "name": "Almera", - "id": "304" - }, - { - "name": "Hudon", - "id": "305" - }, - { - "name": "Golrie", - "id": "306" - }, - { - "name": "Fishing spot", - "id": "309" - }, - { - "name": "Fishing spot", - "id": "310" - }, - { - "name": "Fishing spot", - "id": "311" - }, - { - "name": "Fishing spot", - "id": "312" - }, - { - "name": "Fishing spot", - "id": "313" - }, - { - "name": "Fishing spot", - "id": "314" - }, - { - "name": "Fishing spot", - "id": "315" - }, - { - "name": "Fishing spot", - "id": "316" - }, - { - "name": "Fishing spot", - "id": "317" - }, - { - "name": "Fishing spot", - "id": "318" - }, - { - "name": "Fishing spot", - "id": "319" - }, - { - "name": "Fishing spot", - "id": "320" - }, - { - "name": "Fishing spot", - "id": "321" - }, - { - "name": "Fishing spot", - "id": "322" - }, - { - "name": "Fishing spot", - "id": "324" - }, - { - "name": "Fishing spot", - "id": "325" - }, - { - "name": "Fishing spot", - "id": "326" - }, - { - "name": "Fishing spot", - "id": "327" - }, - { - "name": "Fishing spot", - "id": "328" - }, - { - "name": "Fishing spot", - "id": "329" - }, - { - "name": "Fishing spot", - "id": "330" - }, - { - "name": "Fishing spot", - "id": "331" - }, - { - "name": "Fishing spot", - "id": "332" - }, - { - "name": "Fishing spot", - "id": "333" - }, - { - "name": "Fishing spot", - "id": "334" - }, - { - "name": "Da Vinci", - "id": "337" - }, - { - "name": "Guidor", - "id": "343" - }, - { - "name": "Kilron", - "id": "349" - }, - { - "name": "Omart", - "id": "350" - }, - { - "name": "Jerico", - "id": "366" - }, - { - "examine": "Owner of the banana plantation.", - "name": "Luthas", - "id": "379" - }, - { - "name": "Dwarf", - "id": "381" - }, - { - "name": "Stankers", - "id": "383" - }, - { - "name": "Legends guard", - "id": "399" - }, - { - "name": "Radimus Erkle", - "id": "400" - }, - { - "name": "Fishing spot", - "id": "403" - }, - { - "name": "Fishing spot", - "id": "404" - }, - { - "name": "Fishing spot", - "id": "405" - }, - { - "name": "Fishing spot", - "id": "406" - }, - { - "name": "Genie", - "id": "409" - }, - { - "name": "Mysterious Old Man", - "id": "410" - }, - { - "name": "Cyrisus", - "id": "431" - }, - { - "name": "Cyrisus", - "id": "433" - }, - { - "name": "Cyrisus", - "id": "434" - }, - { - "name": "Fallen Man", - "id": "436" - }, - { - "name": "Murphy", - "id": "463" - }, - { - "name": "Murphy", - "id": "464" - }, - { - "name": "Murphy", - "id": "465" - }, - { - "name": "Murphy", - "id": "466" - }, - { - "name": "Shark", - "id": "467" - }, - { - "name": "Shark", - "id": "468" - }, - { - "name": "Bolkoy", - "id": "471" - }, - { - "name": "Remsai", - "id": "472" - }, - { - "name": "Khazard trooper", - "id": "473" - }, - { - "name": "Gnome troop", - "id": "480" - }, - { - "name": "Local Gnome", - "id": "484" - }, - { - "name": "Kalron", - "id": "486" - }, - { - "examine": "A cart driver; it looks like he's quite experienced.", - "name": "Hajedy", - "id": "510" - }, - { - "examine": "A cart driver; it looks like he's quite experienced.", - "name": "Vigroy", - "id": "511" - }, - { - "examine": "This is Yohnus - he runs the local blacksmiths.", - "name": "Yohnus", - "id": "513" - }, - { - "examine": "This is Seravel. He sells tickets for the 'Lady of the Waves.'", - "name": "Seravel", - "id": "514" - }, - { - "name": "Valaine", - "id": "536" - }, - { - "name": "Scavvo", - "id": "537" - }, - { - "name": "Aubury", - "id": "553" - }, - { - "examine": "Goods for sale and trade.", - "name": "Jiminua", - "id": "560" - }, - { - "name": "Arhein", - "id": "563" - }, - { - "name": "Lunderwin", - "id": "565" - }, - { - "examine": "Appears slightly drunk.", - "name": "Zambo", - "id": "568" - }, - { - "name": "Hickton", - "id": "575" - }, - { - "name": "Harry", - "id": "576" - }, - { - "name": "Frincos", - "id": "578" - }, - { - "name": "Herquin", - "id": "584" - }, - { - "name": "Rommik", - "id": "585" - }, - { - "examine": "An amulet trader.", - "name": "Davon", - "id": "588" - }, - { - "name": "Zenesha", - "id": "589" - }, - { - "name": "Aemad", - "id": "590" - }, - { - "name": "Kortan", - "id": "591" - }, - { - "name": "Roachey", - "id": "592" - }, - { - "name": "Frenita", - "id": "593" - }, - { - "name": "Nurmof", - "id": "594" - }, - { - "name": "Noterazzo", - "id": "597" - }, - { - "name": "Hudo", - "id": "600" - }, - { - "name": "Rometti", - "id": "601" - }, - { - "name": "Gulluck", - "id": "602" - }, - { - "name": "Heckel Funch", - "id": "603" - }, - { - "name": "Gunnjorn", - "id": "607" - }, - { - "name": "Sir Amik Varze", - "id": "608" - }, - { - "name": "Greldo", - "id": "612" - }, - { - "name": "Gnome baller", - "id": "622" - }, - { - "name": "Gnome baller", - "id": "623" - }, - { - "name": "Gnome baller", - "id": "624" - }, - { - "name": "Gnome baller", - "id": "625" - }, - { - "name": "Gnome baller", - "id": "626" - }, - { - "name": "Gnome baller", - "id": "627" - }, - { - "name": "Gnome baller", - "id": "628" - }, - { - "name": "Gnome baller", - "id": "629" - }, - { - "name": "Gnome baller", - "id": "630" - }, - { - "name": "Gnome baller", - "id": "631" - }, - { - "name": "Gnome baller", - "id": "632" - }, - { - "name": "Gnome winger", - "id": "634" - }, - { - "name": "Cheerleader", - "id": "636" - }, - { - "name": "Katrine", - "id": "642" - }, - { - "name": "Straven", - "id": "644" - }, - { - "name": "King Roald", - "id": "647" - }, - { - "name": "Fairy Queen", - "id": "653" - }, - { - "name": "Shamus", - "id": "654" - }, - { - "name": "Megan", - "id": "661" - }, - { - "name": "Lucy", - "id": "662" - }, - { - "name": "Boot", - "id": "664" - }, - { - "name": "Caleb", - "id": "666" - }, - { - "name": "Johnathon", - "id": "668" - }, - { - "name": "Hazelmere", - "id": "669" - }, - { - "name": "Glough", - "id": "671" - }, - { - "name": "Anita", - "id": "672" - }, - { - "name": "Charlie", - "id": "673" - }, - { - "examine": "Builds ships for a living.", - "name": "Shipyard worker", - "id": "675" - }, - { - "name": "Femi", - "id": "676" - }, - { - "name": "Tower Advisor", - "id": "685" - }, - { - "name": "Tower Advisor", - "id": "686" - }, - { - "name": "Tower Advisor", - "id": "687" - }, - { - "name": "Competition Judge", - "id": "693" - }, - { - "name": "Bailey", - "id": "695" - }, - { - "name": "Holgart", - "id": "697" - }, - { - "name": "Holgart", - "id": "699" - }, - { - "name": "Holgart", - "id": "700" - }, - { - "name": "Kent", - "id": "701" - }, - { - "name": "Fisherman", - "id": "702" - }, - { - "name": "Fisherman", - "id": "703" - }, - { - "name": "Fisherman", - "id": "704" - }, - { - "name": "Alrena", - "id": "710" - }, - { - "name": "Bravek", - "id": "711" - }, - { - "name": "Carla", - "id": "712" - }, - { - "name": "Ted Rehnison", - "id": "721" - }, - { - "name": "Martha Rehnison", - "id": "722" - }, - { - "name": "Billy Rehnison", - "id": "723" - }, - { - "name": "Milli Rehnison", - "id": "724" - }, - { - "name": "Jethick", - "id": "725" - }, - { - "examine": "A wise old witch doctor.", - "name": "Trufitus", - "id": "740" - }, - { - "name": "Oracle", - "id": "746" - }, - { - "name": "Angry barbarian spirit", - "id": "748" - }, - { - "name": "Peaceful barbarian spirit", - "id": "754" - }, - { - "name": "Kittens", - "id": "759" - }, - { - "name": "Kitten", - "id": "761" - }, - { - "name": "Kitten", - "id": "762" - }, - { - "name": "Kitten", - "id": "763" - }, - { - "name": "Kitten", - "id": "764" - }, - { - "name": "Kitten", - "id": "765" - }, - { - "name": "Kitten", - "id": "766" - }, - { - "name": "Cat", - "id": "768" - }, - { - "name": "Cat", - "id": "769" - }, - { - "name": "Cat", - "id": "770" - }, - { - "name": "Cat", - "id": "771" - }, - { - "name": "Cat", - "id": "772" - }, - { - "name": "Cat", - "id": "773" - }, - { - "name": "Overgrown cat", - "id": "774" - }, - { - "name": "Overgrown cat", - "id": "775" - }, - { - "name": "Overgrown cat", - "id": "776" - }, - { - "name": "Overgrown cat", - "id": "777" - }, - { - "name": "Overgrown cat", - "id": "779" - }, - { - "name": "Gertrude", - "id": "780" - }, - { - "name": "Philop", - "id": "782" - }, - { - "name": "Kanel", - "id": "784" - }, - { - "examine": "A diligent guard.", - "name": "Garv", - "id": "788" - }, - { - "examine": "A rough looking thief.", - "name": "Grubor", - "id": "789" - }, - { - "name": "Seth", - "id": "791" - }, - { - "examine": "Looks like he's been in the wars.", - "name": "Grip", - "id": "792" - }, - { - "name": "Helemos", - "id": "797" - }, - { - "examine": "His job doesn't look very fun...", - "name": "Pierre", - "id": "807" - }, - { - "examine": "He looks kind of stuck up...", - "name": "Hobbes", - "id": "808" - }, - { - "examine": "She looks like she enjoys her job.", - "name": "Louisa", - "id": "809" - }, - { - "examine": "She looks very nervous...", - "name": "Mary", - "id": "810" - }, - { - "examine": "He looks like he spends a lot of time outdoor.", - "name": "Stanford", - "id": "811" - }, - { - "examine": "She's dressed in a red top and green trousers.", - "name": "Anna", - "id": "814" - }, - { - "examine": "He's dressed all in red.", - "name": "Bob", - "id": "815" - }, - { - "examine": "She's wearing a blue top and red trousers.", - "name": "Carol", - "id": "816" - }, - { - "examine": "He's dressed all in green.", - "name": "David", - "id": "817" - }, - { - "examine": "She's wearing a green top and blue trousers.", - "name": "Elizabeth", - "id": "818" - }, - { - "examine": "He's dressed all in blue.", - "name": "Frank", - "id": "819" - }, - { - "name": "Ana", - "id": "822" - }, - { - "name": "Ana", - "id": "823" - }, - { - "name": "Female slave", - "id": "824" - }, - { - "name": "Escaping slave", - "id": "826" - }, - { - "name": "Shanty Claws", - "id": "828" - }, - { - "name": "Mercenary Captain", - "id": "829" - }, - { - "name": "Al Shabim", - "id": "832" - }, - { - "name": "Horacio", - "id": "844" - }, - { - "examine": "A happening kind of guy!", - "name": "Kangai Mau", - "id": "846" - }, - { - "name": "Blurberry", - "id": "848" - }, - { - "name": "Barman", - "id": "849" - }, - { - "name": "Og", - "id": "853" - }, - { - "name": "Grew", - "id": "854" - }, - { - "name": "Toban", - "id": "855" - }, - { - "name": "Ogre guard", - "id": "857" - }, - { - "name": "Ogre guard", - "id": "860" - }, - { - "name": "Ogre guard", - "id": "861" - }, - { - "name": "Skavid", - "id": "865" - }, - { - "name": "Skavid", - "id": "866" - }, - { - "name": "Skavid", - "id": "867" - }, - { - "name": "Skavid", - "id": "868" - }, - { - "name": "Skavid", - "id": "869" - }, - { - "name": "Watchtower Wizard", - "id": "871" - }, - { - "name": "Ogre trader", - "id": "876" - }, - { - "name": "Weakened Delrith", - "id": "880" - }, - { - "examine": "The Carnillean family chef.", - "name": "Claus the chef", - "id": "886" - }, - { - "name": "Philipe Carnillean", - "id": "888" - }, - { - "examine": "Ceril Carnillean's wife.", - "name": "Henryeta Carnillean", - "id": "889" - }, - { - "examine": "The Carnellian family butler.", - "name": "Butler Jones", - "id": "890" - }, - { - "examine": "Leader of the Hazeel cult.", - "name": "Alomone", - "id": "891" - }, - { - "name": "Hazeel", - "id": "892" - }, - { - "name": "Nora T. Hagg", - "id": "896" - }, - { - "name": "Mouse", - "id": "901" - }, - { - "name": "Gundai", - "id": "902" - }, - { - "name": "Lundail", - "id": "903" - }, - { - "name": "Kolodion", - "id": "906" - }, - { - "name": "Ned", - "id": "918" - }, - { - "name": "Prince Ali", - "id": "921" - }, - { - "name": "Border Guard", - "id": "926" - }, - { - "name": "Fishing spot", - "id": "927" - }, - { - "name": "Gujuo", - "id": "928" - }, - { - "name": "Ungadulu", - "id": "929" - }, - { - "name": "Ungadulu", - "id": "930" - }, - { - "name": "Siegfried Erkle", - "id": "933" - }, - { - "name": "Viyeldi", - "id": "935" - }, - { - "name": "San Tojalon", - "id": "936" - }, - { - "name": "Irvig Senay", - "id": "937" - }, - { - "name": "Echned Zekin", - "id": "940" - }, - { - "name": "Fishing spot", - "id": "952" - }, - { - "name": "Banker", - "id": "953" - }, - { - "name": "Kardia", - "id": "992" - }, - { - "name": "Niloof", - "id": "994" - }, - { - "name": "Lord Iban", - "id": "1003" - }, - { - "name": "Hamid", - "id": "1008" - }, - { - "name": "Fycie", - "id": "1011" - }, - { - "name": "Bugs", - "id": "1012" - }, - { - "name": "Bloated Toad", - "id": "1014" - }, - { - "name": "Chompy bird", - "id": "1016" - }, - { - "name": "Baby impling", - "id": "1024" - }, - { - "name": "Banker", - "id": "1036" - }, - { - "name": "Rufus", - "id": "1038" - }, - { - "name": "Barker", - "id": "1039" - }, - { - "name": "Fidelio", - "id": "1040" - }, - { - "name": "Sbott", - "id": "1041" - }, - { - "name": "Roavar", - "id": "1042" - }, - { - "name": "Will o' the wisp", - "id": "1043" - }, - { - "name": "Drezel", - "id": "1047" - }, - { - "name": "Mime", - "id": "1056" - }, - { - "name": "Saba", - "id": "1070" - }, - { - "name": "Tenzing", - "id": "1071" - }, - { - "name": "Archer", - "id": "1075" - }, - { - "name": "Bob", - "id": "1091" - }, - { - "name": "Billy", - "id": "1093" - }, - { - "name": "Mountain goat", - "id": "1094" - }, - { - "name": "Eadgar", - "id": "1113" - }, - { - "name": "Godric", - "id": "1114" - }, - { - "name": "Kalphite Queen", - "id": "1159" - }, - { - "examine": "The imposing Chief of Tai Bwo Wannai.", - "name": "Timfraku", - "id": "1162" - }, - { - "examine": "A rather depressed looking fisherman.", - "name": "Tiadeche", - "id": "1163" - }, - { - "examine": "A rather depressed looking fisherman.", - "name": "Tiadeche", - "id": "1164" - }, - { - "name": "Tinsay", - "id": "1165" - }, - { - "name": "Tinsay", - "id": "1166" - }, - { - "examine": "A hunter who long ago succumbed to blood lust.", - "name": "Tamayu", - "id": "1167" - }, - { - "name": "Tamayu", - "id": "1168" - }, - { - "name": "Tamayu", - "id": "1169" - }, - { - "name": "Tamayu", - "id": "1170" - }, - { - "examine": "A crotchety old fisherman who doesn't like young whippersnappers.", - "name": "Lubufu", - "id": "1171" - }, - { - "name": "The Shaikahan", - "id": "1173" - }, - { - "name": "Fishing spot", - "id": "1174" - }, - { - "name": "Fishing spot", - "id": "1175" - }, - { - "name": "Fishing spot", - "id": "1177" - }, - { - "name": "Fishing spot", - "id": "1178" - }, - { - "examine": "A sea bird.", - "name": "Cormorant", - "id": "1180" - }, - { - "examine": "A sea bird.", - "name": "Pelican", - "id": "1181" - }, - { - "name": "Lord Iorwerth", - "id": "1182" - }, - { - "name": "Idris", - "id": "1186" - }, - { - "name": "Essyllt", - "id": "1187" - }, - { - "name": "Morvran", - "id": "1188" - }, - { - "name": "Fishing spot", - "id": "1189" - }, - { - "name": "Fishing spot", - "id": "1190" - }, - { - "name": "Fishing spot", - "id": "1191" - }, - { - "name": "Arianwyn", - "id": "1202" - }, - { - "name": "Tyras guard", - "id": "1205" - }, - { - "name": "Quartermaster", - "id": "1207" - }, - { - "name": "Spider", - "id": "1221" - }, - { - "name": "Mist", - "id": "1222" - }, - { - "name": "Vampyric hound", - "id": "1224" - }, - { - "name": "Tree", - "id": "1226" - }, - { - "name": "Fishing spot", - "id": "1236" - }, - { - "name": "Fishing spot", - "id": "1237" - }, - { - "name": "Fishing spot", - "id": "1238" - }, - { - "name": "Shade Spirit", - "id": "1242" - }, - { - "name": "Afflicted(Ulsquire)", - "id": "1251" - }, - { - "name": "Ulsquire Shauncy", - "id": "1252" - }, - { - "name": "Afflicted(Razmire)", - "id": "1253" - }, - { - "name": "Razmire Keelgan", - "id": "1254" - }, - { - "name": "Mort'ton Local", - "id": "1255" - }, - { - "name": "Mort'ton Local", - "id": "1256" - }, - { - "name": "Mort'ton local", - "id": "1259" - }, - { - "name": "Mort'ton local", - "id": "1260" - }, - { - "name": "Butterfly", - "id": "1280" - }, - { - "name": "Bjorn", - "id": "1284" - }, - { - "name": "Eldgrim", - "id": "1285" - }, - { - "name": "Askeladden", - "id": "1295" - }, - { - "name": "Town Guard", - "id": "1299" - }, - { - "name": "Freygerd", - "id": "1310" - }, - { - "name": "Lensa", - "id": "1311" - }, - { - "name": "Jennella", - "id": "1312" - }, - { - "name": "Gull", - "id": "1322" - }, - { - "name": "Gull", - "id": "1323" - }, - { - "name": "Gull", - "id": "1324" - }, - { - "name": "Gull", - "id": "1325" - }, - { - "name": "Fishing spot", - "id": "1331" - }, - { - "name": "Fishing spot", - "id": "1332" - }, - { - "name": "Fishing spot", - "id": "1333" - }, - { - "name": "Jossik", - "id": "1334" - }, - { - "name": "Jossik", - "id": "1335" - }, - { - "name": "Larrissa", - "id": "1336" - }, - { - "name": "Larrissa", - "id": "1337" - }, - { - "name": "Dagannoth mother", - "id": "1348" - }, - { - "name": "Dagannoth mother", - "id": "1349" - }, - { - "name": "Dagannoth mother", - "id": "1350" - }, - { - "name": "Queen Sigrid", - "id": "1359" - }, - { - "name": "Arnor", - "id": "1361" - }, - { - "name": "Haming", - "id": "1362" - }, - { - "name": "Moldof", - "id": "1363" - }, - { - "name": "Helga", - "id": "1364" - }, - { - "name": "Matilda", - "id": "1365" - }, - { - "name": "Ashild", - "id": "1366" - }, - { - "name": "Prince Brand", - "id": "1371" - }, - { - "name": "Princess Astrid", - "id": "1372" - }, - { - "name": "King Vargas", - "id": "1373" - }, - { - "name": "Advisor Ghrim", - "id": "1375" - }, - { - "name": "Halla", - "id": "1383" - }, - { - "name": "Yrsa", - "id": "1384" - }, - { - "name": "Thora", - "id": "1387" - }, - { - "name": "Fishing spot", - "id": "1399" - }, - { - "name": "Gull", - "id": "1400" - }, - { - "name": "Fishing spot", - "id": "1405" - }, - { - "name": "Fishing spot", - "id": "1406" - }, - { - "name": "Daero", - "id": "1407" - }, - { - "name": "Waydar", - "id": "1408" - }, - { - "name": "Waydar", - "id": "1409" - }, - { - "name": "Waydar", - "id": "1410" - }, - { - "name": "Garkor", - "id": "1411" - }, - { - "name": "Garkor", - "id": "1412" - }, - { - "name": "Lumo", - "id": "1413" - }, - { - "name": "Lumo", - "id": "1414" - }, - { - "name": "Bunkdo", - "id": "1415" - }, - { - "name": "Bunkdo", - "id": "1416" - }, - { - "name": "Carado", - "id": "1417" - }, - { - "name": "Carado", - "id": "1418" - }, - { - "name": "Karam", - "id": "1420" - }, - { - "name": "Karam", - "id": "1421" - }, - { - "name": "Karam", - "id": "1422" - }, - { - "name": "Bunkwicket", - "id": "1423" - }, - { - "name": "Waymottin", - "id": "1424" - }, - { - "name": "Zooknock", - "id": "1425" - }, - { - "name": "Zooknock", - "id": "1426" - }, - { - "name": "G.L.O. Caranock", - "id": "1428" - }, - { - "name": "Dugopul", - "id": "1429" - }, - { - "name": "Salenab", - "id": "1430" - }, - { - "name": "Trefaji", - "id": "1431" - }, - { - "name": "Aberab", - "id": "1432" - }, - { - "name": "Solihib", - "movement_radius": "1", - "id": "1433" - }, - { - "name": "Daga", - "id": "1434" - }, - { - "name": "Tutab", - "id": "1435" - }, - { - "name": "Ifaba", - "id": "1436" - }, - { - "name": "Hamab", - "id": "1437" - }, - { - "name": "Hafuba", - "id": "1438" - }, - { - "name": "Denadu", - "id": "1439" - }, - { - "name": "Lofu", - "id": "1440" - }, - { - "name": "Kruk", - "id": "1441" - }, - { - "name": "Awowogei", - "id": "1448" - }, - { - "name": "Uwogo", - "id": "1449" - }, - { - "name": "Muruwoi", - "id": "1450" - }, - { - "name": "Elder Guard", - "id": "1462" - }, - { - "name": "Bonzara", - "id": "1468" - }, - { - "name": "Foreman", - "id": "1470" - }, - { - "name": "Spider", - "id": "1474" - }, - { - "name": "Gorilla", - "id": "1482" - }, - { - "name": "Dummy", - "id": "1488" - }, - { - "name": "Dummy", - "id": "1489" - }, - { - "name": "Dummy", - "id": "1490" - }, - { - "name": "Dummy", - "id": "1491" - }, - { - "name": "Dummy", - "id": "1492" - }, - { - "name": "Dummy", - "id": "1493" - }, - { - "name": "Dummy", - "id": "1494" - }, - { - "name": "Dummy", - "id": "1495" - }, - { - "name": "Dummy", - "id": "1496" - }, - { - "name": "Dummy", - "id": "1497" - }, - { - "name": "Dummy", - "id": "1498" - }, - { - "name": "Dummy", - "id": "1499" - }, - { - "name": "Dummy", - "id": "1500" - }, - { - "name": "Dummy", - "id": "1501" - }, - { - "name": "Dummy", - "id": "1502" - }, - { - "name": "Dummy", - "id": "1503" - }, - { - "name": "Dummy", - "id": "1504" - }, - { - "name": "Dummy", - "id": "1505" - }, - { - "name": "Dummy", - "id": "1506" - }, - { - "name": "Dummy", - "id": "1507" - }, - { - "name": "Forester", - "id": "1508" - }, - { - "name": "Woman-at-arms", - "id": "1509" - }, - { - "name": "Apprentice", - "id": "1510" - }, - { - "name": "Ranger", - "id": "1511" - }, - { - "name": "Adventurer", - "id": "1512" - }, - { - "name": "Mage", - "id": "1513" - }, - { - "name": "Nail beast", - "id": "1515" - }, - { - "name": "Nail beast", - "id": "1522" - }, - { - "name": "Nail beast", - "id": "1523" - }, - { - "name": "Undead Lumberjack", - "id": "1525" - }, - { - "name": "Lanthus", - "id": "1526" - }, - { - "name": "Mine cart", - "id": "1527" - }, - { - "name": "Sheep", - "id": "1529" - }, - { - "name": "Rabbit", - "id": "1530" - }, - { - "name": "Loading crane", - "id": "1542" - }, - { - "name": "Innocent-looking key", - "id": "1543" - }, - { - "name": "Mine cart", - "id": "1544" - }, - { - "name": "Mine cart", - "id": "1545" - }, - { - "name": "Mine cart", - "id": "1546" - }, - { - "name": "Mine cart", - "id": "1547" - }, - { - "name": "Mine cart", - "id": "1548" - }, - { - "name": "Santa", - "id": "1552" - }, - { - "name": "Aga", - "id": "1554" - }, - { - "name": "Arrg", - "id": "1555" - }, - { - "name": "Ice wolf", - "id": "1559" - }, - { - "name": "Curpile Fyod", - "id": "1568" - }, - { - "name": "Veliaf Hurtz", - "id": "1569" - }, - { - "name": "Sani Piliu", - "id": "1570" - }, - { - "name": "Harold Evans", - "id": "1571" - }, - { - "name": "Radigad Ponfit", - "id": "1572" - }, - { - "name": "Polmafi Ferdygris", - "id": "1573" - }, - { - "name": "Ivan Strom", - "id": "1574" - }, - { - "name": "Skeleton Hellhound", - "id": "1575" - }, - { - "name": "Stranger", - "id": "1576" - }, - { - "name": "Vanstrom Klause", - "id": "1577" - }, - { - "name": "Mist", - "id": "1578" - }, - { - "name": "Vanstrom Klause", - "id": "1579" - }, - { - "name": "Vanstrom Klause", - "id": "1580" - }, - { - "name": "Vanstrom Klause", - "id": "1581" - }, - { - "examine": "Looks like he wants money.", - "name": "Saniboch", - "id": "1595" - }, - { - "name": "Vannaka", - "id": "1596" - }, - { - "name": "Cave crawler", - "id": "1599" - }, - { - "name": "Skullball", - "id": "1659" - }, - { - "name": "Agility Trainer", - "id": "1664" - }, - { - "name": "Dr Fenkenstrain", - "id": "1666" - }, - { - "name": "Fenkenstrain's Monster", - "id": "1671" - }, - { - "name": "Lord Rologarth", - "id": "1674" - }, - { - "name": "Eluned", - "id": "1679" - }, - { - "name": "Islwyn", - "id": "1680" - }, - { - "name": "Golrie", - "id": "1682" - }, - { - "name": "Velorina", - "id": "1683" - }, - { - "name": "Gravingas", - "id": "1685" - }, - { - "name": "Ak-Haranu", - "id": "1687" - }, - { - "name": "Undead cow", - "id": "1689" - }, - { - "name": "Robin", - "id": "1694" - }, - { - "name": "Johanhus Ulsbrecht", - "id": "1709" - }, - { - "name": "Tree", - "id": "1719" - }, - { - "name": "Tree", - "id": "1720" - }, - { - "name": "Tree", - "id": "1721" - }, - { - "name": "Dead tree", - "id": "1722" - }, - { - "name": "Dead tree", - "id": "1723" - }, - { - "name": "Dead tree", - "id": "1724" - }, - { - "name": "Dead tree", - "id": "1725" - }, - { - "name": "Dead tree", - "id": "1726" - }, - { - "name": "Dead tree", - "id": "1727" - }, - { - "name": "Dead tree", - "id": "1728" - }, - { - "name": "Dead tree", - "id": "1729" - }, - { - "name": "Dead tree", - "id": "1730" - }, - { - "name": "Dead tree", - "id": "1731" - }, - { - "name": "Dramen tree", - "id": "1732" - }, - { - "name": "Magic tree", - "id": "1734" - }, - { - "name": "Maple tree", - "id": "1735" - }, - { - "name": "Willow", - "id": "1736" - }, - { - "name": "Willow", - "id": "1737" - }, - { - "name": "Willow", - "id": "1738" - }, - { - "name": "Hollow tree", - "id": "1749" - }, - { - "name": "Hollow tree", - "id": "1750" - }, - { - "name": "Mounted terrorbird gnome", - "id": "1753" - }, - { - "name": "Crow", - "id": "1756" - }, - { - "name": "Sheep", - "id": "1762" - }, - { - "name": "Sheep", - "id": "1764" - }, - { - "name": "Sheep", - "id": "1765" - }, - { - "name": "Ilfeen", - "id": "1777" - }, - { - "name": "William", - "id": "1778" - }, - { - "name": "Ian", - "id": "1779" - }, - { - "name": "Larry", - "id": "1780" - }, - { - "name": "Darren", - "id": "1781" - }, - { - "name": "Edward", - "id": "1782" - }, - { - "name": "Neil", - "id": "1784" - }, - { - "name": "Simon", - "id": "1786" - }, - { - "name": "Sam", - "id": "1787" - }, - { - "name": "Lumdo", - "id": "1788" - }, - { - "name": "Bunkwicket", - "id": "1789" - }, - { - "name": "Waymottin", - "id": "1790" - }, - { - "name": "Jungle Tree", - "id": "1791" - }, - { - "name": "Jungle Tree", - "id": "1792" - }, - { - "name": "Tassie Slipcast", - "id": "1793" - }, - { - "name": "Phantuwti Fanstuwi Farsight", - "id": "1798" - }, - { - "name": "Tindel Marchant", - "id": "1799" - }, - { - "name": "Gnormadium Avlafrim", - "id": "1800" - }, - { - "name": "Petra Fiyed", - "id": "1801" - }, - { - "name": "Slagilith", - "id": "1804" - }, - { - "name": "Ragnar", - "id": "1808" - }, - { - "name": "Svidi", - "id": "1809" - }, - { - "name": "Jokul", - "id": "1810" - }, - { - "name": "The Kendal", - "id": "1811" - }, - { - "name": "Bald Headed Eagle", - "id": "1821" - }, - { - "name": "Frog", - "id": "1830" - }, - { - "name": "Easter Bunny", - "id": "1835" - }, - { - "name": "Dondakan the Dwarf", - "id": "1836" - }, - { - "name": "Dondakan the Dwarf", - "id": "1838" - }, - { - "name": "Dondakan the Dwarf", - "id": "1839" - }, - { - "name": "Rolad", - "id": "1841" - }, - { - "name": "Dwarven Boatman", - "id": "1845" - }, - { - "name": "Miodvetnir", - "id": "1847" - }, - { - "name": "Dernu", - "id": "1848" - }, - { - "name": "Derni", - "id": "1849" - }, - { - "name": "Brian", - "id": "1860" - }, - { - "name": "Ali Morrisane", - "id": "1862" - }, - { - "name": "Ali the Mayor", - "id": "1869" - }, - { - "name": "Bandit Leader", - "id": "1876" - }, - { - "name": "Bandit", - "id": "1879" - }, - { - "name": "Bandit", - "id": "1881" - }, - { - "name": "Sir Palomedes", - "id": "1882" - }, - { - "name": "Sir Palomedes", - "id": "1883" - }, - { - "examine": "A well dressed thief.", - "name": "Trobert", - "id": "1884" - }, - { - "name": "Villager", - "id": "1887" - }, - { - "name": "Villager", - "id": "1889" - }, - { - "name": "Villager", - "id": "1890" - }, - { - "name": "Villager", - "id": "1891" - }, - { - "name": "Villager", - "id": "1893" - }, - { - "name": "Villager", - "id": "1894" - }, - { - "name": "Villager", - "id": "1895" - }, - { - "name": "Villager", - "id": "1897" - }, - { - "name": "Villager", - "id": "1898" - }, - { - "name": "Menaphite Leader", - "id": "1899" - }, - { - "name": "Menaphite Thug", - "id": "1903" - }, - { - "name": "Broken clay golem", - "id": "1907" - }, - { - "name": "Damaged clay golem", - "id": "1909" - }, - { - "name": "Clay golem", - "id": "1910" - }, - { - "name": "Elissa", - "id": "1912" - }, - { - "name": "Eblis", - "id": "1922" - }, - { - "name": "Eblis", - "id": "1924" - }, - { - "name": "Bandit", - "id": "1927" - }, - { - "name": "Bandit", - "id": "1928" - }, - { - "name": "Bandit", - "id": "1929" - }, - { - "name": "Bandit", - "id": "1930" - }, - { - "name": "Troll child", - "id": "1932" - }, - { - "name": "Troll child", - "id": "1934" - }, - { - "name": "Mummy", - "id": "1957" - }, - { - "name": "Mummy", - "id": "1959" - }, - { - "name": "Mummy ashes", - "id": "1960" - }, - { - "name": "Mummy", - "id": "1966" - }, - { - "name": "Mummy", - "id": "1968" - }, - { - "name": "Azzanadra", - "id": "1970" - }, - { - "name": "Raetul", - "id": "1982" - }, - { - "name": "Siamun", - "id": "1983" - }, - { - "name": "High Priest", - "id": "1984" - }, - { - "name": "Priest", - "id": "1987" - }, - { - "name": "Priest", - "id": "1989" - }, - { - "name": "Sphinx", - "id": "1990" - }, - { - "name": "Neite", - "id": "1992" - }, - { - "name": "Vulture", - "id": "1996" - }, - { - "name": "Plague cow", - "id": "2000" - }, - { - "name": "Wanderer", - "id": "2002" - }, - { - "name": "Wanderer", - "id": "2006" - }, - { - "name": "Het", - "id": "2007" - }, - { - "name": "Apmeken", - "id": "2008" - }, - { - "name": "Scabaras", - "id": "2009" - }, - { - "name": "Crondis", - "id": "2010" - }, - { - "name": "Icthlarin", - "id": "2011" - }, - { - "name": "Klenter", - "id": "2013" - }, - { - "name": "Light creature", - "id": "2020" - }, - { - "name": "Light creature", - "id": "2022" - }, - { - "name": "Juna", - "id": "2023" - }, - { - "name": "Grish", - "id": "2038" - }, - { - "name": "Uglug Nar", - "id": "2039" - }, - { - "name": "Pilg", - "id": "2040" - }, - { - "name": "Grug", - "id": "2041" - }, - { - "name": "Ogre guard", - "id": "2042" - }, - { - "name": "Ogre guard", - "id": "2043" - }, - { - "name": "Zavistic Rarve", - "id": "2059" - }, - { - "name": "Sithik Ints", - "id": "2061" - }, - { - "name": "Sithik Ints", - "id": "2062" - }, - { - "name": "Gargh", - "id": "2063" - }, - { - "name": "Scarg", - "id": "2064" - }, - { - "name": "Gruh", - "id": "2065" - }, - { - "name": "Irwin Feaselbaum", - "id": "2066" - }, - { - "name": "Fishing spot", - "id": "2068" - }, - { - "name": "Sigmund", - "id": "2079" - }, - { - "name": "Sigmund", - "id": "2083" - }, - { - "name": "Mistag", - "id": "2084" - }, - { - "name": "Kazgar", - "id": "2085" - }, - { - "name": "Ur-tag", - "id": "2087" - }, - { - "name": "Duke Horacio", - "id": "2088" - }, - { - "name": "Mistag", - "id": "2089" - }, - { - "name": "Sigmund", - "id": "2090" - }, - { - "name": "Red Axe Secretary", - "id": "2099" - }, - { - "name": "Red Axe Director", - "id": "2107" - }, - { - "name": "Red Axe Cat", - "id": "2108" - }, - { - "name": "Trader", - "id": "2123" - }, - { - "name": "Trader", - "id": "2125" - }, - { - "name": "Supreme Commander", - "id": "2128" - }, - { - "name": "Commander Veldaban", - "id": "2129" - }, - { - "name": "Gnome emissary", - "id": "2137" - }, - { - "name": "Riki the sculptor's model", - "id": "2142" - }, - { - "name": "Riki the sculptor's model", - "id": "2144" - }, - { - "name": "Riki the sculptor's model", - "id": "2145" - }, - { - "name": "Riki the sculptor's model", - "id": "2146" - }, - { - "name": "Riki the sculptor's model", - "id": "2147" - }, - { - "name": "Riki the sculptor's model", - "id": "2148" - }, - { - "name": "Riki the sculptor's model", - "id": "2149" - }, - { - "name": "Riki the sculptor's model", - "id": "2150" - }, - { - "name": "Vigr", - "id": "2151" - }, - { - "name": "Santiri", - "id": "2152" - }, - { - "name": "Saro", - "id": "2153" - }, - { - "name": "Wemund", - "id": "2155" - }, - { - "name": "Randivor", - "id": "2156" - }, - { - "name": "Hervi", - "id": "2157" - }, - { - "name": "Gulldamar", - "id": "2159" - }, - { - "name": "Agmundi", - "id": "2161" - }, - { - "name": "Vermundi", - "id": "2162" - }, - { - "name": "Assistant", - "id": "2166" - }, - { - "name": "Dromund", - "id": "2169" - }, - { - "name": "Inn Keeper", - "id": "2176" - }, - { - "name": "Barman", - "id": "2179" - }, - { - "name": "Hegir", - "id": "2188" - }, - { - "name": "Haera", - "id": "2189" - }, - { - "name": "Reinald", - "id": "2194" - }, - { - "name": "Gauss", - "id": "2196" - }, - { - "name": "Myndill", - "id": "2197" - }, - { - "name": "Tombar", - "id": "2199" - }, - { - "name": "Odmar", - "id": "2200" - }, - { - "name": "Drunken Dwarf", - "id": "2204" - }, - { - "name": "Dwarven Miner", - "id": "2208" - }, - { - "name": "Dwarven Miner", - "id": "2209" - }, - { - "name": "Dwarven Miner", - "id": "2210" - }, - { - "name": "Dwarven Miner", - "id": "2211" - }, - { - "name": "Dwarven Miner", - "id": "2212" - }, - { - "name": "Dwarven Miner", - "id": "2213" - }, - { - "name": "Dwarven Miner", - "id": "2214" - }, - { - "name": "Dwarven Miner", - "id": "2215" - }, - { - "name": "Dwarven Miner", - "id": "2216" - }, - { - "name": "Dwarven Miner", - "id": "2217" - }, - { - "name": "Dwarven Miner", - "id": "2218" - }, - { - "name": "Purple Pewter Director", - "id": "2219" - }, - { - "name": "Purple Pewter Director", - "id": "2220" - }, - { - "name": "Blue Opal Director", - "id": "2221" - }, - { - "name": "Yellow Fortune Director", - "id": "2222" - }, - { - "name": "Green Gemstone Director", - "id": "2223" - }, - { - "name": "White Chisel Director", - "id": "2224" - }, - { - "name": "Silver Cog Director", - "id": "2225" - }, - { - "name": "Brown Engine Director", - "id": "2226" - }, - { - "name": "Red Axe Director", - "id": "2227" - }, - { - "name": "Commander Veldaban", - "id": "2228" - }, - { - "name": "Red Axe Cat", - "id": "2229" - }, - { - "name": "Red Axe Cat", - "id": "2230" - }, - { - "name": "Black Guard Berserker", - "id": "2231" - }, - { - "name": "Olivia", - "id": "2233" - }, - { - "name": "Donie", - "id": "2238" - }, - { - "name": "Pig", - "id": "2239" - }, - { - "examine": "Like a mini man!", + "id": "413", + "name": "Rock Golem", + "examine": "Rock with attitude.", + "aggressive": "true", + "attack_level": "8", + "attack_speed": "6", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "combat_style": "1", - "force_talk": "", - "melee_animation": "190", + "death_animation": "156", + "defence_animation": "154", + "lifepoints": "25", + "projectile": "968", + "range_animation": "5347", + "range_level": "15", + "strength_level": "8" + }, + { + "id": "414", + "name": "Rock Golem", + "examine": "Rock with attitude.", + "aggressive": "true", + "attack_level": "17", + "attack_speed": "6", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_style": "1", + "death_animation": "156", + "defence_animation": "154", + "lifepoints": "40", + "projectile": "968", + "range_animation": "5347", + "range_level": "30", + "strength_level": "17" + }, + { + "id": "415", + "name": "Rock Golem", + "examine": "Rock with attitude.", + "aggressive": "true", + "attack_level": "38", + "attack_speed": "6", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_style": "1", + "death_animation": "156", + "defence_animation": "154", + "lifepoints": "60", + "projectile": "968", + "range_animation": "5347", + "range_level": "40", + "strength_level": "36" + }, + { + "id": "416", + "name": "Rock Golem", + "examine": "Rock with attitude.", + "aggressive": "true", + "attack_level": "64", + "attack_speed": "6", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_style": "1", + "death_animation": "156", + "defence_animation": "154", + "lifepoints": "86", + "projectile": "968", + "range_animation": "5347", + "range_level": "60", + "strength_level": "64" + }, + { + "id": "417", + "name": "Rock Golem", + "examine": "Rock with attitude.", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "6", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_style": "1", + "death_animation": "156", + "defence_animation": "154", + "lifepoints": "120", + "projectile": "968", + "range_animation": "5347", + "range_level": "75", + "strength_level": "100" + }, + { + "id": "418", + "name": "Rock Golem", + "examine": "Rock with attitude.", + "aggressive": "true", + "attack_level": "130", + "attack_speed": "6", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_style": "1", + "death_animation": "156", + "defence_animation": "154", + "lifepoints": "166", + "projectile": "968", + "range_animation": "5347", + "range_level": "80", + "strength_level": "130" + }, + { + "id": "419", + "name": "Zombie", + "examine": "Dead man walking.", + "attack_level": "5", + "attack_speed": "5", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "20", + "lifepoints": "14", + "magic_animation": "5578", + "magic_level": "5", + "melee_animation": "5578", + "range_animation": "5578", + "range_level": "5", + "safespot": null, + "strength_level": "5" + }, + { + "id": "420", + "name": "Zombie", + "examine": "Dead man walking.", + "attack_level": "10", + "attack_speed": "5", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "40", + "lifepoints": "14", + "magic_animation": "5578", + "magic_level": "10", + "melee_animation": "5578", + "range_animation": "5578", + "range_level": "10", + "safespot": null, + "strength_level": "10" + }, + { + "id": "421", + "name": "Zombie", + "examine": "Dead man walking.", + "attack_level": "15", + "attack_speed": "5", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "50", + "lifepoints": "30", + "magic_animation": "5578", + "magic_level": "15", + "melee_animation": "5578", + "range_animation": "5578", + "range_level": "15", + "safespot": null, + "strength_level": "15" + }, + { + "id": "422", + "name": "Zombie", + "examine": "Dead man walking.", + "attack_level": "45", + "attack_speed": "5", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "60", + "lifepoints": "79", + "magic_animation": "5578", + "magic_level": "45", + "melee_animation": "5578", + "range_animation": "5578", + "range_level": "45", + "safespot": null, + "strength_level": "45" + }, + { + "id": "423", + "name": "Zombie", + "examine": "Dead man walking.", + "attack_level": "45", + "attack_speed": "5", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "70", + "lifepoints": "120", + "magic_animation": "5578", + "magic_level": "35", + "melee_animation": "5578", + "range_animation": "5578", + "range_level": "45", + "safespot": null, + "strength_level": "45" + }, + { + "id": "424", + "name": "Zombie", + "examine": "Dead man walking.", + "attack_level": "45", + "attack_speed": "5", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "90", + "lifepoints": "159", + "magic_animation": "5578", + "magic_level": "45", + "melee_animation": "5578", + "range_animation": "5578", + "range_level": "45", + "safespot": null, + "strength_level": "45" + }, + { + "id": "425", + "name": "Shade", + "examine": "Dead but not gone.", + "attack_level": "6", + "combat_audio": "511,439,438", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "7", + "lifepoints": "8", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "6", + "weakness": "9" + }, + { + "id": "426", + "name": "Shade", + "examine": "Dead but not gone.", + "attack_level": "20", + "combat_audio": "511,439,438", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "17", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "20", + "weakness": "9" + }, + { + "id": "427", + "name": "Shade", + "examine": "Dead but not gone.", + "attack_level": "43", + "combat_audio": "511,439,438", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "28", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "43", + "weakness": "9" + }, + { + "id": "428", + "name": "Shade", + "examine": "Dead but not gone.", + "attack_level": "74", + "combat_audio": "511,439,438", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "80", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "4.2", + "strength_level": "74", + "weakness": "9" + }, + { + "id": "429", + "name": "Shade", + "examine": "Dead but not gone.", + "attack_level": "130", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "511,439,438", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "130", + "lifepoints": "170", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "4.2", + "strength_level": "90", + "weakness": "9" + }, + { + "id": "430", + "name": "Shade", + "examine": "Dead but not gone.", + "attack_level": "150", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "105", + "lifepoints": "100", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "150", + "weakness": "9" + }, + { + "id": "431", + "name": "Cyrisus" + }, + { + "id": "433", + "name": "Cyrisus" + }, + { + "id": "434", + "name": "Cyrisus" + }, + { + "id": "435", + "name": "Fallen Man", + "examine": "I hope he's not dead!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "436", + "name": "Fallen Man" + }, + { + "id": "437", + "name": "Cap'n Izzy No-Beard", + "examine": "Entrance clerk for the Brimhaven Agility Arena.", + "attack_level": "1", + "combat_audio": "498,500,499", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "438", + "name": "Tree spirit", + "examine": "A very angry nymph.", + "aggressive": "true", + "attack_level": "8", "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "498,500,499", + "death_animation": "97", + "defence_animation": "95", + "defence_level": "8", + "lifepoints": "25", + "magic_level": "1", + "melee_animation": "94", + "range_level": "1", + "safespot": null, + "strength_level": "8" + }, + { + "id": "439", + "name": "Tree spirit", + "examine": "A very angry nymph.", + "aggressive": "true", + "attack_level": "17", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "498,500,499", + "death_animation": "97", + "defence_animation": "95", + "defence_level": "17", + "lifepoints": "40", + "magic_level": "1", + "melee_animation": "94", + "range_level": "1", + "safespot": null, + "strength_level": "17" + }, + { + "id": "440", + "name": "Tree spirit", + "examine": "A very angry nymph.", + "aggressive": "true", + "attack_level": "38", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "498,500,499", + "death_animation": "97", + "defence_animation": "95", + "defence_level": "38", + "lifepoints": "60", + "magic_level": "1", + "melee_animation": "94", + "range_level": "1", + "safespot": null, + "strength_level": "38" + }, + { + "id": "441", + "name": "Tree spirit", + "examine": "A very angry nymph.", + "aggressive": "true", + "attack_level": "64", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "498,500,499", + "death_animation": "97", + "defence_animation": "95", + "defence_level": "64", + "lifepoints": "86", + "magic_level": "1", + "melee_animation": "94", + "range_level": "1", + "safespot": null, + "strength_level": "64" + }, + { + "id": "442", + "name": "Tree spirit", + "examine": "A very angry nymph.", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "498,500,499", + "death_animation": "97", + "defence_animation": "95", + "defence_level": "100", + "lifepoints": "120", + "magic_level": "1", + "melee_animation": "94", + "range_level": "1", + "safespot": null, + "strength_level": "100" + }, + { + "id": "443", + "name": "Tree spirit", + "examine": "A very angry nymph.", + "aggressive": "true", + "attack_level": "130", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "498,500,499", + "death_animation": "97", + "defence_animation": "95", + "defence_level": "130", + "lifepoints": "170", + "magic_level": "1", + "melee_animation": "94", + "range_level": "1", + "safespot": null, + "strength_level": "130" + }, + { + "id": "444", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "445", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "446", + "name": "Giant rat", + "examine": "Overgrown vermin.", + "aggressive": "true", + "attack_level": "5", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "2", + "lifepoints": "5", + "magic_animation": "0", + "melee_animation": "4933", + "range_animation": "0", + "range_level": "1", "respawn_delay": "60", - "defence_animation": "193", + "safespot": null, + "strength_level": "5", + "weakness": "8" + }, + { + "id": "447", + "name": "Jail guard", + "examine": "I wonder who he's guarding?", + "aggressive": "true", + "attack_level": "19", + "attack_speed": "5", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "21", + "lifepoints": "32", + "magic_animation": "0", + "melee_animation": "401", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "23" + }, + { + "id": "448", + "name": "Jail guard", + "examine": "I wonder who he's guarding?", + "aggressive": "true", + "attack_level": "19", + "attack_speed": "5", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "21", + "lifepoints": "32", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "23" + }, + { + "id": "449", + "name": "Jail guard", + "examine": "I wonder who he's guarding?", + "aggressive": "true", + "attack_level": "19", + "attack_speed": "5", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "21", + "lifepoints": "32", + "magic_animation": "0", + "melee_animation": "401", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "23" + }, + { + "id": "450", + "name": "Gull", + "examine": "Flappy bird.", + "water_npc": "true" + }, + { + "id": "451", + "name": "Gull", + "examine": "Flappy bird.", + "water_npc": "true" + }, + { + "id": "452", + "name": "Seth Groats", + "examine": "A large well built farmer.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "453", + "name": "Suit of armour", + "examine": "Aargh! It's alive!", + "attack_level": "16", + "attack_speed": "5", + "bonuses": "8,8,8,0,0,46,50,46,-12,45,0,10,0,0,0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "9", + "lifepoints": "29", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "14", + "weakness": "6" + }, + { + "id": "454", + "name": "Sanfew", + "examine": "An old druid." + }, + { + "id": "455", + "name": "Kaqemeex", + "examine": "A wise druid." + }, + { + "id": "456", + "name": "Father Aereck", + "examine": "He seems to be very devout.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "457", + "name": "Restless ghost", + "examine": "Eek! A ghost!", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "458", + "name": "Father Urhney", + "examine": "Very holy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "459", + "name": "Skeleton", + "examine": "It rattles when it moves.", + "aggressive": "true", + "attack_level": "3", + "combat_audio": "774,775,777", + "combat_style": "2", + "death_animation": "5491", + "defence_animation": "5489", + "defence_level": "5", + "lifepoints": "14", + "magic_animation": "5485", + "magic_level": "5", + "melee_animation": "5485", + "range_animation": "5485", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "3", + "weakness": "3" + }, + { + "id": "460", + "name": "Wizard Frumscone", + "examine": "A Wizard of the Magic Guild.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "461", + "name": "Magic Store owner", + "examine": "A Supplier of Magical items.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "462", + "name": "Wizard Distentor", + "examine": "Head of the Magic Guild.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "463", + "name": "Murphy" + }, + { + "id": "464", + "name": "Murphy" + }, + { + "id": "465", + "name": "Murphy" + }, + { + "id": "466", + "name": "Murphy" + }, + { + "id": "467", + "name": "Shark" + }, + { + "id": "468", + "name": "Shark" + }, + { + "id": "469", + "name": "King Bolren", + "examine": "It's a gnome. He looks important.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "470", + "name": "Commander Montai", + "examine": "It's a tree gnome.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "471", + "name": "Bolkoy" + }, + { + "id": "472", + "name": "Remsai" + }, + { + "id": "473", + "name": "Khazard trooper" + }, + { + "id": "475", + "name": "Khazard trooper", + "examine": "It's one of General Khazard's warriors.", + "attack_level": "32", + "attack_speed": "6", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "melee_animation": "401", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "32", + "weakness": "6" + }, + { + "id": "476", + "name": "Khazard trooper", + "examine": "An open eye of World-gorger.", + "attack_level": "1", + "defence_animation": "0", + "defence_level": "5", + "lifepoints": "11", + "magic_animation": "0", + "magic_level": "5", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "3" + }, + { + "id": "477", + "name": "Khazard warlord", + "examine": "He looks real nasty", + "aggressive": "true", + "attack_level": "38", + "attack_speed": "5", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "38", + "lifepoints": "54", + "magic_animation": "0", + "melee_animation": "401", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "38", + "weakness": "6" + }, + { + "id": "478", + "name": "Khazard commander", + "examine": "It's one of General Khazard's commanders.", + "attack_level": "35", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "428", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "479", + "name": "Gnome troop", + "examine": "It's a tree gnome trooper.", + "attack_level": "24", "death_animation": "196", - "name": "Gnome", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "melee_animation": "190", + "range_animation": "0", + "range_level": "32", + "safespot": null, + "strength_level": "24", + "weakness": "1" + }, + { + "id": "480", + "name": "Gnome troop" + }, + { + "id": "481", + "name": "Tracker gnome 1", + "examine": "It's a gnome who specialises in covert operations.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "482", + "name": "Tracker gnome 2", + "examine": "It's a gnome who specialises in covert operations.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "483", + "name": "Tracker gnome 3", + "examine": "It's a gnome who specialises in covert operations.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "484", + "name": "Local Gnome" + }, + { + "id": "485", + "name": "Local Gnome", + "examine": "It's a young tree gnome.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "486", + "name": "Kalron" + }, + { + "id": "487", + "name": "Giant", + "examine": "I guess he wants to be more than just the muscle.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "488", + "name": "Observatory professor", + "examine": "A man, learned in the ways of the stars.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "489", + "name": "Goblin guard", + "examine": "He doesn't look like he'd trust his own mother.", + "attack_level": "32", + "combat_audio": "469,472,471", + "death_animation": "6190", + "defence_animation": "0", + "defence_level": "37", + "lifepoints": "43", + "magic_animation": "0", + "melee_animation": "6199", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "37", + "weakness": "7" + }, + { + "id": "490", + "name": "Mummy", + "examine": "If the mummy is at school", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "491", + "name": "Ghost", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5542", + "defence_animation": "5541", + "defence_level": "1", + "lifepoints": "20", + "melee_animation": "5540", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "492", + "name": "Spirit of Scorpius", + "examine": "The essence of evil.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "493", + "name": "Grave scorpion", + "examine": "A vicious", + "aggressive": "true", + "attack_level": "5", + "combat_audio": "3611,3612,3610", + "death_animation": "6260", + "defence_animation": "0", + "defence_level": "7", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "6261", + "range_animation": "0", + "range_level": "7", + "respawn_delay": "60", + "safespot": null, + "strength_level": "5", + "weakness": "2" + }, + { + "id": "494", + "name": "Banker", + "examine": "He can look after my money.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "495", + "name": "Banker", + "examine": "Good with money.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "496", + "name": "Banker", + "examine": "He can look after my money." + }, + { + "id": "497", + "name": "Banker", + "examine": "She can look after my money." + }, + { + "id": "498", + "name": "Banker", + "examine": "Manages money momentarily.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "499", + "name": "Banker", + "examine": "He can look after my money.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "500", + "name": "Mosol Rei", + "examine": "A warrior from Shilo Village." + }, + { + "id": "501", + "name": "Spirit of Zadimus", + "examine": "An unquiet soul." + }, + { + "id": "502", + "name": "Undead one", + "examine": "A minion of Rashiliyia.", + "aggressive": "true", + "attack_level": "32", + "attack_speed": "5", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "32", + "weakness": "8" + }, + { + "id": "503", + "name": "Undead one", + "examine": "A minion of Rashiliyia.", + "attack_level": "33", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "33", + "lifepoints": "47", + "magic_animation": "0", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "33", + "weakness": "8" + }, + { + "id": "504", + "name": "Undead one", + "examine": "The animated dead; one of Rashiliyia's minions.", + "aggressive": "true", + "attack_level": "32", + "attack_speed": "5", + "death_animation": "5569", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "melee_animation": "5568", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "32", + "weakness": "8" + }, + { + "id": "505", + "name": "Undead one", + "examine": "The animated dead; one of Rashiliyia's minions.", + "aggressive": "true", + "attack_level": "33", + "attack_speed": "5", + "death_animation": "5575", + "defence_animation": "0", + "defence_level": "33", + "lifepoints": "47", + "magic_animation": "0", + "melee_animation": "5571", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "33", + "weakness": "8" + }, + { + "id": "506", + "name": "Rashiliyia ", + "examine": "The animated spirit of Rashiliyia the Zombie Queen." + }, + { + "id": "507", + "name": "Nazastarool", + "aggressive": "true", + "attack_level": "1", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "1", + "lifepoints": "100", + "melee_animation": "5571", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "508", + "name": "Nazastarool", + "aggressive": "true", + "attack_level": "1", + "death_animation": "5509", + "defence_animation": "5508", + "defence_level": "1", + "lifepoints": "75", + "melee_animation": "5507", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "509", + "name": "Nazastarool", + "aggressive": "true", + "attack_level": "1", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "1", + "lifepoints": "110", + "melee_animation": "5532", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "510", + "name": "Hajedy", + "examine": "A cart driver; it looks like he's quite experienced." + }, + { + "id": "511", + "name": "Vigroy", + "examine": "A cart driver; it looks like he's quite experienced." + }, + { + "id": "512", + "name": "Kaleb Paramaya", + "examine": "This is Kaleb Paramaya, a warm and friendly inn owner." + }, + { + "id": "513", + "name": "Yohnus", + "examine": "This is Yohnus - he runs the local blacksmiths." + }, + { + "id": "514", + "name": "Seravel", + "examine": "This is Seravel. He sells tickets for the 'Lady of the Waves.'" + }, + { + "id": "515", + "name": "Yanni Salika", + "examine": "Yanni Salika; he buys and sells antiques." + }, + { + "id": "516", + "name": "Obli", + "examine": "An intelligent-looking shop owner." + }, + { + "id": "517", + "name": "Fernahei", + "examine": "This is Fernahei; he owns the local fishing tackle shop." + }, + { + "id": "518", + "name": "Captain Shanks", + "examine": "He's the Captain of the 'Lady of the Waves'.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "519", + "name": "Bob", + "examine": "An expert on axes.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "520", + "name": "Shopkeeper", + "examine": "Sells stuff.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "521", + "name": "Shop assistant", + "examine": "Helps sell stuff.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "522", + "name": "Shopkeeper", + "examine": "Likes people spending money.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "523", + "name": "Shop assistant", + "examine": "Likes helping sell stuff.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "524", + "name": "Shopkeeper", + "examine": "A product of a consumerist society.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "525", + "name": "Shop assistant", + "examine": "Likes you more, the more you spend.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "526", + "name": "Shopkeeper", + "examine": "A product of a consumerist society.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "527", + "name": "Shop assistant", + "examine": "Likes you more, the more you spend.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "528", + "name": "Shopkeeper", + "examine": "Sells stuff." + }, + { + "id": "529", + "name": "Shop assistant", + "examine": "Loves you more, the more you spend." + }, + { + "id": "530", + "name": "Shopkeeper", + "examine": "Has an interesting assortment of items for sale.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "531", + "name": "Shop assistant", + "examine": "Works on commission.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "532", + "name": "Shopkeeper Kofi", + "examine": "He clearly takes pride in his appearance.", + "aggressive": "true", + "attack_level": "60", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "285", + "magic_animation": "0", + "magic_level": "60", + "range_animation": "0", + "range_level": "60", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "533", + "name": "Shop assistant", + "examine": "Needs a haircut.", + "aggressive": "true", + "attack_level": "60", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "285", + "magic_animation": "0", + "magic_level": "60", + "range_animation": "0", + "range_level": "60", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "534", + "name": "Fairy shopkeeper", + "examine": "Sells stuff.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "535", + "name": "Fairy shop assistant", + "examine": "Sells stuff.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "536", + "name": "Valaine" + }, + { + "id": "537", + "name": "Scavvo" + }, + { + "id": "538", + "name": "Peksa", + "examine": "Always up-to-date with the latest helmet fashions." + }, + { + "id": "539", + "name": "Silk trader", + "examine": "Very snappily dressed.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "540", + "name": "Gem trader", + "examine": "Makes his money selling rocks.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "541", + "name": "Zeke", + "examine": "Sells superior scimitars." + }, + { + "id": "542", + "name": "Louie Legs", + "examine": "For the finest in armoured legware.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "543", + "name": "Karim", + "examine": "Kebabs are full of meaty goodness!" + }, + { + "id": "544", + "name": "Ranael", + "examine": "She's an expert on armoured skirts." + }, + { + "id": "545", + "name": "Dommik", + "examine": "If Crafting's your thing, he's your man." + }, + { + "id": "546", + "name": "Zaff", + "examine": "Sells superior staffs." + }, + { + "id": "547", + "name": "Baraek", + "examine": "Animal skins are a specialty." + }, + { + "id": "548", + "name": "Thessalia", + "examine": "Interesting assortment of clothes on offer..." + }, + { + "id": "549", + "name": "Horvik", + "examine": "The man with the armour." + }, + { + "id": "550", + "name": "Lowe", + "examine": "Sells arrows." + }, + { + "id": "551", + "name": "Shopkeeper", + "examine": "Ironically, makes a living from swords.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "552", + "name": "Shop assistant", + "examine": "Helps the shopkeeper sell swords.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "553", + "name": "Aubury" + }, + { + "id": "554", + "name": "Fancy-dress shop owner", + "examine": "For the interesting clothing items you just can't find elsewhere.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "555", + "name": "Shopkeeper", + "examine": "Has a fine moustache.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "556", + "name": "Grum", + "examine": "Loves his gold!" + }, + { + "id": "557", + "name": "Wydin", + "examine": "Likes his food to be kept fresh." + }, + { + "id": "558", + "name": "Gerrant", + "examine": "A Fishing expert." + }, + { + "id": "559", + "name": "Brian", + "examine": "An expert on axes." + }, + { + "id": "560", + "name": "Jiminua", + "examine": "Goods for sale and trade." + }, + { + "id": "561", + "name": "Shopkeeper", + "examine": "Could stand to lose a few pounds.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "562", + "name": "Candle-maker", + "examine": "Has an odd smell about him.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "563", + "name": "Arhein" + }, + { + "id": "564", + "name": "Jukat", + "examine": "A being from a mysterious realm." + }, + { + "id": "565", + "name": "Lunderwin" + }, + { + "id": "566", + "name": "Irksol", + "examine": "Is he invisible, or just floating clothing?" + }, + { + "id": "567", + "name": "Fairy", + "examine": "Looks strange and mysterious.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "568", + "name": "Zambo", + "examine": "Appears slightly drunk." + }, + { + "id": "569", + "name": "Silver merchant", + "examine": "Looks fairly well fed.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "570", + "name": "Gem merchant", + "examine": "Seems very well-off.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "571", + "name": "Baker", + "examine": "So where are the butcher and the candlestick-maker?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "572", + "name": "Spice seller", + "examine": "Has a very exotic aroma about him.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "573", + "name": "Fur trader", + "examine": "Knows how to keep warm in the winter.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "574", + "name": "Silk merchant", + "examine": "Seems very well-off.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "575", + "name": "Hickton" + }, + { + "id": "576", + "name": "Harry" + }, + { + "id": "577", + "name": "Cassie", + "examine": "Nice eyes." + }, + { + "id": "578", + "name": "Frincos" + }, + { + "id": "579", + "name": "Drogo dwarf", + "examine": "He runs a Mining store.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "580", + "name": "Flynn", + "examine": "The mace salesman." + }, + { + "id": "581", + "name": "Wayne", + "examine": "An armourer." + }, + { + "id": "582", + "name": "Dwarf", + "examine": "I wonder if he wants to buy my junk?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "583", + "name": "Betty", + "examine": "She seems like a nice sort of person." + }, + { + "id": "584", + "name": "Herquin" + }, + { + "id": "585", + "name": "Rommik" + }, + { + "id": "586", + "name": "Gaius", + "examine": "Ironically, makes a living from swords." + }, + { + "id": "587", + "name": "Jatix", + "examine": "He runs the Herblore Shop." + }, + { + "id": "588", + "name": "Davon", + "examine": "An amulet trader." + }, + { + "id": "589", + "name": "Zenesha" + }, + { + "id": "590", + "name": "Aemad" + }, + { + "id": "591", + "name": "Kortan" + }, + { + "id": "592", + "name": "Roachey" + }, + { + "id": "593", + "name": "Frenita" + }, + { + "id": "594", + "name": "Nurmof" + }, + { + "id": "595", + "name": "Tea seller", + "examine": "He seems to sell tea.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "596", + "name": "Fat Tony", + "examine": "A pizza expert; in both making and eating.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "597", + "name": "Noterazzo" + }, + { + "id": "598", + "name": "Hairdresser", + "examine": "Anyone fancy a trim?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "599", + "name": "Make-over Mage", + "examine": "Master of the mystical make-over.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "600", + "name": "Hudo" + }, + { + "id": "601", + "name": "Rometti" + }, + { + "id": "602", + "name": "Gulluck" + }, + { + "id": "603", + "name": "Heckel Funch" + }, + { + "id": "604", + "name": "Thurgo", + "examine": "Dwarvish." + }, + { + "id": "605", + "name": "Sir Vyvin", + "examine": "An elderly White Knight." + }, + { + "id": "606", + "name": "Squire", + "examine": "Indentured servant of a Knight.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "607", + "name": "Gunnjorn" + }, + { + "id": "608", + "name": "Sir Amik Varze" + }, + { + "id": "609", + "name": "Fortress Guard", + "examine": "A generic evil henchman.", + "attack_level": "26", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "26", + "lifepoints": "37", + "magic_animation": "0", + "melee_animation": "428", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "26", + "weakness": "9" + }, + { + "id": "610", + "name": "Black Knight Captain", + "examine": "One of the Black Knights.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "611", + "name": "Witch", + "examine": "The Black Knights' resident witch.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "612", + "name": "Greldo" + }, + { + "id": "613", + "name": "Digsite workman", + "examine": "This person is working on the site.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "614", + "name": "Doug Deeping", + "examine": "This person is working on the site.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "615", + "name": "Student", + "examine": "A student busy studying the digsite.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "616", + "name": "Student", + "examine": "A student busy studying the digsite.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "617", + "name": "Student", + "examine": "A student busy studying the digsite.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "618", + "name": "Examiner", + "examine": "Upon examining the examiner you examine it is indeed an examiner!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "619", + "name": "Archaeological expert", + "examine": "An expert on archaeology.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "620", + "name": "Panning guide", + "examine": "A specialist in panning for gold.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "621", + "name": "Gnome baller", + "examine": "A professional gnome baller.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "622", + "name": "Gnome baller" + }, + { + "id": "623", + "name": "Gnome baller" + }, + { + "id": "624", + "name": "Gnome baller" + }, + { + "id": "625", + "name": "Gnome baller" + }, + { + "id": "626", + "name": "Gnome baller" + }, + { + "id": "627", + "name": "Gnome baller" + }, + { + "id": "628", + "name": "Gnome baller" + }, + { + "id": "629", + "name": "Gnome baller" + }, + { + "id": "630", + "name": "Gnome baller" + }, + { + "id": "631", + "name": "Gnome baller" + }, + { + "id": "632", + "name": "Gnome baller" + }, + { + "id": "633", + "name": "Gnome winger", + "examine": "A professional gnome baller.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "634", + "name": "Gnome winger" + }, + { + "id": "635", + "name": "Gnome ball referee", + "examine": "Keeps the game fair.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "636", + "name": "Cheerleader" + }, + { + "id": "637", + "name": "Juliet", + "examine": "A tearful damsel, maybe I can help her?" + }, + { + "id": "638", + "name": "Apothecary", + "examine": "A dealer in potions.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "639", + "name": "Romeo", + "examine": "Rather dense and soppy looking." + }, + { + "id": "640", + "name": "Father Lawrence", + "examine": "A religious man... And occasional drunk.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "641", + "name": "Charlie the Tramp", + "examine": "Looks down on his luck.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "642", + "name": "Katrine" + }, + { + "id": "643", + "name": "Weaponsmaster", + "examine": "Looks kind of obsessive...", + "attack_level": "15", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "15", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "15", + "weakness": "9" + }, + { + "id": "644", + "name": "Straven" + }, + { + "id": "645", + "name": "Jonny the beard", + "examine": "Looks kind of shifty...", + "attack_level": "1", + "combat_audio": "498,500,499", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "2", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "646", + "name": "Curator Haig Halen", + "examine": "Curator of the museum.", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "647", + "name": "King Roald" + }, + { + "id": "648", + "name": "King Roald", + "examine": "Varrock's resident monarch.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "649", + "name": "Archer", + "examine": "She looks quite experienced.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "650", + "name": "Warrior", + "examine": "He looks big and dumb.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "651", + "name": "Monk", + "examine": "He looks holy.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "652", + "name": "Wizard", + "examine": "He looks kind of puny...", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "prj_height": "3", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "653", + "name": "Fairy Queen" + }, + { + "id": "654", + "name": "Shamus" + }, + { + "id": "655", + "name": "Tree spirit", + "examine": "Guardian of the dramen tree.", + "attack_level": "45", + "attack_speed": "5", + "death_animation": "5534", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "64", + "magic_animation": "0", + "melee_animation": "5532", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "45", + "weakness": "9" + }, + { + "id": "656", + "name": "Cave monk", + "examine": "Unsurprisingly monk like.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "657", + "name": "Monk of Entrana", + "examine": "Holy looking.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "658", + "name": "Monk of Entrana", + "examine": "Holy looking.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "659", + "name": "Party Pete", + "examine": "He likes to paaaarty!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "660", + "name": "Knight", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "661", + "name": "Megan" + }, + { + "id": "662", + "name": "Lucy" + }, + { + "id": "663", + "name": "Man", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "664", + "name": "Boot" + }, + { + "id": "665", + "name": "Boot", + "examine": "A short and angry dwarf.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "666", + "name": "Caleb" + }, + { + "id": "667", + "name": "Chronozon", + "examine": "Chronozon the blood demon.", + "aggressive": "true", + "attack_level": "173", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "173", + "lifepoints": "60", + "magic_level": "1", + "melee_animation": "64", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "strength_level": "172" + }, + { + "id": "668", + "name": "Johnathon" + }, + { + "id": "669", + "name": "Hazelmere" + }, + { + "id": "670", + "name": "King Narnode Shareen", + "examine": "An important looking gnome.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "671", + "name": "Glough" + }, + { + "id": "672", + "name": "Anita" + }, + { + "id": "673", + "name": "Charlie" + }, + { + "id": "674", + "name": "Foreman", + "examine": "The boss!", + "attack_level": "20", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "28", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "9" + }, + { + "id": "675", + "name": "Shipyard worker", + "examine": "Builds ships for a living." + }, + { + "id": "676", + "name": "Femi" + }, + { + "id": "677", + "name": "Black demon", + "examine": "A big, scary, jet-black demon.", + "aggressive": "true", + "attack_level": "145", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", + "combat_audio": "397,399,398", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "152", + "lifepoints": "157", + "magic_animation": "64", + "magic_level": "1", + "melee_animation": "64", + "range_animation": "64", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "157", + "strength_level": "148", + "weakness": "4" + }, + { + "id": "678", + "name": "Guard", + "examine": "Keeps order in the ranging guild.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "679", + "name": "Ranging Guild Doorman", + "examine": "The keeper of the gates to the ranging guild.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "680", + "name": "Leatherworker", + "examine": "An expert leatherworker.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "681", + "name": "Held vampyre juvinate", + "examine": "Mysterious swamp lights...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "682", + "name": "Armour salesman", + "examine": "Supplier of Rangers armour.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "683", + "name": "Bow and Arrow salesman", + "examine": "Supplier of Archery equipment.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "684", + "name": "Tower Advisor", + "examine": "Tower keeper and competition judge.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "685", + "name": "Tower Advisor" + }, + { + "id": "686", + "name": "Tower Advisor" + }, + { + "id": "687", + "name": "Tower Advisor" + }, + { + "id": "688", + "name": "Tower Archer", + "examine": "Defender of the north tower.", + "aggressive": "true", + "attack_level": "7", + "combat_style": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "14", + "magic_animation": "0", + "melee_animation": "426", + "range_animation": "426", + "range_level": "10", + "respawn_delay": "60", + "safespot": null, + "strength_level": "7", + "weakness": "0" + }, + { + "id": "689", + "name": "Tower Archer", + "examine": "Defender of the east tower.", + "aggressive": "true", + "attack_level": "15", + "combat_style": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "28", + "magic_animation": "0", + "melee_animation": "426", + "range_animation": "426", + "range_level": "20", + "respawn_delay": "60", + "safespot": null, + "strength_level": "15", + "weakness": "0" + }, + { + "id": "690", + "name": "Tower Archer", + "examine": "Defender of the south tower.", + "aggressive": "true", + "attack_level": "22", + "combat_style": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "426", + "range_animation": "426", + "range_level": "30", + "respawn_delay": "60", + "safespot": null, + "strength_level": "22", + "weakness": "0" + }, + { + "id": "691", + "name": "Tower Archer", + "examine": "Defender of the west tower.", + "aggressive": "true", + "attack_level": "30", + "combat_style": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "57", + "magic_animation": "0", + "melee_animation": "426", + "range_animation": "426", + "range_level": "40", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "0" + }, + { + "id": "692", + "name": "Tribal Weapon Salesman", + "examine": "Supplier of authentic throwing weapons.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "693", + "name": "Competition Judge" + }, + { + "id": "694", + "name": "Ticket Merchant", + "examine": "Sells equipment in exchange for archery tickets.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "695", + "name": "Bailey" + }, + { + "id": "696", + "name": "Caroline", + "examine": "She looks very worried about something.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "697", + "name": "Holgart" + }, + { + "id": "698", + "name": "Holgart", + "examine": "A very good sailor.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "699", + "name": "Holgart" + }, + { + "id": "700", + "name": "Holgart" + }, + { + "id": "701", + "name": "Kent" + }, + { + "id": "702", + "name": "Fisherman" + }, + { + "id": "703", + "name": "Fisherman" + }, + { + "id": "704", + "name": "Fisherman" + }, + { + "id": "705", + "name": "Melee tutor", + "examine": "Harlan, ready to teach swordplay.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "706", + "name": "Wizard Mizgog", + "examine": "An old wizard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "707", + "name": "Wizard Grayzag", + "examine": "Master of imps." + }, + { + "id": "708", + "name": "Imp", + "examine": "A cheeky little imp.", + "attack_level": "2", + "attack_speed": "5", + "combat_audio": "534,536,535", + "death_animation": "172", + "defence_animation": "170", + "defence_level": "2", + "lifepoints": "8", + "magic_animation": "169", + "melee_animation": "169", + "movement_radius": "25", + "range_animation": "169", + "range_level": "1", + "safespot": null, + "strength_level": "2", + "weakness": "7" + }, + { + "id": "709", + "name": "Imp", + "examine": "A cheeky little imp.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "534,536,535", + "death_animation": "172", + "defence_animation": "170", + "defence_level": "1", + "lifepoints": "8", + "magic_animation": "169", + "melee_animation": "169", + "movement_radius": "25", + "range_animation": "169", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "710", + "name": "Alrena" + }, + { + "id": "711", + "name": "Bravek" + }, + { + "id": "712", + "name": "Carla" + }, + { + "id": "713", + "name": "Clerk", + "examine": "A bureaucratic administrator.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "714", + "name": "Edmond", + "examine": "A local civilian.", + "attack_level": "", + "combat_audio": "", + "defence_level": "", + "lifepoints": "", + "range_level": "", + "safespot": null, + "slayer_exp": "", + "strength_level": "" + }, + { + "id": "715", + "name": "Elena", + "examine": "She looks concerned." + }, + { + "id": "716", + "name": "Head Mourner", + "examine": "In charge of people with silly outfits." + }, + { + "id": "717", + "name": "Mourner", + "examine": "A mourner, or plague healer." + }, + { + "id": "718", + "name": "Mourner", + "examine": "A mourner, or plague healer." + }, + { + "id": "719", + "name": "Mourner", + "examine": "A mourner, or plague healer." + }, + { + "id": "720", + "name": "Recruiter", + "examine": "A member of the Ardougne Royal Army.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "721", + "name": "Ted Rehnison" + }, + { + "id": "722", + "name": "Martha Rehnison" + }, + { + "id": "723", + "name": "Billy Rehnison" + }, + { + "id": "724", + "name": "Milli Rehnison" + }, + { + "id": "725", + "name": "Jethick" + }, + { + "id": "726", + "name": "Man", + "examine": "One of Gielinor's many citizens.", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "727", + "name": "Man", + "examine": "One of Gielinor's many citizens.", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "728", + "name": "Man", + "examine": "One of Gielinor's many citizens.", + "attack_level": "", + "clue_level": "", + "combat_audio": "", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "", + "magic_animation": "", + "melee_animation": "", + "protect_style": "", + "range_animation": "", + "range_level": "", + "respawn_delay": "", + "safespot": "", + "slayer_exp": "", + "strength_level": "" + }, + { + "id": "729", + "name": "Man", + "examine": "One of Gielinor's many citizens.", + "attack_level": "", + "clue_level": "", + "combat_audio": "", + "death_animation": "", + "defence_animation": "", + "defence_level": "", + "lifepoints": "", + "magic_animation": "", + "melee_animation": "", + "range_animation": "", + "range_level": "", + "safespot": null, + "strength_level": "" + }, + { + "id": "730", + "name": "Man", + "examine": "One of Gielinor's many citizens.", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "731", + "name": "Bartender", + "examine": "I could get a beer from him.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "732", + "name": "Bartender", + "examine": "I could get a beer from him.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "733", + "name": "Bartender", + "examine": "I could get a beer from him." + }, + { + "id": "734", + "name": "Bartender", + "examine": "I could get a beer from him." + }, + { + "id": "735", + "name": "Bartender", + "examine": "I could get a beer from him.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "736", + "name": "Emily", + "examine": "Works in the Rising Sun." + }, + { + "id": "737", + "name": "Bartender", + "examine": "I could get a beer from him.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "738", + "name": "Bartender", + "examine": "I could get a beer from him.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "739", + "name": "Bartender", + "examine": "I could get a beer from him.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "740", + "name": "Trufitus", + "examine": "A wise old witch doctor." + }, + { + "id": "741", + "name": "Duke Horacio", + "examine": "Duke Horacio of Lumbridge.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "742", + "name": "Elvarg", + "examine": "Roar! A dragon!", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,40,40,30,20,0,0,0,0,0", + "death_animation": "4642", + "defence_animation": "89", + "defence_level": "70", + "lifepoints": "80", + "magic_level": "70", + "melee_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "strength_level": "70" + }, + { + "id": "743", + "name": "Ned", + "examine": "An old sailor." + }, + { + "id": "744", + "name": "Klarense", + "examine": "A young sailor." + }, + { + "id": "745", + "name": "Wormbrain", + "examine": "A badly-behaved goblin.", + "attack_level": "1", + "death_animation": "6204", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "1", + "magic_animation": "0", + "melee_animation": "6184", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "746", + "name": "Oracle" + }, + { + "id": "747", + "name": "Oziach", + "examine": "A strange little man." + }, + { + "id": "748", + "name": "Angry barbarian spirit" + }, + { + "id": "749", + "name": "Angry barbarian spirit", + "examine": "He looks a tad upset.", + "aggressive": "true", + "attack_level": "76", + "death_animation": "6727", + "defence_animation": "0", + "defence_level": "76", + "lifepoints": "108", + "magic_animation": "0", + "melee_animation": "6726", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "76", + "weakness": "6" + }, + { + "id": "750", + "name": "Enraged barbarian spirit", + "examine": "He looks a tad upset.", + "aggressive": "true", + "attack_level": "76", + "death_animation": "6727", + "defence_animation": "0", + "defence_level": "76", + "lifepoints": "108", + "magic_animation": "0", + "melee_animation": "6726", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "76", + "weakness": "6" + }, + { + "id": "751", + "name": "Berserk barbarian spirit", + "examine": "He looks a tad upset.", + "aggressive": "true", + "attack_level": "76", + "death_animation": "6727", + "defence_animation": "0", + "defence_level": "76", + "lifepoints": "108", + "magic_animation": "0", + "melee_animation": "6726", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "76", + "weakness": "6" + }, + { + "id": "752", + "name": "Ferocious barbarian spirit", + "examine": "He looks a tad upset.", + "aggressive": "true", + "attack_level": "76", + "bonuses": "80,100,60,70,85,70,70,90,60,100,50,90,90,0,0", + "death_animation": "6727", + "defence_animation": "0", + "defence_level": "76", + "lifepoints": "190", + "magic_animation": "0", + "melee_animation": "6726", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "76", + "weakness": "6" + }, + { + "id": "753", + "name": "Melzar the Mad", + "examine": "He looks totally insane!", + "aggressive": "true", + "attack_level": "28", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "40", + "magic_animation": "0", + "magic_level": "28", + "melee_animation": "423", + "range_animation": "0", + "range_level": "28", + "respawn_delay": "60", + "safespot": null, + "strength_level": "28", + "weakness": "10" + }, + { + "id": "754", + "name": "Peaceful barbarian spirit" + }, + { + "id": "755", + "name": "Morgan", + "examine": "He looks scared." + }, + { + "id": "756", + "name": "Dr Harlow", + "examine": "A retired vampyre hunter." + }, + { + "id": "757", + "name": "Count Draynor", + "examine": "Stop looking and run!", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "5", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "20", + "lifepoints": "4", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "758", + "name": "Fred the Farmer", + "examine": "A well-fed farmer.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "759", + "name": "Kittens" + }, + { + "id": "761", + "name": "Kitten" + }, + { + "id": "762", + "name": "Kitten" + }, + { + "id": "763", + "name": "Kitten" + }, + { + "id": "764", + "name": "Kitten" + }, + { + "id": "765", + "name": "Kitten" + }, + { + "id": "766", + "name": "Kitten" + }, + { + "id": "767", + "name": "Crate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "combat_style": "2", + "death_animation": "196", + "defence_animation": "194", + "defence_level": "1", + "lifepoints": "88", + "melee_animation": "192", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "768", + "name": "Cat" + }, + { + "id": "769", + "name": "Cat" + }, + { + "id": "770", + "name": "Cat" + }, + { + "id": "771", + "name": "Cat" + }, + { + "id": "772", + "name": "Cat" + }, + { + "id": "773", + "name": "Cat" + }, + { + "id": "774", + "name": "Overgrown cat" + }, + { + "id": "775", + "name": "Overgrown cat" + }, + { + "id": "776", + "name": "Overgrown cat" + }, + { + "id": "777", + "name": "Overgrown cat" + }, + { + "id": "778", + "name": "Overgrown cat", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "66", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "779", + "name": "Overgrown cat" + }, + { + "id": "780", + "name": "Gertrude" + }, + { + "id": "781", + "name": "Shilop", + "examine": "One of Gertrude's Sons." + }, + { + "id": "782", + "name": "Philop" + }, + { + "id": "783", + "name": "Wilough", + "examine": "One of Gertrude's Sons." + }, + { + "id": "784", + "name": "Kanel" + }, + { + "id": "785", + "name": "Civilian", + "examine": "A citizen of Ardougne.", + "attack_level": "", + "death_animation": "", + "defence_animation": "", + "defence_level": "", + "lifepoints": "", + "magic_animation": "", + "melee_animation": "", + "range_animation": "", + "range_level": "", + "safespot": null, + "strength_level": "" + }, + { + "id": "786", + "name": "Civilian", + "examine": "A citizen of Ardougne.", + "attack_level": "", + "death_animation": "", + "defence_animation": "", + "defence_level": "", + "lifepoints": "", + "magic_animation": "", + "melee_animation": "", + "range_animation": "", + "range_level": "", + "safespot": null, + "strength_level": "" + }, + { + "id": "787", + "name": "Civilian", + "examine": "A citizen of Ardougne.", + "attack_level": "", + "death_animation": "", + "defence_animation": "", + "defence_level": "", + "lifepoints": "", + "magic_animation": "", + "melee_animation": "", + "range_animation": "", + "range_level": "", + "safespot": null, + "strength_level": "" + }, + { + "id": "788", + "name": "Garv", + "examine": "A diligent guard." + }, + { + "id": "789", + "name": "Grubor", + "examine": "A rough looking thief." + }, + { + "id": "790", + "name": "Letham", + "examine": "A gnome who's supposed to be cleaning up a mess.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "791", + "name": "Seth" + }, + { + "id": "792", + "name": "Grip", + "examine": "Looks like he's been in the wars." + }, + { + "id": "793", + "name": "Alfonse the waiter", + "examine": "Smartly dressed, and ready to deliver food.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "794", + "name": "Charlie the cook", + "examine": "Distinctly cook-like.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "795", + "name": "Ice Queen", + "examine": "A cold hearted lady.", + "attack_level": "95", + "bonuses": "0,0,0,0,0,30,40,20,10,30,0,0,0,0,0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "95", + "lifepoints": "104", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "94", + "weakness": "10" + }, + { + "id": "796", + "name": "Achietties", + "examine": "Distinctly heroic." + }, + { + "id": "797", + "name": "Helemos" + }, + { + "id": "798", + "name": "Velrak the explorer", + "examine": "He looks cold and hungry.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "799", + "name": "Pirate Guard", + "examine": "A morally ambiguous guard.", + "attack_level": "30", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "800", + "name": "Fishing spot", + "examine": "It looks like there might be eels swimming in the lava.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "801", + "name": "Abbot Langley", + "examine": "A holy man.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "802", + "name": "Brother Jered", + "examine": "A holy man.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "803", + "name": "Monk", + "examine": "A holy man.", + "attack_level": "12", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "12", + "lifepoints": "17", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "12", + "weakness": "9" + }, + { + "id": "804", + "name": "Tanner", + "examine": "Manufacturer of fine leathers.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "805", + "name": "Master Crafter", + "examine": "He's in charge of the Crafting Guild.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "806", + "name": "Donovan the Family Handyman", + "examine": "He looks very tired...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "807", + "name": "Pierre", + "examine": "His job doesn't look very fun..." + }, + { + "id": "808", + "name": "Hobbes", + "examine": "He looks kind of stuck up..." + }, + { + "id": "809", + "name": "Louisa", + "examine": "She looks like she enjoys her job." + }, + { + "id": "810", + "name": "Mary", + "examine": "She looks very nervous..." + }, + { + "id": "811", + "name": "Stanford", + "examine": "He looks like he spends a lot of time outdoor." + }, + { + "id": "812", + "name": "Guard", + "examine": "An officer of the Law.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "813", + "name": "Gossip", + "examine": "One of those people who love to gossip!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "814", + "name": "Anna", + "examine": "She's dressed in a red top and green trousers." + }, + { + "id": "815", + "name": "Bob", + "examine": "He's dressed all in red." + }, + { + "id": "816", + "name": "Carol", + "examine": "She's wearing a blue top and red trousers." + }, + { + "id": "817", + "name": "David", + "examine": "He's dressed all in green." + }, + { + "id": "818", + "name": "Elizabeth", + "examine": "She's wearing a green top and blue trousers." + }, + { + "id": "819", + "name": "Frank", + "examine": "He's dressed all in blue." + }, + { + "id": "820", + "name": "Poison Salesman", + "examine": "He sure likes to sell stuff!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "821", + "name": "Sinclair Guard dog", + "examine": "Big, noisy, and scary looking!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "822", + "name": "Ana" + }, + { + "id": "823", + "name": "Ana" + }, + { + "id": "824", + "name": "Female slave" + }, + { + "id": "825", + "name": "Male slave", + "examine": "It looks like he's been here a long time.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "826", + "name": "Escaping slave" + }, + { + "id": "827", + "name": "Rowdy slave", + "examine": "He looks a bit aggressive.", + "aggressive": "true", + "attack_level": "5", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "5", + "weakness": "9" + }, + { + "id": "828", + "name": "Shanty Claws" + }, + { + "id": "829", + "name": "Mercenary Captain" + }, + { + "id": "830", + "name": "Mercenary Captain", + "examine": "He looks a bit aggressive.", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "28", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "831", + "name": "Captain Siad", + "examine": "He's in control of the whole mining camp.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "832", + "name": "Al Shabim" + }, + { + "id": "833", + "name": "Bedabin Nomad", + "examine": "A Bedabin nomad", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "834", + "name": "Bedabin Nomad Guard", + "examine": "A Bedabin nomad guard - it looks like he's protecting an area.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "835", + "name": "Irena", + "examine": "A resident of Al Kharid." + }, + { + "id": "836", + "name": "Shantay", + "examine": "He's in control of the Shantay Pass." + }, + { + "id": "837", + "name": "Shantay Guard", + "examine": "He patrols the Shantay Pass.", + "attack_level": "11", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "11", + "lifepoints": "15", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "11", + "weakness": "9" + }, + { + "id": "838", + "name": "Shantay Guard", + "examine": "He patrols the Shantay Pass.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "839", + "name": "Desert Wolf", + "examine": "A vicious desert wolf.", + "attack_level": "11", + "death_animation": "6558", + "defence_animation": "0", + "defence_level": "11", + "lifepoints": "15", + "magic_animation": "0", + "melee_animation": "6559", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "11", + "weakness": "9" + }, + { + "id": "840", + "name": "Ugthanki", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "9674", + "defence_level": "1", + "lifepoints": "46", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "841", + "name": "Mine cart driver", + "examine": "He looks busy attending to his cart.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "842", + "name": "Rowdy Guard", + "examine": "This pickaxe has been possessed by a dwarf ancestor spirit.", + "aggressive": "true", + "attack_level": "40", + "death_animation": "188", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "400", + "magic_animation": "0", + "melee_animation": "185", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "40" + }, + { + "id": "843", + "name": "RPDT employee", + "examine": "Inefficient looking.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "844", + "name": "Horacio" + }, + { + "id": "846", + "name": "Kangai Mau", + "examine": "A happening kind of guy!" + }, + { + "id": "847", + "name": "Head chef", + "examine": "Despite his name", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "848", + "name": "Blurberry" + }, + { + "id": "849", + "name": "Barman" + }, + { + "id": "850", + "name": "Aluft Gianne snr.", + "examine": "The famous tree gnome chef.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "851", + "name": "Gnome Waiter", + "examine": "He can serve you gnome food.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "852", + "name": "Ogre chieftain", + "examine": "Tough-looking.", + "attack_level": "75", + "attack_speed": "4", + "bonuses": "5,5,5,0,0,0,0,0,0,0,0,7,0,0,0", + "defence_animation": "0", + "defence_level": "75", + "lifepoints": "60", + "magic_animation": "0", + "magic_level": "1", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "300", + "safespot": null, + "strength_level": "71", + "weakness": "7" + }, + { + "id": "853", + "name": "Og" + }, + { + "id": "854", + "name": "Grew" + }, + { + "id": "855", + "name": "Toban" + }, + { + "id": "856", + "name": "Gorad", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "81", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "857", + "name": "Ogre guard" + }, + { + "id": "858", + "name": "Ogre guard", + "examine": "These ogres protect the city.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "7" + }, + { + "id": "859", + "name": "Ogre guard", + "examine": "An ogre that guards.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "7" + }, + { + "id": "860", + "name": "Ogre guard" + }, + { + "id": "861", + "name": "Ogre guard" + }, + { + "id": "862", + "name": "City guard", + "examine": "Tries to keep the peace.", + "attack_level": "58", + "death_animation": "8576", + "defence_animation": "0", + "defence_level": "58", + "lifepoints": "331", + "magic_animation": "0", + "melee_animation": "2100", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "58", + "weakness": "7" + }, + { + "id": "863", + "name": "Scared skavid", + "examine": "Frightened-looking.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "864", + "name": "Mad skavid", + "examine": "Looks mad.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "865", + "name": "Skavid" + }, + { + "id": "866", + "name": "Skavid" + }, + { + "id": "867", + "name": "Skavid" + }, + { + "id": "868", + "name": "Skavid" + }, + { + "id": "869", + "name": "Skavid" + }, + { + "id": "870", + "name": "Enclave guard", + "examine": "Big and ugly looking.", + "attack_level": "58", + "death_animation": "8576", + "defence_animation": "0", + "defence_level": "58", + "lifepoints": "331", + "magic_animation": "0", + "melee_animation": "2100", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "58", + "weakness": "7" + }, + { + "id": "871", + "name": "Watchtower Wizard" + }, + { + "id": "872", + "name": "Watchtower Wizard", + "examine": "The hat is a dead giveaway.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "873", + "name": "Ogre trader", + "examine": "Funnily enough", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "874", + "name": "Ogre merchant", + "examine": "Funnily enough", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "875", + "name": "Ogre trader", + "examine": "Funnily enough", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "876", + "name": "Ogre trader" + }, + { + "id": "877", + "name": "Tower guard", + "examine": "Tries to keep the peace.", + "attack_level": "17", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "17", + "lifepoints": "97", + "magic_animation": "0", + "melee_animation": "386", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "17", + "weakness": "7" + }, + { + "id": "878", + "name": "Colonel Radick", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "71", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "879", + "name": "Delrith", + "attack_level": "1", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "1", + "lifepoints": "7", + "melee_animation": "64", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "880", + "name": "Weakened Delrith" + }, + { + "id": "881", + "name": "Traiborn", + "examine": "An old wizard." + }, + { + "id": "882", + "name": "Gypsy Aris", + "examine": "An old gypsy lady." + }, + { + "id": "883", + "name": "Sir Prysin", + "examine": "One of the king's knights." + }, + { + "id": "884", + "name": "Captain Rovin", + "examine": "The head of the palace guard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "885", + "name": "Ceril Carnillean", + "examine": "Head of the Carnillean household.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "886", + "name": "Claus the chef", + "examine": "The Carnillean family chef." + }, + { + "id": "887", + "name": "Guard", + "examine": "On special duty to protect the Canilleans.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "888", + "name": "Philipe Carnillean" + }, + { + "id": "889", + "name": "Henryeta Carnillean", + "examine": "Ceril Carnillean's wife." + }, + { + "id": "890", + "name": "Butler Jones", + "examine": "The Carnellian family butler." + }, + { + "id": "891", + "name": "Alomone", + "examine": "Leader of the Hazeel cult." + }, + { + "id": "892", + "name": "Hazeel" + }, + { + "id": "893", + "name": "Clivet", + "examine": "A member of the Hazeel cult.", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "811", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "894", + "name": "Hazeel Cultist", + "examine": "A member of the Hazeel cult.", + "attack_level": "15", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "28", + "magic_animation": "0", + "magic_level": "20", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "15", + "weakness": "3" + }, + { + "id": "895", + "name": "Boy", + "examine": "A sad looking child.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "896", + "name": "Nora T. Hagg" + }, + { + "id": "897", + "name": "Witch's experiment", + "examine": "Looks unnatural.", + "attack_level": "18", + "attack_speed": "4", + "death_animation": "258", + "defence_animation": "0", + "defence_level": "19", + "lifepoints": "21", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "255", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "10", + "weakness": "7" + }, + { + "id": "898", + "name": "Witch's experiment (second form)", + "examine": "Looks unnatural.", + "attack_level": "28", + "attack_speed": "4", + "death_animation": "5329", + "defence_animation": "0", + "defence_level": "29", + "lifepoints": "31", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "5327", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "7" + }, + { + "id": "899", + "name": "Witch's experiment (third form)", + "examine": "Looks unnatural.", + "attack_level": "38", + "attack_speed": "4", + "death_animation": "4929", + "defence_animation": "0", + "defence_level": "39", + "lifepoints": "41", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4925", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "7" + }, + { + "id": "900", + "name": "Witch's experiment (fourth form)", + "examine": "Looks unnatural.", + "attack_level": "48", + "attack_speed": "4", + "death_animation": "6558", + "defence_animation": "0", + "defence_level": "49", + "lifepoints": "51", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "6559", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "40", + "weakness": "7" + }, + { + "id": "901", + "name": "Mouse" + }, + { + "id": "902", + "name": "Gundai" + }, + { + "id": "903", + "name": "Lundail" + }, + { + "id": "904", + "name": "Chamber guardian", + "examine": "He hasn't seen much sun lately.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "905", + "name": "Kolodion", + "examine": "Runs the Mage Arena.", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "slayer_exp": "0", + "strength_level": "1" + }, + { + "id": "906", + "name": "Kolodion" + }, + { + "id": "907", + "name": "Kolodion", + "examine": "He's a shape-shifter", + "attack_level": "42", + "attack_speed": "7", + "combat_style": "2", + "death_animation": "1816", + "defence_animation": "404", + "defence_level": "20", + "lifepoints": "3", + "magic_level": "75", + "melee_animation": "811", + "range_level": "1", + "safespot": null, + "slayer_exp": "0", + "strength_level": "1" + }, + { + "id": "908", + "name": "Kolodion", + "examine": "He's a shape-shifter", + "attack_level": "74", + "attack_speed": "7", + "combat_style": "2", + "death_animation": "133", + "defence_animation": "404", + "defence_level": "25", + "lifepoints": "65", + "magic_level": "89", + "melee_animation": "132", + "range_level": "1", + "safespot": null, + "slayer_exp": "0", + "strength_level": "1" + }, + { + "id": "909", + "name": "Kolodion", + "examine": "He's a shape-shifter", + "attack_level": "74", + "attack_speed": "7", + "combat_style": "2", + "death_animation": "5323", + "defence_animation": "5320", + "defence_level": "28", + "lifepoints": "65", + "magic_level": "89", + "melee_animation": "5322", + "range_level": "1", + "safespot": null, + "slayer_exp": "0", + "strength_level": "1" + }, + { + "id": "910", + "name": "Kolodion", + "examine": "He's a shape-shifter", + "attack_level": "74", + "attack_speed": "7", + "combat_style": "2", + "death_animation": "714", + "defence_animation": "404", + "defence_level": "30", + "lifepoints": "78", + "magic_level": "89", + "melee_animation": "811", + "range_level": "1", + "safespot": null, + "slayer_exp": "0", + "strength_level": "1" + }, + { + "id": "911", + "name": "Kolodion", + "examine": "He's a shape-shifter", + "attack_level": "85", + "attack_speed": "7", + "death_animation": "68", + "defence_animation": "65", + "defence_level": "105", + "lifepoints": "107", + "magic_level": "80", + "melee_animation": "69", + "range_level": "1", + "safespot": null, + "slayer_exp": "0", + "strength_level": "98" + }, + { + "id": "912", + "name": "Battle mage", + "examine": "He kills in the name of Zamorak.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "120", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "811", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "150", + "safespot": null, + "strength_level": "1", + "weakness": "3" + }, + { + "id": "913", + "name": "Battle mage", + "examine": "He kills in the name of Saradomin.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "120", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "811", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "150", + "safespot": null, + "slayer_exp": "0", + "strength_level": "1", + "weakness": "3" + }, + { + "id": "914", + "name": "Battle mage", + "examine": "He kills in the name of Guthix.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "196", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "120", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "197", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "150", + "safespot": null, + "slayer_exp": "0", + "strength_level": "1", + "weakness": "3" + }, + { + "id": "915", + "name": "Leela", + "examine": "She comes from Al-Kharid." + }, + { + "id": "916", + "name": "Joe", + "examine": "A crafter at the pinnacle of his art.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "917", + "name": "Jail guard", + "examine": "I wonder who he's guarding?", + "aggressive": "true", + "attack_level": "19", + "attack_speed": "5", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "21", + "lifepoints": "32", + "magic_animation": "0", + "melee_animation": "401", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "23" + }, + { + "id": "918", + "name": "Ned" + }, + { + "id": "919", + "name": "Lady Keli", + "examine": "An infamous bandit." + }, + { + "id": "920", + "name": "Prince Ali", + "examine": "A young prince." + }, + { + "id": "921", + "name": "Prince Ali" + }, + { + "id": "922", + "name": "Aggie", + "examine": "A witch." + }, + { + "id": "923", + "name": "Hassan", + "examine": "The emir's chief advisor and physician.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "924", + "name": "Osman", + "examine": "Spymaster of Al Kharid." + }, + { + "id": "925", + "name": "Border Guard", + "examine": "Guards the border between Al Kharid and the Kingdom of Misthalin.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "926", + "name": "Border Guard" + }, + { + "id": "927", + "name": "Fishing spot" + }, + { + "id": "928", + "name": "Gujuo" + }, + { + "id": "929", + "name": "Ungadulu" + }, + { + "id": "930", + "name": "Ungadulu" + }, + { + "id": "931", + "name": "Jungle savage", + "examine": "An aggressive native of the Kharazi Jungle.", + "aggressive": "true", + "attack_level": "44", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "44", + "lifepoints": "62", + "magic_animation": "0", + "melee_animation": "428", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "44", + "weakness": "6" + }, + { + "id": "932", + "name": "Fionella", + "examine": "She sells general items at the Legends Guild." + }, + { + "id": "933", + "name": "Siegfried Erkle" + }, + { + "id": "934", + "name": "Nezikchened", + "aggressive": "true", + "attack_level": "1", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "1", + "lifepoints": "150", + "melee_animation": "64", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "935", + "name": "Viyeldi" + }, + { + "id": "936", + "name": "San Tojalon" + }, + { + "id": "937", + "name": "Irvig Senay" + }, + { + "id": "938", + "name": "Ranalph Devere", + "aggressive": "true", + "attack_level": "1", + "death_animation": "5491", + "defence_animation": "5489", + "defence_level": "1", + "lifepoints": "130", + "melee_animation": "5485", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "939", + "name": "Boulder", + "examine": "I wonder what this is doing here.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "940", + "name": "Echned Zekin" + }, + { + "id": "941", + "name": "Green dragon", + "examine": "Must be related to Elvarg.", + "aggressive": "true", + "attack_level": "68", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,40,40,30,20,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "68", + "lifepoints": "75", + "magic_animation": "80", + "magic_level": "68", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "75", + "strength_level": "68", + "weakness": "3" + }, + { + "id": "942", + "name": "Master chef", + "examine": "An expert on all things culinary.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "943", + "name": "Survival expert", + "examine": "Very much an outdoors type.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "944", + "name": "Combat instructor", + "examine": "An expert on all forms of combat.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "945", + "name": "RuneScape guide", + "examine": "Your introduction to the world of Gielinor.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "946", + "name": "Magic instructor", + "examine": "A master of Magic.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "947", + "name": "Financial advisor", + "examine": "An official representative from the First National Bank of Gielinor.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "948", + "name": "Mining instructor", + "examine": "An expert on Mining-related skills.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "949", + "name": "Quest guide", + "examine": "Your introduction to the world of Gielinor.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "950", + "name": "Giant rat", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "1", + "lifepoints": "5", + "melee_animation": "4933", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "951", + "name": "Chicken", + "examine": "Yep. Definitely a chicken.", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "355,357,356", + "death_animation": "5389", + "defence_animation": "5388", "defence_level": "1", "lifepoints": "3", + "magic_animation": "5387", + "melee_animation": "5387", + "range_animation": "5387", + "range_level": "1", + "respawn_delay": "18", + "safespot": null, + "strength_level": "1" + }, + { + "id": "952", + "name": "Fishing spot" + }, + { + "id": "953", + "name": "Banker" + }, + { + "id": "954", + "name": "Brother Brace", + "examine": "A holy man.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "955", + "name": "Cow", + "examine": "Converts grass to beef.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "369,371,370", + "death_animation": "5851", + "defence_animation": "5850", + "defence_level": "1", + "lifepoints": "8", + "magic_animation": "5849", + "melee_animation": "5849", + "range_animation": "5849", + "range_level": "1", + "safespot": null, + "slayer_exp": "8", "strength_level": "1", - "id": "2251", - "range_level": "1", - "attack_level": "1" - }, - { - "name": "Crow", - "id": "2252" - }, - { - "name": "Bed", - "id": "2254" - }, - { - "name": "Thing under the bed", - "id": "2255" - }, - { - "name": "Mage of Zamorak", - "id": "2257" - }, - { - "name": "Mage of Zamorak", - "id": "2259" - }, - { - "name": "Mage of Zamorak", - "id": "2260" - }, - { - "name": "Brian O'Richard", - "id": "2266" - }, - { - "name": "Rogue Guard", - "id": "2268" - }, - { - "name": "Martin Thwait", - "id": "2270" - }, - { - "name": "Spin Blades", - "id": "2273" - }, - { - "name": "Rug Merchant", - "id": "2295" - }, - { - "name": "Rug Merchant", - "id": "2297" - }, - { - "name": "Rug Station Attendant", - "id": "2299" - }, - { - "name": "Sarah", - "id": "2302" - }, - { - "name": "Vanessa", - "id": "2305" - }, - { - "name": "Richard", - "id": "2306" - }, - { - "name": "Alice", - "id": "2307" - }, - { - "name": "Capt' Arnav", - "id": "2308" - }, - { - "examine": "In his former life an expert brewer.", - "name": "Metarialus", - "id": "2322" - }, - { - "name": "Sick-looking sheep (1)", - "id": "2345" - }, - { - "name": "Sick-looking sheep (2)", - "id": "2346" - }, - { - "name": "Sick-looking sheep (3)", - "id": "2347" - }, - { - "name": "Sick-looking sheep (4)", - "id": "2348" - }, - { - "name": "Mourner", - "id": "2349" - }, - { - "name": "Mourner", - "id": "2350" - }, - { - "name": "Mourner", - "id": "2351" - }, - { - "name": "Eudav", - "id": "2352" - }, - { - "name": "Oronwen", - "id": "2353" - }, - { - "name": "Dalldav", - "id": "2356" - }, - { - "name": "Gethin", - "id": "2357" - }, - { - "name": "Arianwyn", - "id": "2358" - }, - { - "name": "Goreu", - "id": "2363" - }, - { - "name": "Ysgawyn", - "id": "2364" - }, - { - "name": "Arvel", - "id": "2365" - }, - { - "name": "Mawrth", - "id": "2366" - }, - { - "name": "Kelyn", - "id": "2367" - }, - { - "name": "Eoin", - "id": "2368" - }, - { - "name": "Iona", - "id": "2369" - }, - { - "name": "Gnome", - "id": "2370" - }, - { - "name": "Eluned", - "id": "2375" - }, - { - "name": "Sick-looking sheep (1)", - "id": "2377" - }, - { - "name": "Sick-looking sheep (2)", - "id": "2378" - }, - { - "name": "Sick-looking sheep (3)", - "id": "2379" - }, - { - "name": "Sick-looking sheep (4)", - "id": "2380" - }, - { - "name": "Cart conductor", - "id": "2403" - }, - { - "name": "Red Axe Director", - "id": "2410" - }, - { - "name": "Red Axe Director", - "id": "2411" - }, - { - "name": "Red Axe Henchman", - "id": "2412" - }, - { - "name": "Red Axe Henchman", - "id": "2413" - }, - { - "name": "Red Axe Henchman", - "id": "2414" - }, - { - "name": "Colonel Grimsson", - "id": "2415" - }, - { - "name": "Colonel Grimsson", - "id": "2416" - }, - { - "name": "Ogre shaman", - "id": "2417" - }, - { - "name": "Ogre shaman", - "id": "2418" - }, - { - "name": "Grunsh", - "id": "2419" - }, - { - "name": "Gnome emissary", - "id": "2420" - }, - { - "name": "Gnome companion", - "id": "2421" - }, - { - "name": "Gnome companion", - "id": "2422" - }, - { - "name": "Gunslik", - "id": "2424" - }, - { - "name": "Nolar", - "id": "2425" - }, - { - "name": "Factory Worker", - "id": "2426" - }, - { - "name": "Cart conductor", - "id": "2427" - }, - { - "name": "Gauss", - "id": "2428" + "weakness": "8" }, { + "id": "956", "name": "Drunken Dwarf", - "id": "2429" - }, - { - "name": "Rowdy dwarf", - "id": "2430" - }, - { - "name": "Ulifed", - "id": "2431" - }, - { - "name": "Red Axe Henchman", - "id": "2432" - }, - { - "name": "Red Axe Henchman", - "id": "2433" - }, - { - "name": "Ogre shaman", - "id": "2434" - }, - { - "name": "Jarvald", - "id": "2435" - }, - { - "name": "Jarvald", - "id": "2437" - }, - { - "name": "Jarvald", - "id": "2438" - }, - { - "name": "Door-support", - "id": "2440" - }, - { - "name": "Door", - "id": "2441" - }, - { - "name": "Door", - "id": "2442" - }, - { - "name": "Door", - "id": "2444" - }, - { - "name": "Door", - "id": "2445" - }, - { - "name": "Door-support", - "id": "2446" - }, - { - "name": "Door", - "id": "2447" - }, - { - "name": "Door", - "id": "2448" - }, - { - "name": "Egg", - "id": "2449" - }, - { - "name": "Egg", - "id": "2450" - }, - { - "name": "Egg", - "id": "2451" - }, - { - "name": "Freaky Forester", - "id": "2458" - }, - { - "name": "Frog", - "id": "2469" - }, - { - "name": "Frog", - "id": "2470" - }, - { - "name": "Frog", - "id": "2471" - }, - { - "name": "Frog", - "id": "2472" - }, - { - "name": "Frog", - "id": "2473" - }, - { - "name": "Frog prince", - "id": "2474" - }, - { - "name": "Frog princess", - "id": "2475" - }, - { - "name": "Evil Bob", - "id": "2478" - }, - { - "name": "Servant", - "id": "2480" - }, - { - "name": "Bush snake", - "id": "2483" - }, - { - "name": "Broodoo victim", - "id": "2498" - }, - { - "name": "Broodoo victim", - "id": "2500" - }, - { - "name": "Broodoo victim", - "id": "2502" - }, - { - "name": "Sharimika", - "id": "2504" - }, - { - "name": "Mamma Bufetta", - "id": "2507" - }, - { - "name": "Layleen", - "id": "2510" - }, - { - "name": "Karaday", - "id": "2513" - }, - { - "name": "Safta Doc", - "id": "2516" - }, - { - "name": "Gabooty", - "id": "2519" - }, - { - "name": "Fanellaman", - "id": "2522" - }, - { - "name": "Jagbakoba", - "id": "2525" - }, - { - "name": "Murcaily", - "id": "2528" - }, - { - "name": "Rionasta", - "id": "2531" - }, - { - "name": "Mahogany", - "id": "2534" - }, - { - "name": "Teak", - "id": "2535" - }, - { - "name": "Niles", - "id": "2536" - }, - { - "name": "Miles", - "id": "2537" - }, - { - "name": "Giles", - "id": "2538" - }, - { - "name": "Dr Jekyll", - "id": "2540" - }, - { - "name": "Mr Hyde", - "id": "2541" - }, - { - "name": "Mr Hyde", - "id": "2542" - }, - { - "name": "Mr Hyde", - "id": "2543" - }, - { - "name": "Mr Hyde", - "id": "2544" - }, - { - "name": "Mr Hyde", - "id": "2545" - }, - { - "name": "Mr Hyde", - "id": "2546" - }, - { - "name": "Blackjack seller", - "id": "2548" - }, - { - "name": "Dwarven Miner", - "id": "2550" - }, - { - "name": "Dwarven Miner", - "id": "2551" - }, - { - "name": "Dwarven Miner", - "id": "2552" - }, - { - "name": "Tin ore", - "id": "2554" - }, - { - "name": "Copper ore", - "id": "2555" - }, - { - "name": "Iron ore", - "id": "2556" - }, - { - "name": "Mithril ore", - "id": "2557" - }, - { - "name": "Adamantite ore", - "id": "2558" - }, - { - "name": "Runite ore", - "id": "2559" - }, - { - "name": "Silver ore", - "id": "2560" - }, - { - "name": "Gold ore", - "id": "2561" - }, - { - "name": "Coal", - "id": "2562" - }, - { - "name": "Perfect gold ore", - "id": "2563" - }, - { - "name": "Wise Old Man", - "id": "2566" - }, - { - "name": "Wise Old Man", - "id": "2567" - }, - { - "name": "Banker", - "id": "2568" - }, - { - "name": "Banker", - "id": "2569" - }, - { - "name": "Banker", - "id": "2570" - }, - { - "name": "Pillory Guard", - "id": "2573" - }, - { - "name": "Purepker895", - "id": "2575" - }, - { - "name": "Qutiedoll", - "id": "2576" - }, - { - "name": "1337sp34kr", - "id": "2577" - }, - { - "name": "Elfinlocks", - "id": "2578" - }, - { - "name": "Cool Mom227", - "id": "2579" - }, - { - "name": "Ellamaria", - "id": "2581" - }, - { - "name": "Trolley", - "id": "2582" - }, - { - "name": "Trolley", - "id": "2583" - }, - { - "name": "Trolley", - "id": "2584" - }, - { - "name": "Billy, a guard of Falador", - "id": "2585" - }, - { - "name": "Bob, another guard of Falador", - "id": "2587" - }, - { - "name": "PKMaster0036", - "id": "2589" - }, - { - "name": "King Roald", - "id": "2590" - }, - { - "examine": "Another one of those mystic-types.", - "name": "TzHaar-Mej-Jal", - "id": "2617" - }, - { - "examine": "Another one of those mystic-types.", - "name": "TzHaar-Mej-Kah", - "id": "2618" - }, - { - "examine": "Maybe it'll guard my possessions.", - "name": "TzHaar-Ket-Zuh", - "id": "2619" - }, - { - "examine": "Wonder what it's making.", - "name": "TzHaar-Hur-Tel", - "id": "2620" - }, - { - "examine": "Wonder what it's making.", - "name": "TzHaar-Hur-Lek", - "id": "2622" - }, - { - "examine": "Another one of those mystic-types.", - "name": "TzHaar-Mej-Roh", - "id": "2623" - }, - { - "name": "TzHaar-Ket", - "id": "2624" - }, - { - "name": "TzHaar-Ket", - "id": "2625" - }, - { - "name": "Rocks", - "id": "2626" - }, - { - "name": "Tok-Xil", - "id": "2632" - }, - { - "name": "Wise Old Man", - "id": "2633" - }, - { - "name": "Bob", - "id": "2635" - }, - { - "name": "Bob", - "id": "2636" - }, - { - "name": "Sphinx", - "id": "2637" - }, - { - "name": "Neite", - "id": "2638" - }, - { - "name": "Robert the Strong", - "id": "2639" - }, - { - "name": "Odysseus", - "id": "2640" - }, - { - "name": "King Black Dragon", - "id": "2642" - }, - { - "name": "R4ng3rNo0b889", - "id": "2643" - }, - { - "name": "Love Cats", - "id": "2644" - }, - { - "name": "Love Cats", - "id": "2645" - }, - { - "name": "Neite", - "id": "2646" - }, - { - "name": "Bob", - "id": "2647" - }, - { - "name": "Beite", - "id": "2648" - }, - { - "name": "Gnome", - "id": "2649" - }, - { - "name": "Gnome", - "id": "2650" - }, - { - "name": "Odysseus", - "id": "2651" - }, - { - "name": "Neite", - "id": "2652" - }, - { - "name": "Unferth", - "id": "2654" - }, - { - "name": "Unferth", - "id": "2656" - }, - { - "name": "Unferth", - "id": "2657" - }, - { - "name": "Unferth", - "id": "2658" - }, - { - "name": "Unferth", - "id": "2659" - }, - { - "name": "Reldo", - "id": "2661" - }, - { - "name": "Lazy cat", - "id": "2662" - }, - { - "name": "Lazy cat", - "id": "2663" - }, - { - "name": "Lazy cat", - "id": "2664" - }, - { - "name": "Lazy cat", - "id": "2665" - }, - { - "name": "Lazy cat", - "id": "2666" - }, - { - "name": "Lazy cat", - "id": "2667" - }, - { - "name": "Wily cat", - "id": "2668" - }, - { - "name": "Wily cat", - "id": "2669" - }, - { - "name": "Wily cat", - "id": "2670" - }, - { - "name": "Wily cat", - "id": "2671" - }, - { - "name": "Wily cat", - "id": "2672" - }, - { - "name": "Wily cat", - "id": "2673" - }, - { - "name": "Make-over Mage", - "id": "2676" - }, - { - "examine": "So what can one do with a drunken sailor?", - "name": "Ahab", - "id": "2692" - }, - { - "name": "Seagull", - "id": "2708" - }, - { - "name": "Grum", - "id": "2719" - }, - { - "name": "Gerrant", - "id": "2720" - }, - { - "name": "Wydin", - "id": "2721" - }, - { - "name": "Fishing spot", - "id": "2722" - }, - { - "name": "Fishing spot", - "id": "2723" - }, - { - "name": "Fishing spot", - "id": "2724" - }, - { - "name": "Gull", - "id": "2727" - }, - { - "name": "Monk of Entrana", - "id": "2730" - }, - { - "name": "Solus Dellagar", - "id": "2747" - }, - { - "name": "Savant", - "id": "2748" - }, - { - "name": "Lord Daquarius", - "id": "2749" - }, - { - "name": "Solus Dellagar", - "id": "2750" - }, - { - "name": "Black Knight", - "id": "2751" - }, - { - "name": "Lord Daquarius", - "id": "2752" - }, - { - "name": "Mage of Zamorak", - "id": "2753" - }, - { - "name": "Mage of Zamorak", - "id": "2754" - }, - { - "name": "Mage of Zamorak", - "id": "2755" - }, - { - "name": "Woman", - "id": "2756" - }, - { - "name": "Black Knight", - "id": "2777" - }, - { - "name": "Black Knight", - "id": "2778" - }, - { - "name": "Solus Dellagar", - "id": "2780" - }, - { - "name": "Gnome guard", - "id": "2781" - }, - { - "name": "Thorgel", - "id": "2788" - }, - { - "name": "Pillory Guard", - "id": "2791" - }, - { - "name": "Tramp", - "id": "2793" - }, - { - "name": "Tramp", - "id": "2794" - }, - { - "name": "Skippy", - "id": "2795" - }, - { - "name": "Skippy", - "id": "2797" - }, - { - "name": "Skippy", - "id": "2798" - }, - { - "name": "Skippy", - "id": "2799" - }, - { - "name": "A pile of broken glass", - "id": "2800" - }, - { - "name": "Alice the Camel", - "id": "2813" - }, - { - "name": "Ali the Smith", - "id": "2816" - }, - { - "name": "Ali the Farmer", - "id": "2821" - }, - { - "name": "Ali the Tailor", - "id": "2822" - }, - { - "name": "Ali the Guard", - "id": "2823" - }, - { - "name": "Davey", - "id": "2829" - }, - { - "name": "Fishing spot", - "id": "2859" - }, - { - "name": "Death", - "id": "2862" - }, - { - "name": "Most of a Zombie", - "id": "2864" - }, - { - "name": "Most of a Zombie", - "id": "2865" - }, - { - "name": "Most of a Zombie", - "id": "2867" - }, - { - "name": "Zombie Head", - "id": "2868" - }, - { - "name": "Half-Zombie", - "id": "2870" - }, - { - "name": "Other Half-Zombie", - "id": "2871" - }, - { - "name": "Child", - "id": "2872" - }, - { - "name": "Child", - "id": "2873" - }, - { - "name": "Child", - "id": "2874" - }, - { - "name": "Child", - "id": "2875" - }, - { - "name": "Child", - "id": "2876" - }, - { - "name": "Child", - "id": "2877" - }, - { - "name": "Bardur", - "id": "2879" - }, - { - "name": "Wallasalki", - "id": "2884" - }, - { - "name": "Suspicious water", - "id": "2891" - }, - { - "name": "Suspicious water", - "id": "2893" - }, - { - "name": "Suspicious water", - "id": "2895" - }, - { - "name": "Father Reen", - "id": "2897" - }, - { - "name": "Father Reen", - "id": "2900" - }, - { - "name": "Father Badden", - "id": "2901" - }, - { - "name": "Father Badden", - "id": "2903" - }, - { - "name": "Denath", - "id": "2904" - }, - { - "name": "Denath", - "id": "2905" - }, - { - "name": "Eric", - "id": "2906" - }, - { - "name": "Eric", - "id": "2907" - }, - { - "name": "Evil Dave", - "id": "2908" - }, - { - "name": "Evil Dave", - "id": "2910" - }, - { - "name": "Matthew", - "id": "2911" - }, - { - "name": "Matthew", - "id": "2912" - }, - { - "name": "Jennifer", - "id": "2913" - }, - { - "name": "Jennifer", - "id": "2914" - }, - { - "name": "Tanya", - "id": "2915" - }, - { - "name": "Tanya", - "id": "2916" - }, - { - "name": "Patrick", - "id": "2917" - }, - { - "name": "Patrick", - "id": "2918" - }, - { - "name": "Sand storm", - "id": "2920" - }, - { - "name": "Clay golem", - "id": "2922" - }, - { - "name": "Clay golem", - "id": "2928" - }, - { - "name": "Ghost", - "id": "2929" - }, - { - "name": "Jorral", - "id": "2932" - }, - { - "name": "Melina", - "id": "2933" - }, - { - "name": "Melina", - "id": "2935" - }, - { - "name": "Droalak", - "id": "2936" - }, - { - "name": "Droalak", - "id": "2938" - }, - { - "name": "Dron", - "id": "2939" - }, - { - "name": "Blanin", - "id": "2940" - }, - { - "name": "Pox", - "id": "2943" - }, - { - "name": "Pox", - "id": "2944" - }, - { - "examine": "Cracking personality.", - "name": "Grimesquit", - "id": "2946" - }, - { - "examine": "Lovely girl, shame about the smell.", - "name": "Phingspet", - "id": "2947" - }, - { - "name": "Felkrash", - "id": "2951" - }, - { - "name": "Ceril Carnillean", - "id": "2953" - }, - { - "name": "Councillor Halgrive", - "id": "2954" - }, - { - "name": "Spice seller", - "id": "2955" - }, - { - "name": "Fur trader", - "id": "2956" - }, - { - "name": "Gem merchant", - "id": "2957" - }, - { - "name": "Silk merchant", - "id": "2959" - }, - { - "name": "Zenesha", - "id": "2960" - }, - { - "name": "Ali Morrisane", - "id": "2961" - }, - { - "name": "Rat", - "id": "2974" - }, - { - "name": "Turbogroomer", - "id": "2983" - }, - { - "name": "Loki", - "id": "2985" - }, - { - "name": "Treacle", - "id": "2987" - }, - { - "name": "Claude", - "id": "2989" - }, - { - "name": "Rauborn", - "id": "2991" - }, - { - "name": "Vaeringk", - "id": "2992" - }, - { - "name": "Oxi", - "id": "2993" - }, - { - "name": "Fior", - "id": "2994" - }, - { - "name": "Sagira", - "id": "2995" - }, - { - "name": "Anleif", - "id": "2996" - }, - { - "name": "Gambler", - "id": "2999" - }, - { - "name": "Barman", - "id": "3000" - }, - { - "name": "Fishing spot", - "id": "3019" - }, - { - "name": "Rug Merchant", - "id": "3020" - }, - { - "name": "Nirrie", - "id": "3023" - }, - { - "name": "Tirrie", - "id": "3024" - }, - { - "name": "Hallak", - "id": "3025" - }, - { - "name": "Usi", - "id": "3031" - }, - { - "name": "Nkuku", - "id": "3032" - }, - { - "name": "Garai", - "id": "3033" - }, - { - "name": "Habibah", - "id": "3034" - }, - { - "name": "Meskhenet", - "id": "3035" - }, - { - "name": "Zahra", - "id": "3036" - }, - { - "name": "Zahur", - "id": "3037" - }, - { - "name": "Seddu", - "id": "3038" - }, - { - "name": "Kazemde", - "id": "3039" - }, - { - "name": "Tarik", - "id": "3041" - }, - { - "name": "Rokuh", - "id": "3045" - }, - { - "name": "Target", - "id": "3047" - }, - { - "name": "Target", - "id": "3048" - }, - { - "name": "Larxus", - "id": "3049" - }, - { - "name": "Dead Monk", - "id": "3076" - }, - { - "name": "High Priest", - "id": "3078" - }, - { - "name": "Assassin", - "id": "3081" - }, - { - "name": "Rosie", - "id": "3082" - }, - { - "name": "Sorcha", - "id": "3083" - }, - { - "name": "Cait", - "id": "3084" - }, - { - "name": "Cormac", - "id": "3085" - }, - { - "name": "Fionn", - "id": "3086" - }, - { - "name": "Donnacha", - "id": "3087" - }, - { - "name": "Ronan", - "id": "3088" - }, - { - "name": "Flying Book", - "id": "3093" - }, - { - "name": "Flying Book", - "id": "3095" - }, - { - "name": "Pizzaz Hat", - "id": "3096" - }, - { - "name": "Charmed Warrior", - "id": "3107" - }, - { - "name": "Bert", - "id": "3108" - }, - { - "name": "Sandy", - "id": "3110" - }, - { - "name": "Sandy", - "id": "3113" - }, - { - "name": "Mazion", - "id": "3114" - }, - { - "name": "Reeso", - "id": "3116" - }, - { - "name": "Prison Pete", - "id": "3118" - }, - { - "name": "Balloon Animal", - "id": "3119" - }, - { - "name": "Balloon Animal", - "id": "3120" - }, - { - "name": "Pyramid block", - "id": "3124" - }, - { - "name": "Pyramid block", - "id": "3125" - }, - { - "name": "Pentyn", - "id": "3126" - }, - { - "name": "Aristarchus", - "id": "3127" - }, - { - "name": "Boneguard", - "id": "3128" - }, - { - "name": "Pile of bones", - "id": "3130" - }, - { - "name": "Desert Spirit", - "id": "3131" - }, - { - "name": "Crust of ice", - "id": "3132" - }, - { - "name": "Furnace grate", - "id": "3134" - }, - { - "name": "Enakhra", - "id": "3136" - }, - { - "name": "Enakhra", - "id": "3138" - }, - { - "name": "Boneguard", - "id": "3139" - }, - { - "name": "Akthanakos", - "id": "3141" - }, - { - "name": "Akthanakos", - "id": "3142" - }, - { - "name": "Lazim", - "id": "3143" - }, - { - "name": "Enakhra", - "id": "3148" - }, - { - "name": "Akthanakos", - "id": "3149" - }, - { - "name": "Harpie Bug Swarm", - "id": "3152" - }, - { - "name": "Count Draynor", - "id": "3154" - }, - { - "name": "Bill Teach", - "id": "3156" - }, - { - "name": "Bill Teach", - "id": "3157" - }, - { - "name": "Bill Teach", - "id": "3158" - }, - { - "name": "Bill Teach", - "id": "3159" - }, - { - "name": "Bill Teach", - "id": "3160" - }, - { - "name": "Charley", - "id": "3161" - }, - { - "name": "Smith", - "id": "3162" - }, - { - "name": "Joe", - "id": "3163" - }, - { - "name": "Mama", - "id": "3164" - }, - { - "name": "Mama", - "id": "3165" - }, - { - "name": "Gull", - "id": "3197" - }, - { - "name": "Romily Weaklax", - "id": "3205" - }, - { - "name": "Priest", - "id": "3206" - }, - { - "name": "Pious Pete", - "id": "3207" - }, - { - "name": "Taper", - "id": "3208" - }, - { - "name": "Alrena", - "id": "3210" - }, - { - "name": "Alrena", - "id": "3211" - }, - { - "name": "Bravek", - "id": "3212" - }, - { - "name": "Tina", - "id": "3218" - }, - { - "name": "Hunding", - "id": "3254" - }, - { - "name": "Engineering assistant", - "id": "3281" - }, - { - "name": "Squirrel", - "id": "3284" - }, - { - "name": "Squirrel", - "id": "3285" - }, - { - "name": "Raccoon", - "id": "3287" - }, - { - "name": "Skeleton", - "id": "3289" - }, - { - "name": "Witch", - "id": "3292" - }, - { - "name": "Frog", - "id": "3300" - }, - { - "name": "Storm cloud", - "id": "3301" - }, - { - "name": "Fairy Nuff", - "id": "3303" - }, - { - "name": "Slim Louie", - "id": "3305" - }, - { - "name": "Fat Rocco", - "id": "3306" - }, - { - "name": "Zandar Horfyre", - "id": "3308" - }, - { - "name": "Sheep", - "id": "3311" - }, - { - "examine": "They're going to sing to you!", - "name": "Zanaris choir", - "id": "3312" - }, - { - "name": "Baby tanglefoot", - "id": "3314" - }, - { - "name": "Gatekeeper", - "id": "3321" - }, - { - "name": "Draul Leptoc", - "id": "3323" - }, - { - "name": "Martina Scorsby", - "id": "3326" - }, - { - "name": "Tarquin", - "id": "3328" - }, - { - "name": "Sigurd", - "id": "3329" - }, - { - "name": "Hari", - "id": "3330" - }, - { - "name": "Trees", - "id": "3332" - }, - { - "name": "Trees", - "id": "3333" - }, - { - "name": "Bullrush", - "id": "3335" - }, - { - "name": "Bullrush", - "id": "3336" - }, - { - "name": "Cave scenery", - "id": "3337" - }, - { - "name": "Cave scenery", - "id": "3338" - }, - { - "name": "Cave scenery", - "id": "3339" - }, - { - "name": "Genie", - "id": "3351" - }, - { - "name": "Mysterious Old Man", - "id": "3352" - }, - { - "name": "Swarm", - "id": "3353" - }, - { - "name": "Cap'n Hand", - "id": "3354" - }, - { - "name": "Rick Turpentine", - "id": "3355" - }, - { - "name": "Niles", - "id": "3356" - }, - { - "name": "Miles", - "id": "3357" - }, - { - "name": "Giles", - "id": "3358" - }, - { - "name": "Dr Jekyll", - "id": "3359" - }, - { - "name": "Mr Hyde", - "id": "3360" - }, - { - "name": "Mr Hyde", - "id": "3361" - }, - { - "name": "Mr Hyde", - "id": "3362" - }, - { - "name": "Mr Hyde", - "id": "3363" - }, - { - "name": "Mr Hyde", - "id": "3364" - }, - { - "name": "Mr Hyde", - "id": "3365" - }, - { - "name": "Sir Amik Varze", - "id": "3372" - }, - { - "name": "Sir Amik Varze", - "id": "3373" - }, - { - "name": "K'klik", - "id": "3377" - }, - { - "name": "Evil Dave", - "id": "3379" - }, - { - "name": "Doris", - "id": "3381" - }, - { - "name": "Gypsy", - "id": "3383" - }, - { - "name": "Gypsy", - "id": "3386" - }, - { - "name": "Culinaromancer", - "id": "3387" - }, - { - "name": "Osman", - "id": "3388" - }, - { - "name": "Sir Amik Varze", - "id": "3395" - }, - { - "name": "Awowogei", - "id": "3396" - }, - { - "name": "Awowogei", - "id": "3397" - }, - { - "name": "Skrach Uglogwee", - "id": "3398" - }, - { - "name": "Culinaromancer", - "id": "3399" - }, - { - "name": "An old Dwarf", - "id": "3401" - }, - { - "name": "Rohak", - "id": "3403" - }, - { - "name": "Pirate Pete", - "id": "3417" - }, - { - "name": "Fish", - "id": "3428" - }, - { - "name": "Fish", - "id": "3429" - }, - { - "name": "Fish", - "id": "3430" - }, - { - "name": "Fish", - "id": "3440" - }, - { - "name": "Fish", - "id": "3441" - }, - { - "name": "Fish", - "id": "3442" - }, - { - "name": "Fish", - "id": "3446" - }, - { - "name": "Fish", - "id": "3447" - }, - { - "name": "Fish", - "id": "3448" - }, - { - "name": "? ? ? ?", - "id": "3452" - }, - { - "name": "? ? ? ?", - "id": "3453" - }, - { - "name": "? ? ? ?", - "id": "3454" - }, - { - "name": "? ? ? ?", - "id": "3455" - }, - { - "name": "? ? ? ?", - "id": "3456" - }, - { - "name": "? ? ? ?", - "id": "3457" - }, - { - "name": "? ? ? ?", - "id": "3458" - }, - { - "name": "? ? ? ?", - "id": "3459" - }, - { - "name": "? ? ? ?", - "id": "3460" - }, - { - "name": "? ? ? ?", - "id": "3461" - }, - { - "name": "Skrach Uglogwee", - "id": "3462" - }, - { - "name": "Skrach Uglogwee", - "id": "3464" - }, - { - "name": "Nung", - "id": "3465" - }, - { - "name": "Ogre", - "id": "3466" - }, - { - "name": "Rantz", - "id": "3467" - }, - { - "name": "Rantz", - "id": "3468" - }, - { - "name": "Ogre boat", - "id": "3469" - }, - { - "name": "Ogre boat", - "id": "3472" - }, - { - "name": "Balloon Toad", - "id": "3473" - }, - { - "name": "Balloon Toad", - "id": "3474" - }, - { - "name": "Balloon Toad", - "id": "3475" - }, - { - "name": "Jubbly bird", - "id": "3477" - }, - { - "name": "King Awowogei", - "id": "3479" - }, - { - "name": "Mizaru", - "id": "3481" - }, - { - "name": "Kikazaru", - "id": "3482" - }, - { - "name": "Iwazaru", - "id": "3483" - }, - { - "name": "Culinaromancer", - "id": "3485" - }, - { - "name": "Culinaromancer", - "id": "3486" - }, - { - "name": "Culinaromancer", - "id": "3487" - }, - { - "name": "Culinaromancer", - "id": "3488" - }, - { - "name": "Culinaromancer", - "id": "3489" - }, - { - "name": "Culinaromancer", - "id": "3490" - }, - { - "name": "Culinaromancer", - "id": "3492" - }, - { - "name": "Overgrown hellcat", - "id": "3503" - }, - { - "name": "Hellcat", - "id": "3504" - }, - { - "name": "Hell-kitten", - "id": "3505" - }, - { - "name": "Lazy hellcat", - "id": "3506" - }, - { - "name": "Wily hellcat", - "id": "3507" - }, - { - "name": "Leo", - "id": "3508" - }, - { - "name": "Wiskit", - "id": "3510" - }, - { - "name": "Vampyre Juvinate", - "id": "3512" - }, - { - "name": "Vampyre Juvinate", - "id": "3515" - }, - { - "name": "Gadderanks", - "id": "3516" - }, - { - "name": "Gadderanks", - "id": "3518" - }, - { - "name": "Gadderanks", - "id": "3519" - }, - { - "name": "Vampyre Juvinate", - "id": "3520" - }, - { - "name": "Vampyre Juvinate", - "id": "3528" - }, - { - "name": "Vampyre Juvinate", - "id": "3529" - }, - { - "name": "Mist", - "id": "3530" - }, - { - "name": "Ivan Strom", - "id": "3535" - }, - { - "name": "Ivan Strom", - "id": "3536" - }, - { - "name": "Vampyre Juvinate", - "id": "3537" - }, - { - "name": "Vampyre Juvinate", - "id": "3538" - }, - { - "name": "Veliaf Hurtz", - "id": "3539" - }, - { - "name": "Elisabeta", - "id": "3540" - }, - { - "name": "Aurel", - "id": "3541" - }, - { - "name": "Sorin", - "id": "3542" - }, - { - "name": "Luscion", - "id": "3543" - }, - { - "name": "Sergiu", - "id": "3544" - }, - { - "name": "Radu", - "id": "3545" - }, - { - "name": "Grigore", - "id": "3546" - }, - { - "name": "Ileana", - "id": "3547" - }, - { - "name": "Valeria", - "id": "3548" - }, - { - "name": "Emilia", - "id": "3549" - }, - { - "name": "Florin", - "id": "3550" - }, - { - "name": "Catalina", - "id": "3551" - }, - { - "name": "Ivan", - "id": "3552" - }, - { - "name": "Victor", - "id": "3553" - }, - { - "name": "Helena", - "id": "3554" - }, - { - "name": "Teodor", - "id": "3555" - }, - { - "name": "Marius", - "id": "3556" - }, - { - "name": "Gabriela", - "id": "3557" - }, - { - "name": "Vladimir", - "id": "3558" - }, - { - "name": "Calin", - "id": "3559" - }, - { - "name": "Mihail", - "id": "3560" - }, - { - "name": "Nicoleta", - "id": "3561" - }, - { - "name": "Simona", - "id": "3562" - }, - { - "name": "Vasile", - "id": "3563" - }, - { - "name": "Razvan", - "id": "3564" - }, - { - "name": "Luminata", - "id": "3565" - }, - { - "name": "Cornelius", - "id": "3566" - }, - { - "name": "Cornelius", - "id": "3569" - }, - { - "name": "Benjamin", - "id": "3570" - }, - { - "name": "Liam", - "id": "3571" - }, - { - "name": "Miala", - "id": "3572" - }, - { - "name": "Verak", - "id": "3573" - }, - { - "name": "Fishing spot", - "id": "3574" - }, - { - "name": "Fishing spot", - "id": "3575" - }, - { - "name": "Juvinate", - "id": "3576" - }, - { - "name": "Juvinate", - "id": "3578" - }, - { - "name": "Tentacle", - "id": "3580" - }, - { - "name": "Troll", - "id": "3584" - }, - { - "name": "Tok-Xil", - "id": "3592" - }, - { - "name": "Rocnar", - "id": "3594" - }, - { - "name": "Toy Soldier", - "id": "3595" - }, - { - "name": "Toy Doll", - "id": "3596" - }, - { - "name": "Toy Mouse", - "id": "3597" - }, - { - "name": "Clockwork cat", - "id": "3598" - }, - { - "name": "Ghast", - "id": "3606" - }, - { - "name": "Ghast", - "id": "3607" - }, - { - "name": "Ghast", - "id": "3608" - }, - { - "name": "Ghast", - "id": "3609" - }, - { - "name": "Ghast", - "id": "3610" - }, - { - "name": "Ghast", - "id": "3611" - }, - { - "name": "Giant snail", - "id": "3612" - }, - { - "name": "Giant snail", - "id": "3613" - }, - { - "name": "Giant snail", - "id": "3614" - }, - { - "name": "Riyl shadow", - "id": "3615" - }, - { - "name": "Asyn shadow", - "id": "3616" - }, - { - "name": "Shade", - "id": "3617" - }, - { - "name": "Tentacle", - "id": "3621" - }, - { - "name": "Smiddi Ryak", - "id": "3623" - }, - { - "name": "Rolayne Twickit", - "id": "3625" - }, - { - "name": "Jayene Kliyn", - "id": "3627" - }, - { - "name": "Valantay Eppel", - "id": "3629" - }, - { - "name": "Dalcian Fang", - "id": "3631" - }, - { - "name": "Fyiona Fray", - "id": "3633" - }, - { - "name": "Abidor Crank", - "id": "3635" - }, - { - "name": "Spirit tree", - "id": "3636" - }, - { - "name": "Spirit tree", - "id": "3637" - }, - { - "name": "Launa", - "id": "3638" - }, - { - "name": "Launa", - "id": "3640" - }, - { - "name": "Brana", - "id": "3641" - }, - { - "name": "Mawnis Burowgar", - "id": "3642" - }, - { - "name": "Tolna", - "id": "3643" - }, - { - "name": "Tolna", - "id": "3644" - }, - { - "name": "Confusion beast", - "id": "3651" - }, - { - "name": "Confusion beast", - "id": "3652" - }, - { - "name": "Confusion beast", - "id": "3653" - }, - { - "name": "Confusion beast", - "id": "3654" - }, - { - "name": "Hopeless creature", - "id": "3656" - }, - { - "name": "Hopeless creature", - "id": "3657" - }, - { - "name": "Tolna", - "id": "3658" - }, - { - "name": "Tolna", - "id": "3659" - }, - { - "name": "Tolna", - "id": "3660" - }, - { - "name": "Hopeless beast", - "id": "3668" - }, - { - "name": "Hopeless beast", - "id": "3669" - }, - { - "name": "Sinister Stranger", - "id": "3677" - }, - { - "name": "Sinister Stranger", - "id": "3678" - }, - { - "name": "Vestri", - "id": "3679" - }, - { - "name": "Nigel", - "id": "3681" - }, - { - "name": "Egg", - "id": "3682" - }, - { - "name": "Egg", - "id": "3683" - }, - { - "name": "Egg", - "id": "3684" - }, - { - "name": "Egg", - "id": "3685" - }, - { - "name": "Chocolate kebbit", - "id": "3686" - }, - { - "name": "Chocolate kebbit", - "id": "3687" - }, - { - "name": "Easter Bunny", - "id": "3688" - }, - { - "name": "Egg", - "id": "3689" - }, - { - "name": "Egg", - "id": "3690" - }, - { - "name": "Egg", - "id": "3691" - }, - { - "name": "Egg", - "id": "3692" - }, - { - "name": "Egg", - "id": "3693" - }, - { - "name": "Egg", - "id": "3694" - }, - { - "name": "Volf Olafson", - "id": "3695" - }, - { - "name": "Ingrid Hradson", - "id": "3696" - }, - { - "name": "Boulder", - "id": "3708" - }, - { - "name": "Ulfric", - "id": "3710" - }, - { - "name": "Zanik", - "id": "3712" - }, - { - "name": "Sigmund", - "id": "3713" - }, - { - "name": "Zanik", - "id": "3714" - }, - { - "name": "Sigmund", - "id": "3716" - }, - { - "name": "Sigmund", - "id": "3717" - }, - { - "name": "Sigmund", - "id": "3718" - }, - { - "name": "Sigmund", - "id": "3719" - }, - { - "name": "Sigmund", - "id": "3720" - }, - { - "name": "Zanik", - "id": "3721" - }, - { - "name": "Zanik", - "id": "3722" - }, - { - "name": "General Bentnoze", - "id": "3723" - }, - { - "name": "General Wartface", - "id": "3724" - }, - { - "name": "Grubfoot", - "id": "3725" - }, - { - "name": "Arthur", - "id": "3778" - }, - { - "name": "Squire", - "id": "3780" - }, - { - "name": "Sir Palomedes", - "id": "3787" - }, - { - "name": "Void Knight", - "id": "3789" - }, - { - "name": "Fishing spot", - "id": "3803" - }, - { - "name": "Lieutenant Schepbur", - "id": "3817" - }, - { - "name": "Wise Old Man", - "id": "3820" - }, - { - "name": "Devin Mendelberg", - "id": "3825" - }, - { - "name": "George Laxmeister", - "id": "3826" - }, - { - "name": "Ramara du Croissant", - "id": "3827" - }, - { - "name": "Kathy Corkat", - "id": "3828" - }, - { - "name": "Kathy Corkat", - "id": "3831" - }, - { - "name": "Kalphite Queen", - "id": "3832" - }, - { - "name": "Drunken Dwarf", - "id": "3837" - }, - { - "name": "Wise Old Man", - "id": "3838" - }, - { - "name": "Wise Old Man", - "id": "3839" - }, - { - "name": "Sea troll", - "id": "3841" - }, - { - "name": "Sea troll", - "id": "3842" - }, - { - "name": "Skeleton Mage", - "id": "3844" - }, - { - "name": "Sea troll", - "id": "3845" - }, - { - "name": "Sea Troll General", - "id": "3846" - }, - { - "name": "Fishing spot", - "id": "3848" - }, - { - "name": "Skeleton Mage", - "id": "3850" - }, - { - "name": "Suspect", - "id": "3852" - }, - { - "name": "Suspect", - "id": "3853" - }, - { - "name": "Suspect", - "id": "3854" - }, - { - "name": "Suspect", - "id": "3855" - }, - { - "name": "Suspect", - "id": "3856" - }, - { - "name": "Suspect", - "id": "3857" - }, - { - "name": "Suspect", - "id": "3858" - }, - { - "name": "Suspect", - "id": "3859" - }, - { - "name": "Suspect", - "id": "3860" - }, - { - "name": "Suspect", - "id": "3861" - }, - { - "name": "Suspect", - "id": "3862" - }, - { - "name": "Suspect", - "id": "3863" - }, - { - "name": "Suspect", - "id": "3864" - }, - { - "name": "Suspect", - "id": "3865" - }, - { - "name": "Suspect", - "id": "3866" - }, - { - "name": "Suspect", - "id": "3867" - }, - { - "name": "Suspect", - "id": "3868" - }, - { - "name": "Suspect", - "id": "3869" - }, - { - "name": "Suspect", - "id": "3870" - }, - { - "name": "Suspect", - "id": "3871" - }, - { - "name": "Suspect", - "id": "3872" - }, - { - "name": "Suspect", - "id": "3873" - }, - { - "name": "Suspect", - "id": "3874" - }, - { - "name": "Suspect", - "id": "3875" - }, - { - "name": "Suspect", - "id": "3876" - }, - { - "name": "Suspect", - "id": "3877" - }, - { - "name": "Suspect", - "id": "3878" - }, - { - "name": "Suspect", - "id": "3879" - }, - { - "name": "Suspect", - "id": "3880" - }, - { - "name": "Suspect", - "id": "3881" - }, - { - "name": "Suspect", - "id": "3882" - }, - { - "name": "Suspect", - "id": "3883" - }, - { - "name": "Suspect", - "id": "3884" - }, - { - "name": "Suspect", - "id": "3885" - }, - { - "name": "Suspect", - "id": "3886" - }, - { - "name": "Suspect", - "id": "3887" - }, - { - "name": "Suspect", - "id": "3888" - }, - { - "name": "Suspect", - "id": "3889" - }, - { - "name": "Suspect", - "id": "3890" - }, - { - "name": "Suspect", - "id": "3891" - }, - { - "name": "Molly", - "id": "3892" - }, - { - "name": "Molly", - "id": "3893" - }, - { - "name": "Molly", - "id": "3894" - }, - { - "name": "Molly", - "id": "3895" - }, - { - "name": "Molly", - "id": "3896" - }, - { - "name": "Molly", - "id": "3897" - }, - { - "name": "Molly", - "id": "3898" - }, - { - "name": "Molly", - "id": "3899" - }, - { - "name": "Molly", - "id": "3900" - }, - { - "name": "Molly", - "id": "3901" - }, - { - "name": "Molly", - "id": "3902" - }, - { - "name": "Molly", - "id": "3903" - }, - { - "name": "Molly", - "id": "3904" - }, - { - "name": "Molly", - "id": "3905" - }, - { - "name": "Molly", - "id": "3906" - }, - { - "name": "Molly", - "id": "3907" - }, - { - "name": "Molly", - "id": "3908" - }, - { - "name": "Molly", - "id": "3909" - }, - { - "name": "Molly", - "id": "3910" - }, - { - "name": "Molly", - "id": "3911" - }, - { - "name": "Flippa", - "id": "3912" - }, - { - "name": "Tilt", - "id": "3913" - }, - { - "name": "Gardener", - "id": "3914" - }, - { - "name": "Prince Brand", - "id": "3918" - }, - { - "name": "Princess Astrid", - "id": "3919" - }, - { - "name": "Runa", - "id": "3920" - }, - { - "name": "Osvald", - "id": "3923" - }, - { - "name": "Runolf", - "id": "3924" - }, - { - "name": "Ingrid", - "id": "3926" - }, - { - "name": "Signy", - "id": "3928" - }, - { - "name": "Hild", - "id": "3929" - }, - { - "name": "Armod", - "id": "3930" - }, - { - "name": "Beigarth", - "id": "3931" - }, - { - "name": "Reinn", - "id": "3932" - }, - { - "name": "Thorodin", - "id": "3936" - }, - { - "name": "Hangman game", - "id": "3944" - }, - { - "name": "Hangman game", - "id": "3945" - }, - { - "name": "Hangman game", - "id": "3946" - }, - { - "name": "Hangman game", - "id": "3947" - }, - { - "name": "Hangman game", - "id": "3948" - }, - { - "name": "Hangman game", - "id": "3949" - }, - { - "name": "Hangman game", - "id": "3950" - }, - { - "name": "Hangman game", - "id": "3951" - }, - { - "name": "Hangman game", - "id": "3952" - }, - { - "name": "Hangman game", - "id": "3953" - }, - { - "name": "Treasure fairy", - "id": "3954" - }, - { - "name": "Jacky Jester", - "id": "3955" - }, - { - "name": "Combat stone", - "id": "3956" - }, - { - "name": "Combat stone", - "id": "3957" - }, - { - "name": "Combat stone", - "id": "3958" - }, - { - "name": "Combat stone", - "id": "3959" - }, - { - "name": "Combat stone", - "id": "3960" - }, - { - "name": "Combat stone", - "id": "3961" - }, - { - "name": "Combat stone", - "id": "3962" - }, - { - "name": "Combat stone", - "id": "3963" - }, - { - "name": "Combat stone", - "id": "3964" - }, - { - "name": "Combat stone", - "id": "3965" - }, - { - "name": "Combat stone", - "id": "3966" - }, - { - "name": "Combat stone", - "id": "3967" - }, - { - "name": "Combat stone", - "id": "3968" - }, - { - "name": "Combat stone", - "id": "3969" - }, - { - "name": "Combat stone", - "id": "3970" - }, - { - "name": "Combat stone", - "id": "3971" - }, - { - "name": "Combat stone", - "id": "3972" - }, - { - "name": "Combat stone", - "id": "3973" - }, - { - "name": "Combat stone", - "id": "3974" - }, - { - "name": "Combat stone", - "id": "3975" - }, - { - "name": "Combat stone", - "id": "3976" - }, - { - "name": "Combat stone", - "id": "3977" - }, - { - "name": "Combat stone", - "id": "3978" - }, - { - "name": "Combat stone", - "id": "3979" - }, - { - "name": "Combat stone", - "id": "3980" - }, - { - "name": "Combat stone", - "id": "3981" - }, - { - "name": "Combat stone", - "id": "3982" - }, - { - "name": "Combat stone", - "id": "3983" - }, - { - "name": "Combat stone", - "id": "3984" - }, - { - "name": "Combat stone", - "id": "3985" - }, - { - "name": "Combat stone", - "id": "3986" - }, - { - "name": "Combat stone", - "id": "3987" - }, - { - "name": "Combat stone", - "id": "3988" - }, - { - "name": "Combat stone", - "id": "3989" - }, - { - "name": "Combat stone", - "id": "3990" - }, - { - "name": "Combat stone", - "id": "3991" - }, - { - "name": "Combat stone", - "id": "3992" - }, - { - "name": "Combat stone", - "id": "3993" - }, - { - "name": "Combat stone", - "id": "3994" - }, - { - "name": "Combat stone", - "id": "3995" - }, - { - "name": "Combat stone", - "id": "3996" - }, - { - "name": "Combat stone", - "id": "3997" - }, - { - "name": "Combat stone", - "id": "3998" - }, - { - "name": "Combat stone", - "id": "3999" - }, - { - "name": "Combat stone", - "id": "4000" - }, - { - "name": "Combat stone", - "id": "4001" - }, - { - "name": "Combat stone", - "id": "4002" - }, - { - "name": "Combat stone", - "id": "4003" - }, - { - "name": "Combat stone", - "id": "4004" - }, - { - "name": "Combat stone", - "id": "4005" - }, - { - "name": "Combat stone", - "id": "4006" - }, - { - "name": "Combat stone", - "id": "4007" - }, - { - "name": "Combat stone", - "id": "4008" - }, - { - "name": "Combat stone", - "id": "4009" - }, - { - "name": "Combat stone", - "id": "4010" - }, - { - "name": "Combat stone", - "id": "4011" - }, - { - "name": "Combat stone", - "id": "4012" - }, - { - "name": "Combat stone", - "id": "4013" - }, - { - "name": "Combat stone", - "id": "4014" - }, - { - "name": "Combat stone", - "id": "4015" - }, - { - "name": "Combat stone", - "id": "4016" - }, - { - "name": "Combat stone", - "id": "4017" - }, - { - "name": "Combat stone", - "id": "4018" - }, - { - "name": "Combat stone", - "id": "4019" - }, - { - "name": "Combat stone", - "id": "4020" - }, - { - "name": "Elemental balance", - "id": "4021" - }, - { - "name": "Elemental balance", - "id": "4022" - }, - { - "name": "Elemental balance", - "id": "4023" - }, - { - "name": "Elemental balance", - "id": "4024" - }, - { - "name": "Elemental balance", - "id": "4025" - }, - { - "name": "Elemental balance", - "id": "4026" - }, - { - "name": "Elemental balance", - "id": "4027" - }, - { - "name": "Elemental balance", - "id": "4028" - }, - { - "name": "Elemental balance", - "id": "4029" - }, - { - "name": "Elemental balance", - "id": "4030" - }, - { - "name": "Elemental balance", - "id": "4031" - }, - { - "name": "Elemental balance", - "id": "4032" - }, - { - "name": "Elemental balance", - "id": "4033" - }, - { - "name": "Elemental balance", - "id": "4034" - }, - { - "name": "Elemental balance", - "id": "4035" - }, - { - "name": "Elemental balance", - "id": "4036" - }, - { - "name": "Elemental balance", - "id": "4037" - }, - { - "name": "Elemental balance", - "id": "4038" - }, - { - "name": "Elemental balance", - "id": "4039" - }, - { - "name": "Elemental balance", - "id": "4040" - }, - { - "name": "Elemental balance", - "id": "4041" - }, - { - "name": "Elemental balance", - "id": "4042" - }, - { - "name": "Elemental balance", - "id": "4043" - }, - { - "name": "Elemental balance", - "id": "4044" - }, - { - "name": "Elemental balance", - "id": "4045" - }, - { - "name": "Elemental balance", - "id": "4046" - }, - { - "name": "Elemental balance", - "id": "4047" - }, - { - "name": "Elemental balance", - "id": "4048" - }, - { - "name": "Elemental balance", - "id": "4049" - }, - { - "name": "Elemental balance", - "id": "4050" - }, - { - "name": "Elemental balance", - "id": "4051" - }, - { - "name": "Elemental balance", - "id": "4052" - }, - { - "name": "Elemental balance", - "id": "4053" - }, - { - "name": "Elemental balance", - "id": "4054" - }, - { - "name": "Elemental balance", - "id": "4055" - }, - { - "name": "Elemental balance", - "id": "4056" - }, - { - "name": "Elemental balance", - "id": "4057" - }, - { - "name": "Elemental balance", - "id": "4058" - }, - { - "name": "Elemental balance", - "id": "4059" - }, - { - "name": "Elemental balance", - "id": "4060" - }, - { - "name": "Elemental balance", - "id": "4061" - }, - { - "name": "Elemental balance", - "id": "4062" - }, - { - "name": "Elemental balance", - "id": "4063" - }, - { - "name": "Elemental balance", - "id": "4064" - }, - { - "name": "Elemental balance", - "id": "4065" - }, - { - "name": "Elemental balance", - "id": "4066" - }, - { - "name": "Elemental balance", - "id": "4067" - }, - { - "name": "Elemental balance", - "id": "4068" - }, - { - "name": "Elemental balance", - "id": "4069" - }, - { - "name": "Elemental balance", - "id": "4070" - }, - { - "name": "Elemental balance", - "id": "4071" - }, - { - "name": "Elemental balance", - "id": "4072" - }, - { - "name": "Elemental balance", - "id": "4073" - }, - { - "name": "Elemental balance", - "id": "4074" - }, - { - "name": "Elemental balance", - "id": "4075" - }, - { - "name": "Elemental balance", - "id": "4076" - }, - { - "name": "Elemental balance", - "id": "4077" - }, - { - "name": "Elemental balance", - "id": "4078" - }, - { - "name": "Elemental balance", - "id": "4079" - }, - { - "name": "Elemental balance", - "id": "4080" - }, - { - "name": "Elemental balance", - "id": "4081" - }, - { - "name": "Elemental balance", - "id": "4082" - }, - { - "name": "Elemental balance", - "id": "4083" - }, - { - "name": "Elemental balance", - "id": "4084" - }, - { - "name": "Elemental balance", - "id": "4085" - }, - { - "name": "Elemental balance", - "id": "4086" - }, - { - "name": "Elemental balance", - "id": "4087" - }, - { - "name": "Elemental balance", - "id": "4088" - }, - { - "name": "Elemental balance", - "id": "4089" - }, - { - "name": "Elemental balance", - "id": "4090" - }, - { - "name": "Elemental balance", - "id": "4091" - }, - { - "name": "Elemental balance", - "id": "4092" - }, - { - "name": "Elemental balance", - "id": "4093" - }, - { - "name": "Elemental balance", - "id": "4094" - }, - { - "name": "Elemental balance", - "id": "4095" - }, - { - "name": "Combat stone", - "id": "4096" - }, - { - "name": "Combat stone", - "id": "4097" - }, - { - "name": "Combat stone", - "id": "4098" - }, - { - "name": "Combat stone", - "id": "4099" - }, - { - "name": "Combat stone", - "id": "4100" - }, - { - "name": "Combat stone", - "id": "4101" - }, - { - "name": "Combat stone", - "id": "4102" - }, - { - "name": "Combat stone", - "id": "4103" - }, - { - "name": "Combat stone", - "id": "4104" - }, - { - "name": "Combat stone", - "id": "4105" - }, - { - "name": "Combat stone", - "id": "4106" - }, - { - "name": "Combat stone", - "id": "4107" - }, - { - "name": "Combat stone", - "id": "4108" - }, - { - "name": "Combat stone", - "id": "4109" - }, - { - "name": "Combat stone", - "id": "4110" - }, - { - "name": "Combat stone", - "id": "4111" - }, - { - "name": "Combat stone", - "id": "4112" - }, - { - "name": "Combat stone", - "id": "4113" - }, - { - "name": "Combat stone", - "id": "4114" - }, - { - "name": "Combat stone", - "id": "4115" - }, - { - "name": "Combat stone", - "id": "4116" - }, - { - "name": "Combat stone", - "id": "4117" - }, - { - "name": "Combat stone", - "id": "4118" - }, - { - "name": "Combat stone", - "id": "4119" - }, - { - "name": "Combat stone", - "id": "4120" - }, - { - "name": "Combat stone", - "id": "4121" - }, - { - "name": "Combat stone", - "id": "4122" - }, - { - "name": "Combat stone", - "id": "4123" - }, - { - "name": "Combat stone", - "id": "4124" - }, - { - "name": "Combat stone", - "id": "4125" - }, - { - "name": "Combat stone", - "id": "4126" - }, - { - "name": "Combat stone", - "id": "4127" - }, - { - "name": "Combat stone", - "id": "4128" - }, - { - "name": "Combat stone", - "id": "4129" - }, - { - "name": "Combat stone", - "id": "4130" - }, - { - "name": "Combat stone", - "id": "4131" - }, - { - "name": "Combat stone", - "id": "4132" - }, - { - "name": "Combat stone", - "id": "4133" - }, - { - "name": "Combat stone", - "id": "4134" - }, - { - "name": "Combat stone", - "id": "4135" - }, - { - "name": "Combat stone", - "id": "4136" - }, - { - "name": "Combat stone", - "id": "4137" - }, - { - "name": "Combat stone", - "id": "4138" - }, - { - "name": "Combat stone", - "id": "4139" - }, - { - "name": "Combat stone", - "id": "4140" - }, - { - "name": "Combat stone", - "id": "4141" - }, - { - "name": "Combat stone", - "id": "4142" - }, - { - "name": "Combat stone", - "id": "4143" - }, - { - "name": "Combat stone", - "id": "4144" - }, - { - "name": "Combat stone", - "id": "4145" - }, - { - "name": "Combat stone", - "id": "4146" - }, - { - "name": "Combat stone", - "id": "4147" - }, - { - "name": "Combat stone", - "id": "4148" - }, - { - "name": "Combat stone", - "id": "4149" - }, - { - "name": "Combat stone", - "id": "4150" - }, - { - "name": "Combat stone", - "id": "4151" - }, - { - "name": "Combat stone", - "id": "4152" - }, - { - "name": "Combat stone", - "id": "4153" - }, - { - "name": "Combat stone", - "id": "4154" - }, - { - "name": "Combat stone", - "id": "4155" - }, - { - "name": "Combat stone", - "id": "4156" - }, - { - "name": "Combat stone", - "id": "4157" - }, - { - "name": "Combat stone", - "id": "4158" - }, - { - "name": "Combat stone", - "id": "4159" - }, - { - "name": "Combat stone", - "id": "4160" - }, - { - "name": "Combat stone", - "id": "4161" - }, - { - "name": "Combat stone", - "id": "4162" - }, - { - "name": "Combat stone", - "id": "4163" - }, - { - "name": "Combat stone", - "id": "4164" - }, - { - "name": "Combat stone", - "id": "4165" - }, - { - "name": "Combat stone", - "id": "4166" - }, - { - "name": "Combat stone", - "id": "4167" - }, - { - "name": "Combat stone", - "id": "4168" - }, - { - "name": "Combat stone", - "id": "4169" - }, - { - "name": "Combat stone", - "id": "4170" - }, - { - "name": "Combat stone", - "id": "4171" - }, - { - "name": "Combat stone", - "id": "4172" - }, - { - "name": "Combat stone", - "id": "4173" - }, - { - "name": "Combat stone", - "id": "4174" - }, - { - "name": "Combat stone", - "id": "4175" - }, - { - "name": "Combat stone", - "id": "4176" - }, - { - "name": "Combat stone", - "id": "4177" - }, - { - "name": "Combat stone", - "id": "4178" - }, - { - "name": "Combat stone", - "id": "4179" - }, - { - "name": "Combat stone", - "id": "4180" - }, - { - "name": "Combat stone", - "id": "4181" - }, - { - "name": "Combat stone", - "id": "4182" - }, - { - "name": "Combat stone", - "id": "4183" - }, - { - "name": "Combat stone", - "id": "4184" - }, - { - "name": "Combat stone", - "id": "4185" - }, - { - "name": "Combat stone", - "id": "4186" - }, - { - "name": "Combat stone", - "id": "4187" - }, - { - "name": "Combat stone", - "id": "4188" - }, - { - "name": "Combat stone", - "id": "4189" - }, - { - "name": "Combat stone", - "id": "4190" - }, - { - "name": "Combat stone", - "id": "4191" - }, - { - "name": "Combat stone", - "id": "4192" - }, - { - "name": "Combat stone", - "id": "4193" - }, - { - "name": "Combat stone", - "id": "4194" - }, - { - "name": "Combat stone", - "id": "4195" - }, - { - "name": "Combat stone", - "id": "4196" - }, - { - "name": "Combat stone", - "id": "4197" - }, - { - "name": "Combat stone", - "id": "4198" - }, - { - "name": "Combat stone", - "id": "4199" - }, - { - "name": "Combat stone", - "id": "4200" - }, - { - "name": "Combat stone", - "id": "4201" - }, - { - "name": "Combat stone", - "id": "4202" - }, - { - "name": "Combat stone", - "id": "4203" - }, - { - "name": "Combat stone", - "id": "4204" - }, - { - "name": "Combat stone", - "id": "4205" - }, - { - "name": "Combat stone", - "id": "4206" - }, - { - "name": "Combat stone", - "id": "4207" - }, - { - "name": "Combat stone", - "id": "4208" - }, - { - "name": "Combat stone", - "id": "4209" - }, - { - "name": "Combat stone", - "id": "4210" - }, - { - "name": "Combat stone", - "id": "4211" - }, - { - "name": "Combat stone", - "id": "4212" - }, - { - "name": "Combat stone", - "id": "4213" - }, - { - "name": "Combat stone", - "id": "4214" - }, - { - "name": "Combat stone", - "id": "4215" - }, - { - "name": "Combat stone", - "id": "4216" - }, - { - "name": "Combat stone", - "id": "4217" - }, - { - "name": "Combat stone", - "id": "4218" - }, - { - "name": "Combat stone", - "id": "4219" - }, - { - "name": "Combat stone", - "id": "4220" - }, - { - "name": "Combat stone", - "id": "4221" - }, - { - "name": "Combat stone", - "id": "4222" - }, - { - "name": "Combat stone", - "id": "4223" - }, - { - "name": "Combat stone", - "id": "4224" - }, - { - "name": "Combat stone", - "id": "4225" - }, - { - "name": "Crawling hand", - "id": "4226" - }, - { - "name": "Left head", - "id": "4231" - }, - { - "name": "Middle head", - "id": "4232" - }, - { - "name": "Right head", - "id": "4233" - }, - { - "name": "Kalphite Queen", - "id": "4234" - }, - { - "name": "Rick", - "id": "4235" - }, - { - "name": "Maid", - "id": "4236" - }, - { - "name": "Cook", - "id": "4238" - }, - { - "name": "Butler", - "id": "4240" - }, - { - "name": "Demon butler", - "id": "4242" - }, - { - "name": "Chief servant", - "id": "4244" - }, - { - "name": "Guard", - "id": "4253" - }, - { - "name": "Buinn", - "id": "4277" - }, - { - "name": "Nardok", - "id": "4312" - }, - { - "name": "Dartog", - "id": "4313" - }, - { - "name": "Dwarf", - "id": "4315" - }, - { - "name": "H.A.M. Member", - "id": "4317" - }, - { - "name": "H.A.M. Member", - "id": "4319" - }, - { - "name": "Zanik", - "id": "4321" - }, - { - "name": "Zanik", - "id": "4323" - }, - { - "name": "Zanik", - "id": "4324" - }, - { - "name": "Light creature", - "id": "4325" - }, - { - "name": "Zanik", - "id": "4326" - }, - { - "name": "HAM member", - "id": "4327" - }, - { - "name": "Sigmund", - "id": "4328" - }, - { - "name": "Johanhus Ulsbrecht", - "id": "4330" - }, - { - "name": "Sigmund", - "id": "4331" - }, - { - "name": "Sigmund", - "id": "4332" - }, - { - "name": "Sigmund", - "id": "4333" - }, - { - "name": "Sigmund", - "id": "4334" - }, - { - "name": "Sigmund", - "id": "4335" - }, - { - "name": "Zanik", - "id": "4337" - }, - { - "name": "Zanik", - "id": "4338" - }, - { - "name": "Zanik", - "id": "4340" - }, - { - "name": "Zanik", - "id": "4341" - }, - { - "name": "Zanik", - "id": "4342" - }, - { - "name": "Crab", - "id": "4346" - }, - { - "name": "Cavey Davey", - "id": "4358" - }, - { - "name": "San Fan", - "id": "4360" - }, - { - "name": "Swarm", - "id": "4364" - }, - { - "name": "Blue Monkey", - "id": "4365" - }, - { - "name": "Parrot", - "id": "4374" - }, - { - "name": "Gate of War", - "id": "4377" - }, - { - "name": "Ricketty door", - "id": "4378" - }, - { - "name": "Oozing barrier", - "id": "4379" - }, - { - "name": "Portal of Death", - "id": "4380" - }, - { - "name": "Bee keeper", - "id": "4416" - }, - { - "name": "Bees!", - "id": "4417" - }, - { - "name": "Fairy Godfather", - "id": "4420" - }, - { - "name": "Fairy Queen", - "id": "4435" - }, - { - "name": "Fairy Very Wise", - "id": "4442" - }, - { - "name": "Fairy", - "id": "4444" - }, - { - "name": "Fairy", - "id": "4445" - }, - { - "name": "Fairy", - "id": "4446" - }, - { - "name": "Rabbit", - "id": "4447" - }, - { - "name": "Rabbit", - "id": "4448" - }, - { - "name": "Butterfly", - "id": "4449" - }, - { - "name": "Butterfly", - "id": "4450" - }, - { - "name": "Starflower", - "id": "4451" - }, - { - "name": "Starflower", - "id": "4452" - }, - { - "name": "Fairy Fixit", - "id": "4453" - }, - { - "name": "Ork", - "id": "4456" - }, - { - "name": "Fake Man", - "id": "4460" - }, - { - "name": "Held vampyre juvinate", - "id": "4461" - }, - { - "name": "Held vampyre juvinate", - "id": "4462" - }, - { - "name": "Angry juvinate", - "id": "4463" - }, - { - "name": "Angry juvinate", - "id": "4464" - }, - { - "name": "Angry juvinate", - "id": "4465" - }, - { - "name": "Benjamin", - "id": "4466" - }, - { - "name": "Liam", - "id": "4467" - }, - { - "name": "Miala", - "id": "4468" - }, - { - "name": "Verak", - "id": "4469" - }, - { - "name": "Bogrog", - "id": "4471" - }, - { - "name": "Woman", - "id": "4473" - }, - { - "name": "Ned", - "id": "4475" - }, - { - "name": "Annoyed guardian mummy", - "id": "4477" - }, - { - "name": "Tarik", - "id": "4478" - }, - { - "name": "General Bentnoze", - "id": "4493" - }, - { - "name": "Grubfoot", - "id": "4495" - }, - { - "name": "Grubfoot", - "id": "4497" - }, - { - "name": "Grubfoot", - "id": "4498" - }, - { - "name": "Scarab swarm", - "id": "4500" - }, - { - "name": "Ethereal Mimic", - "id": "4508" - }, - { - "name": "Baba Yaga", - "id": "4513" - }, - { - "name": "Pauline Polaris", - "id": "4514" - }, - { - "name": "Meteora", - "id": "4515" - }, - { - "name": "Melana Moonlander", - "id": "4516" - }, - { - "name": "Selene", - "id": "4517" - }, - { - "name": "Rimae Sirsalis", - "id": "4518" - }, - { - "name": "Sirsal Banker", - "id": "4519" - }, - { - "name": "Clan Guard", - "id": "4520" - }, - { - "name": "Enchanted Broom", - "id": "4522" - }, - { - "name": "Enchanted Broom", - "id": "4523" - }, - { - "name": "Enchanted Bucket", - "id": "4525" - }, - { - "name": "Bouquet Mac Hyacinth", - "id": "4526" - }, - { - "name": "Parrot", - "id": "4535" - }, - { - "name": "Lokar Searunner", - "id": "4536" - }, - { - "name": "Cabin boy", - "id": "4538" - }, - { - "name": "'Bird's-Eye' Jack", - "id": "4544" - }, - { - "name": "Palmer", - "id": "4552" - }, - { - "name": "'Betty' B.Boppin", - "id": "4553" - }, - { - "name": "Hirko", - "id": "4558" - }, - { - "name": "Holoy", - "id": "4559" - }, - { - "name": "Hura", - "id": "4563" - }, - { - "name": "Nick", - "id": "4569" - }, - { - "name": "Crow", - "id": "4570" - }, - { - "name": "Crow", - "id": "4571" - }, - { - "name": "Gianne jnr.", - "id": "4572" - }, - { - "name": "Timble", - "id": "4573" - }, - { - "name": "Tamble", - "id": "4574" - }, - { - "name": "Spang", - "id": "4575" - }, - { - "name": "Brambickle", - "id": "4576" - }, - { - "name": "Wingstone", - "id": "4577" - }, - { - "examine": "He looks like he's a long way from home.", - "name": "Penwie", - "id": "4578" - }, - { - "name": "Professor Manglethorp", - "id": "4583" - }, - { - "name": "Damwin", - "id": "4584" - }, - { - "name": "Professor Imblewyn", - "id": "4586" - }, - { - "name": "Perrdur", - "id": "4587" - }, - { - "name": "Dalila", - "id": "4588" - }, - { - "name": "Eebel", - "id": "4591" - }, - { - "name": "Ermin", - "id": "4592" - }, - { - "name": "Captain Lamdoo", - "id": "4596" - }, - { - "name": "Meegle", - "id": "4597" - }, - { - "name": "Wurbel", - "id": "4598" - }, - { - "name": "Sarble", - "id": "4599" - }, - { - "name": "Burkor", - "id": "4601" - }, - { - "name": "Froono", - "id": "4602" - }, - { - "name": "Brimstail", - "id": "4609" - }, - { - "name": "Gnome shop keeper", - "id": "4612" - }, - { - "name": "Cute creature", - "id": "4613" - }, - { - "name": "Cute creature", - "id": "4616" - }, - { - "name": "Evil creature", - "id": "4618" - }, - { - "name": "Cute creature", - "id": "4619" - }, - { - "name": "Evil creature", - "id": "4621" - }, - { - "name": "Cute creature", - "id": "4622" - }, - { - "name": "Evil creature", - "id": "4624" - }, - { - "name": "Cute creature", - "id": "4625" - }, - { - "name": "Evil creature", - "id": "4627" - }, - { - "name": "Cute creature", - "id": "4628" - }, - { - "name": "Evil creature", - "id": "4630" - }, - { - "name": "fluffie", - "id": "4631" - }, - { - "name": "fluffie", - "id": "4632" - }, - { - "name": "Oaknock the Engineer", - "id": "4644" - }, - { - "name": "King Healthorg", - "id": "4646" - }, - { - "name": "Hazelmere", - "id": "4647" - }, - { - "name": "Nisha", - "id": "4648" - }, - { - "name": "Tyras guard", - "id": "4649" - }, - { - "name": "Sir Prysin", - "id": "4657" - }, - { - "name": "Dark wizard", - "id": "4658" - }, - { - "name": "Denath", - "id": "4662" - }, - { - "name": "Denath", - "id": "4663" - }, - { - "name": "Wally", - "id": "4664" - }, - { - "name": "Vertida Sefalatis", - "id": "4709" - }, - { - "name": "Aeonisig Raispher", - "id": "4710" - }, - { - "name": "Safalaan", - "id": "4711" - }, - { - "name": "Sarius Guile", - "id": "4714" - }, - { - "name": "Meiyerditch citizen", - "id": "4727" - }, - { - "name": "Meiyerditch citizen", - "id": "4728" - }, - { - "name": "Meiyerditch citizen", - "id": "4729" - }, - { - "name": "Meiyerditch citizen", - "id": "4730" - }, - { - "name": "Meiyerditch citizen", - "id": "4731" - }, - { - "name": "Meiyerditch citizen", - "id": "4732" - }, - { - "name": "Meiyerditch citizen", - "id": "4742" - }, - { - "name": "Meiyerditch citizen", - "id": "4743" - }, - { - "name": "Meiyerditch citizen", - "id": "4744" - }, - { - "name": "Meiyerditch citizen", - "id": "4745" - }, - { - "name": "Meiyerditch miner", - "id": "4758" - }, - { - "name": "Meiyerditch miner", - "id": "4760" - }, - { - "name": "Meiyerditch miner", - "id": "4761" - }, - { - "name": "Shadowy figure", - "id": "4762" - }, - { - "name": "Shadowy figure", - "id": "4763" - }, - { - "name": "Shadowy figure", - "id": "4764" - }, - { - "name": "Stray dog", - "id": "4767" - }, - { - "name": "Cat", - "id": "4769" - }, - { - "name": "Boat", - "id": "4770" - }, - { - "name": "Boat", - "id": "4771" - }, - { - "name": "Held vampyre juvinate", - "id": "4781" - }, - { - "name": "Vampyre juvinate", - "id": "4782" - }, - { - "name": "Former vampyre", - "id": "4783" - }, - { - "name": "Former vampyre", - "id": "4784" - }, - { - "name": "Former vampyre", - "id": "4785" - }, - { - "name": "Former vampyre", - "id": "4786" - }, - { - "name": "Former vampyre", - "id": "4787" - }, - { - "name": "Former vampyre", - "id": "4788" - }, - { - "name": "Angry vampyre", - "id": "4790" - }, - { - "name": "Vanstrom Klause", - "id": "4791" - }, - { - "name": "Vanstrom Klause", - "id": "4792" - }, - { - "name": "Vanstrom Klause", - "id": "4794" - }, - { - "name": "Vanstrom Klause", - "id": "4795" - }, - { - "name": "Vanescula Drakan", - "id": "4797" - }, - { - "name": "Vanescula Drakan", - "id": "4798" - }, - { - "name": "Vanescula Drakan", - "id": "4799" - }, - { - "name": "Vanescula Drakan", - "id": "4800" - }, - { - "name": "Ranis Drakan", - "id": "4801" - }, - { - "name": "Ranis Drakan", - "id": "4802" - }, - { - "name": "Ranis Drakan", - "id": "4803" - }, - { - "name": "Ranis Drakan", - "id": "4804" - }, - { - "name": "Flying female vampire", - "id": "4809" - }, - { - "name": "Flying female vampire", - "id": "4846" - }, - { - "name": "Ezekial Lovecraft", - "id": "4853" - }, - { - "name": "Sarius Guile", - "id": "4857" - }, - { - "name": "Vanstrom Klause", - "id": "4862" - }, - { - "name": "Kennith", - "id": "4863" - }, - { - "name": "Kennith", - "id": "4864" - }, - { - "name": "Holgart", - "id": "4865" - }, - { - "name": "Holgart", - "id": "4867" - }, - { - "name": "Fisherman", - "id": "4869" - }, - { - "name": "Col. O'Niall", - "id": "4871" - }, - { - "name": "Col. O'Niall", - "id": "4873" - }, - { - "name": "Mayor Hobb", - "id": "4875" - }, - { - "name": "Brother Maledict", - "id": "4876" - }, - { - "name": "Brother Maledict", - "id": "4879" - }, - { - "name": "Witchaven villager", - "id": "4880" - }, - { - "name": "Witchaven villager", - "id": "4884" - }, - { - "name": "Witchaven villager", - "id": "4886" - }, - { - "name": "Witchaven villager", - "id": "4888" - }, - { - "name": "Mother Mallum", - "id": "4889" - }, - { - "name": "Giant lobster", - "id": "4891" - }, - { - "name": "Jeb", - "id": "4896" - }, - { - "name": "Sir Tinley", - "id": "4897" - }, - { - "name": "Smithing Tutor", - "id": "4905" - }, - { - "name": "Fishing spot", - "id": "4908" - }, - { - "name": "Jig cart", - "id": "4912" - }, - { - "name": "Jig cart", - "id": "4914" - }, - { - "name": "Jig cart", - "id": "4915" - }, - { - "name": "Jig cart", - "id": "4916" - }, - { - "name": "Jig cart", - "id": "4917" - }, - { - "name": "Jig cart", - "id": "4918" - }, - { - "name": "Abidor Crank", - "id": "4919" - }, - { - "name": "Ignatius Vulcan", - "id": "4946" - }, - { - "name": "My Arm", - "id": "4948" - }, - { - "name": "My Arm", - "id": "4949" - }, - { - "name": "My Arm", - "id": "4950" - }, - { - "name": "My Arm", - "id": "4958" - }, - { - "name": "My Arm", - "id": "4959" - }, - { - "name": "Adventurer", - "id": "4960" - }, - { - "name": "Captain Barnaby", - "id": "4961" - }, - { - "name": "Murcaily", - "id": "4963" - }, - { - "name": "Jagbakoba", - "id": "4964" - }, - { - "name": "Flies", - "id": "4966" - }, - { - "name": "Unnamed troll child", - "id": "4968" - }, - { - "name": "Drunken dwarf's leg", - "id": "4969" - }, - { - "name": "Baby Roc", - "id": "4970" - }, - { - "name": "Shadow", - "id": "4973" - }, - { - "name": "Captain Barnaby", - "id": "4974" - }, - { - "name": "Male slave", - "id": "4976" - }, - { - "name": "Female slave", - "id": "4978" - }, - { - "name": "Cart Camel", - "id": "4979" - }, - { - "name": "Mine Cart", - "id": "4980" - }, - { - "name": "Mine Cart", - "id": "4981" - }, - { - "name": "Ana", - "id": "4982" - }, - { - "name": "Mercenary", - "id": "4983" - }, - { - "name": "Irena", - "id": "4984" - }, - { - "name": "Gublinch", - "id": "5003" - }, - { - "name": "Gublinch", - "id": "5018" - }, - { - "name": "Gublinch", - "id": "5019" - }, - { - "name": "Jack", - "id": "5020" - }, - { - "name": "Jill", - "id": "5024" - }, - { - "name": "Jeff", - "id": "5025" - }, - { - "name": "Penance Fighter", - "id": "5044", - "combat_audio": "670,672,671", - "melee_animation": "5097", - "range_animation": "5097", - "attack_speed": "4", - "defence_animation": "5096", - "magic_animation": "5097", - "death_animation": "5098" - }, - { - "name": "Penance Fighter", - "id": "5045", - "combat_audio": "670,672,671", - "melee_animation": "5097", - "range_animation": "5097", - "attack_speed": "4", - "defence_animation": "5096", - "magic_animation": "5097", - "death_animation": "5098" - }, - { - "name": "Jack", - "id": "5046" - }, - { - "name": "Jill", - "id": "5047" - }, - { - "name": "Auguste", - "id": "5049" - }, - { - "name": "Auguste", - "id": "5050" - }, - { - "name": "Auguste", - "id": "5051" - }, - { - "name": "Auguste", - "id": "5052" - }, - { - "name": "Assistant Serf", - "id": "5053" - }, - { - "name": "Assistant Brock", - "id": "5054" - }, - { - "name": "Assistant Marrow", - "id": "5055" - }, - { - "name": "Assistant Le Smith", - "id": "5056" - }, - { - "name": "Assistant Stan", - "id": "5057" - }, - { - "name": "Bob", - "id": "5058" - }, - { - "name": "Curly", - "id": "5059" - }, - { - "name": "Moe", - "id": "5060" - }, - { - "name": "Larry", - "id": "5061" - }, - { - "name": "Shark", - "id": "5062" - }, - { - "name": "Shark", - "id": "5068" - }, - { - "name": "Shark", - "id": "5069" - }, - { - "name": "Tropical wagtail", - "id": "5070" - }, - { - "name": "Chinchompa", - "id": "5077" - }, - { - "name": "Matthias", - "id": "5090" - }, - { - "name": "Matthias", - "id": "5093" - }, - { - "name": "Gyr Falcon", - "id": "5094" - }, - { - "name": "Gyr Falcon", - "id": "5095" - }, - { - "name": "Gyr Falcon", - "id": "5096" - }, - { - "name": "Sabre-toothed kyatt", - "id": "5101" - }, - { - "name": "Aleck", - "id": "5110" - }, - { - "name": "Eagle", - "id": "5118" - }, - { - "name": "Eagle", - "id": "5121" - }, - { - "name": "Eagle", - "id": "5122" - }, - { - "name": "Eagle", - "id": "5123" - }, - { - "name": "Nickolaus", - "id": "5124" - }, - { - "name": "Nickolaus", - "id": "5127" - }, - { - "name": "Nickolaus", - "id": "5128" - }, - { - "name": "Nickolaus", - "id": "5129" - }, - { - "name": "Kebbit", - "id": "5134" - }, - { - "name": "Charlie", - "id": "5138" - }, - { - "name": "Boulder", - "id": "5139" - }, - { - "name": "Uri", - "id": "5141" - }, - { - "name": "Uri", - "id": "5142" - }, - { - "name": "Uri", - "id": "5143" - }, - { - "name": "Sheep", - "id": "5148" - }, - { - "name": "Sheep", - "id": "5149" - }, - { - "name": "Sheep", - "id": "5150" - }, - { - "name": "Sheep", - "id": "5151" - }, - { - "name": "Sheep", - "id": "5152" - }, - { - "name": "Sheep", - "id": "5153" - }, - { - "name": "Sheep", - "id": "5154" - }, - { - "name": "Sheep", - "id": "5155" - }, - { - "name": "Sheep", - "id": "5156" - }, - { - "name": "Sheep", - "id": "5157" - }, - { - "name": "Sheep", - "id": "5158" - }, - { - "name": "Sheep", - "id": "5159" - }, - { - "name": "Sheep", - "id": "5160" - }, - { - "name": "Sheep", - "id": "5161" - }, - { - "name": "Sheep", - "id": "5165" - }, - { - "name": "Ogre chieftain", - "id": "5174" - }, - { - "name": "Ogre shaman", - "id": "5175" - }, - { - "name": "Ogre shaman", - "id": "5177" - }, - { - "name": "Elkoy", - "id": "5179" - }, - { - "name": "Ogre shaman", - "id": "5180" - }, - { - "name": "Elkoy", - "id": "5182" - }, - { - "name": "Ogre shaman", - "id": "5183" - }, - { - "name": "Biggleswade", - "id": "5185" - }, - { - "name": "Ogre shaman", - "id": "5186" - }, - { - "name": "Ogre shaman", - "id": "5189" - }, - { - "name": "Blaze Sharpeye", - "id": "5191" - }, - { - "name": "Ogre shaman", - "id": "5192" - }, - { - "name": "Blaze Sharpeye", - "id": "5194" - }, - { - "name": "Witch", - "id": "5199" - }, - { - "name": "Alice's husband", - "id": "5201" - }, - { - "name": "Alice's husband", - "id": "5203" - }, - { - "name": "Alice's husband", - "id": "5205" - }, - { - "name": "Tree", - "id": "5206" - }, - { - "name": "Undead tree", - "id": "5208" - }, - { - "name": " Sneaky undead fowl", - "id": "5209" - }, - { - "name": "Cow1337killr", - "id": "5210" - }, - { - "name": "Alice", - "id": "5212" - }, - { - "name": "Penance Fighter", - "id": "5213", - "combat_audio": "670,672,671", - "melee_animation": "5097", - "range_animation": "5097", - "attack_speed": "4", - "defence_animation": "5096", - "magic_animation": "5097", - "death_animation": "5098" - }, - { - "name": "Penance Fighter", - "id": "5214", - "combat_audio": "670,672,671", - "melee_animation": "5097", - "range_animation": "5097", - "attack_speed": "4", - "defence_animation": "5096", - "magic_animation": "5097", - "death_animation": "5098" - }, - { - "name": "Penance Fighter", - "id": "5215", - "combat_audio": "670,672,671", - "melee_animation": "5097", - "range_animation": "5097", - "attack_speed": "4", - "defence_animation": "5096", - "magic_animation": "5097", - "death_animation": "5098" - }, - { - "name": "Penance Fighter", - "id": "5216", - "combat_audio": "670,672,671", - "melee_animation": "5097", - "range_animation": "5097", - "attack_speed": "4", - "defence_animation": "5096", - "magic_animation": "5097", - "death_animation": "5098" - }, - { - "name": "Penance Fighter", - "id": "5217", - "combat_audio": "670,672,671", - "melee_animation": "5097", - "range_animation": "5097", - "attack_speed": "4", - "defence_animation": "5096", - "magic_animation": "5097", - "death_animation": "5098" - }, - { - "name": "Penance Fighter", - "id": "5218", - "combat_audio": "670,672,671", - "melee_animation": "5097", - "range_animation": "5097", - "attack_speed": "4", - "defence_animation": "5096", - "magic_animation": "5097", - "death_animation": "5098" - }, - { - "name": "Penance Fighter", - "id": "5219", - "combat_audio": "670,672,671", - "melee_animation": "5097", - "range_animation": "5097", - "attack_speed": "4", - "defence_animation": "5096", - "magic_animation": "5097", - "death_animation": "5098" - }, - { - "name": "Penance Runner", - "id": "5220", - "defence_animation": "5101", - "death_animation": "5106" - }, - { - "name": "Penance Runner", - "id": "5221", - "defence_animation": "5101", - "death_animation": "5106" - }, - { - "name": "Penance Runner", - "id": "5222", - "defence_animation": "5101", - "death_animation": "5106" - }, - { - "name": "Penance Runner", - "id": "5223", - "defence_animation": "5101", - "death_animation": "5106" - }, - { - "name": "Penance Runner", - "id": "5224", - "defence_animation": "5101", - "death_animation": "5106" - }, - { - "name": "Penance Runner", - "id": "5225", - "defence_animation": "5101", - "death_animation": "5106" - }, - { - "name": "Penance Runner", - "id": "5226", - "defence_animation": "5101", - "death_animation": "5106" - }, - { - "name": "Penance Runner", - "id": "5227", - "defence_animation": "5101", - "death_animation": "5106" - }, - { - "name": "Penance Runner", - "id": "5228", - "defence_animation": "5101", - "death_animation": "5106" - }, - { - "name": "Penance Ranger", - "id": "5230", + "examine": "He's had a fair bit to drink...", + "attack_level": "5", + "attack_speed": "5", + "combat_audio": "2707,419,418", "combat_style": "1", - "melee_animation": "5395", - "defence_animation": "5396", - "death_animation": "5397", - "aggressive": "true" + "death_animation": "102", + "defence_animation": "101", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "99", + "magic_level": "20", + "melee_animation": "99", + "prj_height": "45", + "projectile": "33", + "range_animation": "99", + "range_level": "6", + "safespot": null, + "slayer_exp": "0", + "start_gfx": "", + "strength_level": "5" }, { - "name": "Penance Ranger", - "id": "5231", - "combat_style": "1", - "melee_animation": "5395", - "defence_animation": "5396", - "death_animation": "5397", - "aggressive": "true" + "id": "957", + "name": "Mubariz", + "examine": "Tough-looking combat type." }, { - "name": "Penance Ranger", - "id": "5232", - "combat_style": "1", - "melee_animation": "5395", - "defence_animation": "5396", - "death_animation": "5397", - "aggressive": "true" + "id": "958", + "name": "Fadli", + "examine": "Looks kinda bored." }, { - "name": "Penance Ranger", - "id": "5233", - "combat_style": "1", - "melee_animation": "5395", - "defence_animation": "5396", - "death_animation": "5397", - "aggressive": "true" + "id": "959", + "name": "A'abla", + "examine": "Trained to deal with all sorts of injuries." }, { - "name": "Penance Ranger", - "id": "5234", - "combat_style": "1", - "melee_animation": "5395", - "defence_animation": "5396", - "death_animation": "5397", - "aggressive": "true" + "id": "960", + "name": "Sabreen", + "examine": "Wow! She's made a statement with that hair!" }, { - "name": "Penance Ranger", - "id": "5235", - "combat_style": "1", - "melee_animation": "5395", - "defence_animation": "5396", - "death_animation": "5397", - "aggressive": "true" - }, - { - "name": "Penance Ranger", - "id": "5236", - "combat_style": "1", - "melee_animation": "5395", - "defence_animation": "5396", - "death_animation": "5397", - "aggressive": "true" - }, - { - "attack_level": "9", - "strength_level": "8", - "defence_level": "9", - "magic_level": "1", + "id": "961", + "name": "Surgeon General Tafani", + "examine": "This doctor really knows her stuff.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", "range_level": "1", - "name": "Penance Healer", - "id": "5238", - "defence_animation": "5105", - "death_animation": "5106", - "lifepoints": "27", - "melee_animation": "5107", - "range_animation": "5107", - "attack_speed": "4", - "magic_animation": "5107" + "safespot": null, + "strength_level": "1" }, { - "lifepoints": "32", - "attack_level": "13", - "strength_level": "15", - "defence_level": "14", - "magic_level": "1", - "range_level": "1", - "name": "Penance Healer", - "id": "5239", - "defence_animation": "5105", - "death_animation": "5106", - "melee_animation": "5107", - "range_animation": "5107", - "attack_speed": "4", - "magic_animation": "5107" + "id": "962", + "name": "Jaraah", + "examine": "Has the messy job of putting players back together again." }, { - "lifepoints": "37", - "attack_level": "20", - "strength_level": "18", - "defence_level": "19", - "magic_level": "1", - "range_level": "1", - "name": "Penance Healer", - "id": "5240", - "defence_animation": "5105", - "death_animation": "5106", - "melee_animation": "5107", - "range_animation": "5107", - "attack_speed": "4", - "magic_animation": "5107" + "id": "963", + "name": "Zahwa", + "examine": "Battle-scarred." }, { - "lifepoints": "43", + "id": "964", + "name": "Ima", + "examine": "A citizen of Al Kharid" + }, + { + "id": "965", + "name": "Sabeil", + "examine": "A citizen of Al Kharid" + }, + { + "id": "966", + "name": "Jadid", + "examine": "A citizen of Al Kharid" + }, + { + "id": "967", + "name": "Dalal", + "examine": "A citizen of Al Kharid" + }, + { + "id": "968", + "name": "Afrah", + "examine": "A citizen of Al Kharid" + }, + { + "id": "969", + "name": "Jeed", + "examine": "A citizen of Al Kharid" + }, + { + "id": "970", + "name": "Diango", + "examine": "He smells funny." + }, + { + "id": "971", + "name": "Chadwell", + "examine": "Shopkeeper." + }, + { + "id": "972", + "name": "Koftik", + "examine": "The cave guide." + }, + { + "id": "973", + "name": "Koftik", + "examine": "The cave guide." + }, + { + "id": "974", + "name": "Koftik", + "examine": "The cave guide." + }, + { + "id": "975", + "name": "Koftik", + "examine": "The cave guide." + }, + { + "id": "976", + "name": "Koftik", + "examine": "The cave guide." + }, + { + "id": "977", + "name": "Blessed spider", + "examine": "It's one of Iban's pets.", "attack_level": "22", - "strength_level": "23", - "defence_level": "21", - "magic_level": "1", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "5327", + "range_animation": "0", + "range_level": "30", + "safespot": null, + "strength_level": "22", + "weakness": "2" + }, + { + "id": "978", + "name": "Blessed giant rat", + "examine": "It's one of Iban's pet vermin.", + "attack_level": "12", + "combat_audio": "703,705,704", + "defence_animation": "0", + "defence_level": "12", + "lifepoints": "17", + "magic_animation": "0", + "range_animation": "0", "range_level": "1", - "name": "Penance Healer", - "id": "5241", - "defence_animation": "5105", - "death_animation": "5106", - "melee_animation": "5107", - "range_animation": "5107", - "attack_speed": "4", - "magic_animation": "5107" + "safespot": null, + "strength_level": "12", + "weakness": "9" }, { - "lifepoints": "49", - "attack_level": "26", - "strength_level": "27", - "defence_level": "25", - "magic_level": "1", + "id": "979", + "name": "Slave", + "examine": "A wretched slave of Iban.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", "range_level": "1", - "name": "Penance Healer", - "id": "5242", - "defence_animation": "5105", - "death_animation": "5106", - "melee_animation": "5107", - "range_animation": "5107", - "attack_speed": "4", - "magic_animation": "5107" + "safespot": null, + "strength_level": "1" }, { - "lifepoints": "55", - "attack_level": "30", - "strength_level": "32", - "defence_level": "28", - "magic_level": "1", + "id": "980", + "name": "Slave", + "examine": "A wretched slave of Iban.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", "range_level": "1", - "name": "Penance Healer", - "id": "5243", - "defence_animation": "5105", - "death_animation": "5106", - "melee_animation": "5107", - "range_animation": "5107", - "attack_speed": "4", - "magic_animation": "5107" + "safespot": null, + "strength_level": "1" }, { - "lifepoints": "60", - "attack_level": "33", - "strength_level": "36", - "defence_level": "34", - "magic_level": "1", + "id": "981", + "name": "Slave", + "examine": "A wretched slave of Iban.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", "range_level": "1", - "name": "Penance Healer", - "id": "5244", - "defence_animation": "5105", - "death_animation": "5106", - "melee_animation": "5107", - "range_animation": "5107", - "attack_speed": "4", - "magic_animation": "5107" + "safespot": null, + "strength_level": "1" }, { - "lifepoints": "67", - "attack_level": "40", - "strength_level": "38", - "defence_level": "36", - "magic_level": "1", + "id": "982", + "name": "Slave", + "examine": "A wretched slave of Iban.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", "range_level": "1", - "name": "Penance Healer", - "id": "5245", - "defence_animation": "5105", - "death_animation": "5106", - "melee_animation": "5107", - "range_animation": "5107", - "attack_speed": "4", - "magic_animation": "5107" + "safespot": null, + "strength_level": "1" }, { - "lifepoints": "76", - "attack_level": "40", - "strength_level": "44", - "defence_level": "38", - "magic_level": "1", + "id": "983", + "name": "Slave", + "examine": "A wretched slave of Iban.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", "range_level": "1", - "name": "Penance Healer", - "id": "5246", - "defence_animation": "5105", - "death_animation": "5106", - "melee_animation": "5107", - "range_animation": "5107", - "attack_speed": "4", - "magic_animation": "5107" - }, - { - "name": "Locust rider", - "id": "5255" - }, - { - "name": "Locust rider", - "id": "5256" - }, - { - "name": "Banker", - "id": "5257" - }, - { - "name": "Banker", - "id": "5259" - }, - { - "name": "Stonemason", - "id": "5261" - }, - { - "name": "Nathifa", - "id": "5263" - }, - { - "name": "Urbi", - "id": "5265" - }, - { - "name": "Jamila", - "id": "5267" - }, - { - "name": "Sophanem guard", - "id": "5269" - }, - { - "name": "Sophanem guard", - "id": "5271" - }, - { - "name": "Sophanem guard", - "id": "5273" - }, - { - "name": "Sophanem guard", - "id": "5275" - }, - { - "name": "Coenus", - "id": "5278" - }, - { - "name": "Jex", - "id": "5279" - }, - { - "name": "Maisa", - "id": "5280" - }, - { - "name": "Osman", - "id": "5282" - }, - { - "name": "Osman", - "id": "5286" - }, - { - "name": "Osman", - "id": "5287" - }, - { - "name": "Embalmer", - "id": "5288" - }, - { - "name": "Carpenter", - "id": "5289" - }, - { - "name": "Linen worker", - "id": "5290" - }, - { - "name": "Priest", - "id": "5291" - }, - { - "name": "Giant scarab", - "id": "5292" - }, - { - "name": "Mummy ashes", - "id": "5360" - }, - { - "name": "Odovacar", - "id": "5383" - }, - { - "name": "Terror dog statue", - "id": "5415" - }, - { - "name": "Terror dog statue", - "id": "5416" - }, - { - "name": "Tarn", - "id": "5419" - }, - { - "name": "Larry", - "id": "5423" - }, - { - "name": "Larry", - "id": "5425" - }, - { - "name": "Larry", - "id": "5426" - }, - { - "name": "Penguin", - "id": "5427" - }, - { - "name": "Penguin", - "id": "5429" - }, - { - "name": "Penguin", - "id": "5430" - }, - { - "name": "KGP Guard", - "id": "5431" - }, - { - "name": "Pescaling Pax", - "id": "5432" - }, - { - "name": "Ping", - "id": "5433" - }, - { - "name": "Ping", - "id": "5434" - }, - { - "name": "Pong", - "id": "5435" - }, - { - "name": "Pong", - "id": "5436" - }, - { - "name": "Ping", - "id": "5437" - }, - { - "name": "Pong", - "id": "5438" - }, - { - "name": "Noodle", - "id": "5443" - }, - { - "name": "Penguin", - "id": "5445" - }, - { - "name": "Penguin suit", - "id": "5446" - }, - { - "name": "Penguin", - "id": "5449" - }, - { - "name": "Penguin", - "id": "5450" - }, - { - "name": "Penguin", - "id": "5451" - }, - { - "name": "Crusher", - "id": "5456" - }, - { - "name": "Crusher", - "id": "5457" - }, - { - "name": "Crusher", - "id": "5458" - }, - { - "name": "Crusher", - "id": "5459" - }, - { - "name": "Tree", - "id": "5460" - }, - { - "name": "Jungle Tree", - "id": "5461" - }, - { - "name": "Tolna", - "id": "5462" - }, - { - "name": "Honour guard", - "id": "5463" - }, - { - "name": "Honour guard", - "id": "5464" - }, - { - "name": "Fridleif Shieldson", - "id": "5465" - }, - { - "name": "Thakkrad Sigmundson", - "id": "5466" - }, - { - "name": "Iceberg", - "id": "5467" - }, - { - "name": "Iceberg", - "id": "5468" - }, - { - "name": "Arctic Pine", - "id": "5469" - }, - { - "name": "Fishing spot", - "id": "5470" - }, - { - "name": "Fishing spot", - "id": "5471" - }, - { - "name": "Bork Sigmundson", - "id": "5477" - }, - { - "name": "Mord Gunnars", - "id": "5481" - }, - { - "name": "Mord Gunnars", - "id": "5482" - }, - { - "name": "Miner", - "id": "5498" - }, - { - "name": "Grundt", - "id": "5502" - }, - { - "name": "Mawnis Burowgar", - "id": "5503" - }, - { - "name": "Mawnis Burowgar", - "id": "5504" - }, - { - "name": "Fridleif Shieldson", - "id": "5505" - }, - { - "name": "Thakkrad Sigmundson", - "id": "5506" - }, - { - "name": "Maria Gunnars", - "id": "5507" - }, - { - "name": "Maria Gunnars", - "id": "5508" - }, - { - "name": "Jofridr Mordstatter", - "id": "5509" - }, - { - "name": "Morten Holdstrom", - "id": "5510" - }, - { - "name": "Gunnar Holdstrom", - "id": "5511" - }, - { - "name": "Anne Isaakson", - "id": "5512" - }, - { - "name": "Lisse Isaakson", - "id": "5513" - }, - { - "name": "Kjedelig Uppsen", - "id": "5518" - }, - { - "name": "Trogen Konungarde", - "id": "5519" - }, - { - "name": "Slug Hemligssen", - "id": "5520" - }, - { - "name": "Ice troll grunt", - "id": "5528" - }, - { - "name": "Sorceress", - "id": "5530" - }, - { - "name": "Osman", - "id": "5560" - }, - { - "name": "Del-Monty", - "id": "5562" - }, - { - "name": "Bouncer", - "id": "5564" - }, - { - "name": "Bouncer", - "id": "5565" - }, - { - "name": "General Khazard", - "id": "5566" - }, - { - "name": "Scout", - "id": "5567" - }, - { - "name": "Scout", - "id": "5568" - }, - { - "name": "Scout", - "id": "5569" - }, - { - "name": "Scout", - "id": "5570" - }, - { - "name": "Effigy", - "id": "5573" - }, - { - "name": "Effigy", - "id": "5579" - }, - { - "name": "Bonafido", - "id": "5580" - }, - { - "name": "Homunculus", - "id": "5582" - }, - { - "name": "Homunculus", - "id": "5583" - }, - { - "name": "'Transmute' The Alchemist", - "id": "5585" - }, - { - "name": "'Transmute' The Alchemist", - "id": "5586" - }, - { - "name": "'Currency' The Alchemist", - "id": "5587" - }, - { - "name": "'Currency' The Alchemist", - "id": "5588" - }, - { - "name": "'The Guns'", - "id": "5592" - }, - { - "name": "Unicow", - "id": "5598" - }, - { - "name": "Elfinlocks", - "id": "5604" - }, - { - "name": "Clockwork cat", - "id": "5605" - }, - { - "name": "Clockwork cat", - "id": "5606" - }, - { - "name": "Rufus", - "id": "5612" - }, - { - "name": "Mi-Gor", - "id": "5613" - }, - { - "name": "Puffin", - "id": "5615" - }, - { - "name": "Brother Tranquility", - "id": "5616" - }, - { - "name": "Brother Tranquility", - "id": "5617" - }, - { - "name": "Brother Tranquility", - "id": "5618" - }, - { - "name": "Zombie monk", - "id": "5623" - }, - { - "name": "Zombie monk", - "id": "5624" - }, - { - "name": "Zombie monk", - "id": "5625" - }, - { - "name": "Zombie monk", - "id": "5626" - }, - { - "name": "Undead Lumberjack", - "id": "5667" - }, - { - "name": "Undead Lumberjack", - "id": "5679" - }, - { - "name": "Undead Lumberjack", - "id": "5681" - }, - { - "name": "Undead Lumberjack", - "id": "5682" - }, - { - "name": "Undead Lumberjack", - "id": "5683" - }, - { - "name": "Undead Lumberjack", - "id": "5684" - }, - { - "name": "Undead Lumberjack", - "id": "5685" - }, - { - "name": "Undead Lumberjack", - "id": "5686" - }, - { - "name": "Undead Lumberjack", - "id": "5687" - }, - { - "name": "Undead Lumberjack", - "id": "5688" - }, - { - "name": "Undead Lumberjack", - "id": "5689" - }, - { - "name": "Undead Lumberjack", - "id": "5690" - }, - { - "name": "Undead Lumberjack", - "id": "5691" - }, - { - "name": "Undead Lumberjack", - "id": "5692" - }, - { - "name": "Undead Lumberjack", - "id": "5693" - }, - { - "name": "Undead Lumberjack", - "id": "5694" - }, - { - "name": "Undead Lumberjack", - "id": "5695" - }, - { - "name": "Undead Lumberjack", - "id": "5696" - }, - { - "name": "Undead Lumberjack", - "id": "5697" - }, - { - "name": "Undead Lumberjack", - "id": "5698" - }, - { - "name": "Undead Lumberjack", - "id": "5699" - }, - { - "name": "Undead Lumberjack", - "id": "5700" - }, - { - "name": "Undead Lumberjack", - "id": "5701" - }, - { - "name": "Undead Lumberjack", - "id": "5702" - }, - { - "name": "Undead Lumberjack", - "id": "5703" - }, - { - "name": "Undead Lumberjack", - "id": "5704" - }, - { - "name": "Undead Lumberjack", - "id": "5705" - }, - { - "name": "Undead Lumberjack", - "id": "5706" - }, - { - "name": "Undead Lumberjack", - "id": "5707" - }, - { - "name": "Undead Lumberjack", - "id": "5708" - }, - { - "name": "Undead Lumberjack", - "id": "5709" - }, - { - "name": "Undead Lumberjack", - "id": "5710" - }, - { - "name": "Undead Lumberjack", - "id": "5711" - }, - { - "name": "Undead Lumberjack", - "id": "5712" - }, - { - "name": "Undead Lumberjack", - "id": "5713" - }, - { - "name": "Undead Lumberjack", - "id": "5714" - }, - { - "name": "Undead Lumberjack", - "id": "5715" - }, - { - "name": "Undead Lumberjack", - "id": "5716" - }, - { - "name": "Undead Lumberjack", - "id": "5717" - }, - { - "name": "Undead Lumberjack", - "id": "5718" - }, - { - "name": "Undead Lumberjack", - "id": "5719" - }, - { - "name": "Undead Lumberjack", - "id": "5720" - }, - { - "name": "Undead Lumberjack", - "id": "5721" - }, - { - "name": "Undead Lumberjack", - "id": "5722" - }, - { - "name": "Undead Lumberjack", - "id": "5723" - }, - { - "name": "Undead Lumberjack", - "id": "5724" - }, - { - "name": "Undead Lumberjack", - "id": "5725" - }, - { - "name": "Undead Lumberjack", - "id": "5726" - }, - { - "name": "Undead Lumberjack", - "id": "5727" - }, - { - "name": "Undead Lumberjack", - "id": "5728" - }, - { - "name": "Undead Lumberjack", - "id": "5729" - }, - { - "name": "Undead Lumberjack", - "id": "5730" - }, - { - "name": "Undead Lumberjack", - "id": "5731" - }, - { - "name": "Undead Lumberjack", - "id": "5732" - }, - { - "name": "Undead Lumberjack", - "id": "5733" - }, - { - "name": "Undead Lumberjack", - "id": "5734" - }, - { - "name": "Undead Lumberjack", - "id": "5735" - }, - { - "name": "Undead Lumberjack", - "id": "5736" - }, - { - "name": "Undead Lumberjack", - "id": "5737" - }, - { - "name": "Undead Lumberjack", - "id": "5738" - }, - { - "name": "Undead Lumberjack", - "id": "5739" - }, - { - "name": "Undead Lumberjack", - "id": "5740" - }, - { - "name": "Undead Lumberjack", - "id": "5741" - }, - { - "name": "Undead Lumberjack", - "id": "5742" - }, - { - "name": "Undead Lumberjack", - "id": "5743" - }, - { - "name": "Undead Lumberjack", - "id": "5744" - }, - { - "name": "Undead Lumberjack", - "id": "5745" - }, - { - "name": "Undead Lumberjack", - "id": "5746" - }, - { - "name": "Undead Lumberjack", - "id": "5747" - }, - { - "name": "Fishing spot", - "id": "5748" - }, - { - "name": "Fishing spot", - "id": "5749" - }, - { - "name": "Ur-zek", - "id": "5770" - }, - { - "name": "Ur-vass", - "id": "5771" - }, - { - "name": "Ur-taal", - "id": "5772" - }, - { - "name": "Ur-meg", - "id": "5773" - }, - { - "name": "Ur-lun", - "id": "5774" - }, - { - "name": "Ur-pel", - "id": "5775" - }, - { - "name": "Bartak", - "id": "5778" - }, - { - "name": "Turgall", - "id": "5779" - }, - { - "name": "Reldak", - "id": "5780" - }, - { - "name": "Miltog", - "id": "5781" - }, - { - "name": "Mernik", - "id": "5782" - }, - { - "name": "Gourmet", - "id": "5787" - }, - { - "name": "Gourmet", - "id": "5789" - }, - { - "name": "Gourmet", - "id": "5790" - }, - { - "name": "Gourmet", - "id": "5791" - }, - { - "name": "Turgok", - "id": "5792" - }, - { - "name": "Markog", - "id": "5793" - }, - { - "name": "Durgok", - "id": "5794" - }, - { - "name": "Tindar", - "id": "5795" - }, - { - "name": "Gundik", - "id": "5796" - }, - { - "name": "Zenkog", - "id": "5797" - }, - { - "name": "Lurgon", - "id": "5798" - }, - { - "name": "Ur-tag", - "id": "5799" - }, - { - "name": "Young 'un", - "id": "5802" - }, - { - "name": "Tyke", - "id": "5804" - }, - { - "name": "Nipper", - "id": "5806" - }, - { - "name": "Movario", - "id": "5825" - }, - { - "name": "Darve", - "id": "5826" - }, - { - "name": "Barlak", - "id": "5828" - }, - { - "name": "Rat Burgiss", - "id": "5830" - }, - { - "name": "Surok Magis", - "id": "5835" - }, - { - "name": "Zaff", - "id": "5836" - }, - { - "name": "Anna Jones", - "id": "5837" - }, - { - "name": "King Roald", - "id": "5838" - }, - { - "name": "Mishkal'un Dorn", - "id": "5839" - }, - { - "name": "Dakh'thoulan Aegis", - "id": "5840" - }, - { - "name": "Sil'as Dahcsnu", - "id": "5841" - }, - { - "name": "Bench", - "id": "5853" - }, - { - "name": "Zanik", - "id": "5857" - }, - { - "name": "Ur-tag", - "id": "5858" - }, - { - "name": "Sigmund and Zanik", - "id": "5862" - }, - { - "name": "Ambassador Alvijar", - "id": "5863" - }, - { - "name": "Tegdak", - "id": "5868" - }, - { - "name": "Zanik", - "id": "5869" - }, - { - "name": "Sergeant Mossfists", - "id": "5871" - }, - { - "name": "Sergeant Slimetoes", - "id": "5872" - }, - { - "name": "Cyrisus", - "id": "5887" - }, - { - "name": "Cyrisus", - "id": "5894" - }, - { - "name": "Cyrisus", - "id": "5895" - }, - { - "name": "Cyrisus", - "id": "5896" - }, - { - "name": "Cyrisus", - "id": "5897" - }, - { - "name": "'Bird's-Eye' Jack", - "id": "5898" - }, - { - "name": "The Inadequacy", - "id": "5899" - }, - { - "name": "The Illusive", - "id": "5907" - }, - { - "name": "Banker", - "id": "5912" - }, - { - "name": "Banker", - "id": "5913" - }, - { - "name": "Elsie", - "id": "5915" - }, - { - "name": "Stray dog", - "id": "5918" - }, - { - "name": "Barnabus Hurma", - "id": "5932" - }, - { - "name": "Marius Giste", - "id": "5933" - }, - { - "name": "Caden Azro", - "id": "5934" - }, - { - "name": "Thias Leacke", - "id": "5935" - }, - { - "name": "Sinco Doar", - "id": "5936" - }, - { - "name": "Tinse Torpe", - "id": "5937" - }, - { - "name": "Torrcs", - "id": "5939" - }, - { - "name": "Marfet", - "id": "5940" - }, - { - "name": "Museum guard", - "id": "5941" - }, - { - "name": "Museum guard", - "id": "5942" - }, - { - "name": "Museum guard", - "id": "5943" - }, - { - "name": "Schoolboy", - "id": "5946" - }, - { - "name": "Teacher and pupil", - "id": "5948" - }, - { - "name": "Schoolboy", - "id": "5949" - }, - { - "name": "Teacher", - "id": "5950" - }, - { - "name": "Schoolgirl", - "id": "5951" - }, - { - "name": "Workman", - "id": "5953" - }, - { - "name": "Workman", - "id": "5955" - }, - { - "name": "Schoolgirl", - "id": "5957" - }, - { - "name": "Ed Wood", - "id": "5964" - }, - { - "name": "Orlando Smith", - "id": "5965" - }, - { - "name": "Natural historian", - "id": "5967" - }, - { - "name": "Natural historian", - "id": "5968" - }, - { - "name": "Natural historian", - "id": "5969" - }, - { - "name": "Natural historian", - "id": "5970" - }, - { - "name": "Schoolgirl", - "id": "5983" - }, - { - "name": "Schoolgirl", - "id": "5984" - }, - { - "name": "Schoolgirl", - "id": "5985" - }, - { - "name": "Miazrqa", - "id": "5988" - }, - { - "name": "Grimgnash", - "id": "5989" - }, - { - "name": "Drain pipe", - "id": "5991" - }, - { - "name": "Mouse", - "id": "5995" - }, - { - "name": "Rupert the Beard", - "id": "5997" - }, - { - "name": "Rupert the Beard", - "id": "6000" - }, - { - "name": "Gnome", - "id": "6002" - }, - { - "name": "Winkin", - "id": "6003" - }, - { - "name": "Gnome", - "id": "6004" - }, - { - "name": "Cage", - "id": "6005" - }, - { - "name": "Immenizz", - "id": "6071" - }, - { - "name": "Cyclops", - "id": "6075" - }, - { - "name": "Captain Ned", - "id": "6082" - }, - { - "name": "Cabin boy Jenkins", - "id": "6085" - }, - { - "name": "Cabin boy Jenkins", - "id": "6086" - }, - { - "name": "Elvarg", - "id": "6087" - }, - { - "name": "Drake", - "id": "6114" - }, - { - "examine": "A man, learned in the ways of the stars.", - "name": "Observatory professor", - "id": "6119" - }, - { - "name": "Clothears", - "id": "6130" - }, - { - "name": "Town crier", - "id": "6138" - }, - { - "name": "Town crier", - "id": "6139" - }, - { - "name": "Sir Lucan", - "id": "6158" - }, - { - "name": "Sir Lancelot", - "id": "6160" - }, - { - "name": "Sir Bedivere", - "id": "6161" - }, - { - "name": "Sir Tristram", - "id": "6162" - }, - { - "name": "Sir Pelleas", - "id": "6163" - }, - { - "name": "Sir Gawain", - "id": "6164" - }, - { - "name": "Sir Kay", - "id": "6165" - }, - { - "name": "Sir Pelleas", - "id": "6166" - }, - { - "name": "Sir Gawain", - "id": "6167" - }, - { - "name": "Sir Kay", - "id": "6168" - }, - { - "name": "Sir Kay", - "id": "6171" - }, - { - "name": "Sir Gawain", - "id": "6172" - }, - { - "name": "Sir Lucan", - "id": "6173" - }, - { - "name": "Bandit", - "id": "6174" - }, - { - "name": "Sir Tristram", - "id": "6175" - }, - { - "name": "Sir Pelleas", - "id": "6176" - }, - { - "name": "Sir Bedivere", - "id": "6177" - }, - { - "name": "Anna", - "id": "6178" - }, - { - "name": "David", - "id": "6179" - }, - { - "name": "Anna", - "id": "6180" - }, - { - "name": "Court judge", - "id": "6181" - }, - { - "name": "Jury", - "id": "6182" - }, - { - "name": "Prosecutor", - "id": "6185" - }, - { - "name": "Morgan Le Faye", - "id": "6186" - }, - { - "name": "Sinclair", - "id": "6191" - }, - { - "name": "Banker", - "id": "6199" - }, - { - "name": "K'ril Tsutsaroth", - "id": "6202" - }, - { - "name": "Warped terrorbird", - "id": "6284" - }, - { - "name": "Jeffery", - "id": "6298" - }, - { - "name": "Big monolith", - "id": "6299" - }, - { - "name": "Small monolith", - "id": "6300" - }, - { - "name": "Cute creature", - "id": "6301" - }, - { - "name": "Evil creature", - "id": "6302" - }, - { - "name": "Yewnock the engineer", - "id": "6303" - }, - { - "name": "Bolrie", - "id": "6304" - }, - { - "name": "Hazelmere", - "id": "6305" - }, - { - "name": "Advisor", - "id": "6307" - }, - { - "name": "King Argenthorg", - "id": "6308" - }, - { - "name": "Prince Argenthorg", - "id": "6309" - }, - { - "name": "Cute creature", - "id": "6310" - }, - { - "name": "Evil creature", - "id": "6312" - }, - { - "name": "Terrorbird servant", - "id": "6313" - }, - { - "name": "Guard no. 21", - "id": "6316" - }, - { - "name": "Guard no. 72", - "id": "6317" - }, - { - "name": "Longramble", - "id": "6318" - }, - { - "name": "Spirit tree", - "id": "6319" - }, - { - "name": "Spirit tree", - "id": "6321" - }, - { - "name": "Child", - "id": "6333" - }, - { - "name": "Child", - "id": "6340" - }, - { - "name": "Child", - "id": "6341" - }, - { - "name": "Child", - "id": "6342" - }, - { - "name": "Child", - "id": "6343" - }, - { - "name": "Child", - "id": "6345" - }, - { - "name": "Street urchin", - "id": "6357" - }, - { - "name": "Street urchin", - "id": "6359" - }, - { - "name": "Street urchin", - "id": "6360" - }, - { - "name": "Street urchin", - "id": "6361" - }, - { - "name": "Eniola", - "id": "6362" - }, - { - "name": "Kennith", - "id": "6373" - }, - { - "name": "Wizard Cromperty", - "id": "6375" - }, - { - "name": "Karamjan Jungle Eagle", - "id": "6384" - }, - { - "name": "Bandit", - "id": "6386" - }, - { - "name": "Glough", - "id": "6391" - }, - { - "name": "Oldak", - "id": "6392" - }, - { - "name": "Zanik", - "id": "6393" - }, - { - "name": "Zanik", - "id": "6394" - }, - { - "name": "Zanik", - "id": "6396" - }, - { - "name": "Zanik", - "id": "6398" - }, - { - "name": "Oldak", - "id": "6400" - }, - { - "name": "Skoblin", - "id": "6468" - }, - { - "name": "Snothead", - "id": "6474" - }, - { - "name": "Snailfeet", - "id": "6475" - }, - { - "name": "Mosschin", - "id": "6476" - }, - { - "name": "Redeyes", - "id": "6477" - }, - { - "name": "Strongbones", - "id": "6478" - }, - { - "name": "Grubfoot", - "id": "6479" - }, - { - "name": "Grubfoot", - "id": "6480" - }, - { - "name": "Priest", - "id": "6483" - }, - { - "name": "Priest", - "id": "6484" - }, - { - "name": "Priest", - "id": "6485" - }, - { - "name": "Priest", - "id": "6486" - }, - { - "name": "Priest", - "id": "6487" - }, - { - "name": "High priest", - "id": "6489" - }, - { - "name": "Registrar 1", - "id": "6505" - }, - { - "name": "Jury", - "id": "6511" - }, - { - "name": "Spectator", - "id": "6513" - }, - { - "name": "Spectator", - "id": "6515" - }, - { - "name": "Spectator", - "id": "6517" - }, - { - "name": "Spectator", - "id": "6519" - }, - { - "name": "Head Registrar", - "id": "6520" - }, - { - "name": "Mandrith", - "id": "6537" - }, - { - "name": "Banker", - "id": "6538" - }, - { - "name": "Charley the Cleaner", - "id": "6539" - }, - { - "name": "Scotty the Cleaner", - "id": "6540" - }, - { - "name": "Sanchez the Cleaner", - "id": "6541" - }, - { - "name": "Summer Bonde", - "id": "6542" - }, - { - "name": "Broken grave marker", - "id": "6566" - }, - { - "name": "Collapsing grave marker", - "id": "6567" - }, - { - "name": "Grave marker", - "id": "6568" - }, - { - "name": "Broken grave marker", - "id": "6569" - }, - { - "name": "Collapsing grave marker", - "id": "6570" - }, - { - "name": "Gravestone", - "id": "6571" - }, - { - "name": "Broken gravestone", - "id": "6572" - }, - { - "name": "Collapsing gravestone", - "id": "6573" - }, - { - "name": "Gravestone", - "id": "6574" - }, - { - "name": "Broken gravestone", - "id": "6575" - }, - { - "name": "Collapsing gravestone", - "id": "6576" - }, - { - "name": "Gravestone", - "id": "6577" - }, - { - "name": "Broken gravestone", - "id": "6578" - }, - { - "name": "Collapsing gravestone", - "id": "6579" - }, - { - "name": "Stele", - "id": "6580" - }, - { - "name": "Broken stele", - "id": "6581" - }, - { - "name": "Collapsing stele", - "id": "6582" - }, - { - "name": "Saradomin symbol", - "id": "6583" - }, - { - "name": "Broken Saradomin symbol", - "id": "6584" - }, - { - "name": "Collapsing Saradomin symbol", - "id": "6585" - }, - { - "name": "Zamorak symbol", - "id": "6586" - }, - { - "name": "Broken Zamorak symbol", - "id": "6587" - }, - { - "name": "Collapsing Zamorak symbol", - "id": "6588" - }, - { - "name": "Guthix symbol", - "id": "6589" - }, - { - "name": "Broken Guthix symbol", - "id": "6590" - }, - { - "name": "Collapsing Guthix symbol", - "id": "6591" - }, - { - "name": "Bandos symbol", - "id": "6592" - }, - { - "name": "Broken Bandos symbol", - "id": "6593" - }, - { - "name": "Collapsing Bandos symbol", - "id": "6594" - }, - { - "name": "Armadyl symbol", - "id": "6595" - }, - { - "name": "Broken Armadyl symbol", - "id": "6596" - }, - { - "name": "Collapsing Armadyl symbol", - "id": "6597" - }, - { - "name": "Memorial stone", - "id": "6598" - }, - { - "name": "Broken memorial stone", - "id": "6599" - }, - { - "name": "Collapsing memorial stone", - "id": "6600" - }, - { - "name": "Memorial stone", - "id": "6601" - }, - { - "name": "Broken memorial stone", - "id": "6602" - }, - { - "name": "Collapsing memorial stone", - "id": "6603" - }, - { - "name": "Snow imp", - "id": "6732" - }, - { - "name": "Snow imp", - "id": "6733" - }, - { - "name": "Snow imp", - "id": "6734" - }, - { - "name": "Snow imp", - "id": "6735" - }, - { - "name": "Snow imp", - "id": "6736" - }, - { - "name": "Snow imp", - "id": "6737" - }, - { - "name": "Snow imp", - "id": "6738" - }, - { - "name": "Snow", - "id": "6741" - }, - { - "examine": "A traditional snowman.", - "name": "Snowman", - "id": "6746" - }, - { - "name": "Bulldog", - "id": "6751" - }, - { - "name": "Mummy", - "id": "6753" - }, - { - "name": "Mummy", - "id": "6754" - }, - { - "name": "Mummy", - "id": "6755" - }, - { - "name": "Mummy", - "id": "6756" - }, - { - "name": "Mummy", - "id": "6757" - }, - { - "name": "Mummy", - "id": "6758" - }, - { - "name": "Mummy", - "id": "6759" - }, - { - "name": "Mummy", - "id": "6760" - }, - { - "name": "Giant scarab", - "id": "6771" - }, - { - "name": "Scabaras priest", - "id": "6775" - }, - { - "name": "Maisa", - "id": "6782" - }, - { - "name": "Maisa", - "id": "6783" - }, - { - "name": "Priest", - "id": "6784" - }, - { - "name": "High Priest of Scabaras", - "id": "6791" - }, - { - "name": "Vulture", - "id": "6792" - }, - { - "name": "Spirit terrorbird", - "id": "6793" - }, - { - "name": "Beaver", - "id": "6808" - }, - { - "name": "Pet shop owner", - "id": "6898" - }, - { - "name": "Bulldog", - "id": "6899" - }, - { - "name": "Baby penguin", - "id": "6908" - }, - { - "name": "Penguin", - "id": "6909" - }, - { - "name": "Penguin", - "id": "6910" - }, - { - "name": "Raven chick", - "id": "6911" - }, - { - "name": "Raven", - "id": "6912" - }, - { - "name": "Baby raccoon", - "id": "6913" - }, - { - "name": "Raccoon", - "id": "6914" - }, - { - "name": "Baby gecko", - "id": "6915" - }, - { - "examine": "", - "name": "Gecko", - "id": "6916" - }, - { - "examine": "How cute!", - "name": "Gecko", - "id": "6918" - }, - { - "name": "Baby squirrel", - "id": "6919" - }, - { - "name": "Squirrel", - "id": "6920" - }, - { - "name": "Baby chameleon", - "id": "6922" - }, - { - "name": "Chameleon", - "id": "6923" - }, - { - "name": "Baby chameleon", - "id": "6924" - }, - { - "name": "Chameleon", - "id": "6925" - }, - { - "name": "Baby chameleon", - "id": "6926" - }, - { - "name": "Chameleon", - "id": "6927" - }, - { - "name": "Baby chameleon", - "id": "6928" - }, - { - "name": "Chameleon", - "id": "6929" - }, - { - "name": "Baby chameleon", - "id": "6930" - }, - { - "name": "Chameleon", - "id": "6931" - }, - { - "name": "Baby chameleon", - "id": "6932" - }, - { - "name": "Chameleon", - "id": "6933" - }, - { - "name": "Baby chameleon", - "id": "6934" - }, - { - "name": "Chameleon", - "id": "6935" - }, - { - "name": "Baby chameleon", - "id": "6936" - }, - { - "name": "Chameleon", - "id": "6937" - }, - { - "name": "Baby chameleon", - "id": "6938" - }, - { - "name": "Chameleon", - "id": "6939" - }, - { - "name": "Baby chameleon", - "id": "6940" - }, - { - "name": "Chameleon", - "id": "6941" - }, - { - "name": "Vulture chick", - "id": "6945" - }, - { - "name": "Vulture", - "id": "6946" - }, - { - "name": "Baby giant crab", - "id": "6947" - }, - { - "name": "Giant crab", - "id": "6948" - }, - { - "name": "Saradomin chick", - "id": "6949" - }, - { - "name": "Saradomin bird", - "id": "6950" - }, - { - "name": "Saradomin owl", - "id": "6951" - }, - { - "name": "Zamorak chick", - "id": "6952" - }, - { - "name": "Zamorak bird", - "id": "6953" - }, - { - "name": "Zamorak hawk", - "id": "6954" - }, - { - "name": "Guthix chick", - "id": "6955" - }, - { - "name": "Guthix bird", - "id": "6956" - }, - { - "name": "Guthix raptor", - "id": "6957" - }, - { - "name": "Pikkupstix", - "id": "6970" - }, - { - "name": "Giant wolpertinger", - "id": "6988" - }, - { - "name": "Ibis", - "id": "6991" - }, - { - "name": "Fishing spot", - "id": "6996" - }, - { - "name": "Dark Squall", - "id": "7000" - }, - { - "name": "Surok Magis", - "id": "7002" - }, - { - "name": "Grenwall", - "id": "7006" - }, - { - "name": "Platypus", - "id": "7015" - }, - { - "name": "Platypus", - "id": "7016" - }, - { - "name": "Platypus", - "id": "7017" - }, - { - "name": "Baby platypus", - "id": "7018" - }, - { - "name": "Baby platypus", - "id": "7019" - }, - { - "name": "Baby platypus", - "id": "7020" - }, - { - "name": "Platypus", - "id": "7022" - }, - { - "name": "Platypus", - "id": "7023" - }, - { - "name": "Baby platypus", - "id": "7025" - }, - { - "name": "Baby platypus", - "id": "7026" - }, - { - "name": "Patrick", - "id": "7027" - }, - { - "name": "Penelope", - "id": "7028" - }, - { - "name": "Peter", - "id": "7029" - }, - { - "name": "Peanut", - "id": "7030" - }, - { - "name": "Diseased kebbit", - "id": "7032" - }, - { - "name": "Fishing spot", - "id": "7040" - }, - { - "name": "Fishing spot", - "id": "7045" - }, - { - "name": "Fishing spot", - "id": "7046" - }, - { - "name": "Frawd", - "id": "7048" - }, - { - "name": "Ogress banker", - "id": "7050" - }, - { - "name": "Seegud", - "id": "7052" - }, - { - "name": "Chargurr", - "id": "7053" - }, - { - "name": "Chargurr", - "id": "7054" - }, - { - "name": "Snurgh", - "id": "7055" - }, - { - "name": "Kringk", - "id": "7058" - }, - { - "name": "Thump", - "id": "7059" - }, - { - "name": "Massage table", - "id": "7060" - }, - { - "name": "Thump", - "id": "7061" - }, - { - "name": "Muggh", - "id": "7062" - }, - { - "name": "Kringk", - "id": "7063" - }, - { - "name": "Hairdryer", - "id": "7064" - }, - { - "name": "Snert", - "id": "7065" - }, - { - "name": "Tyke", - "id": "7068" - }, - { - "name": "Snarrl", - "id": "7069" - }, - { - "name": "Snarrk", - "id": "7070" - }, - { - "name": "I'rk", - "id": "7071" - }, - { - "name": "Thuddley", - "id": "7072" - }, - { - "name": "Grr'bah", - "id": "7073" - }, - { - "name": "Chomp", - "id": "7074" - }, - { - "name": "Grubb", - "id": "7075" - }, - { - "name": "Grunther", - "id": "7076" - }, - { - "name": "Glum", - "id": "7077" - }, - { - "name": "Flying bugs", - "id": "7083" - }, - { - "name": "Balnea", - "id": "7087" - }, - { - "name": "Chief Tess", - "id": "7088" - }, - { - "name": "Chargurr", - "id": "7089" - }, - { - "name": "Wise Old Man", - "id": "7090" - }, - { - "name": "Dawg", - "id": "7091" - }, - { - "name": "Drunken sailor", - "id": "7116" - }, - { - "name": "Drunken sailor", - "id": "7117" - }, - { - "name": "Catapult engineer", - "id": "7118" - }, - { - "name": "Tyras guard", - "id": "7119" - }, - { - "name": "General Hining", - "id": "7121" - }, - { - "name": "Githan", - "id": "7122" - }, - { - "name": "Amulet of Nature", - "id": "7123" - }, - { - "name": "Mud", - "id": "7124" - }, - { - "name": "Surok Magis", - "id": "7136" - }, - { - "name": "Professor Henry", - "id": "7143" - }, - { - "name": "Villager", - "id": "7163" - }, - { - "name": "Villager", - "id": "7165" - }, - { - "name": "Villager", - "id": "7166" - }, - { - "name": "Villager", - "id": "7167" - }, - { - "name": "Kimberly", - "id": "7169" - }, - { - "name": "Kimberly", - "id": "7170" - }, - { - "name": "Kennith", - "id": "7171" - }, - { - "name": "Kennith", - "id": "7172" - }, - { - "name": "Kennith", - "id": "7173" - }, - { - "name": "Kennith", - "id": "7174" - }, - { - "name": "Kennith", - "id": "7175" - }, - { - "name": "Villager", - "id": "7176" - }, - { - "name": "Ezekial Lovecraft", - "id": "7184" - }, - { - "name": "Clive", - "id": "7185" - }, - { - "name": "Katherine", - "id": "7186" - }, - { - "name": "Katherine", - "id": "7187" - }, - { - "name": "Clive", - "id": "7188" - }, - { - "name": "Kent", - "id": "7189" - }, - { - "name": "Rabbit hole", - "id": "7190" - }, - { - "name": "Easter Bunny", - "id": "7197" - }, - { - "name": "Bunny", - "id": "7198" - }, - { - "name": "Bunny", - "id": "7199" - }, - { - "name": "Guard bunny", - "id": "7200" - }, - { - "name": "Chocatrice", - "id": "7201" - }, - { - "name": "Void Knight", - "id": "7203" - }, - { - "name": "Mouse", - "id": "7205" - }, - { - "name": "Rabbit", - "id": "7208" - }, - { - "name": "Raven chick", - "id": "7261" - }, - { - "name": "Raven", - "id": "7262" - }, - { - "name": "Raven chick", - "id": "7263" - }, - { - "name": "Raven", - "id": "7264" - }, - { - "name": "Raven chick", - "id": "7265" - }, - { - "name": "Raven", - "id": "7266" - }, - { - "name": "Raven chick", - "id": "7267" - }, - { - "name": "Raven", - "id": "7268" - }, - { - "name": "Raven chick", - "id": "7269" - }, - { - "name": "Raven", - "id": "7270" - }, - { - "name": "Baby raccoon", - "id": "7271" - }, - { - "name": "Raccoon", - "id": "7272" - }, - { - "name": "Baby raccoon", - "id": "7273" - }, - { - "name": "Raccoon", - "id": "7274" - }, - { - "name": "Baby raccoon", - "id": "7276" - }, - { - "name": "Baby gecko", - "id": "7277" - }, - { - "name": "Baby gecko", - "id": "7278" - }, - { - "name": "Baby gecko", - "id": "7279" - }, - { - "name": "Baby gecko", - "id": "7280" - }, - { - "examine": "", - "name": "Gecko", - "id": "7281" - }, - { - "name": "Gecko", - "id": "7282" - }, - { - "name": "Gecko", - "id": "7283" - }, - { - "name": "Gecko", - "id": "7284" - }, - { - "examine": "It's so adorably tiny!", - "name": "Baby gecko", - "id": "7286" - }, - { - "examine": "", - "name": "Baby gecko", - "id": "7287" - }, - { - "examine": "It's so adorably tiny!", - "name": "Baby gecko", - "id": "7288" - }, - { - "name": "Gecko", - "id": "7289" - }, - { - "examine": "How cute!", - "name": "Gecko", - "id": "7290" - }, - { - "name": "Gecko", - "id": "7291" - }, - { - "examine": "How cute!", - "name": "Gecko", - "id": "7292" - }, - { - "name": "Baby giant crab", - "id": "7293" - }, - { - "name": "Giant crab", - "id": "7294" - }, - { - "name": "Baby giant crab", - "id": "7295" - }, - { - "name": "Giant crab", - "id": "7296" - }, - { - "name": "Baby giant crab", - "id": "7297" - }, - { - "name": "Giant crab", - "id": "7298" - }, - { - "name": "Baby giant crab", - "id": "7299" - }, - { - "name": "Giant crab", - "id": "7300" - }, - { - "name": "Baby squirrel", - "id": "7301" - }, - { - "name": "Squirrel", - "id": "7302" - }, - { - "name": "Baby squirrel", - "id": "7303" - }, - { - "name": "Squirrel", - "id": "7304" - }, - { - "name": "Baby squirrel", - "id": "7305" - }, - { - "name": "Squirrel", - "id": "7306" - }, - { - "name": "Baby squirrel", - "id": "7307" - }, - { - "name": "Squirrel", - "id": "7308" - }, - { - "name": "Baby squirrel", - "id": "7309" - }, - { - "name": "Baby squirrel", - "id": "7310" - }, - { - "name": "Baby squirrel", - "id": "7311" - }, - { - "name": "Baby squirrel", - "id": "7312" - }, - { - "name": "Baby penguin", - "id": "7313" - }, - { - "name": "Penguin", - "id": "7314" - }, - { - "name": "Penguin", - "id": "7315" - }, - { - "name": "Baby penguin", - "id": "7316" - }, - { - "name": "Penguin", - "id": "7317" - }, - { - "name": "Penguin", - "id": "7318" - }, - { - "name": "Vulture chick", - "id": "7319" - }, - { - "name": "Vulture", - "id": "7320" - }, - { - "name": "Vulture chick", - "id": "7321" - }, - { - "name": "Vulture", - "id": "7322" - }, - { - "name": "Vulture chick", - "id": "7323" - }, - { - "name": "Vulture", - "id": "7324" - }, - { - "name": "Vulture chick", - "id": "7325" - }, - { - "name": "Vulture", - "id": "7326" - }, - { - "name": "Vulture chick", - "id": "7327" - }, - { - "name": "Vulture", - "id": "7328" - }, - { - "name": "Void shifter", - "id": "7369" - }, - { - "name": "Ravenous locust", - "id": "7372" - }, - { - "name": "Uberlass", - "id": "7383" - }, - { - "name": "Uberlass", - "id": "7384" - }, - { - "name": "Uberlass", - "id": "7385" - }, - { - "name": "Uberlass", - "id": "7386" - }, - { - "name": "Sannytea", - "id": "7387" - }, - { - "name": "Sannytea", - "id": "7388" - }, - { - "name": "Irollsixes", - "id": "7389" - }, - { - "name": "Irollsixes", - "id": "7390" - }, - { - "name": "Foxyhunter", - "id": "7391" - }, - { - "name": "Foxyhunter", - "id": "7392" - }, - { - "name": "Foxyhunter", - "id": "7393" - }, - { - "name": "Gabriela", - "id": "7394" - }, - { - "name": "Teodor", - "id": "7395" - }, - { - "name": "Aurel", - "id": "7396" - }, - { - "name": "Cornelius", - "id": "7397" - }, - { - "name": "Sorin", - "id": "7399" - }, - { - "name": "Luscion", - "id": "7400" - }, - { - "name": "Sergiu", - "id": "7401" - }, - { - "name": "Radu", - "id": "7402" - }, - { - "name": "Grigore", - "id": "7403" - }, - { - "name": "Ileana", - "id": "7404" - }, - { - "name": "Valeria", - "id": "7405" - }, - { - "name": "Emilia", - "id": "7406" - }, - { - "name": "Florin", - "id": "7407" - }, - { - "name": "Catalina", - "id": "7408" - }, - { - "name": "Ivan", - "id": "7409" - }, - { - "name": "Victor", - "id": "7410" - }, - { - "name": "Helena", - "id": "7411" - }, - { - "name": "Mihail", - "id": "7412" - }, - { - "name": "Nicoleta", - "id": "7413" - }, - { - "name": "Vasile", - "id": "7414" - }, - { - "name": "Razvan", - "id": "7415" - }, - { - "name": "Luminata", - "id": "7416" - }, - { - "name": "Juvinate", - "id": "7418" - }, - { - "name": "Held vampyre juvinate", - "id": "7419" - }, - { - "name": "Hieronymus Avlafrim", - "id": "7420" - }, - { - "name": "Sasquine Huburns", - "id": "7421" - }, - { - "name": "Sasquine Huburns", - "id": "7422" - }, - { - "name": "Lollery", - "id": "7423" - }, - { - "name": "Wigglewoo", - "id": "7424" - }, - { - "name": "Orangeowns", - "id": "7427" - }, - { - "name": "I like m0m", - "id": "7428" - }, - { - "name": "I like m0m", - "id": "7429" - }, - { - "name": "Qutiedoll", - "id": "7430" - }, - { - "name": "Goreu", - "id": "7431" - }, - { - "name": "Ysgawyn", - "id": "7432" - }, - { - "name": "Arvel", - "id": "7433" - }, - { - "name": "Mawrth", - "id": "7434" - }, - { - "name": "Kelyn", - "id": "7435" - }, - { - "name": "Eoin", - "id": "7436" - }, - { - "name": "Iona", - "id": "7437" - }, - { - "name": "Arianwyn", - "id": "7442" - }, - { - "name": "Oronwen", - "id": "7444" - }, - { - "name": "Banker", - "id": "7445" - }, - { - "name": "Banker", - "id": "7446" - }, - { - "name": "Dalldav", - "id": "7447" - }, - { - "name": "Gethin", - "id": "7448" - }, - { - "name": "Amaethwr", - "id": "7449" - }, - { - "name": "Teclyn", - "id": "7450" - }, - { - "name": "Butterfly", - "id": "7451" - }, - { - "name": "Lapsang", - "id": "7452" - }, - { - "name": "Lapsang", - "id": "7453" - }, - { - "name": "Souchong", - "id": "7454" - }, - { - "name": "Souchong", - "id": "7455" - }, - { - "name": "Earlgrey", - "id": "7456" - }, - { - "name": "Earlgrey", - "id": "7457" - }, - { - "name": "Fairtrade", - "id": "7458" - }, - { - "name": "Sliceoflemon", - "id": "7464" - }, - { - "name": "Sliceoflemon", - "id": "7465" - }, - { - "name": "Milknosugar", - "id": "7466" - }, - { - "name": "Milknosugar", - "id": "7467" - }, - { - "name": "Randomdood", - "id": "7468" - }, - { - "name": "Employedman", - "id": "7469" - }, - { - "name": "Heidiggle", - "id": "7470" - }, - { - "name": "Dodgy Penny", - "id": "7471" - }, - { - "name": "Shadydude98", - "id": "7472" - }, - { - "name": "Madam C", - "id": "7473" - }, - { - "name": "M0m Online", - "id": "7474" - }, - { - "name": "Learking", - "id": "7478" - }, - { - "name": "Moglewee", - "id": "7489" - }, - { - "name": "Moglewee", - "id": "7490" - }, - { - "name": "Sarah Domin", - "id": "7491" - }, - { - "name": "Snowy knight", - "id": "7498" - }, - { - "name": "Sapphire glacialis", - "id": "7499" - }, - { - "name": "Evil Wibbler", - "id": "7509" - }, - { - "name": "Heresjohnny", - "id": "7516" - }, - { - "name": "Mogglewump", - "id": "7517" - }, - { - "name": "Renderorder", - "id": "7521" - }, - { - "name": "Boolean", - "id": "7522" - }, - { - "name": "Stress Diva", - "id": "7523" - }, - { - "name": "Treadsoftly", - "id": "7524" - }, - { - "name": "Helphelphelp", - "id": "7525" - }, - { - "name": "Doorbellpl0x", - "id": "7526" - }, - { - "name": "Fixmydoorup", - "id": "7527" - }, - { - "name": "Wallscaler", - "id": "7529" - }, - { - "name": "2scompany", - "id": "7530" - }, - { - "name": "2scompany", - "id": "7531" - }, - { - "name": "4sjustsilly", - "id": "7533" - }, - { - "name": "Roadblocked", - "id": "7534" - }, - { - "name": "Barricade", - "id": "7535" - }, - { - "name": "Barricade", - "id": "7536" - }, - { - "name": "Yoinker", - "id": "7537" - }, - { - "name": "Yoinker", - "id": "7538" - }, - { - "name": "Stopthief", - "id": "7539" - }, - { - "name": "Stopthief", - "id": "7540" - }, - { - "name": "Knickknack", - "id": "7541" - }, - { - "name": "Paddywhack", - "id": "7542" - }, - { - "name": "Giveadog", - "id": "7543" - }, - { - "name": "Spacebadgers", - "id": "7544" - }, - { - "name": "Freakypeaky", - "id": "7545" - }, - { - "name": "Rollinghome", - "id": "7546" - }, - { - "name": "Nullpointer", - "id": "7547" - }, - { - "name": "Badgerfreak", - "id": "7548" - }, - { - "name": "Windstrike32", - "id": "7549" - }, - { - "name": "Void Knight", - "id": "7550" - }, - { - "name": "Wraithboss", - "id": "7567" - }, - { - "name": "What Goudron", - "id": "7568" - }, - { - "name": "Lvzyoda", - "id": "7574" - }, - { - "name": "Airstriker", - "id": "7575" - }, - { - "name": "Droepedoff", - "id": "7576" - }, - { - "name": "Plzpudding", - "id": "7577" - }, - { - "name": "Assassin10", - "id": "7578" - }, - { - "name": "Steallake", - "id": "7579" - }, - { - "name": "Deepkiwi", - "id": "7581" - }, - { - "name": "Bigface Oz", - "id": "7584" - }, - { - "name": "Torcher", - "id": "7587" - }, - { - "name": "Torcher", - "id": "7588" - }, - { - "name": "Defiler", - "id": "7589" - }, - { - "name": "Defiler", - "id": "7590" - }, - { - "name": "Shifter", - "id": "7591" - }, - { - "name": "Shifter", - "id": "7592" - }, - { - "name": "Shifter", - "id": "7594" - }, - { - "name": "Splatter", - "id": "7595" - }, - { - "name": "Splatter", - "id": "7596" - }, - { - "name": "Splatter", - "id": "7597" - }, - { - "name": "Spinner", - "id": "7598" - }, - { - "name": "Ravager", - "id": "7599" - }, - { - "name": "Fiara", - "id": "7600" - }, - { - "name": "Reggie", - "id": "7601" - }, - { - "name": "Getorix", - "id": "7602" - }, - { - "name": "Pontimer", - "id": "7603" - }, - { - "name": "Alran", - "id": "7604" - }, - { - "name": "Flying female vampire", - "id": "7610" - }, - { - "name": "Flying female vampire", - "id": "7611" - }, - { - "name": "Flying female vampire", - "id": "7612" - }, - { - "name": "Flying female vampire", - "id": "7613" - }, - { - "name": "Vyrewatch", - "id": "7622" - }, - { - "name": "Vyrewatch", - "id": "7623" - }, - { - "name": "Vyrewatch", - "id": "7624" - }, - { - "name": "Vyrewatch", - "id": "7625" - }, - { - "name": "Vyrewatch", - "id": "7630" - }, - { - "name": "Vyrewatch", - "id": "7633" - }, - { - "name": "Fishing spot", - "id": "7636" - }, - { - "name": "Skeletal hand", - "id": "7637" - }, - { - "name": "Zaromark Sliver", - "id": "7652" - }, - { - "name": "Zaromark Sliver", - "id": "7653" - }, - { - "name": "Fistandantilus", - "id": "7662" - }, - { - "name": "Fistandantilus", - "id": "7663" - }, - { - "name": "Mercenary Adventurer", - "id": "7664" - }, - { - "name": "Ivan Strom", - "id": "7665" - }, - { - "name": "Mysterious person", - "id": "7666" - }, - { - "name": "Mysterious person", - "id": "7667" - }, - { - "name": "Mysterious person", - "id": "7668" - }, - { - "name": "Mysterious person", - "id": "7669" - }, - { - "name": "Mysterious person", - "id": "7670" - }, - { - "name": "Mysterious person", - "id": "7671" - }, - { - "name": "Flaygian Screwte", - "id": "7672" - }, - { - "name": "Mekritus A'hara", - "id": "7673" - }, - { - "name": "Andiess Juip", - "id": "7674" - }, - { - "name": "Kael Forshaw", - "id": "7675" - }, - { - "name": "Andiess Juip", - "id": "7676" - }, - { - "name": "Kael Forshaw", - "id": "7677" - }, - { - "name": "Safalaan", - "id": "7678" - }, - { - "name": "Andiess Juip", - "id": "7679" - }, - { - "name": "Kael Forshaw", - "id": "7680" - }, - { - "name": "Safalaan", - "id": "7681" - }, - { - "name": "Vyrewatch", - "id": "7684" - }, - { - "name": "Vyrewatch", - "id": "7685" - }, - { - "name": "Safalaan", - "id": "7686" - }, - { - "name": "Spectral Vyrewatch", - "id": "7687" - }, - { - "name": "Drezel", - "id": "7688" - }, - { - "name": "Temple guardian", - "id": "7708" - }, - { - "name": "Baby icefiend", - "id": "7712" - }, - { - "name": "Brother Bordiss", - "id": "7718" - }, - { - "name": "Brother Althric", - "id": "7719" - }, - { - "name": "Drorkar", - "id": "7720" - }, - { - "name": "Nurmof", - "id": "7721" - }, - { - "name": "Lakki the delivery dwarf", - "id": "7722" - }, - { - "name": "Drorkar", - "id": "7723" - }, - { - "name": "Brother Bordiss", - "id": "7724" - }, - { - "name": "Professor Arblenap", - "id": "7725" - }, - { - "name": "Assistant", - "id": "7726" - }, - { - "name": "Baby icefiend", - "id": "7728" - }, - { - "name": "Will", - "id": "7737" - }, - { - "name": "Will", - "id": "7738" - }, - { - "name": "Phil", - "id": "7739" - }, - { - "name": "Fluffs", - "id": "7742" - }, - { - "name": "Fluffs", - "id": "7743" - }, - { - "name": "Kittens", - "id": "7744" - }, - { - "name": "TzHaar-Mej-Malk", - "id": "7746" - }, - { - "name": "TzHaar-Hur-Frok", - "id": "7748" - }, - { - "name": "TzHaar-Ket-Grol", - "id": "7749" - }, - { - "name": "TzHaar-Ket-Rok", - "id": "7750" - }, - { - "name": "TzHaar-Ket-Lurk", - "id": "7751" - }, - { - "name": "TzHaar-Mej", - "id": "7753" - }, - { - "name": "TzHaar-Hur", - "id": "7754" - }, - { - "name": "TzHaar-Xil", - "id": "7755" - }, - { - "name": "TzHaar-Hur-Brekt", - "id": "7757" - }, - { - "name": "TzHaar-Hur-Brekt", - "id": "7758" - }, - { - "name": "TzHaar-Ket-Jok", - "id": "7759" - }, - { - "name": "TzHaar-Ket-Jok", - "id": "7760" - }, - { - "name": "TzHaar-Xil-Mor", - "id": "7761" - }, - { - "name": "TzHaar-Xil-Mor", - "id": "7762" - }, - { - "name": "TzHaar-Mej-Kol", - "id": "7763" - }, - { - "name": "TzHaar-Mej-Kol", - "id": "7764" - }, - { - "name": "TzHaar-Hur-Klag", - "id": "7765" - }, - { - "name": "TzHaar-Hur-Klag", - "id": "7766" - }, - { - "name": "TokTz-Ket-Dill", - "id": "7770" - }, - { - "name": "TokTz-Ket-Dill", - "id": "7771" - }, - { - "name": "Skeleton", - "id": "7774" - }, - { - "name": "Skeleton", - "id": "7775" - }, - { - "name": "Skeleton", - "id": "7776" - }, - { - "name": "Skeleton", - "id": "7777" - }, - { - "name": "Skeleton", - "id": "7778" - }, - { - "name": "Sumona", - "id": "7779" - }, - { - "name": "Jesmona", - "id": "7781" - }, - { - "name": "Catolax", - "id": "7782" - }, - { - "name": "Ali Cat", - "id": "7783" - }, - { - "name": "Cave crawler", - "id": "7787" - }, - { - "name": "Skeleton", - "id": "7788" - }, - { - "name": "Zombie", - "id": "7789" - }, - { - "name": "Zombie", - "id": "7790" - }, - { - "name": "Zombie", - "id": "7791" - }, - { - "name": "Zombie", - "id": "7792" - }, - { - "name": "Banshee mistress", - "id": "7793" - }, - { - "name": "Banshee mistress", - "id": "7794" - }, - { - "name": "Insectoid assassin", - "id": "7795" - }, - { - "name": "Insectoid assassin", - "id": "7796" - }, - { - "name": "Kurask overlord", - "id": "7797" - }, - { - "name": "Monstrous cave crawler", - "id": "7798" - }, - { - "name": "Basilisk boss", - "id": "7799" - }, - { - "name": "Mightiest turoth", - "id": "7800" - }, - { - "name": "Aberrant spectre", - "id": "7801" - }, - { - "name": "Aberrant spectre", - "id": "7802" - }, - { - "name": "Aberrant spectre", - "id": "7803" - }, - { - "name": "Aberrant spectre", - "id": "7804" - }, - { - "name": "Kurask minion", - "id": "7805" - }, - { - "name": "Mummy warrior", - "id": "7806" - }, - { - "name": "Mummy warrior", - "id": "7807" - }, - { - "name": "Mummy warrior", - "id": "7808" - }, - { - "name": "Cat", - "id": "7809" - }, - { - "name": "Banshee", - "id": "7810" - }, - { - "name": "Kurask", - "id": "7811" - }, - { - "name": "Cave crawler", - "id": "7812" - }, - { - "name": "Basilisk", - "id": "7813" - }, - { - "name": "Turoth", - "id": "7814" - }, - { - "name": "Skeleton", - "id": "7815" - }, - { - "name": "Master", - "id": "7816" - }, - { - "name": "Zombie", - "id": "7817" - }, - { - "name": "Zombie", - "id": "7818" - }, - { - "name": "Zombie", - "id": "7819" - }, - { - "name": "Zombie", - "id": "7820" - }, - { - "name": "A wanderer.", - "id": "7821" - }, - { - "name": "A wanderer.", - "id": "7822" - }, - { - "name": "Osman", - "id": "7824" - }, - { - "name": "50 Ships Mufassah", - "id": "7825" - }, - { - "name": "Karamthulhu", - "id": "7826" - }, - { - "name": "Karamthulhu", - "id": "7827" - }, - { - "name": "Giant lobster", - "id": "7828" - }, - { - "name": "Giant crab", - "id": "7829" - }, - { - "name": "Customs Sergeant", - "id": "7830" - }, - { - "name": "Customs Sergeant", - "id": "7831" - }, - { - "name": "Young Ralph", - "id": "7832" - }, - { - "name": "Young Ralph", - "id": "7833" - }, - { - "name": "Young Ralph", - "id": "7834" - }, - { - "name": "Young Ralph", - "id": "7835" - }, - { - "name": "Young Ralph", - "id": "7836" - }, - { - "name": "Customs Officer", - "id": "7837" - }, - { - "name": "Customs Officer", - "id": "7838" - }, - { - "name": "Customs Officer", - "id": "7839" - }, - { - "name": "Heavy-Handed Harry", - "id": "7840" - }, - { - "name": "Player", - "id": "7841" - }, - { - "name": "Locker Officer", - "id": "7842" - }, - { - "name": "Locker Officer", - "id": "7843" - }, - { - "name": "Ex-ex-parrot", - "id": "7844" - }, - { - "name": "Pirate impling", - "id": "7845" - }, - { - "name": "Pirate impling", - "id": "7846" - }, - { - "name": "Captain Rabid Jack", - "id": "7847" - }, - { - "name": "Jack", - "id": "7848" - }, - { - "name": "Bosun Giles", - "id": "7849" - }, - { - "name": "Pirate", - "id": "7850" - }, - { - "name": "Lizzie", - "id": "7851" - }, - { - "name": "Cap'n Izzy No-Beard", - "id": "7852" - }, - { - "name": "Ralph", - "id": "7853" - }, - { - "name": "Brass Hand Harry", - "id": "7854" - }, - { - "name": "Bill Teach", - "id": "7855" - }, - { - "name": "Pirate", - "id": "7856" - }, - { - "name": "Brass Hand Harry", - "id": "7857" - }, - { - "name": "Gull", - "id": "7858" - }, - { - "name": "Jack", - "id": "7861" - }, - { - "name": "Fishing spot", - "id": "7862" - }, - { - "name": "Fishing spot", - "id": "7863" - }, - { - "name": "Fishing spot", - "id": "7864" - }, - { - "name": "Guardsman Dante", - "id": "7865" - }, - { - "name": "Guardsman DeShawn", - "id": "7866" - }, - { - "name": "Guardsman Brawn", - "id": "7867" - }, - { - "name": "Iain", - "id": "7868" - }, - { - "name": "Julian", - "id": "7869" - }, - { - "name": "Lachtopher", - "id": "7870" - }, - { - "name": "Samuel", - "id": "7871" - }, - { - "name": "Victoria", - "id": "7872" - }, - { - "name": "Man", - "id": "7873" - }, - { - "name": "Man", - "id": "7874" - }, - { - "name": "Man", - "id": "7875" - }, - { - "name": "Man", - "id": "7876" - }, - { - "name": "Man", - "id": "7877" - }, - { - "name": "Man", - "id": "7878" - }, - { - "name": "Man", - "id": "7879" - }, - { - "name": "Woman", - "id": "7880" - }, - { - "name": "Woman", - "id": "7881" - }, - { - "name": "Woman", - "id": "7882" - }, - { - "name": "Woman", - "id": "7883" - }, - { - "name": "Woman", - "id": "7884" - }, - { - "name": "Guardsman Dante", - "id": "7885" - }, - { - "name": "Guardsman DeShawn", - "id": "7886" - }, - { - "name": "Guardsman Brawn", - "id": "7887" - }, - { - "name": "Sergeant Abram", - "id": "7888" - }, - { - "name": "Guardsman Pazel", - "id": "7889" - }, - { - "name": "Guardsman Peale", - "id": "7890" - }, - { - "name": "General Wartface", - "id": "7892" - }, - { - "name": "General Bentnoze", - "id": "7893" - }, - { - "name": "General Wartface", - "id": "7894" - }, - { - "name": "General Bentnoze", - "id": "7896" - }, - { - "name": "Loar Shadow", - "id": "7898" - }, - { - "name": "Loar Shadow", - "id": "7901" - }, - { - "name": "Sergeant Abram", - "id": "7902" - }, - { - "name": "Guardsman Pazel", - "id": "7903" - }, - { - "name": "Guardsman Peale", - "id": "7904" - }, - { - "name": "Barricade guard", - "id": "7905" - }, - { - "name": "Barricade guard", - "id": "7906" - }, - { - "name": "Barricade guard", - "id": "7907" - }, - { - "name": "Barricade guard", - "id": "7908" - }, - { - "name": "Barricade guard", - "id": "7909" - }, - { - "name": "Barricade guard", - "id": "7910" - }, - { - "name": "Barricade guard", - "id": "7911" - }, - { - "name": "Border guard", - "id": "7912" - }, - { - "name": "Iain", - "id": "7913" - }, - { - "name": "Julian", - "id": "7914" - }, - { - "name": "Lachtopher", - "id": "7915" - }, - { - "name": "Samuel", - "id": "7916" - }, - { - "name": "Victoria", - "id": "7917" - }, - { - "name": "Man", - "id": "7918" - }, - { - "name": "Man", - "id": "7919" - }, - { - "name": "Man", - "id": "7920" - }, - { - "name": "Man", - "id": "7921" - }, - { - "name": "Man", - "id": "7922" - }, - { - "name": "Man", - "id": "7923" - }, - { - "name": "Man", - "id": "7924" - }, - { - "name": "Woman", - "id": "7925" - }, - { - "name": "Woman", - "id": "7926" - }, - { - "name": "Woman", - "id": "7927" - }, - { - "name": "Woman", - "id": "7928" - }, - { - "name": "Lumbridge Guide", - "id": "7929" - }, - { - "name": "Doomsayer", - "id": "7930" - }, - { - "name": "Donie", - "id": "7931" - }, - { - "name": "Gee", - "id": "7932" - }, - { - "name": "Duke Horacio", - "id": "7933" - }, - { - "name": "Sigmund", - "id": "7934" - }, - { - "name": "Hans", - "id": "7935" - }, - { - "name": "Cook", - "id": "7936" - }, - { - "name": "Father Aereck", - "id": "7937" - }, - { - "name": "Sir Vant", - "id": "7938" - }, - { - "name": "Sir Vant", - "id": "7939" - }, - { - "name": "Sir Vant", - "id": "7940" - }, - { - "name": "Sir Vant", - "id": "7941" - }, - { - "name": "Sir Vant", - "id": "7942" - }, - { - "name": "Dragon", - "id": "7943" - }, - { - "name": "Dragon", - "id": "7944" - }, - { - "name": "Dragon", - "id": "7945" - }, - { - "name": "Dragon", - "id": "7946" - }, - { - "name": "Dragon", - "id": "7947" - }, - { - "name": "Dragon", - "id": "7948" - }, - { - "name": "Lumbridge Guide", - "id": "7949" - }, - { - "name": "Melee Tutor", - "id": "7950" - }, - { - "name": "Ranged Tutor", - "id": "7951" - }, - { - "name": "Magic Tutor", - "id": "7952" - }, - { - "name": "Cooking Tutor", - "id": "7953" - }, - { - "name": "Crafting Tutor", - "id": "7954" - }, - { - "name": "Fishing Tutor", - "id": "7955" - }, - { - "name": "Mining Tutor", - "id": "7956" - }, - { - "name": "Prayer Tutor", - "id": "7957" - }, - { - "name": "Woodcutting Tutor", - "id": "7960" - }, - { - "name": "Bank Tutor", - "id": "7961" - }, - { - "name": "Gee", - "id": "7962" - }, - { - "name": "Spirit", - "id": "7963" - }, - { - "name": "Goblin", - "id": "7964" - }, - { - "name": "Goblin", - "id": "7965" - }, - { - "name": "Chaos druid", - "id": "7966" - }, - { - "name": "Shopkeeper", - "id": "7967" - }, - { - "name": "Explorer Jack", - "id": "7968" - }, - { - "name": "Smithing Tutor", - "id": "7970" - }, - { - "name": "Mining Tutor", - "id": "7971" - }, - { - "name": "Spirit", - "id": "7972" - }, - { - "name": "Spirit", - "id": "7977" - }, - { - "name": "Spirit", - "id": "7978" - }, - { - "name": "Spirit", - "id": "7979" - }, - { - "name": "Spirit", - "id": "7980" - }, - { - "name": "Spirit", - "id": "7981" - }, - { - "name": "Spirit", - "id": "7982" - }, - { - "name": "Spirit", - "id": "7983" - }, - { - "name": "Spirit", - "id": "7984" - }, - { - "name": "Summer Bonde", - "id": "7985" - }, - { - "name": "Spirit", - "id": "7987" - }, - { - "name": "Spirit", - "id": "7988" - }, - { - "name": "Erik Bonde", - "id": "7989" - }, - { - "name": "Spirit", - "id": "7990" - }, - { - "name": "Jallek Lenkin", - "id": "7991" - }, - { - "name": "Spirit", - "id": "7992" - }, - { - "name": "Meranek Thanatos", - "id": "7993" - }, - { - "name": "Ghostly warrior", - "id": "7994" - }, - { - "name": "Spirit Beast", - "id": "7995" - }, - { - "name": "Spirit Beast", - "id": "7996" - }, - { - "name": "Spirit Beast", - "id": "7997" - }, - { - "name": "Ghost", - "id": "7998" - }, - { - "name": "Ghost", - "id": "7999" - }, - { - "name": "Goth leprechaun", - "id": "8000" - }, - { - "name": "Jack", - "id": "8001" - }, - { - "name": "Sarah", - "id": "8003" - }, - { - "name": "Laura", - "id": "8004" - }, - { - "name": "Laura", - "id": "8005" - }, - { - "name": "Roger", - "id": "8006" - }, - { - "name": "Jorral", - "id": "8007" - }, - { - "name": "Guthix", - "id": "8008" - }, - { - "name": "Max the traveller", - "id": "8009" - }, - { - "name": "Man", - "id": "8010" - }, - { - "name": "Man", - "id": "8011" - }, - { - "name": "Woman", - "id": "8012" - }, - { - "name": "Woman", - "id": "8013" - }, - { - "name": "Haluned", - "id": "8014" - }, - { - "name": "Jack", - "id": "8015" - }, - { - "name": "Baby Sarah", - "id": "8016" - }, - { - "name": "Snowy", - "id": "8017" - }, - { - "name": "Roger", - "id": "8018" - }, - { - "name": "Portal", - "id": "8019" - }, - { - "name": "Portal", - "id": "8020" - }, - { - "name": "Yellow orb", - "id": "8021" - }, - { - "name": "Yellow orb", - "id": "8023" - }, - { - "name": "Yellow orb", - "id": "8024" - }, - { - "name": "Green orb", - "id": "8025" - }, - { - "name": "Green orb", - "id": "8027" - }, - { - "name": "Green orb", - "id": "8028" - }, - { - "name": "Wizard Korvak", - "id": "8029" - }, - { - "name": "Wizard Vief", - "id": "8030" - }, - { - "name": "Wizard Acantha", - "id": "8031" - }, - { - "name": "Wizard Elriss", - "id": "8032" - }, - { - "name": "Wizard", - "id": "8033" - }, - { - "name": "Wizard", - "id": "8034" - }, - { - "name": "Wizard", - "id": "8035" - }, - { - "name": "Wizard", - "id": "8036" - }, - { - "name": "Wizard", - "id": "8037" - }, - { - "name": "Wizard", - "id": "8038" - }, - { - "name": "Wizard", - "id": "8039" - }, - { - "name": "Wizard", - "id": "8040" - }, - { - "name": "Squire Fyre", - "id": "8042" - }, - { - "name": "Squire Fyre", - "id": "8043" - }, - { - "name": "Orry", - "id": "8044" - }, - { - "name": "Orry", - "id": "8045" - }, - { - "name": "Ube", - "id": "8046" - }, - { - "name": "Ube", - "id": "8047" - }, - { - "name": "Waldo", - "id": "8048" - }, - { - "name": "Waldo", - "id": "8049" - }, - { - "name": "Gjalp", - "id": "8050" - }, - { - "name": "Gjalp", - "id": "8051" - }, - { - "name": "Brother Fintan", - "id": "8052" - }, - { - "name": "Brother Fintan", - "id": "8053" - }, - { - "name": "Stubthumb", - "id": "8054" - }, - { - "name": "Stubthumb", - "id": "8055" - }, - { - "name": "Stubthumb", - "id": "8056" - }, - { - "name": "Doronbol", - "id": "8057" - }, - { - "name": "Doronbol", - "id": "8058" - }, - { - "name": "Crate", - "id": "8059" - }, - { - "name": "Crate", - "id": "8060" - }, - { - "name": "Egg", - "id": "8061" - }, - { - "name": "Egg", - "id": "8062" - }, - { - "name": "Nanuq", - "id": "8063" - }, - { - "name": "Nanuq", - "id": "8064" - }, - { - "name": "Pumpkin", - "id": "8065" - }, - { - "name": "Maggie", - "id": "8078" - }, - { - "name": "Circus barker", - "id": "8079" - }, - { - "name": "Circus barker", - "id": "8080" - }, - { - "name": "Circus barker", - "id": "8081" - }, - { - "name": "Agility assistant", - "id": "8082" - }, - { - "name": "Magic assistant", - "id": "8083" - }, - { - "name": "Ranged assistant", - "id": "8084" - }, - { - "name": "Ringmaster", - "id": "8085" - }, - { - "name": "Audience", - "id": "8086" - }, - { - "name": "Audience", - "id": "8087" - }, - { - "name": "Ticket vendor", - "id": "8088" - }, - { - "name": "Rock", - "id": "8089" - }, - { - "name": "Star sprite", - "id": "8091" - }, - { - "name": "Shooting star shadow", - "id": "8092" - }, - { - "name": "Penguin", - "id": "8093" - }, - { - "name": "Penguin", - "id": "8094" - }, - { - "name": "Penguin", - "id": "8095" - }, - { - "name": "Penguin", - "id": "8096" - }, - { - "name": "Penguin", - "id": "8097" - }, - { - "name": "Penguin", - "id": "8098" - }, - { - "name": "Penguin", - "id": "8099" - }, - { - "name": "Penguin", - "id": "8100" - }, - { - "name": "Penguin", - "id": "8101" - }, - { - "name": "Penguin", - "id": "8102" - }, - { - "name": "Penguin", - "id": "8103" - }, - { - "name": "Barrel", - "id": "8104" - }, - { - "name": "Bush", - "id": "8105" - }, - { - "name": "Bush", - "id": "8106" - }, - { - "name": "Cactus", - "id": "8107" - }, - { - "name": "Crate", - "id": "8108" - }, - { - "name": "Rock", - "id": "8109" - }, - { - "name": "Toadstool", - "id": "8110" - }, - { - "name": "Calladin", - "id": "8111" - }, - { - "name": "Summer Bonde", - "id": "8112" - }, - { - "name": "Summer Bonde", - "id": "8114" - }, - { - "name": "Erik Bonde", - "id": "8115" - }, - { - "name": "Erik Bonde", - "id": "8116" - }, - { - "name": "Jallek Lenkin", - "id": "8117" - }, - { - "name": "Jallek Lenkin", - "id": "8118" - }, - { - "name": "Meranek Thanatos", - "id": "8119" - }, - { - "name": "Meranek Thanatos", - "id": "8120" - }, - { - "name": "Spirit", - "id": "8121" - }, - { - "name": "Rogue", - "id": "8122" - }, - { - "name": "Tormented wraith", - "id": "8123" - }, - { - "name": "Dark energy core", - "id": "8126" - }, - { - "name": "Dark energy core", - "id": "8127" - }, - { - "name": "Spirit Beast", - "id": "8128" - }, - { - "name": "Spirit Beast", - "id": "8129" - }, - { - "name": "Spirit Beast", - "id": "8130" - }, - { - "name": "Spirit Beast", - "id": "8131" - }, - { - "name": "Spirit Beast", - "id": "8132" - }, - { - "name": "Spirit", - "id": "8134" - }, - { - "name": "Summer Bonde", - "id": "8135" - }, - { - "name": "Erik Bonde", - "id": "8136" - }, - { - "name": "Jallek Lenkin", - "id": "8137" - }, - { - "name": "Meranek Thanatos", - "id": "8138" - }, - { - "name": "Hartwin", - "id": "8139" - }, - { - "name": "Hartwin", - "id": "8140" - }, - { - "name": "Zombie", - "id": "8141" - }, - { - "name": "Zombie", - "id": "8143" - }, - { - "name": "Zombie", - "id": "8144" - }, - { - "name": "Zombie", - "id": "8145" - }, - { - "name": "Zemouregal", - "id": "8146" - }, - { - "name": "Zemouregal", - "id": "8147" - }, - { - "name": "Armoured zombie", - "id": "8152" - }, - { - "name": "Armoured zombie", - "id": "8153" - }, - { - "name": "Armoured zombie", - "id": "8154" - }, - { - "name": "Armoured zombie", - "id": "8155" - }, - { - "name": "Armoured zombie", - "id": "8156" - }, - { - "name": "Armoured zombie", - "id": "8157" - }, - { - "name": "Armoured zombie", - "id": "8158" - }, - { - "name": "Armoured zombie", - "id": "8159" - }, - { - "name": "Armoured zombie", - "id": "8160" - }, - { - "name": "Armoured zombie", - "id": "8161" - }, - { - "name": "Armoured zombie", - "id": "8162" - }, - { - "name": "Armoured zombie", - "id": "8163" - }, - { - "name": "Armoured zombie", - "id": "8164" - }, - { - "name": "Sharathteerk", - "id": "8165" - }, - { - "name": "Sharathteerk", - "id": "8166" - }, - { - "name": "Arrav", - "id": "8168" - }, - { - "name": "Arrav", - "id": "8169" - }, - { - "name": "Ramarno", - "id": "8170" - }, - { - "name": "Dimintheis", - "id": "8171" - }, - { - "name": "Dimintheis", - "id": "8172" - }, - { - "name": "Guard", - "id": "8173" - }, - { - "name": "Clive", - "id": "8174" - }, - { - "name": "Ellamaria", - "id": "8175" - }, - { - "name": "Fish", - "id": "8176" - }, - { - "name": "Fish", - "id": "8177" - }, - { - "name": "Monk of Zamorak", - "id": "8178" - }, - { - "name": "Ellamaria", - "id": "8179" - }, - { - "name": "Traiborn", - "id": "8180" - }, - { - "name": "Fenkenstrain's Monster", - "id": "8181" - }, - { - "name": "Wise Old Man", - "id": "8182" - }, - { - "name": "Acrobat", - "id": "8183" - }, - { - "name": "Acrobat", - "id": "8186" - }, - { - "name": "Acrobat", - "id": "8187" - }, - { - "name": "Acrobat", - "id": "8188" - }, - { - "name": "Acrobat", - "id": "8189" - }, - { - "name": "Acrobat", - "id": "8190" - }, - { - "name": "Acrobat", - "id": "8191" - }, - { - "name": "Acrobat", - "id": "8192" - }, - { - "name": "Acrobat", - "id": "8193" - }, - { - "name": "Acrobat", - "id": "8194" - }, - { - "name": "Acrobat", - "id": "8195" - }, - { - "name": "Acrobat", - "id": "8196" - }, - { - "name": "Acrobat", - "id": "8197" - }, - { - "name": "Acrobat", - "id": "8198" - }, - { - "name": "Acrobat", - "id": "8199" - }, - { - "name": "Acrobat", - "id": "8200" - }, - { - "name": "Wendy", - "id": "8201" - }, - { - "name": "Trogs", - "id": "8202" - }, - { - "name": "Norman", - "id": "8203" - }, - { - "name": "Babe", - "id": "8204" - }, - { - "name": "Gus", - "id": "8205" - }, - { - "name": "Lottie", - "id": "8206" - }, - { - "name": "Aggie", - "id": "8207" - }, - { - "name": "Bat", - "id": "8208" - }, - { - "name": "Rat", - "id": "8209" - }, - { - "name": "Lizard", - "id": "8210" - }, - { - "name": "Blackbird", - "id": "8211" - }, - { + "safespot": null, + "strength_level": "1" + }, + { + "id": "984", + "name": "Slave", + "examine": "A wretched slave of Iban.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "985", + "name": "Slave", + "examine": "A wretched slave of Iban.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "986", + "name": "Boulder", + "examine": "Precariously balanced...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "987", + "name": "Unicorn", + "attack_level": "1", + "combat_audio": "369,371,370", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "988", + "name": "Sir Jerro", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "57", + "melee_animation": "400", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "989", + "name": "Sir Carl", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "57", + "melee_animation": "400", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "990", + "name": "Sir Harry", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "57", + "melee_animation": "400", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "991", + "name": "Half-soulless", + "examine": "A creature empty of emotion.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "992", + "name": "Kardia" + }, + { + "id": "993", + "name": "Witch's cat", + "examine": "Curiosity is yet to kill this one...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "994", + "name": "Niloof" + }, + { + "id": "995", + "name": "Klank", + "examine": "A dwarven maker of gauntlets." + }, + { + "id": "996", + "name": "Kamen", + "examine": "This dwarf looks intoxicated." + }, + { + "id": "997", + "name": "Kalrag", + "examine": "A giant spider.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "5321", + "defence_animation": "5320", + "defence_level": "1", + "lifepoints": "91", + "melee_animation": "5319", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "998", + "name": "Othainian", + "examine": "One of the guardians of Iban.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "1", + "lifepoints": "90", + "melee_animation": "64", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "999", + "name": "Doomion", + "examine": "One of the guardians of Iban.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "1", + "lifepoints": "90", + "melee_animation": "64", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1000", + "name": "Holthion", + "examine": "One of the guardians of Iban.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "1", + "lifepoints": "90", + "melee_animation": "64", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1001", + "name": "Dark mage", + "examine": "A user of dark magic.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "3" + }, + { + "id": "1002", + "name": "Disciple of Iban", + "examine": "A dark magic user.", + "attack_level": "24", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "magic_level": "32", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "24", + "weakness": "3" + }, + { + "id": "1003", + "name": "Lord Iban" + }, + { + "id": "1004", "name": "Spider", - "id": "8212" - }, - { - "name": "Snail", - "id": "8213" - }, - { - "name": "Cat", - "id": "8214" - }, - { - "name": "Lazy cat", - "id": "8215" - }, - { - "name": "Overgrown cat", - "id": "8216" - }, - { - "name": "Kitten", - "id": "8217" - }, - { - "name": "Wily cat", - "id": "8218" - }, - { - "name": "Guardian of Armadyl", - "id": "8219" - }, - { - "name": "Head mystic", - "id": "8227" - }, - { - "name": "Rewards mystic", - "id": "8228" - }, - { - "name": "Mystic", - "id": "8229" - }, - { - "name": "Mystic", - "id": "8230" - }, - { - "name": "Mystic", - "id": "8231" - }, - { - "name": "Mystic", - "id": "8232" - }, - { - "name": "Mystic", - "id": "8233" - }, - { - "name": "Mystic", - "id": "8234" - }, - { - "name": "Mystic", - "id": "8235" - }, - { - "name": "Mystic", - "id": "8236" - }, - { - "name": "Mystic", - "id": "8237" - }, - { - "name": "Mystic", - "id": "8238" - }, - { - "name": "Head mystic", - "id": "8239" - }, - { - "name": "Clay familiar (class 1)", - "id": "8240" - }, - { - "name": "Clay familiar (class 1)", - "id": "8241" - }, - { - "name": "Clay familiar (class 2)", - "id": "8242" - }, - { - "name": "Clay familiar (class 2)", - "id": "8243" - }, - { - "name": "Clay familiar (class 3)", - "id": "8244" - }, - { - "name": "Clay familiar (class 3)", - "id": "8245" - }, - { - "name": "Clay familiar (class 4)", - "id": "8246" - }, - { - "name": "Clay familiar (class 4)", - "id": "8247" - }, - { - "name": "Clay familiar (class 5)", - "id": "8248" - }, - { - "name": "Clay familiar (class 5)", - "id": "8249" - }, - { - "name": "Grindxplox", - "id": "8250" - }, - { - "name": "Grindxplox", - "id": "8251" - }, - { - "name": "Stealing Creation team", - "id": "8252" - }, - { - "name": "Resource NPC", - "id": "8253" - }, - { - "name": "Game NPC", - "id": "8254" - }, - { - "name": "Resource NPC", - "id": "8255" - }, - { - "name": "Harrallak Menarous", - "id": "8257" - }, - { - "name": "Yadech Strongarm", - "id": "8269" - }, - { - "name": "Turael", - "id": "8271" - }, - { - "name": "Mazchna", - "id": "8274" - }, - { - "examine": "He looks dangerous!", - "name": "Duradel", - "id": "8275" - }, - { - "name": "Cyrisus", - "id": "8276" - }, - { - "name": "Sloane", - "id": "8280" - }, - { - "name": "Balance Elemental", - "id": "8281" - }, - { - "name": "Balance Elemental", - "id": "8282" - }, - { - "name": "Balance Elemental", - "id": "8283" - }, - { - "name": "Balance Elemental", - "id": "8284" - }, - { - "name": "Balance Elemental", - "id": "8285" - }, - { - "name": "Undead hero", - "id": "8286" - }, - { - "name": "Undead hero", - "id": "8287" - }, - { - "name": "Undead hero", - "id": "8288" - }, - { - "name": "Undead hero", - "id": "8289" - }, - { - "name": "Undead hero", - "id": "8290" - }, - { - "name": "Undead hero", - "id": "8291" - }, - { - "name": "Undead hero", - "id": "8292" - }, - { - "name": "Undead hero", - "id": "8293" - }, - { - "name": "Undead hero", - "id": "8294" - }, - { - "name": "Undead hero", - "id": "8295" - }, - { - "name": "Undead hero", - "id": "8296" - }, - { - "name": "Undead hero", - "id": "8297" - }, - { - "name": "Stone block", - "id": "8298" - }, - { - "name": "Harrallak Menarous", - "id": "8299" - }, - { - "name": "Harrallak Menarous", - "id": "8300" - }, - { - "name": "Harrallak Menarous", - "id": "8301" - }, - { - "name": "Turael", - "id": "8302" - }, - { - "name": "Turael", - "id": "8303" - }, - { - "name": "Cyrisus", - "id": "8304" - }, - { - "name": "Cyrisus", - "id": "8305" - }, - { - "name": "Ghommal", - "id": "8306" - }, - { - "name": "Mazchna", - "id": "8307" - }, - { - "name": "Mazchna", - "id": "8308" - }, - { - "name": "Mazchna", - "id": "8309" - }, - { - "name": "Duradel", - "id": "8310" - }, - { - "name": "Sloane", - "id": "8311" - }, - { - "name": "Elite Dark Ranger", - "id": "8317" - }, - { - "name": "Elite Dark Ranger", - "id": "8318" - }, - { - "name": "Elite Dark Ranger", - "id": "8319" - }, - { - "name": "Elite Dark Mage", - "id": "8320" - }, - { - "name": "Elite Dark Mage", - "id": "8321" - }, - { - "name": "Elite Dark Mage", - "id": "8322" - }, - { - "name": "Elite Dark Mage", - "id": "8323" - }, - { - "name": "Elite Black Knight", - "id": "8324" - }, - { - "name": "Elite Black Knight", - "id": "8325" - }, - { - "name": "Elite Black Knight", - "id": "8326" - }, - { - "name": "Elite Black Knight", - "id": "8327" - }, - { - "name": "Elite Black Knight", - "id": "8328" - }, - { - "name": "Elite Black Knight", - "id": "8329" - }, - { - "name": "Elite Black Knight", - "id": "8330" - }, - { - "name": "Guardian of Armadyl", - "id": "8331" - }, - { - "name": "Guardian of Armadyl", - "id": "8332" - }, - { - "name": "Guardian of Armadyl", - "id": "8333" - }, - { - "name": "Mercenary axeman", - "id": "8334" - }, - { - "name": "Mercenary mage", - "id": "8335" - }, - { - "name": "Idria", - "id": "8336" - }, - { - "name": "Idria", - "id": "8337" - }, - { - "name": "Akrisae", - "id": "8338" - }, - { - "name": "Shady stranger", - "id": "8339" - }, - { - "name": "Shady stranger", - "id": "8340" - }, - { - "name": "Shady stranger", - "id": "8341" - }, - { - "name": "Guardian of Armadyl", - "id": "8342" - }, - { - "name": "Guardian of Armadyl", - "id": "8344" - }, - { - "name": "Local thug", - "id": "8345" - }, - { - "name": "Local mage", - "id": "8347" - }, - { - "name": "Undead troll", - "id": "8367" - }, - { - "name": "Undead troll", - "id": "8378" - }, - { - "name": "Undead troll", - "id": "8379" - }, - { - "name": "Undead troll", - "id": "8380" - }, - { - "name": "Undead troll", - "id": "8381" - }, - { - "name": "Undead troll", - "id": "8382" - }, - { - "name": "Undead troll", - "id": "8383" - }, - { - "name": "Undead troll", - "id": "8384" - }, - { - "name": "Undead troll", - "id": "8385" - }, - { - "name": "Undead troll", - "id": "8386" - }, - { - "name": "Undead troll", - "id": "8387" - }, - { - "name": "Undead troll", - "id": "8388" - }, - { - "name": "Undead troll", - "id": "8389" - }, - { - "name": "Undead troll", - "id": "8390" - }, - { - "name": "Undead troll", - "id": "8391" - }, - { - "name": "Undead troll", - "id": "8392" - }, - { - "name": "Vasador", - "id": "8393" - }, - { - "name": "Valator", - "id": "8394" - }, - { - "name": "Vaasdor", - "id": "8395" - }, - { - "name": "Varosad", - "id": "8396" - }, - { - "name": "Verisad", - "id": "8397" - }, - { - "name": "Vudisor", - "id": "8398" - }, - { - "name": "Vlatoad", - "id": "8399" - }, - { - "name": "Vedolas", - "id": "8400" - }, - { - "name": "Vundiar", - "id": "8401" - }, - { - "name": "Versita", - "id": "8402" - }, - { - "name": "Vislota", - "id": "8403" - }, - { - "name": "Vanjuta", - "id": "8404" - }, - { - "name": "Vasador", - "id": "8405" - }, - { - "name": "Valator", - "id": "8406" - }, - { - "name": "Vaasdor", - "id": "8407" - }, - { - "name": "Varosad", - "id": "8408" - }, - { - "name": "Verisad", - "id": "8409" - }, - { - "name": "Vudisor", - "id": "8410" - }, - { - "name": "Vlatoad", - "id": "8411" - }, - { - "name": "Vedolas", - "id": "8412" - }, - { - "name": "Vundiar", - "id": "8413" - }, - { - "name": "Versita", - "id": "8414" - }, - { - "name": "Vislota", - "id": "8415" - }, - { - "name": "Vanjuta", - "id": "8416" - }, - { - "name": "Ivy Sophista", - "id": "8417" - }, - { - "name": "Thaerisk Cemphier", - "id": "8418" - }, - { - "name": "Thaerisk Cemphier", - "id": "8419" - }, - { - "name": "Assassin", - "id": "8420" - }, - { - "name": "Assassin", - "id": "8423" - }, - { - "name": "Mithril dragon", - "id": "8424" - }, - { - "name": "Dragon head", - "id": "8425" - }, - { - "name": "Dragon head", - "id": "8426" - }, - { - "name": "Dragon head", - "id": "8427" - }, - { - "name": "Khazard launderer", - "id": "8428" - }, - { - "name": "Khazard cook", - "id": "8429" - }, - { - "name": "Silif", - "id": "8430" - }, - { - "name": "Silif", - "id": "8431" - }, - { - "name": "Silif", - "id": "8432" - }, - { - "name": "Silif", - "id": "8433" - }, - { - "name": "Silif", - "id": "8434" - }, - { - "name": "Shady stranger", - "id": "8435" - }, - { - "name": "Suspicious outsider", - "id": "8436" - }, - { - "name": "Elite Khazard guard", - "id": "8437" - }, - { - "name": "Elite Khazard guard", - "id": "8438" - }, - { - "name": "Elite Khazard guard", - "id": "8439" - }, - { - "name": "Elite Khazard guard", - "id": "8440" - }, - { - "name": "Dark Squall", - "id": "8441" - }, - { - "name": "Surok Magis", - "id": "8442" - }, - { - "name": "Lucien", - "id": "8443" - }, - { - "name": "Druid", - "id": "8444" - }, - { - "name": "Druid", - "id": "8445" - }, - { - "name": "Druid", - "id": "8446" - }, - { - "name": "Druid bodyguard", - "id": "8447" - }, - { - "name": "Druid bodyguard", - "id": "8448" - }, - { - "name": "Movario", - "id": "8449" - }, - { - "name": "Darve", - "id": "8450" - }, - { - "name": "Cave goblin", - "id": "8451" - }, - { - "name": "Movario", - "id": "8452" - }, - { - "name": "Darve", - "id": "8453" - }, - { - "name": "Light creature", - "id": "8454" - }, - { - "name": "Light creature", - "id": "8455" - }, - { - "name": "Druid spirit", - "id": "8456" - }, - { - "name": "Druid spirit", - "id": "8457" - }, - { - "name": "Druid spirit", - "id": "8458" - }, - { - "name": "Druid spirit", - "id": "8459" - }, - { - "name": "Turael", - "id": "8460" - }, - { - "name": "Spria", - "id": "8462" - }, - { - "name": "Mazchna", - "id": "8463" - }, - { - "name": "Mazchna", - "id": "8464" - }, - { - "name": "Achtryn", - "id": "8465" - }, - { - "name": "Duradel", - "id": "8466" - }, - { - "name": "Lapalok", - "id": "8467" - }, - { - "name": "Laidee Gnonock", - "id": "8468" - }, - { - "name": "Hazelmere", - "id": "8485" - }, - { - "name": "Undead mage", - "id": "8486" - }, - { - "name": "Wild broav", - "id": "8487" - }, - { - "name": "Hazelmere", - "id": "8488" - }, - { - "name": "Hazelmere", - "id": "8490" - }, - { - "name": "Broav", - "id": "8491" - }, - { - "name": "Sithaph", - "id": "8492" - }, - { - "name": "Strisath", - "id": "8494" - }, - { - "name": "Sakirth", - "id": "8495" - }, - { - "name": "Hazelmere's hat", - "id": "8496" - }, - { - "name": "Lucien", - "id": "8497" - }, - { - "name": "A lazy Khazard guard", - "id": "8498" - }, - { - "name": "Thanksgiving Turkey", - "id": "8499" - }, - { - "name": "Cook's brother", - "id": "8500" - }, - { - "name": "Turkey", - "id": "8501" - }, - { - "name": "Cactus", - "id": "8502" - }, - { - "name": "Cactus", - "id": "8503" - }, - { - "name": "Bush", - "id": "8504" - }, - { - "name": "Toadstool", - "id": "8505" - }, - { - "name": "Barrel", - "id": "8506" - }, - { - "name": "Bush", - "id": "8507" - }, - { - "name": "Crate", - "id": "8508" - }, - { - "name": "Bush", - "id": "8509" - }, - { - "name": "Rock", - "id": "8510" - }, - { - "name": "Bush", - "id": "8511" - }, - { - "name": "Marvin", - "id": "8512" - }, - { - "name": "Marius", - "id": "8513" - }, - { - "name": "Benny", - "id": "8514" - }, - { - "name": "Yeti", - "id": "8515" - }, - { - "name": "Yeti", - "id": "8516" - }, - { - "examine": "The rebellious teenage son of the Queen of Snow. Interesting outfit!", - "name": "Jack Frost", - "id": "8517" - }, - { - "name": "Jack Frost", - "id": "8518" - }, - { - "name": "Jack Frost", - "id": "8519" - }, - { - "name": "Jack Frost", - "id": "8520" - }, - { - "name": "Snow imp", - "id": "8521" - }, - { - "name": "Snow imp", - "id": "8537" - }, - { - "name": "Snow imp", - "id": "8538" - }, - { - "name": "Queen of Snow", - "id": "8539" - }, - { - "examine": "A jolly-looking present-distributor.", - "name": "Santa Claus", - "id": "8540" - }, - { - "name": "Head snow imp", - "id": "8541" - }, - { - "name": "Head snow imp", - "id": "8542" - }, - { - "name": "Head snow imp", - "id": "8543" - }, - { - "name": "Isidor", - "id": "8544" - }, - { - "name": "Mystic", - "id": "8545" - }, - { - "name": "Balance Elemental", - "id": "8546" - }, - { - "name": "Wounded phoenix", - "id": "8547" - }, - { - "name": "Phoenix", - "id": "8548" - }, - { - "name": "Phoenix", - "id": "8549" - }, - { - "name": "Phoenix eggling", - "id": "8550" - }, - { - "name": "Phoenix eggling", - "id": "8551" - }, - { - "name": "Large egg", - "id": "8552" - }, - { - "name": "Priest of Guthix", - "id": "8553" - }, - { - "name": "Brian Twitcher", - "id": "8556" - }, - { - "name": "Lesser reborn warrior", - "id": "8557" - }, - { - "name": "Lesser reborn warrior", - "id": "8558" - }, - { - "name": "Greater reborn warrior", - "id": "8559" - }, - { - "name": "Greater reborn warrior", - "id": "8560" - }, - { - "name": "Lesser reborn ranger", - "id": "8561" - }, - { - "name": "Lesser reborn ranger", - "id": "8562" - }, - { - "name": "Greater reborn ranger", - "id": "8563" - }, - { - "name": "Greater reborn ranger", - "id": "8564" - }, - { - "name": "Lesser reborn mage", - "id": "8565" - }, - { - "name": "Lesser reborn mage", - "id": "8566" - }, - { - "name": "Greater reborn mage", - "id": "8567" - }, - { - "name": "Greater reborn mage", - "id": "8568" - }, - { - "name": "Lesser reborn warrior", - "id": "8569" - }, - { - "name": "Greater reborn warrior", - "id": "8570" - }, - { - "name": "Lesser reborn ranger", - "id": "8571" - }, - { - "name": "Greater reborn ranger", - "id": "8572" - }, - { - "name": "Lesser reborn mage", - "id": "8573" - }, - { - "name": "Greater reborn mage", - "id": "8574" - }, - { - "name": "Phoenix", - "id": "8575" - }, - { - "name": "Phoenix", - "id": "8576" - }, - { - "name": "Phoenix eggling", - "id": "8577" - }, - { - "name": "Phoenix eggling", - "id": "8578" - }, - { - "name": "Karma the chameleon", - "id": "8579" - }, - { - "name": "Karma the chameleon", - "id": "8581" - }, - { - "name": "Karma the chameleon", - "id": "8582" - }, - { - "name": "Karma the chameleon", - "id": "8583" - }, - { - "name": "Karma the chameleon", - "id": "8584" - }, - { - "name": "Karma the chameleon", - "id": "8585" - }, - { - "name": "Karma the chameleon", - "id": "8586" - }, - { - "name": "Karma the chameleon", - "id": "8587" - }, - { - "name": "Karma the chameleon", - "id": "8588" - }, - { - "name": "Karma the chameleon", - "id": "8589" - }, - { - "name": "Geoffrey", - "id": "8590" - }, - { - "examine": "Ooh, shiny things!", - "name": "Magpie Impling", - "id": "1035" - }, - { - "examine": "An earth impling. Rock on.", - "name": "Earth Impling", - "id": "1031" - }, - { - "examine": "A baby impling. Ahhh.", + "examine": "Incey wincey.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "6251", + "defence_animation": "6250", + "defence_level": "1", + "lifepoints": "2", + "melee_animation": "6249", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1005", + "name": "Giant bat", + "examine": "An annoying flappy thing.", + "attack_level": "22", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,10,10,12,10,8,0,0,0,0,0", + "combat_audio": "292,294,293", + "defence_level": "22", + "lifepoints": "32", + "magic_level": "1", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "8", + "strength_level": "22" + }, + { + "id": "1006", + "name": "Sea slug", + "examine": "A rather nasty looking crustacean." + }, + { + "id": "1007", + "name": "Zamorak wizard", + "examine": "A servant of Zamorak.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "5", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "73", + "magic_animation": "811", + "magic_level": "60", + "melee_animation": "811", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "60", + "safespot": null, + "spell_id": "43", + "strength_level": "50", + "weakness": "3" + }, + { + "id": "1008", + "name": "Hamid" + }, + { + "id": "1009", + "name": "Poison spider", + "examine": "A nasty, poisonous arachnid.", + "aggressive": "true", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "5328", + "defence_level": "28", + "lifepoints": "25", + "magic_animation": "0", + "melee_animation": "5327", + "poison_amount": "30", + "poisonous": "true", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "strength_level": "28", + "weakness": "2" + }, + { + "id": "1010", + "name": "Rantz", + "examine": "He hungry.", + "combat_style": "1", + "prj_height": "50", + "projectile": "242", + "range_animation": "3460", + "start_gfx": "243", + "start_height": "100" + }, + { + "id": "1011", + "name": "Fycie" + }, + { + "id": "1012", + "name": "Bugs" + }, + { + "id": "1013", + "name": "Swamp toad", + "examine": "A green skinned croaker", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "34", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1014", + "name": "Bloated Toad" + }, + { + "id": "1015", + "name": "Iron pickaxe", + "examine": "Useful for hitting rocks.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "7" + }, + { + "id": "1016", + "name": "Chompy bird" + }, + { + "id": "1017", + "name": "Chicken", + "examine": "Yep. Definitely a chicken.", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "355,357,356", + "death_animation": "5389", + "defence_animation": "5388", + "defence_level": "1", + "lifepoints": "3", + "magic_animation": "5387", + "melee_animation": "5387", + "range_animation": "5387", + "range_level": "1", + "respawn_delay": "18", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "1018", + "name": "Rooster", + "examine": "He rules the", + "attack_level": "2", + "death_animation": "5389", + "defence_animation": "0", + "defence_level": "2", + "lifepoints": "2", + "magic_animation": "0", + "melee_animation": "5387", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "2", + "weakness": "9" + }, + { + "id": "1019", + "name": "Fire elemental", + "examine": "A fire elemental.", + "attack_level": "24", + "combat_audio": "1534,1536,1535", + "death_animation": "1031", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "magic_level": "32", + "melee_animation": "1029", + "movement_radius": "4", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "24", + "weakness": "3" + }, + { + "id": "1020", + "name": "Earth elemental", + "examine": "An earth elemental.", + "aggressive": "false", + "attack_level": "20", + "attack_speed": "6", + "combat_audio": "1531,1533,1532", + "death_animation": "4870", + "defence_animation": "4869", + "defence_level": "35", + "lifepoints": "35", + "magic_animation": "0", + "magic_level": "10", + "melee_animation": "4868", + "movement_radius": "4", + "range_animation": "0", + "range_level": "30", + "respawn_delay": "50", + "safespot": null, + "strength_level": "32", + "weakness": "7" + }, + { + "id": "1021", + "name": "Air elemental", + "examine": "An air elemental.", + "attack_level": "24", + "combat_audio": "1527,1529,1528", + "death_animation": "1041", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "melee_animation": "1040", + "movement_radius": "4", + "range_animation": "0", + "range_level": "32", + "respawn_delay": "60", + "safespot": null, + "strength_level": "24", + "weakness": "1" + }, + { + "id": "1022", + "name": "Water elemental", + "examine": "A water elemental.", + "attack_level": "24", + "combat_audio": "1546,1543,1545", + "death_animation": "1048", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "melee_animation": "1044", + "movement_radius": "4", + "range_animation": "0", + "range_level": "32", + "respawn_delay": "60", + "safespot": null, + "strength_level": "24", + "weakness": "1" + }, + { + "id": "1023", + "name": "Vampire", + "examine": "It looks very hungry!", + "attack_level": "52", + "clue_level": "1", + "death_animation": "7185", + "defence_level": "52", + "lifepoints": "50", + "melee_animation": "7183", + "range_level": "1", + "safespot": null, + "slayer_exp": "50", + "strength_level": "1" + }, + { + "id": "1024", + "name": "Baby impling" + }, + { + "id": "1028", "name": "Baby Impling", - "id": "1028" + "examine": "A baby impling. Ahhh." }, { - "examine": "A young impling. It's not fair!", + "id": "1029", "name": "Young Impling", - "id": "1029" + "examine": "A young impling. It's not fair!" }, { - "examine": "An impling gourmet. Mmmm, tasty.", + "id": "1030", "name": "Gourmet Impling", - "id": "1030" + "examine": "An impling gourmet. Mmmm, tasty." }, { - "examine": "An impling who likes magic. Magic!", + "id": "1031", + "name": "Earth Impling", + "examine": "An earth impling. Rock on." + }, + { + "id": "1032", "name": "Essence Impling", - "id": "1032" + "examine": "An impling who likes magic. Magic!" }, { - "examine": "Dodgy Mike.", - "name": "Mike", - "id": "3166" - }, - { - "examine": "An impling with varied tastes.", + "id": "1033", "name": "Eclectic Impling", - "id": "1033" + "examine": "An impling with varied tastes." }, { - "examine": "He seems to be making odd sucking noises with his teeth.", - "name": "Leon", - "id": "5111" - }, - { - "examine": "A very stealthy impling.", - "name": "Ninja Impling", - "id": "6053" - }, - { - "examine": "A rare bird.", - "name": "Black Swan", - "water_npc": "true", - "id": "3297" - }, - { - "examine": "A nature impling. Right on, maaan.", + "id": "1034", "name": "Nature Impling", - "id": "1034" + "examine": "A nature impling. Right on, maaan." }, { - "examine": "A mourner, or plague healer.", - "death_animation": "836", - "name": "Mourner (boss)", - "defence_level": "10", - "lifepoints": "19", - "melee_animation": "428", + "id": "1035", + "name": "Magpie Impling", + "examine": "Ooh, shiny things!" + }, + { + "id": "1036", + "name": "Banker" + }, + { + "id": "1037", + "name": "Prissy Scilla", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "1038", + "name": "Rufus" + }, + { + "id": "1039", + "name": "Barker" + }, + { + "id": "1040", + "name": "Fidelio" + }, + { + "id": "1041", + "name": "Sbott" + }, + { + "id": "1042", + "name": "Roavar" + }, + { + "id": "1043", + "name": "Will o' the wisp" + }, + { + "id": "1044", + "name": "Monk of Zamorak", + "examine": "An evil human cleric.", + "aggressive": "true", + "attack_level": "18", "attack_speed": "4", - "strength_level": "10", - "id": "370", - "bonuses": "0,0,0,0,0,3,2,4,0,0,0,0,0,0,0", - "attack_level": "10" - }, - { - "examine": "A mourner, or plague healer.", - "name": "Mourner", - "id": "717" - }, - { - "examine": "A mourner, or plague healer.", - "name": "Mourner", - "id": "718" - }, - { - "examine": "A mourner, or plague healer.", - "name": "Mourner", - "id": "719" - }, - { - "examine": "A mourner, or plague healer.", - "name": "Mourner", - "id": "3216" - }, - { - "examine": "A mourner, or plague healer.", + "combat_audio": "511,513,512", + "combat_style": "2", "death_animation": "836", - "name": "Mourner", - "defence_level": "14", - "melee_animation": "428", - "lifepoints": "24", - "attack_speed": "4", - "strength_level": "14", - "id": "357", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "attack_level": "14" - }, - { - "examine": "A mourner, or plague healer.", - "death_animation": "836", - "name": "Mourner", - "defence_level": "19", + "defence_animation": "404", + "defence_level": "22", + "end_gfx": "101", + "lifepoints": "20", + "magic_animation": "711", + "magic_level": "25", "melee_animation": "422", - "lifepoints": "30", - "attack_speed": "4", - "strength_level": "19", - "id": "348", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "attack_level": "19" + "projectile": "100", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "99", + "strength_level": "18", + "weakness": "3" }, { - "examine": "A mourner, or plague healer.", + "id": "1045", + "name": "Monk of Zamorak", + "examine": "An evil human cleric.", + "aggressive": "true", + "attack_level": "8", + "attack_speed": "4", + "combat_audio": "511,513,512", + "combat_style": "2", "death_animation": "836", - "name": "Mourner", - "defence_level": "19", + "defence_animation": "404", + "defence_level": "17", + "end_gfx": "101", + "lifepoints": "10", + "magic_animation": "711", + "magic_level": "25", "melee_animation": "422", - "lifepoints": "30", - "attack_speed": "4", - "strength_level": "19", - "id": "369", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "attack_level": "19" - }, - { - "examine": "A mourner, or plague healer.", - "death_animation": "836", - "name": "Mourner", - "defence_level": "8", - "lifepoints": "18", - "melee_animation": "428", + "projectile": "100", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "99", "strength_level": "8", + "weakness": "3" + }, + { + "id": "1046", + "name": "Monk of Zamorak", + "examine": "An evil human cleric.", + "aggressive": "true", + "attack_level": "25", "attack_speed": "4", - "id": "347", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "attack_level": "8" - }, - { - "examine": "A Mourner, or plague healer.", - "name": "Mourner", - "id": "2374" - }, - { - "examine": "A mourner, or plague healer.", - "name": "Mourner", - "id": "372" - }, - { - "examine": "A mourner, or plague healer.", + "combat_audio": "511,513,512", + "combat_style": "2", "death_animation": "836", - "name": "Mourner", + "defence_animation": "404", + "defence_level": "25", + "end_gfx": "101", + "lifepoints": "25", + "magic_animation": "711", + "magic_level": "40", + "melee_animation": "422", + "projectile": "100", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "99", + "strength_level": "25", + "weakness": "3" + }, + { + "id": "1047", + "name": "Drezel" + }, + { + "id": "1049", + "name": "Drezel", + "examine": "A holy man." + }, + { + "id": "1050", + "name": "Filiman Tarlock", + "examine": "The animated spirit of a soul not at rest." + }, + { + "id": "1051", + "name": "Nature Spirit", + "examine": "The animated spirit of a soul not at rest." + }, + { + "id": "1052", + "name": "Ghast", + "examine": "Arrghhh... a Ghast.", + "aggressive": "false", + "attack_level": "1", + "combat_audio": "433,435,434", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "1053", + "name": "Ghast", + "examine": "Arrghhh... A Ghast.", + "aggressive": "true", + "attack_level": "22", + "attack_speed": "4", + "combat_audio": "433,435,434", + "death_animation": "1089", + "death_gfx": "265", + "defence_animation": "1088", + "defence_level": "18", + "lifepoints": "45", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "1087", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "22", + "weakness": "9" + }, + { + "id": "1054", + "name": "Ulizius", + "examine": "A slightly nervous guard." + }, + { + "id": "1055", + "name": "Pirate Jackie the Fruit", + "examine": "Ticket trader for the Brimhaven Agility Arena.", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1056", + "name": "Mime" + }, + { + "id": "1057", + "name": "Strange watcher", + "examine": "A member of the audience.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1058", + "name": "Strange watcher", + "examine": "A member of the audience.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1059", + "name": "Strange watcher", + "examine": "A member of the audience.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1060", + "name": "Denulth", + "examine": "Commander of the Imperial Guard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1061", + "name": "Sergeant", + "examine": "A sergeant of the Imperial Guard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1062", + "name": "Sergeant", + "examine": "A sergeant of the Imperial Guard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1063", + "name": "Soldier", + "examine": "A soldier of the Imperial Guard.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1064", + "name": "Soldier", + "examine": "A soldier of the Imperial Guard.", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1065", + "name": "Soldier", + "examine": "A soldier of the Imperial Guard.", + "attack_level": "44", + "combat_audio": "511,513,512", + "defence_level": "44", + "lifepoints": "55", + "magic_level": "1", + "range_level": "1", + "safespot": null, + "strength_level": "44" + }, + { + "id": "1066", + "name": "Soldier", + "examine": "A soldier of the Imperial Guard.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1067", + "name": "Soldier", + "examine": "A soldier of the Imperial Guard.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1068", + "name": "Soldier", + "examine": "A soldier of the Imperial Guard.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1069", + "name": "Soldier", + "examine": "A soldier of the Imperial Guard.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1070", + "name": "Saba" + }, + { + "id": "1071", + "name": "Tenzing" + }, + { + "id": "1072", + "name": "Eadburg", + "examine": "The Burthorpe Castle cook.", + "attack_level": "3", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "3", + "lifepoints": "10", + "magic_level": "1", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "2" + }, + { + "id": "1073", + "name": "Archer", + "examine": "A Burthorpe Castle Archer.", + "attack_level": "1", + "bonuses": "54,68,75,72,67,81,54,35,35,0,0,0,0,0,0", + "combat_style": "1", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "44", + "lifepoints": "55", + "magic_animation": "426", + "magic_level": "1", + "melee_animation": "426", + "projectile": "10", + "range_animation": "426", + "range_level": "44", + "respawn_delay": "12", + "safespot": null, + "start_gfx": "19", + "strength_level": "1" + }, + { + "id": "1074", + "name": "Archer", + "examine": "A Burthorpe Castle Archer.", + "attack_level": "1", + "bonuses": "54,68,75,72,67,81,54,35,35,0,0,0,0,0,0", + "combat_style": "1", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "44", + "lifepoints": "55", + "magic_animation": "426", + "magic_level": "1", + "melee_animation": "426", + "projectile": "10", + "range_animation": "426", + "range_level": "44", + "respawn_delay": "12", + "safespot": null, + "start_gfx": "19", + "strength_level": "1" + }, + { + "id": "1075", + "name": "Archer" + }, + { + "id": "1076", + "name": "Guard", + "examine": "A Burthorpe Castle guard.", + "attack_level": "33", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "33", + "lifepoints": "44", + "magic_level": "1", + "melee_animation": "401", + "range_level": "1", + "safespot": null, + "strength_level": "33" + }, + { + "id": "1077", + "name": "Guard", + "examine": "A Burthorpe Castle guard.", + "attack_level": "33", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "33", + "lifepoints": "44", + "magic_level": "1", + "melee_animation": "401", + "range_level": "1", + "safespot": null, + "strength_level": "33" + }, + { + "id": "1078", + "name": "Harold", + "examine": "An off-duty Burthorpe Castle guard." + }, + { + "id": "1079", + "name": "Tostig", + "examine": "Barman of the Toad and Chicken." + }, + { + "id": "1080", + "name": "Eohric", + "examine": "Head servant for Prince Anlaf." + }, + { + "id": "1081", + "name": "Servant", + "examine": "A servant for Prince Anlaf.", + "attack_level": "3", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "3", + "lifepoints": "10", + "magic_level": "1", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "3" + }, + { + "id": "1082", + "name": "Dunstan", + "examine": "Smithy for Burthorpe." + }, + { + "id": "1083", + "name": "Wistan", + "examine": "Shopkeeper for Burthorpe." + }, + { + "id": "1084", + "name": "Breoca", + "examine": "A citizen of Burthorpe.", + "attack_level": "3", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "3", + "lifepoints": "10", + "magic_level": "1", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "3" + }, + { + "id": "1085", + "name": "Ocga", + "examine": "A citizen of Burthorpe.", + "attack_level": "3", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "3", + "lifepoints": "10", + "magic_level": "1", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "3" + }, + { + "id": "1086", + "name": "Man", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1087", + "name": "Penda", + "examine": "A citizen of Burthorpe.", + "attack_level": "3", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "3", + "lifepoints": "10", + "magic_level": "1", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "3" + }, + { + "id": "1088", + "name": "Hygd", + "examine": "A citizen of Burthorpe.", + "attack_level": "3", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "3", + "lifepoints": "10", + "magic_level": "1", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "2" + }, + { + "id": "1089", + "name": "Ceolburg", + "examine": "A citizen of Burthorpe.", + "attack_level": "3", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "3", + "lifepoints": "10", + "magic_level": "1", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "2" + }, + { + "id": "1090", + "name": "Hild", + "examine": "A pretty young woman with an air of mystery around her." + }, + { + "id": "1091", + "name": "Bob" + }, + { + "id": "1092", + "name": "White Knight", + "examine": "The knight seems to be watching something.", + "attack_level": "27", + "attack_speed": "8", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "27", + "lifepoints": "38", + "magic_animation": "0", + "melee_animation": "7042", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "27", + "weakness": "9" + }, + { + "id": "1093", + "name": "Billy" + }, + { + "id": "1094", + "name": "Mountain goat" + }, + { + "id": "1095", + "name": "Rock", + "examine": "The biggest and baddest troll.", + "aggressive": "true", + "attack_level": "70", + "bonuses": "60,60,60,0,0,35,60,35,200,200,0,100,0,0,0", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "140", + "magic_animation": "0", + "melee_animation": "6523", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "110", + "weakness": "7" + }, + { + "id": "1096", + "name": "Stick", + "examine": "Careful, he is a big.", + "aggressive": "true", + "attack_level": "60", + "attack_speed": "7", + "bonuses": "50,50,50,0,0,30,30,50,200,200,0,80,0,0,0", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "60", + "lifepoints": "135", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "284", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "110", + "weakness": "7" + }, + { + "id": "1097", + "name": "Pee Hat", + "examine": "A nasty looking troll.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "6", + "bonuses": "40,40,40,0,0,25,25,40,200,200,0,70,0,0,0", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "50", + "lifepoints": "120", + "magic_animation": "284", + "melee_animation": "284", + "range_animation": "284", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "100", + "weakness": "7" + }, + { + "id": "1098", + "name": "Kraka", + "examine": "A nasty looking troll.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "6", + "bonuses": "40,40,40,0,0,25,25,40,200,400,0,70,0,0,0", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "50", + "lifepoints": "120", + "magic_animation": "284", + "melee_animation": "284", + "range_animation": "284", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "100", + "weakness": "7" + }, + { + "id": "1099", + "name": "Dung", + "examine": "Human is his speciality.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "1100", + "name": "Ash", + "examine": "Human is his speciality.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "1101", + "name": "Thrower Troll", + "examine": "Small for a troll, but mean, ugly and throws rocks.", + "agg_radius": "6", + "attack_level": "41", + "attack_speed": "7", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "30", + "lifepoints": "95", + "magic_animation": "284", + "melee_animation": "284", + "projectile": "276", + "range_animation": "284", + "range_level": "40", + "respawn_delay": "35", + "safespot": null, + "strength_level": "41", + "weakness": "0" + }, + { + "id": "1102", + "name": "Thrower Troll", + "examine": "Small for a troll, but mean, ugly and throws rocks.", + "agg_radius": "6", + "attack_level": "41", + "attack_speed": "7", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "30", + "lifepoints": "95", + "magic_animation": "284", + "melee_animation": "284", + "projectile": "276", + "range_animation": "284", + "range_level": "40", + "respawn_delay": "35", + "safespot": null, + "strength_level": "41", + "weakness": "0" + }, + { + "id": "1103", + "name": "Thrower Troll", + "examine": "Small for a troll, but mean, ugly and throws rocks.", + "agg_radius": "6", + "attack_level": "41", + "attack_speed": "7", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "30", + "lifepoints": "95", + "magic_animation": "284", + "melee_animation": "284", + "projectile": "276", + "range_animation": "284", + "range_level": "40", + "respawn_delay": "35", + "safespot": null, + "strength_level": "41", + "weakness": "0" + }, + { + "id": "1104", + "name": "Thrower Troll", + "examine": "Small for a troll, but mean, ugly and throws rocks.", + "agg_radius": "6", + "attack_level": "41", + "attack_speed": "7", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "30", + "lifepoints": "95", + "magic_animation": "284", + "melee_animation": "284", + "projectile": "276", + "range_animation": "284", + "range_level": "40", + "respawn_delay": "35", + "safespot": null, + "strength_level": "41", + "weakness": "0" + }, + { + "id": "1105", + "name": "Thrower Troll", + "examine": "Small for a troll, but mean, ugly and throws rocks.", + "agg_radius": "6", + "attack_level": "41", + "attack_speed": "7", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "30", + "lifepoints": "95", + "magic_animation": "284", + "melee_animation": "284", + "projectile": "276", + "range_animation": "284", + "range_level": "40", + "respawn_delay": "35", + "safespot": null, + "strength_level": "41", + "weakness": "0" + }, + { + "id": "1106", + "name": "Mountain troll", + "examine": "Small for a troll, but mean and ugly.", + "attack_level": "53", + "attack_speed": "5", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "53", + "lifepoints": "90", + "magic_animation": "284", + "melee_animation": "284", + "range_animation": "284", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "7" + }, + { + "id": "1107", + "name": "Mountain troll", + "examine": "Small for a troll, but mean and ugly.", + "attack_level": "53", + "attack_speed": "5", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "53", + "lifepoints": "90", + "magic_animation": "284", + "melee_animation": "284", + "range_animation": "284", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "7" + }, + { + "id": "1108", + "name": "Mountain troll", + "examine": "Small for a troll, but mean and ugly.", + "attack_level": "53", + "attack_speed": "5", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "53", + "lifepoints": "90", + "magic_animation": "284", + "melee_animation": "284", + "range_animation": "284", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "7" + }, + { + "id": "1109", + "name": "Mountain troll", + "examine": "Small for a troll, but mean and ugly.", + "attack_level": "53", + "attack_speed": "5", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "53", + "lifepoints": "90", + "magic_animation": "284", + "melee_animation": "284", + "range_animation": "284", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "7" + }, + { + "id": "1110", + "name": "Mountain troll", + "examine": "Small for a troll, but mean and ugly.", + "attack_level": "53", + "attack_speed": "5", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "53", + "lifepoints": "90", + "magic_animation": "284", + "melee_animation": "284", + "range_animation": "284", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "7" + }, + { + "id": "1111", + "name": "Mountain troll", + "examine": "Small for a troll, but mean and ugly.", + "attack_level": "53", + "attack_speed": "5", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "53", + "lifepoints": "90", + "magic_animation": "284", + "melee_animation": "284", + "range_animation": "284", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "7" + }, + { + "id": "1112", + "name": "Mountain troll", + "examine": "Small for a troll, but mean and ugly.", + "attack_level": "53", + "attack_speed": "5", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "53", + "lifepoints": "90", + "magic_animation": "284", + "melee_animation": "284", + "range_animation": "284", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "7" + }, + { + "id": "1113", + "name": "Eadgar" + }, + { + "id": "1114", + "name": "Godric" + }, + { + "id": "1115", + "name": "Troll general", + "examine": "One of the troll generals.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "5", + "death_animation": "287", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "92", + "magic_animation": "0", + "melee_animation": "1259", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "65", + "weakness": "7" + }, + { + "id": "1116", + "name": "Troll general", + "examine": "One of the troll generals.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "5", + "death_animation": "287", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "92", + "magic_animation": "0", + "melee_animation": "1259", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "65", + "weakness": "7" + }, + { + "id": "1117", + "name": "Troll general", + "examine": "One of the troll generals.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "5", + "death_animation": "287", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "92", + "magic_animation": "0", + "melee_animation": "1259", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "65", + "weakness": "7" + }, + { + "id": "1118", + "name": "Troll spectator", + "examine": "He's watching the arena.", + "attack_level": "47", + "death_animation": "287", + "defence_animation": "0", + "defence_level": "47", + "lifepoints": "67", + "magic_animation": "0", + "melee_animation": "1259", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "47", + "weakness": "7" + }, + { + "id": "1119", + "name": "Troll spectator", + "examine": "He's watching the arena.", + "attack_level": "47", + "death_animation": "287", + "defence_animation": "0", + "defence_level": "47", + "lifepoints": "67", + "magic_animation": "0", + "melee_animation": "1259", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "47", + "weakness": "7" + }, + { + "id": "1120", + "name": "Troll spectator", + "examine": "He's watching the arena.", + "attack_level": "47", + "death_animation": "287", + "defence_animation": "0", + "defence_level": "47", + "lifepoints": "67", + "magic_animation": "0", + "melee_animation": "1259", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "47", + "weakness": "7" + }, + { + "id": "1121", + "name": "Troll spectator", + "examine": "He's watching the arena.", + "attack_level": "47", + "death_animation": "287", + "defence_animation": "0", + "defence_level": "47", + "lifepoints": "67", + "magic_animation": "0", + "melee_animation": "1259", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "47", + "weakness": "7" + }, + { + "id": "1122", + "name": "Troll spectator", + "examine": "He's watching the arena.", + "attack_level": "47", + "death_animation": "287", + "defence_animation": "0", + "defence_level": "47", + "lifepoints": "67", + "magic_animation": "0", + "melee_animation": "1259", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "47", + "weakness": "7" + }, + { + "id": "1123", + "name": "Troll spectator", + "examine": "He's watching the arena.", + "attack_level": "47", + "death_animation": "287", + "defence_animation": "0", + "defence_level": "47", + "lifepoints": "67", + "magic_animation": "0", + "melee_animation": "1259", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "47", + "weakness": "7" + }, + { + "id": "1124", + "name": "Troll spectator", + "examine": "He's watching the arena.", + "attack_level": "47", + "death_animation": "287", + "defence_animation": "0", + "defence_level": "47", + "lifepoints": "67", + "magic_animation": "0", + "melee_animation": "1259", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "47", + "weakness": "7" + }, + { + "id": "1125", + "name": "Dad", + "examine": "An unusually large troll.", + "attack_level": "60", + "bonuses": "40,40,40,0,0,25,25,40,200,200,0,70,0,0,0", + "death_animation": "287", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "120", + "magic_animation": "0", + "melee_animation": "1158", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "120", + "weakness": "7" + }, + { + "id": "1126", + "name": "Twig", + "examine": "He's guarding the cells.", + "aggressive": "true", + "attack_level": "40", + "bonuses": "20,20,20,0,0,0,0,10,200,200,0,20,0,0,0", + "death_animation": "287", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "90", + "magic_animation": "0", + "melee_animation": "1158", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "90", + "weakness": "7" + }, + { + "id": "1127", + "name": "Berry", + "examine": "He's guarding the cells.", + "aggressive": "true", + "attack_level": "40", + "bonuses": "20,20,20,0,0,0,0,10,200,200,0,20,0,0,0", + "death_animation": "287", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "90", + "magic_animation": "0", + "melee_animation": "1158", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "90", + "weakness": "7" + }, + { + "id": "1128", + "name": "Twig", + "examine": "He's guarding the cells.", + "attack_level": "40", + "bonuses": "20,20,20,0,0,0,0,10,200,200,0,20,0,0,0", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "90", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "90", + "weakness": "7" + }, + { + "id": "1129", + "name": "Berry", + "examine": "He's guarding the cells.", + "attack_level": "40", + "bonuses": "20,20,20,0,0,0,0,10,200,200,0,20,0,0,0", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "90", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "90", + "weakness": "7" + }, + { + "id": "1130", + "name": "Thrower troll", + "examine": "Small for a troll, but it's mean, ugly and throws rocks.", + "aggressive": "true", + "attack_level": "41", + "attack_speed": "7", + "bonuses": "30,60,40,40,50,70,50,0,0,0,0,0,0,0,0", + "combat_style": "1", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "30", + "lifepoints": "95", + "magic_animation": "284", + "melee_animation": "284", + "projectile": "276", + "range_animation": "284", + "range_level": "40", + "respawn_delay": "35", + "safespot": null, + "start_gfx": "33", + "strength_level": "41", + "weakness": "0" + }, + { + "id": "1131", + "name": "Thrower troll", + "examine": "Small for a troll, but it's mean, ugly and throws rocks.", + "agg_radius": "6", + "aggressive": "true", + "attack_level": "41", + "attack_speed": "7", + "bonuses": "30,60,40,40,50,70,50,0,0,0,0,0,0,0,0", + "combat_style": "1", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "30", + "lifepoints": "95", + "magic_animation": "284", + "melee_animation": "284", + "projectile": "276", + "range_animation": "284", + "range_level": "40", + "respawn_delay": "35", + "safespot": null, + "start_gfx": "33", + "strength_level": "41", + "weakness": "0" + }, + { + "id": "1132", + "name": "Thrower troll", + "examine": "Small for a troll, but it's mean, ugly and throws rocks.", + "agg_radius": "6", + "aggressive": "true", + "attack_level": "41", + "attack_speed": "7", + "bonuses": "30,60,40,40,50,70,50,0,0,0,0,0,0,0,0", + "combat_style": "1", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "30", + "lifepoints": "95", + "magic_animation": "284", + "melee_animation": "284", + "projectile": "276", + "range_animation": "284", + "range_level": "40", + "respawn_delay": "35", + "safespot": null, + "start_gfx": "33", + "strength_level": "41", + "weakness": "0" + }, + { + "id": "1133", + "name": "Thrower troll", + "examine": "Small for a troll, but it's mean, ugly and throws rocks.", + "agg_radius": "6", + "aggressive": "true", + "attack_level": "41", + "attack_speed": "7", + "bonuses": "30,60,40,40,50,70,50,0,0,0,0,0,0,0,0", + "combat_style": "1", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "30", + "lifepoints": "95", + "magic_animation": "284", + "melee_animation": "284", + "projectile": "276", + "range_animation": "284", + "range_level": "40", + "respawn_delay": "35", + "safespot": null, + "start_gfx": "33", + "strength_level": "41", + "weakness": "0" + }, + { + "id": "1134", + "name": "Thrower troll", + "examine": "Small for a troll, but it's mean, ugly and throws rocks.", + "agg_radius": "6", + "aggressive": "true", + "attack_level": "41", + "attack_speed": "7", + "bonuses": "30,60,40,40,50,70,50,0,0,0,0,0,0,0,0", + "combat_style": "1", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "30", + "lifepoints": "95", + "magic_animation": "284", + "melee_animation": "284", + "projectile": "276", + "range_animation": "284", + "range_level": "40", + "respawn_delay": "35", + "safespot": null, + "start_gfx": "33", + "strength_level": "41", + "weakness": "0" + }, + { + "id": "1135", + "name": "Cook", + "examine": "Human is his speciality.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1136", + "name": "Cook", + "examine": "Human is his speciality.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1137", + "name": "Cook", + "examine": "Human is his speciality.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1138", + "name": "Mountain troll", + "examine": "Small for a troll, but mean and ugly.", + "attack_level": "53", + "attack_speed": "5", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "53", + "lifepoints": "90", + "magic_animation": "284", + "melee_animation": "284", + "range_animation": "284", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "7" + }, + { + "id": "1139", + "name": "Mushroom", + "examine": "He's fast asleep.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "7" + }, + { + "id": "1140", + "name": "Mountain goat", + "examine": "This beast doesn't need climbing boots.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1141", + "name": "Mountain goat", + "examine": "This beast doesn't need climbing boots.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1142", + "name": "Guard", + "examine": "He's guarding the storeroom.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1143", + "name": "Guard", + "examine": "He's guarding the storeroom.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1144", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1145", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1146", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1147", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1148", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1149", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1150", + "name": "Guard", + "examine": "He's guarding the goutweed.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1151", + "name": "Burntmeat", + "examine": "Human is his speciality.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1152", + "name": "Weird Old Man", + "examine": "What's he mumbling about?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1153", + "name": "Kalphite Worker", + "examine": "I don't think insect repellent will work...", + "attack_level": "20", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,5,5,1,10,10,0,0,0,0,0", + "combat_audio": "571,573,572", + "death_animation": "6230", + "defence_animation": "6232", + "defence_level": "20", + "lifepoints": "40", + "magic_animation": "6223", + "magic_level": "1", + "melee_animation": "6223", + "range_animation": "6223", + "range_level": "1", + "respawn_delay": "38", + "safespot": null, + "slayer_exp": "40", + "strength_level": "20", + "weakness": "7" + }, + { + "id": "1154", + "name": "Kalphite Soldier", + "examine": "I don't think insect repellent will work...", + "aggressive": "true", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,25,25,5,50,50,0,0,0,0,0", + "combat_audio": "567,569,568", + "death_animation": "6228", + "defence_animation": "6227", + "defence_level": "70", + "lifepoints": "90", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "6224", + "poison_amount": "20", + "poisonous": "true", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "90", + "strength_level": "70", + "weakness": "7" + }, + { + "id": "1155", + "name": "Kalphite Guardian", + "examine": "I don't think insect repellent will work...", + "aggressive": "true", + "attack_level": "110", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,25,25,5,50,50,0,0,0,0,0", + "death_animation": "6230", + "defence_animation": "6232", + "defence_level": "110", + "lifepoints": "170", + "magic_animation": "6223", + "magic_level": "1", + "melee_animation": "6223", + "poison_amount": "30", + "poisonous": "true", + "range_animation": "6223", + "range_level": "1", + "respawn_delay": "65", + "safespot": null, + "strength_level": "110", + "weakness": "7" + }, + { + "id": "1156", + "name": "Kalphite Worker", + "examine": "I don't think insect repellent will work...", + "attack_level": "20", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,5,5,1,10,10,0,0,0,0,0", + "combat_audio": "571,573,572", + "death_animation": "6230", + "defence_animation": "6232", + "defence_level": "20", + "lifepoints": "40", + "magic_animation": "6223", + "magic_level": "1", + "melee_animation": "6223", + "range_animation": "6223", + "range_level": "1", + "respawn_delay": "38", + "safespot": null, + "slayer_exp": "40", + "strength_level": "20", + "weakness": "7" + }, + { + "id": "1157", + "name": "Kalphite Guardian", + "examine": "I don't think insect repellent will work...", + "aggressive": "true", + "attack_level": "110", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,25,25,5,50,50,0,0,0,0,0", + "death_animation": "6230", + "defence_animation": "6232", + "defence_level": "110", + "lifepoints": "170", + "magic_animation": "6223", + "magic_level": "1", + "melee_animation": "6223", + "poison_amount": "30", + "poisonous": "true", + "range_animation": "6223", + "range_level": "1", + "respawn_delay": "65", + "safespot": null, + "strength_level": "110", + "weakness": "7" + }, + { + "id": "1158", + "name": "Kalphite Queen", + "examine": "I don't think insect repellent will work...", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "300", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,50,10,100,100,0,0,0,0,0", + "death_animation": "6242", + "defence_animation": "6232", + "defence_level": "300", + "lifepoints": "255", + "magic_animation": "6241", + "magic_level": "150", + "melee_animation": "6241", + "poisonous": "", + "range_animation": "6241", + "range_level": "1000", + "respawn_delay": "0", + "safespot": null, + "strength_level": "300", + "weakness": "10" + }, + { + "id": "1159", + "name": "Kalphite Queen" + }, + { + "id": "1160", + "name": "Kalphite Queen", + "examine": "I don't think insect repellent will work...", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "300", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,100,100,100,10,10,0,0,0,0,0", + "death_animation": "6233", + "defence_animation": "6234", + "defence_level": "300", + "lifepoints": "255", + "magic_animation": "6235", + "magic_level": "150", + "melee_animation": "6235", + "range_animation": "6235", + "range_level": "1000", + "respawn_delay": "45", + "safespot": null, + "strength_level": "300", + "weakness": "10" + }, + { + "id": "1161", + "name": "Kalphite Larva", + "examine": "I don't think insect repellent will work...", + "aggressive": "false", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1162", + "name": "Timfraku", + "examine": "The imposing Chief of Tai Bwo Wannai." + }, + { + "id": "1163", + "name": "Tiadeche", + "examine": "A rather depressed looking fisherman." + }, + { + "id": "1164", + "name": "Tiadeche", + "examine": "A rather depressed looking fisherman." + }, + { + "id": "1165", + "name": "Tinsay" + }, + { + "id": "1166", + "name": "Tinsay" + }, + { + "id": "1167", + "name": "Tamayu", + "examine": "A hunter who long ago succumbed to blood lust." + }, + { + "id": "1168", + "name": "Tamayu" + }, + { + "id": "1169", + "name": "Tamayu" + }, + { + "id": "1170", + "name": "Tamayu" + }, + { + "id": "1171", + "name": "Lubufu", + "examine": "A crotchety old fisherman who doesn't like young whippersnappers." + }, + { + "id": "1172", + "name": "The Shaikahan", + "examine": "A huge beast, resembling in some ways a lion, but mostly a twisted nightmare.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "5", + "death_animation": "1201", + "defence_animation": "1200", + "defence_level": "50", + "lifepoints": "100", + "magic_animation": "1197", + "melee_animation": "1199", + "range_animation": "1197", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "50", + "weakness": "9" + }, + { + "id": "1173", + "name": "The Shaikahan" + }, + { + "id": "1174", + "name": "Fishing spot" + }, + { + "id": "1175", + "name": "Fishing spot" + }, + { + "id": "1176", + "name": "Fishing spot", + "examine": "I can see fish swimming in the water." + }, + { + "id": "1177", + "name": "Fishing spot" + }, + { + "id": "1178", + "name": "Fishing spot" + }, + { + "id": "1179", + "name": "Gull", + "examine": "Flappy bird.", + "water_npc": "true" + }, + { + "id": "1180", + "name": "Cormorant", + "examine": "A sea bird." + }, + { + "id": "1181", + "name": "Pelican", + "examine": "A sea bird." + }, + { + "id": "1182", + "name": "Lord Iorwerth" + }, + { + "id": "1183", + "name": "Elf warrior", + "examine": "He looks pretty handy with that bow.", + "attack_level": "1", + "clue_level": "2", + "combat_audio": "425,427,426", + "combat_style": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "64", + "lifepoints": "91", + "magic_animation": "0", + "melee_animation": "428", + "projectile": "249", + "range_animation": "426", + "range_level": "72", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "250", + "strength_level": "1", + "weakness": "2" + }, + { + "id": "1184", + "name": "Elf warrior", + "examine": "I don't wanna be at the wrong end of that pike.", + "attack_level": "68", + "attack_speed": "5", + "clue_level": "2", + "combat_audio": "425,427,426", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "68", + "lifepoints": "85", + "magic_animation": "0", + "melee_animation": "428", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "68", + "weakness": "9" + }, + { + "id": "1185", + "name": "Elven city guard", + "examine": "An elven city guard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1186", + "name": "Idris" + }, + { + "id": "1187", + "name": "Essyllt" + }, + { + "id": "1188", + "name": "Morvran" + }, + { + "id": "1189", + "name": "Fishing spot" + }, + { + "id": "1190", + "name": "Fishing spot" + }, + { + "id": "1191", + "name": "Fishing spot" + }, + { + "id": "1192", + "name": "Rabbit", + "examine": "A cute bunny rabbit.", + "attack_level": "1", + "death_animation": "6092", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "1", + "magic_animation": "0", + "melee_animation": "6090", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "1193", + "name": "Rabbit", + "attack_level": "1", + "death_animation": "6092", + "defence_animation": "6091", + "defence_level": "1", + "lifepoints": "5", + "melee_animation": "6090", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1194", + "name": "Rabbit", + "attack_level": "1", + "death_animation": "6092", + "defence_animation": "6091", + "defence_level": "1", + "lifepoints": "5", + "melee_animation": "6090", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1195", + "name": "Grizzly bear", + "examine": "It's an NPC.", + "aggressive": "true", + "attack_level": "40", + "attack_speed": "4", + "combat_audio": "300,302,301", + "death_animation": "4929", + "defence_animation": "4927", + "defence_level": "35", + "lifepoints": "35", + "magic_level": "1", + "melee_animation": "4921", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "36" + }, + { + "id": "1196", + "name": "Grizzly bear cub", + "examine": "Eek! A bear cub!", + "attack_level": "21", + "combat_audio": "498,500,499", + "defence_animation": "0", + "defence_level": "21", + "lifepoints": "30", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "21", + "weakness": "6" + }, + { + "id": "1197", + "name": "Grizzly bear cub", + "attack_level": "1", + "combat_audio": "498,500,499", + "defence_level": "1", + "lifepoints": "35", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1198", + "name": "Dire Wolf", + "examine": "What big teeth you have.", + "attack_level": "33", + "death_animation": "6558", + "defence_animation": "0", + "defence_level": "33", + "lifepoints": "47", + "magic_animation": "0", + "melee_animation": "6559", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "33", + "weakness": "9" + }, + { + "id": "1199", + "name": "Elf Tracker", + "examine": "An elf tracker.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1200", + "name": "Tyras guard", + "examine": "One of King Tyras's men.", + "attack_level": "42", + "attack_speed": "6", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "42", + "lifepoints": "60", + "magic_animation": "0", + "melee_animation": "414", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "42", + "weakness": "8" + }, + { + "id": "1201", + "name": "Elf warrior", + "examine": "I don't want to get on the wrong side of him.", + "attack_level": "1", + "clue_level": "2", + "combat_audio": "425,427,426", + "combat_style": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "105", + "melee_animation": "426", + "projectile": "249", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "250", + "strength_level": "1" + }, + { + "id": "1202", + "name": "Arianwyn" + }, + { + "id": "1203", + "name": "Tyras guard", + "examine": "One of King Tyras's men.", + "attack_level": "95", + "attack_speed": "6", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "110", + "lifepoints": "110", + "melee_animation": "395", + "range_level": "50", + "respawn_delay": "60", + "safespot": null, + "strength_level": "105" + }, + { + "id": "1204", + "name": "Tyras guard", + "examine": "One of King Tyras's men.", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "112", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1205", + "name": "Tyras guard" + }, + { + "id": "1206", + "name": "Tyras guard", + "examine": "One of King Tyras's men." + }, + { + "id": "1207", + "name": "Quartermaster" + }, + { + "id": "1208", + "name": "Quartermaster", + "examine": "Responsible for the food and equipment of the troops.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1209", + "name": "Koftik", + "examine": "The cave guide." + }, + { + "id": "1210", + "name": "Kings messenger", + "examine": "One of King Lathas' messengers." + }, + { + "id": "1211", + "name": "Will o' the wisp", + "examine": "Mysterious swamp lights...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1212", + "name": "Will o' the wisp", + "examine": "Mysterious swamp lights..." + }, + { + "id": "1213", + "name": "Tegid", + "examine": "He's washing his clothes in the lake." + }, + { + "id": "1214", + "name": "Thistle", + "examine": "A plant." + }, + { + "id": "1215", + "name": "Parrots", + "examine": "What a colourful bunch of parrots!" + }, + { + "id": "1216", + "name": "Parroty Pete", + "examine": "He seems strangely familiar...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1217", + "name": "Gardener", + "examine": "An old gardener.", + "attack_level": "4", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "4", + "lifepoints": "5", + "magic_animation": "0", + "melee_animation": "433", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "4", + "weakness": "8" + }, + { + "id": "1218", + "name": "Ghoul", + "examine": "A scary, man eating ghoul.", + "aggressive": "true", + "attack_level": "30", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "442,444,443", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "30", + "lifepoints": "50", + "magic_animation": "422", + "magic_level": "1", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "50", + "strength_level": "40", + "weakness": "9" + }, + { + "id": "1219", + "name": "Leech", + "examine": "Yuck! It's all slimy!", + "aggressive": "true", + "attack_level": "42", + "death_animation": "1272", + "defence_animation": "0", + "defence_level": "42", + "lifepoints": "60", + "magic_animation": "0", + "melee_animation": "1273", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "42", + "weakness": "9" + }, + { + "id": "1220", + "name": "Vampire", + "examine": "It looks very hungry!", + "attack_level": "52", + "clue_level": "1", + "death_animation": "7185", + "defence_level": "52", + "lifepoints": "50", + "melee_animation": "1264", + "range_level": "1", + "safespot": null, + "slayer_exp": "50", + "strength_level": "1" + }, + { + "id": "1221", + "name": "Spider" + }, + { + "id": "1222", + "name": "Mist" + }, + { + "id": "1223", + "name": "Vampire", + "examine": "It looks very hungry!", + "attack_level": "1", + "clue_level": "1", + "defence_level": "1", + "lifepoints": "50", + "melee_animation": "1264", + "range_level": "1", + "safespot": null, + "slayer_exp": "40", + "strength_level": "1" + }, + { + "id": "1224", + "name": "Vampyric hound" + }, + { + "id": "1225", + "name": "Vampire", + "examine": "It looks very hungry!", + "attack_level": "1", + "clue_level": "1", + "defence_level": "1", + "lifepoints": "50", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1226", + "name": "Tree" + }, + { + "id": "1227", + "name": "Myre Blamish Snail", + "examine": "A marsh coloured blamish snail, these types are said to spit acid.", + "aggressive": "true", + "attack_level": "0", + "attack_speed": "4", + "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", + "combat_style": "1", + "death_animation": "8144", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "8", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "8143", + "range_animation": "0", + "range_level": "5", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "0", + "weakness": "9" + }, + { + "id": "1228", + "name": "Blood Blamish Snail", + "examine": "A blood coloured blamish snail, these types are said to spit acid.", + "aggressive": "true", + "attack_level": "0", + "attack_speed": "6", + "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", + "combat_style": "1", + "death_animation": "8144", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "13", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "8143", + "range_animation": "0", + "range_level": "12", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "0", + "weakness": "9" + }, + { + "id": "1229", + "name": "Ochre Blamish Snail", + "examine": "A muddy coloured blamish snail, these types are said to spit acid.", + "aggressive": "true", + "attack_level": "0", + "attack_speed": "6", + "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", + "combat_style": "1", + "death_animation": "8144", + "defence_animation": "0", + "defence_level": "18", + "lifepoints": "10", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "8143", + "range_animation": "0", + "range_level": "7", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "0", + "weakness": "9" + }, + { + "id": "1230", + "name": "Bruise Blamish Snail", + "examine": "A bruise blue coloured blamish snail, these types are said to spit acid.", + "aggressive": "true", + "attack_level": "0", + "attack_speed": "6", + "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", + "combat_style": "1", + "death_animation": "8144", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "12", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "8143", + "range_animation": "0", + "range_level": "15", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "0", + "weakness": "9" + }, + { + "id": "1231", + "name": "Bark Blamish Snail", + "examine": "A branch bark coloured blamish snail, these types are said to spit acid.", + "agg_radius": "", + "aggressive": "true", + "attack_level": "0", + "attack_speed": "6", + "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", + "combat_style": "1", + "death_animation": "8144", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "22", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "8143", + "range_animation": "0", + "range_level": "10", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "0", + "weakness": "9" + }, + { + "id": "1232", + "name": "Myre Blamish Snail", + "examine": "A marsh coloured blamish snail, these types are said to spit acid.", + "aggressive": "true", + "attack_level": "0", + "attack_speed": "4", + "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", + "combat_style": "1", + "death_animation": "8144", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "8", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "8143", + "range_animation": "0", + "range_level": "5", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "0", + "weakness": "9" + }, + { + "id": "1233", + "name": "Blood Blamish Snail", + "examine": "A blood coloured blamish snail, these types are said to spit acid.", + "aggressive": "true", + "attack_level": "0", + "attack_speed": "6", + "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", + "combat_style": "1", + "death_animation": "8144", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "13", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "8143", + "range_animation": "0", + "range_level": "12", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "0", + "weakness": "9" + }, + { + "id": "1234", + "name": "Ochre Blamish Snail", + "examine": "A muddy coloured blamish snail, these types are said to spit acid.", + "aggressive": "true", + "attack_level": "0", + "attack_speed": "6", + "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", + "combat_style": "1", + "death_animation": "8144", + "defence_animation": "0", + "defence_level": "18", + "lifepoints": "10", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "8143", + "range_animation": "0", + "range_level": "7", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "0", + "weakness": "9" + }, + { + "id": "1235", + "name": "Bruise Blamish Snail", + "examine": "A bruise blue coloured blamish snail, these types are said to spit acid.", + "aggressive": "true", + "attack_level": "0", + "attack_speed": "6", + "bonuses": "10,10,10,0,0,5,5,30,5,50,0,10,0,0,0", + "combat_style": "1", + "death_animation": "8144", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "12", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "8143", + "range_animation": "0", + "range_level": "15", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "0", + "weakness": "9" + }, + { + "id": "1236", + "name": "Fishing spot" + }, + { + "id": "1237", + "name": "Fishing spot" + }, + { + "id": "1238", + "name": "Fishing spot" + }, + { + "id": "1239", + "name": "Bedabin Nomad Fighter", + "examine": "A Bedabin nomad fighter - a sandy swordsman.", + "attack_level": "30", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "9" + }, + { + "id": "1240", + "name": "Loar Shadow", + "examine": "A shadowy sort of entity", + "aggressive": "true", + "attack_level": "45", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "26", + "lifepoints": "38", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "3" + }, + { + "id": "1241", + "name": "Loar Shade", + "examine": "The shadowy remains of a long departed soul.", + "aggressive": "true", + "attack_level": "45", + "death_animation": "1308", + "defence_animation": "1284", + "defence_level": "26", + "lifepoints": "38", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "1283", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "3" + }, + { + "id": "1242", + "name": "Shade Spirit" + }, + { + "id": "1243", + "name": "Phrin Shadow", + "examine": "A shadowy sort of entity", + "aggressive": "true", + "attack_level": "64", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "42", + "lifepoints": "56", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "47", + "weakness": "3" + }, + { + "id": "1244", + "name": "Phrin Shade", + "examine": "The shadowy remains of a long departed soul.", + "aggressive": "true", + "attack_level": "64", + "death_animation": "1287", + "defence_animation": "0", + "defence_level": "42", + "lifepoints": "56", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "1283", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "47", + "weakness": "3" + }, + { + "id": "1245", + "name": "Riyl Shadow", + "examine": "A shadowy sort of entity", + "aggressive": "true", + "attack_level": "88", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "76", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "55", + "weakness": "3" + }, + { + "id": "1246", + "name": "Riyl Shade", + "examine": "The shadowy remains of a long departed soul.", + "aggressive": "true", + "attack_level": "88", + "death_animation": "1287", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "76", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "1283", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "55", + "weakness": "3" + }, + { + "id": "1247", + "name": "Asyn Shadow", + "examine": "A shadowy sort of entity", + "aggressive": "true", + "attack_level": "102", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "90", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "84", + "weakness": "3" + }, + { + "id": "1248", + "name": "Asyn Shade", + "examine": "The shadowy remains of a long departed soul.", + "aggressive": "true", + "attack_level": "102", + "death_animation": "1287", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "90", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "1283", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "84", + "weakness": "3" + }, + { + "id": "1249", + "name": "Fiyr Shadow", + "examine": "A shadowy sort of entity", + "aggressive": "true", + "attack_level": "120", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "85", + "lifepoints": "110", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "100", + "weakness": "3" + }, + { + "id": "1250", + "name": "Fiyr Shade", + "examine": "The shadowy remains of a long departed soul.", + "aggressive": "true", + "attack_level": "120", + "death_animation": "1287", + "defence_animation": "0", + "defence_level": "85", + "lifepoints": "110", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "1283", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "100", + "weakness": "3" + }, + { + "id": "1251", + "name": "Afflicted(Ulsquire)" + }, + { + "id": "1252", + "name": "Ulsquire Shauncy" + }, + { + "id": "1253", + "name": "Afflicted(Razmire)" + }, + { + "id": "1254", + "name": "Razmire Keelgan" + }, + { + "id": "1255", + "name": "Mort'ton Local" + }, + { + "id": "1256", + "name": "Mort'ton Local" + }, + { + "id": "1257", + "name": "Afflicted", + "examine": "A local villager of Mort'ton.", + "attack_level": "43", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "43", + "weakness": "6" + }, + { + "id": "1258", + "name": "Afflicted", + "examine": "A local villager of Mort'ton.", + "attack_level": "44", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "44", + "lifepoints": "62", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "44", + "weakness": "6" + }, + { + "id": "1259", + "name": "Mort'ton local" + }, + { + "id": "1260", + "name": "Mort'ton local" + }, + { + "id": "1261", + "name": "Afflicted", + "examine": "A local villager of Mort'ton.", + "attack_level": "45", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "64", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "45", + "weakness": "6" + }, + { + "id": "1262", + "name": "Afflicted", + "examine": "A local villager of Mort'ton.", + "aggressive": "true", + "attack_level": "46", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "46", + "lifepoints": "65", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "46", + "weakness": "6" + }, + { + "id": "1263", + "name": "Wizard", + "examine": "Slightly more magical.", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1264", + "name": "Saradomin wizard", + "examine": "A follower of Saradomin.", + "aggressive": "true", + "attack_level": "90", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "120", + "magic_animation": "811", + "magic_level": "90", + "melee_animation": "376", + "poison_amount": "30", + "poisonous": "true", + "range_animation": "0", + "range_level": "70", + "respawn_delay": "60", + "safespot": null, + "spell_id": "41", + "strength_level": "90", + "weakness": "3" + }, + { + "id": "1265", + "name": "Rock Crab", + "examine": "No one likes crabs...", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "0", + "combat_audio": "717,723,722", + "death_animation": "1314", + "defence_animation": "1313", + "defence_level": "1", + "lifepoints": "50", + "magic_animation": "1312", + "magic_level": "1", + "melee_animation": "1312", + "range_animation": "1312", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "1", + "weakness": "7" + }, + { + "id": "1266", + "name": "Rocks", + "examine": "A rocky outcrop.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "1314", + "defence_animation": "1313", + "defence_level": "1", + "lifepoints": "50", + "magic_animation": "1312", + "melee_animation": "1312", + "range_animation": "1312", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "7" + }, + { + "id": "1267", + "name": "Rock Crab", + "examine": "No one likes crabs...", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "0", + "combat_audio": "717,723,722", + "death_animation": "1314", + "defence_animation": "1313", + "defence_level": "1", + "lifepoints": "50", + "magic_animation": "1312", + "melee_animation": "1312", + "range_animation": "1312", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1268", + "name": "Rocks", + "examine": "A rocky outcrop.", + "aggressive": "true", + "attack_level": "4", + "attack_speed": "5", + "death_animation": "1314", + "defence_animation": "1313", + "defence_level": "4", + "lifepoints": "50", + "magic_animation": "1312", + "melee_animation": "1312", + "range_animation": "1312", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1269", + "name": "Olaf the Bard", + "examine": "A Fremennik bard.", + "aggressive": "true", + "attack_level": "10", + "attack_speed": "5", + "death_animation": "1314", + "defence_animation": "1313", "defence_level": "8", + "lifepoints": "50", + "magic_animation": "1312", + "melee_animation": "1312", + "range_animation": "1312", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1270", + "name": "Lalli", + "examine": "Distinctly troll-shaped.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1271", + "name": "Golden sheep", + "examine": "Freshly shorn.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1272", + "name": "Golden sheep", + "examine": "Lovely thick wool.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1273", + "name": "Fossegrimen", + "examine": "A powerful spirit that lives in this lake.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1274", + "name": "Ospak", + "examine": "Looks like he's had a few drinks already.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1275", + "name": "Styrmir", + "examine": "Doesn't look like the musical type.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1276", + "name": "Torbrund", + "examine": "Waiting for the show.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1277", + "name": "Fridgeir", + "examine": "He sits impatiently with his friends.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1278", + "name": "Longhall Bouncer", + "examine": "He's fat, he's round, he bounces on the ground. That's how he got the job.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1279", + "name": "The Draugen", + "examine": "A fearful spirit of the drowned.", + "aggressive": "true", + "attack_level": "40", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "57", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "40", + "weakness": "9" + }, + { + "id": "1280", + "name": "Butterfly" + }, + { + "id": "1281", + "name": "Sigli the Huntsman", + "examine": "A Fremennik hunter.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1282", + "name": "Sigmund The Merchant", + "examine": "A Fremennik merchant.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1283", + "name": "Swensen the Navigator", + "examine": "A Fremennik navigator.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1284", + "name": "Bjorn" + }, + { + "id": "1285", + "name": "Eldgrim" + }, + { + "id": "1286", + "name": "Manni the Reveller", + "examine": "Every innkeeper's best friend!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1287", + "name": "Council workman", + "examine": "Supposedly fixes things around Gielinor.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1288", + "name": "Peer the Seer", + "examine": "A Fremennik riddler.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1289", + "name": "Thorvald the Warrior", + "examine": "A Fremennik hero.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1290", + "name": "Koschei the deathless", + "examine": "Your challenge awaits! ", + "attack_level": "13", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "14", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "13", + "weakness": "10" + }, + { + "id": "1291", + "name": "Koschei the deathless", + "examine": "He lives again!", + "attack_level": "13", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "14", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "13", + "weakness": "10" + }, + { + "id": "1292", + "name": "Koschei the deathless", + "examine": "He keeps on living!", + "attack_level": "13", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "14", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "13", + "weakness": "10" + }, + { + "id": "1293", + "name": "Koschei the deathless", + "examine": "He just keeps on going.", + "attack_level": "13", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "14", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "13", + "weakness": "10" + }, + { + "id": "1294", + "name": "Brundt the Chieftain", + "examine": "The Fremennik tribe's chieftain.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1295", + "name": "Askeladden" + }, + { + "id": "1296", + "name": "Guard", + "examine": "Stands around and looks at stuff all day.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1297", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1298", + "name": "Town Guard", + "examine": "What a rubbish job he has.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1299", + "name": "Town Guard" + }, + { + "id": "1300", + "name": "A bartender.", + "examine": "The Longhall barkeep", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1301", + "name": "Yrsa", + "examine": "Pretty shabbily dressed for a clothes shop owner.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1302", + "name": "Fisherman", + "examine": "There's something fishy about this guy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1303", + "name": "Skulgrimen", + "examine": "Sells and makes weapons and armour.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1304", + "name": "Sailor", + "examine": "He's strong to the finish", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1305", + "name": "Agnar", + "examine": "One of Rellekka's many citizens.", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "50", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1306", + "name": "Freidir", + "examine": "One of Rellekka's many citizens.", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "50", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1307", + "name": "Borrokar", + "examine": "One of Rellekka's many citizens.", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "50", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1308", + "name": "Lanzig", + "examine": "One of Rellekka's many citizens.", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "51", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1309", + "name": "Pontak", + "examine": "One of Rellekka's many citizens.", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "51", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1310", + "name": "Freygerd" + }, + { + "id": "1311", + "name": "Lensa" + }, + { + "id": "1312", + "name": "Jennella" + }, + { + "id": "1313", + "name": "Sassilik", + "examine": "One of Rellekka's many citizens.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1314", + "name": "Inga", + "examine": "One of Rellekka's many citizens.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1315", + "name": "Fish monger", + "examine": "Fish-tastic!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1316", + "name": "Fur trader", + "examine": "I wonder what he does with all that fur?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1317", + "name": "Market Guard", + "examine": "Keeps the stalls secure.", + "attack_level": "28", + "combat_audio": "", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "40", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "28", + "weakness": "9" + }, + { + "id": "1318", + "name": "Warrior", + "examine": "A hardened Fremennik warrior.", + "attack_level": "28", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "40", + "magic_animation": "0", + "melee_animation": "401", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "28", + "weakness": "9" + }, + { + "id": "1319", + "name": "Fox", + "examine": "A cunning animal.", + "attack_level": "32", + "death_animation": "6570", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "melee_animation": "6562", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "32", + "weakness": "7" + }, + { + "id": "1320", + "name": "Bunny", + "examine": "Hoppity", + "attack_level": "1", + "death_animation": "1246", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "1", + "magic_animation": "0", + "melee_animation": "1245", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1321", + "name": "Bunny", + "attack_level": "1", + "death_animation": "1246", + "defence_animation": "1244", + "defence_level": "1", + "lifepoints": "5", + "melee_animation": "1245", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1322", + "name": "Gull" + }, + { + "id": "1323", + "name": "Gull" + }, + { + "id": "1324", + "name": "Gull" + }, + { + "id": "1325", + "name": "Gull" + }, + { + "id": "1326", + "name": "Bear Cub", + "examine": "Cute. But deadly.", + "aggressive": "true", + "attack_level": "8", + "combat_audio": "498,500,499", + "defence_animation": "0", + "defence_level": "8", + "lifepoints": "11", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "8", + "weakness": "7" + }, + { + "id": "1327", + "name": "Bear Cub", + "examine": "Cute. But deadly.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "498,500,499", + "defence_level": "1", + "lifepoints": "20", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1328", + "name": "Unicorn Foal", + "examine": "Horned horsey.", + "attack_level": "10", + "attack_speed": "4", + "combat_audio": "369,371,370", + "death_animation": "6377", + "defence_animation": "6375", + "defence_level": "10", + "lifepoints": "15", + "magic_animation": "6376", + "magic_level": "1", + "melee_animation": "6376", + "range_animation": "6376", + "range_level": "1", + "respawn_delay": "90", + "safespot": null, + "strength_level": "6", + "weakness": "7" + }, + { + "id": "1329", + "name": "Black unicorn Foal", + "examine": "Cute but evil.", + "aggressive": "false", + "attack_level": "18", + "attack_speed": "4", + "combat_audio": "369,371,370", + "death_animation": "6377", + "defence_animation": "0", + "defence_level": "18", + "lifepoints": "25", + "magic_animation": "0", + "melee_animation": "6376", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "18", + "weakness": "7" + }, + { + "id": "1330", + "name": "Wolf", + "examine": "Fearsome predator found only in the Fremennik Province", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "481,491,490", + "death_animation": "6558", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "69", + "magic_animation": "0", + "melee_animation": "6559", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "69", + "strength_level": "35", + "weakness": "7" + }, + { + "id": "1331", + "name": "Fishing spot" + }, + { + "id": "1332", + "name": "Fishing spot" + }, + { + "id": "1333", + "name": "Fishing spot" + }, + { + "id": "1334", + "name": "Jossik" + }, + { + "id": "1335", + "name": "Jossik" + }, + { + "id": "1336", + "name": "Larrissa" + }, + { + "id": "1337", + "name": "Larrissa" + }, + { + "id": "1338", + "name": "Dagannoth", + "examine": "A horror from the ocean depths...", + "attack_level": "80", + "attack_speed": "5", + "clue_level": "1", + "combat_style": "1", + "death_animation": "1342", + "defence_animation": "1341", + "defence_level": "70", + "lifepoints": "70", + "magic_animation": "1340", + "melee_animation": "1340", + "projectile": "288", + "range_animation": "1340", + "range_level": "85", + "safespot": null, + "strength_level": "80" + }, + { + "id": "1339", + "name": "Dagannoth", + "examine": "A horror from the ocean depths...", + "aggressive": "true", + "attack_level": "1", + "clue_level": "1", + "combat_style": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "70", + "melee_animation": "1343", + "projectile": "288", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1340", + "name": "Dagannoth", + "examine": "A horror from the ocean depths...", + "aggressive": "true", + "attack_level": "1", + "clue_level": "1", + "combat_style": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "70", + "melee_animation": "1343", + "projectile": "288", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1341", + "name": "Dagannoth", + "examine": "A horror from the ocean depths...", + "aggressive": "true", + "attack_level": "1", + "clue_level": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "120", + "melee_animation": "1341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1342", + "name": "Dagannoth", + "examine": "A horror from the ocean depths...", + "aggressive": "true", + "attack_level": "1", + "clue_level": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "120", + "melee_animation": "1341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1343", + "name": "Dagannoth", + "examine": "A horror from the ocean depths...", + "aggressive": "true", + "attack_level": "1", + "clue_level": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "120", + "melee_animation": "1341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1344", + "name": "Dagannoth", + "examine": "A horror from the ocean depths...", + "attack_level": "1", + "clue_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1345", + "name": "Dagannoth", + "examine": "A horror from the ocean depths...", + "attack_level": "1", + "clue_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1346", + "name": "Dagannoth", + "examine": "A horror from the ocean depths...", + "attack_level": "1", + "clue_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1347", + "name": "Dagannoth", + "examine": "A horror from the ocean depths...", + "attack_level": "1", + "clue_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1348", + "name": "Dagannoth mother" + }, + { + "id": "1349", + "name": "Dagannoth mother" + }, + { + "id": "1350", + "name": "Dagannoth mother" + }, + { + "id": "1351", + "name": "Dagannoth mother", + "examine": "A horror from the ocean depths.", + "aggressive": "true", + "attack_level": "60", + "death_animation": "1342", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "128", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "1341", + "range_animation": "0", + "range_level": "60", + "respawn_delay": "60", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "1352", + "name": "Dagannoth mother", + "examine": "A horror from the ocean depths.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "100", + "melee_animation": "1341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1353", + "name": "Dagannoth mother", + "examine": "A horror from the ocean depths.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "100", + "melee_animation": "1341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1354", + "name": "Dagannoth mother", + "examine": "A horror from the ocean depths.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "100", + "melee_animation": "1341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1355", + "name": "Dagannoth mother", + "examine": "A horror from the ocean depths.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "100", + "melee_animation": "1341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1356", + "name": "Dagannoth mother", + "examine": "A horror from the ocean depths.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "100", + "melee_animation": "1341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1357", + "name": "Sam", + "examine": "Pretty barmaid." + }, + { + "id": "1358", + "name": "Rachael", + "examine": "Pretty barmaid." + }, + { + "id": "1359", + "name": "Queen Sigrid" + }, + { + "id": "1360", + "name": "Banker", + "examine": "He seems happy to see you.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1361", + "name": "Arnor" + }, + { + "id": "1362", + "name": "Haming" + }, + { + "id": "1363", + "name": "Moldof" + }, + { + "id": "1364", + "name": "Helga" + }, + { + "id": "1365", + "name": "Matilda" + }, + { + "id": "1366", + "name": "Ashild" + }, + { + "id": "1367", + "name": "Skraeling", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "1", + "melee_animation": "401", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1368", + "name": "Skraeling", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "1", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1369", + "name": "Fishmonger", + "examine": "Hmm", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1370", + "name": "Greengrocer", + "examine": "At least he eats his greens.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1371", + "name": "Prince Brand" + }, + { + "id": "1372", + "name": "Princess Astrid" + }, + { + "id": "1373", + "name": "King Vargas" + }, + { + "id": "1374", + "name": "Guard", + "examine": "He's guarding the throne room.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1375", + "name": "Advisor Ghrim" + }, + { + "id": "1376", + "name": "Derrik", + "examine": "Smithy for Sogthorpe." + }, + { + "id": "1377", + "name": "Farmer", + "examine": "He's cutting the wheat.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1378", + "name": "Flower Girl", + "examine": "No-one would mistake her for a duchess.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1379", + "name": "Ragnar", + "examine": "A subject of Miscellania." + }, + { + "id": "1380", + "name": "Einar", + "examine": "A subject of Miscellania." + }, + { + "id": "1381", + "name": "Alrik", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "1", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1382", + "name": "Thorhild", + "examine": "A subject of Miscellania." + }, + { + "id": "1383", + "name": "Halla" + }, + { + "id": "1384", + "name": "Yrsa" + }, + { + "id": "1385", + "name": "Sailor", + "examine": "He's strong to the finish, because he eats cabbage.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1386", + "name": "Rannveig", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "1", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1387", + "name": "Thora" + }, + { + "id": "1388", + "name": "Valgerd", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "1", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1389", + "name": "Skraeling", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "1", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1390", + "name": "Broddi", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "1", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1391", + "name": "Skraeling", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "1", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1392", + "name": "Ragnvald", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "1", + "melee_animation": "810", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1393", + "name": "Fishmonger", + "examine": "Hmm", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1394", + "name": "Greengrocer", + "examine": "At least he eats his greens.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1395", + "name": "Lumberjack Leif", + "examine": "He's a lumberjack", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1396", + "name": "Miner Magnus", + "examine": "He's just mining his own business.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1397", + "name": "Fisherman Frodi", + "examine": "There's something fishy about him.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1398", + "name": "Gardener Gunnhild", + "examine": "She's looking a bit weedy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1399", + "name": "Fishing spot" + }, + { + "id": "1400", + "name": "Gull" + }, + { + "id": "1401", + "name": "Chicken", + "examine": "Yep. Definitely a chicken.", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "355,357,356", + "death_animation": "5389", + "defence_animation": "5388", + "defence_level": "1", + "lifepoints": "3", + "magic_animation": "5387", + "melee_animation": "5387", + "range_animation": "5387", + "range_level": "1", + "respawn_delay": "18", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1402", + "name": "Chicken", + "examine": "Yep. Definitely a chicken.", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "355,357,356", + "death_animation": "5389", + "defence_animation": "5388", + "defence_level": "1", + "lifepoints": "3", + "magic_animation": "5387", + "melee_animation": "5387", + "range_animation": "5387", + "range_level": "1", + "respawn_delay": "18", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1403", + "name": "Rooster", + "attack_level": "1", + "death_animation": "5389", + "defence_animation": "5388", + "defence_level": "1", + "lifepoints": "5", + "melee_animation": "5387", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1404", + "name": "Rabbit", + "attack_level": "1", + "death_animation": "6092", + "defence_animation": "6091", + "defence_level": "1", + "lifepoints": "5", + "melee_animation": "6090", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1405", + "name": "Fishing spot" + }, + { + "id": "1406", + "name": "Fishing spot" + }, + { + "id": "1407", + "name": "Daero" + }, + { + "id": "1408", + "name": "Waydar" + }, + { + "id": "1409", + "name": "Waydar" + }, + { + "id": "1410", + "name": "Waydar" + }, + { + "id": "1411", + "name": "Garkor" + }, + { + "id": "1412", + "name": "Garkor" + }, + { + "id": "1413", + "name": "Lumo" + }, + { + "id": "1414", + "name": "Lumo" + }, + { + "id": "1415", + "name": "Bunkdo" + }, + { + "id": "1416", + "name": "Bunkdo" + }, + { + "id": "1417", + "name": "Carado" + }, + { + "id": "1418", + "name": "Carado" + }, + { + "id": "1419", + "name": "Lumdo", + "examine": "There to help me make my bids.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1420", + "name": "Karam" + }, + { + "id": "1421", + "name": "Karam" + }, + { + "id": "1422", + "name": "Karam" + }, + { + "id": "1423", + "name": "Bunkwicket" + }, + { + "id": "1424", + "name": "Waymottin" + }, + { + "id": "1425", + "name": "Zooknock" + }, + { + "id": "1426", + "name": "Zooknock" + }, + { + "id": "1427", + "name": "G.L.O. Caranock", + "examine": "An official looking Gnome with small beady eyes.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1428", + "name": "G.L.O. Caranock" + }, + { + "id": "1429", + "name": "Dugopul" + }, + { + "id": "1430", + "name": "Salenab" + }, + { + "id": "1431", + "name": "Trefaji" + }, + { + "id": "1432", + "name": "Aberab" + }, + { + "id": "1433", + "name": "Solihib", + "movement_radius": "1" + }, + { + "id": "1434", + "name": "Daga" + }, + { + "id": "1435", + "name": "Tutab" + }, + { + "id": "1436", + "name": "Ifaba" + }, + { + "id": "1437", + "name": "Hamab" + }, + { + "id": "1438", + "name": "Hafuba" + }, + { + "id": "1439", + "name": "Denadu" + }, + { + "id": "1440", + "name": "Lofu" + }, + { + "id": "1441", + "name": "Kruk" + }, + { + "id": "1442", + "name": "Duke", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1384", + "defence_animation": "1393", + "defence_level": "1", + "lifepoints": "130", + "melee_animation": "1383", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1443", + "name": "Oipuis", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1384", + "defence_animation": "1393", + "defence_level": "1", + "lifepoints": "130", + "melee_animation": "1383", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1444", + "name": "Uyoro", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1384", + "defence_animation": "1393", + "defence_level": "1", + "lifepoints": "130", + "melee_animation": "1383", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1445", + "name": "Ouhai", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1384", + "defence_animation": "1387", + "defence_level": "1", + "lifepoints": "130", + "melee_animation": "1383", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1446", + "name": "Uodai", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1384", + "defence_animation": "1393", + "defence_level": "1", + "lifepoints": "130", + "melee_animation": "1383", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1447", + "name": "Padulah", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1384", + "defence_animation": "1393", + "defence_level": "1", + "lifepoints": "133", + "melee_animation": "1383", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1448", + "name": "Awowogei" + }, + { + "id": "1449", + "name": "Uwogo" + }, + { + "id": "1450", + "name": "Muruwoi" + }, + { + "id": "1451", + "name": "Sleeping Monkey", + "examine": "A rather sleepy looking guard", + "attack_level": "1", + "combat_audio": "629,631,630", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1452", + "name": "Monkey Child", + "examine": "An adorable little monkey child.", + "attack_level": "1", + "combat_audio": "629,631,630", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1453", + "name": "The Monkey's Uncle", + "examine": "He looks like the Monkey's Uncle.", + "attack_level": "1", + "combat_audio": "629,631,630", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1454", + "name": "The Monkey's Aunt", + "examine": "She looks like the Monkey's Aunt.", + "attack_level": "1", + "combat_audio": "629,631,630", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1455", + "name": "Monkey Guard", + "examine": "A scimitar wielding ninja monkey.", + "attack_level": "66", + "combat_audio": "629,631,630", + "death_animation": "1384", + "defence_animation": "0", + "defence_level": "66", + "lifepoints": "94", + "magic_animation": "0", + "melee_animation": "1392", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "66", + "weakness": "8" + }, + { + "id": "1456", + "name": "Monkey Archer", + "examine": "A bow wielding ninja monkey.", + "aggressive": "true", + "attack_level": "43", + "combat_audio": "629,631,630", + "combat_style": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "58", + "lifepoints": "82", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "1394", + "range_level": "58", + "respawn_delay": "60", + "safespot": null, + "strength_level": "43", + "weakness": "1" + }, + { + "id": "1457", + "name": "Monkey Archer", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "629,631,630", + "combat_style": "1", + "death_animation": "1384", + "defence_animation": "1393", + "defence_level": "1", + "lifepoints": "50", + "melee_animation": "1394", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1458", + "name": "Monkey Archer", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "629,631,630", + "combat_style": "1", + "death_animation": "1384", + "defence_animation": "1393", + "defence_level": "1", + "lifepoints": "50", + "melee_animation": "1394", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1459", + "name": "Monkey Guard", + "examine": "A huge brutish gorilla armoured with dangerous looking vambraces.", + "attack_level": "100", + "attack_speed": "6", + "combat_audio": "629,631,630", + "death_animation": "1404", + "defence_animation": "1403", + "defence_level": "90", + "lifepoints": "130", + "magic_animation": "1402", + "melee_animation": "1402", + "range_animation": "1402", + "range_level": "1", + "safespot": null, + "strength_level": "130", + "weakness": "8" + }, + { + "id": "1460", + "name": "Monkey Guard", + "examine": "A huge brutish gorilla armoured with dangerous looking vambraces.", + "aggressive": "true", + "attack_level": "63", + "attack_speed": "5", + "combat_audio": "629,631,630", + "death_animation": "1404", + "defence_animation": "0", + "defence_level": "63", + "lifepoints": "90", + "magic_animation": "0", + "melee_animation": "1402", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "63", + "weakness": "8" + }, + { + "id": "1461", + "name": "Elder Guard", + "examine": "A huge brutish gorilla stands here", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1462", + "name": "Elder Guard" + }, + { + "id": "1463", + "name": "Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1464", + "name": "Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1465", + "name": "Monkey Zombie", + "examine": "A large and lumbering undead monkey.", + "aggressive": "true", + "attack_level": "150", + "attack_speed": "4", + "bonuses": "35,35,35,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "629,631,630", + "death_animation": "1384", + "defence_animation": "1393", + "defence_level": "60", + "lifepoints": "60", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "1383", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "60", + "weakness": "6" + }, + { + "id": "1466", + "name": "Monkey Zombie", + "examine": "A large and lumbering undead monkey stands here, blocking the way.", + "aggressive": "true", + "attack_level": "150", + "attack_speed": "4", + "bonuses": "35,35,35,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "629,631,630", + "death_animation": "1384", + "defence_animation": "1393", + "defence_level": "90", + "lifepoints": "90", + "magic_level": "90", + "melee_animation": "1392", + "range_level": "1", + "respawn_delay": "13", + "safespot": null, + "strength_level": "110" + }, + { + "id": "1467", + "name": "Monkey Zombie", + "examine": "A recently deceased monkey. Its flesh seems to be worse for the wear.", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "4", + "bonuses": "15,15,15,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "629,631,630", + "death_animation": "1384", + "defence_animation": "1393", + "defence_level": "60", + "lifepoints": "60", + "magic_level": "60", + "melee_animation": "1392", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "60" + }, + { + "id": "1468", + "name": "Bonzara" + }, + { + "id": "1469", + "name": "Monkey minder", + "examine": "He looks like the type of guy who would mind monkeys.", + "attack_level": "1", + "combat_audio": "629,631,630", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1470", + "name": "Foreman" + }, + { + "id": "1471", + "name": "Skeleton", + "examine": "It looks just a bit... underfed.", + "aggressive": "true", + "attack_level": "180", + "attack_speed": "4", + "bonuses": "50,50,50,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "774,775,777", + "death_animation": "5521", + "defence_animation": "5520", + "defence_level": "110", + "lifepoints": "77", + "magic_animation": "5519", + "magic_level": "110", + "melee_animation": "5519", + "range_animation": "5519", + "range_level": "1", + "respawn_delay": "100", + "safespot": null, + "slayer_exp": "110", + "strength_level": "90", + "weakness": "8" + }, + { + "id": "1472", + "name": "Jungle demon", + "examine": "A Greater Jungle demon. A magical aura emanates from its hide.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "2", + "combat_audio": "400,404,403", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "428", + "magic_animation": "0", + "magic_level": "50", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "60", + "safespot": null, + "strength_level": "50", + "weakness": "10" + }, + { + "id": "1473", + "name": "Spider", + "aggressive": "true", + "attack_level": "1", + "death_animation": "6251", + "defence_animation": "6250", + "defence_level": "1", + "lifepoints": "2", + "melee_animation": "6249", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1474", + "name": "Spider" + }, + { + "id": "1475", + "name": "Bird", + "examine": "It's a brightly coloured bird of the jungle.", + "attack_level": "5", + "death_animation": "6779", + "defence_animation": "0", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "6775", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "5", + "weakness": "8" + }, + { + "id": "1476", + "name": "Bird", + "examine": "It's a brightly coloured bird of the jungle. It flies very quickly.", + "attack_level": "5", + "death_animation": "6777", + "defence_animation": "0", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "6775", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "5", + "weakness": "8" + }, + { + "id": "1477", + "name": "Scorpion", + "attack_level": "1", + "combat_audio": "3611,3612,3610", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "slayer_exp": "17", + "strength_level": "1" + }, + { + "id": "1478", + "name": "Jungle spider", + "examine": "A very dangerous looking spider", + "aggressive": "true", + "attack_level": "47", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "0", + "defence_level": "63", + "lifepoints": "90", + "magic_animation": "0", + "melee_animation": "5327", + "range_animation": "0", + "range_level": "63", + "respawn_delay": "60", + "safespot": null, + "strength_level": "47", + "weakness": "2" + }, + { + "id": "1479", + "name": "Snake", + "attack_level": "1", + "combat_audio": "3609,3608,3610", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1480", + "name": "Small ninja monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1481", + "name": "Medium ninja monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1482", + "name": "Gorilla" + }, + { + "id": "1483", + "name": "Bearded gorilla", + "attack_level": "1", + "combat_audio": "498,500,499", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1484", + "name": "Ancient monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1485", + "name": "Small zombie monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1486", + "name": "Large zombie monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1487", + "name": "Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1488", + "name": "Dummy" + }, + { + "id": "1489", + "name": "Dummy" + }, + { + "id": "1490", + "name": "Dummy" + }, + { + "id": "1491", + "name": "Dummy" + }, + { + "id": "1492", + "name": "Dummy" + }, + { + "id": "1493", + "name": "Dummy" + }, + { + "id": "1494", + "name": "Dummy" + }, + { + "id": "1495", + "name": "Dummy" + }, + { + "id": "1496", + "name": "Dummy" + }, + { + "id": "1497", + "name": "Dummy" + }, + { + "id": "1498", + "name": "Dummy" + }, + { + "id": "1499", + "name": "Dummy" + }, + { + "id": "1500", + "name": "Dummy" + }, + { + "id": "1501", + "name": "Dummy" + }, + { + "id": "1502", + "name": "Dummy" + }, + { + "id": "1503", + "name": "Dummy" + }, + { + "id": "1504", + "name": "Dummy" + }, + { + "id": "1505", + "name": "Dummy" + }, + { + "id": "1506", + "name": "Dummy" + }, + { + "id": "1507", + "name": "Dummy" + }, + { + "id": "1508", + "name": "Forester" + }, + { + "id": "1509", + "name": "Woman-at-arms" + }, + { + "id": "1510", + "name": "Apprentice" + }, + { + "id": "1511", + "name": "Ranger" + }, + { + "id": "1512", + "name": "Adventurer" + }, + { + "id": "1513", + "name": "Mage" + }, + { + "id": "1514", + "name": "Hiylik Myna", + "examine": "A local holy man who supports the people trying to get though Mort Myre." + }, + { + "id": "1515", + "name": "Nail beast" + }, + { + "id": "1521", + "name": "Nail beast", + "examine": "A huge nail beast. Its nails appear very sharp.", + "attack_level": "150", + "death_animation": "5990", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "550", + "magic_animation": "0", + "melee_animation": "5989", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "150" + }, + { + "id": "1522", + "name": "Nail beast" + }, + { + "id": "1523", + "name": "Nail beast" + }, + { + "id": "1524", + "name": "Undead Lumberjack", + "examine": "He is one", + "attack_level": "73", + "death_animation": "5972", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "100", + "magic_animation": "0", + "melee_animation": "5970", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "73" + }, + { + "id": "1525", + "name": "Undead Lumberjack" + }, + { + "id": "1526", + "name": "Lanthus" + }, + { + "id": "1527", + "name": "Mine cart" + }, + { + "id": "1528", + "name": "Zealot", + "examine": "His robes prominently display the star of Saradomin.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1529", + "name": "Sheep" + }, + { + "id": "1530", + "name": "Rabbit" + }, + { + "id": "1531", + "name": "Imp", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "8", + "movement_radius": "25", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1532", + "name": "Barricade", + "examine": "Handy for hindering the enemy team's movement.", + "attack_level": "1", + "attack_speed": "5", + "combat_style": "1", + "death_animation": "9658", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "0", + "poison_immune": "true", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1533", + "name": "Barricade", + "examine": "Handy for hindering the enemy team's movement.", + "attack_level": "1", + "attack_speed": "5", + "combat_style": "1", + "death_animation": "9658", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "0", + "poison_immune": "true", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1534", + "name": "Barricade", + "examine": "Handy for hindering the enemy team's movement.", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "9658", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "0", + "poison_immune": "true", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1535", + "name": "Barricade", + "examine": "Handy for hindering the enemy team's movement.", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "9658", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "0", + "poison_immune": "true", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1536", + "name": "Possessed pickaxe", + "aggressive": "true", + "attack_level": "1", + "death_animation": "188", + "defence_animation": "186", + "defence_level": "1", + "lifepoints": "40", + "melee_animation": "185", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1537", + "name": "Haze", + "examine": "A strange disturbance in the air.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "7" + }, + { + "id": "1538", + "name": "Corpse", + "examine": "Well", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "1539", + "name": "Skeletal miner", + "examine": "I don't think the pickaxe is for hitting rocks.", + "aggressive": "true", + "attack_level": "35", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "0", + "strength_level": "35", + "weakness": "8" + }, + { + "id": "1540", + "name": "Treus Dayth", + "aggressive": "true", + "attack_level": "1", + "death_animation": "5542", + "defence_animation": "5541", + "defence_level": "1", + "lifepoints": "100", + "melee_animation": "5540", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1541", + "name": "Ghost", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "1542", + "name": "Loading crane" + }, + { + "id": "1543", + "name": "Innocent-looking key" + }, + { + "id": "1544", + "name": "Mine cart" + }, + { + "id": "1545", + "name": "Mine cart" + }, + { + "id": "1546", + "name": "Mine cart" + }, + { + "id": "1547", + "name": "Mine cart" + }, + { + "id": "1548", + "name": "Mine cart" + }, + { + "id": "1549", + "name": "Ghost", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5542", + "defence_animation": "5541", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5540", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "1550", + "name": "Chompy bird", + "examine": "A large boisterous bird, a delicacy for ogres.", + "aggressive": "false", + "attack_level": "5", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "1449,1451,1450", + "death_animation": "6762", + "defence_animation": "0", + "defence_level": "3", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "6761", + "poison_immune": "true", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "5", + "weakness": "3" + }, + { + "id": "1551", + "name": "Mischievous ghost", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1552", + "name": "Santa" + }, + { + "id": "1553", + "name": "Ug", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1554", + "name": "Aga" + }, + { + "id": "1555", + "name": "Arrg" + }, + { + "id": "1556", + "name": "Arrg", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "defence_level": "1", + "lifepoints": "150", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1557", + "name": "Ug", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1558", + "name": "Ice wolf", + "examine": "Not man's best friend.", + "aggressive": "true", + "attack_level": "51", + "death_animation": "6558", + "defence_animation": "0", + "defence_level": "51", + "lifepoints": "72", + "magic_animation": "0", + "melee_animation": "6559", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "51", + "weakness": "7" + }, + { + "id": "1559", + "name": "Ice wolf" + }, + { + "id": "1560", + "name": "Ice Troll", + "examine": "Brrrrr...he must be cold!", + "aggressive": "true", + "attack_level": "60", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "60", + "lifepoints": "85", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "60", + "weakness": "9" + }, + { + "id": "1561", + "name": "Ice Troll", + "examine": "Brrrrr...he must be cold!", + "attack_level": "60", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "60", + "lifepoints": "85", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "60", + "weakness": "9" + }, + { + "id": "1562", + "name": "Ice Troll", + "examine": "Brrrrr...he must be cold!", + "aggressive": "true", + "attack_level": "60", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "60", + "lifepoints": "85", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "60", + "weakness": "9" + }, + { + "id": "1563", + "name": "Ice Troll", + "examine": "Brrrrr...he must be cold!", + "attack_level": "60", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "60", + "lifepoints": "85", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "60", + "weakness": "9" + }, + { + "id": "1564", + "name": "Ice Troll", + "examine": "Brrrrr...he must be cold!", + "aggressive": "true", + "attack_level": "60", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "60", + "lifepoints": "85", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "60", + "weakness": "9" + }, + { + "id": "1565", + "name": "Ice Troll", + "examine": "Brrrrr...he must be cold!", + "aggressive": "true", + "attack_level": "60", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "60", + "lifepoints": "85", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "60", + "weakness": "9" + }, + { + "id": "1566", + "name": "Ice Troll", + "examine": "Brrrrr...he must be cold!", + "attack_level": "60", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "60", + "lifepoints": "85", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "60", + "weakness": "9" + }, + { + "id": "1567", + "name": "Cyreg Paddlehorn", + "examine": "A tall and imposing man who's more than familiar with boating.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1568", + "name": "Curpile Fyod" + }, + { + "id": "1569", + "name": "Veliaf Hurtz" + }, + { + "id": "1570", + "name": "Sani Piliu" + }, + { + "id": "1571", + "name": "Harold Evans" + }, + { + "id": "1572", + "name": "Radigad Ponfit" + }, + { + "id": "1573", + "name": "Polmafi Ferdygris" + }, + { + "id": "1574", + "name": "Ivan Strom" + }, + { + "id": "1575", + "name": "Skeleton Hellhound" + }, + { + "id": "1576", + "name": "Stranger" + }, + { + "id": "1577", + "name": "Vanstrom Klause" + }, + { + "id": "1578", + "name": "Mist" + }, + { + "id": "1579", + "name": "Vanstrom Klause" + }, + { + "id": "1580", + "name": "Vanstrom Klause" + }, + { + "id": "1581", + "name": "Vanstrom Klause" + }, + { + "id": "1582", + "name": "Fire giant", + "examine": "A very large elemental adversary.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "5", + "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", + "combat_audio": "447,451,450", + "death_animation": "4668", + "defence_animation": "4664", + "defence_level": "65", + "lifepoints": "111", + "magic_animation": "4666", + "magic_level": "1", + "melee_animation": "4666", + "range_animation": "4666", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "slayer_exp": "111", + "strength_level": "65", + "weakness": "1" + }, + { + "id": "1583", + "name": "Fire giant", + "examine": "A very large elemental adversary.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "5", + "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", + "combat_audio": "447,451,450", + "death_animation": "4668", + "defence_animation": "4664", + "defence_level": "65", + "lifepoints": "111", + "magic_animation": "4666", + "magic_level": "1", + "melee_animation": "4666", + "range_animation": "4666", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "slayer_exp": "111", + "strength_level": "65", + "weakness": "1" + }, + { + "id": "1584", + "name": "Fire giant", + "examine": "A very large elemental adversary.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "5", + "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", + "combat_audio": "447,451,450", + "death_animation": "4668", + "defence_animation": "4664", + "defence_level": "65", + "lifepoints": "111", + "magic_animation": "4666", + "magic_level": "1", + "melee_animation": "4666", + "range_animation": "4666", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "slayer_exp": "111", + "strength_level": "65", + "weakness": "1" + }, + { + "id": "1585", + "name": "Fire giant", + "examine": "A very large elemental adversary.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "5", + "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", + "combat_audio": "447,451,450", + "death_animation": "4668", + "defence_animation": "4664", + "defence_level": "65", + "lifepoints": "111", + "magic_animation": "4666", + "magic_level": "1", + "melee_animation": "4666", + "range_animation": "4666", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "slayer_exp": "111", + "strength_level": "65", + "weakness": "1" + }, + { + "id": "1586", + "name": "Fire giant", + "examine": "A very large elemental adversary.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "5", + "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", + "combat_audio": "447,451,450", + "death_animation": "4668", + "defence_animation": "4664", + "defence_level": "65", + "lifepoints": "111", + "magic_animation": "4666", + "magic_level": "1", + "melee_animation": "4666", + "range_animation": "4666", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "slayer_exp": "111", + "strength_level": "65", + "weakness": "1" + }, + { + "id": "1587", + "name": "Moss giant", + "examine": "His beard seems to have a life of its own.", + "aggressive": "true", + "attack_level": "30", + "attack_speed": "6", + "bonuses": "33,33,33,0,0,0,0,0,0,0,0,31,0,0,0", + "combat_audio": "449,451,450", + "death_animation": "4668", + "defence_animation": "4665", + "defence_level": "30", + "lifepoints": "60", + "magic_animation": "4666", + "magic_level": "1", + "melee_animation": "4666", + "range_animation": "4666", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "60", + "strength_level": "30", + "weakness": "1" + }, + { + "id": "1588", + "name": "Moss giant", + "examine": "His beard seems to have a life of its own.", + "aggressive": "true", + "attack_level": "30", + "attack_speed": "6", + "bonuses": "33,33,33,0,0,0,0,0,0,0,0,31,0,0,0", + "combat_audio": "449,451,450", + "death_animation": "4668", + "defence_animation": "4665", + "defence_level": "30", + "lifepoints": "60", + "magic_animation": "4666", + "magic_level": "1", + "melee_animation": "4666", + "range_animation": "4666", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "60", + "strength_level": "30", + "weakness": "1" + }, + { + "id": "1589", + "name": "Baby red dragon", + "examine": "Young but still dangerous.", + "aggressive": "true", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "50,40,64,60,30,45,40,40,20,40,40,20,0,0,0", + "combat_audio": "405,407,406", + "death_animation": "28", + "defence_animation": "26", + "defence_level": "42", + "lifepoints": "50", + "magic_animation": "25", + "magic_level": "40", + "melee_animation": "25", + "range_animation": "25", + "range_level": "1", + "respawn_delay": "32", + "safespot": null, + "strength_level": "40", + "weakness": "3" + }, + { + "id": "1590", + "name": "Bronze dragon", + "examine": "Its scales seem to be made of bronze.", + "aggressive": "true", + "attack_level": "112", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,30,90,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "112", + "lifepoints": "122", + "magic_animation": "80", + "magic_level": "100", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "40", + "safespot": null, + "slayer_exp": "125", + "strength_level": "112", + "weakness": "7" + }, + { + "id": "1591", + "name": "Iron dragon", + "examine": "Its scales seem to be made of iron.", + "aggressive": "true", + "attack_level": "165", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,30,90,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "165", + "lifepoints": "165", + "magic_animation": "80", + "magic_level": "100", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "45", + "safespot": null, + "slayer_exp": "173", + "strength_level": "165", + "weakness": "7" + }, + { + "id": "1592", + "name": "Steel dragon", + "examine": "Its scales seem to be made of steel.", + "aggressive": "true", + "attack_level": "215", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,30,90,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "215", + "lifepoints": "210", + "magic_animation": "80", + "magic_level": "100", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "45", + "safespot": null, + "slayer_exp": "221", + "strength_level": "215", + "weakness": "7" + }, + { + "id": "1593", + "name": "Wild dog", + "examine": "An unsuitable pet.", + "aggressive": "true", + "attack_level": "25", + "bonuses": "10,15,5,10,30,5,30,30,30,10,30,5,40,5,5", + "death_animation": "6564", + "defence_animation": "6563", + "defence_level": "25", + "lifepoints": "62", + "magic_animation": "6562", + "magic_level": "20", + "melee_animation": "6562", + "range_animation": "6562", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "25", + "weakness": "7" + }, + { + "id": "1594", + "name": "Wild dog", + "examine": "Looks like it's got Rabies!", + "aggressive": "true", + "attack_level": "25", + "bonuses": "10,15,5,10,30,5,30,30,30,10,30,5,40,5,5", + "death_animation": "6564", + "defence_animation": "6563", + "defence_level": "25", + "lifepoints": "62", + "magic_animation": "6562", + "magic_level": "20", + "melee_animation": "6562", + "range_animation": "6562", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "25" + }, + { + "id": "1595", + "name": "Saniboch", + "examine": "Looks like he wants money." + }, + { + "id": "1596", + "name": "Vannaka" + }, + { + "id": "1597", + "name": "Vannaka", + "examine": "He looks dangerous." + }, + { + "id": "1598", + "name": "Chaeldar", + "examine": "She looks dangerous!" + }, + { + "id": "1599", + "name": "Cave crawler" + }, + { + "id": "1600", + "name": "Cave crawler", + "examine": "A spiky crawling critter. ", + "attack_level": "28", + "attack_speed": "4", + "bonuses": "30,60,60,60,60,66,0,0,0,0,0,0,0,0,0", + "combat_audio": "341,343,342", + "death_animation": "265", + "defence_animation": "267", + "defence_level": "30", + "lifepoints": "23", + "magic_animation": "266", + "melee_animation": "266", + "poison_amount": "40", + "poisonous": "true", + "range_animation": "266", + "range_level": "38", + "respawn_delay": "25", + "safespot": null, + "slayer_exp": "22", + "strength_level": "30", + "weakness": "1" + }, + { + "id": "1601", + "name": "Cave crawler", + "examine": "A spiky crawling critter. ", + "attack_level": "28", + "attack_speed": "4", + "bonuses": "30,60,60,60,60,66,0,0,0,0,0,0,0,0,0", + "combat_audio": "341,343,342", + "death_animation": "265", + "defence_animation": "267", + "defence_level": "30", + "lifepoints": "23", + "magic_animation": "266", + "melee_animation": "266", + "poison_amount": "40", + "poisonous": "true", + "range_animation": "266", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "slayer_exp": "22", + "strength_level": "30" + }, + { + "id": "1602", + "name": "Cave crawler", + "examine": "A spiky crawling critter. ", + "attack_level": "28", + "attack_speed": "4", + "bonuses": "30,60,60,60,60,66,0,0,0,0,0,0,0,0,0", + "combat_audio": "341,343,342", + "death_animation": "265", + "defence_animation": "267", + "defence_level": "30", + "lifepoints": "23", + "magic_animation": "266", + "melee_animation": "266", + "poison_amount": "40", + "poisonous": "true", + "range_animation": "266", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "slayer_exp": "22", + "strength_level": "30" + }, + { + "id": "1603", + "name": "Cave crawler", + "examine": "A spiky crawling critter. ", + "attack_level": "28", + "attack_speed": "4", + "bonuses": "30,60,60,60,60,66,0,0,0,0,0,0,0,0,0", + "combat_audio": "341,343,342", + "death_animation": "265", + "defence_animation": "267", + "defence_level": "30", + "lifepoints": "23", + "magic_animation": "266", + "melee_animation": "266", + "poison_amount": "40", + "poisonous": "true", + "range_animation": "266", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "slayer_exp": "22", + "strength_level": "30" + }, + { + "id": "1604", + "name": "Aberrant spectre", + "examine": "A very smelly ghost.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,20,20,0,15,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "272,275,274", + "combat_style": "2", + "death_animation": "9467", + "defence_animation": "9468", + "defence_level": "90", + "end_gfx": "336", + "lifepoints": "90", + "magic_animation": "9466", + "magic_level": "105", + "melee_animation": "9466", + "projectile": "335", + "range_animation": "1507", + "range_level": "1", + "safespot": null, + "slayer_exp": "90", + "start_gfx": "334", + "strength_level": "1", + "weakness": "5" + }, + { + "id": "1605", + "name": "Aberrant spectre", + "examine": "A very smelly ghost.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,20,20,0,15,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "272,275,274", + "combat_style": "2", + "death_animation": "9467", + "defence_animation": "9468", + "defence_level": "90", + "end_gfx": "336", + "lifepoints": "90", + "magic_animation": "9466", + "magic_level": "105", + "melee_animation": "9466", + "projectile": "335", + "range_animation": "1507", + "range_level": "1", + "safespot": null, + "slayer_exp": "90", + "start_gfx": "334", + "strength_level": "1", + "weakness": "5" + }, + { + "id": "1606", + "name": "Aberrant spectre", + "examine": "A very smelly ghost.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,20,20,0,15,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "272,275,274", + "combat_style": "2", + "death_animation": "9467", + "defence_animation": "9468", + "defence_level": "90", + "end_gfx": "336", + "lifepoints": "90", + "magic_animation": "9466", + "magic_level": "105", + "melee_animation": "9466", + "projectile": "335", + "range_animation": "1507", + "range_level": "1", + "safespot": null, + "slayer_exp": "90", + "start_gfx": "334", + "strength_level": "1", + "weakness": "5" + }, + { + "id": "1607", + "name": "Aberrant spectre", + "examine": "A very smelly ghost.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,20,20,0,15,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "272,275,274", + "combat_style": "2", + "death_animation": "9467", + "defence_animation": "9468", + "defence_level": "90", + "end_gfx": "336", + "lifepoints": "90", + "magic_animation": "9466", + "magic_level": "105", + "melee_animation": "9466", + "projectile": "335", + "range_animation": "1507", + "range_level": "1", + "safespot": null, + "slayer_exp": "90", + "start_gfx": "334", + "strength_level": "1", + "weakness": "5" + }, + { + "id": "1608", + "name": "Kurask", + "examine": "Large, heavy, with sharp things attached to its head.", + "aggressive": "true", + "attack_level": "67", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", + "combat_audio": "588,590,589", + "death_animation": "9440", + "defence_animation": "9441", + "defence_level": "105", + "lifepoints": "97", + "magic_animation": "9439", + "magic_level": "1", + "melee_animation": "9439", + "range_animation": "9439", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "slayer_exp": "97", + "strength_level": "105" + }, + { + "id": "1609", + "name": "Kurask", + "examine": "Large, heavy, with sharp things attached to its head.", + "aggressive": "true", + "attack_level": "67", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", + "combat_audio": "588,590,589", + "death_animation": "9440", + "defence_animation": "9441", + "defence_level": "105", + "lifepoints": "97", + "magic_animation": "9439", + "magic_level": "1", + "melee_animation": "9439", + "range_animation": "9439", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "slayer_exp": "97", + "strength_level": "105" + }, + { + "id": "1610", + "name": "Gargoyle", + "examine": "Flies like a rock.", + "aggressive": "true", + "attack_level": "75", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,20,0,20,20,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "428,430,429", + "death_animation": "1518", + "defence_animation": "9455", + "defence_level": "107", + "lifepoints": "105", + "magic_animation": "1516", + "magic_level": "1", + "melee_animation": "9454", + "range_animation": "1516", + "range_level": "1", + "safespot": null, + "slayer_exp": "105", + "strength_level": "95" + }, + { + "id": "1611", + "name": "Swarming turoth", + "examine": "Flies like a rock.", + "attack_level": "45", + "attack_speed": "5", + "clue_level": "2", + "death_animation": "1518", + "defence_animation": "0", + "defence_level": "42", + "lifepoints": "105", + "magic_animation": "1516", + "melee_animation": "1516", + "range_animation": "1516", + "range_level": "49", + "safespot": null, + "slayer_exp": "105", + "strength_level": "104", + "weakness": "0" + }, + { + "id": "1612", + "name": "Banshee", + "examine": "A tortured screaming soul.", + "aggressive": "true", + "attack_level": "22", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,5,5,5,0,5,0,0,0,0,0", + "clue_level": "0", + "combat_audio": "284,286,285", + "death_animation": "9450", + "defence_animation": "9451", + "defence_level": "22", + "lifepoints": "22", + "magic_animation": "1523", + "magic_level": "1", + "melee_animation": "9449", + "range_animation": "1523", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "slayer_exp": "22", + "strength_level": "15" + }, + { + "id": "1613", + "name": "Nechryael", + "examine": "An evil death demon.", + "attack_level": "97", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,20,20,0,20,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "645,647,646", + "death_animation": "9488", + "defence_animation": "9489", + "defence_level": "105", + "lifepoints": "105", + "magic_animation": "1528", + "magic_level": "1", + "melee_animation": "9487", + "range_animation": "1528", + "range_level": "1", + "safespot": null, + "strength_level": "97" + }, + { + "id": "1614", + "name": "Death spawn", + "examine": "An evil death spawn.", + "aggressive": "true", + "attack_level": "67", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,20,20,0,20,0,0,0,0,0", + "death_animation": "9460", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "60", + "magic_animation": "1540", + "magic_level": "1", + "melee_animation": "1540", + "poison_immune": "true", + "range_animation": "1540", + "range_level": "1", + "safespot": null, + "strength_level": "7", + "weakness": "2" + }, + { + "id": "1615", + "name": "Abyssal demon", + "examine": "A denizen of the Abyss!", + "attack_level": "97", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,20,20,0,20,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "276,278,277", + "death_animation": "1538", + "defence_animation": "0", + "defence_level": "135", + "lifepoints": "150", + "magic_animation": "1537", + "magic_level": "1", + "melee_animation": "1537", + "range_animation": "1537", + "range_level": "1", + "safespot": null, + "slayer_exp": "150", + "strength_level": "67", + "weakness": "1" + }, + { + "id": "1616", + "name": "Basilisk", + "examine": "The eyes of evil.", + "aggressive": "false", + "attack_level": "30", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,20,0,20,0,0,0,0,0,0", + "combat_audio": "288,290,289", + "death_animation": "264", + "defence_animation": "261", + "defence_level": "75", + "lifepoints": "75", + "magic_animation": "260", + "magic_level": "1", + "melee_animation": "260", + "range_animation": "260", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "slayer_exp": "75", + "strength_level": "45" + }, + { + "id": "1617", + "name": "Basilisk", + "examine": "The eyes of evil.", + "aggressive": "false", + "attack_level": "30", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,20,0,20,0,0,0,0,0,0", + "combat_audio": "288,290,289", + "death_animation": "264", + "defence_animation": "261", + "defence_level": "75", + "lifepoints": "75", + "magic_animation": "260", + "magic_level": "1", + "melee_animation": "260", + "range_animation": "260", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "slayer_exp": "75", + "strength_level": "45" + }, + { + "id": "1618", + "name": "Bloodveld", + "examine": "The tongue of evil.", + "aggressive": "false", + "attack_level": "75", + "attack_speed": "4", + "clue_level": "2", + "combat_audio": "312,314,313", + "death_animation": "9131", + "defence_animation": "9132", + "defence_level": "30", + "lifepoints": "120", + "magic_animation": "1552", + "melee_animation": "9130", + "range_animation": "1552", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "120", + "strength_level": "45" + }, + { + "id": "1619", + "name": "Bloodveld", + "examine": "The tongue of evil.", + "aggressive": "true", + "attack_level": "75", + "attack_speed": "4", + "clue_level": "2", + "combat_audio": "312,314,313", + "death_animation": "9131", + "defence_animation": "9132", + "defence_level": "30", + "lifepoints": "120", + "magic_animation": "1552", + "melee_animation": "9130", + "range_animation": "1552", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "120", + "strength_level": "45" + }, + { + "id": "1620", + "name": "Cockatrice", + "examine": "The winged reptile.", + "attack_level": "32", + "attack_speed": "5", + "bonuses": "30,30,30,30,30,35,0,0,0,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "363,365,364", + "death_animation": "7763", + "defence_animation": "7761", + "defence_level": "35", + "lifepoints": "37", + "magic_animation": "7762", + "melee_animation": "7762", + "range_animation": "7762", + "range_level": "32", + "safespot": null, + "slayer_exp": "37", + "strength_level": "32", + "weakness": "2" + }, + { + "id": "1621", + "name": "Cockatrice", + "examine": "The winged reptile.", + "attack_level": "32", + "attack_speed": "5", + "bonuses": "30,30,30,30,30,35,0,0,0,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "363,365,364", + "death_animation": "7763", + "defence_animation": "7761", + "defence_level": "35", + "lifepoints": "37", + "magic_animation": "7762", + "melee_animation": "7762", + "range_animation": "7762", + "range_level": "1", + "safespot": null, + "slayer_exp": "37", + "strength_level": "32" + }, + { + "id": "1622", + "name": "Turoth", + "examine": "He's one big leg short!", + "attack_level": "55", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "873,875,874", + "death_animation": "9472", + "defence_animation": "9473", + "defence_level": "85", + "lifepoints": "78", + "magic_animation": "9471", + "magic_level": "1", + "melee_animation": "9471", + "range_animation": "9471", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "85" + }, + { + "id": "1623", + "name": "Turoth", + "examine": "He's one big leg short!", + "attack_level": "58", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "873,875,874", + "death_animation": "9472", + "defence_animation": "9473", + "defence_level": "88", + "lifepoints": "81", + "magic_animation": "9471", + "magic_level": "1", + "melee_animation": "9471", + "range_animation": "9471", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "88" + }, + { + "id": "1624", + "name": "Dust devil", + "examine": "The vacuumed face of evil.", + "attack_level": "105", + "attack_speed": "4", + "combat_audio": "414,416,415", + "death_animation": "1558", + "defence_animation": "1555", + "defence_level": "40", + "lifepoints": "105", + "magic_animation": "1557", + "melee_animation": "1557", + "range_animation": "1557", + "range_level": "1", + "safespot": null, + "slayer_exp": "105", + "strength_level": "70", + "weakness": "2" + }, + { + "id": "1625", + "name": "Smokedevil", + "examine": "The cave-dwelling cousin of the dust devils.", + "attack_level": "105", + "death_animation": "1558", + "defence_animation": "0", + "defence_level": "61", + "lifepoints": "87", + "magic_animation": "0", + "melee_animation": "1557", + "range_animation": "0", + "range_level": "61", + "safespot": null, + "strength_level": "105", + "weakness": "2" + }, + { + "id": "1626", + "name": "Turoth", + "examine": "She's one leg short!", + "attack_level": "56", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "873,875,874", + "death_animation": "9472", + "defence_animation": "9473", + "defence_level": "86", + "lifepoints": "79", + "magic_animation": "9471", + "magic_level": "1", + "melee_animation": "9471", + "range_animation": "9471", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "86" + }, + { + "id": "1627", + "name": "Turoth", + "examine": "It's one leg short!", + "attack_level": "54", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "873,875,874", + "death_animation": "9472", + "defence_animation": "9473", + "defence_level": "84", + "lifepoints": "77", + "magic_animation": "9471", + "magic_level": "1", + "melee_animation": "9471", + "range_animation": "9471", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "84" + }, + { + "id": "1628", + "name": "Turoth", + "examine": "It's one small leg short!", + "attack_level": "53", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "873,875,874", + "death_animation": "9472", + "defence_animation": "9473", + "defence_level": "83", + "lifepoints": "76", + "magic_animation": "9471", + "magic_level": "1", + "melee_animation": "9471", + "range_animation": "9471", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "83" + }, + { + "id": "1629", + "name": "Turoth", + "examine": "He's one big leg short!", + "attack_level": "57", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "873,875,874", + "death_animation": "9472", + "defence_animation": "9473", + "defence_level": "87", + "lifepoints": "80", + "magic_animation": "9471", + "magic_level": "1", + "melee_animation": "9471", + "range_animation": "9471", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "87" + }, + { + "id": "1630", + "name": "Turoth", + "examine": "He's one big leg short!", + "attack_level": "57", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "873,875,874", + "death_animation": "9472", + "defence_animation": "9473", + "defence_level": "87", + "lifepoints": "80", + "magic_animation": "9471", + "magic_level": "1", + "melee_animation": "9471", + "range_animation": "9471", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "87" + }, + { + "id": "1631", + "name": "Rockslug", + "examine": "A rocky slug.", + "attack_level": "24", + "attack_speed": "5", + "clue_level": "2", + "combat_audio": "729,731,730", + "death_animation": "1597", + "defence_animation": "1596", + "defence_level": "30", + "lifepoints": "30", + "magic_animation": "1595", + "magic_level": "1", + "melee_animation": "1595", + "range_animation": "1595", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "7" + }, + { + "id": "1632", + "name": "Rockslug", + "examine": "A rocky slug.", + "attack_level": "24", + "attack_speed": "5", + "clue_level": "2", + "combat_audio": "729,731,730", + "death_animation": "1597", + "defence_animation": "1596", + "defence_level": "30", + "lifepoints": "30", + "magic_animation": "1595", + "magic_level": "1", + "melee_animation": "1595", + "range_animation": "1595", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "7" + }, + { + "id": "1633", + "name": "Pyrefiend", + "examine": "A small fire demon.", + "attack_level": "22", + "attack_speed": "5", + "bonuses": "52,30,22,1,1,0,0,0,0,0,0,10,10,10,0", + "clue_level": "1", + "combat_audio": "696,698,697", + "death_animation": "8078", + "defence_animation": "8084", + "defence_level": "19", + "lifepoints": "45", + "magic_level": "10", + "melee_animation": "8080", + "range_level": "19", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "45", + "spawn_animation": "8081", + "strength_level": "29", + "weakness": "4" + }, + { + "id": "1634", + "name": "Pyrefiend", + "examine": "A small fire demon.", + "attack_level": "22", + "attack_speed": "5", + "bonuses": "52,30,22,1,1,0,0,0,0,0,0,10,10,10,0", + "clue_level": "1", + "combat_audio": "696,698,697", + "death_animation": "8078", + "defence_animation": "8084", + "defence_level": "19", + "lifepoints": "45", + "magic_level": "10", + "melee_animation": "8080", + "range_level": "19", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "45", + "spawn_animation": "8081", + "strength_level": "29", + "weakness": "4" + }, + { + "id": "1635", + "name": "Pyrefiend", + "examine": "A small fire demon.", + "attack_level": "22", + "attack_speed": "5", + "bonuses": "52,30,22,1,1,0,0,0,0,0,0,10,10,10,0", + "clue_level": "1", + "combat_audio": "696,698,697", + "death_animation": "8078", + "defence_animation": "8084", + "defence_level": "19", + "lifepoints": "45", + "magic_level": "10", + "melee_animation": "8080", + "range_level": "19", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "45", + "spawn_animation": "8081", + "strength_level": "29", + "weakness": "4" + }, + { + "id": "1636", + "name": "Pyrefiend", + "examine": "A small fire demon.", + "attack_level": "22", + "attack_speed": "5", + "bonuses": "52,30,22,1,1,0,0,0,0,0,0,10,10,10,0", + "clue_level": "1", + "combat_audio": "696,698,697", + "death_animation": "8078", + "defence_animation": "8084", + "defence_level": "19", + "lifepoints": "45", + "magic_level": "10", + "melee_animation": "8080", + "range_level": "19", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "45", + "spawn_animation": "8081", + "strength_level": "29", + "weakness": "4" + }, + { + "id": "1637", + "name": "Jelly", + "examine": "It's a Jelly.", + "attack_level": "40", + "attack_speed": "5", + "clue_level": "2", + "combat_audio": "547,550,549", + "death_animation": "8570", + "defence_animation": "8571", + "defence_level": "40", + "lifepoints": "75", + "magic_animation": "8569", + "magic_level": "40", + "melee_animation": "8569", + "range_animation": "8569", + "range_level": "40", + "safespot": null, + "slayer_exp": "75", + "strength_level": "45", + "weakness": "2" + }, + { + "id": "1638", + "name": "Jelly", + "examine": "Doesn't look so tough...", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "2", + "combat_audio": "547,550,549", + "death_animation": "8570", + "defence_animation": "0", + "defence_level": "49", + "lifepoints": "70", + "magic_animation": "0", + "melee_animation": "8569", + "range_animation": "0", + "range_level": "49", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "75", + "strength_level": "1", + "weakness": "2" + }, + { + "id": "1639", + "name": "Jelly", + "examine": "Wibbly.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "2", + "combat_audio": "547,550,549", + "death_animation": "8570", + "defence_animation": "0", + "defence_level": "49", + "lifepoints": "70", + "magic_animation": "0", + "melee_animation": "8569", + "range_animation": "0", + "range_level": "49", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "75", + "strength_level": "1", + "weakness": "2" + }, + { + "id": "1640", + "name": "Jelly", + "examine": "There's always room for jelly.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "2", + "combat_audio": "547,550,549", + "death_animation": "8570", + "defence_animation": "0", + "defence_level": "49", + "lifepoints": "140", + "magic_animation": "0", + "melee_animation": "8569", + "range_animation": "0", + "range_level": "49", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "75", + "strength_level": "1", + "weakness": "2" + }, + { + "id": "1641", + "name": "Jelly", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "2", + "combat_audio": "547,550,549", + "defence_animation": "8571", + "defence_level": "1", + "lifepoints": "75", + "melee_animation": "8569", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "75", + "strength_level": "1" + }, + { + "id": "1642", + "name": "Jelly", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "2", + "combat_audio": "547,550,549", + "defence_animation": "8571", + "defence_level": "1", + "lifepoints": "75", + "melee_animation": "8569", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "75", + "strength_level": "1" + }, + { + "id": "1643", + "name": "Infernal Mage", + "examine": "An evil magic user.", + "attack_level": "1", + "bonuses": "0,0,0,0,0,0,0,0,40,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "60", + "end_gfx": "101", + "lifepoints": "60", + "magic_animation": "811", + "magic_level": "75", + "melee_animation": "811", + "projectile": "100", + "range_animation": "811", + "range_level": "1", + "respawn_delay": "12", + "safespot": null, + "start_gfx": "99", + "strength_level": "1", + "weakness": "3" + }, + { + "id": "1644", + "name": "Infernal Mage", + "attack_level": "1", + "bonuses": "0,0,0,0,0,0,0,0,40,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "60", + "end_gfx": "101", + "lifepoints": "60", + "magic_animation": "811", + "magic_level": "75", + "melee_animation": "811", + "projectile": "100", + "range_animation": "811", + "range_level": "1", + "respawn_delay": "12", + "safespot": null, + "start_gfx": "99", + "strength_level": "1", + "weakness": "3" + }, + { + "id": "1645", + "name": "Infernal Mage", + "examine": "An evil magic user.", + "attack_level": "1", + "bonuses": "0,0,0,0,0,0,0,0,40,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "60", + "end_gfx": "101", + "lifepoints": "60", + "magic_animation": "811", + "magic_level": "75", + "melee_animation": "811", + "projectile": "100", + "range_animation": "811", + "range_level": "1", + "respawn_delay": "12", + "safespot": null, + "start_gfx": "99", + "strength_level": "1", + "weakness": "3" + }, + { + "id": "1646", + "name": "Infernal Mage", + "examine": "An evil magic user.", + "attack_level": "1", + "bonuses": "0,0,0,0,0,0,0,0,40,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "60", + "end_gfx": "101", + "lifepoints": "60", + "magic_animation": "811", + "magic_level": "75", + "melee_animation": "811", + "projectile": "100", + "range_animation": "811", + "range_level": "1", + "respawn_delay": "12", + "safespot": null, + "start_gfx": "99", + "strength_level": "1", + "weakness": "3" + }, + { + "id": "1647", + "name": "Infernal Mage", + "examine": "An evil magic user.", + "attack_level": "1", + "bonuses": "0,0,0,0,0,0,0,0,40,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "60", + "end_gfx": "101", + "lifepoints": "60", + "magic_animation": "811", + "magic_level": "75", + "melee_animation": "811", + "projectile": "100", + "range_animation": "811", + "range_level": "1", + "respawn_delay": "12", + "safespot": null, + "start_gfx": "99", + "strength_level": "1", + "weakness": "3" + }, + { + "id": "1648", + "name": "Crawling Hand", + "examine": "Now THAT'S handy.", + "attack_level": "5", + "attack_speed": "5", + "bonuses": "5,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "377,379,378", + "death_animation": "9126", + "defence_animation": "9127", + "defence_level": "5", + "lifepoints": "16", + "magic_animation": "9125", + "melee_animation": "9125", + "range_animation": "9125", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "slayer_exp": "19", + "strength_level": "5", + "weakness": "9" + }, + { + "id": "1649", + "name": "Crawling Hand", + "examine": "Gimmie five. Actually", + "attack_level": "8", + "attack_speed": "5", + "combat_audio": "377,379,378", + "death_animation": "9126", + "defence_animation": "0", + "defence_level": "8", + "lifepoints": "5", + "magic_animation": "0", + "melee_animation": "9125", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "19", + "strength_level": "8", + "weakness": "9" + }, + { + "id": "1650", + "name": "Crawling Hand", + "examine": "Gimmie five. Actually", + "attack_level": "8", + "attack_speed": "5", + "combat_audio": "377,379,378", + "death_animation": "9126", + "defence_animation": "0", + "defence_level": "8", + "lifepoints": "5", + "magic_animation": "0", + "melee_animation": "9125", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "8", + "weakness": "9" + }, + { + "id": "1651", + "name": "Crawling Hand", + "examine": "Gimmie five. Actually", + "attack_level": "8", + "attack_speed": "5", + "combat_audio": "377,379,378", + "death_animation": "9126", + "defence_animation": "0", + "defence_level": "8", + "lifepoints": "5", + "magic_animation": "0", + "melee_animation": "9125", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "19", + "strength_level": "8", + "weakness": "9" + }, + { + "id": "1652", + "name": "Crawling Hand", + "examine": "Gimmie five. Actually", + "attack_level": "8", + "attack_speed": "5", + "combat_audio": "377,379,378", + "death_animation": "9126", + "defence_animation": "0", + "defence_level": "8", + "lifepoints": "5", + "magic_animation": "0", + "melee_animation": "9125", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "19", + "strength_level": "8", + "weakness": "9" + }, + { + "id": "1653", + "name": "Crawling Hand", + "examine": "Now THAT's handy.", + "attack_level": "13", + "attack_speed": "5", + "combat_audio": "377,379,378", + "death_animation": "9445", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "9444", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "16", + "strength_level": "13", + "weakness": "9" + }, + { + "id": "1654", + "name": "Crawling Hand", + "examine": "I'm glad it's just the hand I can see...", + "attack_level": "13", + "attack_speed": "5", + "combat_audio": "377,379,378", + "death_animation": "9445", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "9444", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "16", + "strength_level": "13", + "weakness": "9" + }, + { + "id": "1655", + "name": "Crawling Hand", + "examine": "A big severed hand.", + "attack_level": "13", + "attack_speed": "5", + "combat_audio": "377,379,378", + "death_animation": "9445", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "9444", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "13", + "weakness": "9" + }, + { + "id": "1656", + "name": "Crawling Hand", + "examine": "Give the guy a big hand.....", + "attack_level": "13", + "attack_speed": "5", + "combat_audio": "377,379,378", + "death_animation": "9445", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "9444", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "16", + "strength_level": "13", + "weakness": "9" + }, + { + "id": "1657", + "name": "Crawling Hand", + "examine": "A big severed hand.", + "attack_level": "13", + "attack_speed": "5", + "combat_audio": "377,379,378", + "death_animation": "9445", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "9444", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "16", + "strength_level": "13", + "weakness": "9" + }, + { + "id": "1658", + "name": "Robe Store owner", + "examine": "A Supplier of Magical robes.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1659", + "name": "Skullball" + }, + { + "id": "1660", + "name": "Skullball Boss", + "examine": "He's in charge of the Skullball Course.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1661", + "name": "Agility Boss", + "examine": "He's in charge of the Agility Course.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1662", + "name": "Skullball Trainer", + "examine": "A skullball guide.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1663", + "name": "Agility Trainer", + "examine": "A werewolf agility trainer.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1664", + "name": "Agility Trainer" + }, + { + "id": "1665", + "name": "Werewolf", + "examine": "Looks like he's guarding a trapdoor...", + "attack_level": "1", + "clue_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "100", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1666", + "name": "Dr Fenkenstrain" + }, + { + "id": "1671", + "name": "Fenkenstrain's Monster" + }, + { + "id": "1674", + "name": "Lord Rologarth" + }, + { + "id": "1675", + "name": "Gardener Ghost", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1676", + "name": "Experiment", + "examine": "It has a key hanging from its collar.", + "attack_level": "40", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "1628", + "defence_animation": "1627", + "defence_level": "50", + "lifepoints": "40", + "magic_level": "1", + "melee_animation": "1626", + "range_level": "1", + "strength_level": "50" + }, + { + "id": "1677", + "name": "Experiment", + "examine": "One of Fenkenstrain's failed experiments.", + "aggressive": "", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_style": "", + "death_animation": "1618", + "defence_animation": "1617", + "defence_level": "30", + "lifepoints": "100", + "magic_level": "1", + "melee_animation": "1616", + "range_level": "1", + "strength_level": "1" + }, + { + "id": "1678", + "name": "Experiment", + "examine": "One of Fenkenstrain's failed experiments.", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "1611", + "defence_animation": "1613", + "defence_level": "30", + "lifepoints": "100", + "magic_level": "1", + "melee_animation": "1612", + "range_level": "1", + "strength_level": "1" + }, + { + "id": "1679", + "name": "Eluned" + }, + { + "id": "1680", + "name": "Islwyn" + }, + { + "id": "1681", + "name": "Moss giant", + "examine": "His beard seems to have a life of its own.", + "aggressive": "true", + "attack_level": "60", + "bonuses": "66,62,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "449,451,450", + "death_animation": "4668", + "defence_animation": "4665", + "defence_level": "60", + "lifepoints": "120", + "magic_animation": "4666", + "magic_level": "1", + "melee_animation": "4666", + "range_animation": "4666", + "range_level": "1", + "safespot": null, + "strength_level": "60", + "weakness": "3" + }, + { + "id": "1682", + "name": "Golrie" + }, + { + "id": "1683", + "name": "Velorina" + }, + { + "id": "1684", + "name": "Necrovarus", + "examine": "An evil priest." + }, + { + "id": "1685", + "name": "Gravingas" + }, + { + "id": "1686", + "name": "Ghost disciple", + "examine": "A ghost disciple.", + "attack_level": "1", + "combat_audio": "436,439,438", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1687", + "name": "Ak-Haranu" + }, + { + "id": "1688", + "name": "Ak-Haranu", + "examine": "A trader from across the eastern sea.", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "386", + "movement_radius": "2", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "0", + "start_height": "0", + "strength_level": "1" + }, + { + "id": "1689", + "name": "Undead cow" + }, + { + "id": "1691", + "name": "Undead cow", + "examine": "It's an undead cow.", + "aggressive": "false", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "-15,-15,-15,0,0,-21,-21,-21,-21,-21,0,-15,0,0,0", + "death_animation": "5851", + "defence_animation": "5850", + "defence_level": "1", + "lifepoints": "8", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "5849", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "5", + "safespot": null, + "strength_level": "3", + "weakness": "8" + }, + { + "id": "1692", + "name": "Undead chicken", + "examine": "Yup, definitely a chicken... an undead chicken.", + "aggressive": "false", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "-47,-47,-47,0,0,-42,-42,-42,-42,-42,0,-42,0,0,0", + "combat_audio": "355,357,356", + "death_animation": "5389", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "3", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "5387", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1", + "weakness": "7" + }, + { + "id": "1693", + "name": "Giant lobster", + "examine": "An extremely vicious lobster.", + "attack_level": "30", + "death_animation": "6267", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "128", + "magic_animation": "0", + "melee_animation": "6265", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "1694", + "name": "Robin" + }, + { + "id": "1695", + "name": "Old crone", + "examine": "An old", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1696", + "name": "Old man", + "examine": "A creaky old man.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1697", + "name": "Ghost villager", + "examine": "A spooky ghost villager.", + "attack_level": "1", + "combat_audio": "436,439,438", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1698", + "name": "Tortured soul", + "examine": "This poor soul cannot understand why it has not passed to the next world.", + "aggressive": "true", + "attack_level": "52", + "attack_speed": "5", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "38", + "lifepoints": "51", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "51", + "strength_level": "62", + "weakness": "3" + }, + { + "id": "1699", + "name": "Ghost shopkeeper", + "examine": "Beware the ghostly shopkeeper's wares!", + "attack_level": "1", + "combat_audio": "436,439,438", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1700", + "name": "Ghost innkeeper", + "examine": "Doesn't look like the bar's open anymore.", + "attack_level": "1", + "combat_audio": "436,439,438", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1701", + "name": "Ghost farmer", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1702", + "name": "Ghost banker", + "examine": "A ghost banker.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "436,439,438", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1703", + "name": "Ghost sailor", + "examine": "A ghost sailor.", + "attack_level": "1", + "combat_audio": "436,439,438", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1704", + "name": "Ghost captain", + "examine": "A ghostship captain.", + "attack_level": "1", + "combat_audio": "436,439,438", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1705", + "name": "Ghost captain", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1706", + "name": "Ghost guard", + "examine": "This ghost guards the gates of Port Phasmatys.", + "attack_level": "1", + "combat_audio": "436,439,438", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1707", + "name": "Ghost (?)", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1708", + "name": "Ghost (?)", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1709", + "name": "Johanhus Ulsbrecht" + }, + { + "id": "1710", + "name": "H.A.M. Guard", + "examine": "A guard for the humans against monster group.", + "attack_level": "22", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "22", + "weakness": "6" + }, + { + "id": "1711", + "name": "H.A.M. Guard", + "examine": "A guard for the humans against monster group.", + "attack_level": "22", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "22", + "weakness": "6" + }, + { + "id": "1712", + "name": "H.A.M. Guard", + "examine": "A guard for the humans against monster group.", + "attack_level": "22", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "22", + "weakness": "6" + }, + { + "id": "1713", + "name": "H.A.M. Deacon", + "examine": "A deacon in the Humans Against Monsters group. A rather enthusiastic chap.", + "attack_level": "1", + "clue_level": "0", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1714", + "name": "H.A.M. Member", + "examine": "A member of the 'Humans Against Monsters' group.", + "attack_level": "1", + "clue_level": "0", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1715", + "name": "H.A.M. Member", + "examine": "A member of the 'Humans Against Monsters' group.", + "attack_level": "1", + "clue_level": "0", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1716", + "name": "H.A.M. Member", + "examine": "A member of the 'Humans Against Monsters' group.", + "attack_level": "1", + "clue_level": "0", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1717", + "name": "H.A.M. Member", + "examine": "A member of the 'Humans Against Monsters' group.", + "attack_level": "1", + "clue_level": "0", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1718", + "name": "Jimmy the Chisel", + "examine": "A young man with a dark and mysterious past.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1719", + "name": "Tree" + }, + { + "id": "1720", + "name": "Tree" + }, + { + "id": "1721", + "name": "Tree" + }, + { + "id": "1722", + "name": "Dead tree" + }, + { + "id": "1723", + "name": "Dead tree" + }, + { + "id": "1724", + "name": "Dead tree" + }, + { + "id": "1725", + "name": "Dead tree" + }, + { + "id": "1726", + "name": "Dead tree" + }, + { + "id": "1727", + "name": "Dead tree" + }, + { + "id": "1728", + "name": "Dead tree" + }, + { + "id": "1729", + "name": "Dead tree" + }, + { + "id": "1730", + "name": "Dead tree" + }, + { + "id": "1731", + "name": "Dead tree" + }, + { + "id": "1732", + "name": "Dramen tree" + }, + { + "id": "1734", + "name": "Magic tree" + }, + { + "id": "1735", + "name": "Maple tree" + }, + { + "id": "1736", + "name": "Willow" + }, + { + "id": "1737", + "name": "Willow" + }, + { + "id": "1738", + "name": "Willow" + }, + { + "id": "1739", + "name": "Oak", + "examine": "Manages the mill.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1740", + "name": "Yew", + "examine": "One of Sigmund's elite guards.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1741", + "name": "Evergreen", + "examine": "One of Sigmund's elite guards.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1742", + "name": "Evergreen", + "examine": "A member of Sigmund's H.A.M. splinter group.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1743", + "name": "Evergreen", + "examine": "A member of Sigmund's H.A.M. splinter group.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1744", + "name": "Tree", + "examine": "A member of Sigmund's H.A.M. splinter group.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1745", + "name": "Dead tree", + "examine": "A member of Sigmund's H.A.M. splinter group.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1746", + "name": "Achey Tree", + "examine": "A member of Sigmund's H.A.M. splinter group.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1747", + "name": "Tree", + "examine": "A member of Sigmund's H.A.M. splinter group.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1748", + "name": "Tree", + "examine": "A member of Sigmund's H.A.M. splinter group.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1749", + "name": "Hollow tree" + }, + { + "id": "1750", + "name": "Hollow tree" + }, + { + "id": "1751", + "name": "Terrorbird", + "examine": "A giant raptor.", + "aggressive": "false", + "attack_level": "23", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "832,834,833", + "death_animation": "1013", + "defence_animation": "1012", + "defence_level": "19", + "lifepoints": "34", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "1010", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "strength_level": "23" + }, + { + "id": "1752", + "name": "Mounted terrorbird gnome", + "examine": "These gnomes know how to get around!", + "attack_level": "33", + "death_animation": "6791", + "defence_animation": "0", + "defence_level": "33", + "lifepoints": "37", + "magic_animation": "0", + "melee_animation": "6790", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "33", + "weakness": "6" + }, + { + "id": "1753", + "name": "Mounted terrorbird gnome" + }, + { + "id": "1754", + "name": "Crow", + "examine": "A farmer's enemy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1755", + "name": "Crow", + "examine": "A farmer's enemy." + }, + { + "id": "1756", + "name": "Crow" + }, + { + "id": "1757", + "name": "Farmer", + "examine": "He grows the crops in this area.", + "attack_level": "5", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "7181", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "5", + "weakness": "9" + }, + { + "id": "1758", + "name": "Farmer", + "examine": "He grows the crops in this area.", + "attack_level": "5", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "7181", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "5", + "weakness": "9" + }, + { + "id": "1759", + "name": "Farmer", + "examine": "Farming.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1760", + "name": "Farmer", + "examine": "He grows the crops in this area.", + "attack_level": "5", + "death_animation": "7185", + "defence_animation": "0", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "7181", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "5", + "weakness": "9" + }, + { + "id": "1761", + "name": "Farmer", + "examine": "Farming the wheat.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1762", + "name": "Sheep" + }, + { + "id": "1763", + "name": "Sheep", + "examine": "White and fluffy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1764", + "name": "Sheep" + }, + { + "id": "1765", + "name": "Sheep" + }, + { + "id": "1766", + "name": "Cow calf", + "examine": "Young, but still beefy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "366,368,367", + "death_animation": "5851", + "defence_animation": "5850", + "defence_level": "1", + "lifepoints": "6", + "magic_animation": "5849", + "melee_animation": "5849", + "range_animation": "5849", + "range_level": "1", + "safespot": null, + "slayer_exp": "8", + "strength_level": "1" + }, + { + "id": "1767", + "name": "Cow", + "examine": "Where beef comes from.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "369,371,370", + "death_animation": "5851", + "defence_animation": "5850", + "defence_level": "1", + "lifepoints": "8", + "magic_animation": "5849", + "melee_animation": "5849", + "range_animation": "5849", + "range_level": "1", + "safespot": null, + "slayer_exp": "8", + "strength_level": "1", + "weakness": "8" + }, + { + "id": "1768", + "name": "Cow calf", + "examine": "Young, but still beefy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "366,368,367", + "death_animation": "5851", + "defence_animation": "5850", + "defence_level": "1", + "lifepoints": "6", + "magic_animation": "5849", + "melee_animation": "5849", + "range_animation": "5849", + "range_level": "1", + "safespot": null, + "slayer_exp": "8", + "strength_level": "1" + }, + { + "id": "1769", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2", + "weakness": "7" + }, + { + "id": "1770", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2", + "weakness": "7" + }, + { + "id": "1771", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2", + "weakness": "7" + }, + { + "id": "1772", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2", + "weakness": "7" + }, + { + "id": "1773", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2", + "weakness": "7" + }, + { + "id": "1774", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2", + "weakness": "7" + }, + { + "id": "1775", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2", + "weakness": "7" + }, + { + "id": "1776", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2", + "weakness": "7" + }, + { + "id": "1777", + "name": "Ilfeen" + }, + { + "id": "1778", + "name": "William" + }, + { + "id": "1779", + "name": "Ian" + }, + { + "id": "1780", + "name": "Larry" + }, + { + "id": "1781", + "name": "Darren" + }, + { + "id": "1782", + "name": "Edward" + }, + { + "id": "1783", + "name": "Richard", + "examine": "A very brave merchant." + }, + { + "id": "1784", + "name": "Neil" + }, + { + "id": "1785", + "name": "Edmond", + "examine": "A very brave merchant." + }, + { + "id": "1786", + "name": "Simon" + }, + { + "id": "1787", + "name": "Sam" + }, + { + "id": "1788", + "name": "Lumdo" + }, + { + "id": "1789", + "name": "Bunkwicket" + }, + { + "id": "1790", + "name": "Waymottin" + }, + { + "id": "1791", + "name": "Jungle Tree" + }, + { + "id": "1792", + "name": "Jungle Tree" + }, + { + "id": "1793", + "name": "Tassie Slipcast" + }, + { + "id": "1794", + "name": "Hammerspike Stoutbeard", + "examine": "He looks quite independent in an aggressive and business like way.", + "attack_level": "1", + "combat_audio": "498,500,499", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1795", + "name": "Dwarf gang member", + "examine": "A short stout menacing fellow.", + "attack_level": "25", + "attack_speed": "6", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "1796", + "name": "Dwarf gang member", + "examine": "A short stout menacing fellow.", + "attack_level": "25", + "attack_speed": "6", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "1797", + "name": "Dwarf gang member", + "examine": "A short stout menacing fellow.", + "attack_level": "25", + "attack_speed": "6", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "1798", + "name": "Phantuwti Fanstuwi Farsight" + }, + { + "id": "1799", + "name": "Tindel Marchant" + }, + { + "id": "1800", + "name": "Gnormadium Avlafrim" + }, + { + "id": "1801", + "name": "Petra Fiyed" + }, + { + "id": "1802", + "name": "Slagilith", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1752", + "defence_animation": "1751", + "defence_level": "1", + "lifepoints": "60", + "melee_animation": "1750", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1803", + "name": "Rock pile", + "examine": "A pile of boulders.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1804", + "name": "Slagilith" + }, + { + "id": "1805", + "name": "Guard", + "examine": "He seems to be guarding a pile of rocks. Interesting job.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1806", + "name": "Guard", + "examine": "He seems to be guarding a single rock. Interesting job.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1807", + "name": "Hamal the Chieftain", + "examine": "The Chieftain of the mountain camp.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1808", + "name": "Ragnar" + }, + { + "id": "1809", + "name": "Svidi" + }, + { + "id": "1810", + "name": "Jokul" + }, + { + "id": "1811", + "name": "The Kendal" + }, + { + "id": "1812", + "name": "The Kendal", + "examine": "Is that a bear... or a man?", + "aggressive": "true", + "attack_level": "23", + "death_animation": "1759", + "defence_animation": "0", + "defence_level": "23", + "lifepoints": "85", + "magic_animation": "0", + "magic_level": "23", + "melee_animation": "1760", + "range_animation": "0", + "range_level": "23", + "respawn_delay": "60", + "safespot": null, + "strength_level": "23", + "weakness": "10" + }, + { + "id": "1813", + "name": "The Kendal", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1759", + "defence_animation": "1758", + "defence_level": "1", + "lifepoints": "50", + "melee_animation": "1760", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1814", + "name": "Camp dweller", + "examine": "One of the inhabitants of the camp.", + "attack_level": "11", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "11", + "lifepoints": "15", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "11", + "weakness": "9" + }, + { + "id": "1815", + "name": "Camp dweller", + "examine": "One of the inhabitants of the camp.", + "attack_level": "11", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "11", + "lifepoints": "15", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "11", + "weakness": "9" + }, + { + "id": "1816", + "name": "Camp dweller", + "examine": "One of the inhabitants of the camp.", + "attack_level": "11", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "11", + "lifepoints": "15", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "11", + "weakness": "9" + }, + { + "id": "1817", + "name": "Camp dweller", + "examine": "One of the inhabitants of the camp.", + "attack_level": "11", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "11", + "lifepoints": "15", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "11", + "weakness": "9" + }, + { + "id": "1818", + "name": "Camp dweller", + "examine": "One of the inhabitants of the camp.", + "attack_level": "11", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "11", + "lifepoints": "15", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "11", + "weakness": "9" + }, + { + "id": "1819", + "name": "Mountain Goat", + "examine": "Looks a little underfed.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1820", + "name": "Mountain Goat", + "examine": "This goat belongs to the mountain camp people.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1821", + "name": "Bald Headed Eagle" + }, + { + "id": "1822", + "name": "Cave goblin", + "examine": "A goblin with big bulging eyes.", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "6003", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "1", + "magic_animation": "0", + "melee_animation": "6001", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "7" + }, + { + "id": "1823", + "name": "Cave goblin", + "examine": "A goblin with big bulging eyes.", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "6003", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "1", + "magic_animation": "0", + "melee_animation": "6001", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "7" + }, + { + "id": "1824", + "name": "Cave goblin", + "examine": "A goblin with big bulging eyes.", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "6003", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "1", + "magic_animation": "0", + "melee_animation": "6001", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "7" + }, + { + "id": "1825", + "name": "Cave goblin", + "examine": "A goblin with big bulging eyes.", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "6003", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "1", + "magic_animation": "0", + "melee_animation": "6001", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "7" + }, + { + "id": "1826", + "name": "Zombie", + "examine": "A human zombie.", + "attack_level": "30", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "30", + "lifepoints": "50", + "melee_animation": "5568", + "range_level": "1", + "safespot": null, + "strength_level": "30" + }, + { + "id": "1827", + "name": "Gargoyle", + "examine": "Flies like a rock.", + "aggressive": "true", + "attack_level": "75", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,20,0,20,20,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "428,430,429", + "death_animation": "1518", + "defence_animation": "9455", + "defence_level": "107", + "lifepoints": "105", + "magic_animation": "1516", + "magic_level": "1", + "melee_animation": "9454", + "range_animation": "1516", + "range_level": "1", + "safespot": null, + "slayer_exp": "105", + "strength_level": "95" + }, + { + "id": "1828", + "name": "Giant frog", + "examine": "It didn't get that big eating flies!", + "attack_level": "45", + "attack_speed": "6", + "bonuses": "10,10,10,10,10,10,1,10,10,10,10,37,0,0,0", + "death_animation": "1795", + "defence_animation": "1794", + "defence_level": "60", + "lifepoints": "100", + "magic_animation": "1793", + "melee_animation": "1793", + "range_animation": "1793", + "range_level": "32", + "safespot": null, + "strength_level": "45", + "weakness": "1" + }, + { + "id": "1829", + "name": "Big frog", + "examine": "It didn't get that big eating flies.", + "attack_level": "1", + "death_animation": "1795", + "defence_animation": "0", + "defence_level": "26", + "lifepoints": "37", + "magic_animation": "0", + "melee_animation": "1793", + "range_animation": "0", + "range_level": "26", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "1" + }, + { + "id": "1830", + "name": "Frog" + }, + { + "id": "1831", + "name": "Cave slime", + "examine": "A foul-smelling blob of protoplasm.", + "aggressive": "false", + "attack_level": "13", + "attack_speed": "4", + "clue_level": "0", + "combat_audio": "784,786,785", + "death_animation": "1792", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "25", + "magic_animation": "0", + "magic_level": "13", + "melee_animation": "1789", + "poison_amount": "15", + "poisonous": "true", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "slayer_exp": "25", + "strength_level": "13", + "weakness": "1" + }, + { + "id": "1832", + "name": "Cave bug", + "examine": "A nasty crawling critter.", + "attack_level": "6", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,10,10,5,5,10,0,0,0,0,0", + "death_animation": "6082", + "defence_animation": "0", + "defence_level": "6", + "lifepoints": "5", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "6079", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "5", + "strength_level": "5", + "weakness": "2" + }, + { + "id": "1833", + "name": "Cave bug larva", + "examine": "A little", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1834", + "name": "Candle seller", + "examine": "Has an odd smell about him.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1835", + "name": "Easter Bunny" + }, + { + "id": "1836", + "name": "Dondakan the Dwarf" + }, + { + "id": "1838", + "name": "Dondakan the Dwarf" + }, + { + "id": "1839", + "name": "Dondakan the Dwarf" + }, + { + "id": "1840", + "name": "Dwarven Engineer", + "examine": "A short angry guy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1841", + "name": "Rolad" + }, + { + "id": "1842", + "name": "Khorvak, a dwarven engineer", + "examine": "The little guy is having trouble standing up right.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1843", + "name": "Dwarven Ferryman", + "examine": "It's probably you who will be paying the ferryman.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1844", + "name": "Dwarven Ferryman", + "examine": "It's probably you who will be paying the ferryman.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1845", + "name": "Dwarven Boatman" + }, + { + "id": "1846", + "name": "Dwarven Boatman", + "examine": "He seems to be in charge of the ship on the river.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1847", + "name": "Miodvetnir" + }, + { + "id": "1848", + "name": "Dernu" + }, + { + "id": "1849", + "name": "Derni" + }, + { + "id": "1850", + "name": "Arzinian Avatar of Strength", + "examine": "It is the avatar of the Arzinian Being of Bordanzan", + "attack_level": "40", + "death_animation": "1841", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "114", + "magic_animation": "0", + "melee_animation": "1840", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "40", + "weakness": "7" + }, + { + "id": "1851", + "name": "Arzinian Avatar of Strength", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1843", + "defence_animation": "1842", + "defence_level": "1", + "lifepoints": "110", + "melee_animation": "1840", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1852", + "name": "Arzinian Avatar of Strength", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1843", + "defence_animation": "1842", + "defence_level": "1", + "lifepoints": "70", + "melee_animation": "1840", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1853", + "name": "Arzinian Avatar of Ranging", + "examine": "It is the avatar of the Arzinian Being of Bordanzan", + "aggressive": "true", + "attack_level": "30", + "death_animation": "1841", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "114", + "magic_animation": "0", + "melee_animation": "1843", + "range_animation": "1843", + "range_level": "40", + "safespot": null, + "strength_level": "30", + "weakness": "0" + }, + { + "id": "1854", + "name": "Arzinian Avatar of Ranging", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1843", + "defence_animation": "1842", + "defence_level": "1", + "lifepoints": "110", + "melee_animation": "1840", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1855", + "name": "Arzinian Avatar of Ranging", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1843", + "defence_animation": "1842", + "defence_level": "1", + "lifepoints": "70", + "melee_animation": "1840", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1856", + "name": "Arzinian Avatar of Magic", + "examine": "It is the avatar of the Arzinian Being of Bordanzan", + "aggressive": "true", + "attack_level": "30", + "death_animation": "1841", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "114", + "magic_animation": "0", + "magic_level": "40", + "melee_animation": "1844", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "3" + }, + { + "id": "1857", + "name": "Arzinian Avatar of Magic", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1843", + "defence_animation": "1842", + "defence_level": "1", + "lifepoints": "110", + "melee_animation": "1840", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1858", + "name": "Arzinian Avatar of Magic", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1843", + "defence_animation": "1842", + "defence_level": "1", + "lifepoints": "70", + "melee_animation": "1840", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1859", + "name": "Arzinian Being of Bordanzan", + "examine": "It's the Arzinian Being", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1860", + "name": "Brian" + }, + { + "id": "1861", + "name": "Ranged Tutor", + "examine": "Nemarti looks ready to teach you about ranged combat.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1862", + "name": "Ali Morrisane" + }, + { + "id": "1863", + "name": "Drunken Ali", + "examine": "Drunk man.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1864", + "name": "Ali The barman", + "examine": "A hassled looking barman.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1865", + "name": "Ali the Kebab seller", + "examine": "A kebab seller.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1866", + "name": "Brian", + "examine": "He sells ranging equipment.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1867", + "name": "Ali the Camel Man", + "examine": "Ali the discount animal seller.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1868", + "name": "Street urchin", + "examine": "A mischievous looking child.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1869", + "name": "Ali the Mayor" + }, + { + "id": "1871", + "name": "Ali the Hag", + "examine": "An old Hag named Alice.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1872", + "name": "Ali the Snake Charmer", + "examine": "A snake charmer.", + "attack_level": "1", + "combat_audio": "3609,3608,3610", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1873", + "name": "Ali the Camel", + "examine": "A foul tempered ugly lumpy yellow horse prone to spitting.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1874", + "name": "Desert snake", + "examine": "A slithering serpent.", + "attack_level": "4", + "combat_audio": "3609,3608,3610", + "death_animation": "278", + "defence_animation": "0", + "defence_level": "6", + "lifepoints": "8", + "magic_animation": "0", + "melee_animation": "275", + "range_animation": "0", + "range_level": "6", + "respawn_delay": "60", + "safespot": null, + "strength_level": "4", + "weakness": "1" + }, + { + "id": "1875", + "name": "Snake", + "examine": "A toothless old Snake.", + "attack_level": "1", + "combat_audio": "3609,3608,3610", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1876", + "name": "Bandit Leader" + }, + { + "id": "1879", + "name": "Bandit" + }, + { + "id": "1881", + "name": "Bandit" + }, + { + "id": "1882", + "name": "Sir Palomedes" + }, + { + "id": "1883", + "name": "Sir Palomedes" + }, + { + "id": "1884", + "name": "Trobert", + "examine": "A well dressed thief." + }, + { + "id": "1885", + "name": "Bandit champion", + "examine": "A very tough-looking bandit.", + "aggressive": "true", + "attack_level": "39", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "39", + "lifepoints": "55", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "39", + "weakness": "9" + }, + { + "id": "1886", + "name": "Cowardly Bandit", + "examine": "Probably the weakest bandit in the world ....ever.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1887", + "name": "Villager" + }, + { + "id": "1889", + "name": "Villager" + }, + { + "id": "1890", + "name": "Villager" + }, + { + "id": "1891", + "name": "Villager" + }, + { + "id": "1893", + "name": "Villager" + }, + { + "id": "1894", + "name": "Villager" + }, + { + "id": "1895", + "name": "Villager" + }, + { + "id": "1897", + "name": "Villager" + }, + { + "id": "1898", + "name": "Villager" + }, + { + "id": "1899", + "name": "Menaphite Leader" + }, + { + "id": "1902", + "name": "Ali the Operator", + "examine": "Smooth operator.", + "attack_level": "6", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,10,10,5,5,10,0,0,0,0,0", + "combat_audio": "703,705,704", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1903", + "name": "Menaphite Thug" + }, + { + "id": "1904", + "name": "Menaphite Thug", + "examine": "Menaphite thug.", + "aggressive": "false", + "attack_level": "60", + "attack_speed": "4", + "bonuses": "4,4,4,0,0,9,8,10,0,0,0,9,0,0,0", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "60", + "magic_animation": "0", + "magic_level": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "0", + "respawn_delay": "5", + "safespot": null, + "strength_level": "50", + "weakness": "9" + }, + { + "id": "1905", + "name": "Menaphite Thug", + "examine": "Menaphite thug.", + "aggressive": "false", + "attack_level": "60", + "attack_speed": "4", + "bonuses": "4,4,4,0,0,9,8,10,0,0,0,9,0,0,0", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "20", + "lifepoints": "60", + "magic_animation": "0", + "magic_level": "0", + "melee_animation": "395", + "range_animation": "0", + "range_level": "0", + "respawn_delay": "5", + "safespot": null, + "strength_level": "50" + }, + { + "id": "1906", + "name": "Tough Guy", + "examine": "Tough looking Menaphite.", + "aggressive": "true", + "attack_level": "39", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "39", + "lifepoints": "114", + "magic_animation": "0", + "melee_animation": "395", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "39", + "weakness": "9" + }, + { + "id": "1907", + "name": "Broken clay golem" + }, + { + "id": "1909", + "name": "Damaged clay golem" + }, + { + "id": "1910", + "name": "Clay golem" + }, + { + "id": "1911", + "name": "Desert Phoenix", + "examine": "Definitely not a chicken.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1912", + "name": "Elissa" + }, + { + "id": "1913", + "name": "Kamil", + "examine": "Ice warrior.", + "attack_level": "190", + "attack_speed": "5", + "bonuses": "0,60,0,0,0,35,60,35,0,0,0,100,0,0,0", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "135", + "lifepoints": "130", + "magic_animation": "412", + "melee_animation": "440", + "range_animation": "440", + "range_level": "1", + "safespot": null, + "strength_level": "80" + }, + { + "id": "1914", + "name": "Dessous", + "examine": "A vampyre warrior of Zamorak.", + "aggressive": "true", + "attack_level": "99", + "bonuses": "0,0,50,0,0,10,150,150,0,0,0,50,0,0,0", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "99", + "lifepoints": "200", + "melee_animation": "1264", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "99" + }, + { + "id": "1915", + "name": "Dessous", + "examine": "A vampyre warrior of Zamorak.", + "aggressive": "true", + "attack_level": "99", + "bonuses": "0,0,50,0,0,10,150,150,0,0,0,50,0,0,0", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "99", + "lifepoints": "200", + "melee_animation": "1264", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "99" + }, + { + "id": "1916", + "name": "Ruantun", + "examine": "Luckily, I can't see much of his face.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1917", + "name": "Bandit shopkeeper", + "examine": "I guess he sells what he steals...?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1918", + "name": "Archaeologist", + "examine": "Hardened by the cutthroat world of archaeology.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1919", + "name": "Stranger", + "examine": "Very mysterious looking...", + "aggressive": "true", + "attack_level": "58", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "58", + "lifepoints": "82", + "magic_animation": "0", + "melee_animation": "377", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "58", + "weakness": "7" + }, + { + "id": "1920", + "name": "Malak", + "examine": "One of Morytania's vampyric nobility.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1921", + "name": "Bartender", + "examine": "Looks like a rough-and-ready type.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1922", + "name": "Eblis" + }, + { + "id": "1924", + "name": "Eblis" + }, + { + "id": "1926", + "name": "Bandit", + "examine": "A tough-looking criminal.", + "attack_level": "30", + "attack_speed": "5", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "30", + "lifepoints": "65", + "magic_animation": "412", + "melee_animation": "412", + "range_animation": "412", + "range_level": "1", + "safespot": null, + "strength_level": "70" + }, + { + "id": "1927", + "name": "Bandit" + }, + { + "id": "1928", + "name": "Bandit" + }, + { + "id": "1929", + "name": "Bandit" + }, + { + "id": "1930", + "name": "Bandit" + }, + { + "id": "1931", + "name": "Bandit", + "examine": "This is an NPC.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "65", + "magic_animation": "0", + "melee_animation": "412", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "100", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1932", + "name": "Troll child" + }, + { + "id": "1934", + "name": "Troll child" + }, + { + "id": "1935", + "name": "Ice troll", + "examine": "An ice troll.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1936", + "name": "Ice troll", + "examine": "Brrrrr...he must be cold!", + "aggressive": "true", + "attack_level": "64", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "64", + "lifepoints": "91", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "64", + "weakness": "9" + }, + { + "id": "1937", + "name": "Ice troll", + "examine": "Brrrrr...he must be cold!", + "attack_level": "64", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "64", + "lifepoints": "91", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "64", + "weakness": "9" + }, + { + "id": "1938", + "name": "Ice troll", + "examine": "Brrrrr...he must be cold!", + "aggressive": "true", + "attack_level": "64", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "64", + "lifepoints": "91", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "64", + "weakness": "9" + }, + { + "id": "1939", + "name": "Ice troll", + "examine": "Brrrrr...he must be cold!", + "attack_level": "64", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "64", + "lifepoints": "91", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "64", + "weakness": "9" + }, + { + "id": "1940", + "name": "Ice troll", + "examine": "Brrrrr...he must be cold!", + "aggressive": "true", + "attack_level": "64", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "64", + "lifepoints": "91", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "64", + "weakness": "9" + }, + { + "id": "1941", + "name": "Ice troll", + "examine": "Brrrrr...he must be cold!", + "aggressive": "true", + "attack_level": "64", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "64", + "lifepoints": "91", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "64", + "weakness": "9" + }, + { + "id": "1942", + "name": "Ice troll", + "examine": "Brrrrr...he must be cold!", + "attack_level": "64", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "64", + "lifepoints": "91", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "64", + "weakness": "9" + }, + { + "id": "1943", + "name": "Ice block", + "examine": "A troll frozen in a block of ice.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "1", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "1944", + "name": "Ice block", + "examine": "A troll frozen in a block of ice.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "1", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "1945", + "name": "Ice block", + "examine": "A troll frozen in a block of ice.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "1", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "1946", + "name": "Ice block", + "examine": "A troll frozen in a block of ice.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "1", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "1947", + "name": "Troll father", + "examine": "An ice troll." + }, + { + "id": "1948", + "name": "Troll father", + "examine": "An ice troll." + }, + { + "id": "1949", + "name": "Troll mother", + "examine": "An ice troll." + }, + { + "id": "1950", + "name": "Troll mother", + "examine": "An ice troll." + }, + { + "id": "1951", + "name": "Ice wolf", + "examine": "Not a man's best friend.", + "aggressive": "true", + "attack_level": "60", + "bonuses": "40,120,150,150,150,40,130,75,0,0,0,0,0,0,0", + "death_animation": "6576", + "defence_animation": "6578", + "defence_level": "60", + "lifepoints": "72", + "magic_animation": "6579", + "magic_level": "30", + "melee_animation": "6579", + "range_animation": "6579", + "range_level": "1", + "respawn_delay": "28", + "safespot": null, + "strength_level": "60" + }, + { + "id": "1952", + "name": "Ice wolf", + "examine": "Not a man's best friend.", + "aggressive": "true", + "attack_level": "60", + "bonuses": "40,120,150,150,150,40,130,75,0,0,0,0,0,0,0", + "death_animation": "6576", + "defence_animation": "6578", + "defence_level": "60", + "lifepoints": "72", + "magic_animation": "6579", + "magic_level": "30", + "melee_animation": "6579", + "range_animation": "6579", + "range_level": "1", + "respawn_delay": "28", + "safespot": null, + "strength_level": "60" + }, + { + "id": "1953", + "name": "Ice wolf", + "examine": "Not a man's best friend.", + "aggressive": "true", + "attack_level": "60", + "bonuses": "40,120,150,150,150,40,130,75,0,0,0,0,0,0,0", + "death_animation": "6576", + "defence_animation": "6578", + "defence_level": "60", + "lifepoints": "72", + "magic_animation": "6579", + "magic_level": "30", + "melee_animation": "6579", + "range_animation": "6579", + "range_level": "1", + "respawn_delay": "28", + "safespot": null, + "strength_level": "60" + }, + { + "id": "1954", + "name": "Ice wolf", + "examine": "Not a man's best friend.", + "aggressive": "true", + "attack_level": "60", + "bonuses": "40,120,150,150,150,40,130,75,0,0,0,0,0,0,0", + "death_animation": "6576", + "defence_animation": "6578", + "defence_level": "60", + "lifepoints": "72", + "magic_animation": "6579", + "magic_level": "30", + "melee_animation": "6579", + "range_animation": "6579", + "range_level": "1", + "respawn_delay": "28", + "safespot": null, + "strength_level": "60" + }, + { + "id": "1955", + "name": "Ice wolf", + "examine": "Not a man's best friend.", + "aggressive": "true", + "attack_level": "60", + "bonuses": "40,120,150,150,150,40,130,75,0,0,0,0,0,0,0", + "death_animation": "6576", + "defence_animation": "6578", + "defence_level": "60", + "lifepoints": "72", + "magic_animation": "6579", + "magic_level": "30", + "melee_animation": "6579", + "range_animation": "6579", + "range_level": "1", + "respawn_delay": "28", + "safespot": null, + "strength_level": "60" + }, + { + "id": "1956", + "name": "Ice wolf", + "examine": "Not a man's best friend.", + "aggressive": "true", + "attack_level": "60", + "bonuses": "40,120,150,150,150,40,130,75,0,0,0,0,0,0,0", + "death_animation": "6576", + "defence_animation": "6578", + "defence_level": "60", + "lifepoints": "72", + "magic_animation": "6579", + "magic_level": "30", + "melee_animation": "6579", + "range_animation": "6579", + "range_level": "1", + "respawn_delay": "28", + "safespot": null, + "strength_level": "60" + }, + { + "id": "1957", + "name": "Mummy" + }, + { + "id": "1958", + "name": "Mummy", + "examine": "Highly flammable!", + "attack_level": "55", + "death_animation": "5555", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "5549", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "55", + "weakness": "9" + }, + { + "id": "1959", + "name": "Mummy" + }, + { + "id": "1960", + "name": "Mummy ashes" + }, + { + "id": "1961", + "name": "Mummy", + "examine": "A tightly-wrapped monster.", + "aggressive": "true", + "attack_level": "90", + "death_animation": "5555", + "defence_animation": "0", + "defence_level": "90", + "lifepoints": "90", + "magic_animation": "0", + "melee_animation": "5549", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "90", + "weakness": "9" + }, + { + "id": "1962", + "name": "Mummy", + "examine": "Spooky, bandaged dead dude.", + "aggressive": "true", + "attack_level": "90", + "death_animation": "5555", + "defence_animation": "0", + "defence_level": "90", + "lifepoints": "90", + "magic_animation": "0", + "melee_animation": "5549", + "poison_immune": "true", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "90", + "weakness": "9" + }, + { + "id": "1963", + "name": "Mummy", + "examine": "A victim of poor first aid.", + "aggressive": "true", + "attack_level": "90", + "death_animation": "5555", + "defence_animation": "0", + "defence_level": "90", + "lifepoints": "90", + "magic_animation": "0", + "melee_animation": "5549", + "poison_immune": "true", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "90", + "weakness": "9" + }, + { + "id": "1964", + "name": "Mummy", + "examine": "But who's the daddy?", + "aggressive": "true", + "attack_level": "90", + "death_animation": "5555", + "defence_animation": "0", + "defence_level": "90", + "lifepoints": "90", + "magic_animation": "0", + "melee_animation": "5549", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "90", + "weakness": "9" + }, + { + "id": "1965", + "name": "Mummy", + "examine": "A tightly-wrapped monster.", + "attack_level": "55", + "death_animation": "5555", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "5549", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "55", + "weakness": "9" + }, + { + "id": "1966", + "name": "Mummy" + }, + { + "id": "1967", + "name": "Mummy", + "examine": "A victim of poor first aid.", + "attack_level": "55", + "death_animation": "5555", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "5549", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "55", + "weakness": "9" + }, + { + "id": "1968", + "name": "Mummy" + }, + { + "id": "1969", + "name": "Scarabs", + "examine": "I think they're some kind of beetle...", + "attack_level": "255", + "attack_speed": "3", + "death_animation": "5464", + "defence_animation": "1946", + "defence_level": "10", + "lifepoints": "25", + "magic_animation": "0", + "melee_animation": "1948", + "poison_amount": "15", + "poisonous": "true", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "2", + "weakness": "7" + }, + { + "id": "1970", + "name": "Azzanadra" + }, + { + "id": "1972", + "name": "Rasolo", + "examine": "A wandering merchant.", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1973", + "name": "Giant skeleton", + "examine": "A giant skeleton.", + "attack_level": "60", + "death_animation": "5503", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "85", + "magic_animation": "0", + "melee_animation": "5499", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "60", + "weakness": "8" + }, + { + "id": "1974", + "name": "Damis", + "examine": "The warrior of darkness.", + "attack_level": "90", + "bonuses": "0,0,0,0,0,60,60,60,60,60,0,80,0,0,0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "90", + "lifepoints": "90", + "magic_animation": "0", + "melee_animation": "440", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "90", + "weakness": "0" + }, + { + "id": "1975", + "name": "Damis", + "examine": "The warrior of darkness.", + "attack_level": "160", + "attack_speed": "3", + "bonuses": "0,0,0,0,0,100,100,100,80,120,0,100,0,0,0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "160", + "lifepoints": "200", + "magic_animation": "0", + "melee_animation": "440", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "100", + "weakness": "0" + }, + { + "id": "1976", + "name": "Shadow Hound", + "examine": "Looks hungry!", + "attack_level": "48", + "death_animation": "6564", + "defence_animation": "0", + "defence_level": "48", + "lifepoints": "68", + "magic_animation": "0", + "melee_animation": "6565", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "48", + "weakness": "7" + }, + { + "id": "1977", + "name": "Fareed", + "examine": "Zamorak's warrior of fire.", + "aggressive": "true", + "attack_level": "190", + "bonuses": "0,0,0,0,0,100,100,100,0,0,0,120,0,0,0", + "death_animation": "836", + "defence_animation": "434", + "defence_level": "135", + "lifepoints": "130", + "magic_level": "100", + "melee_animation": "799", + "range_level": "100", + "respawn_delay": "60", + "safespot": null, + "strength_level": "120" + }, + { + "id": "1978", + "name": "Slave", + "examine": "A malnourished worker.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1979", + "name": "Slave", + "examine": "A malnourished worker.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1980", + "name": "Embalmer", + "examine": "A strange-smelling merchant.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1981", + "name": "Carpenter", + "examine": "A block of a man.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1982", + "name": "Raetul" + }, + { + "id": "1983", + "name": "Siamun" + }, + { + "id": "1984", + "name": "High Priest" + }, + { + "id": "1987", + "name": "Priest" + }, + { + "id": "1988", + "name": "Priest", + "examine": "Preach my brother!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "1989", + "name": "Priest" + }, + { + "id": "1990", + "name": "Sphinx" + }, + { + "id": "1991", + "name": "Possessed Priest", + "examine": "He has a dangerous glint in his eye.", + "aggressive": "true", + "attack_level": "30", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "57", + "magic_animation": "0", + "melee_animation": "429", + "range_animation": "0", + "range_level": "40", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "1" + }, + { + "id": "1992", + "name": "Neite" + }, + { + "id": "1993", + "name": "Crocodile", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "386,388,387", + "death_animation": "7591", + "defence_animation": "7590", + "defence_level": "1", + "lifepoints": "63", + "melee_animation": "7588", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "62", + "strength_level": "1" + }, + { + "id": "1994", + "name": "Jackal", + "examine": "He has had his day.", + "aggressive": "true", + "attack_level": "17", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "544,546,545", + "death_animation": "6567", + "defence_animation": "0", + "defence_level": "15", + "lifepoints": "27", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "6568", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "18", + "weakness": "6" + }, + { + "id": "1995", + "name": "Locust", + "examine": "Obnoxious", + "aggressive": "true", + "attack_level": "12", + "attack_speed": "5", + "death_animation": "2013", + "defence_animation": "0", + "defence_level": "12", + "lifepoints": "34", + "magic_animation": "0", + "melee_animation": "2015", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "12", + "weakness": "6" + }, + { + "id": "1996", + "name": "Vulture" + }, + { + "id": "1997", + "name": "Plague frog", + "examine": "A very smelly frog.", + "aggressive": "true", + "attack_level": "15", + "death_animation": "1022", + "defence_animation": "0", + "defence_level": "15", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "1021", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "15", + "weakness": "6" + }, + { + "id": "1998", + "name": "Plague cow", + "examine": "I might give the burgers a miss in this town.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "6" + }, + { + "id": "1999", + "name": "Plague cow", + "examine": "I don't fancy eating any part of this.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "6" + }, + { + "id": "2000", + "name": "Plague cow" + }, + { + "id": "2001", + "name": "Scarab swarm", + "examine": "I think they're some kind of beetle.", + "aggressive": "true", + "attack_level": "9", + "attack_speed": "2", + "death_animation": "1946", + "defence_animation": "0", + "defence_level": "9", + "lifepoints": "900", + "magic_animation": "0", + "melee_animation": "1948", + "poison_amount": "15", + "poisonous": "true", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "9", + "weakness": "6" + }, + { + "id": "2002", + "name": "Wanderer" + }, + { + "id": "2006", + "name": "Wanderer" + }, + { + "id": "2007", + "name": "Het" + }, + { + "id": "2008", + "name": "Apmeken" + }, + { + "id": "2009", + "name": "Scabaras" + }, + { + "id": "2010", + "name": "Crondis" + }, + { + "id": "2011", + "name": "Icthlarin" + }, + { + "id": "2013", + "name": "Klenter" + }, + { + "id": "2015", + "name": "Mummy", + "examine": "This mummy looks like it means business!", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "5", + "death_animation": "5555", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "71", + "magic_animation": "0", + "melee_animation": "5554", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "50", + "weakness": "9" + }, + { + "id": "2016", + "name": "Mummy", + "examine": "An irate warrior-mummy.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "5", + "death_animation": "5555", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "71", + "magic_animation": "0", + "melee_animation": "5554", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "50", + "weakness": "9" + }, + { + "id": "2017", + "name": "Mummy", + "examine": "This mummy looks like it means business!", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "5", + "death_animation": "5555", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "71", + "magic_animation": "0", + "melee_animation": "5554", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "50", + "weakness": "9" + }, + { + "id": "2018", + "name": "Mummy", + "examine": "An irate mummy.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "5", + "death_animation": "5555", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "71", + "magic_animation": "0", + "melee_animation": "5554", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "50", + "weakness": "9" + }, + { + "id": "2019", + "name": "Mummy", + "examine": "A wizened old warrior.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "5", + "death_animation": "5555", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "71", + "magic_animation": "0", + "melee_animation": "5554", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "50", + "weakness": "9" + }, + { + "id": "2020", + "name": "Light creature" + }, + { + "id": "2021", + "name": "Light creature", + "examine": "A shimmering creature of blue light.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2022", + "name": "Light creature" + }, + { + "id": "2023", + "name": "Juna" + }, + { + "id": "2024", + "name": "Strange Old Man", + "examine": "Wonder how long he's been here...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2025", + "name": "Ahrim the Blighted", + "examine": "A vengeful spirit corrupted by dark magic.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "68,68,68,73,-19,103,85,117,73,0,0,68,0,49,0", + "combat_style": "2", + "death_animation": "7197", + "defence_animation": "420", + "defence_level": "100", + "end_gfx": "157", + "lifepoints": "100", + "magic_animation": "1162", + "magic_level": "100", + "melee_animation": "1162", + "projectile": "156", + "range_animation": "1162", + "range_level": "1", + "safespot": null, + "start_gfx": "155", + "start_height": "96", + "strength_level": "1", + "weakness": "3" + }, + { + "id": "2026", + "name": "Dharok the Wretched", + "examine": "A vengeful spirit corrupted by dark magic.", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "7", + "bonuses": "105,105,105,-58,-18,252,250,244,-11,249,0,105,0,0,0", + "death_animation": "7197", + "defence_animation": "2063", + "defence_level": "100", + "lifepoints": "100", + "magic_animation": "2066", + "magic_level": "1", + "melee_animation": "2066", + "range_animation": "2066", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "100", + "weakness": "9" + }, + { + "id": "2027", + "name": "Guthan the Infested", + "examine": "A vengeful spirit corrupted by dark magic.", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "5", + "bonuses": "75,75,75,-50,-19,259,247,241,-11,-250,0,75,0,0,0", + "death_animation": "7197", + "defence_animation": "2079", + "defence_level": "100", + "lifepoints": "100", + "magic_animation": "2080", + "magic_level": "1", + "melee_animation": "2080", + "range_animation": "2080", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "100", + "weakness": "6" + }, + { + "id": "2028", + "name": "Karil the Tainted", + "examine": "A vengeful spirit corrupted by dark magic.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "0,0,0,-26,134,79,71,90,106,100,0,0,0,0,61", + "combat_style": "1", + "death_animation": "7197", + "defence_animation": "424", + "defence_level": "100", + "lifepoints": "100", + "magic_animation": "2075", + "magic_level": "1", + "melee_animation": "2075", + "projectile": "27", + "range_animation": "2075", + "range_level": "100", + "respawn_delay": "16", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "2029", + "name": "Torag the Corrupted", + "examine": "A vengeful spirit corrupted by dark magic.", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "5", + "bonuses": "72,72,72,-33,-11,221,235,222,0,221,0,72,0,0,0", + "death_animation": "7197", + "defence_animation": "404", + "defence_level": "100", + "lifepoints": "100", + "magic_animation": "2068", + "magic_level": "1", + "melee_animation": "2068", + "range_animation": "2068", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "100", + "weakness": "7" + }, + { + "id": "2030", + "name": "Verac the Defiled", + "examine": "A vengeful spirit corrupted by dark magic.", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "5", + "bonuses": "72,72,72,-42,-14,227,230,221,0,225,72,78,0,0,0", + "combat_audio": "", + "death_animation": "7197", + "defence_animation": "2063", + "defence_level": "100", + "lifepoints": "100", + "magic_animation": "2062", + "magic_level": "1", + "melee_animation": "2062", + "range_animation": "2062", + "range_level": "1", + "safespot": null, + "strength_level": "100", + "weakness": "8" + }, + { + "id": "2031", + "name": "Bloodworm", + "examine": "I think I should keep my distance...", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "2073", + "defence_animation": "2072", + "defence_level": "35", + "lifepoints": "45", + "magic_animation": "2070", + "magic_level": "1", + "melee_animation": "2070", + "range_animation": "2070", + "range_level": "1", + "respawn_delay": "26", + "safespot": null, + "strength_level": "20", + "weakness": "6" + }, + { + "id": "2032", + "name": "Crypt rat", + "examine": "A nasty little rodent.", + "aggressive": "true", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "703,705,704", + "death_animation": "243", + "defence_animation": "241", + "defence_level": "20", + "lifepoints": "35", + "magic_animation": "240", + "magic_level": "1", + "melee_animation": "240", + "range_animation": "240", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "20", + "weakness": "9" + }, + { + "id": "2033", + "name": "Giant crypt rat", + "examine": "A nasty overgrown rodent.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "65", + "lifepoints": "70", + "magic_animation": "4933", + "magic_level": "1", + "melee_animation": "4933", + "range_animation": "4933", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "strength_level": "50", + "weakness": "9" + }, + { + "id": "2034", + "name": "Crypt spider", + "examine": "Incey wincey.", + "aggressive": "true", + "attack_level": "45", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,20,10,17,20,0,0,0,0,0", + "combat_audio": "537,539,538", + "death_animation": "6251", + "defence_animation": "6250", + "defence_level": "45", + "lifepoints": "45", + "magic_animation": "6249", + "magic_level": "1", + "melee_animation": "6249", + "range_animation": "6249", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "47", + "weakness": "7" + }, + { + "id": "2035", + "name": "Giant crypt spider", + "examine": "Not very incey wincey.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "5328", + "defence_level": "65", + "lifepoints": "80", + "magic_animation": "5327", + "magic_level": "1", + "melee_animation": "5327", + "range_animation": "5327", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "strength_level": "67", + "weakness": "7" + }, + { + "id": "2036", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "72", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,5,5,-5,0,5,0,0,0,0,0", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "72", + "lifepoints": "51", + "magic_animation": "5487", + "magic_level": "1", + "melee_animation": "5487", + "range_animation": "5487", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "72", + "weakness": "8" + }, + { + "id": "2037", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "72", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,5,5,-5,0,5,0,0,0,0,0", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "72", + "lifepoints": "51", + "magic_animation": "5487", + "magic_level": "1", + "melee_animation": "5487", + "range_animation": "5487", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "72", + "weakness": "8" + }, + { + "id": "2038", + "name": "Grish" + }, + { + "id": "2039", + "name": "Uglug Nar" + }, + { + "id": "2040", + "name": "Pilg" + }, + { + "id": "2041", + "name": "Grug" + }, + { + "id": "2042", + "name": "Ogre guard" + }, + { + "id": "2043", + "name": "Ogre guard" + }, + { + "id": "2044", + "name": "Zogre", + "examine": "A partially decomposing zombie ogre.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "combat_audio": "", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "35", + "lifepoints": "71", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "", + "strength_level": "36", + "weakness": "7" + }, + { + "id": "2045", + "name": "Zogre", + "examine": "A partially decomposing zombie ogre.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "35", + "lifepoints": "71", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "", + "strength_level": "36", + "weakness": "7" + }, + { + "id": "2046", + "name": "Zogre", + "examine": "A partially decomposing zombie ogre.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "35", + "lifepoints": "71", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "", + "strength_level": "36", + "weakness": "7" + }, + { + "id": "2047", + "name": "Zogre", + "examine": "A partially decomposing zombie ogre.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "35", + "lifepoints": "71", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "", + "strength_level": "36", + "weakness": "7" + }, + { + "id": "2048", + "name": "Zogre", + "examine": "A partially decomposing zombie ogre.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "35", + "lifepoints": "71", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "", + "strength_level": "36", + "weakness": "7" + }, + { + "id": "2049", + "name": "Zogre", + "examine": "A partially decomposing zombie ogre.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "35", + "lifepoints": "71", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "", + "strength_level": "36", + "weakness": "7" + }, + { + "id": "2050", + "name": "Skogre", + "examine": "It's falling apart!", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "combat_audio": "", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "35", + "lifepoints": "71", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "", + "strength_level": "36", + "weakness": "7" + }, + { + "id": "2051", + "name": "Zogre", + "examine": "A partially decomposing zombie ogre.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "35", + "lifepoints": "71", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "", + "strength_level": "36", + "weakness": "7" + }, + { + "id": "2052", + "name": "Zogre", + "examine": "A partially decomposing zombie ogre.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "35", + "lifepoints": "71", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "", + "strength_level": "36", + "weakness": "7" + }, + { + "id": "2053", + "name": "Zogre", + "examine": "A partially decomposing zombie ogre.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "35", + "lifepoints": "71", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "", + "strength_level": "36", + "weakness": "7" + }, + { + "id": "2054", + "name": "Zogre", + "examine": "A partially decomposing zombie ogre.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "35", + "lifepoints": "71", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "", + "strength_level": "36", + "weakness": "7" + }, + { + "id": "2055", + "name": "Zogre", + "examine": "A partially decomposing zombie ogre.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "35", + "lifepoints": "71", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "", + "strength_level": "36", + "weakness": "7" + }, + { + "id": "2056", + "name": "Skogre", + "examine": "It's falling apart!", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "combat_audio": "", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "35", + "lifepoints": "71", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "", + "strength_level": "36", + "weakness": "7" + }, + { + "id": "2057", + "name": "Skogre", + "examine": "It's falling apart!", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "combat_audio": "", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "35", + "lifepoints": "71", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "", + "strength_level": "36", + "weakness": "7" + }, + { + "id": "2058", + "name": "Hole in the wall", + "examine": "What could be hiding in that crack in the wall?", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "931,923,922", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "60", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1", + "weakness": "7" + }, + { + "id": "2059", + "name": "Zavistic Rarve" + }, + { + "id": "2060", + "name": "Slash Bash", + "examine": "A partially decomposing zombie ogre.", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "6", + "combat_audio": "", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "60", + "lifepoints": "100", + "magic_animation": "359", + "magic_level": "1", + "melee_animation": "359", + "range_animation": "359", + "range_level": "100", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "", + "slayer_task": "64", + "strength_level": "120", + "weakness": "7" + }, + { + "id": "2061", + "name": "Sithik Ints" + }, + { + "id": "2062", + "name": "Sithik Ints" + }, + { + "id": "2063", + "name": "Gargh" + }, + { + "id": "2064", + "name": "Scarg" + }, + { + "id": "2065", + "name": "Gruh" + }, + { + "id": "2066", + "name": "Irwin Feaselbaum" + }, + { + "id": "2067", + "name": "Fishing spot", + "examine": "I can see fish swimming in the water.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2068", + "name": "Fishing spot" + }, + { + "id": "2069", + "name": "Cave goblin miner", + "examine": "This one is slacking off.", + "attack_level": "5", + "combat_audio": "469,472,471", + "death_animation": "6003", + "defence_animation": "6008", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "6007", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "5", + "weakness": "6" + }, + { + "id": "2070", + "name": "Cave goblin miner", + "examine": "This one is slacking off.", + "attack_level": "5", + "combat_audio": "469,472,471", + "death_animation": "6003", + "defence_animation": "6008", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "6007", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "5", + "weakness": "6" + }, + { + "id": "2071", + "name": "Cave goblin miner", + "examine": "This one is slacking off.", + "attack_level": "5", + "combat_audio": "469,472,471", + "death_animation": "6003", + "defence_animation": "6008", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "6007", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "5", + "weakness": "6" + }, + { + "id": "2072", + "name": "Cave goblin miner", + "examine": "This one is slacking off.", + "attack_level": "5", + "combat_audio": "469,472,471", + "death_animation": "6003", + "defence_animation": "6008", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "6007", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "5", + "weakness": "6" + }, + { + "id": "2073", + "name": "Cave goblin guard", + "examine": "He protects the miners.", + "attack_level": "15", + "combat_audio": "469,472,471", + "death_animation": "6003", + "defence_animation": "6008", + "defence_level": "15", + "lifepoints": "21", + "magic_animation": "0", + "melee_animation": "6007", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "15", + "weakness": "6" + }, + { + "id": "2074", + "name": "Cave goblin guard", + "examine": "He protects the miners.", + "attack_level": "15", + "combat_audio": "469,472,471", + "death_animation": "6003", + "defence_animation": "6008", + "defence_level": "15", + "lifepoints": "21", + "magic_animation": "0", + "melee_animation": "6007", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "15", + "weakness": "6" + }, + { + "id": "2075", + "name": "Cave goblin miner", + "examine": "He's working hard!", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "6003", + "defence_animation": "6008", + "defence_level": "1", + "lifepoints": "10", + "melee_animation": "6007", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2076", + "name": "Cave goblin miner", + "examine": "He's working hard!", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "6003", + "defence_animation": "6008", + "defence_level": "1", + "lifepoints": "10", + "melee_animation": "6007", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2077", + "name": "Cave goblin miner", + "examine": "He's working hard!", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "6003", + "defence_animation": "6008", + "defence_level": "1", + "lifepoints": "10", + "melee_animation": "6007", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2078", + "name": "Cave goblin miner", + "examine": "He's working hard!", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "6003", + "defence_animation": "6008", + "defence_level": "1", + "lifepoints": "10", + "melee_animation": "6007", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2079", + "name": "Sigmund" + }, + { + "id": "2082", + "name": "Sigmund", + "examine": "Advisor to the Duke of Lumbridge.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2083", + "name": "Sigmund" + }, + { + "id": "2084", + "name": "Mistag" + }, + { + "id": "2085", + "name": "Kazgar" + }, + { + "id": "2087", + "name": "Ur-tag" + }, + { + "id": "2088", + "name": "Duke Horacio" + }, + { + "id": "2089", + "name": "Mistag" + }, + { + "id": "2090", + "name": "Sigmund" + }, + { + "id": "2091", + "name": "Secretary", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "5329", + "defence_animation": "5328", + "defence_level": "1", + "lifepoints": "10", + "melee_animation": "5327", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2092", + "name": "Purple Pewter Secretary", + "examine": "The head secretary of the Purple Pewter mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2093", + "name": "Yellow Fortune Secretary", + "examine": "The head secretary of the Yellow Fortune mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2094", + "name": "Blue Opal Secretary", + "examine": "The head secretary of the Blue Opal mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2095", + "name": "Green Gemstone Secretary", + "examine": "The head secretary of the Green Gemstone mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2096", + "name": "White Chisel Secretary", + "examine": "The head secretary of the White Chisel mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2097", + "name": "Silver Cog Secretary", + "examine": "The head secretary of the Silver Cog mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2098", + "name": "Brown Engine Secretary", + "examine": "The head secretary of the Brown Engine mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2099", + "name": "Red Axe Secretary" + }, + { + "id": "2100", + "name": "Purple Pewter Director", + "examine": "One of the leaders of the business Consortium", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2101", + "name": "Blue Opal Director", + "examine": "One of the leaders of the business Consortium", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2102", + "name": "Yellow Fortune Director", + "examine": "One of the leaders of the business Consortium", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2103", + "name": "Green Gemstone Director", + "examine": "One of the leaders of the business Consortium", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2104", + "name": "White Chisel Director", + "examine": "One of the leaders of the business Consortium", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2105", + "name": "Silver Cog Director", + "examine": "One of the leaders of the business Consortium", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2106", + "name": "Brown Engine Director", + "examine": "One of the leaders of the business Consortium", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2107", + "name": "Red Axe Director" + }, + { + "id": "2108", + "name": "Red Axe Cat" + }, + { + "id": "2109", + "name": "Trader", + "examine": "A trader for the Purple Pewter mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2110", + "name": "Trader", + "examine": "A trader for the Purple Pewter mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2111", + "name": "Trader", + "examine": "A trader for the Blue Opal mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2112", + "name": "Trader", + "examine": "A trader for the Blue Opal mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2113", + "name": "Trader", + "examine": "A trader for the Yellow Fortune mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2114", + "name": "Trader", + "examine": "A trader for the Yellow Fortune mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2115", + "name": "Trader", + "examine": "A trader for the Green Gemstone mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2116", + "name": "Trader", + "examine": "A trader for the Green Gemstone mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2117", + "name": "Trader", + "examine": "A trader for the White Chisel mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2118", + "name": "Trader", + "examine": "A trader for the White Chisel mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2119", + "name": "Trader", + "examine": "A trader for the Silver Cog mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2120", + "name": "Trader", + "examine": "A trader for the Silver Cog mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2121", + "name": "Trader", + "examine": "A trader for the Brown Engine mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2122", + "name": "Trader", + "examine": "A trader for the Brown Engine mining company.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2123", + "name": "Trader" + }, + { + "id": "2125", + "name": "Trader" + }, + { + "id": "2127", + "name": "Trade Referee", + "examine": "He is regulating the flow of goods on the trade floor and maintaining order.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2128", + "name": "Supreme Commander" + }, + { + "id": "2129", + "name": "Commander Veldaban" + }, + { + "id": "2130", + "name": "Black Guard", + "examine": "A member of the Black Guard", + "attack_level": "34", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "34", + "weakness": "6" + }, + { + "id": "2131", + "name": "Black Guard", + "examine": "A member of the Black Guard", + "attack_level": "34", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "34", + "weakness": "6" + }, + { + "id": "2132", + "name": "Black Guard", + "examine": "A member of the Black Guard", + "attack_level": "34", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "34", + "weakness": "6" + }, + { + "id": "2133", + "name": "Black Guard", + "examine": "A member of the Black Guard", + "attack_level": "34", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "34", + "weakness": "6" + }, + { + "id": "2134", + "name": "Black Guard Berserker", + "examine": "An elite member of the Black Guard.", + "attack_level": "38", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "38", + "lifepoints": "54", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "38", + "weakness": "6" + }, + { + "id": "2135", + "name": "Black Guard Berserker", + "examine": "An elite member of the Black Guard.", + "attack_level": "38", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "38", + "lifepoints": "54", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "38", + "weakness": "6" + }, + { + "id": "2136", + "name": "Black Guard Berserker", + "examine": "An elite member of the Black Guard.", + "attack_level": "38", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "38", + "lifepoints": "54", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "38", + "weakness": "6" + }, + { + "id": "2137", + "name": "Gnome emissary" + }, + { + "id": "2138", + "name": "Gnome traveller", + "examine": "A gnome traveller, visiting Keldagrim.", + "attack_level": "1", + "defence_level": "1", + "force_talk": "", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2139", + "name": "Gnome traveller", + "examine": "A gnome traveller, visiting Keldagrim.", + "attack_level": "1", + "defence_level": "1", + "force_talk": "", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2140", + "name": "Dromund's cat", + "examine": "Very protective of his master... and his property.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2141", + "name": "Blasidar the sculptor", + "examine": "Makes sculptures.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2142", + "name": "Riki the sculptor's model" + }, + { + "id": "2144", + "name": "Riki the sculptor's model" + }, + { + "id": "2145", + "name": "Riki the sculptor's model" + }, + { + "id": "2146", + "name": "Riki the sculptor's model" + }, + { + "id": "2147", + "name": "Riki the sculptor's model" + }, + { + "id": "2148", + "name": "Riki the sculptor's model" + }, + { + "id": "2149", + "name": "Riki the sculptor's model" + }, + { + "id": "2150", + "name": "Riki the sculptor's model" + }, + { + "id": "2151", + "name": "Vigr" + }, + { + "id": "2152", + "name": "Santiri" + }, + { + "id": "2153", + "name": "Saro" + }, + { + "id": "2154", + "name": "Gunslik", + "examine": "Proprietor of Gunslik's Assorted Items.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2155", + "name": "Wemund" + }, + { + "id": "2156", + "name": "Randivor" + }, + { + "id": "2157", + "name": "Hervi" + }, + { + "id": "2158", + "name": "Nolar", + "examine": "A crafty dwarf." + }, + { + "id": "2159", + "name": "Gulldamar" + }, + { + "id": "2160", + "name": "Tati", + "examine": "An old mining dwarf, now he sells pickaxes and generally acts grumpy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2161", + "name": "Agmundi" + }, + { + "id": "2162", + "name": "Vermundi" + }, + { + "id": "2163", + "name": "Banker", + "examine": "A rather personable banker lady.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2164", + "name": "Banker", + "examine": "A rather serious old fella.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2165", + "name": "Librarian", + "examine": "He takes care of the library and its many books.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2166", + "name": "Assistant" + }, + { + "id": "2167", + "name": "Customer", + "examine": "A customer looking for books.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2168", + "name": "Customer", + "examine": "Looks like a human traveler visiting the library.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2169", + "name": "Dromund" + }, + { + "id": "2170", + "name": "Rind the gardener", + "examine": "He tends to the plants in the palace garden.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2171", + "name": "Factory Manager", + "examine": "Looks after the factory.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2172", + "name": "Factory Worker", + "examine": "Works hard at whatever it is he does.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2173", + "name": "Factory Worker", + "examine": "Works hard at whatever it is he does.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2174", + "name": "Factory Worker", + "examine": "Works hard at whatever it is he does.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2175", + "name": "Factory Worker", + "examine": "Works hard at whatever it is he does.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2176", + "name": "Inn Keeper" + }, + { + "id": "2177", + "name": "Inn Keeper", + "examine": "A rich landlord, fat and jolly.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2178", + "name": "Barmaid", + "examine": "These Dwarf ladies are so attractive!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2179", + "name": "Barman" + }, + { + "id": "2180", + "name": "Cart conductor", + "examine": "He makes sure the carts don't run anyone over.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2181", + "name": "Cart conductor", + "examine": "He makes sure the carts don't run anyone over.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2182", + "name": "Cart conductor", + "examine": "He makes sure the carts don't run anyone over.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2183", + "name": "Cart conductor", + "examine": "He makes sure the carts don't run anyone over.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2184", + "name": "Cart conductor", + "examine": "He makes sure the carts don't run anyone over.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2185", + "name": "Cart conductor", + "examine": "Remember: don't drink and ride in mine carts.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2186", + "name": "Cart conductor", + "examine": "Keeps the line clear of traffic.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2187", + "name": "Rowdy dwarf", + "examine": "A loud, drunk and generally obnoxious dwarf.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2188", + "name": "Hegir" + }, + { + "id": "2189", + "name": "Haera" + }, + { + "id": "2190", + "name": "Runvastr", + "examine": "A sad old dwarf living in a sad old home.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2191", + "name": "Sune", + "examine": "He seems to always be busy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2192", + "name": "Bentamir", + "examine": "This dwarf doesn't seem to be very well off.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2193", + "name": "Ulifed", + "examine": "A dwarf minding his own business.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2194", + "name": "Reinald" + }, + { + "id": "2195", + "name": "Karl", + "examine": "A short, merry guy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2196", + "name": "Gauss" + }, + { + "id": "2197", + "name": "Myndill" + }, + { + "id": "2198", + "name": "Kjut", + "examine": "His kebabs certainly smell delicious.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2199", + "name": "Tombar" + }, + { + "id": "2200", + "name": "Odmar" + }, + { + "id": "2201", + "name": "Audmann", + "examine": "He seems to be very well off.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2202", + "name": "Drunken Dwarf", + "examine": "He's had a fair bit to drink...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2203", + "name": "Drunken Dwarf", + "examine": "He's had a fair bit to drink...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2204", + "name": "Drunken Dwarf" + }, + { + "id": "2205", + "name": "Dwarven Boatman", + "examine": "You cannot see his ship, but presumably he has one.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2206", + "name": "Dwarven Boatman", + "examine": "You cannot see his ship, but presumably he has one.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2207", + "name": "Dwarven Miner", + "examine": "He carries a heavy load.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2208", + "name": "Dwarven Miner" + }, + { + "id": "2209", + "name": "Dwarven Miner" + }, + { + "id": "2210", + "name": "Dwarven Miner" + }, + { + "id": "2211", + "name": "Dwarven Miner" + }, + { + "id": "2212", + "name": "Dwarven Miner" + }, + { + "id": "2213", + "name": "Dwarven Miner" + }, + { + "id": "2214", + "name": "Dwarven Miner" + }, + { + "id": "2215", + "name": "Dwarven Miner" + }, + { + "id": "2216", + "name": "Dwarven Miner" + }, + { + "id": "2217", + "name": "Dwarven Miner" + }, + { + "id": "2218", + "name": "Dwarven Miner" + }, + { + "id": "2219", + "name": "Purple Pewter Director" + }, + { + "id": "2220", + "name": "Purple Pewter Director" + }, + { + "id": "2221", + "name": "Blue Opal Director" + }, + { + "id": "2222", + "name": "Yellow Fortune Director" + }, + { + "id": "2223", + "name": "Green Gemstone Director" + }, + { + "id": "2224", + "name": "White Chisel Director" + }, + { + "id": "2225", + "name": "Silver Cog Director" + }, + { + "id": "2226", + "name": "Brown Engine Director" + }, + { + "id": "2227", + "name": "Red Axe Director" + }, + { + "id": "2228", + "name": "Commander Veldaban" + }, + { + "id": "2229", + "name": "Red Axe Cat" + }, + { + "id": "2230", + "name": "Red Axe Cat" + }, + { + "id": "2231", + "name": "Black Guard Berserker" + }, + { + "id": "2232", + "name": "Black Guard Berserker", + "examine": "An elite member of the Black Guard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2233", + "name": "Olivia" + }, + { + "id": "2234", + "name": "Master Farmer", + "examine": "A master at farming.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2235", + "name": "Master Farmer", + "examine": "A master at farming.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2236", + "name": "Market Guard", + "examine": "He guards the Draynor Market stalls from thieves.", + "attack_level": "30", + "combat_audio": "2547,1979,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "2237", + "name": "Gee", + "examine": "A local farmer. He may be able to provide some useful information.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2238", + "name": "Donie" + }, + { + "id": "2239", + "name": "Pig" + }, + { + "id": "2240", + "name": "Pig", + "examine": "There to help me make my bids.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2241", + "name": "Piglet", + "examine": "There to help me make my bids.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2242", + "name": "Piglet", + "examine": "Porcine.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2243", + "name": "Piglet", + "examine": "Bacon-in-training." + }, + { + "id": "2244", + "name": "Lumbridge Guide", + "examine": "He provides new players with useful information.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2245", + "name": "Khazard trooper", + "examine": "It's one of General Khazard's warriors.", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "401", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2246", + "name": "Khazard trooper", + "examine": "It's one of General Khazard's warriors.", + "attack_level": "32", + "attack_speed": "6", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "melee_animation": "429", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "32", + "weakness": "8" + }, + { + "id": "2247", + "name": "Gnome troop", + "examine": "It's a tree gnome trooper.", + "attack_level": "1", + "attack_speed": "5", + "combat_style": "1", + "death_animation": "196", + "defence_animation": "193", + "defence_level": "1", + "lifepoints": "3", + "melee_animation": "190", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2248", + "name": "Gnome troop", + "examine": "It's a tree gnome trooper.", + "attack_level": "1", + "attack_speed": "5", + "combat_style": "1", + "death_animation": "196", + "defence_animation": "193", + "defence_level": "1", + "lifepoints": "3", + "melee_animation": "190", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2249", + "name": "Gnome", + "examine": "Like a mini man!", + "attack_level": "1", + "attack_speed": "4", + "combat_style": "1", + "death_animation": "196", + "defence_animation": "193", + "defence_level": "1", + "lifepoints": "3", + "melee_animation": "190", + "range_level": "1", + "respawn_delay": "60", + "strength_level": "1" + }, + { + "id": "2250", + "name": "Gnome", + "examine": "Like a mini man!", + "agg_radius": "", + "aggressive": "", + "attack_level": "1", + "attack_speed": "4", + "combat_style": "1", + "death_animation": "196", + "defence_animation": "193", + "defence_level": "1", + "end_height": "", + "lifepoints": "2", + "melee_animation": "190", + "range_level": "1", + "respawn_delay": "60", + "strength_level": "1", + "weakness": "" + }, + { + "id": "2251", + "name": "Gnome", + "examine": "Like a mini man!", + "attack_level": "1", + "attack_speed": "4", + "combat_style": "1", + "death_animation": "196", + "defence_animation": "193", + "defence_level": "1", + "force_talk": "", + "lifepoints": "3", + "melee_animation": "190", + "range_level": "1", + "respawn_delay": "60", + "strength_level": "1" + }, + { + "id": "2252", + "name": "Crow" + }, + { + "id": "2253", + "name": "Wise Old Man", + "examine": "A venerable and rich sage." + }, + { + "id": "2254", + "name": "Bed" + }, + { + "id": "2255", + "name": "Thing under the bed" + }, + { + "id": "2256", + "name": "Paladin", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "66", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2257", + "name": "Mage of Zamorak" + }, + { + "id": "2259", + "name": "Mage of Zamorak" + }, + { + "id": "2260", + "name": "Mage of Zamorak" + }, + { + "id": "2262", + "name": "Dark mage", + "examine": "An initiate of Zamorak.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2263", + "name": "Abyssal leech", + "examine": "A blood-drinking denizen of the abyss.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "3", + "combat_audio": "232,231,230", + "death_animation": "2183", + "defence_animation": "0", + "defence_level": "52", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "2181", + "range_animation": "0", + "range_level": "52", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "0", + "strength_level": "1", + "weakness": "2" + }, + { + "id": "2264", + "name": "Abyssal guardian", + "examine": "It seems to have eyes in the back of its head...", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "6", + "death_animation": "2189", + "defence_animation": "2188", + "defence_level": "65", + "lifepoints": "50", + "magic_animation": "2186", + "magic_level": "57", + "melee_animation": "2186", + "range_animation": "2186", + "range_level": "135", + "safespot": null, + "slayer_exp": "0", + "strength_level": "96", + "weakness": "3" + }, + { + "id": "2265", + "name": "Abyssal walker", + "examine": "Apparently walks the abyss.", + "aggressive": "true", + "attack_level": "60", + "attack_speed": "5", + "combat_audio": "233,235,234", + "death_animation": "2194", + "defence_animation": "2193", + "defence_level": "55", + "lifepoints": "95", + "magic_animation": "2192", + "melee_animation": "2192", + "range_animation": "2192", + "range_level": "1", + "safespot": null, + "slayer_exp": "0", + "strength_level": "116", + "weakness": "8" + }, + { + "id": "2266", + "name": "Brian O'Richard" + }, + { + "id": "2267", + "name": "Rogue Guard", + "examine": "Sparkles the Tinsel Snake", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2268", + "name": "Rogue Guard" + }, + { + "id": "2269", + "name": "Rogue Guard", + "examine": "A snowman armed with a holly bow.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2270", + "name": "Martin Thwait" + }, + { + "id": "2271", + "name": "Emerald Benedict", + "examine": "A snowman armed with an ice sword.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2272", + "name": "Spin Blades", + "examine": "A snowman armed with a winter staff.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2273", + "name": "Spin Blades" + }, + { + "id": "2274", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "2275", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "2276", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "2277", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "2278", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "2279", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "2280", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "2281", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "2282", + "name": "Sir Spishyus", + "examine": "An observer for the Temple Knights.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2283", + "name": "Lady Table", + "examine": "An observer for the Temple Knights.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2284", + "name": "Sir Kuam Ferentse", + "examine": "An observer for the Temple Knights.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2285", + "name": "Sir Leye", + "examine": "A warrior blessed by Saradomin.", + "aggressive": "true", + "attack_level": "18", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "15", + "lifepoints": "21", + "melee_animation": "400", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "18" + }, + { + "id": "2286", + "name": "Sir Tinley", + "examine": "An observer for the Temple Knights.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2287", + "name": "Sir Ren Itchood", + "examine": "An observer for the Temple Knights.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2288", + "name": "Miss Cheevers", + "examine": "An observer for the Temple Knights.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2289", + "name": "Ms. Hynn Terprett", + "examine": "An observer for the Temple Knights.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2290", + "name": "Sir Tiffy Cashien", + "examine": "Head of recruitment for the Temple Knights.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2291", + "name": "Rug Merchant", + "examine": "A carpet merchant.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2292", + "name": "Rug Merchant", + "examine": "A carpet merchant.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2293", + "name": "Rug Merchant", + "examine": "A man who deals in rugs.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2294", + "name": "Rug Merchant", + "examine": "A man who deals in rugs.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2295", + "name": "Rug Merchant" + }, + { + "id": "2297", + "name": "Rug Merchant" + }, + { + "id": "2299", + "name": "Rug Station Attendant" + }, + { + "id": "2301", + "name": "Monkey", + "examine": "Perhaps our oldest relatives.", + "attack_level": "1", + "combat_audio": "629,631,630", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2302", + "name": "Sarah" + }, + { + "id": "2304", + "name": "Sarah", + "examine": "She sells farming equipment." + }, + { + "id": "2305", + "name": "Vanessa" + }, + { + "id": "2306", + "name": "Richard" + }, + { + "id": "2307", + "name": "Alice" + }, + { + "id": "2308", + "name": "Capt' Arnav" + }, + { + "id": "2309", + "name": "null", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_animation": "", + "defence_level": "1", + "range_level": "1", + "safespot": "null" + }, + { + "id": "2310", + "name": "Cow calf", + "examine": "Young, but still beefy.", + "attack_level": "2", + "attack_speed": "5", + "combat_audio": "366,368,367", + "death_animation": "5851", + "defence_animation": "5850", + "defence_level": "2", + "lifepoints": "6", + "magic_animation": "5849", + "melee_animation": "5849", + "range_animation": "5849", + "range_level": "1", + "safespot": null, + "slayer_exp": "8", + "strength_level": "2", + "weakness": "8" + }, + { + "id": "2311", + "name": "Sheepdog", + "examine": "Farmer/sheep liaison officer. Go on - give the dog a bone!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2312", + "name": "Rooster", + "examine": "He rules the", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2313", + "name": "Chicken", + "examine": "Yep. Definitely a chicken.", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "355,357,356", + "death_animation": "5389", + "defence_animation": "5388", + "defence_level": "1", + "lifepoints": "3", + "magic_animation": "5387", + "melee_animation": "5387", + "range_animation": "5387", + "range_level": "1", + "respawn_delay": "18", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2314", + "name": "Chicken", + "examine": "Yep. Definitely a chicken.", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "355,357,356", + "death_animation": "5389", + "defence_animation": "5388", + "defence_level": "1", + "lifepoints": "3", + "magic_animation": "5387", + "melee_animation": "5387", + "range_animation": "5387", + "range_level": "1", + "respawn_delay": "18", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2315", + "name": "Chicken", + "examine": "Yep. Definitely a chicken.", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "355,357,356", + "death_animation": "5389", + "defence_animation": "5388", + "defence_level": "1", + "lifepoints": "3", + "magic_animation": "5387", + "melee_animation": "5387", + "range_animation": "5387", + "range_level": "1", + "respawn_delay": "18", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2316", + "name": "Pig", + "examine": "Swine.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2317", + "name": "Pig", + "examine": "Porker.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2318", + "name": "Piglet", + "examine": "Hog.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2319", + "name": "Piglet", + "examine": "Porcine.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2320", + "name": "Piglet", + "examine": "He has a certain bovine aroma.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2321", + "name": "Blandebir", + "examine": "An expert on the brewing of ales and cider.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2322", + "name": "Metarialus", + "examine": "In his former life an expert brewer." + }, + { + "id": "2323", + "name": "Elstan", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2324", + "name": "Dantaera", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2325", + "name": "Kragen", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2326", + "name": "Lyra", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2327", + "name": "Francis", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2328", + "name": "Wizard Cromperty", + "examine": "The hat is a dead give away." + }, + { + "id": "2329", + "name": "Muncher", + "examine": "Only the Grim Reaper would have a pet like this.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2330", + "name": "Garth", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2331", + "name": "Ellena", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2332", + "name": "Selena", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2333", + "name": "Vasquen", + "examine": "Perhaps this farmer might look after your crops for you.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2334", + "name": "Rhonen", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2335", + "name": "Dreven", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2336", + "name": "Taria", + "examine": "Perhaps this gardener might look after your crops for you.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2337", + "name": "Rhazien", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2338", + "name": "Torrell", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2339", + "name": "Alain", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2340", + "name": "Heskel", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2341", + "name": "Treznor", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2342", + "name": "Fayeth", + "examine": "Perhaps this gardener might look after your crops for you.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2343", + "name": "Bolongo", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2344", + "name": "Gileth", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2345", + "name": "Sick-looking sheep (1)" + }, + { + "id": "2346", + "name": "Sick-looking sheep (2)" + }, + { + "id": "2347", + "name": "Sick-looking sheep (3)" + }, + { + "id": "2348", + "name": "Sick-looking sheep (4)" + }, + { + "id": "2349", + "name": "Mourner" + }, + { + "id": "2350", + "name": "Mourner" + }, + { + "id": "2351", + "name": "Mourner" + }, + { + "id": "2352", + "name": "Eudav" + }, + { + "id": "2353", + "name": "Oronwen" + }, + { + "id": "2354", + "name": "Banker", + "examine": "He can look after my money.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2355", + "name": "Banker", + "examine": "She can look after my money.", + "attack_level": "1", + "combat_style": "2", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "476", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2356", + "name": "Dalldav" + }, + { + "id": "2357", + "name": "Gethin" + }, + { + "id": "2358", + "name": "Arianwyn" + }, + { + "id": "2359", + "name": "Elf warrior", + "examine": "I don't wanna be at the wrong end of that pike.", + "attack_level": "60", + "attack_speed": "5", + "clue_level": "2", + "combat_audio": "425,427,426", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "85", + "magic_animation": "0", + "melee_animation": "428", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "60", + "weakness": "9" + }, + { + "id": "2360", + "name": "Elf warrior", + "examine": "I don't wanna be at the wrong end of that pike.", + "attack_level": "60", + "attack_speed": "5", + "clue_level": "2", + "combat_audio": "425,427,426", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "85", + "magic_animation": "0", + "melee_animation": "428", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "60", + "weakness": "9" + }, + { + "id": "2361", + "name": "Elf warrior", + "examine": "He looks pretty handy with that bow.", + "attack_level": "1", + "clue_level": "2", + "combat_audio": "425,427,426", + "combat_style": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "64", + "lifepoints": "91", + "magic_animation": "0", + "melee_animation": "428", + "projectile": "249", + "range_animation": "426", + "range_level": "64", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "250", + "strength_level": "1", + "weakness": "2" + }, + { + "id": "2362", + "name": "Elf warrior", + "examine": "He looks pretty handy with that bow.", + "attack_level": "1", + "clue_level": "2", + "combat_audio": "425,427,426", + "combat_style": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "64", + "lifepoints": "91", + "magic_animation": "0", + "melee_animation": "428", + "projectile": "249", + "range_animation": "426", + "range_level": "64", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "250", + "strength_level": "1", + "weakness": "2" + }, + { + "id": "2363", + "name": "Goreu" + }, + { + "id": "2364", + "name": "Ysgawyn" + }, + { + "id": "2365", + "name": "Arvel" + }, + { + "id": "2366", + "name": "Mawrth" + }, + { + "id": "2367", + "name": "Kelyn" + }, + { + "id": "2368", + "name": "Eoin" + }, + { + "id": "2369", + "name": "Iona" + }, + { + "id": "2370", + "name": "Gnome" + }, + { + "id": "2372", + "name": "Head mourner", + "examine": "A Mourner showing his true identity.", + "attack_level": "", + "death_animation": "", + "defence_animation": "", + "defence_level": "", + "lifepoints": "", + "magic_animation": "", + "melee_animation": "", + "range_animation": "", + "range_level": "", + "safespot": null, + "strength_level": "" + }, + { + "id": "2373", + "name": "Mourner", + "examine": "A mourner, or plague healer.", + "aggressive": "true", + "attack_level": "61", + "attack_speed": "4", + "death_animation": "836", + "defence_animation": "", + "defence_level": "80", + "lifepoints": "87", + "magic_animation": "", + "melee_animation": "428", + "range_animation": "", + "range_level": "", + "safespot": null, + "strength_level": "61", + "weakness": "" + }, + { + "id": "2374", + "name": "Mourner", + "examine": "A Mourner, or plague healer." + }, + { + "id": "2375", + "name": "Eluned" + }, + { + "id": "2377", + "name": "Sick-looking sheep (1)" + }, + { + "id": "2378", + "name": "Sick-looking sheep (2)" + }, + { + "id": "2379", + "name": "Sick-looking sheep (3)" + }, + { + "id": "2380", + "name": "Sick-looking sheep (4)" + }, + { + "id": "2381", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2382", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2383", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2384", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2385", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2386", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2387", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2388", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2389", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2390", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2391", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2392", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2393", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2394", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2395", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2396", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2397", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2398", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2399", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2400", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2401", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2402", + "name": "Mysterious ghost", + "examine": "Seems to flitter in and out of existence...", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2403", + "name": "Cart conductor" + }, + { + "id": "2410", + "name": "Red Axe Director" + }, + { + "id": "2411", + "name": "Red Axe Director" + }, + { + "id": "2412", + "name": "Red Axe Henchman" + }, + { + "id": "2413", + "name": "Red Axe Henchman" + }, + { + "id": "2414", + "name": "Red Axe Henchman" + }, + { + "id": "2415", + "name": "Colonel Grimsson" + }, + { + "id": "2416", + "name": "Colonel Grimsson" + }, + { + "id": "2417", + "name": "Ogre shaman" + }, + { + "id": "2418", + "name": "Ogre shaman" + }, + { + "id": "2419", + "name": "Grunsh" + }, + { + "id": "2420", + "name": "Gnome emissary" + }, + { + "id": "2421", + "name": "Gnome companion" + }, + { + "id": "2422", + "name": "Gnome companion" + }, + { + "id": "2423", + "name": "Chaos dwarf", + "examine": "A dwarf gone bad.", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "respawn_delay": "150", + "safespot": null, + "slayer_exp": "61", + "strength_level": "1", + "weakness": "6" + }, + { + "id": "2424", + "name": "Gunslik" + }, + { + "id": "2425", + "name": "Nolar" + }, + { + "id": "2426", + "name": "Factory Worker" + }, + { + "id": "2427", + "name": "Cart conductor" + }, + { + "id": "2428", + "name": "Gauss" + }, + { + "id": "2429", + "name": "Drunken Dwarf" + }, + { + "id": "2430", + "name": "Rowdy dwarf" + }, + { + "id": "2431", + "name": "Ulifed" + }, + { + "id": "2432", + "name": "Red Axe Henchman" + }, + { + "id": "2433", + "name": "Red Axe Henchman" + }, + { + "id": "2434", + "name": "Ogre shaman" + }, + { + "id": "2435", + "name": "Jarvald" + }, + { + "id": "2436", + "name": "Jarvald", + "attack_level": "10", + "death_animation": "9230", + "defence_animation": "9231", + "defence_level": "10", + "lifepoints": "10", + "melee_animation": "9232", + "range_level": "1", + "safespot": null, + "strength_level": "10" + }, + { + "id": "2437", + "name": "Jarvald" + }, + { + "id": "2438", + "name": "Jarvald" + }, + { + "id": "2439", + "name": "Askeladden", + "examine": "Looks like a wanna be Fremennik.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2440", + "name": "Door-support" + }, + { + "id": "2441", + "name": "Door" + }, + { + "id": "2442", + "name": "Door" + }, + { + "id": "2443", + "name": "Door-support", + "examine": "This support is propping the door closed.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "0", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2444", + "name": "Door" + }, + { + "id": "2445", + "name": "Door" + }, + { + "id": "2446", + "name": "Door-support" + }, + { + "id": "2447", + "name": "Door" + }, + { + "id": "2448", + "name": "Door" + }, + { + "id": "2449", + "name": "Egg" + }, + { + "id": "2450", + "name": "Egg" + }, + { + "id": "2451", + "name": "Egg" + }, + { + "id": "2452", + "name": "Giant Rock Crab", + "examine": "No one likes crabs... especially really big ones!", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,225,200,175,-10,250,0,0,0,0,0", + "combat_audio": "717,723,722", + "death_animation": "1314", + "defence_animation": "1313", + "defence_level": "200", + "lifepoints": "180", + "magic_animation": "0", + "melee_animation": "2368", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "80", + "weakness": "9" + }, + { + "id": "2453", + "name": "Boulder", + "examine": "Heavy rock!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "240", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2454", + "name": "Dagannoth spawn", + "examine": "A teeny-tiny horror from the ocean depths...", + "aggressive": "true", + "attack_level": "47", + "death_animation": "1342", + "defence_animation": "0", + "defence_level": "47", + "lifepoints": "67", + "magic_animation": "0", + "melee_animation": "1341", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "47", + "weakness": "9" + }, + { + "id": "2455", + "name": "Dagannoth", + "examine": "A horror from the ocean depths...", + "aggressive": "true", + "attack_level": "68", + "attack_speed": "4", + "clue_level": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "71", + "lifepoints": "120", + "melee_animation": "1343", + "projectile": "294", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "120", + "strength_level": "70" + }, + { + "id": "2456", + "name": "Dagannoth", + "examine": "A horror from the ocean depths...", + "aggressive": "true", + "attack_level": "68", + "attack_speed": "4", + "clue_level": "1", + "combat_style": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "50", + "lifepoints": "70", + "melee_animation": "1343", + "projectile": "294", + "range_level": "70", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "0", + "strength_level": "70" + }, + { + "id": "2457", + "name": "Wallasalki", + "examine": "A fearsome magical creature from the deep.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "bonuses": "0,0,0,0,0,100,150,175,250,-10,0,0,0,0,0", + "combat_audio": "1077,1079,1078", + "combat_style": "2", + "death_animation": "2367", + "defence_animation": "2366", + "defence_level": "80", + "lifepoints": "120", + "magic_animation": "2365", + "magic_level": "100", + "melee_animation": "2365", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "spell_id": "48", + "strength_level": "1" + }, + { + "id": "2458", + "name": "Freaky Forester" + }, + { + "id": "2459", + "name": "Pheasant", + "examine": "A brightly coloured game bird.", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "690,692,691", + "death_animation": "2373", + "defence_animation": "2371", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2372", + "melee_animation": "2372", + "range_animation": "2372", + "range_level": "1", + "respawn_delay": "18", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2460", + "name": "Pheasant", + "examine": "A brightly coloured game bird.", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "690,692,691", + "death_animation": "2373", + "defence_animation": "2371", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2372", + "melee_animation": "2372", + "range_animation": "2372", + "range_level": "1", + "respawn_delay": "18", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2461", + "name": "Pheasant", + "examine": "A brightly coloured game bird.", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "690,692,691", + "death_animation": "2373", + "defence_animation": "2371", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2372", + "melee_animation": "2372", + "range_animation": "2372", + "range_level": "1", + "respawn_delay": "18", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2462", + "name": "Pheasant", + "examine": "A brightly coloured game bird.", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "690,692,691", + "death_animation": "2373", + "defence_animation": "2371", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2372", + "melee_animation": "2372", + "range_animation": "2372", + "range_level": "1", + "respawn_delay": "18", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2463", + "name": "Evil Chicken", + "examine": "A fowl beast.", + "aggressive": "true", + "attack_level": "5", + "bonuses": "25,85,105,75,103,85,65,0,0,0,0,0,0,0,0", + "combat_audio": "2288,357,356", + "combat_style": "2", + "death_animation": "2301", + "defence_animation": "2300", + "defence_level": "20", + "lifepoints": "19", + "magic_animation": "2302", + "magic_level": "5", + "melee_animation": "2302", + "projectile": "337", + "range_animation": "2302", + "range_level": "5", + "respawn_delay": "25", + "safespot": null, + "strength_level": "5" + }, + { + "id": "2464", + "name": "Evil Chicken", + "examine": "A fowl beast.", + "aggressive": "true", + "attack_level": "10", + "bonuses": "35,105,125,95,128,105,85,0,0,0,0,0,0,0,0", + "combat_audio": "2288,357,356", + "combat_style": "2", + "death_animation": "2301", + "defence_animation": "2300", + "defence_level": "40", + "lifepoints": "40", + "magic_animation": "2302", + "magic_level": "10", + "melee_animation": "2302", + "projectile": "337", + "range_animation": "2302", + "range_level": "10", + "respawn_delay": "25", + "safespot": null, + "strength_level": "10" + }, + { + "id": "2465", + "name": "Evil Chicken", + "examine": "A fowl beast.", + "aggressive": "true", + "attack_level": "15", + "bonuses": "35,185,185,155,188,125,165,0,0,0,0,0,0,0,0", + "combat_audio": "2288,357,356", + "combat_style": "2", + "death_animation": "2301", + "defence_animation": "2300", + "defence_level": "50", + "lifepoints": "60", + "magic_animation": "2302", + "magic_level": "15", + "melee_animation": "2302", + "projectile": "337", + "range_animation": "2302", + "range_level": "15", + "respawn_delay": "25", + "safespot": null, + "strength_level": "15" + }, + { + "id": "2466", + "name": "Evil Chicken", + "examine": "A fowl beast.", + "aggressive": "true", + "attack_level": "45", + "bonuses": "45,235,235,205,238,145,165,0,0,0,0,0,0,0,0", + "combat_audio": "2288,357,356", + "combat_style": "2", + "death_animation": "2301", + "defence_animation": "2300", + "defence_level": "60", + "lifepoints": "80", + "magic_animation": "2302", + "magic_level": "25", + "melee_animation": "2302", + "projectile": "337", + "range_animation": "2302", + "range_level": "45", + "respawn_delay": "25", + "safespot": null, + "strength_level": "45" + }, + { + "id": "2467", + "name": "Evil Chicken", + "examine": "A fowl beast.", + "aggressive": "true", + "attack_level": "45", + "bonuses": "45,285,285,255,288,145,165,0,0,0,0,0,0,0,0", + "combat_audio": "2288,357,356", + "combat_style": "2", + "death_animation": "2301", + "defence_animation": "2300", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "2302", + "magic_level": "35", + "melee_animation": "2302", + "projectile": "337", + "range_animation": "2302", + "range_level": "45", + "respawn_delay": "25", + "safespot": null, + "strength_level": "45" + }, + { + "id": "2468", + "name": "Evil Chicken", + "examine": "A fowl beast.", + "aggressive": "true", + "attack_level": "45", + "bonuses": "45,285,285,255,288,145,165,0,0,0,0,0,0,0,0", + "combat_audio": "2288,357,356", + "combat_style": "2", + "death_animation": "2301", + "defence_animation": "2300", + "defence_level": "90", + "lifepoints": "120", + "magic_animation": "2302", + "magic_level": "45", + "melee_animation": "2302", + "projectile": "337", + "range_animation": "2302", + "range_level": "45", + "respawn_delay": "25", + "safespot": null, + "strength_level": "45", + "weakness": "9" + }, + { + "id": "2469", + "name": "Frog" + }, + { + "id": "2470", + "name": "Frog" + }, + { + "id": "2471", + "name": "Frog" + }, + { + "id": "2472", + "name": "Frog" + }, + { + "id": "2473", + "name": "Frog" + }, + { + "id": "2474", + "name": "Frog prince" + }, + { + "id": "2475", + "name": "Frog princess" + }, + { + "id": "2476", + "name": "Rick Turpentine", + "examine": "A Retired Highwayman", + "attack_level": "8", + "attack_speed": "5", + "bonuses": "30,20,10,20,20,30,30,10,20,10,30,30,20,30,20", + "combat_audio": "2695,513,512", + "combat_style": "1", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "8", + "lifepoints": "10", + "magic_animation": "4230", + "magic_level": "30", + "melee_animation": "4230", + "prj_height": "", + "projectile": "27", + "range_animation": "4230", + "range_level": "20", + "safespot": null, + "strength_level": "8" + }, + { + "id": "2477", + "name": "Quiz Master", + "examine": "Apparently a master of quizzes!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2478", + "name": "Evil Bob" + }, + { + "id": "2479", + "name": "Evil Bob", + "examine": "Hey, it's Bob the cat! Or... is it?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2480", + "name": "Servant" + }, + { + "id": "2481", + "name": "Servant", + "examine": "Servant of Evil Bob.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2482", + "name": "Giant bat", + "examine": "Annoying flappy thing.", + "attack_level": "22", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,10,10,12,10,8,0,0,0,0,0", + "combat_audio": "292,294,293", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "32", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "8", + "strength_level": "22" + }, + { + "id": "2483", + "name": "Bush snake" + }, + { + "id": "2489", + "name": "Bush snake", + "examine": "A slithering serpent that likes to hide in the bush.", + "aggressive": "true", + "attack_level": "25", + "attack_speed": "7", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "3609,3608,3610", + "death_animation": "278", + "defence_animation": "276", + "defence_level": "50", + "lifepoints": "25", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "275", + "poison_amount": "55", + "poisonous": "true", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "25", + "weakness": "1" + }, + { + "id": "2490", + "name": "Bush snake", + "examine": "A slithering serpent that likes to hide in the bush.", + "aggressive": "true", + "attack_level": "25", + "attack_speed": "7", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "3609,3608,3610", + "death_animation": "278", + "defence_animation": "276", + "defence_level": "50", + "lifepoints": "25", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "275", + "poison_amount": "55", + "poisonous": "true", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "25" + }, + { + "id": "2491", + "name": "Jungle spider", + "examine": "", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "5328", + "defence_level": "1", + "lifepoints": "50", + "melee_animation": "5327", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2492", + "name": "Jungle spider", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "5328", + "defence_level": "1", + "lifepoints": "50", + "melee_animation": "5327", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2493", + "name": "Large mosquito", + "examine": "A flying bloodsucker.", + "attack_level": "1", + "death_animation": "2398", + "defence_animation": "0", + "defence_level": "63", + "lifepoints": "90", + "magic_animation": "0", + "melee_animation": "2397", + "range_animation": "0", + "range_level": "63", + "safespot": null, + "strength_level": "1", + "weakness": "2" + }, + { + "id": "2494", + "name": "Mosquito swarm", + "examine": "A swarm of three highly agile mosquitoes.", + "attack_level": "1", + "death_animation": "2398", + "defence_animation": "0", + "defence_level": "66", + "lifepoints": "94", + "magic_animation": "0", + "melee_animation": "2397", + "range_animation": "0", + "range_level": "66", + "safespot": null, + "strength_level": "1", + "weakness": "2" + }, + { + "id": "2495", + "name": "Mosquito swarm", + "examine": "A swarm of five highly agile mosquitoes.", + "attack_level": "1", + "death_animation": "2398", + "defence_animation": "0", + "defence_level": "68", + "lifepoints": "97", + "magic_animation": "0", + "melee_animation": "2397", + "range_animation": "0", + "range_level": "68", + "safespot": null, + "strength_level": "1", + "weakness": "2" + }, + { + "id": "2496", + "name": "Tribesman", + "attack_level": "1", + "clue_level": "1", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2497", + "name": "Tribesman", + "examine": "A vicious warrior.", + "aggressive": "true", + "attack_level": "23", + "attack_speed": "4", + "bonuses": "8,8,8,0,0,4,6,6,0,0,0,5,0,0,0", + "clue_level": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "26", + "lifepoints": "39", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "428", + "poison_amount": "55", + "poisonous": "true", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "27", + "weakness": "9" + }, + { + "id": "2498", + "name": "Broodoo victim" + }, + { + "id": "2499", + "name": "Broodoo victim", + "examine": "An undead victim of some ancient murderous ritual; his skin appears deep green.", + "aggressive": "true", + "attack_level": "45", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "64", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "45", + "weakness": "9" + }, + { + "id": "2500", + "name": "Broodoo victim" + }, + { + "id": "2501", + "name": "Broodoo victim", + "examine": "An undead victim of some ancient murderous ritual; his skin appears pale yellow.", + "aggressive": "true", + "attack_level": "43", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "melee_animation": "428", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "43", + "weakness": "9" + }, + { + "id": "2502", + "name": "Broodoo victim" + }, + { + "id": "2503", + "name": "Broodoo victim", + "aggressive": "true", + "attack_level": "1", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "100", + "melee_animation": "810", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2504", + "name": "Sharimika" + }, + { + "id": "2505", + "name": "Sharimika", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2506", + "name": "Sharimika", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2507", + "name": "Mamma Bufetta" + }, + { + "id": "2508", + "name": "Mamma Bufetta", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2509", + "name": "Mamma Bufetta", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2510", + "name": "Layleen" + }, + { + "id": "2511", + "name": "Layleen", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2512", + "name": "Layleen", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2513", + "name": "Karaday" + }, + { + "id": "2514", + "name": "Karaday", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2515", + "name": "Karaday", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2516", + "name": "Safta Doc" + }, + { + "id": "2517", + "name": "Safta Doc", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2518", + "name": "Safta Doc", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2519", + "name": "Gabooty" + }, + { + "id": "2520", + "name": "Gabooty", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2521", + "name": "Gabooty", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2522", + "name": "Fanellaman" + }, + { + "id": "2523", + "name": "Fanellaman", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2524", + "name": "Fanellaman", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2525", + "name": "Jagbakoba" + }, + { + "id": "2526", + "name": "Jagbakoba", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2527", + "name": "Jagbakoba", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2528", + "name": "Murcaily" + }, + { + "id": "2529", + "name": "Murcaily", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2530", + "name": "Murcaily", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2531", + "name": "Rionasta" + }, + { + "id": "2532", + "name": "Rionasta", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2533", + "name": "Rionasta", + "examine": "A native of Tai Bwo Wannai." + }, + { + "id": "2534", + "name": "Mahogany" + }, + { + "id": "2535", + "name": "Teak" + }, + { + "id": "2536", + "name": "Niles" + }, + { + "id": "2537", + "name": "Miles" + }, + { + "id": "2538", + "name": "Giles" + }, + { + "id": "2539", + "name": "Cap'n Hand", + "examine": "He used to swashbuckle his away across the seven seas.", + "attack_level": "30", + "attack_speed": "5", + "bonuses": "10,30,20,30,10,20,15,30,10,30,15,20,20,0,0", + "combat_style": "1", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "10", + "lifepoints": "10", + "magic_animation": "4230", + "magic_level": "20", + "melee_animation": "4230", + "range_animation": "4230", + "range_level": "30", + "safespot": null, + "strength_level": "10" + }, + { + "id": "2540", + "name": "Dr Jekyll" + }, + { + "id": "2541", + "name": "Mr Hyde" + }, + { + "id": "2542", + "name": "Mr Hyde" + }, + { + "id": "2543", + "name": "Mr Hyde" + }, + { + "id": "2544", + "name": "Mr Hyde" + }, + { + "id": "2545", + "name": "Mr Hyde" + }, + { + "id": "2546", + "name": "Mr Hyde" + }, + { + "id": "2547", + "name": "Chaos druid", + "examine": "A crazy, evil druid.", + "aggressive": "true", + "attack_level": "8", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "12", + "end_gfx": "107", + "lifepoints": "20", + "magic_animation": "422", + "magic_level": "10", + "melee_animation": "422", + "projectile": "106", + "range_animation": "422", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "start_gfx": "105", + "strength_level": "8", + "weakness": "3" + }, + { + "id": "2548", + "name": "Blackjack seller" + }, + { + "id": "2549", + "name": "Ali the dyer", + "examine": "A colourful character.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2550", + "name": "Dwarven Miner" + }, + { + "id": "2551", + "name": "Dwarven Miner" + }, + { + "id": "2552", + "name": "Dwarven Miner" + }, + { + "id": "2553", + "name": "Blast Furnace Foreman", + "examine": "Looks after the blast furnace.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2554", + "name": "Tin ore" + }, + { + "id": "2555", + "name": "Copper ore" + }, + { + "id": "2556", + "name": "Iron ore" + }, + { + "id": "2557", + "name": "Mithril ore" + }, + { + "id": "2558", + "name": "Adamantite ore" + }, + { + "id": "2559", + "name": "Runite ore" + }, + { + "id": "2560", + "name": "Silver ore" + }, + { + "id": "2561", + "name": "Gold ore" + }, + { + "id": "2562", + "name": "Coal" + }, + { + "id": "2563", + "name": "Perfect gold ore" + }, + { + "id": "2564", + "name": "Ordan", + "examine": "He smells of rock dust." + }, + { + "id": "2565", + "name": "Jorzik", + "examine": "He buys stuff." + }, + { + "id": "2566", + "name": "Wise Old Man" + }, + { + "id": "2567", + "name": "Wise Old Man" + }, + { + "id": "2568", + "name": "Banker" + }, + { + "id": "2569", + "name": "Banker" + }, + { + "id": "2570", + "name": "Banker" + }, + { + "id": "2571", + "name": "Market Guard", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "23", + "melee_animation": "400", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2572", + "name": "Olivia", + "examine": "She is a seed merchant." + }, + { + "id": "2573", + "name": "Pillory Guard" + }, + { + "id": "2574", + "name": "Bank guard", + "examine": "He's guarding the bank.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2575", + "name": "Purepker895" + }, + { + "id": "2576", + "name": "Qutiedoll" + }, + { + "id": "2577", + "name": "1337sp34kr" + }, + { + "id": "2578", + "name": "Elfinlocks" + }, + { + "id": "2579", + "name": "Cool Mom227" + }, + { + "id": "2580", + "name": "Bernald", + "examine": "Looks after the Burthorpe vinery." + }, + { + "id": "2581", + "name": "Ellamaria" + }, + { + "id": "2582", + "name": "Trolley" + }, + { + "id": "2583", + "name": "Trolley" + }, + { + "id": "2584", + "name": "Trolley" + }, + { + "id": "2585", + "name": "Billy, a guard of Falador" + }, + { + "id": "2587", + "name": "Bob, another guard of Falador" + }, + { + "id": "2588", + "name": "Brother Althric", + "examine": "A holy man.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2589", + "name": "PKMaster0036" + }, + { + "id": "2590", + "name": "King Roald" + }, + { + "id": "2591", + "name": "TzHaar-Mej", + "examine": "Looks like some kind of mystic.", + "attack_level": "70", + "attack_speed": "5", + "bonuses": "60,120,90,120,60,60,50,45,0,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "9291", + "defence_animation": "9287", + "defence_level": "70", + "end_gfx": "1621", + "lifepoints": "100", + "magic_animation": "9260", + "magic_level": "70", + "melee_animation": "9260", + "projectile": "1617", + "range_animation": "9260", + "range_level": "70", + "safespot": null, + "start_gfx": "1618", + "strength_level": "70" + }, + { + "id": "2592", + "name": "TzHaar-Mej", + "examine": "Looks like some kind of mystic.", + "attack_level": "70", + "attack_speed": "5", + "bonuses": "60,120,90,120,60,60,50,45,0,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "9291", + "defence_animation": "9287", + "defence_level": "70", + "end_gfx": "1621", + "lifepoints": "100", + "magic_animation": "9260", + "magic_level": "70", + "melee_animation": "9260", + "projectile": "1617", + "range_animation": "9260", + "range_level": "70", + "safespot": null, + "start_gfx": "1618", + "strength_level": "70" + }, + { + "id": "2593", + "name": "TzHaar-Mej", + "examine": "Looks like some kind of mystic.", + "attack_level": "70", + "attack_speed": "5", + "bonuses": "60,120,90,120,60,60,50,45,0,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "9291", + "defence_animation": "9287", + "defence_level": "70", + "end_gfx": "1621", + "lifepoints": "100", + "magic_animation": "9260", + "magic_level": "70", + "melee_animation": "9260", + "projectile": "1617", + "range_animation": "9260", + "range_level": "70", + "safespot": null, + "start_gfx": "1618", + "strength_level": "70" + }, + { + "id": "2594", + "name": "TzHaar-Mej", + "examine": "Looks like some kind of mystic.", + "attack_level": "70", + "attack_speed": "5", + "bonuses": "60,120,90,120,60,60,50,45,0,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "9291", + "defence_animation": "9287", + "defence_level": "70", + "end_gfx": "1621", + "lifepoints": "100", + "magic_animation": "9260", + "magic_level": "70", + "melee_animation": "9260", + "projectile": "1617", + "range_animation": "9260", + "range_level": "70", + "safespot": null, + "start_gfx": "1618", + "strength_level": "70" + }, + { + "id": "2595", + "name": "TzHaar-Mej", + "examine": "Looks like some kind of mystic.", + "attack_level": "70", + "attack_speed": "5", + "bonuses": "60,120,90,120,60,60,50,45,0,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "9291", + "defence_animation": "9287", + "defence_level": "70", + "end_gfx": "1621", + "lifepoints": "100", + "magic_animation": "9260", + "magic_level": "70", + "melee_animation": "9260", + "projectile": "1617", + "range_animation": "9260", + "range_level": "70", + "safespot": null, + "start_gfx": "1618", + "strength_level": "70" + }, + { + "id": "2596", + "name": "TzHaar-Mej", + "examine": "Looks like some kind of mystic.", + "attack_level": "70", + "attack_speed": "5", + "bonuses": "60,120,90,120,60,60,50,45,0,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "9291", + "defence_animation": "9287", + "defence_level": "70", + "end_gfx": "1621", + "lifepoints": "100", + "magic_animation": "9260", + "magic_level": "70", + "melee_animation": "9260", + "projectile": "1617", + "range_animation": "9260", + "range_level": "70", + "safespot": null, + "start_gfx": "1618", + "strength_level": "70" + }, + { + "id": "2597", + "name": "TzHaar-Mej", + "examine": "Looks like some kind of mystic.", + "attack_level": "70", + "attack_speed": "5", + "bonuses": "60,120,90,120,60,60,50,45,0,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "9291", + "defence_animation": "9287", + "defence_level": "70", + "end_gfx": "1621", + "lifepoints": "100", + "magic_animation": "9260", + "magic_level": "70", + "melee_animation": "9260", + "projectile": "1617", + "range_animation": "9260", + "range_level": "70", + "safespot": null, + "start_gfx": "1618", + "strength_level": "70" + }, + { + "id": "2598", + "name": "TzHaar-Hur", + "examine": "Looks like a craftsman of some kind.", + "attack_level": "50", + "attack_speed": "5", + "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "50", + "lifepoints": "80", + "magic_animation": "9286", + "magic_level": "50", + "melee_animation": "9286", + "range_animation": "9286", + "range_level": "70", + "safespot": null, + "strength_level": "50" + }, + { + "id": "2599", + "name": "TzHaar-Hur", + "examine": "Looks like a craftsman of some kind.", + "attack_level": "50", + "attack_speed": "5", + "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "50", + "lifepoints": "80", + "magic_animation": "9286", + "magic_level": "50", + "melee_animation": "9286", + "range_animation": "9286", + "range_level": "70", + "safespot": null, + "strength_level": "50" + }, + { + "id": "2600", + "name": "TzHaar-Hur", + "examine": "Looks like a craftsman of some kind.", + "attack_level": "50", + "attack_speed": "5", + "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "50", + "lifepoints": "80", + "magic_animation": "9286", + "magic_level": "50", + "melee_animation": "9286", + "range_animation": "9286", + "range_level": "70", + "safespot": null, + "strength_level": "50" + }, + { + "id": "2601", + "name": "TzHaar-Hur", + "examine": "Looks like a craftsman of some kind.", + "attack_level": "50", + "attack_speed": "5", + "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "50", + "lifepoints": "80", + "magic_animation": "9286", + "magic_level": "50", + "melee_animation": "9286", + "range_animation": "9286", + "range_level": "70", + "safespot": null, + "strength_level": "50" + }, + { + "id": "2602", + "name": "TzHaar-Hur", + "examine": "Looks like a craftsman of some kind.", + "attack_level": "50", + "attack_speed": "5", + "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "50", + "lifepoints": "80", + "magic_animation": "9286", + "magic_level": "50", + "melee_animation": "9286", + "range_animation": "9286", + "range_level": "70", + "safespot": null, + "strength_level": "50" + }, + { + "id": "2603", + "name": "TzHaar-Hur", + "examine": "Looks like a craftsman of some kind.", + "attack_level": "50", + "attack_speed": "5", + "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "50", + "lifepoints": "80", + "magic_animation": "9286", + "magic_level": "50", + "melee_animation": "9286", + "range_animation": "9286", + "range_level": "70", + "safespot": null, + "strength_level": "50" + }, + { + "id": "2604", + "name": "TzHaar-Xil", + "examine": "Doesn't look very social.", + "attack_level": "70", + "bonuses": "50,30,120,120,120,130,20,50,45,0,0,0,0,0,0", + "death_animation": "9291", + "defence_animation": "9287", + "defence_level": "70", + "lifepoints": "120", + "magic_animation": "9345", + "magic_level": "70", + "melee_animation": "9345", + "range_animation": "9345", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "2605", + "name": "TzHaar-Xil", + "examine": "Doesn't look very social.", + "attack_level": "70", + "bonuses": "50,30,120,120,120,130,20,50,45,0,0,0,0,0,0", + "death_animation": "9291", + "defence_animation": "9287", + "defence_level": "70", + "lifepoints": "120", + "magic_animation": "9345", + "magic_level": "70", + "melee_animation": "9345", + "range_animation": "9345", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "2606", + "name": "TzHaar-Xil", + "examine": "Doesn't look very social.", + "attack_level": "70", + "bonuses": "50,30,80,56,80,80,100,60,50,45,45,0,0,0,0", + "combat_style": "1", + "death_animation": "9291", + "defence_animation": "9287", + "defence_level": "70", + "lifepoints": "120", + "magic_animation": "9345", + "magic_level": "70", + "melee_animation": "9345", + "projectile": "442", + "range_animation": "9345", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "2607", + "name": "TzHaar-Xil", + "examine": "Doesn't look very social.", + "attack_level": "70", + "bonuses": "50,30,120,120,120,130,20,50,45,0,0,0,0,0,0", + "death_animation": "9291", + "defence_animation": "9287", + "defence_level": "70", + "lifepoints": "120", + "magic_animation": "9345", + "magic_level": "70", + "melee_animation": "9345", + "range_animation": "9345", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "2608", + "name": "TzHaar-Xil", + "examine": "Doesn't look very social.", + "attack_level": "70", + "bonuses": "50,30,120,120,120,130,20,50,45,0,0,0,0,0,0", + "death_animation": "9291", + "defence_animation": "9287", + "defence_level": "70", + "lifepoints": "120", + "magic_animation": "9345", + "magic_level": "70", + "melee_animation": "9345", + "range_animation": "9345", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "2609", + "name": "TzHaar-Xil", + "examine": "Doesn't look very social.", + "attack_level": "70", + "bonuses": "50,30,80,56,80,80,100,60,50,45,45,0,0,0,0", + "combat_style": "1", + "death_animation": "9291", + "defence_animation": "9287", + "defence_level": "70", + "lifepoints": "120", + "magic_animation": "9345", + "magic_level": "70", + "melee_animation": "9345", + "projectile": "442", + "range_animation": "9345", + "range_level": "70", + "safespot": null, + "slayer_exp": "0", + "strength_level": "70" + }, + { + "id": "2610", + "name": "TzHaar-Ket", + "examine": "Must be a guard or something.", + "attack_level": "70", + "bonuses": "50,120,120,120,130,20,60,45,0,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "70", + "lifepoints": "140", + "magic_animation": "9345", + "magic_level": "70", + "melee_animation": "9345", + "range_animation": "9345", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "2611", + "name": "TzHaar-Ket", + "examine": "Must be a guard or something.", + "attack_level": "70", + "bonuses": "50,120,120,120,130,20,60,45,0,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "70", + "lifepoints": "140", + "magic_animation": "9345", + "magic_level": "70", + "melee_animation": "9345", + "range_animation": "9345", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "2612", + "name": "TzHaar-Ket", + "examine": "Must be a guard or something.", + "attack_level": "70", + "bonuses": "50,120,120,120,130,20,60,45,0,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "70", + "lifepoints": "140", + "magic_animation": "9345", + "magic_level": "70", + "melee_animation": "9345", + "range_animation": "9345", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "2613", + "name": "TzHaar-Ket", + "examine": "Must be a guard or something.", + "attack_level": "70", + "bonuses": "50,120,120,120,130,20,60,45,0,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "70", + "lifepoints": "140", + "magic_animation": "9345", + "magic_level": "70", + "melee_animation": "9345", + "range_animation": "9345", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "2614", + "name": "TzHaar-Ket", + "examine": "Must be a guard or something.", + "attack_level": "70", + "bonuses": "50,120,120,120,130,20,60,45,0,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "70", + "lifepoints": "140", + "magic_animation": "9345", + "magic_level": "70", + "melee_animation": "9345", + "range_animation": "9345", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "2615", + "name": "TzHaar-Ket", + "examine": "Must be a guard or something.", + "attack_level": "70", + "bonuses": "50,120,120,120,130,20,60,45,0,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "70", + "lifepoints": "140", + "magic_animation": "9345", + "magic_level": "70", + "melee_animation": "9345", + "range_animation": "9345", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "2616", + "name": "TzHaar-Ket", + "examine": "Must be a guard or something.", + "attack_level": "70", + "bonuses": "50,120,120,120,130,20,60,45,0,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "70", + "lifepoints": "140", + "magic_animation": "9345", + "magic_level": "70", + "melee_animation": "9345", + "range_animation": "9345", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "2617", + "name": "TzHaar-Mej-Jal", + "examine": "Another one of those mystic-types." + }, + { + "id": "2618", + "name": "TzHaar-Mej-Kah", + "examine": "Another one of those mystic-types." + }, + { + "id": "2619", + "name": "TzHaar-Ket-Zuh", + "examine": "Maybe it'll guard my possessions." + }, + { + "id": "2620", + "name": "TzHaar-Hur-Tel", + "examine": "Wonder what it's making." + }, + { + "id": "2621", + "name": "Olaf Hardson", + "examine": "A soggy, smelly Fremennik." + }, + { + "id": "2622", + "name": "TzHaar-Hur-Lek", + "examine": "Wonder what it's making." + }, + { + "id": "2623", + "name": "TzHaar-Mej-Roh", + "examine": "Another one of those mystic-types." + }, + { + "id": "2624", + "name": "TzHaar-Ket" + }, + { + "id": "2625", + "name": "TzHaar-Ket" + }, + { + "id": "2626", + "name": "Rocks" + }, + { + "id": "2627", + "name": "Tz-Kih", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "7", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2628", + "name": "Tz-Kih", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "7", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2629", + "name": "Tz-Kek", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "defence_level": "1", + "lifepoints": "20", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2630", + "name": "Tz-Kek", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "defence_level": "1", + "lifepoints": "20", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2631", + "name": "Tok-Xil", + "examine": "The Tok-Xil fires deadly spines out of its arm", + "aggressive": "true", + "attack_level": "1", + "defence_animation": "0", + "defence_level": "80", + "lifepoints": "114", + "magic_animation": "0", + "range_animation": "0", + "range_level": "80", + "safespot": null, + "strength_level": "1", + "weakness": "10" + }, + { + "id": "2632", + "name": "Tok-Xil" + }, + { + "id": "2633", + "name": "Wise Old Man" + }, + { + "id": "2634", + "name": "Miss Schism", + "examine": "A busy-body who loves a bit of gossip.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2635", + "name": "Bob" + }, + { + "id": "2636", + "name": "Bob" + }, + { + "id": "2637", + "name": "Sphinx" + }, + { + "id": "2638", + "name": "Neite" + }, + { + "id": "2639", + "name": "Robert the Strong" + }, + { + "id": "2640", + "name": "Odysseus" + }, + { + "id": "2641", + "name": "Dragonkin", + "attack_level": "1", + "combat_audio": "408,410,409", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2642", + "name": "King Black Dragon" + }, + { + "id": "2643", + "name": "R4ng3rNo0b889" + }, + { + "id": "2644", + "name": "Love Cats" + }, + { + "id": "2645", + "name": "Love Cats" + }, + { + "id": "2646", + "name": "Neite" + }, + { + "id": "2647", + "name": "Bob" + }, + { + "id": "2648", + "name": "Beite" + }, + { + "id": "2649", + "name": "Gnome" + }, + { + "id": "2650", + "name": "Gnome" + }, + { + "id": "2651", + "name": "Odysseus" + }, + { + "id": "2652", + "name": "Neite" + }, + { + "id": "2654", + "name": "Unferth" + }, + { + "id": "2655", + "name": "Unferth", + "examine": "Nice but dim." + }, + { + "id": "2656", + "name": "Unferth" + }, + { + "id": "2657", + "name": "Unferth" + }, + { + "id": "2658", + "name": "Unferth" + }, + { + "id": "2659", + "name": "Unferth" + }, + { + "id": "2660", + "name": "Reldo", + "examine": "Reldo the librarian." + }, + { + "id": "2661", + "name": "Reldo" + }, + { + "id": "2662", + "name": "Lazy cat" + }, + { + "id": "2663", + "name": "Lazy cat" + }, + { + "id": "2664", + "name": "Lazy cat" + }, + { + "id": "2665", + "name": "Lazy cat" + }, + { + "id": "2666", + "name": "Lazy cat" + }, + { + "id": "2667", + "name": "Lazy cat" + }, + { + "id": "2668", + "name": "Wily cat" + }, + { + "id": "2669", + "name": "Wily cat" + }, + { + "id": "2670", + "name": "Wily cat" + }, + { + "id": "2671", + "name": "Wily cat" + }, + { + "id": "2672", + "name": "Wily cat" + }, + { + "id": "2673", + "name": "Wily cat" + }, + { + "id": "2674", + "name": "Thief", + "examine": "Known for his light-fingered qualities.", + "attack_level": "10", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "14", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "10", + "weakness": "9" + }, + { + "id": "2675", + "name": "Man", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2676", + "name": "Make-over Mage" + }, + { + "id": "2677", + "name": "Highwayman", + "examine": "He holds up passers by.", + "aggressive": "true", + "attack_level": "8", + "attack_speed": "5", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "8", + "lifepoints": "13", + "magic_animation": "799", + "melee_animation": "799", + "range_animation": "799", + "range_level": "1", + "safespot": null, + "strength_level": "8", + "weakness": "7" + }, + { + "id": "2678", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "2679", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "2680", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "2681", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "2682", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "3102,3104,3103", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "2", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2683", + "name": "Hengel", + "examine": "A citizen of Rimmington.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2684", + "name": "Anja", + "examine": "A citizen of Rimmington.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2685", + "name": "Hobgoblin", + "examine": "An ugly smelly creature.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "combat_audio": "469,472,471", + "death_animation": "167", + "defence_animation": "165", + "defence_level": "1", + "lifepoints": "29", + "magic_animation": "164", + "melee_animation": "164", + "range_animation": "164", + "range_level": "20", + "safespot": null, + "strength_level": "10" + }, + { + "id": "2686", + "name": "Hobgoblin", + "examine": "An ugly smelly creature.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "combat_audio": "469,472,471", + "death_animation": "167", + "defence_animation": "165", + "defence_level": "1", + "lifepoints": "29", + "magic_animation": "164", + "melee_animation": "164", + "range_animation": "164", + "range_level": "20", + "safespot": null, + "strength_level": "10" + }, + { + "id": "2687", + "name": "Hobgoblin", + "examine": "An ugly smelly creature.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "combat_audio": "469,472,471", + "death_animation": "167", + "defence_animation": "165", + "defence_level": "1", + "lifepoints": "29", + "magic_animation": "164", + "melee_animation": "164", + "range_animation": "164", + "range_level": "20", + "safespot": null, + "strength_level": "10" + }, + { + "id": "2688", + "name": "Hobgoblin", + "examine": "An ugly smelly creature, with a spear.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "6", + "combat_audio": "3520,472,471", + "death_animation": "167", + "defence_animation": "165", + "defence_level": "1", + "lifepoints": "29", + "magic_animation": "163", + "melee_animation": "163", + "range_animation": "163", + "range_level": "20", + "safespot": null, + "strength_level": "10" + }, + { + "id": "2689", + "name": "Frog", + "examine": "Didn't the mage say this procedure was totally safe?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2690", + "name": "Jack Seagull", + "examine": "A salty seafarer. Needs a wash.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2691", + "name": "Longbow Ben", + "examine": "A strange man with a strange name. Probably a strange past, too.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2692", + "name": "Ahab", + "examine": "So what can one do with a drunken sailor?" + }, + { + "id": "2693", + "name": "Duck", + "examine": "She quackers.", + "attack_level": "1", + "death_animation": "3468", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "1", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "water_npc": "true", + "weakness": "8" + }, + { + "id": "2694", + "name": "Duckling", + "examine": "Mini quackers.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "3468", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "1", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "water_npc": "true", + "weakness": "8" + }, + { + "id": "2695", + "name": "Pirate", + "examine": "This one's had too much to drink!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", "lifepoints": "20", "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2696", + "name": "Thief", + "examine": "Known for his light-fingered qualities.", + "attack_level": "11", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "11", + "lifepoints": "15", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "11", + "weakness": "8" + }, + { + "id": "2697", + "name": "Mugger", + "examine": "He doesn't look so happy now he's in jail.", + "aggressive": "true", + "attack_level": "11", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "11", + "lifepoints": "15", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "11", + "weakness": "8" + }, + { + "id": "2698", + "name": "Black knight", + "examine": "A dark-hearted knight.", + "aggressive": "true", + "attack_level": "25", + "attack_speed": "5", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "42", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "24", + "weakness": "7" + }, + { + "id": "2699", + "name": "Guard", + "examine": "He's guarding the prison.", + "attack_level": "13", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "13", + "weakness": "7" + }, + { + "id": "2700", + "name": "Guard", + "examine": "A prison guard.", + "attack_level": "13", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "13", + "weakness": "7" + }, + { + "id": "2701", + "name": "Guard", + "examine": "A prison guard.", + "attack_level": "13", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "13", + "weakness": "7" + }, + { + "id": "2702", + "name": "Guard", + "examine": "A prison guard.", + "attack_level": "13", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "13", + "weakness": "7" + }, + { + "id": "2703", + "name": "Guard", + "examine": "A prison guard.", + "attack_level": "13", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "13", + "weakness": "7" + }, + { + "id": "2704", + "name": "Guard", + "examine": "He's asleep.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2705", + "name": "Guard", + "examine": "Keeping an eye out for suspicious activity.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2706", + "name": "Crab", + "examine": "No one likes crabs...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2707", + "name": "Seagull", + "examine": "A sea bird.", + "attack_level": "1", + "combat_audio": "309,311,310", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2708", + "name": "Seagull" + }, + { + "id": "2709", + "name": "Fire wizard", + "examine": "Caution: HOT!", + "attack_level": "1", + "combat_style": "2", + "death_animation": "2553", + "defence_animation": "0", + "defence_level": "18", + "end_gfx": "101", + "lifepoints": "25", + "magic_animation": "711", + "magic_level": "18", + "melee_animation": "414", + "projectile": "100", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "99", + "start_height": "80", + "strength_level": "1", + "weakness": "3" + }, + { + "id": "2710", + "name": "Water wizard", + "examine": "Hydro-power!", + "attack_level": "1", + "combat_style": "2", + "death_animation": "2553", + "defence_animation": "0", + "defence_level": "14", + "lifepoints": "20", + "magic_animation": "711", + "magic_level": "14", + "melee_animation": "414", + "projectile": "94", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "93", + "start_height": "80", + "strength_level": "1", + "weakness": "3" + }, + { + "id": "2711", + "name": "Earth wizard", + "examine": "His hands are covered in mud, at least.", + "attack_level": "1", + "combat_style": "2", + "death_animation": "2553", + "defence_animation": "0", + "defence_level": "16", + "end_gfx": "98", + "lifepoints": "22", + "magic_animation": "711", + "magic_level": "16", + "melee_animation": "414", + "projectile": "97", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "96", + "start_height": "80", + "strength_level": "1", + "weakness": "3" + }, + { + "id": "2712", + "name": "Air wizard", + "examine": "At least he looks solid enough to fight.", + "attack_level": "1", + "combat_style": "2", + "death_animation": "2553", + "defence_animation": "0", + "defence_level": "12", + "end_gfx": "92", + "lifepoints": "17", + "magic_animation": "711", + "magic_level": "12", + "melee_animation": "414", + "projectile": "91", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "90", + "start_height": "80", + "strength_level": "1", + "weakness": "3" + }, + { + "id": "2713", + "name": "Malignius Mortifer", + "examine": "A master of necromancy!" + }, + { + "id": "2714", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "2715", + "name": "Skeleton", + "attack_level": "1", + "combat_audio": "774,775,777", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2716", + "name": "Ghost", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "2717", + "name": "Skeleton mage", + "attack_level": "1", + "combat_audio": "774,775,777", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2718", + "name": "Betty", + "examine": "She'll store my items for me.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2719", + "name": "Grum" + }, + { + "id": "2720", + "name": "Gerrant" + }, + { + "id": "2721", + "name": "Wydin" + }, + { + "id": "2722", + "name": "Fishing spot" + }, + { + "id": "2723", + "name": "Fishing spot" + }, + { + "id": "2724", + "name": "Fishing spot" + }, + { + "id": "2725", + "name": "Otto Godblessed", + "examine": "A wise barbarian, apparently. He still looks like a thug.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2726", + "name": "Gull", + "examine": "A sea bird.", + "water_npc": "true" + }, + { + "id": "2727", + "name": "Gull" + }, + { + "id": "2728", + "name": "Monk of Entrana", + "examine": "Holy looking.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2729", + "name": "Monk of Entrana", + "examine": "Holy looking.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2730", + "name": "Monk of Entrana" + }, + { + "id": "2731", + "name": "Monk of Entrana", + "examine": "Holy looking.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2732", + "name": "Master Crafter", + "examine": "He works in the Crafting Guild.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2733", + "name": "Master Crafter", + "examine": "He wanders around the Crafting Guild pretending to be working.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2734", + "name": "Tz-Kih", + "examine": "Hangs out in caves.", + "aggressive": "true", + "attack_level": "30", + "attack_speed": "5", + "bonuses": "150,22,22,22,22,11,0,0,0,0,0,0,0,0,0", + "death_animation": "9230", + "defence_animation": "9231", + "defence_level": "11", + "lifepoints": "10", + "magic_animation": "9232", + "melee_animation": "9232", + "range_animation": "9232", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "27" + }, + { + "id": "2735", + "name": "Tz-Kih", + "examine": "Hangs out in caves.", + "aggressive": "true", + "attack_level": "30", + "attack_speed": "5", + "bonuses": "150,22,22,22,22,11,0,0,0,0,0,0,0,0,0", + "death_animation": "9230", + "defence_animation": "9231", + "defence_level": "11", + "lifepoints": "10", + "magic_animation": "9232", + "melee_animation": "9232", + "range_animation": "9232", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "27" + }, + { + "id": "2736", + "name": "Tz-Kek", + "examine": "Looks like living lava...", + "aggressive": "true", + "attack_level": "60", + "attack_speed": "5", + "bonuses": "80,45,45,45,45,22,0,0,0,0,0,0,0,0,0", + "death_animation": "9234", + "defence_animation": "9235", + "defence_level": "22", + "lifepoints": "20", + "magic_animation": "9233", + "magic_level": "20", + "melee_animation": "9233", + "range_animation": "9233", + "range_level": "20", + "safespot": null, + "strength_level": "60" + }, + { + "id": "2737", + "name": "Tz-Kek", + "examine": "Looks like living lava...", + "aggressive": "true", + "attack_level": "60", + "attack_speed": "5", + "bonuses": "80,45,45,45,45,22,0,0,0,0,0,0,0,0,0", + "death_animation": "9234", + "defence_animation": "9235", + "defence_level": "22", + "lifepoints": "20", + "magic_animation": "9233", + "magic_level": "20", + "melee_animation": "9233", + "range_animation": "9233", + "range_level": "20", + "safespot": null, + "strength_level": "60" + }, + { + "id": "2738", + "name": "Tz-Kek", + "examine": "Looks like living lava...", + "attack_level": "30", + "attack_speed": "5", + "bonuses": "60,22,22,22,22,11,0,0,0,0,0,0,0,0,0", + "death_animation": "9234", + "defence_animation": "9235", + "defence_level": "11", + "lifepoints": "10", + "magic_animation": "9233", + "melee_animation": "9233", + "range_animation": "9233", + "range_level": "1", + "safespot": null, + "strength_level": "30" + }, + { + "id": "2739", + "name": "Tok-Xil", + "examine": "I don't like the look of those spines...", + "attack_level": "80", + "attack_speed": "5", + "bonuses": "80,90,86,90,90,90,45,55,26,55,0,0,0,0,0", + "death_animation": "9239", + "defence_animation": "9242", + "defence_level": "45", + "lifepoints": "40", + "magic_animation": "9245", + "melee_animation": "9245", + "range_animation": "9245", + "range_level": "80", + "safespot": null, + "strength_level": "80", + "weakness": "4" + }, + { + "id": "2740", + "name": "Tok-Xil", + "examine": "I don't like the look of those spines...", + "attack_level": "80", + "attack_speed": "5", + "bonuses": "80,90,86,90,90,90,45,55,26,55,0,0,0,0,0", + "death_animation": "9239", + "defence_animation": "9242", + "defence_level": "45", + "lifepoints": "40", + "magic_animation": "9245", + "melee_animation": "9245", + "range_animation": "9245", + "range_level": "80", + "safespot": null, + "strength_level": "80", + "weakness": "4" + }, + { + "id": "2741", + "name": "Yt-MejKot", + "examine": "Holy reptile...", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "5", + "bonuses": "100,180,180,180,180,90,97,0,0,0,0,0,0,0,0", + "death_animation": "9257", + "defence_animation": "9249", + "defence_level": "90", + "lifepoints": "80", + "magic_animation": "9252", + "melee_animation": "9252", + "range_animation": "9252", + "range_level": "1", + "safespot": null, + "strength_level": "100" + }, + { + "id": "2742", + "name": "Yt-MejKot", + "examine": "Holy reptile...", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "5", + "bonuses": "100,180,180,180,180,90,97,0,0,0,0,0,0,0,0", + "death_animation": "9257", + "defence_animation": "9249", + "defence_level": "90", + "lifepoints": "80", + "magic_animation": "9252", + "melee_animation": "9252", + "range_animation": "9252", + "range_level": "1", + "safespot": null, + "strength_level": "100" + }, + { + "id": "2743", + "name": "Ket-Zek", + "examine": "That's one hot dog!", + "attack_level": "150", + "attack_speed": "5", + "bonuses": "180,180,280,280,280,250,140,152,131,0,0,0,0,0,0", + "death_animation": "9269", + "defence_animation": "9268", + "defence_level": "180", + "lifepoints": "160", + "magic_animation": "9265", + "magic_level": "150", + "melee_animation": "9265", + "range_animation": "9265", + "range_level": "1", + "safespot": null, + "strength_level": "150" + }, + { + "id": "2744", + "name": "Ket-Zek", + "examine": "That's one hot dog!", + "attack_level": "150", + "attack_speed": "5", + "bonuses": "180,180,280,280,280,250,140,152,131,0,0,0,0,0,0", + "death_animation": "9269", + "defence_animation": "9268", + "defence_level": "180", + "lifepoints": "160", + "magic_animation": "9265", + "magic_level": "150", + "melee_animation": "9265", + "range_animation": "9265", + "range_level": "1", + "safespot": null, + "strength_level": "150" + }, + { + "id": "2745", + "name": "TzTok-Jad", + "examine": "This is going to hurt...", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "640", + "attack_speed": "8", + "bonuses": "0,0,0,60,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "9279", + "defence_animation": "9278", + "defence_level": "480", + "lifepoints": "250", + "magic_animation": "9277", + "magic_level": "480", + "melee_animation": "9277", + "range_animation": "9277", + "range_level": "960", + "safespot": null, + "slayer_exp": "0", + "strength_level": "960", + "weakness": "10" + }, + { + "id": "2746", + "name": "Yt-HurKot", + "examine": "Mini Menace.", + "aggressive": "true", + "attack_level": "75", + "attack_speed": "5", + "bonuses": "100,110,110,110,110,60,110,30,0,0,0,0,0,0,0", + "death_animation": "9257", + "defence_animation": "9253", + "defence_level": "75", + "lifepoints": "40", + "magic_animation": "9252", + "melee_animation": "9252", + "range_animation": "9252", + "range_level": "1", + "safespot": null, + "strength_level": "75" + }, + { + "id": "2747", + "name": "Solus Dellagar" + }, + { + "id": "2748", + "name": "Savant" + }, + { + "id": "2749", + "name": "Lord Daquarius" + }, + { + "id": "2750", + "name": "Solus Dellagar" + }, + { + "id": "2751", + "name": "Black Knight" + }, + { + "id": "2752", + "name": "Lord Daquarius" + }, + { + "id": "2753", + "name": "Mage of Zamorak" + }, + { + "id": "2754", + "name": "Mage of Zamorak" + }, + { + "id": "2755", + "name": "Mage of Zamorak" + }, + { + "id": "2756", + "name": "Woman" + }, + { + "id": "2759", + "name": "null", + "examine": "She can look after my money.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2776", + "name": "Woman", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "511,506,505", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2777", + "name": "Black Knight" + }, + { + "id": "2778", + "name": "Black Knight" + }, + { + "id": "2779", + "name": "Ranger", + "examine": "A Ranger of the Temple Knights.", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "20", + "magic_animation": "0", + "melee_animation": "426", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2780", + "name": "Solus Dellagar" + }, + { + "id": "2781", + "name": "Gnome guard" + }, + { + "id": "2782", + "name": "Shadow", + "examine": "A shadow.", + "aggressive": "true", + "attack_level": "68", + "attack_speed": "5", + "death_animation": "2739", + "defence_animation": "0", + "defence_level": "68", + "lifepoints": "100", + "magic_animation": "0", + "melee_animation": "2738", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "68", + "weakness": "6" + }, + { + "id": "2783", + "name": "Dark beast", + "examine": "From a darker dimension.", + "aggressive": "true", + "attack_level": "140", "attack_speed": "4", - "strength_level": "8", - "id": "371", - "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", - "attack_level": "8" + "bonuses": "0,0,0,0,0,30,40,100,90,100,0,0,0,0,0", + "can_tolerate": "false", + "combat_audio": "389,391,390", + "death_animation": "2733", + "defence_animation": "2732", + "defence_level": "120", + "lifepoints": "220", + "magic_animation": "2731", + "magic_level": "160", + "melee_animation": "2731", + "range_animation": "2731", + "range_level": "1", + "safespot": null, + "slayer_exp": "225", + "strength_level": "160", + "weakness": "4" }, { - "examine": "In charge of people with silly outfits.", - "name": "Head Mourner", - "id": "716" - }, - { - "examine": "A mourner, or plague healer.", + "id": "2784", "name": "Mourner", - "id": "2784" + "examine": "A mourner, or plague healer." }, { - "examine": "She looks concerned.", - "name": "Elena", - "id": "3215" + "id": "2785", + "name": "Slave", + "examine": "Digging.", + "attack_level": "", + "death_animation": "", + "defence_animation": "", + "defence_level": "", + "lifepoints": "", + "magic_animation": "", + "melee_animation": "", + "range_animation": "", + "range_level": "", + "safespot": null, + "strength_level": "" }, { - "examine": "She looks concerned.", - "name": "Elena", - "id": "715" + "id": "2786", + "name": "Slave", + "examine": "Digging.", + "attack_level": "", + "death_animation": "", + "defence_animation": "", + "defence_level": "", + "lifepoints": "", + "magic_animation": "", + "melee_animation": "", + "range_animation": "", + "range_level": "", + "safespot": null, + "strength_level": "" }, { - "examine": "She doesn't look too happy.", - "name": "Elena", - "id": "3209" + "id": "2787", + "name": "Slave", + "examine": "Confused.", + "attack_level": "", + "death_animation": "", + "defence_animation": "", + "defence_level": "", + "lifepoints": "", + "magic_animation": "", + "melee_animation": "", + "range_animation": "", + "range_level": "", + "safespot": null, + "strength_level": "" }, { - "examine": "She doesn't look too happy.", - "name": "Elena", - "id": "335" + "id": "2788", + "name": "Thorgel" }, { - "examine": "He looks angry and smells drunk.", + "id": "2790", + "name": "Sergeant Damien", + "examine": "Drill Sergeant from heck!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2791", + "name": "Pillory Guard" + }, + { + "id": "2792", + "name": "Tramp", + "examine": "A man down on his luck.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2793", + "name": "Tramp" + }, + { + "id": "2794", + "name": "Tramp" + }, + { + "id": "2795", + "name": "Skippy" + }, + { + "id": "2796", "name": "Skippy", - "id": "2796" + "examine": "He looks angry and smells drunk." }, { - "examine": "Angry and stressed, he doesn't seem to have time for anything other than sand.", + "id": "2797", + "name": "Skippy" + }, + { + "id": "2798", + "name": "Skippy" + }, + { + "id": "2799", + "name": "Skippy" + }, + { + "id": "2800", + "name": "A pile of broken glass" + }, + { + "id": "2801", + "name": "Ogre", + "examine": "Big, ugly, and smelly.", + "aggressive": "true", + "attack_level": "54", + "attack_speed": "6", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "54", + "lifepoints": "60", + "magic_animation": "359", + "melee_animation": "359", + "range_animation": "359", + "range_level": "1", + "safespot": null, + "strength_level": "54" + }, + { + "id": "2802", + "name": "Gnome Coach", + "examine": "They just call him 'Coach'.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2803", + "name": "Lizard", + "examine": "A cold-blooded creature, partial to warmth.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "2778", + "defence_animation": "2777", + "defence_level": "55", + "lifepoints": "40", + "magic_animation": "2776", + "melee_animation": "2776", + "range_animation": "2776", + "range_level": "55", + "safespot": null, + "slayer_exp": "40", + "strength_level": "1", + "weakness": "0" + }, + { + "id": "2804", + "name": "Desert Lizard", + "examine": "A cold-blooded creature, partial to warmth.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "2778", + "defence_animation": "2777", + "defence_level": "45", + "lifepoints": "25", + "magic_animation": "2776", + "melee_animation": "2776", + "range_animation": "2776", + "range_level": "45", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1", + "weakness": "0" + }, + { + "id": "2805", + "name": "Desert Lizard", + "examine": "A cold-blooded creature, partial to warmth.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "2778", + "defence_animation": "2777", + "defence_level": "45", + "lifepoints": "25", + "magic_animation": "2776", + "melee_animation": "2776", + "range_animation": "2776", + "range_level": "45", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1", + "weakness": "0" + }, + { + "id": "2806", + "name": "Desert Lizard", + "examine": "A cold-blooded creature, partial to warmth.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "2778", + "defence_animation": "2777", + "defence_level": "45", + "lifepoints": "25", + "magic_animation": "2776", + "melee_animation": "2776", + "range_animation": "2776", + "range_level": "45", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "2807", + "name": "Small Lizard", + "examine": "A cold-blooded creature, partial to warmth.", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "2778", + "defence_animation": "2777", + "defence_level": "15", + "lifepoints": "15", + "magic_animation": "2776", + "melee_animation": "2776", + "range_animation": "2776", + "range_level": "15", + "safespot": null, + "slayer_exp": "15", + "strength_level": "1", + "weakness": "0" + }, + { + "id": "2808", + "name": "Small Lizard", + "examine": "A cold-blooded creature, partial to warmth.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "2778", + "defence_animation": "2777", + "defence_level": "15", + "lifepoints": "15", + "magic_animation": "2776", + "melee_animation": "2776", + "range_animation": "2776", + "range_level": "15", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "2809", + "name": "Al the Camel", + "examine": "A camel who has the soul of a poet.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2810", + "name": "Elly the Camel", + "examine": "A camel whose love is unrequited.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2811", + "name": "Ollie the Camel", + "examine": "A camel who wants to fly some day.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2812", + "name": "Cam the Camel", + "examine": "A camel who likes to rest.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2813", + "name": "Alice the Camel" + }, + { + "id": "2815", + "name": "Neferti the Camel", + "examine": "A camel who wants to see the world.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2816", + "name": "Ali the Smith" + }, + { + "id": "2821", + "name": "Ali the Farmer" + }, + { + "id": "2822", + "name": "Ali the Tailor" + }, + { + "id": "2823", + "name": "Ali the Guard" + }, + { + "id": "2824", + "name": "Ellis", + "examine": "Manufacturer of fine leathers." + }, + { + "id": "2825", + "name": "Pirate Pete", + "examine": "A shifty-looking character.", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2826", + "name": "Pirate Pete", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2827", + "name": "Captain Braindeath", + "examine": "A shabby-looking leader.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2828", + "name": "50% Luke", + "examine": "Most of an angry", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2829", + "name": "Davey" + }, + { + "id": "2830", + "name": "Captain Donnie", + "examine": "I wonder if it was all the 'rum' that pickled him.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2831", + "name": "Zombie protester", + "examine": "Sticking it to 'The Man'.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2832", + "name": "Zombie protester", + "examine": "Sticking it to 'The Man'.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2833", + "name": "Zombie protester", + "examine": "Sticking it to 'The Man'.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2834", + "name": "Zombie protester", + "examine": "Sticking it to 'The Man'.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2835", + "name": "Zombie protester", + "examine": "Sticking it to 'The Man'.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2836", + "name": "Zombie protester", + "examine": "Sticking it to 'The Man'.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2837", + "name": "Zombie pirate", + "examine": "An undead sea scoundrel.", + "aggressive": "true", + "attack_level": "36", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "0", + "defence_level": "36", + "lifepoints": "51", + "magic_animation": "0", + "melee_animation": "5647", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "36", + "weakness": "6" + }, + { + "id": "2838", + "name": "Zombie pirate", + "examine": "An undead sea scoundrel.", + "aggressive": "true", + "attack_level": "36", + "combat_audio": "703,705,704", + "death_animation": "5654", + "defence_animation": "0", + "defence_level": "36", + "lifepoints": "51", + "magic_animation": "0", + "melee_animation": "5651", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "36", + "weakness": "6" + }, + { + "id": "2839", + "name": "Zombie pirate", + "examine": "An undead sea scoundrel.", + "aggressive": "true", + "attack_level": "36", + "combat_audio": "703,705,704", + "death_animation": "5654", + "defence_animation": "0", + "defence_level": "36", + "lifepoints": "51", + "magic_animation": "0", + "melee_animation": "5651", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "36", + "weakness": "6" + }, + { + "id": "2840", + "name": "Zombie pirate", + "examine": "An undead sea scoundrel.", + "aggressive": "true", + "attack_level": "36", + "combat_audio": "703,705,704", + "death_animation": "5654", + "defence_animation": "0", + "defence_level": "36", + "lifepoints": "51", + "magic_animation": "0", + "melee_animation": "5651", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "36", + "weakness": "6" + }, + { + "id": "2841", + "name": "Zombie pirate", + "examine": "An undead sea scoundrel.", + "aggressive": "true", + "attack_level": "36", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "0", + "defence_level": "36", + "lifepoints": "51", + "magic_animation": "0", + "melee_animation": "5647", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "36", + "weakness": "6" + }, + { + "id": "2842", + "name": "Zombie pirate", + "examine": "An undead sea scoundrel.", + "aggressive": "true", + "attack_level": "36", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "0", + "defence_level": "36", + "lifepoints": "51", + "magic_animation": "0", + "melee_animation": "5647", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "36", + "weakness": "6" + }, + { + "id": "2843", + "name": "Zombie swab", + "examine": "He talks a good fight.", + "aggressive": "true", + "attack_level": "34", + "death_animation": "5649", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "melee_animation": "5647", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "34", + "weakness": "6" + }, + { + "id": "2844", + "name": "Zombie swab", + "examine": "He talks a good fight.", + "aggressive": "true", + "attack_level": "34", + "death_animation": "5649", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "melee_animation": "5647", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "34", + "weakness": "6" + }, + { + "id": "2845", + "name": "Zombie swab", + "examine": "He talks a good fight.", + "aggressive": "true", + "attack_level": "34", + "death_animation": "5654", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "melee_animation": "5651", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "34", + "weakness": "6" + }, + { + "id": "2846", + "name": "Zombie swab", + "examine": "He talks a good fight.", + "aggressive": "true", + "attack_level": "34", + "death_animation": "5654", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "melee_animation": "5651", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "34", + "weakness": "6" + }, + { + "id": "2847", + "name": "Zombie swab", + "examine": "He talks a good fight.", + "aggressive": "true", + "attack_level": "34", + "death_animation": "5649", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "melee_animation": "5647", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "34", + "weakness": "6" + }, + { + "id": "2848", + "name": "Zombie swab", + "examine": "He talks a good fight.", + "aggressive": "true", + "attack_level": "34", + "death_animation": "5649", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "melee_animation": "5647", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "34", + "weakness": "6" + }, + { + "id": "2849", + "name": "Evil spirit", + "examine": "The pun was intended.", + "aggressive": "true", + "attack_level": "40", + "death_animation": "2805", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "57", + "magic_animation": "0", + "magic_level": "40", + "melee_animation": "2804", + "range_animation": "0", + "range_level": "40", + "respawn_delay": "60", + "safespot": null, + "strength_level": "40", + "weakness": "10" + }, + { + "id": "2850", + "name": "Fever spider", + "examine": "A bunch of legs, eyes and teeth.", + "attack_level": "60", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,15,10,15,15,0,0,0,0,0", + "combat_audio": "537,539,538", + "death_animation": "5321", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "40", + "magic_animation": "0", + "melee_animation": "5319", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "40", + "strength_level": "30", + "weakness": "2" + }, + { + "id": "2851", + "name": "Brewer", + "examine": "A worker in the brewery.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2852", + "name": "Brewer", + "examine": "A worker in the brewery.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2853", + "name": "Brewer", + "examine": "A worker in the brewery.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2854", + "name": "Brewer", + "examine": "A worker in the brewery.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2855", + "name": "Brewer", + "examine": "A worker in the brewery.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2856", + "name": "Brewer", + "examine": "A worker in the brewery.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2857", + "name": "Brewer", + "examine": "A worker in the brewery.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2858", + "name": "Brewer", + "examine": "A worker in the brewery.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2859", + "name": "Fishing spot" + }, + { + "id": "2860", + "name": "Amaethwyr", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "2861", + "name": "Teclyn", + "examine": "Looks after your Farming tools." + }, + { + "id": "2862", + "name": "Death" + }, + { + "id": "2863", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "2864", + "name": "Most of a Zombie" + }, + { + "id": "2865", + "name": "Most of a Zombie" + }, + { + "id": "2866", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "2867", + "name": "Most of a Zombie" + }, + { + "id": "2868", + "name": "Zombie Head" + }, + { + "id": "2869", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "2870", + "name": "Half-Zombie" + }, + { + "id": "2871", + "name": "Other Half-Zombie" + }, + { + "id": "2872", + "name": "Child" + }, + { + "id": "2873", + "name": "Child" + }, + { + "id": "2874", + "name": "Child" + }, + { + "id": "2875", + "name": "Child" + }, + { + "id": "2876", + "name": "Child" + }, + { + "id": "2877", + "name": "Child" + }, + { + "id": "2878", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "2879", + "name": "Bardur" + }, + { + "id": "2880", + "name": "Dagannoth fledgeling", + "examine": "A knee-high horror from the ocean depths...", + "aggressive": "true", + "attack_level": "52", + "death_animation": "1581", + "defence_animation": "0", + "defence_level": "52", + "lifepoints": "74", + "magic_animation": "0", + "melee_animation": "1579", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "52", + "weakness": "6" + }, + { + "id": "2881", + "name": "Dagannoth Supreme", + "examine": "The Dagannoth King responsible for the death of Bukalla.", + "agg_radius": "8", + "aggressive": "true", + "attack_level": "255", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,10,10,10,255,550,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "2856", + "defence_animation": "2852", + "defence_level": "128", + "lifepoints": "255", + "magic_level": "255", + "melee_animation": "2855", + "movement_radius": "8", + "projectile": "475", + "range_level": "255", + "respawn_delay": "60", + "safespot": null, + "strength_level": "255" + }, + { + "id": "2882", + "name": "Dagannoth Prime", + "examine": "A legendary Dagannoth King, rumoured to fly on the North winds.", + "agg_radius": "8", + "aggressive": "true", + "attack_level": "255", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,255,255,255,255,10,0,0,0,0,0", + "clue_level": "2", + "combat_style": "2", + "death_animation": "2856", + "defence_animation": "2852", + "defence_level": "255", + "lifepoints": "255", + "magic_level": "255", + "melee_animation": "2854", + "movement_radius": "8", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "spell_id": "48", + "strength_level": "255" + }, + { + "id": "2883", + "name": "Dagannoth Rex", + "examine": "Firstborn of the legendary Dagannoth Kings.", + "agg_radius": "8", + "aggressive": "true", + "attack_level": "255", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,255,255,255,10,255,0,0,0,0,0", + "clue_level": "2", + "death_animation": "2856", + "defence_animation": "2852", + "defence_level": "255", + "lifepoints": "255", + "magic_level": "1", + "melee_animation": "2853", + "movement_radius": "8", + "range_level": "255", + "respawn_delay": "60", + "safespot": null, + "strength_level": "255" + }, + { + "id": "2884", + "name": "Wallasalki" + }, + { + "id": "2885", + "name": "Giant Rock Crab", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,225,200,175,-10,250,0,0,0,0,0", + "combat_audio": "717,723,722", + "death_animation": "1314", + "defence_animation": "1313", + "defence_level": "200", + "lifepoints": "180", + "melee_animation": "1312", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "80" + }, + { + "id": "2886", + "name": "Boulder", + "attack_level": "1", + "attack_speed": "5", + "defence_level": "1", + "lifepoints": "240", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2887", + "name": "Dagannoth", + "aggressive": "true", + "attack_level": "1", + "clue_level": "1", + "combat_style": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "85", + "melee_animation": "1343", + "projectile": "288", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2888", + "name": "Dagannoth", + "aggressive": "true", + "attack_level": "1", + "clue_level": "1", + "combat_style": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "70", + "melee_animation": "1343", + "projectile": "288", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2889", + "name": "Rock lobster", + "examine": "It wasn't a rock... It was a rock lobster!", + "attack_level": "100", + "attack_speed": "2", + "bonuses": "0,0,0,0,0,100,100,50,50,150,0,0,0,0,0", + "combat_audio": "726,728,727", + "death_animation": "2862", + "defence_animation": "2861", + "defence_level": "100", + "lifepoints": "150", + "magic_animation": "2860", + "melee_animation": "2860", + "movement_radius": "30", + "range_animation": "2860", + "range_level": "1", + "safespot": null, + "strength_level": "100", + "weakness": "7" + }, + { + "id": "2890", + "name": "Large rock", + "examine": "A Rock.", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "2", + "death_animation": "2861", + "defence_animation": "2861", + "defence_level": "100", + "lifepoints": "150", + "magic_animation": "2860", + "melee_animation": "2860", + "range_animation": "2860", + "range_level": "1", + "safespot": null, + "strength_level": "100", + "weakness": "7" + }, + { + "id": "2891", + "name": "Suspicious water" + }, + { + "id": "2892", + "name": "Spinolyp", + "examine": "A sneaky, spiny, subterranean sea-dwelling scamp.", + "agg_radius": "12", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "bonuses": "70,50,60,50,10,60,30,10,60,60,70,50,0,0,0", + "combat_style": "2", + "death_animation": "2866", + "defence_animation": "2869", + "defence_level": "1", + "lifepoints": "75", + "magic_animation": "2866", + "magic_level": "65", + "melee_animation": "2868", + "projectile": "294", + "range_animation": "2866", + "range_level": "20", + "respawn_delay": "55", + "safespot": null, + "slayer_exp": "0", + "spell_id": "14", + "strength_level": "10" + }, + { + "id": "2893", + "name": "Suspicious water" + }, + { + "id": "2894", + "name": "Spinolyp", + "examine": "A sneaky, spiny, subterranean sea-dwelling scamp.", + "agg_radius": "12", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "bonuses": "70,50,60,50,10,60,30,10,60,60,70,50,0,0,0", + "combat_style": "2", + "death_animation": "2866", + "defence_animation": "2869", + "defence_level": "1", + "lifepoints": "75", + "magic_animation": "2866", + "magic_level": "65", + "melee_animation": "2868", + "projectile": "294", + "range_animation": "2866", + "range_level": "20", + "respawn_delay": "55", + "safespot": null, + "spell_id": "14", + "strength_level": "10" + }, + { + "id": "2895", + "name": "Suspicious water" + }, + { + "id": "2896", + "name": "Spinolyp", + "examine": "A sneaky, spiny, subterranean sea-dwelling scamp.", + "agg_radius": "12", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "bonuses": "70,50,60,50,10,60,30,10,60,60,70,50,0,0,0", + "combat_style": "2", + "death_animation": "2866", + "defence_animation": "2869", + "defence_level": "1", + "lifepoints": "75", + "magic_animation": "2866", + "magic_level": "65", + "melee_animation": "2868", + "projectile": "294", + "range_animation": "2866", + "range_level": "70", + "respawn_delay": "55", + "safespot": null, + "slayer_exp": "0", + "spell_id": "14", + "strength_level": "60" + }, + { + "id": "2897", + "name": "Father Reen" + }, + { + "id": "2900", + "name": "Father Reen" + }, + { + "id": "2901", + "name": "Father Badden" + }, + { + "id": "2903", + "name": "Father Badden" + }, + { + "id": "2904", + "name": "Denath" + }, + { + "id": "2905", + "name": "Denath" + }, + { + "id": "2906", + "name": "Eric" + }, + { + "id": "2907", + "name": "Eric" + }, + { + "id": "2908", + "name": "Evil Dave" + }, + { + "id": "2910", + "name": "Evil Dave" + }, + { + "id": "2911", + "name": "Matthew" + }, + { + "id": "2912", + "name": "Matthew" + }, + { + "id": "2913", + "name": "Jennifer" + }, + { + "id": "2914", + "name": "Jennifer" + }, + { + "id": "2915", + "name": "Tanya" + }, + { + "id": "2916", + "name": "Tanya" + }, + { + "id": "2917", + "name": "Patrick" + }, + { + "id": "2918", + "name": "Patrick" + }, + { + "id": "2919", + "name": "Agrith Naar", + "aggressive": "true", + "attack_level": "1", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "1", + "lifepoints": "95", + "melee_animation": "64", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2920", + "name": "Sand storm" + }, + { + "id": "2922", + "name": "Clay golem" + }, + { + "id": "2928", + "name": "Clay golem" + }, + { + "id": "2929", + "name": "Ghost" + }, + { + "id": "2931", + "name": "Ghost", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "2932", + "name": "Jorral" + }, + { + "id": "2933", + "name": "Melina" + }, + { + "id": "2935", + "name": "Melina" + }, + { + "id": "2936", + "name": "Droalak" + }, + { + "id": "2938", + "name": "Droalak" + }, + { + "id": "2939", + "name": "Dron" + }, + { + "id": "2940", + "name": "Blanin" + }, + { + "id": "2941", + "name": "The Beast", + "examine": "Who ate all the rats?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2942", + "name": "Bellemorde", + "examine": "Unkempt and a bit smelly." + }, + { + "id": "2943", + "name": "Pox" + }, + { + "id": "2944", + "name": "Pox" + }, + { + "id": "2945", + "name": "Bones", + "examine": "Lovely, cute, and possibly what dreams are made of.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2946", + "name": "Grimesquit", + "examine": "Cracking personality." + }, + { + "id": "2947", + "name": "Phingspet", + "examine": "Lovely girl, shame about the smell." + }, + { + "id": "2948", + "name": "Hooknosed Jack", + "examine": "Obviously punches above his weight.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2949", + "name": "Jimmy Dazzler", + "examine": "Looks rich like an actor of sorts.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2950", + "name": "The Face", + "examine": "Once beautiful, now repugnant.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2951", + "name": "Felkrash" + }, + { + "id": "2952", + "name": "Smokin' Joe", + "examine": "What is he?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2953", + "name": "Ceril Carnillean" + }, + { + "id": "2954", + "name": "Councillor Halgrive" + }, + { + "id": "2955", + "name": "Spice seller" + }, + { + "id": "2956", + "name": "Fur trader" + }, + { + "id": "2957", + "name": "Gem merchant" + }, + { + "id": "2958", + "name": "Silver merchant", + "examine": "Looks fairly well fed.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2959", + "name": "Silk merchant" + }, + { + "id": "2960", + "name": "Zenesha" + }, + { + "id": "2961", + "name": "Ali Morrisane" + }, + { + "id": "2962", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2963", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2964", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2965", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2966", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2967", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2968", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2969", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2970", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2971", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2972", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2973", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2974", + "name": "Rat" + }, + { + "id": "2980", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2981", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2982", + "name": "King rat", + "examine": "The master of all rats.", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2983", + "name": "Turbogroomer" + }, + { + "id": "2984", + "name": "Pusskins", + "examine": "Not a soft touch.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2985", + "name": "Loki" + }, + { + "id": "2986", + "name": "Captain Tom", + "examine": "A not-so friendly, not-so little cat.", + "aggressive": "true", + "attack_level": "10", + "attack_speed": "4", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2987", + "name": "Treacle" + }, + { + "id": "2988", + "name": "Mittens", + "examine": "A fully grown feline.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2989", + "name": "Claude" + }, + { + "id": "2990", + "name": "Topsy", + "examine": "Cute and fluffy.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2991", + "name": "Rauborn" + }, + { + "id": "2992", + "name": "Vaeringk" + }, + { + "id": "2993", + "name": "Oxi" + }, + { + "id": "2994", + "name": "Fior" + }, + { + "id": "2995", + "name": "Sagira" + }, + { + "id": "2996", + "name": "Anleif" + }, + { + "id": "2997", + "name": "Gertrude's cat", + "examine": "A friendly feline?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2998", + "name": "Gambler", + "examine": "Very well to do. I wonder what he's doing here.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "2999", + "name": "Gambler" + }, + { + "id": "3000", + "name": "Barman" + }, + { + "id": "3001", + "name": "Gambler", + "examine": "Rich.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3002", + "name": "Gambler", + "examine": "Poor.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3003", + "name": "Gambler", + "examine": "Poor.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3004", + "name": "Gambler", + "examine": "Poor.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3005", + "name": "Gambler", + "examine": "Poor.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3006", + "name": "Gambler", + "examine": "Poor.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3007", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3008", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3009", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3010", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3011", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3012", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3013", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3014", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3015", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3016", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3017", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3018", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3019", + "name": "Fishing spot" + }, + { + "id": "3020", + "name": "Rug Merchant" + }, + { + "id": "3021", + "name": "Tool leprechaun", + "examine": "Looks after your Farming tools.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3022", + "name": "Genie", + "examine": "Phenomenal cosmic powers", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3023", + "name": "Nirrie" + }, + { + "id": "3024", + "name": "Tirrie" + }, + { + "id": "3025", + "name": "Hallak" + }, + { + "id": "3026", + "name": "Black golem", + "examine": "An animated clay statue.", + "aggressive": "true", + "attack_level": "55", + "death_animation": "2919", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "2917", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "55", + "weakness": "2" + }, + { + "id": "3027", + "name": "White golem", + "examine": "An animated clay statue.", + "aggressive": "true", + "attack_level": "55", + "death_animation": "2919", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "2917", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "55", + "weakness": "0" + }, + { + "id": "3028", + "name": "Grey golem", + "examine": "An animated clay statue.", + "aggressive": "true", + "attack_level": "55", + "death_animation": "2919", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "2917", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "55", + "weakness": "1" + }, + { + "id": "3029", + "name": "Ghaslor the Elder", + "examine": "The oldest man in Nardah.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3030", + "name": "Ali the Carter", + "examine": "A water salesman from Pollnivneach.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3031", + "name": "Usi" + }, + { + "id": "3032", + "name": "Nkuku" + }, + { + "id": "3033", + "name": "Garai" + }, + { + "id": "3034", + "name": "Habibah" + }, + { + "id": "3035", + "name": "Meskhenet" + }, + { + "id": "3036", + "name": "Zahra" + }, + { + "id": "3037", + "name": "Zahur" + }, + { + "id": "3038", + "name": "Seddu" + }, + { + "id": "3039", + "name": "Kazemde" + }, + { + "id": "3040", + "name": "Awusah the Mayor", + "examine": "The Mayor of Nardah.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3041", + "name": "Tarik" + }, + { + "id": "3042", + "name": "Poltenip", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3043", + "name": "Radat", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3044", + "name": "Shiratti the Custodian", + "examine": "Custodian of the shrine to Elidinis.", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3045", + "name": "Rokuh" + }, + { + "id": "3046", + "name": "Nardah Banker", + "examine": "A banker of Nardah.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3047", + "name": "Target" + }, + { + "id": "3048", + "name": "Target" + }, + { + "id": "3049", + "name": "Larxus" + }, + { + "id": "3051", + "name": "Mystery figure", + "examine": "A mysterious watcher.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3052", + "name": "Mystery figure", + "examine": "A mysterious watcher.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3053", + "name": "Mystery figure", + "examine": "A mysterious watcher.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3054", + "name": "Mystery figure", + "examine": "A mysterious watcher.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3055", + "name": "Mystery figure", + "examine": "A mysterious watcher.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3056", + "name": "Mystery figure", + "examine": "A mysterious watcher.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3057", + "name": "Earth Warrior Champion", + "examine": "Champion of the earth warriors.", + "aggressive": "true", + "attack_level": "84", + "death_animation": "2946", + "defence_animation": "0", + "defence_level": "84", + "lifepoints": "108", + "magic_animation": "0", + "melee_animation": "2951", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "84", + "weakness": "7" + }, + { + "id": "3058", + "name": "Giant Champion", + "examine": "Champion of the giants.", + "aggressive": "true", + "attack_level": "36", + "attack_speed": "4", + "death_animation": "6369", + "defence_animation": "0", + "defence_level": "52", + "lifepoints": "70", + "magic_animation": "0", + "melee_animation": "6368", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "35", + "strength_level": "44", + "weakness": "8" + }, + { + "id": "3059", + "name": "Ghoul Champion", + "examine": "Champion of the ghouls.", + "aggressive": "true", + "attack_level": "60", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "441,444,443", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "422", + "range_animation": "0", + "range_level": "60", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "50", + "strength_level": "80", + "weakness": "9" + }, + { + "id": "3060", + "name": "Goblin Champion", + "examine": "Champion of the goblins.", + "attack_level": "1", + "attack_speed": "4", + "combat_audio": "469,472,471", + "death_animation": "6190", + "defence_animation": "0", + "defence_level": "14", + "lifepoints": "32", + "magic_animation": "0", + "magic_level": "26", + "melee_animation": "6188", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "10" + }, + { + "id": "3061", + "name": "Hobgoblin Champion", + "examine": "Champion of the hobgoblins.", + "aggressive": "true", + "attack_level": "44", + "attack_speed": "4", + "combat_audio": "469,472,471", + "combat_style": "1", + "death_animation": "167", + "defence_animation": "165", + "defence_level": "48", + "lifepoints": "58", + "magic_animation": "164", + "melee_animation": "164", + "range_animation": "164", + "range_level": "44", + "respawn_delay": "60", + "safespot": null, + "strength_level": "48", + "weakness": "0" + }, + { + "id": "3062", + "name": "Imp Champion", + "examine": "Champion of the imps.", + "aggressive": "true", + "attack_level": "5", + "attack_speed": "4", + "death_animation": "172", + "defence_animation": "0", + "defence_level": "5", + "lifepoints": "40", + "magic_animation": "0", + "melee_animation": "5285", + "range_animation": "0", + "range_level": "5", + "respawn_delay": "60", + "safespot": null, + "strength_level": "5", + "weakness": "7" + }, + { + "id": "3063", + "name": "Jogre Champion", + "examine": "Champion of the jogres.", + "aggressive": "true", + "attack_level": "86", + "death_animation": "2938", + "defence_animation": "2937", + "defence_level": "86", + "lifepoints": "120", + "magic_animation": "2936", + "melee_animation": "2936", + "poison_amount": "40", + "poisonous": "true", + "range_animation": "2936", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "86", + "weakness": "9" + }, + { + "id": "3064", + "name": "Lesser Demon Champion", + "examine": "Champion of the lesser demons.", + "aggressive": "true", + "attack_level": "136", + "combat_audio": "396,402,401", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "142", + "lifepoints": "148", + "magic_animation": "0", + "magic_level": "136", + "melee_animation": "64", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "79", + "strength_level": "140", + "weakness": "5" + }, + { + "id": "3065", + "name": "Skeleton Champion", + "examine": "Champion of the jogres.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1444", + "defence_animation": "5493", + "defence_level": "54", + "lifepoints": "58", + "magic_animation": "0", + "melee_animation": "5485", + "poisonous": "", + "range_animation": "5493", + "range_level": "36", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "3066", + "name": "Zombies Champion", + "examine": "Champion of the zombies.", + "aggressive": "true", + "attack_level": "26", + "attack_speed": "5", + "death_animation": "5575", + "defence_animation": "0", + "defence_level": "26", + "lifepoints": "37", + "magic_animation": "0", + "melee_animation": "5581", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "26", + "weakness": "9" + }, + { + "id": "3067", + "name": "Leon d'Cour", + "aggressive": "true", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "7050", + "defence_level": "1", + "lifepoints": "123", + "melee_animation": "7049", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3068", + "name": "Skeletal Wyvern", + "examine": "A very dangerous pile of animated Wyvern bones.", + "agg_radius": "6", + "aggressive": "true", + "attack_level": "125", + "attack_speed": "6", + "bonuses": "0,0,0,0,0,140,90,90,80,140,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "0,771,770", + "death_animation": "2987", + "defence_animation": "2983", + "defence_level": "120", + "end_gfx": "501", + "lifepoints": "200", + "magic_animation": "2985", + "magic_level": "125", + "melee_animation": "2985", + "projectile": "500", + "range_animation": "2989", + "range_level": "120", + "safespot": null, + "slayer_exp": "210", + "start_gfx": "499", + "strength_level": "116", + "weakness": "9" + }, + { + "id": "3069", + "name": "Skeletal Wyvern", + "examine": "A very dangerous pile of animated Wyvern bones.", + "agg_radius": "6", + "aggressive": "true", + "attack_level": "125", + "attack_speed": "6", + "bonuses": "0,0,0,0,0,140,90,90,80,140,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "0,771,770", + "death_animation": "2987", + "defence_animation": "2983", + "defence_level": "120", + "end_gfx": "501", + "lifepoints": "200", + "magic_animation": "2985", + "magic_level": "125", + "melee_animation": "2985", + "projectile": "500", + "range_animation": "2989", + "range_level": "120", + "safespot": null, + "slayer_exp": "210", + "start_gfx": "499", + "strength_level": "116", + "weakness": "9" + }, + { + "id": "3070", + "name": "Skeletal Wyvern", + "examine": "A very dangerous pile of animated Wyvern bones.", + "agg_radius": "6", + "aggressive": "true", + "attack_level": "125", + "attack_speed": "6", + "bonuses": "0,0,0,0,0,140,90,90,80,140,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "0,771,770", + "death_animation": "2987", + "defence_animation": "2983", + "defence_level": "120", + "end_gfx": "501", + "lifepoints": "200", + "magic_animation": "2985", + "magic_level": "125", + "melee_animation": "2985", + "projectile": "500", + "range_animation": "2989", + "range_level": "120", + "safespot": null, + "slayer_exp": "210", + "start_gfx": "499", + "strength_level": "116", + "weakness": "9" + }, + { + "id": "3071", + "name": "Skeletal Wyvern", + "examine": "A very dangerous pile of animated Wyvern bones.", + "agg_radius": "6", + "aggressive": "true", + "attack_level": "125", + "attack_speed": "6", + "bonuses": "0,0,0,0,0,140,90,90,80,140,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "0,771,770", + "death_animation": "2987", + "defence_animation": "2983", + "defence_level": "120", + "end_gfx": "501", + "lifepoints": "200", + "magic_animation": "2985", + "magic_level": "125", + "melee_animation": "2985", + "projectile": "500", + "range_animation": "2989", + "range_level": "120", + "safespot": null, + "slayer_exp": "210", + "start_gfx": "499", + "strength_level": "116", + "weakness": "9" + }, + { + "id": "3072", + "name": "Ice giant", + "examine": "He's got icicles in his beard.", + "aggressive": "true", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", + "combat_audio": "448,451,450", + "death_animation": "4673", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "70", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4672", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "70", + "strength_level": "40", + "weakness": "9" + }, + { + "id": "3073", + "name": "Ice warrior", + "examine": "A cold-hearted elemental warrior.", + "aggressive": "true", + "attack_level": "47", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,30,40,20,10,30,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "2500,530,529", + "death_animation": "843", + "defence_animation": "404", + "defence_level": "47", + "lifepoints": "59", + "magic_animation": "451", + "melee_animation": "451", + "range_animation": "451", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "59", + "strength_level": "47", + "weakness": "9" + }, + { + "id": "3074", + "name": "Monk", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3075", + "name": "Monk", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3076", + "name": "Dead Monk" + }, + { + "id": "3078", + "name": "High Priest" + }, + { + "id": "3079", + "name": "Monk", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3080", + "name": "Monk", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3081", + "name": "Assassin" + }, + { + "id": "3082", + "name": "Rosie" + }, + { + "id": "3083", + "name": "Sorcha" + }, + { + "id": "3084", + "name": "Cait" + }, + { + "id": "3085", + "name": "Cormac" + }, + { + "id": "3086", + "name": "Fionn" + }, + { + "id": "3087", + "name": "Donnacha" + }, + { + "id": "3088", + "name": "Ronan" + }, + { + "id": "3089", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3090", + "name": "", + "examine": "A mighty warrior", + "aggressive": "true", + "attack_level": "17", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "17", + "lifepoints": "24", + "magic_animation": "0", + "melee_animation": "7048", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "17", + "weakness": "8" + }, + { + "id": "3091", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3093", + "name": "Flying Book" + }, + { + "id": "3094", + "name": "Flying Book", + "examine": "The book moves by itself!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3095", + "name": "Flying Book" + }, + { + "id": "3096", + "name": "Pizzaz Hat" + }, + { + "id": "3097", + "name": "Entrance Guardian", + "examine": "A guardian of the arena.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3098", + "name": "Telekinetic Guardian", + "examine": "A guardian of the arena.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3099", + "name": "Alchemy Guardian", + "examine": "A guardian of the arena.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3100", + "name": "Enchantment Guardian", + "examine": "A guardian of the arena.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3101", + "name": "Graveyard Guardian", + "examine": "A guardian of the arena.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3102", + "name": "Maze Guardian", + "examine": "A guardian of the arena.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3103", + "name": "Rewards Guardian", + "examine": "A guardian of the arena.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3104", + "name": "Charmed Warrior", + "examine": "Equipment that moves by itself!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3105", + "name": "Charmed Warrior", + "examine": "Equipment that moves by itself!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3106", + "name": "Charmed Warrior", + "examine": "Equipment that moves by itself!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3107", + "name": "Charmed Warrior" + }, + { + "id": "3108", + "name": "Bert" + }, + { + "id": "3109", + "name": "Guard Captain", + "examine": "This guard looks rather drunk and has beer stains down his armour.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3110", + "name": "Sandy" + }, + { + "id": "3112", "name": "Sandy", - "id": "3112" + "examine": "Angry and stressed, he doesn't seem to have time for anything other than sand." }, { - "examine": "I hope she can find all the ingredients!", + "id": "3113", + "name": "Sandy" + }, + { + "id": "3114", + "name": "Mazion" + }, + { + "id": "3115", + "name": "Blaec", + "examine": "Blaec seems to be covered in sand." + }, + { + "id": "3116", + "name": "Reeso" + }, + { + "id": "3117", + "name": "Sandwich lady", + "examine": "The sandwich lady." + }, + { + "id": "3118", + "name": "Prison Pete" + }, + { + "id": "3119", + "name": "Balloon Animal" + }, + { + "id": "3120", + "name": "Balloon Animal" + }, + { + "id": "3121", + "name": "Balloon Animal", + "examine": "Looks after farming tools.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3122", + "name": "Balloon Animal", + "examine": "I saw the witchdoctor", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3123", + "name": "Simon Templeton", + "examine": "Looks like he's seen the inside of a few tombs.", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "12", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": "0", + "strength_level": "1" + }, + { + "id": "3124", + "name": "Pyramid block" + }, + { + "id": "3125", + "name": "Pyramid block" + }, + { + "id": "3126", + "name": "Pentyn" + }, + { + "id": "3127", + "name": "Aristarchus" + }, + { + "id": "3128", + "name": "Boneguard" + }, + { + "id": "3130", + "name": "Pile of bones" + }, + { + "id": "3131", + "name": "Desert Spirit" + }, + { + "id": "3132", + "name": "Crust of ice" + }, + { + "id": "3134", + "name": "Furnace grate" + }, + { + "id": "3135", + "name": "Furnace grate", + "examine": "It seems to be blocked.", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "0", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3136", + "name": "Enakhra" + }, + { + "id": "3138", + "name": "Enakhra" + }, + { + "id": "3139", + "name": "Boneguard" + }, + { + "id": "3141", + "name": "Akthanakos" + }, + { + "id": "3142", + "name": "Akthanakos" + }, + { + "id": "3143", + "name": "Lazim" + }, + { + "id": "3148", + "name": "Enakhra" + }, + { + "id": "3149", + "name": "Akthanakos" + }, + { + "id": "3150", + "name": "Knight", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3151", + "name": "Skeleton", + "attack_level": "1", + "combat_audio": "774,775,777", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3152", + "name": "Harpie Bug Swarm" + }, + { + "id": "3153", + "name": "Harpie Bug Swarm", + "examine": "A swarm of bugs.", + "aggressive": "true", + "attack_level": "54", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,10,5,10,5,10,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "2743,2745,2744", + "death_animation": "1585", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "25", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "1584", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "slayer_exp": "25", + "strength_level": "46", + "weakness": "2" + }, + { + "id": "3154", + "name": "Count Draynor" + }, + { + "id": "3155", + "name": "Bill Teach", + "examine": "Bill Teach the pirate.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3156", + "name": "Bill Teach" + }, + { + "id": "3157", + "name": "Bill Teach" + }, + { + "id": "3158", + "name": "Bill Teach" + }, + { + "id": "3159", + "name": "Bill Teach" + }, + { + "id": "3160", + "name": "Bill Teach" + }, + { + "id": "3161", + "name": "Charley" + }, + { + "id": "3162", + "name": "Smith" + }, + { + "id": "3163", + "name": "Joe" + }, + { + "id": "3164", + "name": "Mama" + }, + { + "id": "3165", + "name": "Mama" + }, + { + "id": "3166", + "name": "Mike", + "examine": "Dodgy Mike." + }, + { + "id": "3167", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3168", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3169", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3170", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3171", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3172", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3173", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3174", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3175", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3176", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3177", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3178", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3179", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3180", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3181", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3182", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3183", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3184", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3185", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3186", + "name": "Pirate", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3187", + "name": "Pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "52", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3188", + "name": "Pirate", + "examine": "Arghh matey!", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", + "combat_audio": "703,705,704", + "death_animation": "9055", + "defence_animation": "388", + "defence_level": "40", + "lifepoints": "45", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "40" + }, + { + "id": "3189", + "name": "Pirate", + "examine": "Arghh matey!", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", + "combat_audio": "703,705,704", + "death_animation": "9055", + "defence_animation": "388", + "defence_level": "40", + "lifepoints": "45", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "40" + }, + { + "id": "3190", + "name": "Pirate", + "examine": "Arghh matey!", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", + "combat_audio": "703,705,704", + "death_animation": "9055", + "defence_animation": "388", + "defence_level": "40", + "lifepoints": "45", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "40" + }, + { + "id": "3191", + "name": "Pirate", + "examine": "Arghh matey!", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", + "combat_audio": "703,705,704", + "death_animation": "9055", + "defence_animation": "388", + "defence_level": "40", + "lifepoints": "45", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "40" + }, + { + "id": "3192", + "name": "Pirate", + "examine": "Arghh matey!", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", + "combat_audio": "703,705,704", + "death_animation": "9055", + "defence_animation": "388", + "defence_level": "40", + "lifepoints": "45", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "40" + }, + { + "id": "3193", + "name": "Pirate", + "examine": "Arghh matey!", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", + "combat_audio": "703,705,704", + "death_animation": "9055", + "defence_animation": "388", + "defence_level": "40", + "lifepoints": "45", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "40" + }, + { + "id": "3194", + "name": "Pirate", + "examine": "Arghh matey!", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", + "combat_audio": "703,705,704", + "death_animation": "9055", + "defence_animation": "388", + "defence_level": "40", + "lifepoints": "45", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "40" + }, + { + "id": "3195", + "name": "Pirate", + "examine": "Arghh matey!", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", + "combat_audio": "703,705,704", + "death_animation": "9055", + "defence_animation": "388", + "defence_level": "40", + "lifepoints": "45", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "40" + }, + { + "id": "3196", + "name": "Pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "52", + "melee_animation": "400", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3197", + "name": "Gull" + }, + { + "id": "3198", + "name": "Banker", + "examine": "He can look after my money.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3199", + "name": "Banker", + "examine": "He can look after my money.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3200", + "name": "Chaos Elemental", + "examine": "pUre A cHaOs of crEatuRe!", + "agg_radius": "16", + "aggressive": "true", + "attack_level": "270", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,70,70,70,70,70,0,0,0,0,0", + "combat_audio": "345,351,347", + "death_animation": "3147", + "defence_animation": "3149", + "defence_level": "270", + "end_gfx": "558", + "lifepoints": "250", + "magic_animation": "5443", + "magic_level": "270", + "melee_animation": "3146", + "movement_radius": "30", + "projectile": "557", + "range_animation": "5443", + "range_level": "270", + "respawn_delay": "100", + "safespot": "true", + "start_gfx": "556", + "strength_level": "270", + "weakness": "4" + }, + { + "id": "3201", + "name": "Killerwatt", + "attack_level": "1", + "attack_speed": "3", + "defence_level": "1", + "lifepoints": "51", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "51", + "strength_level": "1" + }, + { + "id": "3202", + "name": "Killerwatt", + "attack_level": "1", + "attack_speed": "3", + "defence_level": "1", + "lifepoints": "51", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "51", + "strength_level": "1" + }, + { + "id": "3203", + "name": "Storm Cloud", + "examine": "A very small storm!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3204", + "name": "Storm Cloud", + "examine": "A very small storm!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3205", + "name": "Romily Weaklax" + }, + { + "id": "3206", + "name": "Priest" + }, + { + "id": "3207", + "name": "Pious Pete" + }, + { + "id": "3208", + "name": "Taper" + }, + { + "id": "3209", + "name": "Elena", + "examine": "She doesn't look too happy." + }, + { + "id": "3210", + "name": "Alrena" + }, + { + "id": "3211", + "name": "Alrena" + }, + { + "id": "3212", + "name": "Bravek" + }, + { + "id": "3213", + "name": "Edmond", + "examine": "A local civilian.", + "attack_level": "", + "combat_audio": "", + "defence_level": "", + "lifepoints": "", + "range_level": "", + "safespot": null, + "slayer_exp": "", + "strength_level": "" + }, + { + "id": "3214", + "name": "Edmond", + "examine": "A local civilian.", + "attack_level": "", + "combat_audio": "", + "defence_level": "", + "lifepoints": "", + "range_level": "", + "safespot": null, + "slayer_exp": "", + "strength_level": "" + }, + { + "id": "3215", + "name": "Elena", + "examine": "She looks concerned." + }, + { + "id": "3216", + "name": "Mourner", + "examine": "A mourner, or plague healer." + }, + { + "id": "3217", + "name": "Kaylee", + "examine": "Works in the Rising Sun." + }, + { + "id": "3218", + "name": "Tina" + }, + { + "id": "3219", + "name": "Dwarf", + "examine": "Loves mining.", + "attack_level": "28", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "40", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "28", + "weakness": "6" + }, + { + "id": "3220", + "name": "Dwarf", + "examine": "Loves mining.", + "attack_level": "32", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "32", + "weakness": "6" + }, + { + "id": "3221", + "name": "Dwarf", + "examine": "Loves mining.", + "attack_level": "28", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "40", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "28", + "weakness": "6" + }, + { + "id": "3222", + "name": "Drunken man", + "examine": "One of Gielinor's many citizens, currently incapacitated by alcohol.", + "attack_level": "4", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "4", + "lifepoints": "5", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "4", + "weakness": "9" + }, + { + "id": "3223", + "name": "Man", + "examine": "One of Gielinor's many citizens.", + "attack_level": "3", + "attack_speed": "5", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "3", + "lifepoints": "4", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "3", + "weakness": "9" + }, + { + "id": "3224", + "name": "Man", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3225", + "name": "Man", + "examine": "One of Gielinor's many citizens. He looks worried about something.", + "attack_level": "3", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "3", + "lifepoints": "4", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "3", + "weakness": "9" + }, + { + "id": "3226", + "name": "Woman", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "511,506,505", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "9", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3227", + "name": "Woman", + "examine": "One of Gielinor's many citizens.", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "511,506,505", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3228", + "name": "Guard", + "examine": "He tries to keep order around here.", + "attack_level": "13", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "386", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "13", + "weakness": "7" + }, + { + "id": "3229", + "name": "Guard", + "examine": "He tries to keep order around here.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "4230", + "range_animation": "2075", + "range_level": "13", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "3230", + "name": "Guard", + "examine": "He tries to keep order around here.", + "attack_level": "13", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "395", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "13", + "weakness": "7" + }, + { + "id": "3231", + "name": "Guard", + "examine": "He tries to keep order around here.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "426", + "range_level": "13", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "3232", + "name": "Guard", + "examine": "Keeping an eye out for threats to the city.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "426", + "range_level": "13", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "3233", + "name": "Guard", + "examine": "Keeping an eye out for threats to the city.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "426", + "range_level": "13", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "3234", + "name": "Gardener", + "examine": "An old gardener.", + "attack_level": "4", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "4", + "lifepoints": "5", + "magic_animation": "0", + "melee_animation": "433", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "4", + "weakness": "8" + }, + { + "id": "3235", + "name": "Apprentice workman", + "examine": "He's learning a trade.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3236", + "name": "Workman", + "examine": "A busy workman", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3237", + "name": "Cuffs", + "examine": "He looks a bit dodgy.", + "agg_radius": "", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "7", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3238", + "name": "Narf", + "examine": "Looks unpleasant.", + "agg_radius": "", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "7", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3239", + "name": "Rusty", + "examine": "Seems to be loitering.", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "7", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3240", + "name": "Jeff", + "examine": "Untrustworthy.", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "7", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3241", + "name": "Guard", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3242", + "name": "Dark wizard", + "examine": "A practicer of dark arts.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "511,513,512", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "3243", + "name": "Dark wizard", + "examine": "A practicer of dark arts.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "511,513,512", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "27", + "lifepoints": "38", + "magic_animation": "711", + "magic_level": "27", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "3244", + "name": "Dark wizard", + "examine": "A practicer of dark arts.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "511,513,512", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "16", + "lifepoints": "22", + "magic_animation": "711", + "magic_level": "16", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "3245", + "name": "Dark wizard", + "examine": "A practicer of dark arts.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "511,513,512", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "16", + "lifepoints": "22", + "magic_animation": "711", + "magic_level": "16", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "3246", + "name": "Barbarian", + "examine": "Alberich, a fierce barbarian warrior.", + "attack_level": "22", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "2067", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "22", + "weakness": "8" + }, + { + "id": "3247", + "name": "Barbarian", + "examine": "Fafner, a tough barbarian warrior.", + "attack_level": "22", + "attack_speed": "6", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "18", + "magic_animation": "7048", + "melee_animation": "7048", + "range_animation": "7048", + "range_level": "1", + "safespot": null, + "strength_level": "22", + "weakness": "8" + }, + { + "id": "3248", + "name": "Barbarian", + "examine": "Fasolt, a strong barbarian warrior.", + "attack_level": "22", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "2067", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "22", + "weakness": "8" + }, + { + "id": "3249", + "name": "Barbarian", + "examine": "Siegmund, a guard in the Barbarian Village.", + "attack_level": "22", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "401", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "22", + "weakness": "8" + }, + { + "id": "3250", + "name": "Barbarian", + "examine": "Siegfried, a young guard in the Barbarian Village.", + "attack_level": "22", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "2067", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "22", + "weakness": "8" + }, + { + "id": "3251", + "name": "Barbarian", + "examine": "Lydspor, a well-traveld barbarian warrior.", + "attack_level": "22", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "7048", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "22", + "weakness": "8" + }, + { + "id": "3252", + "name": "Barbarian", + "examine": "Hagen, a guard in the Barbarian Village.", + "attack_level": "22", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "2067", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "22", + "weakness": "8" + }, + { + "id": "3253", + "name": "Barbarian", + "examine": "Minarch, a barbarian who likes his beer.", + "attack_level": "22", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "401", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "22", + "weakness": "8" + }, + { + "id": "3254", + "name": "Hunding" + }, + { + "id": "3255", + "name": "Barbarian", + "examine": "Wotan, a sturdy barbarian warrior.", + "attack_level": "22", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "401", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "22", + "weakness": "8" + }, + { + "id": "3256", + "name": "Barbarian", + "examine": "Acelin, a guard in the Barbarian Village.", + "attack_level": "22", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "22", + "weakness": "8" + }, + { + "id": "3257", + "name": "Barbarian", + "examine": "Adelino, a barbarian warrior with a big axe.", + "attack_level": "22", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "2067", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "22", + "weakness": "8" + }, + { + "id": "3258", + "name": "Barbarian", + "examine": "Adolpho, a barbarian warrior with a warhammer.", + "attack_level": "22", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "401", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "22", + "weakness": "8" + }, + { + "id": "3259", + "name": "Barbarian", + "examine": "Aitan, a barbarian archer.", + "attack_level": "22", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "426", + "range_animation": "426", + "range_level": "1", + "safespot": null, + "strength_level": "22", + "weakness": "8" + }, + { + "id": "3260", + "name": "Barbarian", + "examine": "Brunnhilde, a fierce barbarian warrior.", + "attack_level": "20", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "28", + "magic_animation": "0", + "melee_animation": "428", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "8" + }, + { + "id": "3261", + "name": "Barbarian", + "examine": "Gutrune, a mighty barbarian warrior.", + "attack_level": "20", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "28", + "magic_animation": "0", + "melee_animation": "428", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "8" + }, + { + "id": "3262", + "name": "Barbarian", + "examine": "Edelschwarz, a barbarian warrior with a spear.", + "attack_level": "20", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "28", + "magic_animation": "0", + "melee_animation": "428", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "8" + }, + { + "id": "3263", + "name": "Barbarian", + "examine": "Sieglinde, a muscular barbarian warrior.", + "attack_level": "22", + "attack_speed": "6", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "404", + "defence_level": "22", + "lifepoints": "20", + "magic_animation": "428", + "melee_animation": "428", + "range_animation": "428", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "8" + }, + { + "id": "3264", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "3265", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "3266", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "3267", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "470,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "3268", + "name": "Dwarf", + "examine": "A dwarven worker.", + "attack_level": "10", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "14", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "10", + "weakness": "6" + }, + { + "id": "3269", + "name": "Dwarf", + "examine": "A dwarven worker.", + "attack_level": "10", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "14", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "10", + "weakness": "6" + }, + { + "id": "3270", + "name": "Dwarf", + "examine": "A dwarven worker.", + "attack_level": "10", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "14", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "10", + "weakness": "6" + }, + { + "id": "3271", + "name": "Dwarf", + "examine": "A dwarven worker.", + "attack_level": "10", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "14", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "10", + "weakness": "6" + }, + { + "id": "3272", + "name": "Dwarf", + "examine": "A dwarven worker.", + "attack_level": "10", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "14", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "10", + "weakness": "6" + }, + { + "id": "3273", + "name": "Dwarf", + "examine": "A dwarven worker.", + "attack_level": "10", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "14", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "10", + "weakness": "6" + }, + { + "id": "3274", + "name": "Dwarf", + "examine": "A dwarven worker.", + "attack_level": "10", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "14", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "10", + "weakness": "6" + }, + { + "id": "3275", + "name": "Dwarf", + "examine": "A dwarven worker.", + "attack_level": "10", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "14", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "10", + "weakness": "6" + }, + { + "id": "3276", + "name": "Black Guard", + "examine": "A member of the Black Guard", + "attack_level": "30", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "30", + "weakness": "6" + }, + { + "id": "3277", + "name": "Black Guard", + "examine": "A member of the Black Guard", + "attack_level": "30", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "30", + "weakness": "6" + }, + { + "id": "3278", + "name": "Black Guard", + "examine": "A member of the Black Guard", + "attack_level": "30", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "30", + "weakness": "6" + }, + { + "id": "3279", + "name": "Black Guard", + "examine": "A member of the Black Guard", + "attack_level": "30", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "30", + "weakness": "6" + }, + { + "id": "3280", + "name": "Engineering assistant", + "examine": "He looks busy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3281", + "name": "Engineering assistant" + }, + { + "id": "3282", + "name": "Engineer", + "examine": "He's building a cannon.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3283", + "name": "Squirrel", + "examine": "Bushy tail!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3284", + "name": "Squirrel" + }, + { + "id": "3285", + "name": "Squirrel" + }, + { + "id": "3286", + "name": "Raccoon", + "examine": "A raccoon.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3287", + "name": "Raccoon" + }, + { + "id": "3288", + "name": "Raccoon", + "examine": "A raccoon.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3289", + "name": "Skeleton" + }, + { + "id": "3291", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "8", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "8", + "lifepoints": "11", + "magic_animation": "0", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "8", + "weakness": "8" + }, + { + "id": "3292", + "name": "Witch" + }, + { + "id": "3293", + "name": "null", + "examine": "She'll store my items for me.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3294", + "name": "Dwarf", + "examine": "A dwarf who looks after the mining guild.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "1" + }, + { + "id": "3295", + "name": "Dwarf", + "examine": "A dwarf who looks after the mining guild.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "1" + }, + { + "id": "3296", + "name": "Swan", + "examine": "A graceful bird.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "water_npc": true + }, + { + "id": "3297", + "name": "Black Swan", + "examine": "A rare bird.", + "water_npc": "true" + }, + { + "id": "3298", + "name": "Sweeper", + "examine": "Keeps this magic area tidy.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3299", + "name": "Martin the Master Gardener", + "examine": "A master at gardening.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3300", + "name": "Frog" + }, + { + "id": "3301", + "name": "Storm cloud" + }, + { + "id": "3302", + "name": "Co-ordinator", + "examine": "Manages the fairies.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3303", + "name": "Fairy Nuff" + }, + { + "id": "3304", + "name": "Fairy Godfather", + "examine": "I'm gonna make him an offer he can't refuse.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3305", + "name": "Slim Louie" + }, + { + "id": "3306", + "name": "Fat Rocco" + }, + { + "id": "3307", + "name": "Gatekeeper", + "examine": "Guardian of the market gate.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3308", + "name": "Zandar Horfyre" + }, + { + "id": "3309", + "name": "Cow", + "examine": "Converts grass to beef.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "369,371,370", + "death_animation": "5851", + "defence_animation": "5850", + "defence_level": "1", + "lifepoints": "8", + "magic_animation": "5849", + "melee_animation": "5849", + "range_animation": "5849", + "range_level": "1", + "safespot": null, + "slayer_exp": "8", + "strength_level": "1", + "weakness": "8" + }, + { + "id": "3310", + "name": "Sheep", + "examine": "White and fluffy" + }, + { + "id": "3311", + "name": "Sheep" + }, + { + "id": "3312", + "name": "Zanaris choir", + "examine": "They're going to sing to you!" + }, + { + "id": "3313", + "name": "Tanglefoot", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "102", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3314", + "name": "Baby tanglefoot" + }, + { + "id": "3319", + "name": "Baby tanglefoot", + "examine": "An animated shrub.", + "attack_level": "1", + "defence_animation": "0", + "defence_level": "41", + "lifepoints": "58", + "magic_animation": "0", + "range_animation": "0", + "range_level": "41", + "safespot": null, + "strength_level": "1", + "weakness": "2" + }, + { + "id": "3320", + "name": "Baby tanglefoot", + "examine": "An aggressive bush.", + "attack_level": "1", + "defence_animation": "0", + "defence_level": "41", + "lifepoints": "58", + "magic_animation": "0", + "range_animation": "0", + "range_level": "41", + "safespot": null, + "strength_level": "1", + "weakness": "2" + }, + { + "id": "3321", + "name": "Gatekeeper" + }, + { + "id": "3322", + "name": "Fairy chef", + "examine": "Likes to cook with mushrooms.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "movement_radius": "2", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3323", + "name": "Draul Leptoc" + }, + { + "id": "3324", + "name": "Draul Leptoc", + "examine": "This looks like an angry, aggressive man." + }, + { + "id": "3325", + "name": "Phillipa", + "examine": "A quiet, more reserved sort of lady." + }, + { + "id": "3326", + "name": "Martina Scorsby" + }, + { + "id": "3327", + "name": "Jeremy Clerksin", + "examine": "Rather more tired than most.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3328", + "name": "Tarquin" + }, + { + "id": "3329", + "name": "Sigurd" + }, + { + "id": "3330", + "name": "Hari" + }, + { + "id": "3331", + "name": "Barfy Bill", + "examine": "Looks a little green around the gills.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3332", + "name": "Trees" + }, + { + "id": "3333", + "name": "Trees" + }, + { + "id": "3334", + "name": "Cavemouth", + "examine": "It's made of pure fire.", + "aggressive": "true", + "attack_level": "200", + "attack_speed": "6", + "bonuses": "126,98,86,297,311,304,319,13,284,30,0,0,0,0,0", + "defence_level": "500", + "lifepoints": "1000", + "magic_level": "300", + "range_level": "300", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1500" + }, + { + "id": "3335", + "name": "Bullrush" + }, + { + "id": "3336", + "name": "Bullrush" + }, + { + "id": "3337", + "name": "Cave scenery" + }, + { + "id": "3338", + "name": "Cave scenery" + }, + { + "id": "3339", + "name": "Cave scenery" + }, + { + "id": "3340", + "name": "Giant Mole", + "examine": "Holy Mole-y!", + "attack_level": "200", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,60,80,100,80,60,0,0,0,0,0", + "combat_audio": "1642,1646,1645", + "death_animation": "3310", + "defence_animation": "3311", + "defence_level": "200", + "lifepoints": "200", + "magic_animation": "3312", + "magic_level": "200", + "melee_animation": "3312", + "range_animation": "3312", + "range_level": "1", + "respawn_delay": "56", + "safespot": null, + "strength_level": "200", + "weakness": "7" + }, + { + "id": "3341", + "name": "Baby Mole", + "examine": "I will call him, Mini Mole.", + "aggressive": "false", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3342", + "name": "Baby Mole", + "examine": "Mooooooooooooole." + }, + { + "id": "3343", + "name": "Baby Mole", + "examine": "Moley, moley, moley!" + }, + { + "id": "3344", + "name": "Fungi", + "examine": "A fun guy. No wait, that's awful. Plus it doesn't even make sense.", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "65", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3345", + "name": "Fungi", + "examine": "A fun guy. No wait, that's awful. Plus it doesn't even make sense.", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "2777", + "defence_animation": "2775", + "defence_level": "1", + "lifepoints": "75", + "melee_animation": "2776", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3346", + "name": "Zygomite", + "examine": "A bouncy fungus.", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "2777", + "defence_animation": "0", + "defence_level": "42", + "lifepoints": "60", + "magic_animation": "0", + "melee_animation": "2776", + "range_animation": "0", + "range_level": "42", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "1" + }, + { + "id": "3347", + "name": "Zygomite", + "examine": "Have a fungus.", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "2777", + "defence_animation": "2775", + "defence_level": "1", + "lifepoints": "75", + "melee_animation": "2776", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3348", + "name": "White Knight", + "attack_level": "1", + "attack_speed": "8", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "7050", + "defence_level": "1", + "lifepoints": "53", + "melee_animation": "7049", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3349", + "name": "White Knight", + "attack_level": "1", + "attack_speed": "8", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "7050", + "defence_level": "1", + "lifepoints": "53", + "melee_animation": "7049", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3350", + "name": "White Knight", + "attack_level": "1", + "attack_speed": "8", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "7050", + "defence_level": "1", + "lifepoints": "53", + "melee_animation": "7049", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3351", + "name": "Genie" + }, + { + "id": "3352", + "name": "Mysterious Old Man" + }, + { + "id": "3353", + "name": "Swarm" + }, + { + "id": "3354", + "name": "Cap'n Hand" + }, + { + "id": "3355", + "name": "Rick Turpentine" + }, + { + "id": "3356", + "name": "Niles" + }, + { + "id": "3357", + "name": "Miles" + }, + { + "id": "3358", + "name": "Giles" + }, + { + "id": "3359", + "name": "Dr Jekyll" + }, + { + "id": "3360", + "name": "Mr Hyde" + }, + { + "id": "3361", + "name": "Mr Hyde" + }, + { + "id": "3362", + "name": "Mr Hyde" + }, + { + "id": "3363", + "name": "Mr Hyde" + }, + { + "id": "3364", + "name": "Mr Hyde" + }, + { + "id": "3365", + "name": "Mr Hyde" + }, + { + "id": "3366", + "name": "Evil Chicken", + "attack_level": "1", + "combat_audio": "355,357,356", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3367", + "name": "Evil Chicken", + "attack_level": "1", + "combat_audio": "355,357,356", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3368", + "name": "Evil Chicken", + "attack_level": "1", + "combat_audio": "355,357,356", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3369", + "name": "Evil Chicken", + "attack_level": "1", + "combat_audio": "355,357,356", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3370", + "name": "Evil Chicken", + "attack_level": "1", + "combat_audio": "355,357,356", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3371", + "name": "Evil Chicken", + "attack_level": "1", + "combat_audio": "355,357,356", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3372", + "name": "Sir Amik Varze" + }, + { + "id": "3373", + "name": "Sir Amik Varze" + }, + { + "id": "3375", + "name": "Evil Chicken", + "examine": "A fowl beast.", + "aggressive": "true", + "attack_level": "55", + "combat_audio": "355,357,356", + "death_animation": "2301", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "117", + "magic_animation": "0", + "magic_level": "55", + "melee_animation": "2299", + "range_animation": "0", + "range_level": "55", + "respawn_delay": "0", + "safespot": null, + "strength_level": "55", + "weakness": "10" + }, + { + "id": "3376", + "name": "Baby black dragon", + "examine": "Young but still dangerous.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "5", + "bonuses": "50,40,64,60,30,45,40,40,20,40,40,20,0,0,0", + "combat_audio": "405,407,406", + "death_animation": "28", + "defence_animation": "26", + "defence_level": "42", + "lifepoints": "50", + "magic_animation": "25", + "magic_level": "40", + "melee_animation": "25", + "range_animation": "25", + "range_level": "1", + "respawn_delay": "32", + "safespot": null, + "slayer_exp": "0", + "strength_level": "80", + "weakness": "3" + }, + { + "id": "3377", + "name": "K'klik" + }, + { + "id": "3378", + "name": "Evil Dave", + "examine": "He seems to like wearing black.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3379", + "name": "Evil Dave" + }, + { + "id": "3381", + "name": "Doris" + }, + { + "id": "3382", + "name": "Hell-Rat", + "examine": "Vermin from the underworld.", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3383", + "name": "Gypsy" + }, + { + "id": "3386", + "name": "Gypsy" + }, + { + "id": "3387", + "name": "Culinaromancer" + }, + { + "id": "3388", + "name": "Osman" + }, + { + "id": "3389", + "name": "Pirate Pete", + "examine": "A shifty-looking character.", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3390", + "name": "Mountain Dwarf", + "examine": "He looks short and grumpy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "7" + }, + { + "id": "3391", + "name": "General Wartface", + "examine": "An ugly green creature.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3392", + "name": "General Bentnoze", + "examine": "An ugly green creature.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3393", + "name": "Lumbridge Guide", + "examine": "He provides new players with useful information.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3394", + "name": "Evil Dave", + "examine": "He seems to like wearing black.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3395", + "name": "Sir Amik Varze" + }, + { + "id": "3396", + "name": "Awowogei" + }, + { + "id": "3397", + "name": "Awowogei" + }, + { + "id": "3398", + "name": "Skrach Uglogwee" + }, + { + "id": "3399", + "name": "Culinaromancer" + }, + { + "id": "3401", + "name": "An old Dwarf" + }, + { + "id": "3403", + "name": "Rohak" + }, + { + "id": "3404", + "name": "null", + "examine": "Rutmir's assistant.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3406", + "name": "Icefiend", + "examine": "A small ice demon.", + "aggressive": "true", + "attack_level": "60", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "531,533,532", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "171", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "60", + "weakness": "9" + }, + { + "id": "3407", + "name": "Guard", + "examine": "He tries to keep order around here.", + "attack_level": "25", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "7219", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "7218", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "25", + "weakness": "7" + }, + { + "id": "3408", + "name": "Guard", + "examine": "He tries to keep order around here.", + "attack_level": "25", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "7213", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "583", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "25", + "weakness": "7" + }, + { + "id": "3409", + "name": "Wild jade vine", + "examine": "A sentient plant - ready", + "aggressive": "true", + "attack_level": "65", + "death_animation": "7249", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "185", + "magic_animation": "0", + "magic_level": "65", + "melee_animation": "7246", + "poison_amount": "35", + "poisonous": "true", + "range_animation": "0", + "range_level": "65", + "respawn_delay": "60", + "safespot": null, + "strength_level": "65", + "weakness": "10" + }, + { + "id": "3410", + "name": "Wild jade vine", + "examine": "A sentient plant - ready", + "aggressive": "true", + "attack_level": "65", + "death_animation": "7249", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "185", + "magic_animation": "0", + "magic_level": "65", + "melee_animation": "7246", + "poison_amount": "35", + "poisonous": "true", + "range_animation": "0", + "range_level": "65", + "respawn_delay": "60", + "safespot": null, + "strength_level": "65", + "weakness": "10" + }, + { + "id": "3411", + "name": "Wild jade vine", + "examine": "A sentient plant - ready", + "aggressive": "true", + "attack_level": "65", + "death_animation": "7249", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "185", + "magic_animation": "0", + "magic_level": "65", + "melee_animation": "7246", + "poison_amount": "35", + "poisonous": "true", + "range_animation": "0", + "range_level": "65", + "respawn_delay": "60", + "safespot": null, + "strength_level": "65", + "weakness": "10" + }, + { + "id": "3412", + "name": "Wild jade vine", + "examine": "A sentient plant - ready", + "aggressive": "true", + "attack_level": "65", + "death_animation": "7249", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "185", + "magic_animation": "0", + "magic_level": "65", + "melee_animation": "7246", + "poison_amount": "35", + "poisonous": "true", + "range_animation": "0", + "range_level": "65", + "respawn_delay": "60", + "safespot": null, + "strength_level": "65", + "weakness": "10" + }, + { + "id": "3413", + "name": "Goblin Cook", + "examine": "He's got funky socks, but he's still an ugly green creature.", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3414", + "name": "Goblin Cook", + "examine": "More like a goblin cooked.", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3415", + "name": "Goblin Cook", + "examine": "Half way up the wall is maybe not a naturally tenable position for a goblin.", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3416", + "name": "Pirate Pete", + "examine": "He'll store my items for me.", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3417", + "name": "Pirate Pete" + }, + { + "id": "3418", + "name": "Pirate Pete", + "examine": "He'll store my items for me.", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3419", + "name": "Ogre", + "examine": "Big, ugly, and smelly.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "7", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "27", + "lifepoints": "60", + "melee_animation": "359", + "respawn_delay": "60", + "safespot": null, + "slayer_task": "64", + "strength_level": "27", + "weakness": "8" + }, + { + "id": "3420", + "name": "Mogre Guard", + "examine": "An angry Ogre in a highly amusing hat.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3421", + "name": "Crab", + "examine": "Nice claw!", + "attack_level": "22", + "death_animation": "3430", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "3428", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "22", + "weakness": "9" + }, + { + "id": "3422", + "name": "Mudskipper", + "examine": "Not the most beautiful fish in the sea.", + "aggressive": "true", + "attack_level": "29", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "241,243,242", + "death_animation": "3435", + "defence_animation": "3434", + "defence_level": "26", + "lifepoints": "20", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "3433", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "10", + "safespot": null, + "strength_level": "29", + "weakness": "9" + }, + { + "id": "3423", + "name": "Mudskipper", + "examine": "Not the most beautiful fish in the sea.", + "aggressive": "true", + "attack_level": "30", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "241,243,242", + "death_animation": "3435", + "defence_animation": "3434", + "defence_level": "29", + "lifepoints": "20", + "magic_level": "1", + "melee_animation": "3433", + "range_level": "1", + "respawn_delay": "5", + "safespot": null, + "strength_level": "30" + }, + { + "id": "3424", + "name": "Crab", + "attack_level": "1", + "death_animation": "3430", + "defence_animation": "3429", + "defence_level": "1", + "lifepoints": "18", + "melee_animation": "3428", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3425", + "name": "Fish", + "examine": "A Red Fantail.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3426", + "name": "Fish", + "examine": "A Red Fantail.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3427", + "name": "Fish", + "examine": "A Red Fantail.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3428", + "name": "Fish" + }, + { + "id": "3429", + "name": "Fish" + }, + { + "id": "3430", + "name": "Fish" + }, + { + "id": "3431", + "name": "Fish", + "examine": "An Angel Fish.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3432", + "name": "Fish", + "examine": "An Angel Fish.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3433", + "name": "Fish", + "examine": "An Angel Fish.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3434", + "name": "Fish", + "examine": "A Harlequin Fish.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3435", + "name": "Fish", + "examine": "A Harlequin Fish.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3436", + "name": "Fish", + "examine": "A Harlequin Fish.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3437", + "name": "Fish", + "examine": "A Discus Fish.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3438", + "name": "Fish", + "examine": "A Discus Fish.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3439", + "name": "Fish", + "examine": "A Discus Fish.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3440", + "name": "Fish" + }, + { + "id": "3441", + "name": "Fish" + }, + { + "id": "3442", + "name": "Fish" + }, + { + "id": "3443", + "name": "Fish", + "examine": "A shoal of Neon Tetra.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3444", + "name": "Fish", + "examine": "A shoal of Neon Tetra.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3445", + "name": "Fish", + "examine": "A shoal of Neon Tetra.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3446", + "name": "Fish" + }, + { + "id": "3447", + "name": "Fish" + }, + { + "id": "3448", + "name": "Fish" + }, + { + "id": "3449", + "name": "Lumbridge Guide", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "7", + "defence_level": "1", + "lifepoints": "60", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3450", + "name": "null", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "7", + "defence_level": "1", + "lifepoints": "60", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3451", + "name": "Lumbridge Guide", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "7", + "defence_level": "1", + "lifepoints": "60", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3452", + "name": "? ? ? ?" + }, + { + "id": "3453", + "name": "? ? ? ?" + }, + { + "id": "3454", + "name": "? ? ? ?" + }, + { + "id": "3455", + "name": "? ? ? ?" + }, + { + "id": "3456", + "name": "? ? ? ?" + }, + { + "id": "3457", + "name": "? ? ? ?" + }, + { + "id": "3458", + "name": "? ? ? ?" + }, + { + "id": "3459", + "name": "? ? ? ?" + }, + { + "id": "3460", + "name": "? ? ? ?" + }, + { + "id": "3461", + "name": "? ? ? ?" + }, + { + "id": "3462", + "name": "Skrach Uglogwee" + }, + { + "id": "3463", + "name": "Skrach Uglogwee", + "examine": "What restful music!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3464", + "name": "Skrach Uglogwee" + }, + { + "id": "3465", + "name": "Nung" + }, + { + "id": "3466", + "name": "Ogre" + }, + { + "id": "3467", + "name": "Rantz" + }, + { + "id": "3468", + "name": "Rantz" + }, + { + "id": "3469", + "name": "Ogre boat" + }, + { + "id": "3472", + "name": "Ogre boat" + }, + { + "id": "3473", + "name": "Balloon Toad" + }, + { + "id": "3474", + "name": "Balloon Toad" + }, + { + "id": "3475", + "name": "Balloon Toad" + }, + { + "id": "3476", + "name": "Jubbly bird", + "examine": "A large boisterous bird", + "aggressive": "true", + "attack_level": "6", + "death_animation": "6801", + "defence_animation": "0", + "defence_level": "8", + "lifepoints": "11", + "magic_animation": "0", + "melee_animation": "6800", + "range_animation": "0", + "range_level": "8", + "safespot": null, + "strength_level": "6", + "weakness": "0" + }, + { + "id": "3477", + "name": "Jubbly bird" + }, + { + "id": "3478", + "name": "King Awowogei", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "328", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3479", + "name": "King Awowogei" + }, + { + "id": "3481", + "name": "Mizaru" + }, + { + "id": "3482", + "name": "Kikazaru" + }, + { + "id": "3483", + "name": "Iwazaru" + }, + { + "id": "3484", + "name": "Big Snake", + "examine": "A big snake.", + "aggressive": "true", + "attack_level": "46", + "combat_audio": "3609,3608,3610", + "death_animation": "3540", + "defence_animation": "0", + "defence_level": "46", + "lifepoints": "65", + "magic_animation": "0", + "melee_animation": "3538", + "poisonous": "true", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "46", + "weakness": "8" + }, + { + "id": "3485", + "name": "Culinaromancer" + }, + { + "id": "3486", + "name": "Culinaromancer" + }, + { + "id": "3487", + "name": "Culinaromancer" + }, + { + "id": "3488", + "name": "Culinaromancer" + }, + { + "id": "3489", + "name": "Culinaromancer" + }, + { + "id": "3490", + "name": "Culinaromancer" + }, + { + "id": "3491", + "name": "Culinaromancer", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "140", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3492", + "name": "Culinaromancer" + }, + { + "id": "3493", + "name": "Agrith-Na-Na", + "aggressive": "true", + "attack_level": "1", + "death_animation": "3503", + "defence_animation": "3500", + "defence_level": "1", + "lifepoints": "200", + "melee_animation": "3501", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3494", + "name": "Flambeed", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1752", + "defence_animation": "1751", + "defence_level": "1", + "lifepoints": "210", + "melee_animation": "1750", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3495", + "name": "Karamel", + "aggressive": "true", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "240", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3496", + "name": "Dessourt", + "aggressive": "true", + "attack_level": "1", + "death_animation": "3510", + "defence_animation": "3505", + "defence_level": "1", + "lifepoints": "140", + "melee_animation": "3507", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3497", + "name": "Gelatinnoth Mother", + "examine": "Deadly AND fruity!", + "aggressive": "true", + "attack_level": "48", + "death_animation": "1342", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "139", + "magic_animation": "0", + "magic_level": "65", + "melee_animation": "1341", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "48", + "weakness": "5" + }, + { + "id": "3498", + "name": "Gelatinnoth Mother", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "240", + "melee_animation": "1341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3499", + "name": "Gelatinnoth Mother", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "240", + "melee_animation": "1341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3500", + "name": "Gelatinnoth Mother", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "240", + "melee_animation": "1341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3501", + "name": "Gelatinnoth Mother", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "240", + "melee_animation": "1341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3502", + "name": "Gelatinnoth Mother", + "aggressive": "true", + "attack_level": "1", + "death_animation": "1342", + "defence_animation": "1340", + "defence_level": "1", + "lifepoints": "240", + "melee_animation": "1341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3503", + "name": "Overgrown hellcat" + }, + { + "id": "3504", + "name": "Hellcat" + }, + { + "id": "3505", + "name": "Hell-kitten" + }, + { + "id": "3506", + "name": "Lazy hellcat" + }, + { + "id": "3507", + "name": "Wily hellcat" + }, + { + "id": "3508", + "name": "Leo" + }, + { + "id": "3509", + "name": "Sorin", + "examine": "Chronicler and regaler of your piratical exploits.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3510", + "name": "Wiskit" + }, + { + "id": "3512", + "name": "Vampyre Juvinate" + }, + { + "id": "3514", + "name": "Vampyre Juvinate", + "examine": "An initiate juvenile vampyre.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3515", + "name": "Vampyre Juvinate" + }, + { + "id": "3516", + "name": "Gadderanks" + }, + { + "id": "3518", + "name": "Gadderanks" + }, + { + "id": "3519", + "name": "Gadderanks" + }, + { + "id": "3520", + "name": "Vampyre Juvinate" + }, + { + "id": "3521", + "name": "Vampyre Juvinate", + "examine": "An initiate juvenile vampyre.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "5798", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "64", + "magic_animation": "0", + "melee_animation": "5783", + "range_animation": "0", + "range_level": "45", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "3522", + "name": "Vampyre Juvinate", + "aggressive": "true", + "attack_level": "1", + "death_animation": "5798", + "defence_level": "1", + "lifepoints": "85", + "melee_animation": "5783", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3523", + "name": "Vampyre Juvinate", + "aggressive": "true", + "attack_level": "1", + "death_animation": "5798", + "defence_level": "1", + "lifepoints": "85", + "melee_animation": "5783", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3524", + "name": "Vampyre Juvinate", + "aggressive": "true", + "attack_level": "1", + "death_animation": "5798", + "defence_level": "1", + "lifepoints": "85", + "melee_animation": "5783", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3525", + "name": "Vampyre Juvinate", + "aggressive": "true", + "attack_level": "1", + "death_animation": "5798", + "defence_level": "1", + "lifepoints": "85", + "melee_animation": "5783", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3526", + "name": "Vampyre Juvinate", + "examine": "An initiate juvenile vampyre", + "attack_level": "1", + "death_animation": "6031", + "defence_animation": "0", + "defence_level": "46", + "lifepoints": "65", + "magic_animation": "0", + "melee_animation": "6016", + "range_animation": "0", + "range_level": "46", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "3527", + "name": "Held Vampyre Juvinate", + "examine": "A Juvinate vampyre", + "attack_level": "1", + "death_animation": "5798", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "64", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "45", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "3528", + "name": "Vampyre Juvinate" + }, + { + "id": "3529", + "name": "Vampyre Juvinate" + }, + { + "id": "3530", + "name": "Mist" + }, + { + "id": "3531", + "name": "Vampyre Juvenile", + "examine": "He looks really hungry!", + "attack_level": "40", + "death_animation": "6781", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "57", + "magic_animation": "0", + "melee_animation": "6276", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "40", + "weakness": "7" + }, + { + "id": "3532", + "name": "Vampyre Juvenile", + "examine": "She looks really hungry!", + "attack_level": "40", + "death_animation": "6781", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "57", + "magic_animation": "0", + "melee_animation": "6276", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "40", + "weakness": "7" + }, + { + "id": "3533", + "name": "Vampyre Juvenile", + "attack_level": "1", + "death_animation": "6781", + "defence_level": "1", + "lifepoints": "60", + "melee_animation": "6276", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3534", + "name": "Held Vampyre Juvenile", + "examine": "He looks really hungry!", + "attack_level": "40", + "death_animation": "6781", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "57", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "40", + "weakness": "7" + }, + { + "id": "3535", + "name": "Ivan Strom" + }, + { + "id": "3536", + "name": "Ivan Strom" + }, + { + "id": "3537", + "name": "Vampyre Juvinate" + }, + { + "id": "3538", + "name": "Vampyre Juvinate" + }, + { + "id": "3539", + "name": "Veliaf Hurtz" + }, + { + "id": "3540", + "name": "Elisabeta" + }, + { + "id": "3541", + "name": "Aurel" + }, + { + "id": "3542", + "name": "Sorin" + }, + { + "id": "3543", + "name": "Luscion" + }, + { + "id": "3544", + "name": "Sergiu" + }, + { + "id": "3545", + "name": "Radu" + }, + { + "id": "3546", + "name": "Grigore" + }, + { + "id": "3547", + "name": "Ileana" + }, + { + "id": "3548", + "name": "Valeria" + }, + { + "id": "3549", + "name": "Emilia" + }, + { + "id": "3550", + "name": "Florin" + }, + { + "id": "3551", + "name": "Catalina" + }, + { + "id": "3552", + "name": "Ivan" + }, + { + "id": "3553", + "name": "Victor" + }, + { + "id": "3554", + "name": "Helena" + }, + { + "id": "3555", + "name": "Teodor" + }, + { + "id": "3556", + "name": "Marius" + }, + { + "id": "3557", + "name": "Gabriela" + }, + { + "id": "3558", + "name": "Vladimir" + }, + { + "id": "3559", + "name": "Calin" + }, + { + "id": "3560", + "name": "Mihail" + }, + { + "id": "3561", + "name": "Nicoleta" + }, + { + "id": "3562", + "name": "Simona" + }, + { + "id": "3563", + "name": "Vasile" + }, + { + "id": "3564", + "name": "Razvan" + }, + { + "id": "3565", + "name": "Luminata" + }, + { + "id": "3566", + "name": "Cornelius" + }, + { + "id": "3569", + "name": "Cornelius" + }, + { + "id": "3570", + "name": "Benjamin" + }, + { + "id": "3571", + "name": "Liam" + }, + { + "id": "3572", + "name": "Miala" + }, + { + "id": "3573", + "name": "Verak" + }, + { + "id": "3574", + "name": "Fishing spot" + }, + { + "id": "3575", + "name": "Fishing spot" + }, + { + "id": "3576", + "name": "Juvinate" + }, + { + "id": "3577", + "name": "Juvinate", + "examine": "An initiate juvenile vampyre", + "attack_level": "1", + "death_animation": "6031", + "defence_animation": "0", + "defence_level": "46", + "lifepoints": "65", + "magic_animation": "0", + "melee_animation": "6016", + "range_animation": "0", + "range_level": "46", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "3578", + "name": "Juvinate" + }, + { + "id": "3579", + "name": "Sheep", + "examine": "Is it a sheep?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3580", + "name": "Tentacle" + }, + { + "id": "3581", + "name": "Skeleton", + "examine": "He guards the dungeon with the faithfulness of the undead.", + "aggressive": "true", + "attack_level": "15", + "attack_speed": "4", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "17", + "lifepoints": "29", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "5487", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "70", + "safespot": null, + "strength_level": "18", + "weakness": "8" + }, + { + "id": "3582", + "name": "Guard dog", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "slayer_exp": "49", + "strength_level": "1" + }, + { + "id": "3583", + "name": "Hobgoblin", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "167", + "defence_animation": "163", + "defence_level": "1", + "lifepoints": "29", + "melee_animation": "164", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3584", + "name": "Troll" + }, + { + "id": "3585", + "name": "Huge spider", + "examine": "No spider could grow that big! It's unrealistic!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "537,539,538", + "death_animation": "5321", + "defence_animation": "0", + "defence_level": "72", + "lifepoints": "122", + "magic_animation": "0", + "melee_animation": "5319", + "range_animation": "0", + "range_level": "72", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "2" + }, + { + "id": "3586", + "name": "Hellhound", + "examine": "Good doggy...", + "aggressive": "true", + "attack_level": "105", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "3717,3719,3718", + "death_animation": "6576", + "defence_animation": "0", + "defence_level": "102", + "lifepoints": "116", + "magic_animation": "0", + "melee_animation": "6562", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "116", + "strength_level": "104", + "weakness": "7" + }, + { + "id": "3587", + "name": "Rantz", + "examine": "Big, ugly, and smelly.", + "aggressive": "true", + "attack_level": "27", + "attack_speed": "6", + "bonuses": "15,15,10,20,40,15,50,50,50,20,50,58,0,0,0", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "27", + "lifepoints": "60", + "magic_animation": "359", + "magic_level": "27", + "melee_animation": "359", + "range_animation": "359", + "range_level": "27", + "respawn_delay": "25", + "safespot": null, + "strength_level": "27" + }, + { + "id": "3588", + "name": "Baby red dragon", + "examine": "Young but still dangerous.", + "aggressive": "true", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "20,10,10,20,40,40,20,40,40,20,0,0,0,0,0", + "combat_audio": "405,407,406", + "death_animation": "28", + "defence_animation": "26", + "defence_level": "42", + "lifepoints": "50", + "magic_animation": "25", + "magic_level": "40", + "melee_animation": "25", + "range_animation": "25", + "range_level": "1", + "respawn_delay": "32", + "safespot": null, + "strength_level": "40", + "weakness": "8" + }, + { + "id": "3589", + "name": "Kalphite Soldier", + "examine": "I don't think insect repellent will work...", + "aggressive": "true", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,25,25,5,50,50,0,0,0,0,0", + "combat_audio": "567,569,568", + "death_animation": "6228", + "defence_animation": "6227", + "defence_level": "70", + "lifepoints": "90", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "6223", + "poison_amount": "20", + "poisonous": "true", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "70", + "weakness": "6" + }, + { + "id": "3590", + "name": "Steel dragon", + "examine": "Its scales seem to be made of steel.", + "aggressive": "true", + "attack_level": "234", + "bonuses": "56,42,104,51,212,115,232,302,331,21,264,100,100,40,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "defence_level": "238", + "lifepoints": "210", + "magic_level": "72", + "range_level": "185", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "221", + "strength_level": "229", + "weakness": "8" + }, + { + "id": "3591", + "name": "Dagannoth", + "examine": "A darkened horror from the ocean depths.", + "attack_level": "1", + "clue_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3592", + "name": "Tok-Xil" + }, + { + "id": "3593", + "name": "Demon", + "examine": "Arrgh! Look at its pointy teeth!", + "aggressive": "true", + "attack_level": "75", + "combat_audio": "400,404,403", + "defence_animation": "0", + "defence_level": "75", + "lifepoints": "107", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "75", + "weakness": "7" + }, + { + "id": "3594", + "name": "Rocnar" + }, + { + "id": "3595", + "name": "Toy Soldier" + }, + { + "id": "3596", + "name": "Toy Doll" + }, + { + "id": "3597", + "name": "Toy Mouse" + }, + { + "id": "3598", + "name": "Clockwork cat" + }, + { + "id": "3599", + "name": "Swamp snake", + "examine": "A large snake that thrives in swamps.", + "attack_level": "35", + "attack_speed": "5", + "bonuses": "10,10,10,10,10,10,1,10,6,10,6,4,0,0,0", + "combat_audio": "3609,3608,3610", + "death_animation": "3540", + "defence_animation": "3539", + "defence_level": "40", + "lifepoints": "121", + "magic_animation": "3538", + "melee_animation": "3538", + "range_animation": "3538", + "range_level": "45", + "safespot": null, + "strength_level": "33", + "weakness": "0" + }, + { + "id": "3600", + "name": "Swamp snake", + "examine": "A large snake that thrives in swamps.", + "attack_level": "60", + "attack_speed": "5", + "bonuses": "10,10,10,10,10,10,1,10,6,10,6,4,0,0,0", + "combat_audio": "3609,3608,3610", + "death_animation": "3540", + "defence_animation": "3539", + "defence_level": "60", + "lifepoints": "121", + "magic_animation": "3538", + "melee_animation": "3538", + "range_animation": "3538", + "range_level": "1", + "safespot": null, + "strength_level": "50" + }, + { + "id": "3601", + "name": "Swamp snake", + "examine": "A large snake that thrives in swamps.", + "attack_level": "35", + "attack_speed": "5", + "bonuses": "10,10,10,10,10,10,1,10,6,10,6,4,0,0,0", + "combat_audio": "3609,3608,3610", + "death_animation": "3540", + "defence_animation": "3539", + "defence_level": "40", + "lifepoints": "121", + "magic_animation": "3538", + "melee_animation": "3538", + "range_animation": "3538", + "range_level": "1", + "safespot": null, + "strength_level": "33", + "weakness": "7" + }, + { + "id": "3602", + "name": "Swamp snake", + "examine": "A large snake that thrives in swamps.", + "attack_level": "35", + "attack_speed": "5", + "bonuses": "10,10,10,10,10,10,1,10,6,10,6,4,0,0,0", + "combat_audio": "3609,3608,3610", + "death_animation": "3540", + "defence_animation": "3539", + "defence_level": "40", + "lifepoints": "121", + "magic_animation": "3538", + "melee_animation": "3538", + "range_animation": "3538", + "range_level": "1", + "safespot": null, + "strength_level": "33" + }, + { + "id": "3603", + "name": "Dead swamp snake", + "attack_level": "1", + "combat_audio": "3609,3608,3610", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3604", + "name": "Dead swamp snake", + "attack_level": "1", + "combat_audio": "3609,3608,3610", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3605", + "name": "Dead swamp snake", + "attack_level": "1", + "combat_audio": "3609,3608,3610", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3606", + "name": "Ghast" + }, + { + "id": "3607", + "name": "Ghast" + }, + { + "id": "3608", + "name": "Ghast" + }, + { + "id": "3609", + "name": "Ghast" + }, + { + "id": "3610", + "name": "Ghast" + }, + { + "id": "3611", + "name": "Ghast" + }, + { + "id": "3612", + "name": "Giant snail" + }, + { + "id": "3613", + "name": "Giant snail" + }, + { + "id": "3614", + "name": "Giant snail" + }, + { + "id": "3615", + "name": "Riyl shadow" + }, + { + "id": "3616", + "name": "Asyn shadow" + }, + { + "id": "3617", + "name": "Shade" + }, + { + "id": "3618", + "name": "Tentacle", + "examine": "I'm glad I can't see the rest of it!", + "aggressive": "true", + "attack_level": "80", + "death_animation": "3620", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "171", + "magic_animation": "0", + "magic_level": "80", + "melee_animation": "3618", + "range_animation": "3618", + "range_level": "80", + "respawn_delay": "60", + "safespot": null, + "strength_level": "80", + "weakness": "9" + }, + { + "id": "3619", + "name": "Head", + "examine": "I'm glad I can't see the rest of it!", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "10", + "death_animation": "3733", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "171", + "magic_animation": "0", + "magic_level": "80", + "melee_animation": "3731", + "range_animation": "0", + "range_level": "80", + "respawn_delay": "60", + "safespot": null, + "strength_level": "85", + "weakness": "9" + }, + { + "id": "3620", + "name": "Head", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "10", + "death_animation": "3733", + "defence_animation": "3732", + "defence_level": "1", + "lifepoints": "150", + "melee_animation": "3731", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3621", + "name": "Tentacle" + }, + { + "id": "3622", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "3623", + "name": "Smiddi Ryak" + }, + { + "id": "3625", + "name": "Rolayne Twickit" + }, + { + "id": "3627", + "name": "Jayene Kliyn" + }, + { + "id": "3629", + "name": "Valantay Eppel" + }, + { + "id": "3631", + "name": "Dalcian Fang" + }, + { + "id": "3633", + "name": "Fyiona Fray" + }, + { + "id": "3634", + "name": "Fyiona Fray", + "examine": "A high-ranking Vyrewatch", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3635", + "name": "Abidor Crank" + }, + { + "id": "3636", + "name": "Spirit tree" + }, + { + "id": "3637", + "name": "Spirit tree" + }, + { + "id": "3638", + "name": "Launa" + }, + { + "id": "3640", + "name": "Launa" + }, + { + "id": "3641", + "name": "Brana" + }, + { + "id": "3642", + "name": "Mawnis Burowgar" + }, + { + "id": "3643", + "name": "Tolna" + }, + { + "id": "3644", + "name": "Tolna" + }, + { + "id": "3645", + "name": "Angry bear", + "examine": "He looks a little on the cross side!", + "attack_level": "38", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "297,299,298", + "death_animation": "4929", + "defence_animation": "4927", + "defence_level": "38", + "lifepoints": "35", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4927", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "41", + "weakness": "9" + }, + { + "id": "3646", + "name": "Angry unicorn", + "examine": "He looks a little on the cross side!", + "aggressive": "false", + "attack_level": "38", + "attack_speed": "4", + "combat_audio": "876,878,877", + "death_animation": "6377", + "defence_animation": "0", + "defence_level": "38", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "6376", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "41", + "weakness": "9" + }, + { + "id": "3647", + "name": "Angry giant rat", + "examine": "He looks a little on the cross side!", + "attack_level": "25", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "4933", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "3648", + "name": "Angry goblin", + "examine": "He looks a little on the cross side!", + "attack_level": "25", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "6185", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "3649", + "name": "Fear reaper", + "examine": "AHHHHH!", + "attack_level": "41", + "attack_speed": "4", + "combat_audio": "297,299,298", + "death_animation": "3813", + "defence_animation": "3811", + "defence_level": "40", + "lifepoints": "25", + "magic_animation": "0", + "melee_animation": "3812", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "41", + "weakness": "" + }, + { + "id": "3650", + "name": "Confusion beast", + "examine": "What on Gielinor is that?!?", + "attack_level": "28", + "death_animation": "3821", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "40", + "magic_animation": "0", + "melee_animation": "3818", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "28", + "weakness": "9" + }, + { + "id": "3651", + "name": "Confusion beast" + }, + { + "id": "3652", + "name": "Confusion beast" + }, + { + "id": "3653", + "name": "Confusion beast" + }, + { + "id": "3654", + "name": "Confusion beast" + }, + { + "id": "3655", + "name": "Hopeless creature", + "examine": "A hopeless poor creature.", + "attack_level": "25", + "death_animation": "3827", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "3823", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "3656", + "name": "Hopeless creature" + }, + { + "id": "3657", + "name": "Hopeless creature" + }, + { + "id": "3658", + "name": "Tolna" + }, + { + "id": "3659", + "name": "Tolna" + }, + { + "id": "3660", + "name": "Tolna" + }, + { + "id": "3661", + "name": "Angry unicorn", + "examine": "He looks a little on the cross side!", + "aggressive": "false", + "attack_level": "38", + "attack_speed": "4", + "combat_audio": "876,878,877", + "death_animation": "6377", + "defence_animation": "0", + "defence_level": "38", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "6376", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "41", + "weakness": "9" + }, + { + "id": "3662", + "name": "Angry giant rat", + "examine": "He looks a little on the cross side!", + "attack_level": "38", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "38", + "lifepoints": "50", + "melee_animation": "4933", + "range_level": "1", + "safespot": null, + "strength_level": "41" + }, + { + "id": "3663", + "name": "Angry goblin", + "examine": "He looks a little on the cross side!", + "attack_level": "38", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "38", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "6185", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "41", + "weakness": "9" + }, + { + "id": "3664", + "name": "Angry bear", + "examine": "He looks a little on the cross side!", + "attack_level": "38", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "297,299,298", + "death_animation": "4929", + "defence_animation": "4927", + "defence_level": "38", + "lifepoints": "10", + "magic_level": "1", + "melee_animation": "4927", + "range_level": "1", + "safespot": null, + "strength_level": "41" + }, + { + "id": "3665", + "name": "Fear reaper", + "examine": "AHHHHH!", + "attack_level": "45", + "attack_speed": "4", + "bonuses": "", + "combat_audio": "297,299,298", + "death_animation": "3813", + "defence_animation": "3811", + "defence_level": "45", + "lifepoints": "57", + "magic_level": "1", + "melee_animation": "3812", + "range_level": "1", + "safespot": null, + "strength_level": "48" + }, + { + "id": "3666", + "name": "Confusion beast", + "examine": "What on Gielinor is that?!?", + "attack_level": "52", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "297,299,298", + "death_animation": "3821", + "defence_animation": "3820", + "defence_level": "52", + "lifepoints": "64", + "magic_level": "1", + "melee_animation": "3818", + "range_level": "1", + "safespot": null, + "strength_level": "55" + }, + { + "id": "3667", + "name": "Hopeless creature", + "examine": "He looks a little on the cross side!", + "attack_level": "59", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "297,299,298", + "death_animation": "3827", + "defence_animation": "0", + "defence_level": "59", + "lifepoints": "71", + "magic_level": "1", + "melee_animation": "3823", + "range_level": "1", + "safespot": null, + "strength_level": "62" + }, + { + "id": "3668", + "name": "Hopeless beast" + }, + { + "id": "3669", + "name": "Hopeless beast" + }, + { + "id": "3670", + "name": "Odd Old Man", + "examine": "That's a lot of bones on his back..." + }, + { + "id": "3671", + "name": "Fortunato", + "examine": "Looks like he could do with a sip of Amontillado." + }, + { + "id": "3672", + "name": "Ram", + "examine": "Freshly sheared.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "757,759,758", + "death_animation": "5343", + "defence_animation": "5337", + "defence_level": "1", + "lifepoints": "8", + "magic_animation": "0", + "melee_animation": "5341", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "3673", + "name": "Ram", + "examine": "White and fluffy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "757,759,758", + "death_animation": "5336", + "defence_animation": "5337", + "defence_level": "1", + "lifepoints": "8", + "magic_animation": "0", + "melee_animation": "5338", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "3674", + "name": "Sack" + }, + { + "id": "3675", + "name": "Vulture", + "examine": "If you see them circling, run.", + "attack_level": "40", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "890,892,891", + "death_animation": "2021", + "defence_animation": "2024", + "defence_level": "10", + "lifepoints": "10", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "2019", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "40", + "weakness": "9" + }, + { + "id": "3676", + "name": "Vulture", + "examine": "If you see them circling, run.", + "attack_level": "40", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "890,892,891", + "death_animation": "2026", + "defence_animation": "2024", + "defence_level": "10", + "lifepoints": "10", + "magic_level": "1", + "melee_animation": "2025", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "40" + }, + { + "id": "3677", + "name": "Sinister Stranger" + }, + { + "id": "3678", + "name": "Sinister Stranger" + }, + { + "id": "3679", + "name": "Vestri" + }, + { + "id": "3680", + "name": "Ali the Leaflet Dropper", + "examine": "A young boy handing out flyers.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3681", + "name": "Nigel" + }, + { + "id": "3682", + "name": "Egg" + }, + { + "id": "3683", + "name": "Egg" + }, + { + "id": "3684", + "name": "Egg" + }, + { + "id": "3685", + "name": "Egg" + }, + { + "id": "3686", + "name": "Chocolate kebbit" + }, + { + "id": "3687", + "name": "Chocolate kebbit" + }, + { + "id": "3688", + "name": "Easter Bunny" + }, + { + "id": "3689", + "name": "Egg" + }, + { + "id": "3690", + "name": "Egg" + }, + { + "id": "3691", + "name": "Egg" + }, + { + "id": "3692", + "name": "Egg" + }, + { + "id": "3693", + "name": "Egg" + }, + { + "id": "3694", + "name": "Egg" + }, + { + "id": "3695", + "name": "Volf Olafson" + }, + { + "id": "3696", + "name": "Ingrid Hradson" + }, + { + "id": "3697", + "name": "Skeleton fremennik", + "examine": "Could use a good meal.", + "attack_level": "17", + "combat_audio": "774,775,777", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "17", + "lifepoints": "24", + "magic_animation": "0", + "melee_animation": "6128", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "17", + "weakness": "6" + }, + { + "id": "3698", + "name": "Skeleton fremennik", + "attack_level": "1", + "combat_audio": "774,775,777", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "400", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3699", + "name": "Skeleton fremennik", + "attack_level": "1", + "combat_audio": "774,775,777", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "400", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3700", + "name": "Skeleton fremennik", + "examine": "He seems a little underweight.", + "attack_level": "20", + "combat_audio": "774,775,777", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "28", + "magic_animation": "0", + "melee_animation": "6128", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "20", + "weakness": "6" + }, + { + "id": "3701", + "name": "Skeleton fremennik", + "examine": "He seems a little underweight.", + "attack_level": "20", + "combat_audio": "774,775,777", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "28", + "magic_animation": "0", + "melee_animation": "6128", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "20", + "weakness": "6" + }, + { + "id": "3702", + "name": "Skeleton fremennik", + "attack_level": "1", + "combat_audio": "774,775,777", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "35", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3703", + "name": "Skeleton fremennik", + "examine": "He seems a little underweight.", + "attack_level": "22", + "combat_audio": "774,775,777", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "6128", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "22", + "weakness": "6" + }, + { + "id": "3704", + "name": "Skeleton fremennik", + "examine": "He seems a little underweight.", + "attack_level": "22", + "combat_audio": "774,775,777", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "6128", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "22", + "weakness": "6" + }, + { + "id": "3705", + "name": "Skeleton fremennik", + "attack_level": "1", + "combat_audio": "774,775,777", + "defence_level": "1", + "lifepoints": "10", + "melee_animation": "5485", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3706", + "name": "Ulfric", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "60", + "melee_animation": "6118", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3707", + "name": "Brine rat", + "examine": "Eww", + "attack_level": "35", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "6115", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "6117", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "50", + "strength_level": "35", + "weakness": "9" + }, + { + "id": "3708", + "name": "Boulder" + }, + { + "id": "3709", + "name": "Boulder", + "examine": "A Wilderness fighter of massive repute.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3710", + "name": "Ulfric" + }, + { + "id": "3711", + "name": "Giant bat", + "examine": "An annoying flappy thing.", + "aggressive": "true", + "attack_level": "12", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,10,10,12,10,8,0,0,0,0,0", + "combat_audio": "292,294,293", + "death_animation": "4917", + "defence_animation": "4916", + "defence_level": "22", + "lifepoints": "32", + "magic_animation": "4915", + "magic_level": "1", + "melee_animation": "4915", + "range_animation": "4915", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "8", + "strength_level": "22", + "weakness": "4" + }, + { + "id": "3712", + "name": "Zanik" + }, + { + "id": "3713", + "name": "Sigmund" + }, + { + "id": "3714", + "name": "Zanik" + }, + { + "id": "3715", + "name": "Guard", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3716", + "name": "Sigmund" + }, + { + "id": "3717", + "name": "Sigmund" + }, + { + "id": "3718", + "name": "Sigmund" + }, + { + "id": "3719", + "name": "Sigmund" + }, + { + "id": "3720", + "name": "Sigmund" + }, + { + "id": "3721", + "name": "Zanik" + }, + { + "id": "3722", + "name": "Zanik" + }, + { + "id": "3723", + "name": "General Bentnoze" + }, + { + "id": "3724", + "name": "General Wartface" + }, + { + "id": "3725", + "name": "Grubfoot" + }, + { + "id": "3726", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "3727", + "name": "Splatter", + "examine": "Don't burst its bubble!", + "attack_level": "20", + "bonuses": "5,10,10,10,10,2,0,0,0,0,0,0,0,0,0", + "combat_audio": "809,811,810", + "death_animation": "3888", + "defence_animation": "3890", + "defence_level": "20", + "lifepoints": "13", + "magic_animation": "3891", + "magic_level": "5", + "melee_animation": "3891", + "range_animation": "3891", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "20", + "weakness": "8" + }, + { + "id": "3728", + "name": "Splatter", + "examine": "Don't burst its bubble!", + "attack_level": "25", + "bonuses": "10,15,15,15,15,5,0,0,0,0,0,0,0,0,0", + "combat_audio": "809,811,810", + "death_animation": "3888", + "defence_animation": "3890", + "defence_level": "25", + "lifepoints": "23", + "magic_animation": "3891", + "magic_level": "10", + "melee_animation": "3891", + "range_animation": "3891", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "25" + }, + { + "id": "3729", + "name": "Splatter", + "examine": "Don't burst its bubble!", + "attack_level": "30", + "bonuses": "15,20,20,20,20,8,0,0,0,0,0,0,0,0,0", + "combat_audio": "809,811,810", + "death_animation": "3888", + "defence_animation": "3890", + "defence_level": "30", + "lifepoints": "23", + "magic_animation": "3891", + "magic_level": "10", + "melee_animation": "3891", + "range_animation": "3891", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "30" + }, + { + "id": "3730", + "name": "Splatter", + "examine": "Don't burst its bubble!", + "attack_level": "35", + "bonuses": "20,25,25,25,25,10,0,0,0,0,0,0,0,0,0", + "combat_audio": "809,811,810", + "death_animation": "3888", + "defence_animation": "3890", + "defence_level": "35", + "lifepoints": "23", + "magic_animation": "3891", + "magic_level": "15", + "melee_animation": "3891", + "range_animation": "3891", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "35" + }, + { + "id": "3731", + "name": "Splatter", + "examine": "Don't burst its bubble!", + "attack_level": "40", + "bonuses": "25,30,30,30,30,15,0,0,0,0,0,0,0,0,0", + "combat_audio": "809,811,810", + "death_animation": "3888", + "defence_animation": "3890", + "defence_level": "40", + "lifepoints": "23", + "magic_animation": "3891", + "magic_level": "20", + "melee_animation": "3891", + "range_animation": "3891", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "40" + }, + { + "id": "3732", + "name": "Shifter", + "examine": "Nippy little thing!", + "aggressive": "true", + "attack_level": "28", + "bonuses": "20,25,20,40,40,40,40,5,18,0,0,0,0,0,0", + "combat_audio": "766,768,767", + "death_animation": "3903", + "defence_animation": "3902", + "defence_level": "28", + "lifepoints": "23", + "magic_animation": "3901", + "magic_level": "14", + "melee_animation": "3901", + "poison_immune": "true", + "range_animation": "3901", + "range_level": "1", + "respawn_delay": "127", + "safespot": null, + "strength_level": "28", + "weakness": "9" + }, + { + "id": "3733", + "name": "Shifter", + "examine": "Nippy little thing!", + "aggressive": "true", + "attack_level": "28", + "bonuses": "20,25,20,40,40,40,40,5,18,0,0,0,0,0,0", + "combat_audio": "766,768,767", + "death_animation": "3903", + "defence_animation": "3902", + "defence_level": "28", + "lifepoints": "23", + "magic_animation": "3901", + "magic_level": "14", + "melee_animation": "3901", + "poison_immune": "true", + "range_animation": "3901", + "range_level": "1", + "respawn_delay": "127", + "safespot": null, + "strength_level": "28" + }, + { + "id": "3734", + "name": "Shifter", + "examine": "Nippy little thing!", + "aggressive": "true", + "attack_level": "42", + "bonuses": "30,35,30,50,50,50,50,10,15,0,0,0,0,0,0", + "combat_audio": "766,768,767", + "death_animation": "3903", + "defence_animation": "3902", + "defence_level": "42", + "lifepoints": "38", + "magic_animation": "3901", + "magic_level": "20", + "melee_animation": "3901", + "poison_immune": "true", + "range_animation": "3901", + "range_level": "1", + "respawn_delay": "127", + "safespot": null, + "strength_level": "42" + }, + { + "id": "3735", + "name": "Shifter", + "examine": "Nippy little thing!", + "aggressive": "true", + "attack_level": "42", + "bonuses": "30,35,30,50,50,50,50,10,15,0,0,0,0,0,0", + "combat_audio": "766,768,767", + "death_animation": "3903", + "defence_animation": "3902", + "defence_level": "42", + "lifepoints": "38", + "magic_animation": "3901", + "magic_level": "20", + "melee_animation": "3901", + "poison_immune": "true", + "range_animation": "3901", + "range_level": "1", + "respawn_delay": "127", + "safespot": null, + "strength_level": "42" + }, + { + "id": "3736", + "name": "Shifter", + "examine": "Nippy little thing!", + "aggressive": "true", + "attack_level": "54", + "bonuses": "35,40,35,60,60,60,60,20,15,0,0,0,0,0,0", + "combat_audio": "766,768,767", + "death_animation": "3903", + "defence_animation": "3902", + "defence_level": "54", + "lifepoints": "53", + "magic_animation": "3901", + "magic_level": "25", + "melee_animation": "3901", + "poison_immune": "true", + "range_animation": "3901", + "range_level": "1", + "respawn_delay": "127", + "safespot": null, + "strength_level": "54" + }, + { + "id": "3737", + "name": "Shifter", + "examine": "Nippy little thing!", + "aggressive": "true", + "attack_level": "54", + "bonuses": "35,40,35,60,60,60,60,20,15,0,0,0,0,0,0", + "combat_audio": "766,768,767", + "death_animation": "3903", + "defence_animation": "3902", + "defence_level": "54", + "lifepoints": "53", + "magic_animation": "3901", + "magic_level": "25", + "melee_animation": "3901", + "poison_immune": "true", + "range_animation": "3901", + "range_level": "1", + "respawn_delay": "127", + "safespot": null, + "strength_level": "54" + }, + { + "id": "3738", + "name": "Shifter", + "examine": "Nippy little thing!", + "aggressive": "true", + "attack_level": "60", + "bonuses": "40,50,40,70,70,70,70,30,15,0,0,0,0,0,0", + "combat_audio": "766,768,767", + "death_animation": "3903", + "defence_animation": "3902", + "defence_level": "60", + "lifepoints": "68", + "magic_animation": "3901", + "magic_level": "30", + "melee_animation": "3901", + "poison_immune": "true", + "range_animation": "3901", + "range_level": "1", + "respawn_delay": "127", + "safespot": null, + "strength_level": "60" + }, + { + "id": "3739", + "name": "Shifter", + "examine": "Nippy little thing!", + "aggressive": "true", + "attack_level": "60", + "bonuses": "40,50,40,70,70,70,70,30,15,0,0,0,0,0,0", + "combat_audio": "766,768,767", + "death_animation": "3903", + "defence_animation": "3902", + "defence_level": "60", + "lifepoints": "68", + "magic_animation": "3901", + "magic_level": "30", + "melee_animation": "3901", + "poison_immune": "true", + "range_animation": "3901", + "range_level": "1", + "respawn_delay": "127", + "safespot": null, + "strength_level": "60" + }, + { + "id": "3740", + "name": "Shifter", + "examine": "Nippy little thing!", + "aggressive": "true", + "attack_level": "70", + "bonuses": "50,60,50,80,70,90,80,35,14,0,0,0,0,0,0", + "combat_audio": "766,768,767", + "death_animation": "3903", + "defence_animation": "3902", + "defence_level": "70", + "lifepoints": "83", + "magic_animation": "3901", + "magic_level": "35", + "melee_animation": "3901", + "poison_immune": "true", + "range_animation": "3901", + "range_level": "1", + "respawn_delay": "127", + "safespot": null, + "strength_level": "70" + }, + { + "id": "3741", + "name": "Shifter", + "examine": "Nippy little thing!", + "aggressive": "true", + "attack_level": "70", + "bonuses": "50,60,50,80,70,90,80,35,14,0,0,0,0,0,0", + "combat_audio": "766,768,767", + "death_animation": "3903", + "defence_animation": "3902", + "defence_level": "70", + "lifepoints": "83", + "magic_animation": "3901", + "magic_level": "35", + "melee_animation": "3901", + "poison_immune": "true", + "range_animation": "3901", + "range_level": "1", + "respawn_delay": "127", + "safespot": null, + "strength_level": "70" + }, + { + "id": "3742", + "name": "Ravager", + "examine": "Worse than termites!", + "attack_level": "15", + "attack_speed": "5", + "bonuses": "45,45,45,45,50,5,45,0,0,0,0,0,0,0,0", + "combat_audio": "714,716,715", + "death_animation": "3917", + "defence_animation": "3916", + "defence_level": "15", + "lifepoints": "23", + "magic_animation": "3915", + "magic_level": "10", + "melee_animation": "3915", + "range_animation": "3915", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "30", + "weakness": "7" + }, + { + "id": "3743", + "name": "Ravager", + "examine": "Worse than termites!", + "attack_level": "20", + "attack_speed": "5", + "bonuses": "45,45,45,45,50,5,55,0,0,0,0,0,0,0,0", + "combat_audio": "714,716,715", + "death_animation": "3917", + "defence_animation": "3916", + "defence_level": "20", + "lifepoints": "38", + "magic_animation": "3915", + "magic_level": "15", + "melee_animation": "3915", + "range_animation": "3915", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "40" + }, + { + "id": "3744", + "name": "Ravager", + "examine": "Worse than termites!", + "attack_level": "30", + "attack_speed": "5", + "bonuses": "45,55,55,55,50,10,45,0,0,0,0,0,0,0,0", + "combat_audio": "714,716,715", + "death_animation": "3917", + "defence_animation": "3916", + "defence_level": "30", + "lifepoints": "53", + "magic_animation": "3915", + "magic_level": "20", + "melee_animation": "3915", + "range_animation": "3915", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "60" + }, + { + "id": "3745", + "name": "Ravager", + "examine": "Worse than termites!", + "attack_level": "45", + "attack_speed": "5", + "bonuses": "60,60,60,60,80,10,45,0,0,0,0,0,0,0,0", + "combat_audio": "714,716,715", + "death_animation": "3917", + "defence_animation": "3916", + "defence_level": "45", + "lifepoints": "53", + "magic_animation": "3915", + "magic_level": "30", + "melee_animation": "3915", + "range_animation": "3915", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "75" + }, + { + "id": "3746", + "name": "Ravager", + "examine": "Worse than termites!", + "attack_level": "60", + "attack_speed": "5", + "bonuses": "65,70,70,70,90,20,56,0,0,0,0,0,0,0,0", + "combat_audio": "714,716,715", + "death_animation": "3917", + "defence_animation": "3916", + "defence_level": "60", + "lifepoints": "53", + "magic_animation": "3915", + "magic_level": "40", + "melee_animation": "3915", + "range_animation": "3915", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "80" + }, + { + "id": "3747", + "name": "Spinner", + "examine": "Eeewww!", + "attack_level": "20", + "bonuses": "20,40,40,40,40,10,38,0,0,0,0,0,0,0,0", + "combat_audio": "805,807,806", + "death_animation": "3910", + "defence_animation": "3909", + "defence_level": "20", + "lifepoints": "33", + "magic_animation": "3908", + "magic_level": "10", + "melee_animation": "3908", + "range_animation": "3908", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "20", + "weakness": "6" + }, + { + "id": "3748", + "name": "Spinner", + "examine": "Eeewww!", + "attack_level": "30", + "bonuses": "30,60,60,60,60,15,38,0,0,0,0,0,0,0,0", + "combat_audio": "805,807,806", + "death_animation": "3910", + "defence_animation": "3909", + "defence_level": "30", + "lifepoints": "50", + "magic_animation": "3908", + "magic_level": "15", + "melee_animation": "3908", + "range_animation": "3908", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "30" + }, + { + "id": "3749", + "name": "Spinner", + "examine": "Eeewww!", + "attack_level": "40", + "bonuses": "50,70,70,70,70,20,38,0,0,0,0,0,0,0,0", + "combat_audio": "805,807,806", + "death_animation": "3910", + "defence_animation": "3909", + "defence_level": "40", + "lifepoints": "67", + "magic_animation": "3908", + "magic_level": "20", + "melee_animation": "3908", + "range_animation": "3908", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "40" + }, + { + "id": "3750", + "name": "Spinner", + "examine": "Eeewww!", + "attack_level": "60", + "bonuses": "60,100,100,100,100,30,25,0,0,0,0,0,0,0,0", + "combat_audio": "805,807,806", + "death_animation": "3910", + "defence_animation": "3909", + "defence_level": "60", + "lifepoints": "101", + "magic_animation": "3908", + "magic_level": "30", + "melee_animation": "3908", + "range_animation": "3908", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "60" + }, + { + "id": "3751", + "name": "Spinner", + "examine": "Eeewww!", + "attack_level": "50", + "bonuses": "55,80,80,80,85,25,30,0,0,0,0,0,0,0,0", + "combat_audio": "805,807,806", + "death_animation": "3910", + "defence_animation": "3909", + "defence_level": "50", + "lifepoints": "84", + "magic_animation": "3908", + "magic_level": "25", + "melee_animation": "3908", + "range_animation": "3908", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "50" + }, + { + "id": "3752", + "name": "Torcher", + "examine": "Burn, baby, burn!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "30,30,30,30,15,30,40,0,0,0,0,0,0,0,0", + "combat_audio": "845,848,846", + "combat_style": "2", + "death_animation": "3881", + "defence_animation": "3880", + "defence_level": "25", + "end_gfx": "648", + "lifepoints": "18", + "magic_animation": "3882", + "magic_level": "25", + "melee_animation": "3882", + "projectile": "647", + "range_animation": "3882", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "start_gfx": "646", + "strength_level": "1", + "weakness": "5" + }, + { + "id": "3753", + "name": "Torcher", + "examine": "Burn, baby, burn!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "30,30,30,30,15,30,40,0,0,0,0,0,0,0,0", + "combat_audio": "845,848,846", + "combat_style": "2", + "death_animation": "3881", + "defence_animation": "3880", + "defence_level": "25", + "end_gfx": "648", + "lifepoints": "18", + "magic_animation": "3882", + "magic_level": "25", + "melee_animation": "3882", + "projectile": "647", + "range_animation": "3882", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "start_gfx": "646", + "strength_level": "1" + }, + { + "id": "3754", + "name": "Torcher", + "examine": "Burn, baby, burn!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "45,40,40,40,25,35,35,0,0,0,0,0,0,0,0", + "combat_audio": "845,848,846", + "combat_style": "2", + "death_animation": "3881", + "defence_animation": "3880", + "defence_level": "40", + "end_gfx": "648", + "lifepoints": "30", + "magic_animation": "3882", + "magic_level": "40", + "melee_animation": "3882", + "projectile": "647", + "range_animation": "3882", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "start_gfx": "646", + "strength_level": "1" + }, + { + "id": "3755", + "name": "Torcher", + "examine": "Burn, baby, burn!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "45,40,40,40,25,35,35,0,0,0,0,0,0,0,0", + "combat_audio": "845,848,846", + "combat_style": "2", + "death_animation": "3881", + "defence_animation": "3880", + "defence_level": "40", + "end_gfx": "648", + "lifepoints": "30", + "magic_animation": "3882", + "magic_level": "40", + "melee_animation": "3882", + "projectile": "647", + "range_animation": "3882", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "start_gfx": "646", + "strength_level": "1" + }, + { + "id": "3756", + "name": "Torcher", + "examine": "Burn, baby, burn!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "35,40,40,40,30,35,35,0,0,0,0,0,0,0,0", + "combat_audio": "845,848,846", + "combat_style": "2", + "death_animation": "3881", + "defence_animation": "3880", + "defence_level": "50", + "end_gfx": "648", + "lifepoints": "42", + "magic_animation": "3882", + "magic_level": "50", + "melee_animation": "3882", + "projectile": "647", + "range_animation": "3882", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "start_gfx": "646", + "strength_level": "1" + }, + { + "id": "3757", + "name": "Torcher", + "examine": "Burn, baby, burn!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "35,40,40,40,30,35,35,0,0,0,0,0,0,0,0", + "combat_audio": "845,848,846", + "combat_style": "2", + "death_animation": "3881", + "defence_animation": "3880", + "defence_level": "50", + "end_gfx": "648", + "lifepoints": "42", + "magic_animation": "3882", + "magic_level": "50", + "melee_animation": "3882", + "projectile": "647", + "range_animation": "3882", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "start_gfx": "646", + "strength_level": "1" + }, + { + "id": "3758", + "name": "Torcher", + "examine": "Burn, baby, burn!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,80,80,80,50,50,35,0,0,0,0,0,0,0,0", + "combat_audio": "845,848,846", + "combat_style": "2", + "death_animation": "3881", + "defence_animation": "3880", + "defence_level": "60", + "end_gfx": "648", + "lifepoints": "51", + "magic_animation": "3882", + "magic_level": "60", + "melee_animation": "3882", + "projectile": "647", + "range_animation": "3882", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "start_gfx": "646", + "strength_level": "1" + }, + { + "id": "3759", + "name": "Torcher", + "examine": "Burn, baby, burn!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,80,80,80,50,50,35,0,0,0,0,0,0,0,0", + "combat_audio": "845,848,846", + "combat_style": "2", + "death_animation": "3881", + "defence_animation": "3880", + "defence_level": "60", + "end_gfx": "648", + "lifepoints": "51", + "magic_animation": "3882", + "magic_level": "60", + "melee_animation": "3882", + "projectile": "647", + "range_animation": "3882", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "start_gfx": "646", + "strength_level": "1" + }, + { + "id": "3760", + "name": "Torcher", + "examine": "Burn, baby, burn!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "40,100,100,100,50,50,35,0,0,0,0,0,0,0,0", + "combat_audio": "845,848,846", + "combat_style": "2", + "death_animation": "3881", + "defence_animation": "3880", + "defence_level": "70", + "end_gfx": "648", + "lifepoints": "62", + "magic_animation": "3882", + "magic_level": "70", + "melee_animation": "3882", + "projectile": "647", + "range_animation": "3882", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "start_gfx": "646", + "strength_level": "1" + }, + { + "id": "3761", + "name": "Torcher", + "examine": "Burn, baby, burn!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "40,100,100,100,50,50,35,0,0,0,0,0,0,0,0", + "combat_audio": "845,848,846", + "combat_style": "2", + "death_animation": "3881", + "defence_animation": "3880", + "defence_level": "70", + "end_gfx": "648", + "lifepoints": "62", + "magic_animation": "3882", + "magic_level": "70", + "melee_animation": "3882", + "projectile": "647", + "range_animation": "3882", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "start_gfx": "646", + "strength_level": "1" + }, + { + "id": "3762", + "name": "Defiler", + "examine": "Duck!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "20,40,40,40,40,40,40,40,0,0,0,0,0,0,0", + "combat_audio": "392,394,393", + "combat_style": "1", + "death_animation": "3922", + "defence_animation": "3921", + "defence_level": "25", + "lifepoints": "27", + "magic_animation": "3920", + "magic_level": "30", + "melee_animation": "3920", + "projectile": "657", + "range_animation": "3920", + "range_level": "25", + "respawn_delay": "120", + "safespot": null, + "start_gfx": "657", + "strength_level": "1", + "weakness": "0" + }, + { + "id": "3763", + "name": "Defiler", + "examine": "Duck!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "20,40,40,40,40,40,40,40,0,0,0,0,0,0,0", + "combat_audio": "392,394,393", + "combat_style": "1", + "death_animation": "3922", + "defence_animation": "3921", + "defence_level": "25", + "lifepoints": "27", + "magic_animation": "3920", + "magic_level": "30", + "melee_animation": "3920", + "projectile": "657", + "range_animation": "3920", + "range_level": "25", + "respawn_delay": "120", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3764", + "name": "Defiler", + "examine": "Duck!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "30,50,60,60,60,60,40,40,0,0,0,0,0,0,0", + "combat_audio": "392,394,393", + "combat_style": "1", + "death_animation": "3922", + "defence_animation": "3921", + "defence_level": "40", + "lifepoints": "45", + "magic_animation": "3920", + "magic_level": "40", + "melee_animation": "3920", + "projectile": "657", + "range_animation": "3920", + "range_level": "40", + "respawn_delay": "120", + "safespot": null, + "start_gfx": "657", + "strength_level": "1" + }, + { + "id": "3765", + "name": "Defiler", + "examine": "Duck!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "30,40,60,60,60,60,40,40,0,0,0,0,0,0,0", + "combat_audio": "392,394,393", + "combat_style": "1", + "death_animation": "3922", + "defence_animation": "3921", + "defence_level": "40", + "lifepoints": "45", + "magic_animation": "3920", + "magic_level": "40", + "melee_animation": "3920", + "projectile": "657", + "range_animation": "3920", + "range_level": "40", + "respawn_delay": "120", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3766", + "name": "Defiler", + "examine": "Duck!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "35,65,70,70,70,70,40,40,0,0,0,0,0,0,0", + "combat_audio": "392,394,393", + "combat_style": "1", + "death_animation": "3922", + "defence_animation": "3921", + "defence_level": "50", + "lifepoints": "62", + "magic_animation": "3920", + "magic_level": "50", + "melee_animation": "3920", + "projectile": "657", + "range_animation": "3920", + "range_level": "50", + "respawn_delay": "120", + "safespot": null, + "start_gfx": "657", + "strength_level": "1" + }, + { + "id": "3767", + "name": "Defiler", + "examine": "Duck!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "35,65,70,70,70,70,40,40,0,0,0,0,0,0,0", + "combat_audio": "392,394,393", + "combat_style": "1", + "death_animation": "3922", + "defence_animation": "3921", + "defence_level": "50", + "lifepoints": "62", + "magic_animation": "3920", + "magic_level": "50", + "melee_animation": "3920", + "projectile": "657", + "range_animation": "3920", + "range_level": "50", + "respawn_delay": "120", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3768", + "name": "Defiler", + "examine": "Duck!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "40,90,80,80,80,80,40,40,0,0,0,0,0,0,0", + "combat_audio": "392,394,393", + "combat_style": "1", + "death_animation": "3922", + "defence_animation": "3921", + "defence_level": "60", + "lifepoints": "78", + "magic_animation": "3920", + "magic_level": "60", + "melee_animation": "3920", + "projectile": "657", + "range_animation": "3920", + "range_level": "60", + "respawn_delay": "120", + "safespot": null, + "start_gfx": "657", + "strength_level": "1" + }, + { + "id": "3769", + "name": "Defiler", + "examine": "Duck!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "40,90,80,80,80,80,40,40,0,0,0,0,0,0,0", + "combat_audio": "392,394,393", + "combat_style": "1", + "death_animation": "3922", + "defence_animation": "3921", + "defence_level": "60", + "lifepoints": "78", + "magic_animation": "3920", + "magic_level": "60", + "melee_animation": "3920", + "projectile": "657", + "range_animation": "3920", + "range_level": "60", + "respawn_delay": "120", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3770", + "name": "Defiler", + "examine": "Duck!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "50,100,100,100,120,100,40,40,80,0,0,0,0,0,0", + "combat_audio": "392,394,393", + "combat_style": "1", + "death_animation": "3922", + "defence_animation": "3921", + "defence_level": "70", + "lifepoints": "97", + "magic_animation": "3920", + "magic_level": "70", + "melee_animation": "3920", + "projectile": "657", + "range_animation": "3920", + "range_level": "70", + "respawn_delay": "120", + "safespot": null, + "start_gfx": "657", + "strength_level": "1" + }, + { + "id": "3771", + "name": "Defiler", + "examine": "Duck!", + "aggressive": "true", + "attack_level": "1", + "bonuses": "50,100,100,100,120,100,40,40,80,0,0,0,0,0,0", + "combat_audio": "392,394,393", + "combat_style": "1", + "death_animation": "3922", + "defence_animation": "3921", + "defence_level": "70", + "lifepoints": "97", + "magic_animation": "3920", + "magic_level": "70", + "melee_animation": "3920", + "projectile": "657", + "range_animation": "3920", + "range_level": "70", + "respawn_delay": "120", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3772", + "name": "Brawler", + "examine": "Mind your toes!", + "aggressive": "true", + "attack_level": "28", + "bonuses": "45,45,50,50,50,50,50,15,50,0,0,0,0,0,0", + "combat_audio": "323,326,325", + "death_animation": "3894", + "defence_animation": "3895", + "defence_level": "28", + "lifepoints": "53", + "magic_animation": "3896", + "magic_level": "14", + "melee_animation": "3896", + "range_animation": "3896", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "28", + "weakness": "9" + }, + { + "id": "3773", + "name": "Brawler", + "examine": "Mind your toes!", + "aggressive": "true", + "attack_level": "42", + "bonuses": "45,45,60,50,50,50,50,15,50,0,0,0,0,0,0", + "combat_audio": "323,326,325", + "death_animation": "3894", + "defence_animation": "3895", + "defence_level": "42", + "lifepoints": "83", + "magic_animation": "3896", + "magic_level": "21", + "melee_animation": "3896", + "range_animation": "3896", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "42" + }, + { + "id": "3774", + "name": "Brawler", + "examine": "Mind your toes!", + "aggressive": "true", + "attack_level": "56", + "bonuses": "45,45,60,80,80,80,80,25,50,0,0,0,0,0,0", + "combat_audio": "323,326,325", + "death_animation": "3894", + "defence_animation": "3895", + "defence_level": "56", + "lifepoints": "113", + "magic_animation": "3896", + "magic_level": "32", + "melee_animation": "3896", + "range_animation": "3896", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "56" + }, + { + "id": "3775", + "name": "Brawler", + "examine": "Mind your toes!", + "aggressive": "true", + "attack_level": "74", + "bonuses": "45,45,60,60,60,60,60,20,50,0,0,0,0,0,0", + "combat_audio": "323,326,325", + "death_animation": "3894", + "defence_animation": "3895", + "defence_level": "74", + "lifepoints": "143", + "magic_animation": "3896", + "magic_level": "38", + "melee_animation": "3896", + "range_animation": "3896", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "74" + }, + { + "id": "3776", + "name": "Brawler", + "examine": "Mind your toes!", + "aggressive": "true", + "attack_level": "88", + "bonuses": "45,45,80,100,100,100,100,30,46,0,0,0,0,0,0", + "combat_audio": "323,326,325", + "death_animation": "3894", + "defence_animation": "3895", + "defence_level": "88", + "lifepoints": "173", + "magic_animation": "3896", + "magic_level": "45", + "melee_animation": "3896", + "range_animation": "3896", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "88" + }, + { + "id": "3777", + "name": "Doomsayer", + "examine": "Cheerful, helpful and optimistic, I'll bet.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3778", + "name": "Arthur" + }, + { + "id": "3780", + "name": "Squire" + }, + { + "id": "3782", + "name": "Void Knight", + "examine": "A squire of balance.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "180,180,180,180,80,0,0,0,0,0,0,0,0,0,0", + "defence_level": "80", + "lifepoints": "200", + "magic_level": "80", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3783", + "name": "Frog", + "examine": "Long legged licker.", + "attack_level": "55", + "death_animation": "7256", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "7260", + "poisonous": "true", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "55", + "weakness": "9" + }, + { + "id": "3784", + "name": "Void Knight", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "0", + "defence_level": "1", + "lifepoints": "200", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3785", + "name": "Void Knight", + "examine": "A squire of balance.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "180,180,180,180,80,0,0,0,0,0,0,0,0,0,0", + "defence_level": "80", + "lifepoints": "200", + "magic_level": "80", + "range_level": "1", + "respawn_delay": "120", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3786", + "name": "Void Knight", + "examine": "A powerful knight of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3787", + "name": "Sir Palomedes" + }, + { + "id": "3788", + "name": "Void Knight", + "examine": "A powerful knight of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3789", + "name": "Void Knight" + }, + { + "id": "3790", + "name": "Squire", + "examine": "A squire of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3791", + "name": "Squire", + "examine": "A squire of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3792", + "name": "Squire", + "examine": "A squire of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3793", + "name": "Squire", + "examine": "A squire of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3794", + "name": "Squire", + "examine": "A squire of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3795", + "name": "Squire", + "examine": "A squire of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3796", + "name": "Squire", + "examine": "A squire of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3797", + "name": "Squire", + "examine": "A squire of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3798", + "name": "Squire", + "examine": "A squire of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3799", + "name": "Squire", + "examine": "A squire of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3800", + "name": "Squire", + "examine": "A squire of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3801", + "name": "Squire", + "examine": "A squire of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3802", + "name": "Squire (Novice)", + "examine": "A squire of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3803", + "name": "Fishing spot" + }, + { + "id": "3805", + "name": "Postie Pete", + "examine": "Posts things.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3806", + "name": "Millie Miller", + "examine": "Miss Millicent Miller the Miller of Mill Lane Mill.", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3807", + "name": "Gillie Groats", + "examine": "Gillie the Milkmaid milks cows. She's udderly fantastic at it.", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3808", + "name": "Tortoise", + "examine": "Massive beast of War with extra Gnome.", + "attack_level": "36", + "death_animation": "3962", + "defence_animation": "0", + "defence_level": "36", + "lifepoints": "121", + "magic_animation": "0", + "melee_animation": "3960", + "range_animation": "3954", + "range_level": "1", + "safespot": null, + "strength_level": "36", + "weakness": "6" + }, + { + "id": "3809", + "name": "Captain Dalbur", + "examine": "Tally Ho!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3810", + "name": "Captain Bleemadge", + "examine": "Huzzah!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3811", + "name": "Captain Errdo", + "examine": "Up up and away!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3812", + "name": "Captain Klemfoodle", + "examine": "Up up and away!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3814", + "name": "Gnome Archer", + "examine": "A Gnome Arrow-chucker", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "196", + "defence_animation": "193", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "190", + "prj_height": "30", + "projectile": "10", + "range_animation": "190", + "range_level": "5", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "2" + }, + { + "id": "3815", + "name": "Gnome Driver", + "examine": "Yee haa!", + "aggressive": "true", + "attack_level": "5", + "death_animation": "196", + "defence_animation": "193", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "3969", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "3816", + "name": "Gnome Mage", + "examine": "A battle mage of the gnomish variety.", + "aggressive": "true", + "attack_level": "1", + "combat_style": "2", + "death_animation": "196", + "defence_animation": "193", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "200", + "magic_level": "5", + "melee_animation": "3968", + "prj_height": "30", + "projectile": "94", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "spell_id": "", + "start_gfx": "93", + "start_height": "80", + "strength_level": "1", + "weakness": "5" + }, + { + "id": "3817", + "name": "Lieutenant Schepbur" + }, + { + "id": "3818", + "name": "Trainer Nacklepen", + "examine": "The cruel tortoise trainer. Boo!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3819", + "name": "Tortoise", + "examine": "A large tortoise.", + "attack_level": "36", + "death_animation": "3962", + "defence_animation": "0", + "defence_level": "36", + "lifepoints": "101", + "magic_animation": "0", + "melee_animation": "3960", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "36", + "weakness": "6" + }, + { + "id": "3820", + "name": "Wise Old Man" + }, + { + "id": "3822", + "name": "Herman Caranos", + "examine": "Founder and Director of the Piscatoris Fishing Colony." + }, + { + "id": "3823", + "name": "Franklin Caranos", + "examine": "Engineer for the Piscatoris Fishing Colony." + }, + { + "id": "3824", + "name": "Arnold Lydspor", + "examine": "Secretary and Storemaster for the Piscatoris Fishing Colony." + }, + { + "id": "3825", + "name": "Devin Mendelberg" + }, + { + "id": "3826", + "name": "George Laxmeister" + }, + { + "id": "3827", + "name": "Ramara du Croissant" + }, + { + "id": "3828", + "name": "Kathy Corkat" + }, + { + "id": "3831", + "name": "Kathy Corkat" + }, + { + "id": "3832", + "name": "Kalphite Queen" + }, + { + "id": "3835", + "name": "Kalphite Queen", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "6242", + "defence_animation": "6240", + "defence_level": "1", + "lifepoints": "255", + "melee_animation": "6241", + "range_level": "1000", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3836", + "name": "Kalphite Queen", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "6233", + "defence_animation": "6237", + "defence_level": "1", + "lifepoints": "255", + "melee_animation": "6234", + "range_level": "1000", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3837", + "name": "Drunken Dwarf" + }, + { + "id": "3838", + "name": "Wise Old Man" + }, + { + "id": "3839", + "name": "Wise Old Man" + }, + { + "id": "3840", + "name": "Sea troll", + "examine": "An aquatic troll.", + "aggressive": "true", + "attack_level": "45", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "64", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "45", + "weakness": "6" + }, + { + "id": "3841", + "name": "Sea troll" + }, + { + "id": "3842", + "name": "Sea troll" + }, + { + "id": "3843", + "name": "Sea troll", + "examine": "An aquatic troll.", + "aggressive": "true", + "attack_level": "60", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "85", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "60", + "weakness": "6" + }, + { + "id": "3844", + "name": "Skeleton Mage" + }, + { + "id": "3845", + "name": "Sea troll" + }, + { + "id": "3846", + "name": "Sea Troll General" + }, + { + "id": "3847", + "name": "Sea Troll Queen", + "examine": "The mother of all sea trolls!", + "aggressive": "true", + "attack_level": "65", + "death_animation": "3993", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "428", + "magic_animation": "0", + "magic_level": "65", + "melee_animation": "3991", + "range_animation": "0", + "range_level": "65", + "respawn_delay": "60", + "safespot": null, + "strength_level": "65", + "weakness": "10" + }, + { + "id": "3848", + "name": "Fishing spot" + }, + { + "id": "3849", + "name": "Fishing spot", + "examine": "What have they done to him?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3850", + "name": "Skeleton Mage" + }, + { + "id": "3851", + "name": "Skeleton Mage", + "examine": "Doesn't seem to want to go away.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "80", + "magic_animation": "811", + "magic_level": "100", + "melee_animation": "811", + "range_animation": "811", + "range_level": "1", + "strength_level": "10" + }, + { + "id": "3852", + "name": "Suspect" + }, + { + "id": "3853", + "name": "Suspect" + }, + { + "id": "3854", + "name": "Suspect" + }, + { + "id": "3855", + "name": "Suspect" + }, + { + "id": "3856", + "name": "Suspect" + }, + { + "id": "3857", + "name": "Suspect" + }, + { + "id": "3858", + "name": "Suspect" + }, + { + "id": "3859", + "name": "Suspect" + }, + { + "id": "3860", + "name": "Suspect" + }, + { + "id": "3861", + "name": "Suspect" + }, + { + "id": "3862", + "name": "Suspect" + }, + { + "id": "3863", + "name": "Suspect" + }, + { + "id": "3864", + "name": "Suspect" + }, + { + "id": "3865", + "name": "Suspect" + }, + { + "id": "3866", + "name": "Suspect" + }, + { + "id": "3867", + "name": "Suspect" + }, + { + "id": "3868", + "name": "Suspect" + }, + { + "id": "3869", + "name": "Suspect" + }, + { + "id": "3870", + "name": "Suspect" + }, + { + "id": "3871", + "name": "Suspect" + }, + { + "id": "3872", + "name": "Suspect" + }, + { + "id": "3873", + "name": "Suspect" + }, + { + "id": "3874", + "name": "Suspect" + }, + { + "id": "3875", + "name": "Suspect" + }, + { + "id": "3876", + "name": "Suspect" + }, + { + "id": "3877", + "name": "Suspect" + }, + { + "id": "3878", + "name": "Suspect" + }, + { + "id": "3879", + "name": "Suspect" + }, + { + "id": "3880", + "name": "Suspect" + }, + { + "id": "3881", + "name": "Suspect" + }, + { + "id": "3882", + "name": "Suspect" + }, + { + "id": "3883", + "name": "Suspect" + }, + { + "id": "3884", + "name": "Suspect" + }, + { + "id": "3885", + "name": "Suspect" + }, + { + "id": "3886", + "name": "Suspect" + }, + { + "id": "3887", + "name": "Suspect" + }, + { + "id": "3888", + "name": "Suspect" + }, + { + "id": "3889", + "name": "Suspect" + }, + { + "id": "3890", + "name": "Suspect" + }, + { + "id": "3891", + "name": "Suspect" + }, + { + "id": "3892", + "name": "Molly" + }, + { + "id": "3893", + "name": "Molly" + }, + { + "id": "3894", + "name": "Molly" + }, + { + "id": "3895", + "name": "Molly" + }, + { + "id": "3896", + "name": "Molly" + }, + { + "id": "3897", + "name": "Molly" + }, + { + "id": "3898", + "name": "Molly" + }, + { + "id": "3899", + "name": "Molly" + }, + { + "id": "3900", + "name": "Molly" + }, + { + "id": "3901", + "name": "Molly" + }, + { + "id": "3902", + "name": "Molly" + }, + { + "id": "3903", + "name": "Molly" + }, + { + "id": "3904", + "name": "Molly" + }, + { + "id": "3905", + "name": "Molly" + }, + { + "id": "3906", + "name": "Molly" + }, + { + "id": "3907", + "name": "Molly" + }, + { + "id": "3908", + "name": "Molly" + }, + { + "id": "3909", + "name": "Molly" + }, + { + "id": "3910", + "name": "Molly" + }, + { + "id": "3911", + "name": "Molly" + }, + { + "id": "3912", + "name": "Flippa" + }, + { + "id": "3913", + "name": "Tilt" + }, + { + "id": "3914", + "name": "Gardener" + }, + { + "id": "3915", + "name": "Man", + "examine": "One of Gielinor's many citizens.", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "7", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "3916", + "name": "Carpenter Kjallak", + "examine": "His bark's worse than his blight.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3917", + "name": "Farmer Fromund", + "examine": "He looks a bit seedy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3918", + "name": "Prince Brand" + }, + { + "id": "3919", + "name": "Princess Astrid" + }, + { + "id": "3920", + "name": "Runa" + }, + { + "id": "3921", + "name": "Halla", + "examine": "A subject of Miscellania." + }, + { + "id": "3922", + "name": "Finn", + "examine": "Runs the general store." + }, + { + "id": "3923", + "name": "Osvald" + }, + { + "id": "3924", + "name": "Runolf" + }, + { + "id": "3925", + "name": "Tjorvi", + "examine": "A subject of Miscellania." + }, + { + "id": "3926", + "name": "Ingrid" + }, + { + "id": "3927", + "name": "Thora", + "examine": "A subject of Miscellania." + }, + { + "id": "3928", + "name": "Signy" + }, + { + "id": "3929", + "name": "Hild" + }, + { + "id": "3930", + "name": "Armod" + }, + { + "id": "3931", + "name": "Beigarth" + }, + { + "id": "3932", + "name": "Reinn" + }, + { + "id": "3933", + "name": "Alviss", + "examine": "A dwarf who's currently living in Miscellania." + }, + { + "id": "3934", + "name": "Fullangr", + "examine": "A dwarf who's currently living in Miscellania." + }, + { + "id": "3935", + "name": "Jari", + "examine": "A dwarf who's currently living in Miscellania." + }, + { + "id": "3936", + "name": "Thorodin" + }, + { + "id": "3937", + "name": "Ferd", + "examine": "A dwarf miner. He's shoring up the walls." + }, + { + "id": "3938", + "name": "Donal", + "examine": "A rather scared-looking dwarf. He doesn't seem all that drunk." + }, + { + "id": "3939", + "name": "Sea Snake Young", + "examine": "Snake", + "aggressive": "true", + "attack_level": "33", + "combat_audio": "3609,3608,3610", + "death_animation": "3540", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "128", + "magic_animation": "0", + "melee_animation": "3538", + "range_animation": "0", + "range_level": "45", + "respawn_delay": "60", + "safespot": null, + "strength_level": "33", + "weakness": "1" + }, + { + "id": "3940", + "name": "Sea Snake Hatchling", + "examine": "A baby sea snake. Snaaaaaaake!", + "aggressive": "true", + "attack_level": "33", + "combat_audio": "3609,3608,3610", + "death_animation": "3540", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "100", + "magic_animation": "0", + "melee_animation": "3538", + "range_animation": "0", + "range_level": "45", + "respawn_delay": "60", + "safespot": null, + "strength_level": "33", + "weakness": "1" + }, + { + "id": "3941", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3942", + "name": "Guard", + "examine": "He's guarding the entrance to the dungeons.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "3943", + "name": "Giant Sea Snake", + "examine": "A big snake that lives in the sea. How did it get in here?", + "aggressive": "true", + "attack_level": "33", + "combat_audio": "3609,3608,3610", + "death_animation": "4039", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "385", + "magic_animation": "0", + "melee_animation": "4040", + "range_animation": "0", + "range_level": "45", + "respawn_delay": "60", + "safespot": null, + "strength_level": "33", + "weakness": "1" + }, + { + "id": "3944", + "name": "Hangman game" + }, + { + "id": "3945", + "name": "Hangman game" + }, + { + "id": "3946", + "name": "Hangman game" + }, + { + "id": "3947", + "name": "Hangman game" + }, + { + "id": "3948", + "name": "Hangman game" + }, + { + "id": "3949", + "name": "Hangman game" + }, + { + "id": "3950", + "name": "Hangman game" + }, + { + "id": "3951", + "name": "Hangman game" + }, + { + "id": "3952", + "name": "Hangman game" + }, + { + "id": "3953", + "name": "Hangman game" + }, + { + "id": "3954", + "name": "Treasure fairy" + }, + { + "id": "3955", + "name": "Jacky Jester" + }, + { + "id": "3956", + "name": "Combat stone" + }, + { + "id": "3957", + "name": "Combat stone" + }, + { + "id": "3958", + "name": "Combat stone" + }, + { + "id": "3959", + "name": "Combat stone" + }, + { + "id": "3960", + "name": "Combat stone" + }, + { + "id": "3961", + "name": "Combat stone" + }, + { + "id": "3962", + "name": "Combat stone" + }, + { + "id": "3963", + "name": "Combat stone" + }, + { + "id": "3964", + "name": "Combat stone" + }, + { + "id": "3965", + "name": "Combat stone" + }, + { + "id": "3966", + "name": "Combat stone" + }, + { + "id": "3967", + "name": "Combat stone" + }, + { + "id": "3968", + "name": "Combat stone" + }, + { + "id": "3969", + "name": "Combat stone" + }, + { + "id": "3970", + "name": "Combat stone" + }, + { + "id": "3971", + "name": "Combat stone" + }, + { + "id": "3972", + "name": "Combat stone" + }, + { + "id": "3973", + "name": "Combat stone" + }, + { + "id": "3974", + "name": "Combat stone" + }, + { + "id": "3975", + "name": "Combat stone" + }, + { + "id": "3976", + "name": "Combat stone" + }, + { + "id": "3977", + "name": "Combat stone" + }, + { + "id": "3978", + "name": "Combat stone" + }, + { + "id": "3979", + "name": "Combat stone" + }, + { + "id": "3980", + "name": "Combat stone" + }, + { + "id": "3981", + "name": "Combat stone" + }, + { + "id": "3982", + "name": "Combat stone" + }, + { + "id": "3983", + "name": "Combat stone" + }, + { + "id": "3984", + "name": "Combat stone" + }, + { + "id": "3985", + "name": "Combat stone" + }, + { + "id": "3986", + "name": "Combat stone" + }, + { + "id": "3987", + "name": "Combat stone" + }, + { + "id": "3988", + "name": "Combat stone" + }, + { + "id": "3989", + "name": "Combat stone" + }, + { + "id": "3990", + "name": "Combat stone" + }, + { + "id": "3991", + "name": "Combat stone" + }, + { + "id": "3992", + "name": "Combat stone" + }, + { + "id": "3993", + "name": "Combat stone" + }, + { + "id": "3994", + "name": "Combat stone" + }, + { + "id": "3995", + "name": "Combat stone" + }, + { + "id": "3996", + "name": "Combat stone" + }, + { + "id": "3997", + "name": "Combat stone" + }, + { + "id": "3998", + "name": "Combat stone" + }, + { + "id": "3999", + "name": "Combat stone" + }, + { + "id": "4000", + "name": "Combat stone" + }, + { + "id": "4001", + "name": "Combat stone" + }, + { + "id": "4002", + "name": "Combat stone" + }, + { + "id": "4003", + "name": "Combat stone" + }, + { + "id": "4004", + "name": "Combat stone" + }, + { + "id": "4005", + "name": "Combat stone" + }, + { + "id": "4006", + "name": "Combat stone" + }, + { + "id": "4007", + "name": "Combat stone" + }, + { + "id": "4008", + "name": "Combat stone" + }, + { + "id": "4009", + "name": "Combat stone" + }, + { + "id": "4010", + "name": "Combat stone" + }, + { + "id": "4011", + "name": "Combat stone" + }, + { + "id": "4012", + "name": "Combat stone" + }, + { + "id": "4013", + "name": "Combat stone" + }, + { + "id": "4014", + "name": "Combat stone" + }, + { + "id": "4015", + "name": "Combat stone" + }, + { + "id": "4016", + "name": "Combat stone" + }, + { + "id": "4017", + "name": "Combat stone" + }, + { + "id": "4018", + "name": "Combat stone" + }, + { + "id": "4019", + "name": "Combat stone" + }, + { + "id": "4020", + "name": "Combat stone" + }, + { + "id": "4021", + "name": "Elemental balance" + }, + { + "id": "4022", + "name": "Elemental balance" + }, + { + "id": "4023", + "name": "Elemental balance" + }, + { + "id": "4024", + "name": "Elemental balance" + }, + { + "id": "4025", + "name": "Elemental balance" + }, + { + "id": "4026", + "name": "Elemental balance" + }, + { + "id": "4027", + "name": "Elemental balance" + }, + { + "id": "4028", + "name": "Elemental balance" + }, + { + "id": "4029", + "name": "Elemental balance" + }, + { + "id": "4030", + "name": "Elemental balance" + }, + { + "id": "4031", + "name": "Elemental balance" + }, + { + "id": "4032", + "name": "Elemental balance" + }, + { + "id": "4033", + "name": "Elemental balance" + }, + { + "id": "4034", + "name": "Elemental balance" + }, + { + "id": "4035", + "name": "Elemental balance" + }, + { + "id": "4036", + "name": "Elemental balance" + }, + { + "id": "4037", + "name": "Elemental balance" + }, + { + "id": "4038", + "name": "Elemental balance" + }, + { + "id": "4039", + "name": "Elemental balance" + }, + { + "id": "4040", + "name": "Elemental balance" + }, + { + "id": "4041", + "name": "Elemental balance" + }, + { + "id": "4042", + "name": "Elemental balance" + }, + { + "id": "4043", + "name": "Elemental balance" + }, + { + "id": "4044", + "name": "Elemental balance" + }, + { + "id": "4045", + "name": "Elemental balance" + }, + { + "id": "4046", + "name": "Elemental balance" + }, + { + "id": "4047", + "name": "Elemental balance" + }, + { + "id": "4048", + "name": "Elemental balance" + }, + { + "id": "4049", + "name": "Elemental balance" + }, + { + "id": "4050", + "name": "Elemental balance" + }, + { + "id": "4051", + "name": "Elemental balance" + }, + { + "id": "4052", + "name": "Elemental balance" + }, + { + "id": "4053", + "name": "Elemental balance" + }, + { + "id": "4054", + "name": "Elemental balance" + }, + { + "id": "4055", + "name": "Elemental balance" + }, + { + "id": "4056", + "name": "Elemental balance" + }, + { + "id": "4057", + "name": "Elemental balance" + }, + { + "id": "4058", + "name": "Elemental balance" + }, + { + "id": "4059", + "name": "Elemental balance" + }, + { + "id": "4060", + "name": "Elemental balance" + }, + { + "id": "4061", + "name": "Elemental balance" + }, + { + "id": "4062", + "name": "Elemental balance" + }, + { + "id": "4063", + "name": "Elemental balance" + }, + { + "id": "4064", + "name": "Elemental balance" + }, + { + "id": "4065", + "name": "Elemental balance" + }, + { + "id": "4066", + "name": "Elemental balance" + }, + { + "id": "4067", + "name": "Elemental balance" + }, + { + "id": "4068", + "name": "Elemental balance" + }, + { + "id": "4069", + "name": "Elemental balance" + }, + { + "id": "4070", + "name": "Elemental balance" + }, + { + "id": "4071", + "name": "Elemental balance" + }, + { + "id": "4072", + "name": "Elemental balance" + }, + { + "id": "4073", + "name": "Elemental balance" + }, + { + "id": "4074", + "name": "Elemental balance" + }, + { + "id": "4075", + "name": "Elemental balance" + }, + { + "id": "4076", + "name": "Elemental balance" + }, + { + "id": "4077", + "name": "Elemental balance" + }, + { + "id": "4078", + "name": "Elemental balance" + }, + { + "id": "4079", + "name": "Elemental balance" + }, + { + "id": "4080", + "name": "Elemental balance" + }, + { + "id": "4081", + "name": "Elemental balance" + }, + { + "id": "4082", + "name": "Elemental balance" + }, + { + "id": "4083", + "name": "Elemental balance" + }, + { + "id": "4084", + "name": "Elemental balance" + }, + { + "id": "4085", + "name": "Elemental balance" + }, + { + "id": "4086", + "name": "Elemental balance" + }, + { + "id": "4087", + "name": "Elemental balance" + }, + { + "id": "4088", + "name": "Elemental balance" + }, + { + "id": "4089", + "name": "Elemental balance" + }, + { + "id": "4090", + "name": "Elemental balance" + }, + { + "id": "4091", + "name": "Elemental balance" + }, + { + "id": "4092", + "name": "Elemental balance" + }, + { + "id": "4093", + "name": "Elemental balance" + }, + { + "id": "4094", + "name": "Elemental balance" + }, + { + "id": "4095", + "name": "Elemental balance" + }, + { + "id": "4096", + "name": "Combat stone" + }, + { + "id": "4097", + "name": "Combat stone" + }, + { + "id": "4098", + "name": "Combat stone" + }, + { + "id": "4099", + "name": "Combat stone" + }, + { + "id": "4100", + "name": "Combat stone" + }, + { + "id": "4101", + "name": "Combat stone" + }, + { + "id": "4102", + "name": "Combat stone" + }, + { + "id": "4103", + "name": "Combat stone" + }, + { + "id": "4104", + "name": "Combat stone" + }, + { + "id": "4105", + "name": "Combat stone" + }, + { + "id": "4106", + "name": "Combat stone" + }, + { + "id": "4107", + "name": "Combat stone" + }, + { + "id": "4108", + "name": "Combat stone" + }, + { + "id": "4109", + "name": "Combat stone" + }, + { + "id": "4110", + "name": "Combat stone" + }, + { + "id": "4111", + "name": "Combat stone" + }, + { + "id": "4112", + "name": "Combat stone" + }, + { + "id": "4113", + "name": "Combat stone" + }, + { + "id": "4114", + "name": "Combat stone" + }, + { + "id": "4115", + "name": "Combat stone" + }, + { + "id": "4116", + "name": "Combat stone" + }, + { + "id": "4117", + "name": "Combat stone" + }, + { + "id": "4118", + "name": "Combat stone" + }, + { + "id": "4119", + "name": "Combat stone" + }, + { + "id": "4120", + "name": "Combat stone" + }, + { + "id": "4121", + "name": "Combat stone" + }, + { + "id": "4122", + "name": "Combat stone" + }, + { + "id": "4123", + "name": "Combat stone" + }, + { + "id": "4124", + "name": "Combat stone" + }, + { + "id": "4125", + "name": "Combat stone" + }, + { + "id": "4126", + "name": "Combat stone" + }, + { + "id": "4127", + "name": "Combat stone" + }, + { + "id": "4128", + "name": "Combat stone" + }, + { + "id": "4129", + "name": "Combat stone" + }, + { + "id": "4130", + "name": "Combat stone" + }, + { + "id": "4131", + "name": "Combat stone" + }, + { + "id": "4132", + "name": "Combat stone" + }, + { + "id": "4133", + "name": "Combat stone" + }, + { + "id": "4134", + "name": "Combat stone" + }, + { + "id": "4135", + "name": "Combat stone" + }, + { + "id": "4136", + "name": "Combat stone" + }, + { + "id": "4137", + "name": "Combat stone" + }, + { + "id": "4138", + "name": "Combat stone" + }, + { + "id": "4139", + "name": "Combat stone" + }, + { + "id": "4140", + "name": "Combat stone" + }, + { + "id": "4141", + "name": "Combat stone" + }, + { + "id": "4142", + "name": "Combat stone" + }, + { + "id": "4143", + "name": "Combat stone" + }, + { + "id": "4144", + "name": "Combat stone" + }, + { + "id": "4145", + "name": "Combat stone" + }, + { + "id": "4146", + "name": "Combat stone" + }, + { + "id": "4147", + "name": "Combat stone" + }, + { + "id": "4148", + "name": "Combat stone" + }, + { + "id": "4149", + "name": "Combat stone" + }, + { + "id": "4150", + "name": "Combat stone" + }, + { + "id": "4151", + "name": "Combat stone" + }, + { + "id": "4152", + "name": "Combat stone" + }, + { + "id": "4153", + "name": "Combat stone" + }, + { + "id": "4154", + "name": "Combat stone" + }, + { + "id": "4155", + "name": "Combat stone" + }, + { + "id": "4156", + "name": "Combat stone" + }, + { + "id": "4157", + "name": "Combat stone" + }, + { + "id": "4158", + "name": "Combat stone" + }, + { + "id": "4159", + "name": "Combat stone" + }, + { + "id": "4160", + "name": "Combat stone" + }, + { + "id": "4161", + "name": "Combat stone" + }, + { + "id": "4162", + "name": "Combat stone" + }, + { + "id": "4163", + "name": "Combat stone" + }, + { + "id": "4164", + "name": "Combat stone" + }, + { + "id": "4165", + "name": "Combat stone" + }, + { + "id": "4166", + "name": "Combat stone" + }, + { + "id": "4167", + "name": "Combat stone" + }, + { + "id": "4168", + "name": "Combat stone" + }, + { + "id": "4169", + "name": "Combat stone" + }, + { + "id": "4170", + "name": "Combat stone" + }, + { + "id": "4171", + "name": "Combat stone" + }, + { + "id": "4172", + "name": "Combat stone" + }, + { + "id": "4173", + "name": "Combat stone" + }, + { + "id": "4174", + "name": "Combat stone" + }, + { + "id": "4175", + "name": "Combat stone" + }, + { + "id": "4176", + "name": "Combat stone" + }, + { + "id": "4177", + "name": "Combat stone" + }, + { + "id": "4178", + "name": "Combat stone" + }, + { + "id": "4179", + "name": "Combat stone" + }, + { + "id": "4180", + "name": "Combat stone" + }, + { + "id": "4181", + "name": "Combat stone" + }, + { + "id": "4182", + "name": "Combat stone" + }, + { + "id": "4183", + "name": "Combat stone" + }, + { + "id": "4184", + "name": "Combat stone" + }, + { + "id": "4185", + "name": "Combat stone" + }, + { + "id": "4186", + "name": "Combat stone" + }, + { + "id": "4187", + "name": "Combat stone" + }, + { + "id": "4188", + "name": "Combat stone" + }, + { + "id": "4189", + "name": "Combat stone" + }, + { + "id": "4190", + "name": "Combat stone" + }, + { + "id": "4191", + "name": "Combat stone" + }, + { + "id": "4192", + "name": "Combat stone" + }, + { + "id": "4193", + "name": "Combat stone" + }, + { + "id": "4194", + "name": "Combat stone" + }, + { + "id": "4195", + "name": "Combat stone" + }, + { + "id": "4196", + "name": "Combat stone" + }, + { + "id": "4197", + "name": "Combat stone" + }, + { + "id": "4198", + "name": "Combat stone" + }, + { + "id": "4199", + "name": "Combat stone" + }, + { + "id": "4200", + "name": "Combat stone" + }, + { + "id": "4201", + "name": "Combat stone" + }, + { + "id": "4202", + "name": "Combat stone" + }, + { + "id": "4203", + "name": "Combat stone" + }, + { + "id": "4204", + "name": "Combat stone" + }, + { + "id": "4205", + "name": "Combat stone" + }, + { + "id": "4206", + "name": "Combat stone" + }, + { + "id": "4207", + "name": "Combat stone" + }, + { + "id": "4208", + "name": "Combat stone" + }, + { + "id": "4209", + "name": "Combat stone" + }, + { + "id": "4210", + "name": "Combat stone" + }, + { + "id": "4211", + "name": "Combat stone" + }, + { + "id": "4212", + "name": "Combat stone" + }, + { + "id": "4213", + "name": "Combat stone" + }, + { + "id": "4214", + "name": "Combat stone" + }, + { + "id": "4215", + "name": "Combat stone" + }, + { + "id": "4216", + "name": "Combat stone" + }, + { + "id": "4217", + "name": "Combat stone" + }, + { + "id": "4218", + "name": "Combat stone" + }, + { + "id": "4219", + "name": "Combat stone" + }, + { + "id": "4220", + "name": "Combat stone" + }, + { + "id": "4221", + "name": "Combat stone" + }, + { + "id": "4222", + "name": "Combat stone" + }, + { + "id": "4223", + "name": "Combat stone" + }, + { + "id": "4224", + "name": "Combat stone" + }, + { + "id": "4225", + "name": "Combat stone" + }, + { + "id": "4226", + "name": "Crawling hand" + }, + { + "id": "4227", + "name": "Cockatrice", + "attack_level": "1", + "clue_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "slayer_exp": "37", + "strength_level": "1" + }, + { + "id": "4228", + "name": "Basilisk", + "attack_level": "1", + "combat_audio": "288,290,289", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "slayer_exp": "75", + "strength_level": "1" + }, + { + "id": "4229", + "name": "Kurask", + "examine": "Large, heavy, with sharp things attached to its head.", + "aggressive": "true", + "attack_level": "67", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,20,20,0,0,0,0,0,0,0", + "combat_audio": "588,590,589", + "death_animation": "9440", + "defence_animation": "9441", + "defence_level": "105", + "lifepoints": "97", + "magic_animation": "9439", + "magic_level": "1", + "melee_animation": "9439", + "range_animation": "9439", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "slayer_exp": "97", + "strength_level": "105" + }, + { + "id": "4230", + "name": "Abyssal demon", + "examine": "A denizen of the Abyss!", + "attack_level": "97", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,20,20,0,20,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "276,278,277", + "death_animation": "1538", + "defence_animation": "0", + "defence_level": "135", + "lifepoints": "150", + "magic_animation": "1537", + "magic_level": "1", + "melee_animation": "1537", + "range_animation": "1537", + "range_level": "1", + "safespot": null, + "slayer_exp": "150", + "strength_level": "67", + "weakness": "1" + }, + { + "id": "4231", + "name": "Left head" + }, + { + "id": "4232", + "name": "Middle head" + }, + { + "id": "4233", + "name": "Right head" + }, + { + "id": "4234", + "name": "Kalphite Queen" + }, + { + "id": "4235", + "name": "Rick" + }, + { + "id": "4236", + "name": "Maid" + }, + { + "id": "4238", + "name": "Cook" + }, + { + "id": "4239", "name": "Cook", - "id": "4239" + "examine": "I hope she can find all the ingredients!" + }, + { + "id": "4240", + "name": "Butler" + }, + { + "id": "4242", + "name": "Demon butler" + }, + { + "id": "4243", + "name": "Demon butler", + "attack_level": "1", + "combat_audio": "400,404,403", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4244", + "name": "Chief servant" + }, + { + "id": "4245", + "name": "Chief servant", + "examine": "Head of the servants' guild.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4246", + "name": "Taxidermist", + "examine": "She smells unpleasantly of chemicals.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4247", + "name": "Estate agent", + "examine": "A fancy businessman with a mighty fine hat.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4248", + "name": "Stonemason", + "examine": "Someone has to get rid of all the stone they dug Keldagrim out of.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4249", + "name": "Sir Renitee", + "examine": "Chief Herald of Falador." + }, + { + "id": "4250", + "name": "Sawmill operator", + "examine": "He changes the shape of wood.", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "facing_booth": "true", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4251", + "name": "Garden supplier", + "examine": "She has green fingers. (Not literally.)", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4252", + "name": "Macaroni Penguin", + "examine": "Beak areful with this one", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4253", + "name": "Guard" + }, + { + "id": "4257", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4258", + "name": "Guard", + "examine": "A dwarven guard.", + "aggressive": "true", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "102", + "defence_animation": "0", + "defence_level": "12", + "lifepoints": "17", + "magic_animation": "0", + "melee_animation": "99", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "12", + "weakness": "6" + }, + { + "id": "4259", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4260", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4261", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4262", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4263", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4264", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4265", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4266", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4267", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4268", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4269", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4270", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4271", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4272", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4273", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4274", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4275", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4276", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4277", + "name": "Buinn" + }, + { + "id": "4278", + "name": "Animated Bronze Armour", + "examine": "Animated bronze armour.", + "aggressive": "true", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "4,4,4,0,0,50,25,19,400,400,0,5,0,0,0", + "combat_audio": "2549,1979,512", + "death_animation": "4167", + "defence_animation": "388", + "defence_level": "10", + "lifepoints": "10", + "magic_animation": "386", + "melee_animation": "386", + "poison_immune": "true", + "range_animation": "386", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "10", + "weakness": "7" + }, + { + "id": "4279", + "name": "Animated Iron Armour", + "examine": "Animated iron armour.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "4", + "bonuses": "4,4,4,0,0,50,25,19,400,400,0,5,0,0,0", + "combat_audio": "2549,1979,512", + "death_animation": "4167", + "defence_animation": "388", + "defence_level": "20", + "lifepoints": "20", + "magic_animation": "386", + "melee_animation": "386", + "poison_immune": "true", + "range_animation": "386", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "20", + "weakness": "7" + }, + { + "id": "4280", + "name": "Animated Steel Armour", + "examine": "Animated steel armour.", + "aggressive": "true", + "attack_level": "40", + "attack_speed": "4", + "bonuses": "4,4,4,0,0,50,25,19,400,400,0,5,0,0,0", + "combat_audio": "2549,1979,512", + "death_animation": "4167", + "defence_animation": "388", + "defence_level": "40", + "lifepoints": "40", + "magic_animation": "386", + "melee_animation": "386", + "poison_immune": "true", + "range_animation": "386", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "40", + "weakness": "7" + }, + { + "id": "4281", + "name": "Animated Black Armour", + "examine": "Animated black armour.", + "aggressive": "true", + "attack_level": "60", + "attack_speed": "4", + "bonuses": "4,4,4,0,0,50,25,19,400,400,0,5,0,0,0", + "combat_audio": "2549,1979,512", + "death_animation": "4167", + "defence_animation": "388", + "defence_level": "60", + "lifepoints": "60", + "magic_animation": "386", + "melee_animation": "386", + "poison_immune": "true", + "range_animation": "386", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "60", + "weakness": "7" + }, + { + "id": "4282", + "name": "Animated Mithril Armour", + "examine": "Animated mithril armour.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "4,4,4,0,0,50,25,19,400,400,0,5,0,0,0", + "combat_audio": "2549,1979,512", + "death_animation": "4167", + "defence_animation": "388", + "defence_level": "80", + "lifepoints": "80", + "magic_animation": "386", + "melee_animation": "386", + "poison_immune": "true", + "range_animation": "386", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "80", + "weakness": "7" + }, + { + "id": "4283", + "name": "Animated Adamant Armour", + "examine": "Animated adamant armour.", + "aggressive": "true", + "attack_level": "99", + "attack_speed": "4", + "bonuses": "4,4,4,0,0,50,25,19,400,400,0,5,0,0,0", + "combat_audio": "2549,1979,512", + "death_animation": "4167", + "defence_animation": "388", + "defence_level": "99", + "lifepoints": "99", + "magic_animation": "386", + "melee_animation": "386", + "poison_immune": "true", + "range_animation": "386", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "99", + "weakness": "7" + }, + { + "id": "4284", + "name": "Animated Rune Armour", + "examine": "Animated rune armour.", + "aggressive": "true", + "attack_level": "120", + "attack_speed": "4", + "bonuses": "4,4,4,0,0,50,25,19,400,400,0,5,0,0,0", + "combat_audio": "2549,1979,512", + "death_animation": "4167", + "defence_animation": "388", + "defence_level": "120", + "lifepoints": "120", + "magic_animation": "386", + "melee_animation": "386", + "poison_immune": "true", + "range_animation": "386", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "120", + "weakness": "7" + }, + { + "id": "4285", + "name": "Ghommal", + "examine": "The big door man." + }, + { + "id": "4286", + "name": "Harrallak Menarous", + "examine": "Guild Master." + }, + { + "id": "4287", + "name": "Gamfred", + "examine": "The guild engineer." + }, + { + "id": "4288", + "name": "Ajjat", + "examine": "Used to be a black knight." + }, + { + "id": "4289", + "name": "Kamfreena", + "examine": "Blademistress, skillful female warrior." + }, + { + "id": "4290", + "name": "Shanomi", + "examine": "A warrior mage from the east." + }, + { + "id": "4291", + "name": "Cyclops", + "examine": "A one-eyed man eater.", + "aggressive": "true", + "attack_level": "47", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "448,451,450", + "death_animation": "4653", + "defence_animation": "4651", + "defence_level": "26", + "lifepoints": "75", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4652", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "75", + "strength_level": "50", + "weakness": "8" + }, + { + "id": "4292", + "name": "Cyclops", + "examine": "A one-eyed woman eater.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "448,451,450", + "death_animation": "4653", + "defence_animation": "4651", + "defence_level": "35", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4652", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "100", + "strength_level": "65", + "weakness": "1" + }, + { + "id": "4293", + "name": "Lidio", + "examine": "Food shopkeeper." + }, + { + "id": "4294", + "name": "Lilly", + "examine": "Potion shopkeeper." + }, + { + "id": "4295", + "name": "Anton", + "examine": "Armour shopkeeper." + }, + { + "id": "4296", + "name": "Jade", + "examine": "Bank staff." + }, + { + "id": "4297", + "name": "Sloane", + "examine": "He looks like a strong warrior." + }, + { + "id": "4298", + "name": "Jimmy", + "examine": "He looks a bit drunk." + }, + { + "id": "4299", + "name": "Ref", + "examine": "He looks fair and reliable." + }, + { + "id": "4300", + "name": "Ref", + "examine": "He looks fair and reliable.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4301", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4302", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4303", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4304", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4305", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4306", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4307", + "name": "Guard", + "examine": "A guard for the humans against monster group.", + "attack_level": "26", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "26", + "lifepoints": "37", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "26", + "weakness": "9" + }, + { + "id": "4308", + "name": "Guard", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4309", + "name": "Guard", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4310", + "name": "Guard", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4311", + "name": "Guard", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4312", + "name": "Nardok" + }, + { + "id": "4313", + "name": "Dartog" + }, + { + "id": "4315", + "name": "Dwarf" + }, + { + "id": "4316", + "name": "Dwarf", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "1" + }, + { + "id": "4317", + "name": "H.A.M. Member" + }, + { + "id": "4318", + "name": "H.A.M. Member", + "attack_level": "1", + "clue_level": "0", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4319", + "name": "H.A.M. Member" + }, + { + "id": "4320", + "name": "H.A.M. Member", + "attack_level": "1", + "clue_level": "0", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4321", + "name": "Zanik" + }, + { + "id": "4323", + "name": "Zanik" + }, + { + "id": "4324", + "name": "Zanik" + }, + { + "id": "4325", + "name": "Light creature" + }, + { + "id": "4326", + "name": "Zanik" + }, + { + "id": "4327", + "name": "HAM member" + }, + { + "id": "4328", + "name": "Sigmund" + }, + { + "id": "4329", + "name": "H.A.M. Deacon", + "attack_level": "1", + "clue_level": "0", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4330", + "name": "Johanhus Ulsbrecht" + }, + { + "id": "4331", + "name": "Sigmund" + }, + { + "id": "4332", + "name": "Sigmund" + }, + { + "id": "4333", + "name": "Sigmund" + }, + { + "id": "4334", + "name": "Sigmund" + }, + { + "id": "4335", + "name": "Sigmund" + }, + { + "id": "4336", + "name": "Guard", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4337", + "name": "Zanik" + }, + { + "id": "4338", + "name": "Zanik" + }, + { + "id": "4340", + "name": "Zanik" + }, + { + "id": "4341", + "name": "Zanik" + }, + { + "id": "4342", + "name": "Zanik" + }, + { + "id": "4343", + "name": "Snake", + "examine": "Snake! Snaaaaake! ", + "aggressive": "true", + "attack_level": "25", + "attack_speed": "3", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "3609,3608,3610", + "death_animation": "278", + "defence_animation": "276", + "defence_level": "50", + "end_gfx": "", + "end_height": "", + "lifepoints": "25", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "275", + "poison_amount": "15", + "poisonous": "true", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "strength_level": "25" + }, + { + "id": "4344", + "name": "Monkey", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "629,631,630", + "death_animation": "223", + "defence_animation": "221", + "defence_level": "1", + "lifepoints": "12", + "melee_animation": "220", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4345", + "name": "Albino bat", + "examine": "It's all white by me.", + "attack_level": "31", + "death_animation": "4917", + "defence_animation": "0", + "defence_level": "31", + "lifepoints": "44", + "magic_animation": "0", + "melee_animation": "4915", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "31", + "weakness": "8" + }, + { + "id": "4346", + "name": "Crab" + }, + { + "id": "4347", + "name": "Giant mosquito", + "examine": "A flying blood sucker.", + "attack_level": "63", + "attack_speed": "10", + "death_animation": "2398", + "defence_animation": "0", + "defence_level": "63", + "lifepoints": "90", + "magic_animation": "0", + "melee_animation": "2397", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "63", + "weakness": "8" + }, + { + "id": "4348", + "name": "Jungle horror", + "examine": "A horrible, emaciated ape like creature with beady red eyes.", + "aggressive": "true", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "496,500,499", + "death_animation": "4233", + "defence_animation": "4232", + "defence_level": "55", + "lifepoints": "45", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4235", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "45", + "strength_level": "70", + "weakness": "7" + }, + { + "id": "4349", + "name": "Jungle horror", + "examine": "A horrible, emaciated ape like creature with beady yellow eyes.", + "aggressive": "true", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "496,500,499", + "death_animation": "4233", + "defence_animation": "4232", + "defence_level": "55", + "lifepoints": "45", + "magic_level": "1", + "melee_animation": "4234", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "45", + "strength_level": "70" + }, + { + "id": "4350", + "name": "Jungle horror", + "examine": "A horrible, emaciated ape like creature with beady green eyes.", + "aggressive": "true", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "496,500,499", + "death_animation": "4233", + "defence_animation": "4232", + "defence_level": "55", + "lifepoints": "45", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4235", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "45", + "strength_level": "70", + "weakness": "7" + }, + { + "id": "4351", + "name": "Jungle horror", + "examine": "A horrible, emaciated ape like creature with beady blue eyes.", + "aggressive": "true", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "496,500,499", + "death_animation": "4233", + "defence_animation": "4232", + "defence_level": "55", + "lifepoints": "45", + "magic_level": "1", + "melee_animation": "4234", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "45", + "strength_level": "70" + }, + { + "id": "4352", + "name": "Jungle horror", + "examine": "A horrible, emaciated ape like creature with beady pink eyes.", + "aggressive": "true", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "496,500,499", + "death_animation": "4233", + "defence_animation": "4232", + "defence_level": "55", + "lifepoints": "45", + "magic_level": "1", + "melee_animation": "4234", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "45", + "strength_level": "70" + }, + { + "id": "4353", + "name": "Cave horror", + "examine": "A horrible, emaciated ape like creature with beady red eyes.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "496,500,499", + "death_animation": "4233", + "defence_animation": "4232", + "defence_level": "62", + "lifepoints": "55", + "magic_animation": "4234", + "magic_level": "80", + "melee_animation": "4234", + "range_animation": "4234", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "55", + "strength_level": "77", + "weakness": "6" + }, + { + "id": "4354", + "name": "Cave horror", + "examine": "A horrible, emaciated ape like creature with beady red eyes.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "496,500,499", + "death_animation": "4233", + "defence_animation": "4232", + "defence_level": "62", + "lifepoints": "55", + "magic_animation": "4234", + "magic_level": "80", + "melee_animation": "4234", + "range_animation": "4234", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "55", + "strength_level": "77", + "weakness": "6" + }, + { + "id": "4355", + "name": "Cave horror", + "examine": "A horrible, emaciated ape like creature with beady red eyes.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "496,500,499", + "death_animation": "4233", + "defence_animation": "4232", + "defence_level": "62", + "lifepoints": "55", + "magic_animation": "4234", + "magic_level": "80", + "melee_animation": "4234", + "range_animation": "4234", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "55", + "strength_level": "77", + "weakness": "6" + }, + { + "id": "4356", + "name": "Cave horror", + "examine": "A horrible, emaciated ape like creature with beady red eyes.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "496,500,499", + "death_animation": "4233", + "defence_animation": "4232", + "defence_level": "62", + "lifepoints": "55", + "magic_animation": "4234", + "magic_level": "80", + "melee_animation": "4234", + "range_animation": "4234", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "55", + "strength_level": "77", + "weakness": "6" + }, + { + "id": "4357", + "name": "Cave horror", + "examine": "A horrible, emaciated ape like creature with beady red eyes.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "496,500,499", + "death_animation": "4233", + "defence_animation": "4232", + "defence_level": "62", + "lifepoints": "55", + "magic_animation": "4234", + "magic_level": "80", + "melee_animation": "4234", + "range_animation": "4234", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "55", + "strength_level": "77", + "weakness": "6" + }, + { + "id": "4358", + "name": "Cavey Davey" + }, + { + "id": "4359", + "name": "Patchy", + "examine": "Patchy the pirate.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4360", + "name": "San Fan" + }, + { + "id": "4361", + "name": "Fancy Dan", + "examine": "A very flamboyant pirate.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4362", + "name": "Honest Jimmy", + "examine": "I can't wait to buy from a guy with Honest in his name...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4363", + "name": "Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4364", + "name": "Swarm" + }, + { + "id": "4365", + "name": "Blue Monkey" + }, + { + "id": "4371", + "name": "Blue Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4372", + "name": "Red Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4373", + "name": "Parrot", + "examine": "A colourful bird.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4374", + "name": "Parrot" + }, + { + "id": "4375", + "name": "Security Guard", + "examine": "A retired Gielinor security guard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4376", + "name": "Litara", + "examine": "Litara, a barbarian explorer." + }, + { + "id": "4377", + "name": "Gate of War" + }, + { + "id": "4378", + "name": "Ricketty door" + }, + { + "id": "4379", + "name": "Oozing barrier" + }, + { + "id": "4380", + "name": "Portal of Death" + }, + { + "id": "4381", + "name": "Ankou", + "examine": "A boney ghost.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "4", + "clue_level": "2", + "combat_audio": "924,926,925", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "50", + "lifepoints": "60", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "slayer_exp": "60", + "strength_level": "69" + }, + { + "id": "4382", + "name": "Ankou", + "examine": "A boney ghost.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "4", + "clue_level": "2", + "combat_audio": "924,926,925", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "50", + "lifepoints": "66", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "slayer_exp": "60", + "strength_level": "69" + }, + { + "id": "4383", + "name": "Ankou", + "examine": "A boney ghost.", + "aggressive": "true", + "attack_level": "60", + "attack_speed": "4", + "clue_level": "2", + "combat_audio": "924,926,925", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "55", + "lifepoints": "66", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "slayer_exp": "60", + "strength_level": "74" + }, + { + "id": "4384", + "name": "Skeleton", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "1", + "lifepoints": "68", + "melee_animation": "5485", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4385", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "34", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "34", + "weakness": "7" + }, + { + "id": "4386", + "name": "Skeleton", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "1", + "lifepoints": "85", + "melee_animation": "5485", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4387", + "name": "Ghost", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5542", + "defence_animation": "5541", + "defence_level": "1", + "lifepoints": "36", + "melee_animation": "5540", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "4388", + "name": "Ghost", + "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "magic_level": "30", + "melee_animation": "5532", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "4389", + "name": "Flesh Crawler", + "examine": "I don't think insect repellent will work.", + "aggressive": "true", + "attack_level": "60", + "attack_speed": "3", + "bonuses": "0,0,0,0,0,15,15,15,15,15,15,15,15,15,15", + "combat_audio": "571,573,572", + "death_animation": "1190", + "defence_animation": "1186", + "defence_level": "10", + "lifepoints": "25", + "magic_animation": "1184", + "melee_animation": "1184", + "range_animation": "1184", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "25", + "strength_level": "2", + "weakness": "0" + }, + { + "id": "4390", + "name": "Flesh Crawler", + "examine": "I don't think insect repellent will work.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "3", + "bonuses": "0,0,0,0,0,15,15,15,15,15,15,15,15,15,15", + "combat_audio": "571,573,572", + "death_animation": "1190", + "defence_animation": "1186", + "defence_level": "10", + "lifepoints": "25", + "magic_animation": "1184", + "melee_animation": "1184", + "range_animation": "1184", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "25", + "strength_level": "2" + }, + { + "id": "4391", + "name": "Flesh Crawler", + "examine": "I don't think insect repellent will work.", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "3", + "bonuses": "0,0,0,0,0,15,15,15,15,15,15,15,15,15,15", + "combat_audio": "571,573,572", + "death_animation": "1190", + "defence_animation": "1186", + "defence_level": "10", + "lifepoints": "25", + "magic_animation": "1184", + "melee_animation": "1184", + "range_animation": "1184", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "25", + "strength_level": "2" + }, + { + "id": "4392", + "name": "Zombie", + "examine": "Dead man walking.", + "aggressive": "true", + "attack_level": "24", + "attack_speed": "5", + "bonuses": "15,25,25,25,25,25,25,15,15,25,25,25,25,25,25", + "combat_audio": "918,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "25", + "lifepoints": "23", + "magic_animation": "5568", + "melee_animation": "5568", + "range_animation": "5568", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "4393", + "name": "Zombie", + "examine": "Dead man walking.", + "aggressive": "true", + "attack_level": "35", + "attack_speed": "5", + "bonuses": "15,25,28,28,25,28,28,15,15,28,25,25,25,25,25", + "combat_audio": "918,923,922", + "death_animation": "5580", + "defence_animation": "5579", + "defence_level": "28", + "lifepoints": "18", + "magic_animation": "5578", + "melee_animation": "5578", + "range_animation": "5578", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "4394", + "name": "Zombie", + "examine": "Dead man walking.", + "aggressive": "true", + "attack_level": "47", + "attack_speed": "5", + "bonuses": "35,45,45,45,45,45,45,35,35,45,45,45,45,45,45", + "combat_audio": "918,923,922", + "death_animation": "5580", + "defence_animation": "5579", + "defence_level": "48", + "lifepoints": "40", + "magic_animation": "5578", + "melee_animation": "5578", + "range_animation": "5578", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "4395", + "name": "Giant rat", + "examine": "Overgrown vermin.", + "aggressive": "true", + "attack_level": "21", + "attack_speed": "5", + "bonuses": "19,15,15,34,36,38,33,31,30,14,0,0,0,0,0", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "23", + "lifepoints": "26", + "melee_animation": "4933", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "9" + }, + { + "id": "4396", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "710,713,711", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "2", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4397", + "name": "Catablepon", + "examine": "Big Cow-like... But cows don't have serpent tails!", + "aggressive": "true", + "attack_level": "38", + "attack_speed": "5", + "bonuses": "5,20,15,3,10,20,10,10,20,15,23,25,15,25,10", + "clue_level": "1", + "combat_audio": "511,330,329", + "death_animation": "4270", + "defence_animation": "4273", + "defence_level": "38", + "lifepoints": "50", + "magic_animation": "4272", + "magic_level": "38", + "melee_animation": "4271", + "range_level": "1", + "respawn_delay": "74", + "safespot": null, + "slayer_exp": "50", + "spell_id": "7", + "strength_level": "38" + }, + { + "id": "4398", + "name": "Catablepon", + "examine": "Big Cow-like... But cows don't have serpent tails!", + "aggressive": "true", + "attack_level": "38", + "attack_speed": "5", + "bonuses": "20,25,10,20,25,10,10,11,0,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "511,330,329", + "death_animation": "4270", + "defence_animation": "4273", + "defence_level": "38", + "lifepoints": "70", + "magic_animation": "4272", + "magic_level": "38", + "melee_animation": "4271", + "range_level": "1", + "respawn_delay": "74", + "safespot": null, + "slayer_exp": "50", + "spell_id": "7", + "strength_level": "38" + }, + { + "id": "4399", + "name": "Catablepon", + "examine": "Big Cow-like... But cows don't have serpent tails!", + "aggressive": "true", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "50,45,50,40,45,20,30,25,33,25,25,20,20,40,0", + "clue_level": "1", + "combat_audio": "511,330,329", + "death_animation": "4270", + "defence_animation": "4273", + "defence_level": "38", + "lifepoints": "50", + "magic_animation": "4272", + "magic_level": "45", + "melee_animation": "4271", + "range_level": "1", + "respawn_delay": "74", + "safespot": null, + "slayer_exp": "50", + "spell_id": "7", + "strength_level": "58" + }, + { + "id": "4400", + "name": "Giant spider", + "examine": "I think this spider has been genetically modified.", + "aggressive": "true", + "attack_level": "48", + "bonuses": "19,21,19,62,45,51,54,63,60,18,0,0,0,0,0", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "5328", + "defence_level": "51", + "lifepoints": "50", + "magic_animation": "5327", + "melee_animation": "5327", + "range_animation": "5327", + "range_level": "1", + "safespot": null, + "strength_level": "45" + }, + { + "id": "4401", + "name": "Spider", + "aggressive": "false", + "attack_level": "1", + "combat_audio": "3604,3609,3608", + "death_animation": "6251", + "defence_animation": "6250", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "6249", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4402", + "name": "Scorpion", + "examine": "An extremely vicious scorpion.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "5", + "bonuses": "12,23,10,51,32,62,29,54,48,0,0,0,0,0,0", + "combat_audio": "3611,3612,3610", + "death_animation": "6256", + "defence_animation": "6255", + "defence_level": "49", + "lifepoints": "55", + "magic_animation": "6254", + "melee_animation": "6254", + "range_animation": "6254", + "range_level": "1", + "safespot": null, + "slayer_exp": "17", + "strength_level": "51" + }, + { + "id": "4403", + "name": "Scorpion", + "examine": "An extremely vicious scorpion.", + "aggressive": "true", + "attack_level": "30", + "attack_speed": "5", + "bonuses": "15,16,12,32,19,38,18,34,32,0,0,0,0,0,0", + "combat_audio": "3611,3612,3610", + "death_animation": "6256", + "defence_animation": "6255", + "defence_level": "35", + "lifepoints": "37", + "magic_animation": "6254", + "melee_animation": "6254", + "range_animation": "6254", + "range_level": "1", + "safespot": null, + "slayer_exp": "17", + "strength_level": "31" + }, + { + "id": "4404", + "name": "Minotaur", + "examine": "He doesn't look very pleased to see you.", + "aggressive": "false", + "attack_level": "12", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "clue_level": "0", + "combat_audio": "626,628,627", + "death_animation": "4265", + "defence_animation": "4267", + "defence_level": "10", + "lifepoints": "10", + "magic_animation": "4266", + "magic_level": "1", + "melee_animation": "4266", + "range_animation": "4266", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "slayer_exp": "10", + "strength_level": "10", + "weakness": "7" + }, + { + "id": "4405", + "name": "Minotaur", + "examine": "He doesn't look very pleased to see you.", + "aggressive": "false", + "attack_level": "12", + "attack_speed": "4", + "bonuses": "11,11,13,11,11,13,11,11,11,13,11,11,11,11,11", + "clue_level": "0", + "combat_audio": "626,628,627", + "death_animation": "4265", + "defence_animation": "4267", + "defence_level": "10", + "lifepoints": "10", + "magic_animation": "4266", + "magic_level": "1", + "melee_animation": "4266", + "range_animation": "4266", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "4406", + "name": "Minotaur", + "examine": "He doesn't look very pleased to see you.", + "aggressive": "false", + "attack_level": "23", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-10,-10,-10,21,-10,0,0,0,0,0", + "clue_level": "0", + "combat_audio": "626,628,627", + "death_animation": "4265", + "defence_animation": "4267", + "defence_level": "25", + "lifepoints": "22", + "magic_animation": "4266", + "magic_level": "1", + "melee_animation": "4266", + "range_animation": "4266", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "slayer_exp": "22", + "strength_level": "25" + }, + { + "id": "4407", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "3,3,3,3,3,3,3,3,3,3,3,3,3,3,3", + "clue_level": "0", + "combat_audio": "3520,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "5", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4408", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "8,8,8,8,8,8,8,8,8,8,8,8,8,8,8", + "clue_level": "0", + "combat_audio": "3520,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "11", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "2" + }, + { + "id": "4409", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "6,6,6,6,6,6,6,6,6,6,6,6,6,6,6", + "clue_level": "0", + "combat_audio": "3520,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "9", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "7", + "strength_level": "2" + }, + { + "id": "4410", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "8,8,8,8,8,8,8,8,8,8,8,8,8,8,8", + "clue_level": "0", + "combat_audio": "3520,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "10", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4411", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "10,10,10,10,10,10,10,10,10,10,10,10,10,10,10", + "clue_level": "0", + "combat_audio": "3520,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "17", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4412", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "8,8,8,8,8,8,8,8,8,8,8,8,8,8,8", + "clue_level": "0", + "combat_audio": "3520,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "10", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4413", + "name": "Wolf", + "examine": "They say inside you there are two wolves...", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "7,7,7,7,7,7,7,7,7,7,7,7,7,7,7", + "combat_audio": "481,491,490", + "death_animation": "6558", + "defence_animation": "6557", + "defence_level": "9", + "lifepoints": "15", + "magic_animation": "6559", + "melee_animation": "6559", + "range_animation": "6559", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "15", + "strength_level": "1" + }, + { + "id": "4414", + "name": "Wolf", + "examine": "They say inside you there are two wolves...", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "5,5,5,5,5,5,5,5,5,5,5,5,5,5,5", + "combat_audio": "481,491,490", + "death_animation": "6558", + "defence_animation": "6557", + "defence_level": "7", + "lifepoints": "10", + "magic_animation": "6559", + "melee_animation": "6559", + "range_animation": "6559", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "10", + "strength_level": "1" + }, + { + "id": "4415", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "-47,-47,-47,0,0,-42,-42,-42,-42,-42,-42,-53,0,0,0", + "combat_audio": "710,713,711", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "2", + "magic_animation": "2705", + "magic_level": "1", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "respawn_delay": "3", + "safespot": null, + "slayer_exp": "2", + "strength_level": "1" + }, + { + "id": "4416", + "name": "Bee keeper" + }, + { + "id": "4417", + "name": "Bees!" + }, + { + "id": "4418", + "name": "Gorak", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "4302", + "defence_animation": "4301", + "defence_level": "1", + "lifepoints": "112", + "melee_animation": "4300", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "112", + "strength_level": "1" + }, + { + "id": "4419", + "name": "Cosmic Being", + "examine": "A highly enlightened being.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4420", + "name": "Fairy Godfather" + }, + { + "id": "4434", + "name": "Fairy Nuff", + "examine": "A healing fairy." + }, + { + "id": "4435", + "name": "Fairy Queen" + }, + { + "id": "4437", + "name": "Fairy Queen", + "examine": "Looks otherworldy..." + }, + { + "id": "4438", + "name": "Centaur", + "examine": "Horseplay.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4439", + "name": "Centaur", + "examine": "Horseplay.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4440", + "name": "Stag", + "examine": "A noble creature!", + "aggressive": "false", + "attack_level": "11", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "812,814,813", + "death_animation": "6377", + "defence_animation": "0", + "defence_level": "13", + "lifepoints": "19", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "6376", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "90", + "safespot": null, + "strength_level": "13", + "weakness": "7" + }, + { + "id": "4441", + "name": "Wood Dryad", + "examine": "Twiggy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4442", + "name": "Fairy Very Wise" + }, + { + "id": "4443", + "name": "Fairy", + "examine": "A delicate creature from this strange realm." + }, + { + "id": "4444", + "name": "Fairy" + }, + { + "id": "4445", + "name": "Fairy" + }, + { + "id": "4446", + "name": "Fairy" + }, + { + "id": "4447", + "name": "Rabbit" + }, + { + "id": "4448", + "name": "Rabbit" + }, + { + "id": "4449", + "name": "Butterfly" + }, + { + "id": "4450", + "name": "Butterfly" + }, + { + "id": "4451", + "name": "Starflower" + }, + { + "id": "4452", + "name": "Starflower" + }, + { + "id": "4453", + "name": "Fairy Fixit" + }, + { + "id": "4455", + "name": "Fairy Fixit", + "examine": "Fairy ring maintenance division.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4456", + "name": "Ork" + }, + { + "id": "4457", + "name": "Ork", + "examine": "He works in the bank.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4458", + "name": "Ork", + "examine": "She works in the bank.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4459", + "name": "Ork", + "examine": "She works in the bank.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4460", + "name": "Fake Man" + }, + { + "id": "4461", + "name": "Held vampyre juvinate" + }, + { + "id": "4462", + "name": "Held vampyre juvinate" + }, + { + "id": "4463", + "name": "Angry juvinate" + }, + { + "id": "4464", + "name": "Angry juvinate" + }, + { + "id": "4465", + "name": "Angry juvinate" + }, + { + "id": "4466", + "name": "Benjamin" + }, + { + "id": "4467", + "name": "Liam" + }, + { + "id": "4468", + "name": "Miala" + }, + { + "id": "4469", + "name": "Verak" + }, + { + "id": "4470", + "name": "Tree spirit", + "examine": "A very angry nymph.", + "aggressive": "true", + "attack_level": "9", + "attack_speed": "6", + "death_animation": "97", + "defence_animation": "0", + "defence_level": "9", + "lifepoints": "12", + "magic_animation": "0", + "melee_animation": "94", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "9", + "weakness": "6" + }, + { + "id": "4471", + "name": "Bogrog" + }, + { + "id": "4473", + "name": "Woman" + }, + { + "id": "4474", + "name": "Magic dummy", + "examine": "A magic training dummy", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "97", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "15", + "magic_animation": "0", + "melee_animation": "94", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "6" + }, + { + "id": "4475", + "name": "Ned" + }, + { + "id": "4476", + "name": "Guardian mummy", + "examine": "Who's your mummy?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4477", + "name": "Annoyed guardian mummy" + }, + { + "id": "4478", + "name": "Tarik" + }, + { + "id": "4479", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4480", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4481", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4482", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4483", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4484", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4485", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4486", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4487", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4488", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4489", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4490", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4491", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4492", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "strength_level": "2" + }, + { + "id": "4493", + "name": "General Bentnoze" + }, + { + "id": "4494", + "name": "General Wartface", + "examine": "An ugly green creature.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4495", + "name": "Grubfoot" + }, + { + "id": "4497", + "name": "Grubfoot" + }, + { + "id": "4498", + "name": "Grubfoot" + }, + { + "id": "4499", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "safespot": null, + "slayer_exp": "5", + "strength_level": "2" + }, + { + "id": "4500", + "name": "Scarab swarm" + }, + { + "id": "4501", + "name": "Ethereal Man", + "examine": "Is he real or is it just my imagination?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4502", + "name": "Ethereal Lady", + "examine": "Does she really exist?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4503", + "name": "Ethereal Numerator", + "examine": "He reminds me of my old mathematics teacher.", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4504", + "name": "Ethereal Expert", + "examine": "The master of accomplishment.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4505", + "name": "Ethereal Perceptive", + "examine": "He knows what is possible.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4506", + "name": "Ethereal Guide", + "examine": "He knows the past, present and future. But what of my shoe size?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4507", + "name": "Ethereal Fluke", + "examine": "Luck is probably on his side.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4508", + "name": "Ethereal Mimic" + }, + { + "id": "4509", + "name": "Me", + "examine": "It's like looking in the mirror.", + "attack_level": "60", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "171", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "414", + "range_animation": "0", + "range_level": "60", + "safespot": null, + "strength_level": "60", + "weakness": "9" + }, + { + "id": "4510", + "name": "Me", + "examine": "It's like looking in the mirror.", + "attack_level": "60", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "171", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "414", + "range_animation": "0", + "range_level": "60", + "safespot": null, + "strength_level": "60", + "weakness": "9" + }, + { + "id": "4511", + "name": "Oneiromancer", + "examine": "Spiritual leader of the Moonclan.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4512", + "name": "House", + "examine": "The craziest house I ever did see!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4513", + "name": "Baba Yaga" + }, + { + "id": "4514", + "name": "Pauline Polaris" + }, + { + "id": "4515", + "name": "Meteora" + }, + { + "id": "4516", + "name": "Melana Moonlander" + }, + { + "id": "4517", + "name": "Selene" + }, + { + "id": "4518", + "name": "Rimae Sirsalis" + }, + { + "id": "4519", + "name": "Sirsal Banker" + }, + { + "id": "4520", + "name": "Clan Guard" + }, + { + "id": "4521", + "name": "Enchanted Broom", + "examine": "How does it see where to sweep?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4522", + "name": "Enchanted Broom" + }, + { + "id": "4523", + "name": "Enchanted Broom" + }, + { + "id": "4524", + "name": "Enchanted Bucket", + "examine": "I'm not sure if it's actually doing anything of use.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4525", + "name": "Enchanted Bucket" + }, + { + "id": "4526", + "name": "Bouquet Mac Hyacinth" + }, + { + "id": "4527", + "name": "Suqah", + "aggressive": "true", + "attack_level": "95", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,50,70,70,90,50,0,0,0,0,0", + "clue_level": "2", + "death_animation": "4389", + "defence_animation": "4384", + "defence_level": "95", + "lifepoints": "105", + "melee_animation": "4388", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "95" + }, + { + "id": "4528", + "name": "Suqah", + "aggressive": "true", + "attack_level": "95", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,50,70,70,90,50,0,0,0,0,0", + "clue_level": "2", + "death_animation": "4389", + "defence_animation": "4384", + "defence_level": "95", + "lifepoints": "105", + "melee_animation": "4388", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "95" + }, + { + "id": "4529", + "name": "Suqah", + "aggressive": "true", + "attack_level": "95", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,50,70,70,90,50,0,0,0,0,0", + "clue_level": "2", + "death_animation": "4389", + "defence_animation": "4384", + "defence_level": "95", + "lifepoints": "105", + "melee_animation": "4388", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "95" + }, + { + "id": "4530", + "name": "Suqah", + "aggressive": "true", + "attack_level": "95", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,50,70,70,90,50,0,0,0,0,0", + "clue_level": "2", + "death_animation": "4389", + "defence_animation": "4385", + "defence_level": "95", + "lifepoints": "105", + "melee_animation": "4388", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "95" + }, + { + "id": "4531", + "name": "Suqah", + "aggressive": "true", + "attack_level": "95", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,50,70,70,70,50,0,0,0,0,0", + "clue_level": "2", + "death_animation": "4389", + "defence_animation": "4385", + "defence_level": "95", + "lifepoints": "105", + "melee_animation": "4388", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "95" + }, + { + "id": "4532", + "name": "Suqah", + "aggressive": "true", + "attack_level": "95", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,50,70,70,90,50,0,0,0,0,0", + "clue_level": "2", + "death_animation": "4389", + "defence_animation": "4384", + "defence_level": "95", + "lifepoints": "105", + "melee_animation": "4388", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "95" + }, + { + "id": "4533", + "name": "Suqah", + "aggressive": "true", + "attack_level": "95", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,50,70,70,90,50,0,0,0,0,0", + "clue_level": "2", + "death_animation": "4389", + "defence_animation": "4384", + "defence_level": "95", + "lifepoints": "105", + "melee_animation": "4388", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "95" + }, + { + "id": "4534", + "name": "Moss giant", + "examine": "His beard seems to have a life of its own.", + "aggressive": "true", + "attack_level": "30", + "attack_speed": "6", + "bonuses": "33,33,33,0,0,0,0,0,0,0,0,31,0,0,0", + "combat_audio": "449,451,450", + "death_animation": "4668", + "defence_animation": "4665", + "defence_level": "30", + "lifepoints": "85", + "magic_animation": "4666", + "magic_level": "1", + "melee_animation": "4666", + "range_animation": "4666", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "85", + "strength_level": "30", + "weakness": "1" + }, + { + "id": "4535", + "name": "Parrot" + }, + { + "id": "4536", + "name": "Lokar Searunner" + }, + { + "id": "4537", + "name": "Lokar Searunner", + "examine": "Either a very fremennikey pirate, or a very piratey fremnnik.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4538", + "name": "Cabin boy" + }, + { + "id": "4539", + "name": "Cabin boy", + "examine": "I always wondered what that job description actually meant...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4540", + "name": "Captain Bentley", + "examine": "The High Priest has been transformed into an avatar of Bandos.", + "aggressive": "true", + "attack_level": "55", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "214", + "magic_animation": "0", + "magic_level": "55", + "range_animation": "0", + "range_level": "55", + "respawn_delay": "60", + "safespot": null, + "strength_level": "55", + "weakness": "9" + }, + { + "id": "4541", + "name": "'Beefy' Burns", + "examine": "A stickler for hygiene in the kitchen.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4542", + "name": "'Eagle-eye' Shultz", + "examine": "A keen-eyed lookout with a telescope.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4543", + "name": "First mate 'Davey-boy", + "examine": "First mate to Captain Bentley.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4544", + "name": "'Bird's-Eye' Jack" + }, + { + "id": "4545", + "name": "'Picarron' Pete", + "examine": "A pirate through and through.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4546", + "name": "Jake", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "50", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4547", + "name": "Bedread the bold", + "examine": "He got his name from his favourite hobby. Reading about beds.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4548", + "name": "Wilson", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "50", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4549", + "name": "Tommy 2-times", + "examine": "Nobody really knows why he's called Tommy 2-times...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4550", + "name": "Murky Pat", + "examine": "Don't look him straight in the eyes. He'll eat you alive!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4551", + "name": "Jack Sails", + "examine": "Nice beard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4552", + "name": "Palmer" + }, + { + "id": "4553", + "name": "'Betty' B.Boppin" + }, + { + "id": "4554", + "name": "'Beedy-eye' Jones", + "examine": "Is he looking at me?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4555", + "name": "Jenny Blade", + "examine": "Yes", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4556", + "name": "'Lecherous' Lee", + "examine": "A low-down", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4557", + "name": "'Sticky' Sanders", + "examine": "Apparently his nickname comes from his fondness for jam.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4558", + "name": "Hirko" + }, + { + "id": "4559", + "name": "Holoy" + }, + { + "id": "4560", + "name": "Frizzy Skernip", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "4561", + "name": "Yulf Squecks", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "4562", + "name": "Praistan Ebola", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "4563", + "name": "Hura" + }, + { + "id": "4564", + "name": "Digsite workman", + "examine": "This person is working on the site.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4565", + "name": "Digsite workman", + "examine": "This person is working on the site.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4566", + "name": "Examiner", + "examine": "Upon examining the examiner you examine it is indeed an examiner!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4567", + "name": "Examiner", + "examine": "Upon examining the examiner you examine it is indeed an examiner!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4568", + "name": "Researcher", + "examine": "Must be hard at work.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4569", + "name": "Nick" + }, + { + "id": "4570", + "name": "Crow" + }, + { + "id": "4571", + "name": "Crow" + }, + { + "id": "4572", + "name": "Gianne jnr." + }, + { + "id": "4573", + "name": "Timble" + }, + { + "id": "4574", + "name": "Tamble" + }, + { + "id": "4575", + "name": "Spang" + }, + { + "id": "4576", + "name": "Brambickle" + }, + { + "id": "4577", + "name": "Wingstone" + }, + { + "id": "4578", + "name": "Penwie", + "examine": "He looks like he's a long way from home." + }, + { + "id": "4579", + "name": "Generic Diplomat", + "examine": "He makes pots.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4580", + "name": "Ambassador Gimblewap", + "examine": "He's very diplomatic.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4581", + "name": "Ambassador Spanfipple", + "examine": "Peaceful man!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4582", + "name": "Ambassador Ferrnook", + "examine": "Peaceful man!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4583", + "name": "Professor Manglethorp" + }, + { + "id": "4584", + "name": "Damwin" + }, + { + "id": "4585", + "name": "Professor Onglewip", + "examine": "A gnome mage on sabbatical." + }, + { + "id": "4586", + "name": "Professor Imblewyn" + }, + { + "id": "4587", + "name": "Perrdur" + }, + { + "id": "4588", + "name": "Dalila" + }, + { + "id": "4589", + "name": "Sorrn", + "examine": "Your common man.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4590", + "name": "Mimm", + "examine": "Your common woman.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4591", + "name": "Eebel" + }, + { + "id": "4592", + "name": "Ermin" + }, + { + "id": "4593", + "name": "Portobello", + "examine": "Your common man.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4594", + "name": "Captain Ninto", + "examine": "A gnome pilot off duty", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4595", + "name": "Captain Daerkin", + "examine": "A gnome pilot off duty", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4596", + "name": "Captain Lamdoo" + }, + { + "id": "4597", + "name": "Meegle" + }, + { + "id": "4598", + "name": "Wurbel" + }, + { + "id": "4599", + "name": "Sarble" + }, + { + "id": "4600", + "name": "Guard Vemmeldo", + "examine": "He looks alert and ready for action.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4601", + "name": "Burkor" + }, + { + "id": "4602", + "name": "Froono" + }, + { + "id": "4603", + "name": "Fortress Guard", + "examine": "A generic evil henchman.", + "attack_level": "26", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "26", + "lifepoints": "37", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "26", + "weakness": "9" + }, + { + "id": "4604", + "name": "Fortress Guard", + "examine": "A generic evil henchman.", + "attack_level": "26", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "26", + "lifepoints": "37", + "magic_animation": "0", + "melee_animation": "428", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "26", + "weakness": "9" + }, + { + "id": "4605", + "name": "Fortress Guard", + "examine": "A generic evil henchman.", + "attack_level": "26", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "26", + "lifepoints": "37", + "magic_animation": "0", + "melee_animation": "428", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "26", + "weakness": "9" + }, + { + "id": "4606", + "name": "Fortress Guard", + "examine": "A generic evil henchman.", + "attack_level": "26", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "26", + "lifepoints": "37", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "26", + "weakness": "9" + }, + { + "id": "4607", + "name": "Black Cat", + "examine": "A witch's black cat.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "7" + }, + { + "id": "4608", + "name": "Monk", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4609", + "name": "Brimstail" + }, + { + "id": "4611", + "name": "Saboteur", + "examine": "Swine.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4612", + "name": "Gnome shop keeper" + }, + { + "id": "4613", + "name": "Cute creature" + }, + { + "id": "4615", + "name": "Evil creature", + "examine": "What is that thing!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "0", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "6" + }, + { + "id": "4616", + "name": "Cute creature" + }, + { + "id": "4618", + "name": "Evil creature" + }, + { + "id": "4619", + "name": "Cute creature" + }, + { + "id": "4621", + "name": "Evil creature" + }, + { + "id": "4622", + "name": "Cute creature" + }, + { + "id": "4624", + "name": "Evil creature" + }, + { + "id": "4625", + "name": "Cute creature" + }, + { + "id": "4627", + "name": "Evil creature" + }, + { + "id": "4628", + "name": "Cute creature" + }, + { + "id": "4630", + "name": "Evil creature" + }, + { + "id": "4631", + "name": "fluffie" + }, + { + "id": "4632", + "name": "fluffie" + }, + { + "id": "4633", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4634", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4635", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4636", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4637", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4638", + "name": "Gnome soldier", + "examine": "A little warrior.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4639", + "name": "Gnome soldier", + "examine": "A little warrior.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4640", + "name": "Gnome soldier", + "examine": "A little warrior.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4641", + "name": "Gnome soldier", + "examine": "A little warrior.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4642", + "name": "Gnome soldier", + "examine": "A little warrior.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4643", + "name": "Healthorg and tortoise", + "examine": "King Healthorg riding his War Tortoise.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4644", + "name": "Oaknock the Engineer" + }, + { + "id": "4645", + "name": "Glouphrie the Untrusted", + "examine": "A weasly, shifty-looking Gnome Mage.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4646", + "name": "King Healthorg" + }, + { + "id": "4647", + "name": "Hazelmere" + }, + { + "id": "4648", + "name": "Nisha" + }, + { + "id": "4649", + "name": "Tyras guard" + }, + { + "id": "4650", + "name": "Trader Stan", + "examine": "With the prices he charges, no wonder he can afford to look so sharp.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4651", + "name": "Trader Crewmember", + "examine": "Looks very stylish.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4652", + "name": "Trader Crewmember", + "examine": "That suit looks a little briny around the edges.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4653", + "name": "Trader Crewmember", + "examine": "First storm he is in that hat will blow away.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4654", + "name": "Trader Crewmember", + "examine": "She'll never be able to climb rigging in that.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4655", + "name": "Trader Crewmember", + "examine": "High heels on a ship? What is she thinking?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4656", + "name": "Trader Crewmember", + "examine": "The effect is sort of spoiled by all those tattoos.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "movement_radius": "710", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4657", + "name": "Sir Prysin" + }, + { + "id": "4658", + "name": "Dark wizard" + }, + { + "id": "4659", + "name": "Dark wizard", + "examine": "He works evil magic.", + "aggressive": "true", + "attack_level": "5", + "combat_audio": "511,513,512", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "5", + "end_gfx": "95", + "lifepoints": "12", + "magic_animation": "711", + "magic_level": "6", + "melee_animation": "810", + "projectile": "94", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "93", + "start_height": "80", + "strength_level": "2" + }, + { + "id": "4660", + "name": "Dark wizard", + "examine": "He works evil magic.", + "aggressive": "true", + "attack_level": "17", + "combat_audio": "511,513,512", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "14", + "end_gfx": "98", + "lifepoints": "24", + "magic_animation": "711", + "magic_level": "22", + "melee_animation": "810", + "projectile": "97", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "96", + "start_height": "80", + "strength_level": "17" + }, + { + "id": "4661", + "name": "Dark wizard", + "examine": "He works evil magic.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "4", + "combat_audio": "511,513,512", + "combat_style": "2", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "15", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "15", + "projectile": "98", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4662", + "name": "Denath" + }, + { + "id": "4663", + "name": "Denath" + }, + { + "id": "4664", + "name": "Wally" + }, + { + "id": "4665", + "name": "Baby blue dragon", + "examine": "Young but still dangerous.", + "aggressive": "true", + "attack_level": "40", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,30,50,50,40,30,0,0,0,0,0", + "combat_audio": "405,407,406", + "death_animation": "28", + "defence_animation": "26", + "defence_level": "40", + "lifepoints": "50", + "magic_animation": "25", + "magic_level": "1", + "melee_animation": "25", + "range_animation": "25", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "50", + "strength_level": "40", + "weakness": "3" + }, + { + "id": "4666", + "name": "Baby blue dragon", + "examine": "Young but still dangerous.", + "aggressive": "true", + "attack_level": "45", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,30,50,50,40,30,0,0,0,0,0", + "combat_audio": "405,407,406", + "death_animation": "28", + "defence_animation": "26", + "defence_level": "40", + "lifepoints": "50", + "magic_animation": "25", + "magic_level": "1", + "melee_animation": "25", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "50", + "strength_level": "40", + "weakness": "3" + }, + { + "id": "4667", + "name": "Baby red dragon", + "examine": "Young but still dangerous.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "405,407,406", + "defence_level": "1", + "lifepoints": "50", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4668", + "name": "Baby red dragon", + "examine": "Young but still dangerous.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "405,407,406", + "defence_level": "1", + "lifepoints": "50", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4669", + "name": "Red dragon", + "examine": "A big powerful dragon.", + "aggressive": "true", + "attack_level": "130", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "130", + "lifepoints": "140", + "magic_animation": "80", + "magic_level": "1", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "143", + "strength_level": "130", + "weakness": "3" + }, + { + "id": "4670", + "name": "Red dragon", + "examine": "A big powerful dragon.", + "aggressive": "true", + "attack_level": "130", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "130", + "lifepoints": "140", + "magic_animation": "80", + "magic_level": "1", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "143", + "strength_level": "130", + "weakness": "3" + }, + { + "id": "4671", + "name": "Red dragon", + "examine": "A big powerful dragon.", + "aggressive": "true", + "attack_level": "130", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "130", + "lifepoints": "140", + "magic_animation": "80", + "magic_level": "1", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "143", + "strength_level": "130", + "weakness": "3" + }, + { + "id": "4672", + "name": "Red dragon", + "examine": "A big powerful dragon.", + "aggressive": "true", + "attack_level": "130", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "130", + "lifepoints": "140", + "magic_animation": "80", + "magic_level": "1", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "143", + "strength_level": "130", + "weakness": "3" + }, + { + "id": "4673", + "name": "Black dragon", + "examine": "A fierce dragon with black scales!", + "aggressive": "true", + "attack_level": "200", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "200", + "lifepoints": "190", + "magic_animation": "80", + "magic_level": "100", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "200", + "strength_level": "200", + "weakness": "3" + }, + { + "id": "4674", + "name": "Black dragon", + "examine": "A fierce dragon with black scales!", + "aggressive": "true", + "attack_level": "200", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "200", + "lifepoints": "190", + "magic_animation": "80", + "magic_level": "100", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "200", + "strength_level": "200", + "weakness": "3" + }, + { + "id": "4675", + "name": "Black dragon", + "examine": "A fierce dragon with black scales!", + "aggressive": "true", + "attack_level": "200", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "200", + "lifepoints": "190", + "magic_animation": "80", + "magic_level": "100", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "200", + "strength_level": "200", + "weakness": "3" + }, + { + "id": "4676", + "name": "Black dragon", + "examine": "A fierce dragon with black scales!", + "aggressive": "true", + "attack_level": "200", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "200", + "lifepoints": "190", + "magic_animation": "80", + "magic_level": "100", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "200", + "strength_level": "200", + "weakness": "3" + }, + { + "id": "4677", + "name": "Green dragon", + "examine": "Must be related to Elvarg.", + "aggressive": "true", + "attack_level": "68", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,40,40,30,20,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "68", + "lifepoints": "75", + "magic_animation": "80", + "magic_level": "68", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "75", + "strength_level": "68", + "weakness": "3" + }, + { + "id": "4678", + "name": "Green dragon", + "examine": "Must be related to Elvarg.", + "aggressive": "true", + "attack_level": "68", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,40,40,30,20,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "68", + "lifepoints": "75", + "magic_animation": "80", + "magic_level": "68", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "75", + "strength_level": "68", + "weakness": "3" + }, + { + "id": "4679", + "name": "Green dragon", + "examine": "Must be related to Elvarg.", + "aggressive": "true", + "attack_level": "68", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,40,40,30,20,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "68", + "lifepoints": "75", + "magic_animation": "80", + "magic_level": "68", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "75", + "strength_level": "68", + "weakness": "3" + }, + { + "id": "4680", + "name": "Green dragon", + "examine": "Must be related to Elvarg.", + "aggressive": "true", + "attack_level": "68", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,40,40,30,20,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "68", + "lifepoints": "75", + "magic_animation": "80", + "magic_level": "68", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "75", + "strength_level": "68", + "weakness": "3" + }, + { + "id": "4681", + "name": "Blue dragon", + "examine": "A mother dragon.", + "aggressive": "true", + "attack_level": "95", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "95", + "lifepoints": "105", + "magic_animation": "80", + "magic_level": "1", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "108", + "strength_level": "95", + "weakness": "3" + }, + { + "id": "4682", + "name": "Blue dragon", + "examine": "A mother dragon.", + "aggressive": "true", + "attack_level": "95", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "95", + "lifepoints": "105", + "magic_animation": "80", + "magic_level": "1", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "108", + "strength_level": "95", + "weakness": "3" + }, + { + "id": "4683", + "name": "Blue dragon", + "examine": "A mother dragon.", + "aggressive": "true", + "attack_level": "95", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "95", + "lifepoints": "105", + "magic_animation": "80", + "magic_level": "1", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "108", + "strength_level": "95", + "weakness": "3" + }, + { + "id": "4684", + "name": "Blue dragon", + "examine": "A mother dragon.", + "aggressive": "true", + "attack_level": "95", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "95", + "lifepoints": "105", + "magic_animation": "80", + "magic_level": "1", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "108", + "strength_level": "95", + "weakness": "3" + }, + { + "id": "4685", + "name": "Ice giant", + "examine": "He's got icicles in his beard.", + "aggressive": "true", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", + "combat_audio": "448,451,450", + "death_animation": "4673", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "70", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4672", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "70", + "strength_level": "40", + "weakness": "9" + }, + { + "id": "4686", + "name": "Ice giant", + "examine": "He's got icicles in his beard.", + "aggressive": "true", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", + "combat_audio": "448,451,450", + "death_animation": "4673", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "70", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4672", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "70", + "strength_level": "40", + "weakness": "9" + }, + { + "id": "4687", + "name": "Ice giant", + "examine": "He's got icicles in his beard.", + "aggressive": "true", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", + "combat_audio": "448,451,450", + "death_animation": "4673", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "70", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4672", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "70", + "strength_level": "40", + "weakness": "9" + }, + { + "id": "4688", + "name": "Moss giant", + "examine": "His beard seems to have a life of its own.", + "aggressive": "true", + "attack_level": "30", + "attack_speed": "6", + "bonuses": "33,33,33,0,0,0,0,0,0,0,0,31,0,0,0", + "combat_audio": "449,451,450", + "death_animation": "4668", + "defence_animation": "4665", + "defence_level": "30", + "lifepoints": "60", + "magic_animation": "4666", + "magic_level": "1", + "melee_animation": "4666", + "range_animation": "4666", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "60", + "strength_level": "30", + "weakness": "1" + }, + { + "id": "4689", + "name": "Hill Giant", + "examine": "A very large foe.", + "aggressive": "true", + "attack_level": "18", + "attack_speed": "6", + "bonuses": "18,18,18,0,0,0,0,0,0,0,0,16,0,0,0", + "combat_audio": "448,451,450", + "death_animation": "4653", + "defence_animation": "4651", + "defence_level": "26", + "lifepoints": "35", + "magic_animation": "4652", + "magic_level": "1", + "melee_animation": "4652", + "range_animation": "4652", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "35", + "strength_level": "22", + "weakness": "6" + }, + { + "id": "4690", + "name": "Hill Giant", + "examine": "A very large foe.", + "aggressive": "true", + "attack_level": "18", + "attack_speed": "6", + "bonuses": "18,18,18,0,0,0,0,0,0,0,0,16,0,0,0", + "combat_audio": "448,451,450", + "death_animation": "4653", + "defence_animation": "4651", + "defence_level": "26", + "lifepoints": "35", + "magic_animation": "4652", + "magic_level": "1", + "melee_animation": "4652", + "range_animation": "4652", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "35", + "strength_level": "22", + "weakness": "6" + }, + { + "id": "4691", + "name": "Hill Giant", + "examine": "A very large foe.", + "aggressive": "true", + "attack_level": "18", + "attack_speed": "6", + "bonuses": "18,18,18,0,0,0,0,0,0,0,0,16,0,0,0", + "combat_audio": "448,451,450", + "death_animation": "4653", + "defence_animation": "4651", + "defence_level": "26", + "lifepoints": "35", + "magic_animation": "4652", + "magic_level": "1", + "melee_animation": "4652", + "range_animation": "4652", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "35", + "strength_level": "22", + "weakness": "6" + }, + { + "id": "4692", + "name": "Hill Giant", + "examine": "A very large foe.", + "aggressive": "true", + "attack_level": "18", + "attack_speed": "6", + "bonuses": "18,18,18,0,0,0,0,0,0,0,0,16,0,0,0", + "combat_audio": "448,451,450", + "death_animation": "4653", + "defence_animation": "4651", + "defence_level": "26", + "lifepoints": "35", + "magic_animation": "4652", + "magic_level": "1", + "melee_animation": "4652", + "range_animation": "4652", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "35", + "strength_level": "22", + "weakness": "6" + }, + { + "id": "4693", + "name": "Hill Giant", + "examine": "A very large foe.", + "aggressive": "true", + "attack_level": "18", + "attack_speed": "6", + "bonuses": "18,18,18,0,0,0,0,0,0,0,0,16,0,0,0", + "combat_audio": "448,451,450", + "death_animation": "4653", + "defence_animation": "4651", + "defence_level": "26", + "lifepoints": "35", + "magic_animation": "4652", + "magic_level": "1", + "melee_animation": "4652", + "range_animation": "4652", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "35", + "strength_level": "22", + "weakness": "6" + }, + { + "id": "4694", + "name": "Lesser demon", + "examine": "Lesser, but still pretty big.", + "aggressive": "true", + "attack_level": "68", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", + "combat_audio": "400,404,403", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "71", + "lifepoints": "79", + "magic_animation": "4630", + "magic_level": "1", + "melee_animation": "4630", + "range_animation": "4630", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "79", + "strength_level": "70", + "weakness": "4" + }, + { + "id": "4695", + "name": "Lesser demon", + "examine": "Lesser, but still pretty big.", + "aggressive": "true", + "attack_level": "68", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", + "combat_audio": "400,404,403", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "71", + "lifepoints": "79", + "magic_animation": "4630", + "magic_level": "1", + "melee_animation": "4630", + "range_animation": "4630", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "79", + "strength_level": "70", + "weakness": "4" + }, + { + "id": "4696", + "name": "Lesser demon", + "examine": "Lesser, but still pretty big.", + "aggressive": "true", + "attack_level": "68", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", + "combat_audio": "400,404,403", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "71", + "lifepoints": "79", + "magic_animation": "4630", + "magic_level": "1", + "melee_animation": "4630", + "range_animation": "4630", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "79", + "strength_level": "70", + "weakness": "4" + }, + { + "id": "4697", + "name": "Lesser demon", + "examine": "Lesser, but still pretty big.", + "aggressive": "true", + "attack_level": "68", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", + "combat_audio": "400,404,403", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "71", + "lifepoints": "79", + "magic_animation": "4630", + "magic_level": "1", + "melee_animation": "4630", + "range_animation": "4630", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "79", + "strength_level": "70", + "weakness": "4" + }, + { + "id": "4698", + "name": "Greater demon", + "examine": "Big, red, and incredibly evil.", + "aggressive": "true", + "attack_level": "59", + "attack_speed": "5", + "bonuses": "30,20,20,30,20,50,50,50,10,50,20,0,0,0,0", + "clue_level": "2", + "combat_audio": "400,404,403", + "death_animation": "68", + "defence_animation": "65", + "defence_level": "59", + "lifepoints": "87", + "magic_animation": "64", + "magic_level": "59", + "melee_animation": "64", + "range_animation": "64", + "range_level": "59", + "respawn_delay": "32", + "safespot": null, + "slayer_exp": "87", + "strength_level": "59", + "weakness": "4" + }, + { + "id": "4699", + "name": "Greater demon", + "examine": "Big, red, and incredibly evil.", + "aggressive": "true", + "attack_level": "59", + "attack_speed": "5", + "bonuses": "30,20,20,30,20,50,50,50,10,50,20,0,0,0,0", + "clue_level": "2", + "combat_audio": "400,404,403", + "death_animation": "68", + "defence_animation": "65", + "defence_level": "59", + "lifepoints": "87", + "magic_animation": "64", + "magic_level": "59", + "melee_animation": "64", + "range_animation": "64", + "range_level": "59", + "respawn_delay": "32", + "safespot": null, + "slayer_exp": "87", + "strength_level": "59", + "weakness": "4" + }, + { + "id": "4700", + "name": "Greater demon", + "examine": "Big, red, and incredibly evil.", + "aggressive": "true", + "attack_level": "59", + "attack_speed": "5", + "bonuses": "30,20,20,30,20,50,50,50,10,50,20,0,0,0,0", + "clue_level": "2", + "combat_audio": "400,404,403", + "death_animation": "68", + "defence_animation": "65", + "defence_level": "59", + "lifepoints": "87", + "magic_animation": "64", + "magic_level": "59", + "melee_animation": "64", + "range_animation": "64", + "range_level": "59", + "respawn_delay": "32", + "safespot": null, + "slayer_exp": "87", + "strength_level": "59", + "weakness": "4" + }, + { + "id": "4701", + "name": "Greater demon", + "examine": "Big, red, and incredibly evil.", + "aggressive": "true", + "attack_level": "59", + "attack_speed": "5", + "bonuses": "30,20,20,30,20,50,50,50,10,50,20,0,0,0,0", + "clue_level": "2", + "combat_audio": "400,404,403", + "death_animation": "68", + "defence_animation": "65", + "defence_level": "59", + "lifepoints": "87", + "magic_animation": "64", + "magic_level": "59", + "melee_animation": "64", + "range_animation": "64", + "range_level": "59", + "respawn_delay": "32", + "safespot": null, + "slayer_exp": "87", + "strength_level": "59", + "weakness": "4" + }, + { + "id": "4702", + "name": "Black demon", + "examine": "A big, scary, jet-black demon.", + "aggressive": "true", + "attack_level": "145", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", + "combat_audio": "397,399,398", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "152", + "lifepoints": "157", + "magic_animation": "64", + "magic_level": "1", + "melee_animation": "64", + "range_animation": "64", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "157", + "strength_level": "148", + "weakness": "4" + }, + { + "id": "4703", + "name": "Black demon", + "examine": "A big, scary, jet-black demon.", + "aggressive": "true", + "attack_level": "145", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", + "combat_audio": "397,399,398", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "152", + "lifepoints": "157", + "magic_animation": "64", + "magic_level": "1", + "melee_animation": "64", + "range_animation": "64", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "157", + "strength_level": "148", + "weakness": "4" + }, + { + "id": "4704", + "name": "Black demon", + "examine": "A big, scary, jet-black demon.", + "aggressive": "true", + "attack_level": "145", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", + "combat_audio": "397,399,398", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "152", + "lifepoints": "157", + "magic_animation": "64", + "magic_level": "1", + "melee_animation": "64", + "range_animation": "64", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "157", + "strength_level": "148", + "weakness": "4" + }, + { + "id": "4705", + "name": "Black demon", + "examine": "A big, scary, jet-black demon.", + "aggressive": "true", + "attack_level": "145", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", + "combat_audio": "397,399,398", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "152", + "lifepoints": "157", + "magic_animation": "64", + "magic_level": "1", + "melee_animation": "64", + "range_animation": "64", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "157", + "strength_level": "148", + "weakness": "4" + }, + { + "id": "4706", + "name": "Moss giant", + "examine": "His beard seems to have a life of its own.", + "aggressive": "true", + "attack_level": "30", + "attack_speed": "6", + "bonuses": "33,33,33,0,0,0,0,0,0,0,0,31,0,0,0", + "combat_audio": "449,451,450", + "death_animation": "4668", + "defence_animation": "4665", + "defence_level": "30", + "lifepoints": "85", + "magic_animation": "4666", + "magic_level": "1", + "melee_animation": "4666", + "range_animation": "4666", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "85", + "strength_level": "30", + "weakness": "1" + }, + { + "id": "4707", + "name": "Magic Tutor", + "examine": "Mikasi looks ready to teach you about magic.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4708", + "name": "Old Man Ral", + "examine": "A flea-infested", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4709", + "name": "Vertida Sefalatis" + }, + { + "id": "4710", + "name": "Aeonisig Raispher" + }, + { + "id": "4711", + "name": "Safalaan" + }, + { + "id": "4714", + "name": "Sarius Guile" + }, + { + "id": "4716", + "name": "Trader Sven", + "examine": "A flea-infested black market trader.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4717", + "name": "Meiyerditch citizen", + "examine": "A flea-infested", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4718", + "name": "Meiyerditch citizen", + "examine": "A flea-infested", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4719", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4720", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4721", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4722", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4723", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4724", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4725", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4726", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4727", + "name": "Meiyerditch citizen" + }, + { + "id": "4728", + "name": "Meiyerditch citizen" + }, + { + "id": "4729", + "name": "Meiyerditch citizen" + }, + { + "id": "4730", + "name": "Meiyerditch citizen" + }, + { + "id": "4731", + "name": "Meiyerditch citizen" + }, + { + "id": "4732", + "name": "Meiyerditch citizen" + }, + { + "id": "4733", + "name": "Meiyerditch citizen", + "examine": "Cowardly mage.", + "aggressive": "true", + "attack_level": "1", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "28", + "magic_animation": "0", + "magic_level": "90", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4734", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4735", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4736", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4737", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4738", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4739", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4740", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4741", + "name": "Meiyerditch citizen", + "examine": "This citizen looks pale", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4742", + "name": "Meiyerditch citizen" + }, + { + "id": "4743", + "name": "Meiyerditch citizen" + }, + { + "id": "4744", + "name": "Meiyerditch citizen" + }, + { + "id": "4745", + "name": "Meiyerditch citizen" + }, + { + "id": "4746", + "name": "A Meiyerditch child", + "examine": "A poor street urchin!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4747", + "name": "A Meiyerditch child", + "examine": "A poor street urchin!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4748", + "name": "A Meiyerditch child", + "examine": "A poor street urchin!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4749", + "name": "A Meiyerditch child", + "examine": "A poor street urchin!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4750", + "name": "A Meiyerditch child", + "examine": "A poor street urchin!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4751", + "name": "A Meiyerditch child", + "examine": "A poor street urchin!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4752", + "name": "A Meiyerditch child", + "examine": "A poor street urchin!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4753", + "name": "A Meiyerditch child", + "examine": "A poor street urchin!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4754", + "name": "A Meiyerditch child", + "examine": "A poor street urchin!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4755", + "name": "A Meiyerditch child", + "examine": "A poor street urchin!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4756", + "name": "Meiyerditch miner", + "examine": "This citizen looks dirty and tired!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4757", + "name": "Meiyerditch miner", + "examine": "This citizen looks dirty and tired!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4758", + "name": "Meiyerditch miner" + }, + { + "id": "4759", + "name": "Meiyerditch miner", + "examine": "This citizen looks dirty and tired!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4760", + "name": "Meiyerditch miner" + }, + { + "id": "4761", + "name": "Meiyerditch miner" + }, + { + "id": "4762", + "name": "Shadowy figure" + }, + { + "id": "4763", + "name": "Shadowy figure" + }, + { + "id": "4764", + "name": "Shadowy figure" + }, + { + "id": "4765", + "name": "null", + "examine": "Some rubbish.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4766", + "name": "Stray dog", + "examine": "Looks like it's got fleas!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4767", + "name": "Stray dog" + }, + { + "id": "4768", + "name": "Cat", + "examine": "A smelly cat.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4769", + "name": "Cat" + }, + { + "id": "4770", + "name": "Boat" + }, + { + "id": "4771", + "name": "Boat" + }, + { + "id": "4772", + "name": "Juvinate guard", + "examine": "An initiate juvenile vampyre; a guard for the mining area.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "4773", + "name": "Juvinate guard", + "examine": "An initiate juvenile vampyre; a guard for the mining area.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "4774", + "name": "Vampyre juvenile", + "examine": "A juvenile vampyre.", + "attack_level": "40", + "death_animation": "6781", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "57", + "magic_animation": "0", + "melee_animation": "6276", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "40", + "weakness": "7" + }, + { + "id": "4775", + "name": "Vampyre juvenile", + "examine": "A juvenile vampyre.", + "attack_level": "40", + "death_animation": "6781", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "57", + "magic_animation": "0", + "melee_animation": "6276", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "40", + "weakness": "7" + }, + { + "id": "4776", + "name": "Vampyre juvinate", + "examine": "An initiate juvenile vampyre; seems to be a servant.", + "attack_level": "1", + "death_animation": "5798", + "defence_animation": "0", + "defence_level": "44", + "lifepoints": "62", + "magic_animation": "0", + "melee_animation": "5783", + "range_animation": "0", + "range_level": "44", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "4777", + "name": "Vampyre juvinate", + "examine": "An initiate juvenile vampyre.", + "attack_level": "1", + "death_animation": "5798", + "defence_animation": "0", + "defence_level": "44", + "lifepoints": "62", + "magic_animation": "0", + "melee_animation": "5783", + "range_animation": "0", + "range_level": "44", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "4778", + "name": "Held vampyre juvenile", + "examine": "A juvenile vampyre.", + "attack_level": "40", + "death_animation": "6781", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "57", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "40", + "weakness": "7" + }, + { + "id": "4779", + "name": "Held vampyre juvenile", + "examine": "A juvenile vampyre.", + "attack_level": "40", + "death_animation": "6781", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "57", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "40", + "weakness": "7" + }, + { + "id": "4780", + "name": "Held vampyre juvinate", + "examine": "An initiate juvenile vampyre; seems to be a servant.", + "attack_level": "1", + "death_animation": "5798", + "defence_animation": "0", + "defence_level": "44", + "lifepoints": "62", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "44", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "4781", + "name": "Held vampyre juvinate" + }, + { + "id": "4782", + "name": "Vampyre juvinate" + }, + { + "id": "4783", + "name": "Former vampyre" + }, + { + "id": "4784", + "name": "Former vampyre" + }, + { + "id": "4785", + "name": "Former vampyre" + }, + { + "id": "4786", + "name": "Former vampyre" + }, + { + "id": "4787", + "name": "Former vampyre" + }, + { + "id": "4788", + "name": "Former vampyre" + }, + { + "id": "4789", + "name": "Angry vampyre", + "examine": "An enraged vampyre!", + "attack_level": "42", + "death_animation": "6031", + "defence_animation": "0", + "defence_level": "42", + "lifepoints": "60", + "magic_animation": "0", + "melee_animation": "6016", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "42", + "weakness": "7" + }, + { + "id": "4790", + "name": "Angry vampyre" + }, + { + "id": "4791", + "name": "Vanstrom Klause" + }, + { + "id": "4792", + "name": "Vanstrom Klause" + }, + { + "id": "4793", + "name": "Vanstrom Klause", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "155", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4794", + "name": "Vanstrom Klause" + }, + { + "id": "4795", + "name": "Vanstrom Klause" + }, + { + "id": "4796", + "name": "Vanstrom Klause", + "examine": "Not as strong as Thok.", + "aggressive": "true", + "attack_level": "90", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "28", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "90" + }, + { + "id": "4797", + "name": "Vanescula Drakan" + }, + { + "id": "4798", + "name": "Vanescula Drakan" + }, + { + "id": "4799", + "name": "Vanescula Drakan" + }, + { + "id": "4800", + "name": "Vanescula Drakan" + }, + { + "id": "4801", + "name": "Ranis Drakan" + }, + { + "id": "4802", + "name": "Ranis Drakan" + }, + { + "id": "4803", + "name": "Ranis Drakan" + }, + { + "id": "4804", + "name": "Ranis Drakan" + }, + { + "id": "4805", + "name": "Vyrewatch", + "examine": "An evil", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "71", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4806", + "name": "Vyrewatch", + "examine": "An evil", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "52", + "lifepoints": "74", + "magic_animation": "0", + "magic_level": "52", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4807", + "name": "Vyrewatch", + "examine": "An evil", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "54", + "lifepoints": "77", + "magic_animation": "0", + "magic_level": "54", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4808", + "name": "Vyrewatch", + "examine": "An evil", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "56", + "lifepoints": "80", + "magic_animation": "0", + "magic_level": "56", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4809", + "name": "Flying female vampire" + }, + { + "id": "4810", + "name": "Flying female vampire", + "examine": "A very high-ranking vampyre.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "7524", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "70", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "4811", + "name": "Flying female vampire", + "examine": "A very high-ranking vampyre.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "7524", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "70", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "4812", + "name": "Flying female vampire", + "examine": "A very high-ranking vampyre.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "7524", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "70", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "4813", + "name": "Vyrewatch", + "examine": "A thirsty-looking", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "6861", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "71", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "6783", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4814", + "name": "Vyrewatch", + "examine": "A thirsty-looking", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "6861", + "defence_animation": "0", + "defence_level": "52", + "lifepoints": "74", + "magic_animation": "0", + "magic_level": "52", + "melee_animation": "6783", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4815", + "name": "Vyrewatch", + "examine": "A thirsty-looking", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "6861", + "defence_animation": "0", + "defence_level": "54", + "lifepoints": "77", + "magic_animation": "0", + "magic_level": "54", + "melee_animation": "6783", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4816", + "name": "Vyrewatch", + "examine": "A thirsty-looking", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "6861", + "defence_animation": "0", + "defence_level": "56", + "lifepoints": "80", + "magic_animation": "0", + "magic_level": "56", + "melee_animation": "6783", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4817", + "name": "Vyrewatch", + "examine": "An evil", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "71", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4818", + "name": "Vyrewatch", + "examine": "An evil", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "52", + "lifepoints": "74", + "magic_animation": "0", + "magic_level": "52", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4819", + "name": "Vyrewatch", + "examine": "An evil", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "54", + "lifepoints": "77", + "magic_animation": "0", + "magic_level": "54", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4820", + "name": "Vyrewatch", + "examine": "An evil", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "56", + "lifepoints": "80", + "magic_animation": "0", + "magic_level": "56", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4821", + "name": "Vyrewatch", + "examine": "A very high-ranking vampyre.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "7524", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "70", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "4822", + "name": "Vyrewatch", + "examine": "A very high-ranking vampyre.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "7524", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "70", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "4823", + "name": "Vyrewatch", + "examine": "A very high-ranking vampyre.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "7524", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "70", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "4824", + "name": "Vyrewatch", + "examine": "A very high-ranking vampyre.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "7524", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "70", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "4825", + "name": "Vyrewatch", + "examine": "A thirsty-looking", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "6861", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "71", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "6783", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4826", + "name": "Vyrewatch", + "examine": "A thirsty-looking", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "6861", + "defence_animation": "0", + "defence_level": "52", + "lifepoints": "74", + "magic_animation": "0", + "magic_level": "52", + "melee_animation": "6783", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4827", + "name": "Vyrewatch", + "examine": "A thirsty-looking", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "6861", + "defence_animation": "0", + "defence_level": "54", + "lifepoints": "77", + "magic_animation": "0", + "magic_level": "54", + "melee_animation": "6783", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4828", + "name": "Vyrewatch", + "examine": "A thirsty-looking", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "6861", + "defence_animation": "0", + "defence_level": "56", + "lifepoints": "80", + "magic_animation": "0", + "magic_level": "56", + "melee_animation": "6783", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "4829", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4830", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4831", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4832", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "130", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4833", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4834", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4835", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4836", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "130", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4837", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4838", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4839", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4840", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "130", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4841", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4842", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4843", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4844", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "130", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4845", + "name": "Flying female vampire", + "examine": "A very high-ranking vampyre.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "7524", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "70", + "melee_animation": "7435", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "4846", + "name": "Flying female vampire" + }, + { + "id": "4847", + "name": "Flying female vampire", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4848", + "name": "Flying female vampire", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4849", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4850", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4851", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4852", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4853", + "name": "Ezekial Lovecraft" + }, + { + "id": "4856", + "name": "Ezekial Lovecraft", + "examine": "Smells a bit fishy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4857", + "name": "Sarius Guile" + }, + { + "id": "4862", + "name": "Vanstrom Klause" + }, + { + "id": "4863", + "name": "Kennith" + }, + { + "id": "4864", + "name": "Kennith" + }, + { + "id": "4865", + "name": "Holgart" + }, + { + "id": "4867", + "name": "Holgart" + }, + { + "id": "4868", + "name": "Holgart", + "examine": "Her knives tickle Thok.", + "aggressive": "true", + "attack_level": "1", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "28", + "magic_animation": "0", + "range_level": "90", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4869", + "name": "Fisherman" + }, + { + "id": "4870", + "name": "Fisherman", + "examine": "Not Thok's pretty lass.", + "aggressive": "true", + "attack_level": "1", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "28", + "magic_animation": "0", + "magic_level": "90", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4871", + "name": "Col. O'Niall" + }, + { + "id": "4872", + "name": "Col. O'Niall", + "examine": "A (semi) retired member of the Temple Knights.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4873", + "name": "Col. O'Niall" + }, + { + "id": "4874", + "name": "Mayor Hobb", + "examine": "There's something fishy about him.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4875", + "name": "Mayor Hobb" + }, + { + "id": "4876", + "name": "Brother Maledict" + }, + { + "id": "4878", + "name": "Brother Maledict", + "examine": "A fresh-faced and innocent priest.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4879", + "name": "Brother Maledict" + }, + { + "id": "4880", + "name": "Witchaven villager" + }, + { + "id": "4883", + "name": "Witchaven villager", + "examine": "A down on his luck fisherman.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4884", + "name": "Witchaven villager" + }, + { + "id": "4885", + "name": "Witchaven villager", + "examine": "A down on her luck fisherman.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4886", + "name": "Witchaven villager" + }, + { + "id": "4887", + "name": "Witchaven villager", + "examine": "A down on his luck fisherman.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4888", + "name": "Witchaven villager" + }, + { + "id": "4889", + "name": "Mother Mallum" + }, + { + "id": "4890", + "name": "Slug Prince", + "examine": "A child of aquatic evil.", + "aggressive": "true", + "attack_level": "37", + "death_animation": "4830", + "defence_animation": "0", + "defence_level": "37", + "lifepoints": "105", + "magic_animation": "0", + "melee_animation": "4829", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "37", + "weakness": "9" + }, + { + "id": "4891", + "name": "Giant lobster" + }, + { + "id": "4893", + "name": "Giant Lobster", + "examine": "An extremely vicious lobster.", + "aggressive": "true", + "attack_level": "29", + "death_animation": "6267", + "defence_animation": "0", + "defence_level": "29", + "lifepoints": "82", + "magic_animation": "0", + "melee_animation": "6265", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "29", + "weakness": "9" + }, + { + "id": "4894", + "name": "Sea slug", + "examine": "A rather nasty looking crustacean.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4895", + "name": "Jeb", + "examine": "A villager named Jeb.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4896", + "name": "Jeb" + }, + { + "id": "4897", + "name": "Sir Tinley" + }, + { + "id": "4898", + "name": "Hobgoblin", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "3520,472,471", + "death_animation": "167", + "defence_animation": "163", + "defence_level": "1", + "lifepoints": "29", + "melee_animation": "164", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4899", + "name": "Cooking Tutor", + "examine": "Cordero looks ready to teach you how to cook.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4900", + "name": "Crafting Tutor", + "examine": "Cadmus, looking a little bit crafty.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4901", + "name": "Fishing Tutor", + "examine": "Finlay, mending a crayfish cage.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4902", + "name": "Mining Tutor", + "examine": "Monlum, surveying the rocks.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4903", + "name": "Prayer Tutor", + "examine": "Yauchomi, follower of Saradomin.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4904", + "name": "Smelting Tutor", + "examine": "Feoras looks a bit fiery.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4905", + "name": "Smithing Tutor" + }, + { + "id": "4906", + "name": "Woodcutting Tutor", + "examine": "Wilfred, a chip off the old block.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4907", + "name": "Bank Tutor", + "examine": "Barb, ready to teach you about banking.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4908", + "name": "Fishing spot" + }, + { + "id": "4909", + "name": "Fritz the Glassblower", + "examine": "His motives are see-through.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4910", + "name": "Earth elemental", + "examine": "An earth elemental.", + "aggressive": "false", + "attack_level": "20", + "attack_speed": "6", + "combat_audio": "1531,1533,1532", + "death_animation": "4870", + "defence_animation": "4869", + "defence_level": "35", + "lifepoints": "35", + "magic_level": "10", + "melee_animation": "4868", + "range_level": "30", + "respawn_delay": "5", + "safespot": null, + "strength_level": "35" + }, + { + "id": "4911", + "name": "Elemental rock", + "examine": "An elemental rock.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "7" + }, + { + "id": "4912", + "name": "Jig cart" + }, + { + "id": "4914", + "name": "Jig cart" + }, + { + "id": "4915", + "name": "Jig cart" + }, + { + "id": "4916", + "name": "Jig cart" + }, + { + "id": "4917", + "name": "Jig cart" + }, + { + "id": "4918", + "name": "Jig cart" + }, + { + "id": "4919", + "name": "Abidor Crank" + }, + { + "id": "4920", + "name": "Giant crypt rat", + "examine": "A nasty overgrown rodent.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "65", + "lifepoints": "70", + "magic_animation": "4933", + "magic_level": "1", + "melee_animation": "4933", + "range_animation": "4933", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "strength_level": "50", + "weakness": "9" + }, + { + "id": "4921", + "name": "Giant crypt rat", + "examine": "A nasty overgrown rodent.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "65", + "lifepoints": "70", + "magic_animation": "4933", + "magic_level": "1", + "melee_animation": "4933", + "range_animation": "4933", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "strength_level": "50", + "weakness": "9" + }, + { + "id": "4922", + "name": "Giant rat", + "examine": "Overgrown vermin.", + "aggressive": "true", + "attack_level": "5", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "4933", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "5", + "weakness": "8" + }, + { + "id": "4923", + "name": "Giant rat", + "examine": "Overgrown vermin.", + "aggressive": "true", + "attack_level": "5", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "4933", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "5", + "weakness": "8" + }, + { + "id": "4924", + "name": "Giant rat", + "examine": "Overgrown vermin.", + "aggressive": "true", + "attack_level": "5", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "4933", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "5", + "weakness": "8" + }, + { + "id": "4925", + "name": "Giant rat", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "1", + "lifepoints": "10", + "melee_animation": "4933", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4926", + "name": "Giant rat", + "examine": "Overgrown vermin.", + "aggressive": "true", + "attack_level": "7", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "7", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "4933", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "7", + "weakness": "8" + }, + { + "id": "4927", + "name": "Giant rat", + "examine": "Overgrown vermin.", + "aggressive": "true", + "attack_level": "7", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "7", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "4933", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "7", + "weakness": "8" + }, + { + "id": "4928", + "name": "Dungeon rat", + "examine": "Overgrown vermin.", + "aggressive": "true", + "attack_level": "13", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "13", + "weakness": "8" + }, + { + "id": "4929", + "name": "Dungeon rat", + "examine": "Overgrown vermin.", + "aggressive": "true", + "attack_level": "13", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "13", + "lifepoints": "18", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "13", + "weakness": "8" + }, + { + "id": "4930", + "name": "Goat", + "examine": "They'll eat anything!", + "attack_level": "5", + "death_animation": "5343", + "defence_animation": "0", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "5341", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "5", + "weakness": "6" + }, + { + "id": "4931", + "name": "Goat", + "examine": "They'll eat anything!", + "attack_level": "5", + "death_animation": "5343", + "defence_animation": "0", + "defence_level": "5", + "lifepoints": "7", + "magic_animation": "0", + "melee_animation": "5341", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "5", + "weakness": "6" + }, + { + "id": "4932", + "name": "Billy Goat", + "examine": "They'll eat anything!", + "attack_level": "11", + "death_animation": "5343", + "defence_animation": "0", + "defence_level": "11", + "lifepoints": "15", + "magic_animation": "0", + "melee_animation": "5341", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "11", + "weakness": "6" + }, + { + "id": "4933", + "name": "Goat", + "attack_level": "1", + "death_animation": "5343", + "defence_animation": "5342", + "defence_level": "1", + "lifepoints": "21", + "melee_animation": "5341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4934", + "name": "Goat", + "attack_level": "1", + "death_animation": "5343", + "defence_animation": "5342", + "defence_level": "1", + "lifepoints": "21", + "melee_animation": "5341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4935", + "name": "Billy Goat", + "attack_level": "1", + "death_animation": "5343", + "defence_animation": "5342", + "defence_level": "1", + "lifepoints": "28", + "melee_animation": "5341", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4936", + "name": "Dungeon rat", + "examine": "A dirty rat.", + "aggressive": "true", + "attack_level": "8", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "0", + "defence_level": "8", + "lifepoints": "11", + "magic_animation": "0", + "melee_animation": "4933", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "8", + "weakness": "9" + }, + { + "id": "4937", + "name": "Dungeon rat", + "examine": "A dirty rat.", + "aggressive": "true", + "attack_level": "8", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "0", + "defence_level": "8", + "lifepoints": "11", + "magic_animation": "0", + "melee_animation": "4933", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "8", + "weakness": "9" + }, + { + "id": "4938", + "name": "Angry giant rat", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4939", + "name": "Angry giant rat", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4940", + "name": "Angry giant rat", + "examine": "He looks a little on the cross side!", + "attack_level": "25", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "4933", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "4941", + "name": "Blessed giant rat", + "examine": "It's one of Iban's pet vermin.", + "attack_level": "12", + "combat_audio": "703,705,704", + "defence_animation": "0", + "defence_level": "12", + "lifepoints": "17", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "12", + "weakness": "9" + }, + { + "id": "4942", + "name": "Giant rat", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "1", + "lifepoints": "5", + "melee_animation": "4933", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4943", + "name": "Giant rat", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "1", + "lifepoints": "5", + "melee_animation": "4933", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4944", + "name": "Giant rat", + "examine": "Overgrown vermin.", + "aggressive": "true", + "attack_level": "21", + "attack_speed": "5", + "bonuses": "19,15,15,34,36,38,33,31,30,14,0,0,0,0,0", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "23", + "lifepoints": "26", + "melee_animation": "4933", + "range_level": "1", + "safespot": null, + "strength_level": "20" + }, + { + "id": "4945", + "name": "Giant rat", + "examine": "Overgrown vermin.", + "aggressive": "true", + "attack_level": "21", + "attack_speed": "5", + "bonuses": "19,15,15,34,36,38,33,31,30,14,0,0,0,0,0", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "23", + "lifepoints": "26", + "melee_animation": "4933", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "9" + }, + { + "id": "4946", + "name": "Ignatius Vulcan" + }, + { + "id": "4947", + "name": "My Arm", + "examine": "Trollish.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4948", + "name": "My Arm" + }, + { + "id": "4949", + "name": "My Arm" + }, + { + "id": "4950", + "name": "My Arm" + }, + { + "id": "4958", + "name": "My Arm" + }, + { + "id": "4959", + "name": "My Arm" + }, + { + "id": "4960", + "name": "Adventurer" + }, + { + "id": "4961", + "name": "Captain Barnaby" + }, + { + "id": "4962", + "name": "Captain Barnaby", + "examine": "An old sailor.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4963", + "name": "Murcaily" + }, + { + "id": "4964", + "name": "Jagbakoba" + }, + { + "id": "4965", + "name": "Tool Leprechaun", + "examine": "It's a leprechaun sunbathing on a mountain.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4966", + "name": "Flies" + }, + { + "id": "4968", + "name": "Unnamed troll child" + }, + { + "id": "4969", + "name": "Drunken dwarf's leg" + }, + { + "id": "4970", + "name": "Baby Roc" + }, + { + "id": "4971", + "name": "Baby Roc", + "examine": "A mountain-dwelling bird. Cute", + "aggressive": "true", + "attack_level": "40", + "death_animation": "5033", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "100", + "magic_animation": "0", + "melee_animation": "5031", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "40", + "weakness": "7" + }, + { + "id": "4972", + "name": "Giant Roc", + "examine": "A very", + "aggressive": "true", + "attack_level": "55", + "death_animation": "5027", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "285", + "magic_animation": "0", + "magic_level": "55", + "melee_animation": "5024", + "range_animation": "5025", + "range_level": "55", + "respawn_delay": "60", + "safespot": null, + "strength_level": "55", + "weakness": "10" + }, + { + "id": "4973", + "name": "Shadow" + }, + { + "id": "4974", + "name": "Captain Barnaby" + }, + { + "id": "4975", + "name": "Male slave", + "examine": "It looks like he's been here a long time.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4976", + "name": "Male slave" + }, + { + "id": "4977", + "name": "Female slave", + "examine": "She looks like she's been down here a long time.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "4978", + "name": "Female slave" + }, + { + "id": "4979", + "name": "Cart Camel" + }, + { + "id": "4980", + "name": "Mine Cart" + }, + { + "id": "4981", + "name": "Mine Cart" + }, + { + "id": "4982", + "name": "Ana" + }, + { + "id": "4983", + "name": "Mercenary" + }, + { + "id": "4984", + "name": "Irena" + }, + { + "id": "4989", + "name": "Mercenary", + "examine": "He looks a bit aggressive.", + "attack_level": "25", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "4990", + "name": "Mercenary", + "examine": "He looks a bit aggressive.", + "attack_level": "25", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "4991", + "name": "Mercenary", + "examine": "He looks a bit aggressive.", + "attack_level": "25", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "4992", + "name": "Mercenary", + "examine": "He looks a bit aggressive.", + "attack_level": "25", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "4993", + "name": "Guard", + "examine": "He looks a bit aggressive.", + "attack_level": "25", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "4994", + "name": "Guard", + "examine": "He looks a bit aggressive.", + "attack_level": "25", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "4995", + "name": "Guard", + "examine": "He looks a bit aggressive.", + "attack_level": "25", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "4996", + "name": "Guard", + "examine": "He looks a bit aggressive.", + "attack_level": "25", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "4997", + "name": "Guard", + "examine": "He looks a bit aggressive.", + "attack_level": "25", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "4998", + "name": "Guard", + "examine": "He looks a bit aggressive.", + "attack_level": "25", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "25", + "weakness": "9" + }, + { + "id": "4999", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5000", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5001", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5002", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5003", + "name": "Gublinch" + }, + { + "id": "5018", + "name": "Gublinch" + }, + { + "id": "5019", + "name": "Gublinch" + }, + { + "id": "5020", + "name": "Jack" + }, + { + "id": "5024", + "name": "Jill" + }, + { + "id": "5025", + "name": "Jeff" + }, + { + "id": "5026", + "name": "Egg launcher", + "examine": "An apprentice.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5027", + "name": "Egg launcher", + "examine": "A tired old wizard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5028", + "name": "Egg launcher", + "examine": "An egg launcher.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5029", + "name": "Commander Connad", + "examine": "A slightly more approachable barbarian.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5030", + "name": "Captain Cain", + "examine": "He looks pretty mean.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5031", + "name": "Private Paldo", + "examine": "A stressed out barbarian private.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5032", + "name": "Private Pendron", + "examine": "A barbarian private.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5033", + "name": "Private Pierreb", + "examine": "A barbarian private.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5034", + "name": "Private Paldon", + "examine": "A barbarian private.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5035", + "name": "Major Attack", + "examine": "A barbarian army teacher.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5036", + "name": "Major Collect", + "examine": "A barbarian army teacher.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5037", + "name": "Major Defend", + "examine": "A barbarian army teacher.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5038", + "name": "Major Heal", + "examine": "A barbarian army teacher.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5039", + "name": "Sergeant Sambur", + "examine": "He's keeping a close eye on that nearby door.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5040", + "name": "Penance Fighter", + "examine": "What on Gielinor is that?", + "attack_level": "1", + "combat_audio": "670,672,671", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5041", + "name": "Penance Ranger", + "examine": "Shooty-shooty.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5042", + "name": "Penance Runner", + "examine": "He's making a run for it!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5043", + "name": "Penance Healer", + "examine": "A nasty piece of work.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5044", + "name": "Penance Fighter" + }, + { + "id": "5045", + "name": "Penance Fighter" + }, + { + "id": "5046", + "name": "Jack" + }, + { + "id": "5047", + "name": "Jill" + }, + { + "id": "5048", + "name": "Jeff", + "examine": "Not as strong as Thok.", + "aggressive": "true", + "attack_level": "80", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "22", + "magic_animation": "0", + "magic_level": "80", + "melee_animation": "401", + "range_animation": "0", + "range_level": "80", + "safespot": null, + "strength_level": "80", + "weakness": "10" + }, + { + "id": "5049", + "name": "Auguste" + }, + { + "id": "5050", + "name": "Auguste" + }, + { + "id": "5051", + "name": "Auguste" + }, + { + "id": "5052", + "name": "Auguste" + }, + { + "id": "5053", + "name": "Assistant Serf" + }, + { + "id": "5054", + "name": "Assistant Brock" + }, + { + "id": "5055", + "name": "Assistant Marrow" + }, + { + "id": "5056", + "name": "Assistant Le Smith" + }, + { + "id": "5057", + "name": "Assistant Stan" + }, + { + "id": "5058", + "name": "Bob" + }, + { + "id": "5059", + "name": "Curly" + }, + { + "id": "5060", + "name": "Moe" + }, + { + "id": "5061", + "name": "Larry" + }, + { + "id": "5062", + "name": "Shark" + }, + { + "id": "5067", + "name": "Shark", + "examine": "Time to run away...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5068", + "name": "Shark" + }, + { + "id": "5069", + "name": "Shark" + }, + { + "id": "5070", + "name": "Tropical wagtail" + }, + { + "id": "5072", + "name": "Tropical wagtail", + "examine": "It blends in very well with its surroundings.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5073", + "name": "Crimson swift", + "examine": "This bird obviously doesn't believe in subtlety.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5074", + "name": "Cerulean twitch", + "examine": "Best served ice cold.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5075", + "name": "Golden warbler", + "examine": "Actually", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5076", + "name": "Copper longtail", + "examine": "Nothing much to get in a flap about.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5077", + "name": "Chinchompa" + }, + { + "id": "5079", + "name": "Chinchompa", + "examine": "Handle with care.", + "attack_level": "1", + "death_animation": "5183", + "defence_level": "1", + "lifepoints": "1", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5080", + "name": "Carnivorous chinchompa", + "examine": "It looks fluffy and cute; it's probably deadly.", + "attack_level": "2", + "death_animation": "5183", + "defence_animation": "0", + "defence_level": "2", + "lifepoints": "10", + "magic_animation": "0", + "magic_level": "2", + "melee_animation": "0", + "range_animation": "0", + "range_level": "2", + "safespot": null, + "strength_level": "2" + }, + { + "id": "5081", + "name": "Ferret", + "examine": "Wild.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5082", + "name": "Black warlock", + "examine": "A black warlock. The air seems to distort wherever it passes.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5083", + "name": "Snowy knight", + "examine": "It's a snowy knight butterfly.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5084", + "name": "Sapphire glacialis", + "examine": "A sapphire glacialis. It doesn't look as pretentious as its name sounds.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5085", + "name": "Ruby harvest", + "examine": "It's a ruby harvest butterfly.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5086", + "name": "Prickly kebbit", + "examine": "Curls up into a ball to protect itself from attack.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5087", + "name": "Sabre-toothed kebbit", + "examine": "Now that's a big overbite.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5088", + "name": "Barb-tailed kebbit", + "examine": "It uses its tail to hunt and skewer fish.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5089", + "name": "Wild kebbit", + "examine": "That's a mean looking set of claws.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5090", + "name": "Matthias" + }, + { + "id": "5093", + "name": "Matthias" + }, + { + "id": "5094", + "name": "Gyr Falcon" + }, + { + "id": "5095", + "name": "Gyr Falcon" + }, + { + "id": "5096", + "name": "Gyr Falcon" + }, + { + "id": "5097", + "name": "Gyr Falcon", + "examine": "Ha! Thok much stronger.", + "aggressive": "true", + "attack_level": "80", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "22", + "magic_animation": "0", + "magic_level": "80", + "melee_animation": "395", + "range_animation": "0", + "range_level": "80", + "safespot": null, + "strength_level": "80", + "weakness": "10" + }, + { + "id": "5098", + "name": "Spotted kebbit", + "examine": "It seems to be on a permanent sugar rush.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5099", + "name": "Dark kebbit", + "examine": "Quieter than a ninja mouse with slippers on.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5100", + "name": "Dashing kebbit", + "examine": "Now you see it; now you don't.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5101", + "name": "Sabre-toothed kyatt" + }, + { + "id": "5103", + "name": "Sabre-toothed kyatt", + "examine": "It's just like a big, white, furry, deadly can opener.", + "attack_level": "25", + "attack_speed": "5", + "death_animation": "5234", + "defence_animation": "404", + "defence_level": "99", + "lifepoints": "10", + "magic_animation": "5228", + "melee_animation": "5228", + "range_animation": "5228", + "range_level": "1", + "respawn_delay": "10", + "safespot": null, + "strength_level": "25" + }, + { + "id": "5104", + "name": "Spined larupia", + "examine": "If you tried to ride that, you'd just impale yourself!", + "attack_level": "15", + "attack_speed": "5", + "death_animation": "5234", + "defence_animation": "404", + "defence_level": "99", + "lifepoints": "10", + "magic_animation": "5228", + "melee_animation": "5228", + "range_animation": "5228", + "range_level": "1", + "safespot": null, + "strength_level": "15" + }, + { + "id": "5105", + "name": "Horned graahk", + "examine": "Get in a graahk's way and you're going to know about it... however briefly.", + "attack_level": "25", + "attack_speed": "5", + "death_animation": "5234", + "defence_animation": "404", + "defence_level": "99", + "lifepoints": "10", + "magic_animation": "5228", + "melee_animation": "5228", + "range_animation": "5228", + "range_level": "1", + "safespot": null, + "strength_level": "25" + }, + { + "id": "5106", + "name": "null", + "examine": "It's just like a big, white, furry, deadly can opener.", + "attack_level": "20", + "attack_speed": "5", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "40", + "lifepoints": "10", + "magic_animation": "5228", + "melee_animation": "5228", + "range_animation": "5228", + "range_level": "1", + "safespot": null, + "strength_level": "20" + }, + { + "id": "5110", + "name": "Aleck" + }, + { + "id": "5111", + "name": "Leon", + "examine": "He seems to be making odd sucking noises with his teeth." + }, + { + "id": "5112", + "name": "Hunting expert", + "examine": "He must be good at hunting; even his hair blends in with the surroundings.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5113", + "name": "Hunting expert", + "examine": "With all the furs", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5114", + "name": "Orange salamander", + "examine": "Slightly slimy but kind of cute.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5115", + "name": "Red salamander", + "examine": "Slightly slimy but certainly striking.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5116", + "name": "Black salamander", + "examine": "Slightly slimy and somewhat menacing.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5117", + "name": "Swamp lizard", + "examine": "Very slimy and generally disgusting.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5118", + "name": "Eagle" + }, + { + "id": "5120", + "name": "Eagle", + "examine": "A very large", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5121", + "name": "Eagle" + }, + { + "id": "5122", + "name": "Eagle" + }, + { + "id": "5123", + "name": "Eagle" + }, + { + "id": "5124", + "name": "Nickolaus" + }, + { + "id": "5127", + "name": "Nickolaus" + }, + { + "id": "5128", + "name": "Nickolaus" + }, + { + "id": "5129", + "name": "Nickolaus" + }, + { + "id": "5130", + "name": "Desert eagle", + "examine": "A very large", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5131", + "name": "Jungle eagle", + "examine": "A very large", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5132", + "name": "Polar eagle", + "examine": "A very large", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5133", + "name": "Eagle", + "examine": "It seems to be protecting the nest.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5134", + "name": "Kebbit" + }, + { + "id": "5137", + "name": "Kebbit", + "aggressive": "true", + "attack_level": "1", + "defence_animation": "5305", + "defence_level": "1", + "lifepoints": "40", + "melee_animation": "5304", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5138", + "name": "Charlie" + }, + { + "id": "5139", + "name": "Boulder" + }, + { + "id": "5140", + "name": "Boulder", + "examine": "Now", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5141", + "name": "Uri" + }, + { + "id": "5142", + "name": "Uri" + }, + { + "id": "5143", + "name": "Uri" + }, + { + "id": "5144", + "name": "Double agent", + "examine": "He's playing both sides!", + "aggressive": "true", + "attack_level": "75", + "attack_speed": "5", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "75", + "lifepoints": "85", + "magic_animation": "0", + "magic_level": "75", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "75", + "weakness": "6" + }, + { + "id": "5145", + "name": "Double agent", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "120", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5146", + "name": "Li'l lamb", + "examine": "How cute!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5147", + "name": "Lamb", + "examine": "The black sheep of the family.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5148", + "name": "Sheep" + }, + { + "id": "5149", + "name": "Sheep" + }, + { + "id": "5150", + "name": "Sheep" + }, + { + "id": "5151", + "name": "Sheep" + }, + { + "id": "5152", + "name": "Sheep" + }, + { + "id": "5153", + "name": "Sheep" + }, + { + "id": "5154", + "name": "Sheep" + }, + { + "id": "5155", + "name": "Sheep" + }, + { + "id": "5156", + "name": "Sheep" + }, + { + "id": "5157", + "name": "Sheep" + }, + { + "id": "5158", + "name": "Sheep" + }, + { + "id": "5159", + "name": "Sheep" + }, + { + "id": "5160", + "name": "Sheep" + }, + { + "id": "5161", + "name": "Sheep" + }, + { + "id": "5162", + "name": "Sheep", + "examine": "White and fluffy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5163", + "name": "Sheep", + "examine": "White and fluffy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5164", + "name": "Sheep", + "examine": "White and fluffy" + }, + { + "id": "5165", + "name": "Sheep" + }, + { + "id": "5166", + "name": "Mountain Goat", + "examine": "This goat belongs to the mountain camp people.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5167", + "name": "Mountain Goat", + "examine": "This goat belongs to the mountain camp people.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5168", + "name": "Ram", + "examine": "White and fluffy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "757,759,758", + "death_animation": "5336", + "defence_animation": "5337", + "defence_level": "1", + "lifepoints": "8", + "melee_animation": "5338", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "5169", + "name": "Ram", + "examine": "White and fluffy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "757,759,758", + "death_animation": "5336", + "defence_animation": "5337", + "defence_level": "1", + "lifepoints": "8", + "melee_animation": "5338", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "5170", + "name": "Ram", + "examine": "White and fluffy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "757,759,758", + "death_animation": "5336", + "defence_animation": "5337", + "defence_level": "1", + "lifepoints": "8", + "magic_animation": "0", + "melee_animation": "5338", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "5171", + "name": "Mountain goat", + "examine": "This beast doesn't need climbing boots.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5172", + "name": "Golden sheep", + "examine": "Freshly shorn.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5173", + "name": "Golden sheep", + "examine": "Lovely thick wool.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5174", + "name": "Ogre chieftain" + }, + { + "id": "5175", + "name": "Ogre shaman" + }, + { + "id": "5176", + "name": "Ogre shaman", + "examine": "Seems intelligent... for an ogre.", + "aggressive": "true", + "attack_level": "65", + "combat_style": "2", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "371", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "65", + "weakness": "7" + }, + { + "id": "5177", + "name": "Ogre shaman" + }, + { + "id": "5178", + "name": "Blue dragon", + "examine": "A mother dragon.", + "aggressive": "true", + "attack_level": "95", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,70,70,60,50,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "95", + "lifepoints": "105", + "magic_animation": "80", + "magic_level": "1", + "melee_animation": "80", + "range_animation": "80", + "range_level": "1", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "108", + "strength_level": "95", + "weakness": "3" + }, + { + "id": "5179", + "name": "Elkoy" + }, + { + "id": "5180", + "name": "Ogre shaman" + }, + { + "id": "5181", + "name": "Ogre shaman", + "examine": "Seems intelligent... for an ogre.", + "attack_level": "65", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "371", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "65", + "weakness": "7" + }, + { + "id": "5182", + "name": "Elkoy" + }, + { + "id": "5183", + "name": "Ogre shaman" + }, + { + "id": "5184", + "name": "Ogre shaman", + "examine": "Seems intelligent... for an ogre.", + "aggressive": "true", + "attack_level": "65", + "combat_style": "2", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "371", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "65", + "weakness": "7" + }, + { + "id": "5185", + "name": "Biggleswade" + }, + { + "id": "5186", + "name": "Ogre shaman" + }, + { + "id": "5187", + "name": "Ogre shaman", + "examine": "Seems intelligent... for an ogre.", + "aggressive": "true", + "attack_level": "65", + "combat_style": "2", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "371", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "65", + "weakness": "7" + }, + { + "id": "5188", + "name": "Saff Waldon", + "examine": "It's Nial", + "aggressive": "true", + "attack_level": "58", + "death_animation": "8948", + "defence_animation": "0", + "defence_level": "58", + "lifepoints": "165", + "magic_animation": "0", + "magic_level": "58", + "melee_animation": "8946", + "range_animation": "0", + "range_level": "58", + "respawn_delay": "60", + "safespot": null, + "strength_level": "58", + "weakness": "10" + }, + { + "id": "5189", + "name": "Ogre shaman" + }, + { + "id": "5190", + "name": "Ogre shaman", + "examine": "Seems intelligent. For an ogre.", + "aggressive": "true", + "attack_level": "1", + "combat_style": "2", + "defence_level": "1", + "lifepoints": "1", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5191", + "name": "Blaze Sharpeye" + }, + { + "id": "5192", + "name": "Ogre shaman" + }, + { + "id": "5193", + "name": "Ogre shaman", + "examine": "Seems intelligent. For an ogre.", + "aggressive": "true", + "attack_level": "1", + "combat_style": "2", + "defence_level": "1", + "lifepoints": "1", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5194", + "name": "Blaze Sharpeye" + }, + { + "id": "5195", + "name": "Wizard", + "examine": "A wizard.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5196", + "name": "Wizard", + "examine": "A wizard.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5197", + "name": "Wizard", + "examine": "A wizard.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5198", + "name": "Ava", + "examine": "She's watching you." + }, + { + "id": "5199", + "name": "Witch" + }, + { + "id": "5200", + "name": "Witch", + "examine": "The hat's a dead giveaway." + }, + { + "id": "5201", + "name": "Alice's husband" + }, + { + "id": "5203", + "name": "Alice's husband" + }, + { + "id": "5204", + "name": "Alice's husband", + "examine": "She needs to work out before facing Thok.", + "aggressive": "true", + "attack_level": "80", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "22", + "magic_animation": "0", + "magic_level": "80", + "melee_animation": "7041", + "range_animation": "0", + "range_level": "80", + "safespot": null, + "strength_level": "80", + "weakness": "10" + }, + { + "id": "5205", + "name": "Alice's husband" + }, + { + "id": "5206", + "name": "Tree" + }, + { + "id": "5208", + "name": "Undead tree" + }, + { + "id": "5209", + "name": " Sneaky undead fowl" + }, + { + "id": "5210", + "name": "Cow1337killr" + }, + { + "id": "5211", + "name": "Undead cow", + "examine": "It's an undead cow.", + "aggressive": "false", + "attack_level": "1", + "attack_speed": "4", + "bonuses": "-15,-15,-15,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "death_animation": "5851", + "defence_animation": "5850", + "defence_level": "1", + "lifepoints": "8", + "magic_animation": "5849", + "magic_level": "1", + "melee_animation": "5849", + "range_animation": "5849", + "range_level": "1", + "respawn_delay": "5", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5212", + "name": "Alice" + }, + { + "id": "5213", + "name": "Penance Fighter" + }, + { + "id": "5214", + "name": "Penance Fighter" + }, + { + "id": "5215", + "name": "Penance Fighter" + }, + { + "id": "5216", + "name": "Penance Fighter" + }, + { + "id": "5217", + "name": "Penance Fighter" + }, + { + "id": "5218", + "name": "Penance Fighter" + }, + { + "id": "5219", + "name": "Penance Fighter" + }, + { + "id": "5220", + "name": "Penance Runner" + }, + { + "id": "5221", + "name": "Penance Runner" + }, + { + "id": "5222", + "name": "Penance Runner" + }, + { + "id": "5223", + "name": "Penance Runner" + }, + { + "id": "5224", + "name": "Penance Runner" + }, + { + "id": "5225", + "name": "Penance Runner" + }, + { + "id": "5226", + "name": "Penance Runner" + }, + { + "id": "5227", + "name": "Penance Runner" + }, + { + "id": "5228", + "name": "Penance Runner" + }, + { + "id": "5229", + "name": "Penance Ranger", + "examine": "Shooty-shooty.", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "5937", + "defence_animation": "5396", + "defence_level": "1", + "lifepoints": "10", + "melee_animation": "5395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5230", + "name": "Penance Ranger" + }, + { + "id": "5231", + "name": "Penance Ranger" + }, + { + "id": "5232", + "name": "Penance Ranger" + }, + { + "id": "5233", + "name": "Penance Ranger" + }, + { + "id": "5234", + "name": "Penance Ranger" + }, + { + "id": "5235", + "name": "Penance Ranger" + }, + { + "id": "5236", + "name": "Penance Ranger" + }, + { + "id": "5237", + "name": "Penance Ranger", + "examine": "Shooty-shooty.", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "5937", + "defence_animation": "5396", + "defence_level": "1", + "lifepoints": "10", + "melee_animation": "5395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5238", + "name": "Penance Healer" + }, + { + "id": "5239", + "name": "Penance Healer" + }, + { + "id": "5240", + "name": "Penance Healer" + }, + { + "id": "5241", + "name": "Penance Healer" + }, + { + "id": "5242", + "name": "Penance Healer" + }, + { + "id": "5243", + "name": "Penance Healer" + }, + { + "id": "5244", + "name": "Penance Healer" + }, + { + "id": "5245", + "name": "Penance Healer" + }, + { + "id": "5246", + "name": "Penance Healer" + }, + { + "id": "5247", + "name": "Penance Queen", + "examine": "Run away! Run away!", + "aggressive": "true", + "attack_level": "260", + "death_animation": "5412", + "defence_animation": "0", + "defence_level": "132", + "lifepoints": "71", + "magic_animation": "0", + "melee_animation": "5411", + "range_animation": "0", + "range_level": "116", + "respawn_delay": "60", + "safespot": null, + "strength_level": "260" + }, + { + "id": "5248", + "name": "Queen spawn", + "examine": "What's it looking at?", + "aggressive": "true", + "attack_level": "60", + "death_animation": "5093", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "450", + "magic_animation": "0", + "melee_animation": "5092", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "60" + }, + { + "id": "5249", + "name": "Captain Errdo", + "examine": "He looks embarrassed", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5250", + "name": "Scarab mage", + "examine": "Part scarab, part man.", + "aggressive": "true", + "attack_level": "40", + "combat_style": "2", + "death_animation": "7616", + "defence_animation": "0", + "defence_level": "54", + "lifepoints": "77", + "magic_animation": "0", + "magic_level": "54", + "melee_animation": "7615", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "40", + "weakness": "3" + }, + { + "id": "5251", + "name": "Locust rider", + "examine": "A mounted lancer.", + "aggressive": "true", + "attack_level": "54", + "death_animation": "7581", + "defence_animation": "0", + "defence_level": "54", + "lifepoints": "77", + "magic_animation": "0", + "melee_animation": "7584", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "54", + "weakness": "7" + }, + { + "id": "5252", + "name": "Locust rider", + "examine": "A mounted archer.", + "aggressive": "true", + "attack_level": "40", + "death_animation": "7581", + "defence_animation": "0", + "defence_level": "54", + "lifepoints": "77", + "magic_animation": "0", + "melee_animation": "5451", + "range_animation": "5451", + "range_level": "54", + "safespot": null, + "strength_level": "40", + "weakness": "2" + }, + { + "id": "5253", + "name": "Giant scarab", + "examine": "A huge scarab beast.", + "aggressive": "true", + "attack_level": "62", + "death_animation": "5456", + "defence_animation": "0", + "defence_level": "62", + "lifepoints": "571", + "magic_animation": "0", + "magic_level": "62", + "melee_animation": "5457", + "range_animation": "0", + "range_level": "62", + "safespot": null, + "strength_level": "62", + "weakness": "10" + }, + { + "id": "5254", + "name": "Scarab mage", + "examine": "Part scarab, part man.", + "aggressive": "true", + "attack_level": "1", + "combat_style": "2", + "death_animation": "7616", + "defence_animation": "7617", + "defence_level": "1", + "lifepoints": "50", + "melee_animation": "7615", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5255", + "name": "Locust rider" + }, + { + "id": "5256", + "name": "Locust rider" + }, + { + "id": "5257", + "name": "Banker" + }, + { + "id": "5258", + "name": "Banker", + "examine": "He can look after my money.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5259", + "name": "Banker" + }, + { + "id": "5260", + "name": "Banker", + "examine": "She can look after my money.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5261", + "name": "Stonemason" + }, + { + "id": "5263", + "name": "Nathifa" + }, + { + "id": "5265", + "name": "Urbi" + }, + { + "id": "5267", + "name": "Jamila" + }, + { + "id": "5269", + "name": "Sophanem guard" + }, + { + "id": "5270", + "name": "Sophanem guard", + "examine": "A guard of Sophanem.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5271", + "name": "Sophanem guard" + }, + { + "id": "5273", + "name": "Sophanem guard" + }, + { + "id": "5274", + "name": "Sophanem guard", + "examine": "A guard of Sophanem.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5275", + "name": "Sophanem guard" + }, + { + "id": "5277", + "name": "Menaphite guard", + "examine": "A guard of Menaphos.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5278", + "name": "Coenus" + }, + { + "id": "5279", + "name": "Jex" + }, + { + "id": "5280", + "name": "Maisa" + }, + { + "id": "5282", + "name": "Osman" + }, + { + "id": "5285", + "name": "Osman", + "examine": "Flings annoying splinters at Thok.", + "aggressive": "true", + "attack_level": "80", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "22", + "magic_animation": "0", + "magic_level": "80", + "melee_animation": "426", + "range_animation": "426", + "range_level": "80", + "safespot": null, + "strength_level": "80", + "weakness": "10" + }, + { + "id": "5286", + "name": "Osman" + }, + { + "id": "5287", + "name": "Osman" + }, + { + "id": "5288", + "name": "Embalmer" + }, + { + "id": "5289", + "name": "Carpenter" + }, + { + "id": "5290", + "name": "Linen worker" + }, + { + "id": "5291", + "name": "Priest" + }, + { + "id": "5292", + "name": "Giant scarab" + }, + { + "id": "5293", + "name": "Zombie", + "examine": "Brains!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5294", + "name": "Zombie", + "examine": "Brains!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5295", + "name": "Zombie", + "examine": "Brains!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5296", + "name": "Zombie", + "examine": "Brains!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5297", + "name": "Zombie", + "examine": "Brains!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5298", + "name": "Zombie", + "examine": "Brains!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5299", + "name": "Zombie", + "examine": "Brains!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5300", + "name": "Zombie", + "examine": "Brains!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5301", + "name": "Zombie", + "examine": "Brains!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5302", + "name": "Zombie", + "examine": "Brains!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5303", + "name": "Zombie", + "examine": "Brains!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5304", + "name": "Zombie", + "examine": "Brains!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5305", + "name": "Zombie", + "examine": "Brains!", + "attack_level": "11", + "attack_speed": "5", + "bonuses": "6,15,15,15,15,15,15,6,6,15,15,15,15,15,15", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "10", + "lifepoints": "18", + "magic_animation": "5568", + "melee_animation": "5568", + "range_animation": "5568", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5306", + "name": "Zombie", + "examine": "Brains!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5307", + "name": "Zombie", + "examine": "Brains!", + "attack_level": "11", + "attack_speed": "5", + "bonuses": "6,15,15,15,15,15,15,6,6,15,15,15,15,15,15", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "10", + "lifepoints": "18", + "magic_animation": "5568", + "melee_animation": "5568", + "range_animation": "5568", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5308", + "name": "Zombie", + "examine": "Brains!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "24", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5309", + "name": "Zombie", + "examine": "Brains!", + "attack_level": "15", + "attack_speed": "5", + "bonuses": "10,15,16,16,15,16,16,10,10,16,15,15,15,15,15", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "16", + "lifepoints": "40", + "magic_animation": "5571", + "melee_animation": "5571", + "range_animation": "5571", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5310", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "24", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5311", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "24", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5312", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "24", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5313", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "24", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5314", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5315", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5316", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5317", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5318", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5319", + "name": "Zombie", + "examine": "Examine not added", + "attack_level": "15", + "attack_speed": "5", + "bonuses": "12,20,20,20,20,20,20,12,12,20,20,20,20,20,20", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "20", + "lifepoints": "40", + "magic_animation": "5571", + "melee_animation": "5571", + "range_animation": "5571", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5320", + "name": "Zombie", + "examine": "Examine not added", + "attack_level": "18", + "attack_speed": "5", + "bonuses": "12,20,20,20,20,20,20,12,12,20,20,20,20,20,20", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "20", + "lifepoints": "40", + "magic_animation": "5571", + "melee_animation": "5571", + "range_animation": "5571", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5321", + "name": "Zombie", + "examine": "Examine not added", + "attack_level": "18", + "attack_speed": "5", + "bonuses": "12,20,20,20,20,20,20,12,12,20,20,20,20,20,20", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "20", + "lifepoints": "40", + "magic_animation": "5571", + "melee_animation": "5571", + "range_animation": "5571", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5322", + "name": "Zombie", + "examine": "Dead man walking.", + "aggressive": "true", + "attack_level": "20", + "attack_speed": "5", + "bonuses": "21,19,20,42,44,34,41,38,40,21,0,0,0,0,0", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "23", + "lifepoints": "30", + "magic_animation": "5571", + "melee_animation": "5571", + "range_animation": "5571", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "19" + }, + { + "id": "5323", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5324", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5325", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5326", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5327", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5328", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5329", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5330", + "name": "Zombie", + "examine": "", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5331", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5332", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "15", + "attack_speed": "4", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "17", + "lifepoints": "29", + "magic_level": "1", + "melee_animation": "5485", + "range_level": "1", + "respawn_delay": "70", + "safespot": null, + "strength_level": "18", + "weakness": "8" + }, + { + "id": "5333", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "15", + "attack_speed": "4", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "17", + "lifepoints": "29", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "70", + "safespot": null, + "strength_level": "18", + "weakness": "8" + }, + { + "id": "5334", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "15", + "attack_speed": "4", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "17", + "lifepoints": "29", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "70", + "safespot": null, + "strength_level": "18", + "weakness": "8" + }, + { + "id": "5335", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "attack_level": "11", + "attack_speed": "6", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5489", + "defence_level": "1", + "lifepoints": "24", + "magic_animation": "5485", + "melee_animation": "5485", + "range_animation": "5485", + "range_level": "1", + "safespot": null, + "strength_level": "11" + }, + { + "id": "5336", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "attack_level": "11", + "attack_speed": "6", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5489", + "defence_level": "1", + "lifepoints": "24", + "magic_animation": "5485", + "melee_animation": "5485", + "range_animation": "5485", + "range_level": "1", + "safespot": null, + "strength_level": "11" + }, + { + "id": "5337", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "24", + "attack_speed": "4", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5489", + "defence_level": "24", + "lifepoints": "17", + "magic_animation": "5485", + "magic_level": "1", + "melee_animation": "5485", + "range_animation": "5485", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "24", + "weakness": "8" + }, + { + "id": "5338", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "attack_level": "12", + "attack_speed": "6", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5489", + "defence_level": "23", + "lifepoints": "17", + "magic_animation": "5485", + "melee_animation": "5485", + "range_animation": "5485", + "range_level": "1", + "safespot": null, + "strength_level": "12", + "weakness": "8" + }, + { + "id": "5339", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "attack_level": "12", + "attack_speed": "6", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5489", + "defence_level": "23", + "lifepoints": "17", + "magic_animation": "5485", + "melee_animation": "5485", + "range_animation": "5485", + "range_level": "1", + "safespot": null, + "strength_level": "12", + "weakness": "8" + }, + { + "id": "5340", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "attack_level": "12", + "attack_speed": "6", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5489", + "defence_level": "23", + "lifepoints": "17", + "magic_animation": "5485", + "melee_animation": "5485", + "range_animation": "5485", + "range_level": "1", + "safespot": null, + "strength_level": "12", + "weakness": "8" + }, + { + "id": "5341", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "42", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5503", + "defence_animation": "0", + "defence_level": "42", + "lifepoints": "60", + "magic_animation": "0", + "melee_animation": "5499", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "42", + "weakness": "8" + }, + { + "id": "5342", + "name": "Ghost", + "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "0", + "defence_level": "18", + "lifepoints": "25", + "magic_animation": "0", + "magic_level": "18", + "melee_animation": "5532", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1", + "weakness": "5" + }, + { + "id": "5343", + "name": "Ghost", + "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "5532", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "5344", + "name": "Ghost", + "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "0", + "defence_level": "18", + "lifepoints": "25", + "magic_animation": "0", + "magic_level": "18", + "melee_animation": "5532", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1", + "weakness": "5" + }, + { + "id": "5345", + "name": "Ghost", + "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "0", + "defence_level": "18", + "lifepoints": "25", + "magic_animation": "0", + "magic_level": "18", + "melee_animation": "5532", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1", + "weakness": "5" + }, + { + "id": "5346", + "name": "Ghost", + "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "5532", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "5347", + "name": "Ghost", + "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "0", + "defence_level": "18", + "lifepoints": "25", + "magic_animation": "0", + "magic_level": "18", + "melee_animation": "5532", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1", + "weakness": "5" + }, + { + "id": "5348", + "name": "Ghost", + "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "0", + "defence_level": "18", + "lifepoints": "25", + "magic_animation": "0", + "magic_level": "18", + "melee_animation": "5532", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1", + "weakness": "5" + }, + { + "id": "5349", + "name": "Ghost", + "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "5532", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "5350", + "name": "Ghost", + "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "5532", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "5351", + "name": "Ghost", + "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "5532", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "5352", + "name": "Ghost", + "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "5532", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "5353", + "name": "Undead one", + "examine": "A minion of Rashiliyia.", + "aggressive": "true", + "attack_level": "32", + "attack_speed": "5", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "32", + "weakness": "8" + }, + { + "id": "5354", + "name": "Undead one", + "examine": "A minion of Rashiliyia.", + "attack_level": "33", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "33", + "lifepoints": "47", + "magic_animation": "0", + "melee_animation": "5487", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "33", + "weakness": "8" + }, + { + "id": "5355", + "name": "Undead one", + "examine": "The animated dead; one of Rashiliyia's minions.", + "aggressive": "true", + "attack_level": "32", + "attack_speed": "5", + "death_animation": "5569", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "melee_animation": "5568", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "32", + "weakness": "8" + }, + { + "id": "5356", + "name": "Undead one", + "examine": "The animated dead; one of Rashiliyia's minions.", + "aggressive": "true", + "attack_level": "32", + "attack_speed": "5", + "death_animation": "5569", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "melee_animation": "5568", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "32", + "weakness": "8" + }, + { + "id": "5357", + "name": "Undead one", + "examine": "The animated dead; one of Rashiliyia's minions.", + "aggressive": "true", + "attack_level": "33", + "attack_speed": "5", + "death_animation": "5575", + "defence_animation": "0", + "defence_level": "33", + "lifepoints": "47", + "magic_animation": "0", + "melee_animation": "5571", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "33", + "weakness": "8" + }, + { + "id": "5358", + "name": "Undead one", + "examine": "The animated dead; one of Rashiliyia's minions.", + "aggressive": "true", + "attack_level": "33", + "attack_speed": "5", + "death_animation": "5575", + "defence_animation": "0", + "defence_level": "33", + "lifepoints": "47", + "magic_animation": "0", + "melee_animation": "5571", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "33", + "weakness": "8" + }, + { + "id": "5359", + "name": "Giant skeleton", + "examine": "A giant skeleton.", + "attack_level": "60", + "death_animation": "5503", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "85", + "magic_animation": "0", + "melee_animation": "5499", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "60", + "weakness": "8" + }, + { + "id": "5360", + "name": "Mummy ashes" + }, + { + "id": "5361", + "name": "Waterfiend", + "examine": "A fiendish embodiment of water.", + "aggressive": "true", + "attack_level": "0", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,100,100,10,100,100,0,0,0,0,0", + "combat_audio": "3774,3773,3772", + "combat_style": "1", + "death_animation": "300", + "defence_animation": "301", + "defence_level": "128", + "lifepoints": "128", + "magic_animation": "299", + "magic_level": "105", + "melee_animation": "299", + "poison_immune": "true", + "projectile": "16", + "range_animation": "299", + "range_level": "105", + "safespot": null, + "strength_level": "0", + "weakness": "4" + }, + { + "id": "5362", + "name": "Brutal green dragon", + "examine": "It appears to be intelligent and savage.", + "aggressive": "true", + "attack_level": "268", + "attack_speed": "4", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "168", + "lifepoints": "175", + "magic_animation": "91", + "magic_level": "168", + "melee_animation": "91", + "poison_immune": "true", + "range_animation": "91", + "range_level": "0", + "safespot": null, + "slayer_exp": "183", + "strength_level": "168", + "weakness": "3" + }, + { + "id": "5363", + "name": "Mithril dragon", + "examine": "Experimenting with mithril gone bad!", + "aggressive": "true", + "attack_level": "268", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,50,100,70,30,90,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "92", + "defence_animation": "89", + "defence_level": "268", + "lifepoints": "254", + "magic_animation": "91", + "magic_level": "168", + "melee_animation": "91", + "range_animation": "91", + "range_level": "168", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "273", + "strength_level": "268", + "weakness": "8" + }, + { + "id": "5364", + "name": "Confused barbarian", + "examine": "It appears to be intelligent and savage.", + "attack_level": "70", + "attack_speed": "6", + "defence_level": "50", + "lifepoints": "175", + "range_level": "167", + "safespot": null, + "strength_level": "167", + "weakness": "7" + }, + { + "id": "5365", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "34", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "34", + "weakness": "7" + }, + { + "id": "5366", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "1", + "lifepoints": "60", + "melee_animation": "5485", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5367", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "1", + "lifepoints": "85", + "melee_animation": "5485", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5368", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "1", + "lifepoints": "85", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5369", + "name": "Ghost", + "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "1", + "lifepoints": "36", + "melee_animation": "5532", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "5370", + "name": "Ghost", + "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "1", + "lifepoints": "36", + "melee_animation": "5532", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "5371", + "name": "Ghost", + "examine": "Eeek! A ghost!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "1", + "lifepoints": "36", + "melee_animation": "5532", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "5372", + "name": "Ghost", + "examine": "Why does it attack with twigs? Swords and axes much better.", + "aggressive": "true", + "attack_level": "80", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "40", + "lifepoints": "36", + "magic_animation": "0", + "magic_level": "80", + "melee_animation": "5532", + "range_animation": "426", + "range_level": "80", + "safespot": null, + "slayer_exp": "25", + "strength_level": "80", + "weakness": "10" + }, + { + "id": "5373", + "name": "Ghost", + "examine": "Are these twigs meant to hurt Thok?", + "aggressive": "true", + "attack_level": "80", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "40", + "lifepoints": "36", + "magic_animation": "0", + "magic_level": "80", + "melee_animation": "5532", + "range_animation": "426", + "range_level": "80", + "safespot": null, + "slayer_exp": "25", + "strength_level": "80", + "weakness": "10" + }, + { + "id": "5374", + "name": "Ghost", + "examine": "It thinks it scary. Thok show it scary.", + "aggressive": "true", + "attack_level": "80", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "70", + "lifepoints": "36", + "magic_animation": "0", + "magic_level": "80", + "melee_animation": "5532", + "range_animation": "0", + "range_level": "80", + "safespot": null, + "slayer_exp": "25", + "strength_level": "80", + "weakness": "10" + }, + { + "id": "5375", + "name": "Zombie", + "examine": "Dead man walking.", + "aggressive": "true", + "attack_level": "25", + "attack_speed": "5", + "bonuses": "15,25,25,25,25,25,25,15,15,25,25,25,25,25,25", + "combat_audio": "918,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "25", + "lifepoints": "23", + "magic_animation": "5568", + "melee_animation": "5568", + "range_animation": "5568", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5376", + "name": "Zombie", + "examine": "Dead man walking.", + "aggressive": "true", + "attack_level": "25", + "attack_speed": "5", + "bonuses": "15,25,25,25,25,25,25,15,15,25,25,25,25,25,25", + "combat_audio": "918,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "25", + "lifepoints": "23", + "magic_animation": "5568", + "melee_animation": "5568", + "range_animation": "5568", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5377", + "name": "Zombie", + "examine": "Dead man walking.", + "aggressive": "true", + "attack_level": "38", + "attack_speed": "5", + "bonuses": "15,25,28,28,25,28,28,15,15,28,25,25,25,25,25", + "combat_audio": "918,923,922", + "death_animation": "5580", + "defence_animation": "5579", + "defence_level": "28", + "lifepoints": "30", + "magic_animation": "5578", + "melee_animation": "5578", + "range_animation": "5578", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5378", + "name": "Zombie", + "examine": "Dead man walking.", + "aggressive": "true", + "attack_level": "38", + "attack_speed": "5", + "bonuses": "15,25,28,28,25,28,28,15,15,28,25,25,25,25,25", + "combat_audio": "918,923,922", + "death_animation": "5580", + "defence_animation": "5579", + "defence_level": "28", + "lifepoints": "30", + "magic_animation": "5578", + "melee_animation": "5578", + "range_animation": "5578", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5379", + "name": "Zombie", + "examine": "The walking dead.", + "aggressive": "true", + "attack_level": "47", + "attack_speed": "5", + "bonuses": "35,45,45,45,45,45,45,35,35,45,45,45,45,45,45", + "combat_audio": "918,923,922", + "death_animation": "5580", + "defence_animation": "5579", + "defence_level": "48", + "lifepoints": "40", + "magic_animation": "5578", + "melee_animation": "5578", + "range_animation": "5578", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5380", + "name": "Zombie", + "examine": "The walking dead.", + "aggressive": "true", + "attack_level": "47", + "attack_speed": "5", + "bonuses": "35,45,45,45,45,45,45,35,35,45,45,45,45,45,45", + "combat_audio": "918,923,922", + "death_animation": "5580", + "defence_animation": "5579", + "defence_level": "48", + "lifepoints": "40", + "magic_animation": "5578", + "melee_animation": "5578", + "range_animation": "5578", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5381", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "62", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "62", + "lifepoints": "88", + "magic_animation": "0", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "62", + "weakness": "8" + }, + { + "id": "5382", + "name": "Animated steel armour", + "examine": "Animated steel armour.", + "attack_level": "28", + "death_animation": "4167", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "40", + "magic_animation": "0", + "melee_animation": "386", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "28", + "weakness": "7" + }, + { + "id": "5383", + "name": "Odovacar" + }, + { + "id": "5384", + "name": "Giant skeleton", + "examine": "Big and bony, just how I like them.", + "aggressive": "true", + "attack_level": "95", + "attack_speed": "2", + "bonuses": "25,25,25,25,25,25,25,25,25,25,25,25,25,25,25", + "death_animation": "5503", + "defence_animation": "5489", + "defence_level": "85", + "lifepoints": "100", + "magic_animation": "5499", + "melee_animation": "5499", + "poison_immune": "true", + "projectile": "2718", + "range_animation": "5499", + "range_level": "1", + "safespot": null, + "start_gfx": "2713", + "strength_level": "95" + }, + { + "id": "5385", + "name": "Skeleton", + "examine": "A skeleton in a dress!", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "57", + "lifepoints": "81", + "magic_animation": "0", + "magic_level": "57", + "melee_animation": "5487", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "5386", + "name": "Skeleton", + "examine": "Achingly thin.", + "aggressive": "true", + "attack_level": "55", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "5487", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "55", + "weakness": "8" + }, + { + "id": "5387", + "name": "Skeleton", + "examine": "Look: another skeleton.", + "aggressive": "true", + "attack_level": "55", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "55", + "weakness": "8" + }, + { + "id": "5388", + "name": "Skeleton", + "examine": "That skeleton's grinning at me.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "71", + "magic_animation": "0", + "melee_animation": "5487", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "50", + "weakness": "8" + }, + { + "id": "5389", + "name": "Skeleton", + "examine": "He needs a tan.", + "aggressive": "true", + "attack_level": "51", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "51", + "lifepoints": "72", + "magic_animation": "0", + "melee_animation": "5487", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "51", + "weakness": "8" + }, + { + "id": "5390", + "name": "Skeleton", + "examine": "How do you know if a skeleton's male or female?", + "aggressive": "true", + "attack_level": "36", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "420", + "magic_animation": "0", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "36" + }, + { + "id": "5391", + "name": "Skeleton", + "examine": "He obviously hasn't realised he's dead.", + "aggressive": "true", + "attack_level": "55", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "55", + "weakness": "8" + }, + { + "id": "5392", + "name": "Skeleton", + "examine": "Put some meat on those bones!", + "aggressive": "true", + "attack_level": "52", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "52", + "lifepoints": "74", + "magic_animation": "0", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "52", + "weakness": "8" + }, + { + "id": "5393", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "56", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5394", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "40", + "melee_animation": "5578", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5395", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5396", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5397", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5398", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5399", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5400", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5401", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5402", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5403", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5404", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5569", + "defence_animation": "5567", + "defence_level": "1", + "lifepoints": "92", + "melee_animation": "5568", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5405", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5406", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5407", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5408", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5409", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5410", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "5411", + "name": "Skeleton", + "examine": "An angry skeleton.", + "aggressive": "true", + "attack_level": "55", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "5487", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "55", + "weakness": "8" + }, + { + "id": "5412", + "name": "Skeleton", + "examine": "Cross bones.", + "aggressive": "true", + "attack_level": "57", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "57", + "lifepoints": "81", + "magic_animation": "0", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "57", + "weakness": "8" + }, + { + "id": "5413", + "name": "Possessed pickaxe", + "examine": "How does it move of its own accord?", + "aggressive": "true", + "attack_level": "55", + "death_animation": "5592", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "5591", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "55", + "weakness": "6" + }, + { + "id": "5414", + "name": "Animated spade", + "examine": "How does it move of its own accord?", + "attack_level": "52", + "death_animation": "5596", + "defence_animation": "0", + "defence_level": "52", + "lifepoints": "74", + "magic_animation": "0", + "melee_animation": "5597", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "52", + "weakness": "6" + }, + { + "id": "5415", + "name": "Terror dog statue" + }, + { + "id": "5416", + "name": "Terror dog statue" + }, + { + "id": "5417", + "name": "Terror dog", + "examine": "A terrifying dog beast.", + "aggressive": "true", + "attack_level": "47", + "attack_speed": "5", + "death_animation": "5628", + "defence_animation": "0", + "defence_level": "47", + "lifepoints": "134", + "magic_animation": "0", + "melee_animation": "5625", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "47", + "weakness": "1" + }, + { + "id": "5418", + "name": "Terror dog", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "5627", + "defence_animation": "5626", + "defence_level": "1", + "lifepoints": "82", + "melee_animation": "5625", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5419", + "name": "Tarn" + }, + { + "id": "5420", + "name": "Tarn", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "5619", + "defence_animation": "5618", + "defence_level": "1", + "lifepoints": "65", + "melee_animation": "5617", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5421", + "name": "Mutant tarn", + "examine": "I preferred him when he was human.", + "aggressive": "true", + "attack_level": "57", + "attack_speed": "6", + "death_animation": "5619", + "defence_animation": "0", + "defence_level": "57", + "lifepoints": "325", + "magic_animation": "0", + "melee_animation": "5617", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "57", + "weakness": "6" + }, + { + "id": "5422", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "63", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "63", + "lifepoints": "90", + "magic_animation": "0", + "melee_animation": "5485", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "63", + "weakness": "8" + }, + { + "id": "5423", + "name": "Larry" + }, + { + "id": "5425", + "name": "Larry" + }, + { + "id": "5426", + "name": "Larry" + }, + { + "id": "5427", + "name": "Penguin" + }, + { + "id": "5429", + "name": "Penguin" + }, + { + "id": "5430", + "name": "Penguin" + }, + { + "id": "5431", + "name": "KGP Guard" + }, + { + "id": "5432", + "name": "Pescaling Pax" + }, + { + "id": "5433", + "name": "Ping" + }, + { + "id": "5434", + "name": "Ping" + }, + { + "id": "5435", + "name": "Pong" + }, + { + "id": "5436", + "name": "Pong" + }, + { + "id": "5437", + "name": "Ping" + }, + { + "id": "5438", + "name": "Pong" + }, + { + "id": "5439", + "name": "null", + "examine": "What restful music!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5442", + "name": "KGP Agent", + "examine": "What restful music!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5443", + "name": "Noodle" + }, + { + "id": "5445", + "name": "Penguin" + }, + { + "id": "5446", + "name": "Penguin suit" + }, + { + "id": "5447", + "name": "Agility Instructor", + "examine": "Instructs agility.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5448", + "name": "Army Commander", + "examine": "An army commander.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5449", + "name": "Penguin" + }, + { + "id": "5450", + "name": "Penguin" + }, + { + "id": "5451", + "name": "Penguin" + }, + { + "id": "5452", + "name": "Icelord", + "examine": "Sturdy cold being.", + "aggressive": "true", + "attack_level": "22", + "death_animation": "5726", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "5724", + "range_animation": "5725", + "range_level": "30", + "respawn_delay": "60", + "safespot": null, + "strength_level": "22", + "weakness": "0" + }, + { + "id": "5453", + "name": "Icelord", + "examine": "Sturdy cold being.", + "aggressive": "true", + "attack_level": "30", + "death_animation": "5726", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "5724", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "9" + }, + { + "id": "5454", + "name": "Icelord", + "examine": "Sturdy cold being.", + "aggressive": "true", + "attack_level": "30", + "death_animation": "5726", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "5724", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "9" + }, + { + "id": "5455", + "name": "Icelord", + "examine": "Sturdy cold being.", + "aggressive": "true", + "attack_level": "30", + "death_animation": "5726", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "5724", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "9" + }, + { + "id": "5456", + "name": "Crusher" + }, + { + "id": "5457", + "name": "Crusher" + }, + { + "id": "5458", + "name": "Crusher" + }, + { + "id": "5459", + "name": "Crusher" + }, + { + "id": "5460", + "name": "Tree" + }, + { + "id": "5461", + "name": "Jungle Tree" + }, + { + "id": "5462", + "name": "Tolna" + }, + { + "id": "5463", + "name": "Honour guard" + }, + { + "id": "5464", + "name": "Honour guard" + }, + { + "id": "5465", + "name": "Fridleif Shieldson" + }, + { + "id": "5466", + "name": "Thakkrad Sigmundson" + }, + { + "id": "5467", + "name": "Iceberg" + }, + { + "id": "5468", + "name": "Iceberg" + }, + { + "id": "5469", + "name": "Arctic Pine" + }, + { + "id": "5470", + "name": "Fishing spot" + }, + { + "id": "5471", + "name": "Fishing spot" + }, + { + "id": "5472", + "name": "Ice Troll King", + "examine": "An impressive-looking troll.", + "aggressive": "true", + "attack_level": "65", + "death_animation": "5209", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "185", + "magic_animation": "0", + "magic_level": "65", + "melee_animation": "5374", + "range_animation": "0", + "range_level": "65", + "respawn_delay": "60", + "safespot": null, + "strength_level": "65", + "weakness": "10" + }, + { + "id": "5473", + "name": "Ice troll runt", + "examine": "An ice troll youngling.", + "aggressive": "true", + "attack_level": "60", + "attack_speed": "4", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "70", + "lifepoints": "60", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "70", + "weakness": "9" + }, + { + "id": "5474", + "name": "Ice troll male", + "examine": "A male troll wielding a large club.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "40", + "lifepoints": "80", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "80", + "weakness": "9" + }, + { + "id": "5475", + "name": "Ice troll female", + "examine": "An ice troll with a bag of rocks.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", + "combat_style": "1", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "40", + "lifepoints": "80", + "magic_animation": "0", + "melee_animation": "1142", + "projectile": "276", + "range_animation": "1142", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "80", + "weakness": "0" + }, + { + "id": "5476", + "name": "Ice troll grunt", + "examine": "A large ice troll.", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "4", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "80", + "magic_animation": "0", + "melee_animation": "4332", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "100", + "weakness": "9" + }, + { + "id": "5477", + "name": "Bork Sigmundson" + }, + { + "id": "5478", + "name": "King Gjuki Sorvott IV", + "examine": "An ill-tempered king.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5479", + "name": "HRH Hrafn", + "examine": "A regal cat with an evil glint in its eye.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5480", + "name": "Thorkel Silkbeard", + "attack_level": "1", + "combat_audio": "498,500,499", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5481", + "name": "Mord Gunnars" + }, + { + "id": "5482", + "name": "Mord Gunnars" + }, + { + "id": "5483", + "name": "Hring Hring", + "examine": "Harder than the rocks he sells.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5484", + "name": "Flossi Dalksson", + "examine": "Jatizso's fishmonger.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5485", + "name": "Raum Urda-Stein", + "examine": "A guy that will sell you armour.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5486", + "name": "Skuli Myrka", + "examine": "Jatizso's armour merchant.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5487", + "name": "Keepa Kettilon", + "examine": "A rough-looking chef.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5488", + "name": "Magnus Gram", + "attack_level": "1", + "combat_audio": "498,500,499", + "defence_level": "1", + "facing_booth": "true", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5489", + "name": "Guard", + "examine": "A guard on insult duty.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5490", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5491", + "name": "Guard", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5492", + "name": "Guard", + "examine": "One of King Sorvott's militia.", + "aggressive": "true", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "5493", + "name": "Freygerd", + "examine": "One of Jatizso's many citizens.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5494", + "name": "Lensa", + "examine": "One of Jatizso's many citizens.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5495", + "name": "Vanligga Gastfrihet", + "examine": "A happy, friendly landlady.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5496", + "name": "Sassilik", + "examine": "One of Jatizso's many citizens.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5497", + "name": "Miner", + "examine": "A miner at work.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5498", + "name": "Miner" + }, + { + "id": "5499", + "name": "Eric", + "examine": "A bedraggled-looking tramp.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5500", + "name": "Gruva Patrull", + "examine": "Mina guards the mine entrance.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5501", + "name": "Brendt", + "examine": "A dwarven trader from Keldagrim.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5502", + "name": "Grundt" + }, + { + "id": "5503", + "name": "Mawnis Burowgar" + }, + { + "id": "5504", + "name": "Mawnis Burowgar" + }, + { + "id": "5505", + "name": "Fridleif Shieldson" + }, + { + "id": "5506", + "name": "Thakkrad Sigmundson" + }, + { + "id": "5507", + "name": "Maria Gunnars" + }, + { + "id": "5508", + "name": "Maria Gunnars" + }, + { + "id": "5509", + "name": "Jofridr Mordstatter" + }, + { + "id": "5510", + "name": "Morten Holdstrom" + }, + { + "id": "5511", + "name": "Gunnar Holdstrom" + }, + { + "id": "5512", + "name": "Anne Isaakson" + }, + { + "id": "5513", + "name": "Lisse Isaakson" + }, + { + "id": "5514", + "name": "Honour guard", + "examine": "The Burgher's protectors.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "5515", + "name": "Honour Guard", + "examine": "One of the Burgher's Protectors", + "death_animation": "836", + "defence_animation": "404", + "melee_animation": "395" + }, + { + "id": "5516", + "name": "Honour guard", + "examine": "The Burgher's protectors.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "5517", + "name": "Honour guard", + "examine": "One of your militia.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "9" + }, + { + "id": "5518", + "name": "Kjedelig Uppsen" + }, + { + "id": "5519", + "name": "Trogen Konungarde" + }, + { + "id": "5520", + "name": "Slug Hemligssen" + }, + { + "id": "5521", + "name": "Ice troll runt", + "examine": "An ice troll youngling.", + "aggressive": "true", + "attack_level": "60", + "attack_speed": "4", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "70", + "lifepoints": "60", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "70", + "weakness": "9" + }, + { + "id": "5522", + "name": "Ice troll male", + "examine": "A male troll wielding a large club.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "40", + "lifepoints": "80", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "80", + "weakness": "9" + }, + { + "id": "5523", + "name": "Ice troll female", + "examine": "An ice troll with a bag of rocks.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", + "combat_style": "1", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "40", + "lifepoints": "80", + "magic_animation": "0", + "melee_animation": "1142", + "projectile": "276", + "range_animation": "1142", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "80", + "weakness": "0" + }, + { + "id": "5524", + "name": "Ice troll grunt", + "examine": "A large ice troll.", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "4", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "80", + "magic_animation": "0", + "melee_animation": "4332", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "100", + "weakness": "9" + }, + { + "id": "5525", + "name": "Ice troll runt", + "examine": "An ice troll youngling.", + "aggressive": "true", + "attack_level": "60", + "attack_speed": "4", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "70", + "lifepoints": "60", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "70", + "weakness": "9" + }, + { + "id": "5526", + "name": "Ice troll male", + "examine": "A male troll wielding a large club.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "40", + "lifepoints": "80", + "magic_animation": "0", + "melee_animation": "284", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "80", + "weakness": "9" + }, + { + "id": "5527", + "name": "Ice troll female", + "examine": "An ice troll with a bag of rocks.", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "4", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", + "combat_style": "1", + "death_animation": "287", + "defence_animation": "285", + "defence_level": "40", + "lifepoints": "80", + "magic_animation": "0", + "melee_animation": "1142", + "projectile": "276", + "range_animation": "1142", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "80", + "weakness": "0" + }, + { + "id": "5528", + "name": "Ice troll grunt" + }, + { + "id": "5529", + "name": "Yak", + "examine": "A hairy, smelly, grazing animal.", + "attack_level": "20", + "attack_speed": "4", + "combat_audio": "3378,3380,3379", + "death_animation": "5784", + "defence_animation": "5783", + "defence_level": "1", + "lifepoints": "50", + "magic_animation": "5782", + "melee_animation": "5782", + "range_animation": "5782", + "range_level": "1", + "safespot": null, + "strength_level": "10", + "weakness": "7" + }, + { + "id": "5530", + "name": "Sorceress" + }, + { + "id": "5531", + "name": "Sorceress", + "examine": "Antisocial.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5532", + "name": "Apprentice", + "examine": "Come", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5533", + "name": "Autumn Elemental", + "examine": "An autumn elemental.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5539", + "name": "Spring Elemental", + "examine": "A spring elemental.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5547", + "name": "Summer Elemental", + "examine": "A summer elemental.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5553", + "name": "Winter Elemental", + "examine": "A winter elemental.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5560", + "name": "Osman" + }, + { + "id": "5561", + "name": "Osman", + "examine": "It dare attack Pretty Lass? Thok crush its puny skull!", + "aggressive": "true", + "attack_level": "95", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "157", + "magic_animation": "0", + "magic_level": "95", + "range_animation": "0", + "range_level": "95", + "safespot": null, + "strength_level": "95", + "weakness": "10" + }, + { + "id": "5562", + "name": "Del-Monty" + }, + { + "id": "5564", + "name": "Bouncer" + }, + { + "id": "5565", + "name": "Bouncer" + }, + { + "id": "5566", + "name": "General Khazard" + }, + { + "id": "5567", + "name": "Scout" + }, + { + "id": "5568", + "name": "Scout" + }, + { + "id": "5569", + "name": "Scout" + }, + { + "id": "5570", + "name": "Scout" + }, + { + "id": "5571", + "name": "Sin Seer", + "examine": "She's honest about the things you aren't.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5572", + "name": "Ghost", + "examine": "A Shadow Realm guardian.", + "attack_level": "1", + "combat_audio": "436,439,438", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "5573", + "name": "Effigy" + }, + { + "id": "5579", + "name": "Effigy" + }, + { + "id": "5580", + "name": "Bonafido" + }, + { + "id": "5581", + "name": "Homunculus", + "examine": "Is it male or female?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5582", + "name": "Homunculus" + }, + { + "id": "5583", + "name": "Homunculus" + }, + { + "id": "5584", + "name": "Cage", + "examine": "Strong", + "aggressive": "true", + "attack_level": "95", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "85", + "magic_animation": "0", + "magic_level": "95", + "range_animation": "0", + "range_level": "95", + "safespot": null, + "strength_level": "95", + "weakness": "10" + }, + { + "id": "5585", + "name": "'Transmute' The Alchemist" + }, + { + "id": "5586", + "name": "'Transmute' The Alchemist" + }, + { + "id": "5587", + "name": "'Currency' The Alchemist" + }, + { + "id": "5588", + "name": "'Currency' The Alchemist" + }, + { + "id": "5589", + "name": "'Black-eye", + "examine": "Famous for his fights.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5590", + "name": "'No fingers", + "examine": "Count them pinkies!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5591", + "name": "'Gummy", + "examine": "He wishes he had teeth.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5592", + "name": "'The Guns'" + }, + { + "id": "5593", + "name": "Frogeel", + "examine": "Is it a frog", + "aggressive": "true", + "attack_level": "36", + "attack_speed": "5", + "death_animation": "5841", + "defence_animation": "0", + "defence_level": "49", + "lifepoints": "70", + "magic_animation": "0", + "melee_animation": "5842", + "range_animation": "0", + "range_level": "49", + "respawn_delay": "60", + "safespot": null, + "strength_level": "36", + "weakness": "2" + }, + { + "id": "5594", + "name": "Spidine", + "attack_level": "1", + "death_animation": "146", + "defence_animation": "144", + "defence_level": "1", + "lifepoints": "35", + "melee_animation": "143", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5595", + "name": "Swordchick", + "examine": "Definitely not a chicken or a swordfish.", + "attack_level": "45", + "attack_speed": "5", + "death_animation": "5389", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "64", + "magic_animation": "0", + "melee_animation": "5387", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "45", + "weakness": "7" + }, + { + "id": "5596", + "name": "Jubster", + "aggressive": "true", + "attack_level": "1", + "death_animation": "6801", + "defence_animation": "6802", + "defence_level": "1", + "lifepoints": "60", + "melee_animation": "6800", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5597", + "name": "Newtroost", + "examine": "Since when did newts have beaks?", + "attack_level": "40", + "death_animation": "2301", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "57", + "magic_animation": "0", + "melee_animation": "2299", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "40", + "weakness": "7" + }, + { + "id": "5598", + "name": "Unicow" + }, + { + "id": "5603", + "name": "Unicow", + "examine": "Half unicorn", + "aggressive": "true", + "attack_level": "30", + "attack_speed": "5", + "death_animation": "5851", + "defence_animation": "0", + "defence_level": "41", + "lifepoints": "58", + "magic_animation": "0", + "magic_level": "41", + "melee_animation": "5849", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "4" + }, + { + "id": "5604", + "name": "Elfinlocks" + }, + { + "id": "5605", + "name": "Clockwork cat" + }, + { + "id": "5606", + "name": "Clockwork cat" + }, + { + "id": "5608", + "name": "Monk", + "examine": "Holier than thou.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5609", + "name": "Monk", + "examine": "Holier than thou.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5610", + "name": "Monk", + "examine": "Holier than thou.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5611", + "name": "Monk", + "examine": "Holier than thou.", + "attack_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5612", + "name": "Rufus" + }, + { + "id": "5613", + "name": "Mi-Gor" + }, + { + "id": "5614", + "name": "Puffin", + "examine": "I'd prefer it if it were a muffin...", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5615", + "name": "Puffin" + }, + { + "id": "5616", + "name": "Brother Tranquility" + }, + { + "id": "5617", + "name": "Brother Tranquility" + }, + { + "id": "5618", + "name": "Brother Tranquility" + }, + { + "id": "5619", + "name": "Monk", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5620", + "name": "Monk", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5621", + "name": "Monk", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5622", + "name": "Monk", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5623", + "name": "Zombie monk" + }, + { + "id": "5624", + "name": "Zombie monk" + }, + { + "id": "5625", + "name": "Zombie monk" + }, + { + "id": "5626", + "name": "Zombie monk" + }, + { + "id": "5627", + "name": "Sorebones", + "examine": "Bedside manner is a little lacking", + "attack_level": "35", + "death_animation": "5658", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5643", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5628", + "name": "Sorebones", + "examine": "I hope his hands don't shake.", + "attack_level": "35", + "death_animation": "5658", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5643", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5629", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5647", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5630", + "name": "Zombie pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "5648", + "defence_level": "1", + "lifepoints": "52", + "melee_animation": "5647", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5631", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5647", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5632", + "name": "Zombie pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "5648", + "defence_level": "1", + "lifepoints": "52", + "melee_animation": "5647", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5633", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5647", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5634", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5647", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5635", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5647", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5636", + "name": "Zombie pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "5648", + "defence_level": "1", + "lifepoints": "52", + "melee_animation": "5647", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5637", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5654", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5651", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5638", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5654", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5651", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5639", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5654", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5651", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5640", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5654", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5651", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5641", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5654", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5651", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5642", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5654", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5880", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5643", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5654", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5880", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5644", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5654", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5880", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5645", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5654", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5880", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5646", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5654", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5880", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5647", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5886", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5884", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5648", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5886", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5884", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5649", + "name": "Zombie pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "5648", + "defence_level": "1", + "lifepoints": "52", + "melee_animation": "5647", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5650", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5886", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5884", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5651", + "name": "Zombie pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "5648", + "defence_level": "1", + "lifepoints": "52", + "melee_animation": "5647", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5652", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5886", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5884", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5653", + "name": "Zombie pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "5648", + "defence_level": "1", + "lifepoints": "52", + "melee_animation": "5647", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5654", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5886", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5884", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5655", + "name": "Zombie pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "5648", + "defence_level": "1", + "lifepoints": "52", + "melee_animation": "5647", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5656", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5891", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5889", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5657", + "name": "Zombie pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "5648", + "defence_level": "1", + "lifepoints": "52", + "melee_animation": "5647", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5658", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5891", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5889", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5659", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5891", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5889", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5660", + "name": "Zombie pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "5648", + "defence_level": "1", + "lifepoints": "52", + "melee_animation": "5647", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5661", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5891", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5889", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5662", + "name": "Zombie pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "5648", + "defence_level": "1", + "lifepoints": "52", + "melee_animation": "5647", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5663", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5891", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5889", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5664", + "name": "Zombie pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "5649", + "defence_animation": "5648", + "defence_level": "1", + "lifepoints": "52", + "melee_animation": "5647", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5665", + "name": "Zombie pirate", + "examine": "Aaaarg", + "aggressive": "true", + "attack_level": "35", + "combat_audio": "703,705,704", + "death_animation": "5891", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "5889", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "6" + }, + { + "id": "5666", + "name": "Barrelchest", + "examine": "It's trying to mash you flat! Less examine", + "aggressive": "true", + "attack_level": "52", + "death_animation": "5898", + "defence_animation": "0", + "defence_level": "52", + "lifepoints": "285", + "magic_animation": "0", + "magic_level": "52", + "melee_animation": "5895", + "range_animation": "0", + "range_level": "52", + "respawn_delay": "60", + "safespot": null, + "strength_level": "52", + "weakness": "10" + }, + { + "id": "5667", + "name": "Undead Lumberjack" + }, + { + "id": "5679", + "name": "Undead Lumberjack" + }, + { + "id": "5680", + "name": "Undead Lumberjack", + "examine": "He is one", + "attack_level": "73", + "death_animation": "5972", + "defence_animation": "0", + "defence_level": "10", + "lifepoints": "100", + "magic_animation": "0", + "melee_animation": "5970", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "73" + }, + { + "id": "5681", + "name": "Undead Lumberjack" + }, + { + "id": "5682", + "name": "Undead Lumberjack" + }, + { + "id": "5683", + "name": "Undead Lumberjack" + }, + { + "id": "5684", + "name": "Undead Lumberjack" + }, + { + "id": "5685", + "name": "Undead Lumberjack" + }, + { + "id": "5686", + "name": "Undead Lumberjack" + }, + { + "id": "5687", + "name": "Undead Lumberjack" + }, + { + "id": "5688", + "name": "Undead Lumberjack" + }, + { + "id": "5689", + "name": "Undead Lumberjack" + }, + { + "id": "5690", + "name": "Undead Lumberjack" + }, + { + "id": "5691", + "name": "Undead Lumberjack" + }, + { + "id": "5692", + "name": "Undead Lumberjack" + }, + { + "id": "5693", + "name": "Undead Lumberjack" + }, + { + "id": "5694", + "name": "Undead Lumberjack" + }, + { + "id": "5695", + "name": "Undead Lumberjack" + }, + { + "id": "5696", + "name": "Undead Lumberjack" + }, + { + "id": "5697", + "name": "Undead Lumberjack" + }, + { + "id": "5698", + "name": "Undead Lumberjack" + }, + { + "id": "5699", + "name": "Undead Lumberjack" + }, + { + "id": "5700", + "name": "Undead Lumberjack" + }, + { + "id": "5701", + "name": "Undead Lumberjack" + }, + { + "id": "5702", + "name": "Undead Lumberjack" + }, + { + "id": "5703", + "name": "Undead Lumberjack" + }, + { + "id": "5704", + "name": "Undead Lumberjack" + }, + { + "id": "5705", + "name": "Undead Lumberjack" + }, + { + "id": "5706", + "name": "Undead Lumberjack" + }, + { + "id": "5707", + "name": "Undead Lumberjack" + }, + { + "id": "5708", + "name": "Undead Lumberjack" + }, + { + "id": "5709", + "name": "Undead Lumberjack" + }, + { + "id": "5710", + "name": "Undead Lumberjack" + }, + { + "id": "5711", + "name": "Undead Lumberjack" + }, + { + "id": "5712", + "name": "Undead Lumberjack" + }, + { + "id": "5713", + "name": "Undead Lumberjack" + }, + { + "id": "5714", + "name": "Undead Lumberjack" + }, + { + "id": "5715", + "name": "Undead Lumberjack" + }, + { + "id": "5716", + "name": "Undead Lumberjack" + }, + { + "id": "5717", + "name": "Undead Lumberjack" + }, + { + "id": "5718", + "name": "Undead Lumberjack" + }, + { + "id": "5719", + "name": "Undead Lumberjack" + }, + { + "id": "5720", + "name": "Undead Lumberjack" + }, + { + "id": "5721", + "name": "Undead Lumberjack" + }, + { + "id": "5722", + "name": "Undead Lumberjack" + }, + { + "id": "5723", + "name": "Undead Lumberjack" + }, + { + "id": "5724", + "name": "Undead Lumberjack" + }, + { + "id": "5725", + "name": "Undead Lumberjack" + }, + { + "id": "5726", + "name": "Undead Lumberjack" + }, + { + "id": "5727", + "name": "Undead Lumberjack" + }, + { + "id": "5728", + "name": "Undead Lumberjack" + }, + { + "id": "5729", + "name": "Undead Lumberjack" + }, + { + "id": "5730", + "name": "Undead Lumberjack" + }, + { + "id": "5731", + "name": "Undead Lumberjack" + }, + { + "id": "5732", + "name": "Undead Lumberjack" + }, + { + "id": "5733", + "name": "Undead Lumberjack" + }, + { + "id": "5734", + "name": "Undead Lumberjack" + }, + { + "id": "5735", + "name": "Undead Lumberjack" + }, + { + "id": "5736", + "name": "Undead Lumberjack" + }, + { + "id": "5737", + "name": "Undead Lumberjack" + }, + { + "id": "5738", + "name": "Undead Lumberjack" + }, + { + "id": "5739", + "name": "Undead Lumberjack" + }, + { + "id": "5740", + "name": "Undead Lumberjack" + }, + { + "id": "5741", + "name": "Undead Lumberjack" + }, + { + "id": "5742", + "name": "Undead Lumberjack" + }, + { + "id": "5743", + "name": "Undead Lumberjack" + }, + { + "id": "5744", + "name": "Undead Lumberjack" + }, + { + "id": "5745", + "name": "Undead Lumberjack" + }, + { + "id": "5746", + "name": "Undead Lumberjack" + }, + { + "id": "5747", + "name": "Undead Lumberjack" + }, + { + "id": "5748", + "name": "Fishing spot" + }, + { + "id": "5749", + "name": "Fishing spot" + }, + { + "id": "5750", + "name": "Cave bug", + "examine": "A big", + "attack_level": "82", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,72,59,35,25,95,0,0,0,0,0", + "death_animation": "6081", + "defence_animation": "0", + "defence_level": "84", + "lifepoints": "93", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "6079", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "93", + "strength_level": "80", + "weakness": "2" + }, + { + "id": "5751", + "name": "Molanisk", + "examine": "A strange mole-like being.", + "aggressive": "true", + "attack_level": "40", + "attack_speed": "4", + "clue_level": "1", + "combat_audio": "3492,3494,3493", + "death_animation": "6014", + "defence_animation": "6013", + "defence_level": "50", + "lifepoints": "52", + "magic_level": "1", + "melee_animation": "6012", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "52", + "strength_level": "40" + }, + { + "id": "5752", + "name": "Cave goblin", + "examine": "One of the many citizens of Dorgesh-Kaan.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5753", + "name": "Cave goblin", + "examine": "One of the many citizens of Dorgesh-Kaan.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5754", + "name": "Cave goblin", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5755", + "name": "Cave goblin", + "examine": "One of the many citizens of Dorgesh-Kaan.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5756", + "name": "Cave goblin", + "examine": "One of the many citizens of Dorgesh-Kaan.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5757", + "name": "Cave goblin", + "examine": "One of the many citizens of Dorgesh-Kaan.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5758", + "name": "Cave goblin", + "examine": "One of the many citizens of Dorgesh-Kaan.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5759", + "name": "Cave goblin", + "examine": "One of the many citizens of Dorgesh-Kaan.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5760", + "name": "Cave goblin", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5761", + "name": "Cave goblin", + "examine": "One of the many citizens of Dorgesh-Kaan.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5762", + "name": "Cave goblin", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5763", + "name": "Cave goblin", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5764", + "name": "Cave goblin", + "examine": "One of the many citizens of Dorgesh-Kaan.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5765", + "name": "Cave goblin", + "examine": "One of the many citizens of Dorgesh-Kaan.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5766", + "name": "Cave goblin", + "examine": "One of the many citizens of Dorgesh-Kaan.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5767", + "name": "Cave goblin", + "examine": "One of the many citizens of Dorgesh-Kaan.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5768", + "name": "Cave goblin", + "examine": "One of the many citizens of Dorgesh-Kaan.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5769", + "name": "Cave goblin", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5770", + "name": "Ur-zek" + }, + { + "id": "5771", + "name": "Ur-vass" + }, + { + "id": "5772", + "name": "Ur-taal" + }, + { + "id": "5773", + "name": "Ur-meg" + }, + { + "id": "5774", + "name": "Ur-lun" + }, + { + "id": "5775", + "name": "Ur-pel" + }, + { + "id": "5776", + "name": "Banker", + "examine": "Looks after cave goblin money.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5777", + "name": "Banker", + "examine": "Looks after cave goblin money.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5778", + "name": "Bartak" + }, + { + "id": "5779", + "name": "Turgall" + }, + { + "id": "5780", + "name": "Reldak" + }, + { + "id": "5781", + "name": "Miltog" + }, + { + "id": "5782", + "name": "Mernik" + }, + { + "id": "5783", + "name": "Cave goblin", + "examine": "One of the many citizens of Dorgesh-Kaan.", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5784", + "name": "Crate goblin", + "examine": "Taking a terribly important box from one place to another.", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5785", + "name": "Cave goblin", + "examine": "One of the many citizens of Dorgesh-Kaan.", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5786", + "name": "Goblin scribe", + "examine": "Good at shorthand.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5787", + "name": "Gourmet" + }, + { + "id": "5789", + "name": "Gourmet" + }, + { + "id": "5790", + "name": "Gourmet" + }, + { + "id": "5791", + "name": "Gourmet" + }, + { + "id": "5792", + "name": "Turgok" + }, + { + "id": "5793", + "name": "Markog" + }, + { + "id": "5794", + "name": "Durgok" + }, + { + "id": "5795", + "name": "Tindar" + }, + { + "id": "5796", + "name": "Gundik" + }, + { + "id": "5797", + "name": "Zenkog" + }, + { + "id": "5798", + "name": "Lurgon" + }, + { + "id": "5799", + "name": "Ur-tag" + }, + { + "id": "5800", + "name": "Guard", + "examine": "He keeps order in the city.", + "attack_level": "42", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "6003", + "defence_animation": "0", + "defence_level": "42", + "lifepoints": "60", + "magic_animation": "0", + "melee_animation": "6007", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "42", + "weakness": "6" + }, + { + "id": "5801", + "name": "Guard", + "examine": "He keeps order in the city.", + "attack_level": "42", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "6003", + "defence_animation": "0", + "defence_level": "42", + "lifepoints": "60", + "magic_animation": "0", + "melee_animation": "6007", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "42", + "weakness": "6" + }, + { + "id": "5802", + "name": "Young 'un" + }, + { + "id": "5803", + "name": "Young 'un", + "examine": "A goblin baby.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5804", + "name": "Tyke" + }, + { + "id": "5805", + "name": "Nipper", + "examine": "A goblin baby.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5806", + "name": "Nipper" + }, + { + "id": "5807", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5808", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5809", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5810", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5811", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5812", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5813", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5814", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5815", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5816", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5817", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5818", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5819", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5820", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5821", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5822", + "name": "Cave goblin child", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5823", + "name": "Spit goblin", + "examine": "Don't spit", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5824", + "name": "Goblin fish", + "examine": "A bug-eyed little goblin fish. How cute.", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5825", + "name": "Movario" + }, + { + "id": "5826", + "name": "Darve" + }, + { + "id": "5827", + "name": "Moths", + "examine": "Annoying little flappy things.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5828", + "name": "Barlak" + }, + { + "id": "5829", + "name": "Rabbit", + "attack_level": "1", + "death_animation": "6092", + "defence_animation": "6091", + "defence_level": "1", + "lifepoints": "5", + "melee_animation": "6090", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5830", + "name": "Rat Burgiss" + }, + { + "id": "5833", + "name": "Rat Burgiss", + "attack_level": "1", + "combat_audio": "703,705,704", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5834", + "name": "Surok Magis", + "examine": "A powerful wizard." + }, + { + "id": "5835", + "name": "Surok Magis" + }, + { + "id": "5836", + "name": "Zaff" + }, + { + "id": "5837", + "name": "Anna Jones" + }, + { + "id": "5838", + "name": "King Roald" + }, + { + "id": "5839", + "name": "Mishkal'un Dorn" + }, + { + "id": "5840", + "name": "Dakh'thoulan Aegis" + }, + { + "id": "5841", + "name": "Sil'as Dahcsnu" + }, + { + "id": "5842", + "name": "Outlaw", + "examine": "A mean looking outlaw. Don't get too close!", + "attack_level": "23", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "23", + "lifepoints": "32", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "23", + "weakness": "9" + }, + { + "id": "5843", + "name": "Outlaw", + "examine": "A mean looking outlaw. Don't get too close!", + "attack_level": "23", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "23", + "lifepoints": "32", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "23", + "weakness": "9" + }, + { + "id": "5844", + "name": "Outlaw", + "examine": "A mean looking outlaw. Don't get too close!", + "attack_level": "23", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "23", + "lifepoints": "32", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "23", + "weakness": "9" + }, + { + "id": "5845", + "name": "Outlaw", + "examine": "A mean looking outlaw. Don't get too close!", + "attack_level": "23", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "23", + "lifepoints": "32", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "23", + "weakness": "9" + }, + { + "id": "5846", + "name": "Outlaw", + "examine": "A mean looking outlaw. Don't get too close!", + "attack_level": "23", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "23", + "lifepoints": "32", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "23", + "weakness": "9" + }, + { + "id": "5847", + "name": "Outlaw", + "examine": "A mean looking outlaw. Don't get too close!", + "attack_level": "23", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "23", + "lifepoints": "32", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "23", + "weakness": "9" + }, + { + "id": "5848", + "name": "Outlaw", + "examine": "A mean looking outlaw. Don't get too close!", + "attack_level": "23", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "23", + "lifepoints": "32", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "23", + "weakness": "9" + }, + { + "id": "5849", + "name": "Outlaw", + "examine": "A mean looking outlaw. Don't get too close!", + "attack_level": "23", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "23", + "lifepoints": "32", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "23", + "weakness": "9" + }, + { + "id": "5850", + "name": "Outlaw", + "examine": "A mean looking outlaw. Don't get too close!", + "attack_level": "23", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "23", + "lifepoints": "32", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "23", + "weakness": "9" + }, + { + "id": "5851", + "name": "Outlaw", + "examine": "A mean looking outlaw. Don't get too close!", + "attack_level": "23", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "23", + "lifepoints": "32", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "23", + "weakness": "9" + }, + { + "id": "5852", + "name": "Monkey", + "examine": "Weird eyeball thing. Reminds Thok of breakfast.", + "aggressive": "true", + "attack_level": "60", + "combat_audio": "629,631,630", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "85", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "0", + "range_animation": "0", + "range_level": "60", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "5853", + "name": "Bench" + }, + { + "id": "5854", + "name": "Bench", + "examine": "For sitting on.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5855", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5856", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5857", + "name": "Zanik" + }, + { + "id": "5858", + "name": "Ur-tag" + }, + { + "id": "5859", + "name": "H.A.M. Archer", + "examine": "He looks pretty skilled with that bow.", + "aggressive": "true", + "attack_level": "15", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "57", + "magic_animation": "0", + "melee_animation": "426", + "range_animation": "0", + "range_level": "20", + "safespot": null, + "strength_level": "15", + "weakness": "0" + }, + { + "id": "5860", + "name": "H.A.M. Mage", + "examine": "He bristles with arcane power.", + "aggressive": "true", + "attack_level": "15", + "clue_level": "0", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "57", + "magic_animation": "0", + "magic_level": "20", + "melee_animation": "429", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "15", + "weakness": "3" + }, + { + "id": "5861", + "name": "Zanik", + "examine": "No match for Thok. Silly demon.", + "aggressive": "true", + "attack_level": "85", + "defence_animation": "0", + "defence_level": "85", + "lifepoints": "71", + "magic_animation": "0", + "magic_level": "85", + "range_level": "85", + "safespot": null, + "strength_level": "85", + "weakness": "10" + }, + { + "id": "5862", + "name": "Sigmund and Zanik" + }, + { + "id": "5863", + "name": "Ambassador Alvijar" + }, + { + "id": "5864", + "name": "Builder", + "examine": "A worker on the train link.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5865", + "name": "Builder", + "examine": "A worker on the train link.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5866", + "name": "Builder", + "examine": "A worker on the train link.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5867", + "name": "Builder", + "examine": "A worker on the train link.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5868", + "name": "Tegdak" + }, + { + "id": "5869", + "name": "Zanik" + }, + { + "id": "5871", + "name": "Sergeant Mossfists" + }, + { + "id": "5872", + "name": "Sergeant Slimetoes" + }, + { + "id": "5873", + "name": "Cave goblin", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5874", + "name": "Cave goblin", + "examine": "A goblin with big", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5875", + "name": "Cave goblin", + "examine": "A goblin with big", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5876", + "name": "Cave goblin", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5877", + "name": "Cave goblin", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5878", + "name": "Cave goblin", + "attack_level": "1", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5879", + "name": "Ticket goblin", + "examine": "He sells tickets to Keldagrim.", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5880", + "name": "Dwarf", + "examine": "A dwarf from Keldagrim.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "1" + }, + { + "id": "5881", + "name": "Dwarf", + "examine": "A dwarf from Keldagrim.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "1" + }, + { + "id": "5882", + "name": "Dwarf", + "examine": "A dwarf from Keldagrim.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "1" + }, + { + "id": "5883", + "name": "Dwarf", + "examine": "A dwarf from Keldagrim.", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "1" + }, + { + "id": "5884", + "name": "Dwarf", + "examine": "A dwarf from Keldagrim.", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "1" + }, + { + "id": "5885", + "name": "Dwarf", + "examine": "A dwarf from Keldagrim.", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "slayer_exp": "16", + "strength_level": "1" + }, + { + "id": "5886", + "name": "Ticket dwarf", + "examine": "He sells tickets to Dorgesh-Kaan.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5887", + "name": "Cyrisus" + }, + { + "id": "5894", + "name": "Cyrisus" + }, + { + "id": "5895", + "name": "Cyrisus" + }, + { + "id": "5896", + "name": "Cyrisus" + }, + { + "id": "5897", + "name": "Cyrisus" + }, + { + "id": "5898", + "name": "'Bird's-Eye' Jack" + }, + { + "id": "5899", + "name": "The Inadequacy" + }, + { + "id": "5902", + "name": "The Inadequacy", + "examine": "Are you good enough to fight?", + "aggressive": "true", + "attack_level": "70", + "death_animation": "6322", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "70", + "melee_animation": "6318", + "range_animation": "0", + "range_level": "70", + "respawn_delay": "60", + "safespot": null, + "strength_level": "70", + "weakness": "10" + }, + { + "id": "5903", + "name": "The Everlasting", + "examine": "Can you endure long enough?", + "aggressive": "true", + "attack_level": "67", + "death_animation": "6347", + "defence_animation": "0", + "defence_level": "67", + "lifepoints": "191", + "magic_animation": "0", + "magic_level": "67", + "melee_animation": "6345", + "range_animation": "0", + "range_level": "67", + "respawn_delay": "60", + "safespot": null, + "strength_level": "67", + "weakness": "10" + }, + { + "id": "5904", + "name": "The Untouchable", + "examine": "Can you bring yourself to hurt another?", + "aggressive": "true", + "attack_level": "65", + "death_animation": "6331", + "defence_animation": "0", + "defence_level": "75", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "65", + "melee_animation": "6329", + "range_animation": "0", + "range_level": "65", + "respawn_delay": "60", + "safespot": null, + "strength_level": "65", + "weakness": "10" + }, + { + "id": "5905", + "name": "The Illusive", + "examine": "What if you don't know how to win?", + "aggressive": "true", + "attack_level": "63", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "63", + "lifepoints": "90", + "magic_animation": "0", + "magic_level": "63", + "melee_animation": "6342", + "range_animation": "0", + "range_level": "63", + "respawn_delay": "60", + "safespot": null, + "strength_level": "63", + "weakness": "10" + }, + { + "id": "5906", + "name": "A Doubt", + "examine": "You can't escape your inadequacy!", + "aggressive": "true", + "attack_level": "55", + "death_animation": "6315", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "6310", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "55", + "weakness": "8" + }, + { + "id": "5907", + "name": "The Illusive" + }, + { + "id": "5908", + "name": "Dying tree", + "examine": "Dead stone defending a dead throne room.", + "aggressive": "true", + "attack_level": "50", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "142", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "50", + "weakness": "7" + }, + { + "id": "5909", + "name": "Barbarian", + "examine": "Don't let her arm-wrestle you for money.", + "attack_level": "20", + "clue_level": "0", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "20", + "lifepoints": "28", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "7" + }, + { + "id": "5910", + "name": "Cook", + "examine": "A greasy, grimy gourmet.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5911", + "name": "Cook", + "examine": "He's suspiciously talented with a meat-cleaver.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5912", + "name": "Banker" + }, + { + "id": "5913", + "name": "Banker" + }, + { + "id": "5914", + "name": "Iffie", + "examine": "This grizzled soldier is here to distribute Rated Clan Wars badges.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5915", + "name": "Elsie" + }, + { + "id": "5916", + "name": "Cleaner", + "examine": "Does what too many people aren't interested in doing.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5917", + "name": "Stray dog", + "examine": "A mangy mutt.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5918", + "name": "Stray dog" + }, + { + "id": "5919", + "name": "Guard", + "examine": "He tries to keep order around here. His bizarre uniform isn't helping.", + "attack_level": "18", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "2548,1979,512", + "death_animation": "6490", + "defence_animation": "0", + "defence_level": "18", + "lifepoints": "25", + "magic_animation": "0", + "melee_animation": "6489", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "18", + "weakness": "6" + }, + { + "id": "5920", + "name": "Guard", + "examine": "He tries to keep order around here. His bizarre uniform isn't helping.", + "attack_level": "18", + "attack_speed": "5", + "clue_level": "1", + "combat_audio": "2548,1979,512", + "death_animation": "6490", + "defence_animation": "0", + "defence_level": "18", + "lifepoints": "25", + "magic_animation": "0", + "melee_animation": "6489", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "18", + "weakness": "6" + }, + { + "id": "5921", + "name": "Trainee Guard", + "examine": "He's studying to be a guard.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5922", + "name": "Captain", + "examine": "Trains the guards of the future.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5923", + "name": "Man", + "examine": "One of Gielinor's many citizens.", + "attack_level": "3", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "3", + "lifepoints": "4", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "3", + "weakness": "9" + }, + { + "id": "5924", + "name": "Woman", + "examine": "One of Gielinor's many citizens.", + "attack_level": "3", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "511,506,505", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "3", + "lifepoints": "4", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "3", + "weakness": "9" + }, + { + "id": "5925", + "name": "Benny", + "examine": "Newspaper seller." + }, + { + "id": "5926", + "name": "Thief", + "examine": "Known for his light-fingered qualities.", + "attack_level": "9", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "9", + "lifepoints": "25", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "9", + "weakness": "9" + }, + { + "id": "5927", + "name": "Thief", + "examine": "Known for his light-fingered qualities.", + "attack_level": "9", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "9", + "lifepoints": "25", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "9", + "weakness": "9" + }, + { + "id": "5928", + "name": "Thief", + "examine": "Known for her light-fingered qualities.", + "attack_level": "9", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "8", + "lifepoints": "24", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "9", + "weakness": "9" + }, + { + "id": "5929", + "name": "Thief", + "examine": "Known for her light-fingered qualities.", + "attack_level": "9", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "8", + "lifepoints": "24", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "9", + "weakness": "9" + }, + { + "id": "5930", + "name": "Art Critic Jacques", + "examine": "Jacques Netis - a slightly pompous art expert.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5931", + "name": "Historian Minas", + "examine": "Seth Minas - an aged expert in Gielinor history.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5932", + "name": "Barnabus Hurma" + }, + { + "id": "5933", + "name": "Marius Giste" + }, + { + "id": "5934", + "name": "Caden Azro" + }, + { + "id": "5935", + "name": "Thias Leacke" + }, + { + "id": "5936", + "name": "Sinco Doar" + }, + { + "id": "5937", + "name": "Tinse Torpe" + }, + { + "id": "5938", + "name": "Information clerk", + "examine": "A lady with lots of information about the Museum.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5939", + "name": "Torrcs" + }, + { + "id": "5940", + "name": "Marfet" + }, + { + "id": "5941", + "name": "Museum guard" + }, + { + "id": "5942", + "name": "Museum guard" + }, + { + "id": "5943", + "name": "Museum guard" + }, + { + "id": "5944", + "name": "Teacher and pupil", + "examine": "A teacher and one of his pupils.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5945", + "name": "Schoolboy", + "examine": "Looks kind of familiar.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5946", + "name": "Schoolboy" + }, + { + "id": "5947", + "name": "Teacher and pupil", + "examine": "A teacher and one of her pupils.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5948", + "name": "Teacher and pupil" + }, + { + "id": "5949", + "name": "Schoolboy" + }, + { + "id": "5950", + "name": "Teacher" + }, + { + "id": "5951", + "name": "Schoolgirl" + }, + { + "id": "5952", + "name": "Workman", + "examine": "Looks hard at work.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5953", + "name": "Workman" + }, + { + "id": "5954", + "name": "Workman", + "examine": "Could there be something exciting in his wheelbarrow?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5955", + "name": "Workman" + }, + { + "id": "5956", + "name": "Void Knight", + "examine": "A powerful knight of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5957", + "name": "Schoolgirl" + }, + { + "id": "5958", + "name": "Digsite workman", + "examine": "Wheelbarrow loader.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5959", + "name": "Barge workman", + "examine": "Working hard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5960", + "name": "Barge workman", + "examine": "Working hard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5961", + "name": "Barge workman", + "examine": "Working hard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5962", + "name": "Barge workman", + "examine": "Working hard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5963", + "name": "Barge foreman", + "examine": "Working hard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5964", + "name": "Ed Wood" + }, + { + "id": "5965", + "name": "Orlando Smith" + }, + { + "id": "5966", + "name": "Natural historian", + "examine": "An aged expert in natural history.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5967", + "name": "Natural historian" + }, + { + "id": "5968", + "name": "Natural historian" + }, + { + "id": "5969", + "name": "Natural historian" + }, + { + "id": "5970", + "name": "Natural historian" + }, + { + "id": "5971", + "name": "Leech display", + "examine": "Bloodsuckers!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5972", + "name": "Sea slugs display", + "examine": "Slugs of the sea variety.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5973", + "name": "Snail display", + "examine": "A house on its back.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5974", + "name": "Monkey display", + "examine": "A cheeky little monkey.", + "attack_level": "1", + "combat_audio": "629,631,630", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5975", + "name": "Lizard display", + "examine": "A scaly little fellow.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5976", + "name": "Penguin display", + "examine": "Nice suit.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5977", + "name": "Camel display", + "examine": "He's got the hump.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5978", + "name": "Terrorbird display", + "examine": "Terrifying!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "34", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "1010", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "strength_level": "23" + }, + { + "id": "5979", + "name": "Dragon display", + "examine": "Looks like a fire-breather.", + "attack_level": "1", + "combat_audio": "408,410,409", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5980", + "name": "Wyvern display", + "examine": "Needs a good square meal.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5981", + "name": "Battle tortoise display", + "examine": "A huge beast.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5982", + "name": "Mole display", + "examine": "Loves making molehills.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5983", + "name": "Schoolgirl" + }, + { + "id": "5984", + "name": "Schoolgirl" + }, + { + "id": "5985", + "name": "Schoolgirl" + }, + { + "id": "5986", + "name": "Workman", + "examine": "It hides in stone", + "aggressive": "true", + "attack_level": "95", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "34", + "magic_animation": "0", + "magic_level": "95", + "range_animation": "0", + "range_level": "95", + "safespot": null, + "strength_level": "95", + "weakness": "10" + }, + { + "id": "5987", + "name": "Sylas", + "examine": "A gnarly old man." + }, + { + "id": "5988", + "name": "Miazrqa" + }, + { + "id": "5989", + "name": "Grimgnash" + }, + { + "id": "5990", + "name": "Rupert the Beard", + "attack_level": "1", + "combat_audio": "498,500,499", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5991", + "name": "Drain pipe" + }, + { + "id": "5992", + "name": "Rupert the Beard", + "attack_level": "1", + "combat_audio": "498,500,499", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5993", + "name": "Experiment No.2", + "examine": "A very odd looking creature.", + "attack_level": "46", + "death_animation": "6512", + "defence_animation": "0", + "defence_level": "46", + "lifepoints": "131", + "magic_animation": "0", + "magic_level": "46", + "melee_animation": "6513", + "range_animation": "0", + "range_level": "46", + "respawn_delay": "60", + "safespot": null, + "strength_level": "46", + "weakness": "10" + }, + { + "id": "5994", + "name": "Mouse", + "examine": "A huge mouse. It looks hungry...", + "aggressive": "true", + "attack_level": "44", + "death_animation": "6521", + "defence_animation": "0", + "defence_level": "44", + "lifepoints": "62", + "magic_animation": "0", + "melee_animation": "6519", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "44", + "weakness": "9" + }, + { + "id": "5995", + "name": "Mouse" + }, + { + "id": "5996", + "name": "Glod", + "aggressive": "true", + "attack_level": "1", + "death_animation": "6502", + "defence_animation": "6503", + "defence_level": "1", + "lifepoints": "160", + "melee_animation": "6501", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "5997", + "name": "Rupert the Beard" + }, + { + "id": "5999", + "name": "Rupert the Beard", + "attack_level": "1", + "combat_audio": "498,500,499", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6000", + "name": "Rupert the Beard" + }, + { + "id": "6001", + "name": "Rupert the Beard", + "attack_level": "1", + "combat_audio": "498,500,499", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6002", + "name": "Gnome" + }, + { + "id": "6003", + "name": "Winkin" + }, + { + "id": "6004", + "name": "Gnome" + }, + { + "id": "6005", + "name": "Cage" + }, + { + "id": "6006", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6007", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6008", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6009", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6010", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6011", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6012", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6013", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6014", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6015", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6016", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6017", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6018", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6019", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6020", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6021", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6022", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6023", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6024", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6025", + "name": "Werewolf", + "examine": "Eek! A werewolf!", + "aggressive": "false", + "attack_level": "70", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,60,0,0,0,0,0,0", + "clue_level": "1", + "combat_audio": "481,491,490", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "", + "magic_level": "1", + "melee_animation": "6536", + "range_animation": "", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "70", + "weakness": "" + }, + { + "id": "6026", + "name": "Boris", + "examine": "A traveling man. Are those fleas?", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6027", + "name": "Imre", + "examine": "A well organised shop keeper.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6028", + "name": "Yuri", + "examine": "He's staring at the moon.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6029", + "name": "Joseph", + "examine": "He keeps calling me comrade.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6030", + "name": "Nikolai", + "examine": "There's a set of brows that mean business.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6031", + "name": "Eduard", + "examine": "This is one feral looking innkeeper.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6032", + "name": "Lev", + "examine": "A tough looking villager.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6033", + "name": "Georgy", + "examine": "A simple villager.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6034", + "name": "Svetlana", + "examine": "Seems a bit of a drama queen.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6035", + "name": "Irina", + "examine": "I bet she works out.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6036", + "name": "Alexis", + "examine": "She doesn't say much.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6037", + "name": "Milla", + "examine": "She looks like she can handle herself.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6038", + "name": "Galina", + "examine": "She seems light on her feet.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6039", + "name": "Sofiya", + "examine": "A wise villager.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6040", + "name": "Ksenia", + "examine": "Not exactly a warrior princess.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6041", + "name": "Yadviga", + "examine": "A well off villager.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6042", + "name": "Nikita", + "examine": "The woman.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6043", + "name": "Vera", + "examine": "She seems sure of herself.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6044", + "name": "Zoja", + "examine": "A healthy villager.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6045", + "name": "Liliya", + "examine": "She's looking for flowers.", + "attack_level": "10", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,-21,-21,-21,-21,-21,0,0,0,0,0", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "10", + "lifepoints": "60", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "15", + "safespot": null, + "strength_level": "10" + }, + { + "id": "6046", + "name": "Big Wolf", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "909,912,911", + "death_animation": "6558", + "defence_animation": "6557", + "defence_level": "1", + "lifepoints": "74", + "melee_animation": "6559", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "74", + "strength_level": "1" + }, + { + "id": "6047", + "name": "Wolf", + "examine": "A vicious mountain wolf.", + "aggressive": "true", + "attack_level": "22", + "attack_speed": "6", + "combat_audio": "909,912,911", + "death_animation": "6576", + "defence_animation": "6578", + "defence_level": "22", + "lifepoints": "69", + "magic_animation": "6579", + "melee_animation": "6579", + "range_animation": "6579", + "range_level": "1", + "safespot": null, + "slayer_exp": "34", + "strength_level": "1" + }, + { + "id": "6048", + "name": "Wolf", + "examine": "Now it has no armour", + "aggressive": "true", + "attack_level": "95", + "combat_audio": "481,491,490", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "157", + "magic_animation": "0", + "magic_level": "95", + "range_animation": "0", + "range_level": "95", + "safespot": null, + "slayer_exp": "34", + "strength_level": "95", + "weakness": "10" + }, + { + "id": "6049", + "name": "Wolf", + "examine": "A big coward. Thok mocks scaredy man.", + "aggressive": "true", + "attack_level": "75", + "combat_audio": "481,491,490", + "defence_animation": "0", + "defence_level": "75", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "75", + "range_level": "75", + "safespot": null, + "slayer_exp": "34", + "strength_level": "75", + "weakness": "10" + }, + { + "id": "6050", + "name": "Desert Wolf", + "examine": "A vicious desert wolf.", + "attack_level": "20", + "attack_speed": "5", + "death_animation": "6558", + "defence_animation": "6578", + "defence_level": "5", + "lifepoints": "55", + "magic_animation": "6579", + "melee_animation": "6579", + "range_animation": "6579", + "range_level": "1", + "safespot": null, + "strength_level": "20", + "weakness": "9" + }, + { + "id": "6051", + "name": "Desert Wolf", + "examine": "A vicious desert wolf.", + "attack_level": "20", + "attack_speed": "5", + "death_animation": "6558", + "defence_animation": "6578", + "defence_level": "5", + "lifepoints": "55", + "magic_animation": "6579", + "melee_animation": "6579", + "range_animation": "6579", + "range_level": "1", + "safespot": null, + "strength_level": "20" + }, + { + "id": "6052", + "name": "Ice wolf", + "examine": "Not man's best friend.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "6558", + "defence_animation": "6557", + "defence_level": "1", + "lifepoints": "70", + "melee_animation": "6559", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6053", + "name": "Ninja Impling", + "examine": "A very stealthy impling." + }, + { + "id": "6054", + "name": "Dragon impling", + "examine": "An impling who likes the word \"dragon\".", + "attack_level": "1", + "combat_audio": "408,410,409", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6055", + "name": "Baby Impling Puro", + "examine": "A baby impling. Ahhh.", + "respawn_delay": "7" + }, + { + "id": "6056", + "name": "Young Impling Puro", + "examine": "A young impling. It's not fair!", + "respawn_delay": "7" + }, + { + "id": "6057", + "name": "Gourmet Impling Puro", + "examine": "An impling gourmet. Mmmm, tasty.", + "respawn_delay": "7" + }, + { + "id": "6058", + "name": "Earth Impling Puro", + "examine": "An earth impling. Rock on.", + "respawn_delay": "50" + }, + { + "id": "6059", + "name": "Essence Impling Puro", + "examine": "An impling who likes magic. Magic!", + "respawn_delay": "50" + }, + { + "id": "6060", + "name": "Eclectic Impling Puro", + "examine": "An impling with varied tastes.", + "respawn_delay": "7" + }, + { + "id": "6061", + "name": "Nature Impling Puro", + "examine": "A nature impling. Right on, maaan.", + "respawn_delay": "9999" + }, + { + "id": "6062", + "name": "Magpie Impling Puro", + "examine": "Ooh, shiny things!", + "respawn_delay": "9999" + }, + { + "id": "6063", + "name": "Ninja Impling Puro", + "examine": "A very stealthy impling.", + "respawn_delay": "9999" + }, + { + "id": "6064", + "name": "Dragon impling", + "examine": "An impling who likes the word \"dragon.\"", + "attack_level": "1", + "combat_audio": "408,410,409", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6065", + "name": "Puro Spawn (Low)", + "respawn_delay": "1" + }, + { + "id": "6066", + "name": "Puro Spawn (Mid)", + "respawn_delay": "1" + }, + { + "id": "6067", + "name": "Puro Spawn (High)", + "respawn_delay": "1" + }, + { + "id": "6071", + "name": "Immenizz" + }, + { + "id": "6072", + "name": "Fairy Aeryka", + "examine": "She tends the wheat.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6073", + "name": "Wandering impling", + "examine": "He looks a little lost.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6074", + "name": "Imp defender", + "examine": "An angry little imp. Grrr.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6075", + "name": "Cyclops" + }, + { + "id": "6078", + "name": "Cyclops", + "examine": "A one-eyed man eater.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "death_animation": "4653", + "defence_animation": "4651", + "defence_level": "35", + "lifepoints": "75", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4652", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "slayer_exp": "75", + "strength_level": "65", + "weakness": "8" + }, + { + "id": "6079", + "name": "Cyclops", + "examine": "A one-eyed woman eater.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "death_animation": "4653", + "defence_animation": "4651", + "defence_level": "65", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4652", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "100", + "strength_level": "65", + "weakness": "1" + }, + { + "id": "6080", + "name": "Cyclops", + "examine": "A one-eyed man eater.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "death_animation": "4653", + "defence_animation": "4651", + "defence_level": "35", + "lifepoints": "75", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4652", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "slayer_exp": "75", + "strength_level": "65", + "weakness": "8" + }, + { + "id": "6081", + "name": "Cyclops", + "examine": "A one-eyed woman eater.", + "aggressive": "true", + "attack_level": "65", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "death_animation": "4653", + "defence_animation": "4651", + "defence_level": "65", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4652", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "100", + "strength_level": "65", + "weakness": "1" + }, + { + "id": "6082", + "name": "Captain Ned" + }, + { + "id": "6085", + "name": "Cabin boy Jenkins" + }, + { + "id": "6086", + "name": "Cabin boy Jenkins" + }, + { + "id": "6087", + "name": "Elvarg" + }, + { + "id": "6088", + "name": "Zombie rat", + "examine": "Overgrown undead vermin.", + "attack_level": "2", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "0", + "defence_level": "2", + "lifepoints": "2", + "magic_animation": "0", + "melee_animation": "4933", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "2", + "weakness": "7" + }, + { + "id": "6089", + "name": "Zombie rat", + "examine": "Overgrown undead vermin.", + "attack_level": "2", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "0", + "defence_level": "2", + "lifepoints": "2", + "magic_animation": "0", + "melee_animation": "4933", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "2", + "weakness": "7" + }, + { + "id": "6090", + "name": "Zombie rat", + "examine": "Overgrown undead vermin.", + "attack_level": "2", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "0", + "defence_level": "2", + "lifepoints": "2", + "magic_animation": "0", + "melee_animation": "4933", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "2", + "weakness": "7" + }, + { + "id": "6091", + "name": "Skeleton", + "examine": "Ey.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "1", + "lifepoints": "22", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6092", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "1", + "lifepoints": "22", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6093", + "name": "Skeleton", + "examine": "Could do with gaining a few pounds.", + "aggressive": "true", + "attack_level": "9", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "9", + "lifepoints": "12", + "magic_animation": "0", + "melee_animation": "5487", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "9", + "weakness": "8" + }, + { + "id": "6094", + "name": "Ghost", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5542", + "defence_animation": "5541", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "5540", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "6095", + "name": "Ghost", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "5532", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "6096", + "name": "Ghost", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "5532", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "6097", + "name": "Ghost", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "5532", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "6098", + "name": "Ghost", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "436,439,438", + "death_animation": "5534", + "defence_animation": "5533", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "5532", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "6099", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5571", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "6100", + "name": "Zombie", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "1", + "lifepoints": "30", + "melee_animation": "5571", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "6101", + "name": "Lesser demon", + "examine": "Lesser, but still pretty big.", + "aggressive": "true", + "attack_level": "68", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0", + "combat_audio": "400,404,403", + "death_animation": "67", + "defence_animation": "65", + "defence_level": "71", + "lifepoints": "79", + "magic_animation": "4630", + "magic_level": "1", + "melee_animation": "4630", + "range_animation": "4630", + "range_level": "1", + "respawn_delay": "30", + "safespot": null, + "slayer_exp": "79", + "strength_level": "70", + "weakness": "4" + }, + { + "id": "6102", + "name": "Lost barbarian", + "examine": "His face is expressionless.", + "attack_level": "60", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "85", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "60", + "weakness": "7" + }, + { + "id": "6103", + "name": "Skeleton hero", + "examine": "An opponent from the grave. He seems unimpressed by your bone rummaging.", + "aggressive": "true", + "attack_level": "53", + "combat_audio": "774,775,777", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "53", + "lifepoints": "75", + "magic_animation": "0", + "melee_animation": "2067", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "53", + "weakness": "8" + }, + { + "id": "6104", + "name": "Skeleton brute", + "examine": "An ex-barbarian, willing to make you ex too.", + "aggressive": "true", + "attack_level": "63", + "combat_audio": "774,775,777", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "63", + "lifepoints": "90", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "63", + "weakness": "8" + }, + { + "id": "6105", + "name": "Skeleton warlord", + "examine": "He's heartless.", + "aggressive": "true", + "attack_level": "65", + "combat_audio": "774,775,777", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "92", + "magic_animation": "0", + "melee_animation": "2067", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "65", + "weakness": "8" + }, + { + "id": "6106", + "name": "Skeleton heavy", + "examine": "He's less heavy now.", + "aggressive": "true", + "attack_level": "64", + "combat_audio": "774,775,777", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "64", + "lifepoints": "91", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "64", + "weakness": "8" + }, + { + "id": "6107", + "name": "Skeleton thug", + "examine": "Floats like an anvil, hits like a hammer.", + "aggressive": "true", + "attack_level": "61", + "combat_audio": "774,775,777", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "61", + "lifepoints": "87", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "61", + "weakness": "8" + }, + { + "id": "6108", + "name": "Entrana firebird", + "examine": "Probably not a chicken.", + "attack_level": "1", + "death_animation": "6812", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "0", + "melee_animation": "6811", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "1" + }, + { + "id": "6109", + "name": "Mounted terrorbird gnome", + "examine": "These gnomes know how to get around!", + "attack_level": "38", + "death_animation": "6791", + "defence_animation": "0", + "defence_level": "38", + "lifepoints": "54", + "magic_animation": "0", + "melee_animation": "6790", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "38", + "weakness": "8" + }, + { + "id": "6110", + "name": "Mounted terrorbird gnome", + "examine": "These gnomes know how to get around!", + "attack_level": "1", + "death_animation": "6791", + "defence_animation": "6792", + "defence_level": "1", + "lifepoints": "55", + "melee_animation": "6790", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6111", + "name": "Mounted terrorbird gnome", + "examine": "These gnomes know how to get around!", + "attack_level": "1", + "death_animation": "6791", + "defence_animation": "6792", + "defence_level": "1", + "lifepoints": "55", + "melee_animation": "6790", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6112", + "name": "Ducklings", + "examine": "Aww, cute.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "water_npc": "true" + }, + { + "id": "6113", + "name": "Duck", + "examine": "Quackers.", + "attack_level": "1", + "death_animation": "750", + "defence_animation": "3268", + "defence_level": "1", + "lifepoints": "3", + "melee_animation": "747", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6114", + "name": "Drake" + }, + { + "id": "6115", + "name": "Seagull", + "examine": "A messy bird.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "309,311,310", + "death_animation": "3468", + "defence_animation": "1014", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "3467", + "melee_animation": "3467", + "range_animation": "3467", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "6" + }, + { + "id": "6116", + "name": "Seagull", + "examine": "A messy bird.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "309,311,310", + "death_animation": "3468", + "defence_animation": "1014", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "3467", + "melee_animation": "3467", + "range_animation": "3467", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6117", + "name": "Mr. Mordaut", + "examine": "Do not upset this teacher. You have been warned!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6118", + "name": "Observatory assistant", + "examine": "He helps the professor.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6119", + "name": "Observatory professor", + "examine": "A man, learned in the ways of the stars." + }, + { + "id": "6122", + "name": "Sleeping guard", + "examine": "Sleeping like an ugly baby.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6123", + "name": "Naghead", + "examine": "An old goblin hag.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6124", + "name": "Wagchin", + "examine": "A young goblin 'beauty'.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6125", + "name": "Goblin", + "examine": "An ugly green creature.", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6126", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6127", + "name": "Greasycheeks", + "examine": "Big appetite for a small creature.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6128", + "name": "Smellytoes", + "examine": "Likes drink a little too much.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6129", + "name": "Creakyknees", + "examine": "Lean and green.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6130", + "name": "Clothears" + }, + { + "id": "6131", + "name": "Zombie", + "attack_level": "1", + "combat_audio": "931,923,922", + "defence_level": "1", + "lifepoints": "40", + "range_level": "1", + "safespot": null, + "slayer_exp": "30", + "strength_level": "1" + }, + { + "id": "6132", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6133", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6134", + "name": "Dunce", + "examine": "This imp is clearly the class clown.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6135", + "name": "Town crier", + "examine": "Get useful information from this guy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6136", + "name": "Town crier", + "examine": "Get useful information from this guy." + }, + { + "id": "6137", + "name": "Town crier", + "examine": "Get useful information from this guy." + }, + { + "id": "6138", + "name": "Town crier" + }, + { + "id": "6139", + "name": "Town crier" + }, + { + "id": "6140", + "name": "Squire (Intermediate)", + "examine": "A squire of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6141", + "name": "Squire (Veteran)", + "examine": "A squire of balance.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6142", + "name": "Portal", + "examine": "Not somewhere I want to go...", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "100,100,100,50,50,0,0,0,0,0,0,0,0,0,0", + "defence_level": "50", + "lifepoints": "200", + "magic_level": "50", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6143", + "name": "Portal", + "examine": "Not somewhere I want to go...", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "100,100,100,100,25,0,0,0,0,0,0,0,0,0,0", + "defence_level": "50", + "lifepoints": "200", + "magic_level": "25", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6144", + "name": "Portal", + "examine": "Not somewhere I want to go...", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "100,100,50,100,50,0,0,0,0,0,0,0,0,0,0", + "defence_level": "50", + "lifepoints": "200", + "magic_level": "50", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6145", + "name": "Portal", + "examine": "Not somewhere I want to go...", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "50,50,100,100,50,0,0,0,0,0,0,0,0,0,0", + "defence_level": "50", + "lifepoints": "200", + "magic_level": "50", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6146", + "name": "Portal", + "examine": "The Void Knight will soon weaken the shield.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "100,100,100,50,50,0,0,0,0,0,0,0,0,0,0", + "defence_level": "30", + "lifepoints": "200", + "magic_level": "30", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6147", + "name": "Portal", + "examine": "The Void Knight will soon weaken the shield.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "100,100,100,100,25,0,0,0,0,0,0,0,0,0,0", + "defence_level": "30", + "lifepoints": "200", + "magic_level": "15", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6148", + "name": "Portal", + "examine": "The Void Knight will soon weaken the shield.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "100,100,50,100,50,0,0,0,0,0,0,0,0,0,0", + "defence_level": "30", + "lifepoints": "200", + "magic_level": "30", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6149", + "name": "Portal", + "examine": "The Void Knight will soon weaken the shield.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "50,50,100,100,50,0,0,0,0,0,0,0,0,0,0", + "defence_level": "30", + "lifepoints": "200", + "magic_level": "30", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6150", + "name": "Portal", + "examine": "Not somewhere I want to go...", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "150,150,150,75,75,0,0,0,0,0,0,0,0,0,0", + "defence_level": "70", + "lifepoints": "250", + "magic_level": "70", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6151", + "name": "Portal", + "examine": "Not somewhere I want to go...", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "150,150,150,150,37,0,0,0,0,0,0,0,0,0,0", + "defence_level": "70", + "lifepoints": "250", + "magic_level": "40", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6152", + "name": "Portal", + "examine": "Not somewhere I want to go...", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "150,150,75,150,75,0,0,0,0,0,0,0,0,0,0", + "defence_level": "70", + "lifepoints": "250", + "magic_level": "70", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6153", + "name": "Portal", + "examine": "Not somewhere I want to go...", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "75,75,150,150,75,0,0,0,0,0,0,0,0,0,0", + "defence_level": "70", + "lifepoints": "250", + "magic_level": "70", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6154", + "name": "Portal", + "examine": "The Void Knight will soon weaken the shield.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "100,100,100,50,50,0,0,0,0,0,0,0,0,0,0", + "defence_level": "30", + "lifepoints": "250", + "magic_level": "30", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6155", + "name": "Portal", + "examine": "The Void Knight will soon weaken the shield.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "100,100,100,100,25,0,0,0,0,0,0,0,0,0,0", + "defence_level": "30", + "lifepoints": "250", + "magic_level": "15", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6156", + "name": "Portal", + "examine": "The Void Knight will soon weaken the shield.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "100,100,50,100,50,0,0,0,0,0,0,0,0,0,0", + "defence_level": "30", + "lifepoints": "250", + "magic_level": "30", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6157", + "name": "Portal", + "examine": "The Void Knight will soon weaken the shield.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "50,50,100,100,50,0,0,0,0,0,0,0,0,0,0", + "defence_level": "30", + "lifepoints": "250", + "magic_level": "30", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6158", + "name": "Sir Lucan" + }, + { + "id": "6159", + "name": "Workman", + "examine": "It is cold and solid. Thok will strap it to Marmaros's leg.", + "aggressive": "true", + "attack_level": "50", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "114", + "magic_animation": "0", + "magic_level": "50", + "range_animation": "0", + "range_level": "50", + "safespot": null, + "strength_level": "50", + "weakness": "10" + }, + { + "id": "6160", + "name": "Sir Lancelot" + }, + { + "id": "6161", + "name": "Sir Bedivere" + }, + { + "id": "6162", + "name": "Sir Tristram" + }, + { + "id": "6163", + "name": "Sir Pelleas" + }, + { + "id": "6164", + "name": "Sir Gawain" + }, + { + "id": "6165", + "name": "Sir Kay" + }, + { + "id": "6166", + "name": "Sir Pelleas" + }, + { + "id": "6167", + "name": "Sir Gawain" + }, + { + "id": "6168", + "name": "Sir Kay" + }, + { + "id": "6169", + "name": "Squire", + "examine": "Squire to the Knights of the Round Table.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6170", + "name": "Sir Lancelot", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "836", + "defence_animation": "422", + "defence_level": "1", + "lifepoints": "118", + "melee_animation": "400", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6171", + "name": "Sir Kay" + }, + { + "id": "6172", + "name": "Sir Gawain" + }, + { + "id": "6173", + "name": "Sir Lucan" + }, + { + "id": "6174", + "name": "Bandit" + }, + { + "id": "6175", + "name": "Sir Tristram" + }, + { + "id": "6176", + "name": "Sir Pelleas" + }, + { + "id": "6177", + "name": "Sir Bedivere" + }, + { + "id": "6178", + "name": "Anna" + }, + { + "id": "6179", + "name": "David" + }, + { + "id": "6180", + "name": "Anna" + }, + { + "id": "6181", + "name": "Court judge" + }, + { + "id": "6182", + "name": "Jury" + }, + { + "id": "6183", + "name": "Guard", + "examine": "An officer of the law.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6184", + "name": "Guard", + "examine": "An officer of the law.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6185", + "name": "Prosecutor" + }, + { + "id": "6186", + "name": "Morgan Le Faye" + }, + { + "id": "6188", + "name": "Renegade knight", + "examine": "He isn't very friendly.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "8" + }, + { + "id": "6189", + "name": "Black Knight", + "examine": "A dark-hearted knight.", + "aggressive": "true", + "attack_level": "25", + "attack_speed": "5", + "bonuses": "18,18,18,0,0,73,76,70,-11,72,0,16,0,0,0", + "combat_audio": "2503,15,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "25", + "weakness": "8" + }, + { + "id": "6190", + "name": "Guard", + "examine": "Primping with combs and hair clips.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6191", + "name": "Sinclair" + }, + { + "id": "6198", + "name": "Sinclair", + "examine": "The name isn't just for show.", + "aggressive": "true", + "attack_level": "55", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "85", + "magic_animation": "0", + "magic_level": "55", + "range_animation": "0", + "range_level": "55", + "safespot": null, + "strength_level": "55", + "weakness": "10" + }, + { + "id": "6199", + "name": "Banker" + }, + { + "id": "6200", + "name": "Banker", + "examine": "He can look after my money.", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6201", + "name": "Knight", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6202", + "name": "K'ril Tsutsaroth" + }, + { + "id": "6203", + "name": "K'ril Tsutsaroth", + "examine": "A servant of the god Zamorak. ", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "340", + "attack_speed": "6", + "bonuses": "160,160,160,0,0,80,80,80,130,80,0,31,0,0,0", + "clue_level": "2", + "death_animation": "6946", + "defence_animation": "6944", + "defence_level": "270", + "lifepoints": "255", + "magic_animation": "6945", + "magic_level": "200", + "melee_animation": "6945", + "poison_amount": "", + "poison_immune": "true", + "poisonous": "", + "range_animation": "6945", + "range_level": "1", + "respawn_delay": "150", + "safespot": null, + "slayer_exp": "350", + "strength_level": "300", + "weakness": "9" + }, + { + "id": "6204", + "name": "Tstanon Karlak", + "examine": "Destroyer of 1000 planes!", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "124", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,0,0,0,-5,0,0,14,0,0,0", + "death_animation": "6946", + "defence_animation": "6944", + "defence_level": "125", + "lifepoints": "142", + "magic_animation": "6945", + "magic_level": "50", + "melee_animation": "6945", + "range_animation": "6945", + "range_level": "50", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "142", + "strength_level": "118", + "weakness": "9" + }, + { + "id": "6205", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6206", + "name": "Zakl'n Gritch", + "examine": "Scourge of light.", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "83", + "attack_speed": "5", + "bonuses": "0,0,0,0,20,0,0,0,-5,0,0,0,0,0,20", + "combat_style": "1", + "death_animation": "6946", + "defence_animation": "6945", + "defence_level": "127", + "lifepoints": "150", + "magic_animation": "7033", + "magic_level": "50", + "melee_animation": "7033", + "projectile": "1209", + "range_animation": "7033", + "range_level": "150", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "150", + "start_gfx": "1208", + "strength_level": "76", + "weakness": "0" + }, + { + "id": "6207", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6208", + "name": "Balfrug Kreeyath", + "examine": "Despoiler of Ullek.", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "115", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,0,0,0,10,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "6946", + "defence_animation": "6944", + "defence_level": "153", + "lifepoints": "161", + "magic_animation": "7033", + "magic_level": "150", + "melee_animation": "7033", + "projectile": "1213", + "range_animation": "7033", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "161", + "start_gfx": "1212", + "strength_level": "60" + }, + { + "id": "6209", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6210", + "name": "Hellhound", + "examine": "From the maws of hell.", + "aggressive": "true", + "attack_level": "105", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "3717,3719,3718", + "death_animation": "6576", + "defence_animation": "6578", + "defence_level": "102", + "lifepoints": "116", + "magic_animation": "6579", + "melee_animation": "6579", + "range_animation": "6579", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "116", + "strength_level": "104", + "weakness": "7" + }, + { + "id": "6211", + "name": "Imp", + "examine": "Have you checked your pockets lately?", + "aggressive": "true", + "attack_level": "4", + "bonuses": "10,5,5,10,10,10,10,10,10,0,0,0,0,0,0", + "combat_audio": "534,536,535", + "death_animation": "172", + "defence_animation": "170", + "defence_level": "4", + "lifepoints": "10", + "magic_animation": "169", + "melee_animation": "169", + "movement_radius": "25", + "range_animation": "169", + "range_level": "1", + "safespot": null, + "strength_level": "4", + "weakness": "7" + }, + { + "id": "6212", + "name": "Werewolf", + "examine": "He doesn't look pleased to see me.", + "aggressive": "true", + "attack_level": "64", + "bonuses": "50,40,45,60,70,70,70,40,40,50,0,0,0,0,0", + "clue_level": "1", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "64", + "lifepoints": "100", + "magic_animation": "6536", + "melee_animation": "6536", + "range_animation": "6536", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "64", + "weakness": "7" + }, + { + "id": "6213", + "name": "Werewolf", + "examine": "He doesn't look pleased to see me.", + "aggressive": "true", + "attack_level": "64", + "bonuses": "50,40,45,60,70,70,70,40,40,50,0,0,0,0,0", + "clue_level": "1", + "death_animation": "6537", + "defence_animation": "6538", + "defence_level": "64", + "lifepoints": "100", + "magic_animation": "6536", + "melee_animation": "6536", + "range_animation": "6536", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "64", + "weakness": "7" + }, + { + "id": "6214", + "name": "Vampire", + "examine": "It looks really hungry!", + "aggressive": "true", + "attack_level": "44", + "bonuses": "30,35,30,40,50,50,50,25,30,30,0,0,0,0,0", + "clue_level": "1", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "44", + "lifepoints": "60", + "magic_animation": "810", + "melee_animation": "810", + "range_animation": "810", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "44" + }, + { + "id": "6215", + "name": "Bloodveld", + "examine": "The tongue of evil.", + "aggressive": "true", + "attack_level": "75", + "attack_speed": "4", + "clue_level": "2", + "combat_audio": "312,314,313", + "death_animation": "9131", + "defence_animation": "9132", + "defence_level": "30", + "lifepoints": "120", + "magic_animation": "1552", + "melee_animation": "9130", + "range_animation": "1552", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "120", + "strength_level": "45" + }, + { + "id": "6216", + "name": "Pyrefiend", + "examine": "A small fire demon.", + "aggressive": "true", + "attack_level": "25", + "bonuses": "25,25,20,40,40,40,15,30,20,60,20,0,0,0,0", + "clue_level": "1", + "combat_audio": "696,698,697", + "death_animation": "1580", + "defence_animation": "1581", + "defence_level": "25", + "lifepoints": "48", + "magic_animation": "1582", + "melee_animation": "1582", + "range_animation": "1582", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "25", + "weakness": "7" + }, + { + "id": "6217", + "name": "Icefiend", + "examine": "A small ice demon.", + "attack_level": "5", + "bonuses": "5,5,5,5,10,10,10,10,10,10,5,0,0,0,0", + "clue_level": "0", + "combat_audio": "531,533,532", + "death_animation": "8078", + "defence_animation": "8079", + "defence_level": "5", + "lifepoints": "15", + "magic_animation": "8080", + "melee_animation": "8080", + "range_animation": "8080", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "5" + }, + { + "id": "6218", + "name": "Gorak", + "examine": "Those horns look pretty sharp...", + "aggressive": "true", + "attack_level": "70", + "bonuses": "30,30,50,70,40,70,70,50,60,55,0,0,0,0,0", + "death_animation": "4302", + "defence_animation": "4301", + "defence_level": "70", + "lifepoints": "112", + "magic_animation": "4300", + "melee_animation": "4300", + "range_animation": "4300", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "slayer_exp": "112", + "strength_level": "70", + "weakness": "9" + }, + { + "id": "6219", + "name": "Spiritual warrior", + "examine": "Warrior of Zamorak.", + "aggressive": "true", + "attack_level": "66", + "attack_speed": "5", + "bonuses": "40,60,60,60,60,20,50,55,0,0,0,0,0,0,0", + "clue_level": "2", + "death_animation": "9055", + "defence_animation": "1156", + "defence_level": "66", + "lifepoints": "102", + "magic_animation": "390", + "melee_animation": "390", + "range_animation": "390", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "66", + "weakness": "6" + }, + { + "id": "6220", + "name": "Spiritual ranger", + "examine": "A ranger spirit dedicated to Zamorak.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "50,70,50,50,50,70,50,85,85,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "70", + "lifepoints": "120", + "magic_animation": "426", + "melee_animation": "426", + "projectile": "9", + "range_animation": "426", + "range_level": "70", + "respawn_delay": "25", + "safespot": null, + "start_gfx": "18", + "start_height": "96", + "strength_level": "1", + "weakness": "1" + }, + { + "id": "6221", + "name": "Spiritual mage", + "examine": "A deadly servant of Zamorak.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "2", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "61", + "end_gfx": "78", + "end_height": "0", + "lifepoints": "75", + "magic_animation": "811", + "magic_level": "180", + "melee_animation": "811", + "projectile": "78", + "range_animation": "811", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1", + "weakness": "3" + }, + { + "id": "6222", + "name": "Kree'arra", + "examine": "Graceful avatar of Armadyl.", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "300", + "attack_speed": "3", + "bonuses": "136,136,136,0,120,180,180,180,200,200,0,12,0,0,0", + "clue_level": "2", + "death_animation": "6975", + "defence_animation": "6974", + "defence_level": "260", + "lifepoints": "255", + "magic_animation": "6977", + "magic_level": "200", + "melee_animation": "6977", + "poison_immune": "true", + "range_animation": "6977", + "range_level": "380", + "respawn_delay": "150", + "safespot": null, + "slayer_exp": "357", + "strength_level": "200", + "weakness": "10" + }, + { + "id": "6223", + "name": "Wingman Skree", + "examine": "Graceful, bird-like creature.", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "5", + "bonuses": "45,45,45,0,0,0,0,0,0,0,0,25,0,0,0", + "combat_style": "2", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "160", + "lifepoints": "121", + "magic_animation": "6952", + "magic_level": "150", + "melee_animation": "6952", + "poison_immune": "false", + "prj_height": "92", + "projectile": "1199", + "range_animation": "6952", + "range_level": "100", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "124", + "strength_level": "50", + "weakness": "3" + }, + { + "id": "6224", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6225", + "name": "Flockleader Geerin", + "examine": "Graceful, bird-like creature.", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "5", + "bonuses": "0,0,0,0,60,0,0,0,0,0,0,0,0,0,0", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "175", + "lifepoints": "132", + "magic_animation": "6953", + "magic_level": "50", + "melee_animation": "6953", + "poison_immune": "false", + "prj_height": "92", + "projectile": "1190", + "range_animation": "6953", + "range_level": "150", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "133", + "strength_level": "80", + "weakness": "4" + }, + { + "id": "6226", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6227", + "name": "Flight Kilisa", + "examine": "Graceful, bird-like creature.", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "124", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,14,0,0,0", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "175", + "lifepoints": "133", + "magic_animation": "6954", + "magic_level": "50", + "melee_animation": "6954", + "range_animation": "6954", + "range_level": "169", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "133", + "strength_level": "118", + "weakness": "6" + }, + { + "id": "6228", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6229", + "name": "Spiritual warrior", + "examine": "A servant of Armadyl.", + "aggressive": "true", + "attack_level": "70", + "bonuses": "40,40,50,50,20,50,50,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "70", + "lifepoints": "98", + "magic_animation": "6954", + "melee_animation": "6954", + "range_animation": "6954", + "range_level": "68", + "respawn_delay": "25", + "safespot": null, + "strength_level": "70", + "weakness": "6" + }, + { + "id": "6230", + "name": "Spiritual ranger", + "examine": "Armadyl's favourite servant.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "70", + "lifepoints": "89", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1190", + "range_animation": "6953", + "range_level": "70", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "6231", + "name": "Spiritual mage", + "examine": "A mage who serves Armadyl above all else - even death.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,9,12,5,45,28,0,0,0,0,0", + "clue_level": "2", + "combat_style": "2", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "111", + "lifepoints": "75", + "magic_animation": "6952", + "magic_level": "150", + "melee_animation": "6952", + "prj_height": "92", + "projectile": "1199", + "range_animation": "6952", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "6232", + "name": "Aviansie", + "examine": "Graceful, bird-like creature.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "40", + "lifepoints": "70", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1191", + "range_animation": "6953", + "range_level": "40", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6233", + "name": "Aviansie", + "examine": "Graceful, bird-like creature.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "45", + "lifepoints": "83", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1190", + "range_animation": "6953", + "range_level": "45", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6234", + "name": "Aviansie", + "examine": "Graceful, bird-like creature.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "50", + "lifepoints": "86", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1190", + "range_animation": "6953", + "range_level": "50", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6235", + "name": "Aviansie", + "examine": "Graceful, bird-like creature.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "50", + "lifepoints": "86", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1190", + "range_animation": "6953", + "range_level": "50", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6236", + "name": "Aviansie", + "examine": "Graceful, bird-like creature.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "55", + "lifepoints": "95", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1190", + "range_animation": "6953", + "range_level": "55", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6237", + "name": "Aviansie", + "examine": "Graceful, bird-like creature.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "55", + "lifepoints": "98", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1191", + "range_animation": "6953", + "range_level": "55", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6238", + "name": "Aviansie", + "examine": "Graceful, bird-like creature.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "65", + "lifepoints": "124", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1190", + "range_animation": "6953", + "range_level": "65", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6239", + "name": "Aviansie", + "examine": "Graceful, bird-like creature.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "65", + "lifepoints": "139", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1191", + "range_animation": "6953", + "range_level": "65", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6240", + "name": "Aviansie", + "examine": "Graceful, bird-like creature.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "40", + "lifepoints": "63", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1191", + "range_animation": "6953", + "range_level": "40", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6241", + "name": "Aviansie", + "examine": "Graceful, bird-like creature.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "40", + "lifepoints": "65", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1190", + "range_animation": "6953", + "range_level": "40", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6242", + "name": "Aviansie", + "examine": "Graceful, bird-like creature.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "40", + "lifepoints": "83", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1190", + "range_animation": "6953", + "range_level": "40", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6243", + "name": "Aviansie", + "examine": "Graceful, bird-like creature.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "50", + "lifepoints": "69", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1190", + "range_animation": "6953", + "range_level": "50", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6244", + "name": "Aviansie", + "examine": "Graceful, bird-like creature.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "55", + "lifepoints": "75", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1190", + "range_animation": "6953", + "range_level": "55", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6245", + "name": "Aviansie", + "examine": "Graceful, bird-like creature.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "55", + "lifepoints": "98", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1190", + "range_animation": "6953", + "range_level": "55", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6246", + "name": "Aviansie", + "examine": "Graceful, bird-like creature.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "60,50,60,50,65,65,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "6956", + "defence_animation": "6955", + "defence_level": "65", + "lifepoints": "73", + "magic_animation": "6953", + "melee_animation": "6953", + "prj_height": "92", + "projectile": "1191", + "range_animation": "6953", + "range_level": "65", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6247", + "name": "Commander Zilyana", + "examine": "Commander of Saradomin's forces. ", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "280", + "attack_speed": "2", + "bonuses": "195,195,195,200,0,100,100,100,100,100,0,20,0,0,0", + "clue_level": "2", + "death_animation": "6965", + "defence_animation": "6966", + "defence_level": "300", + "lifepoints": "255", + "magic_animation": "6964", + "magic_level": "300", + "melee_animation": "6964", + "poison_immune": "true", + "range_animation": "6964", + "range_level": "250", + "respawn_delay": "150", + "safespot": null, + "slayer_exp": "360", + "strength_level": "196", + "weakness": "7" + }, + { + "id": "6248", + "name": "Starlight", + "examine": "The bane of darkness.", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "120", + "attack_speed": "5", + "bonuses": "60,60,60,0,0,12,14,13,5,13,0,10,0,0,0", + "combat_audio": "3829,3866,3849", + "death_animation": "6377", + "defence_animation": "6375", + "defence_level": "120", + "lifepoints": "160", + "magic_animation": "6376", + "magic_level": "125", + "melee_animation": "6376", + "poison_immune": "false", + "range_animation": "6376", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "125", + "weakness": "7" + }, + { + "id": "6249", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6250", + "name": "Growler", + "examine": "Defender of the faithful.", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "100", + "attack_speed": "5", + "bonuses": "10,10,10,0,0,12,14,14,18,5,0,7,0,0,0", + "combat_audio": "3830,3869,3867", + "combat_style": "2", + "death_animation": "7016", + "defence_animation": "7017", + "defence_level": "120", + "end_gfx": "1186", + "lifepoints": "146", + "magic_animation": "7019", + "magic_level": "150", + "melee_animation": "7019", + "prj_height": "0", + "projectile": "1185", + "range_animation": "7019", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "start_gfx": "1184", + "strength_level": "101" + }, + { + "id": "6251", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6252", + "name": "Bree", + "examine": "Champion of Truth.", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "110", + "attack_speed": "5", + "bonuses": "10,10,10,0,0,12,14,14,18,5,0,7,0,0,0", + "combat_style": "1", + "death_animation": "7011", + "defence_animation": "7010", + "defence_level": "130", + "end_gfx": "24", + "lifepoints": "162", + "magic_animation": "7009", + "magic_level": "80", + "melee_animation": "7009", + "prj_height": "50", + "projectile": "1188", + "range_animation": "7009", + "range_level": "150", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "80", + "weakness": "0" + }, + { + "id": "6253", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6254", + "name": "Saradomin priest", + "examine": "A holy man wearing ancient clothing.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "40,40,40,40,20,50,40,55,0,0,0,0,0,0,0", + "combat_style": "2", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "60", + "end_gfx": "76", + "lifepoints": "89", + "magic_animation": "811", + "magic_level": "60", + "melee_animation": "811", + "poisonous": "", + "range_animation": "811", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1", + "weakness": "3" + }, + { + "id": "6255", + "name": "Spiritual warrior", + "examine": "Warrior of Saradomin.", + "aggressive": "true", + "attack_level": "66", + "attack_speed": "5", + "bonuses": "40,60,60,60,60,20,50,45,0,0,0,0,0,0,0", + "clue_level": "2", + "death_animation": "9055", + "defence_animation": "1156", + "defence_level": "66", + "lifepoints": "100", + "magic_animation": "390", + "melee_animation": "390", + "range_animation": "390", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "66", + "weakness": "8" + }, + { + "id": "6256", + "name": "Spiritual ranger", + "examine": "A ranger spirit dedicated to Saradomin.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "50,70,50,50,50,70,50,65,65,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "70", + "lifepoints": "106", + "magic_animation": "426", + "melee_animation": "426", + "projectile": "9", + "range_animation": "426", + "range_level": "70", + "respawn_delay": "25", + "safespot": null, + "start_gfx": "18", + "start_height": "96", + "strength_level": "1", + "weakness": "0" + }, + { + "id": "6257", + "name": "Spiritual mage", + "examine": "Saradomin's holy mage.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,8,7,3,16,2,0,0,0,0,0", + "clue_level": "2", + "combat_style": "2", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "86", + "end_gfx": "76", + "end_height": "0", + "lifepoints": "85", + "magic_animation": "811", + "magic_level": "160", + "melee_animation": "811", + "projectile": "76", + "range_animation": "811", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "6258", + "name": "Knight of Saradomin", + "examine": "A valiant knight.", + "aggressive": "true", + "attack_level": "50", + "bonuses": "40,40,40,40,50,20,40,50,0,0,0,0,0,0,0", + "death_animation": "9055", + "defence_animation": "410", + "defence_level": "50", + "lifepoints": "135", + "magic_animation": "407", + "melee_animation": "407", + "range_animation": "407", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "50", + "weakness": "7" + }, + { + "id": "6259", + "name": "Knight of Saradomin", + "examine": "A valiant knight.", + "aggressive": "true", + "attack_level": "50", + "bonuses": "40,40,40,40,50,20,40,65,0,0,0,0,0,0,0", + "death_animation": "9055", + "defence_animation": "424", + "defence_level": "50", + "lifepoints": "108", + "magic_animation": "401", + "melee_animation": "401", + "range_animation": "401", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "50", + "weakness": "7" + }, + { + "id": "6260", + "name": "General Graardor", + "examine": "A huge war chief.", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "280", + "attack_speed": "6", + "bonuses": "120,120,120,0,100,90,90,90,65,90,0,43,0,0,0", + "clue_level": "2", + "death_animation": "7062", + "defence_animation": "7061", + "defence_level": "250", + "lifepoints": "255", + "magic_animation": "7060", + "magic_level": "280", + "melee_animation": "7060", + "poison_immune": "true", + "range_animation": "7060", + "range_level": "350", + "respawn_delay": "150", + "safespot": null, + "slayer_exp": "0", + "strength_level": "350", + "weakness": "10" + }, + { + "id": "6261", + "name": "Sergeant Strongstack", + "examine": "A battle-honed goblin. ", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "124", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,14,0,0,0", + "death_animation": "6156", + "defence_animation": "6155", + "defence_level": "126", + "lifepoints": "128", + "magic_animation": "6154", + "magic_level": "50", + "melee_animation": "6154", + "range_animation": "6154", + "range_level": "50", + "respawn_delay": "50", + "safespot": null, + "strength_level": "118", + "weakness": "8" + }, + { + "id": "6262", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6263", + "name": "Sergeant Steelwill", + "examine": "A battle-honed goblin. ", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,6,0,0,0", + "combat_style": "2", + "death_animation": "6156", + "defence_animation": "6155", + "defence_level": "150", + "lifepoints": "127", + "magic_animation": "6154", + "magic_level": "150", + "melee_animation": "6154", + "projectile": "1203", + "range_animation": "6154", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "start_gfx": "1202", + "strength_level": "50", + "weakness": "3" + }, + { + "id": "6264", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6265", + "name": "Sergeant Grimspike", + "examine": "A battle-honed goblin. ", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "80", + "attack_speed": "5", + "bonuses": "0,0,0,0,20,0,0,0,0,0,0,0,0,0,20", + "combat_style": "1", + "death_animation": "6156", + "defence_animation": "6155", + "defence_level": "132", + "lifepoints": "146", + "magic_animation": "6154", + "magic_level": "50", + "melee_animation": "6154", + "projectile": "1206", + "range_animation": "6154", + "range_level": "150", + "respawn_delay": "50", + "safespot": null, + "strength_level": "80", + "weakness": "2" + }, + { + "id": "6266", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6267", + "name": "Fishing spot", + "examine": "Big, ugly, and smelly.", + "aggressive": "true", + "attack_level": "27", + "attack_speed": "6", + "bonuses": "15,15,10,20,40,15,50,50,50,20,50,58,0,0,0", + "death_animation": "361", + "defence_animation": "360", + "defence_level": "27", + "lifepoints": "60", + "magic_animation": "359", + "magic_level": "27", + "melee_animation": "359", + "range_animation": "359", + "range_level": "27", + "respawn_delay": "25", + "safespot": null, + "strength_level": "27" + }, + { + "id": "6268", + "name": "Jogre", + "examine": "Green and aggressive.", + "aggressive": "true", + "attack_level": "62", + "attack_speed": "6", + "bonuses": "10,20,20,20,20,20,10,20,0,0,0,0,0,0,0", + "clue_level": "1", + "death_animation": "2938", + "defence_animation": "2937", + "defence_level": "62", + "lifepoints": "70", + "magic_animation": "2936", + "melee_animation": "2936", + "range_animation": "2936", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "62", + "weakness": "8" + }, + { + "id": "6269", + "name": "Cyclops", + "examine": "A one-eyed man-eater.", + "aggressive": "true", + "attack_level": "60", + "attack_speed": "4", + "bonuses": "22,22,22,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "death_animation": "4653", + "defence_animation": "4651", + "defence_level": "48", + "lifepoints": "110", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4652", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "slayer_exp": "110", + "strength_level": "70", + "weakness": "8" + }, + { + "id": "6270", + "name": "Cyclops", + "examine": "A one-eyed man-eater.", + "aggressive": "true", + "attack_level": "60", + "attack_speed": "4", + "bonuses": "22,22,22,0,0,0,0,0,0,0,0,0,0,0,0", + "clue_level": "2", + "death_animation": "4653", + "defence_animation": "4651", + "defence_level": "48", + "lifepoints": "110", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "4652", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "slayer_exp": "110", + "strength_level": "70", + "weakness": "8" + }, + { + "id": "6271", + "name": "Ork", + "examine": "Ugly, fierce and with a bad attitude.", + "aggressive": "true", + "attack_level": "68", + "bonuses": "40,20,30,45,45,45,45,20,45,35,0,0,0,0,0", + "death_animation": "4321", + "defence_animation": "4322", + "defence_level": "68", + "lifepoints": "110", + "magic_animation": "4320", + "melee_animation": "4320", + "range_animation": "4320", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "68", + "weakness": "8" + }, + { + "id": "6272", + "name": "Ork", + "examine": "Ugly, fierce and with a bad attitude.", + "aggressive": "true", + "attack_level": "68", + "bonuses": "40,20,30,45,45,45,45,20,45,35,0,0,0,0,0", + "death_animation": "4321", + "defence_animation": "4322", + "defence_level": "68", + "lifepoints": "110", + "magic_animation": "4320", + "melee_animation": "4320", + "range_animation": "4320", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "68" + }, + { + "id": "6273", + "name": "Ork", + "examine": "Ugly, fierce and with a bad attitude.", + "aggressive": "true", + "attack_level": "68", + "bonuses": "40,20,30,45,45,45,45,20,45,35,0,0,0,0,0", + "death_animation": "4321", + "defence_animation": "4322", + "defence_level": "68", + "lifepoints": "110", + "magic_animation": "4320", + "melee_animation": "4320", + "range_animation": "4320", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "68" + }, + { + "id": "6274", + "name": "Ork", + "examine": "Ugly, fierce and with a bad attitude.", + "aggressive": "true", + "attack_level": "68", + "bonuses": "40,20,30,45,45,45,45,20,45,35,0,0,0,0,0", + "death_animation": "4321", + "defence_animation": "4322", + "defence_level": "68", + "lifepoints": "110", + "magic_animation": "4320", + "melee_animation": "4320", + "range_animation": "4320", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "68" + }, + { + "id": "6275", + "name": "Hobgoblin", + "examine": "An ugly, smelly creature.", + "aggressive": "true", + "attack_level": "40", + "bonuses": "20,30,30,30,30,30,10,30,0,0,0,0,0,0,0", + "combat_audio": "469,472,471", + "death_animation": "167", + "defence_animation": "165", + "defence_level": "40", + "lifepoints": "52", + "magic_animation": "164", + "melee_animation": "164", + "range_animation": "164", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "40", + "weakness": "8" + }, + { + "id": "6276", + "name": "Spiritual ranger", + "examine": "The spirit of a ranger, serving bandos beyond death.", + "aggressive": "true", + "attack_level": "1", + "bonuses": "30,50,30,30,50,60,50,40,40,0,0,0,0,0,0", + "clue_level": "2", + "combat_style": "1", + "death_animation": "4321", + "defence_animation": "4322", + "defence_level": "70", + "lifepoints": "130", + "magic_animation": "4320", + "melee_animation": "4320", + "projectile": "1195", + "range_animation": "4320", + "range_level": "70", + "respawn_delay": "25", + "safespot": null, + "start_gfx": "95", + "strength_level": "1", + "weakness": "0" + }, + { + "id": "6277", + "name": "Spiritual warrior", + "examine": "A true servant of Bandos.", + "aggressive": "true", + "attack_level": "70", + "bonuses": "50,40,45,60,60,60,60,20,50,60,0,0,0,0,0", + "clue_level": "2", + "death_animation": "4321", + "defence_animation": "4322", + "defence_level": "70", + "lifepoints": "131", + "magic_animation": "4320", + "melee_animation": "4320", + "range_animation": "4320", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "70", + "weakness": "8" + }, + { + "id": "6278", + "name": "Spiritual mage", + "examine": "One of Bandos' chosen.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "0,0,0,0,0,12,14,13,35,13,0,0,0,0,0", + "clue_level": "2", + "combat_style": "2", + "death_animation": "4321", + "defence_animation": "4322", + "defence_level": "103", + "lifepoints": "106", + "magic_animation": "4320", + "magic_level": "142", + "melee_animation": "4320", + "range_animation": "4320", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "1", + "weakness": "4" + }, + { + "id": "6279", + "name": "Goblin", + "examine": "An ancient goblin.", + "aggressive": "true", + "attack_level": "5", + "bonuses": "10,20,20,20,20,5,20,10,0,0,0,0,0,0,0", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "5", + "lifepoints": "20", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "5" + }, + { + "id": "6280", + "name": "Goblin", + "examine": "A warrior for Bandos.", + "aggressive": "true", + "attack_level": "5", + "bonuses": "10,20,20,20,20,5,20,10,0,0,0,0,0,0,0", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "5", + "lifepoints": "15", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "5" + }, + { + "id": "6281", + "name": "Goblin", + "examine": "A soldier to the death.", + "aggressive": "true", + "attack_level": "5", + "bonuses": "5,10,10,10,10,10,5,10,5,0,0,0,0,0,0", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6190", + "defence_animation": "6189", + "defence_level": "5", + "lifepoints": "15", + "magic_animation": "6188", + "melee_animation": "6188", + "range_animation": "6188", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "5" + }, + { + "id": "6282", + "name": "Goblin", + "examine": "A soldier to the death.", + "aggressive": "true", + "attack_level": "5", + "bonuses": "5,10,10,10,10,10,5,10,5,0,0,0,0,0,0", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6190", + "defence_animation": "6189", + "defence_level": "5", + "lifepoints": "18", + "magic_animation": "6188", + "melee_animation": "6188", + "range_animation": "6188", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "5" + }, + { + "id": "6283", + "name": "Goblin", + "examine": "A warrior for Bandos.", + "aggressive": "true", + "attack_level": "5", + "bonuses": "10,20,20,20,20,5,20,10,0,0,0,0,0,0,0", + "clue_level": "0", + "combat_audio": "469,472,471", + "death_animation": "6182", + "defence_animation": "6183", + "defence_level": "5", + "lifepoints": "16", + "magic_animation": "6185", + "melee_animation": "6185", + "range_animation": "6185", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "slayer_exp": "16", + "strength_level": "5" + }, + { + "id": "6284", + "name": "Warped terrorbird" + }, + { + "id": "6285", + "name": "Warped terrorbird", + "examine": "You don't think you can harm this terrorbird.", + "aggressive": "true", + "attack_level": "59", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "0", + "defence_level": "59", + "lifepoints": "168", + "magic_animation": "0", + "magic_level": "59", + "melee_animation": "7108", + "projectile": "1468", + "range_animation": "0", + "range_level": "59", + "respawn_delay": "60", + "safespot": null, + "strength_level": "59", + "weakness": "1" + }, + { + "id": "6286", + "name": "Warped terrorbird", + "examine": "You don't think you can harm this terrorbird.", + "aggressive": "true", + "attack_level": "59", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "0", + "defence_level": "59", + "lifepoints": "168", + "magic_animation": "0", + "magic_level": "59", + "melee_animation": "7108", + "projectile": "1468", + "range_animation": "0", + "range_level": "59", + "respawn_delay": "60", + "safespot": null, + "strength_level": "59", + "weakness": "1" + }, + { + "id": "6287", + "name": "Warped terrorbird", + "examine": "You don't think you can harm this terrorbird.", + "aggressive": "true", + "attack_level": "59", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "0", + "defence_level": "59", + "lifepoints": "168", + "magic_animation": "0", + "magic_level": "59", + "melee_animation": "7108", + "projectile": "1468", + "range_animation": "0", + "range_level": "59", + "respawn_delay": "60", + "safespot": null, + "strength_level": "59", + "weakness": "1" + }, + { + "id": "6288", + "name": "Warped terrorbird", + "examine": "You don't think you can harm this terrorbird.", + "aggressive": "true", + "attack_level": "59", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "0", + "defence_level": "59", + "lifepoints": "168", + "magic_animation": "0", + "magic_level": "59", + "melee_animation": "7108", + "projectile": "1468", + "range_animation": "0", + "range_level": "59", + "respawn_delay": "60", + "safespot": null, + "strength_level": "59", + "weakness": "1" + }, + { + "id": "6289", + "name": "Warped terrorbird", + "examine": "You don't think you can harm this terrorbird.", + "aggressive": "true", + "attack_level": "59", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "0", + "defence_level": "59", + "lifepoints": "168", + "magic_animation": "0", + "magic_level": "59", + "melee_animation": "7108", + "projectile": "1468", + "range_animation": "0", + "range_level": "59", + "respawn_delay": "60", + "safespot": null, + "strength_level": "59", + "weakness": "1" + }, + { + "id": "6290", + "name": "Warped terrorbird", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "7110", + "defence_level": "1", + "lifepoints": "154", + "melee_animation": "7108", + "projectile": "1468", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6291", + "name": "Warped terrorbird", + "examine": "You don't think you can harm this terrorbird.", + "aggressive": "true", + "attack_level": "59", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "0", + "defence_level": "59", + "lifepoints": "168", + "magic_animation": "0", + "magic_level": "59", + "melee_animation": "7108", + "projectile": "1468", + "range_animation": "0", + "range_level": "59", + "respawn_delay": "60", + "safespot": null, + "strength_level": "59", + "weakness": "1" + }, + { + "id": "6292", + "name": "Warped terrorbird", + "examine": "You don't think you can harm this terrorbird.", + "aggressive": "true", + "attack_level": "59", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "0", + "defence_level": "59", + "lifepoints": "168", + "magic_animation": "0", + "magic_level": "59", + "melee_animation": "7108", + "projectile": "1468", + "range_animation": "0", + "range_level": "59", + "respawn_delay": "60", + "safespot": null, + "strength_level": "59", + "weakness": "1" + }, + { + "id": "6293", + "name": "Warped terrorbird", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "7110", + "defence_level": "1", + "lifepoints": "154", + "melee_animation": "7108", + "projectile": "1468", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6294", + "name": "Warped terrorbird", + "examine": "You don't think you can harm this terrorbird.", + "aggressive": "true", + "attack_level": "59", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "0", + "defence_level": "59", + "lifepoints": "308", + "magic_animation": "0", + "magic_level": "59", + "melee_animation": "7108", + "projectile": "1468", + "range_animation": "0", + "range_level": "59", + "respawn_delay": "60", + "safespot": null, + "strength_level": "59", + "weakness": "1" + }, + { + "id": "6295", + "name": "Warped terrorbird", + "examine": "You don't think you can harm this terrorbird.", + "aggressive": "true", + "attack_level": "59", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "0", + "defence_level": "59", + "lifepoints": "308", + "magic_animation": "0", + "magic_level": "59", + "melee_animation": "7108", + "projectile": "1468", + "range_animation": "0", + "range_level": "59", + "respawn_delay": "60", + "safespot": null, + "strength_level": "59", + "weakness": "1" + }, + { + "id": "6296", + "name": "Warped tortoise", + "examine": "You don't think you can harm this creature.", + "attack_level": "39", + "attack_speed": "5", + "death_animation": "7091", + "defence_animation": "0", + "defence_level": "52", + "lifepoints": "148", + "magic_animation": "0", + "magic_level": "52", + "melee_animation": "7093", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "39", + "weakness": "4" + }, + { + "id": "6297", + "name": "Warped tortoise", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "7091", + "defence_animation": "7092", + "defence_level": "1", + "lifepoints": "87", + "melee_animation": "7093", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6298", + "name": "Jeffery" + }, + { + "id": "6299", + "name": "Big monolith" + }, + { + "id": "6300", + "name": "Small monolith" + }, + { + "id": "6301", + "name": "Cute creature" + }, + { + "id": "6302", + "name": "Evil creature" + }, + { + "id": "6303", + "name": "Yewnock the engineer" + }, + { + "id": "6304", + "name": "Bolrie" + }, + { + "id": "6305", + "name": "Hazelmere" + }, + { + "id": "6306", + "name": "Bolrie", + "examine": "Annoyingly easy to squish.", + "aggressive": "true", + "attack_level": "1", + "defence_animation": "0", + "defence_level": "2", + "lifepoints": "0", + "magic_animation": "0", + "magic_level": "2", + "melee_animation": "0", + "range_animation": "0", + "range_level": "2", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6307", + "name": "Advisor" + }, + { + "id": "6308", + "name": "King Argenthorg" + }, + { + "id": "6309", + "name": "Prince Argenthorg" + }, + { + "id": "6310", + "name": "Cute creature" + }, + { + "id": "6312", + "name": "Evil creature" + }, + { + "id": "6313", + "name": "Terrorbird servant" + }, + { + "id": "6314", + "name": "Guard no. 21", + "examine": "She looks bored.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6315", + "name": "Guard no. 72", + "examine": "He looks even more bored.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6316", + "name": "Guard no. 21" + }, + { + "id": "6317", + "name": "Guard no. 72" + }, + { + "id": "6318", + "name": "Longramble" + }, + { + "id": "6319", + "name": "Spirit tree" + }, + { + "id": "6321", + "name": "Spirit tree" + }, + { + "id": "6322", + "name": "Warped terrorbird", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "7110", + "defence_level": "1", + "lifepoints": "154", + "melee_animation": "7108", + "projectile": "1468", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6323", + "name": "Warped terrorbird", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "7110", + "defence_level": "1", + "lifepoints": "154", + "melee_animation": "7108", + "projectile": "1468", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6324", + "name": "Warped terrorbird", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "7110", + "defence_level": "1", + "lifepoints": "154", + "melee_animation": "7108", + "projectile": "1468", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6325", + "name": "Warped terrorbird", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "7110", + "defence_level": "1", + "lifepoints": "154", + "melee_animation": "7108", + "projectile": "1468", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6326", + "name": "Warped terrorbird", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "7110", + "defence_level": "1", + "lifepoints": "154", + "melee_animation": "7108", + "projectile": "1468", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6327", + "name": "Warped terrorbird", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "7110", + "defence_level": "1", + "lifepoints": "154", + "melee_animation": "7108", + "projectile": "1468", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6328", + "name": "Warped terrorbird", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "7110", + "defence_level": "1", + "lifepoints": "154", + "melee_animation": "7108", + "projectile": "1468", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6329", + "name": "Warped terrorbird", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "7110", + "defence_level": "1", + "lifepoints": "154", + "melee_animation": "7108", + "projectile": "1468", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6330", + "name": "Warped terrorbird", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "7110", + "defence_level": "1", + "lifepoints": "154", + "melee_animation": "7108", + "projectile": "1468", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6331", + "name": "Warped terrorbird", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "7110", + "defence_level": "1", + "lifepoints": "154", + "melee_animation": "7108", + "projectile": "1468", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6332", + "name": "Warped terrorbird", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "7109", + "defence_animation": "7110", + "defence_level": "1", + "lifepoints": "154", + "melee_animation": "7108", + "projectile": "1468", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6333", + "name": "Child" + }, + { + "id": "6334", + "name": "Child", + "examine": "A child of West Ardougne.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6335", + "name": "Child", + "examine": "A child of West Ardougne.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6336", + "name": "Child", + "examine": "A child of West Ardougne.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6337", + "name": "Child", + "examine": "A child of West Ardougne.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6338", + "name": "Child", + "examine": "A child of West Ardougne.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6339", + "name": "Child", + "examine": "A child of West Ardougne.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6340", + "name": "Child" + }, + { + "id": "6341", + "name": "Child" + }, + { + "id": "6342", + "name": "Child" + }, + { + "id": "6343", + "name": "Child" + }, + { + "id": "6344", + "name": "Child", + "examine": "Duck!", + "aggressive": "true", + "attack_level": "48", + "attack_speed": "5", + "combat_style": "1", + "death_animation": "3922", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "92", + "magic_animation": "0", + "melee_animation": "3920", + "range_animation": "3920", + "range_level": "65", + "respawn_delay": "60", + "safespot": null, + "strength_level": "48", + "weakness": "1" + }, + { + "id": "6345", + "name": "Child" + }, + { + "id": "6346", + "name": "Pirate", + "examine": "This one's had too much to drink!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "20", + "melee_animation": "390", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6347", + "name": "Pirate", + "examine": "This one's had too much to drink!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "20", + "melee_animation": "390", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6348", + "name": "Pirate", + "examine": "This one's had too much to drink!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "20", + "melee_animation": "390", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6349", + "name": "Pirate", + "examine": "This one's had too much to drink!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "20", + "melee_animation": "390", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6350", + "name": "Pirate", + "examine": "This one's had too much to drink!", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "20", + "melee_animation": "390", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6351", + "name": "Pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "23", + "melee_animation": "390", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6352", + "name": "Pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "23", + "melee_animation": "390", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6353", + "name": "Pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "23", + "melee_animation": "390", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6354", + "name": "Pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "23", + "melee_animation": "390", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6355", + "name": "Pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "23", + "melee_animation": "390", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6356", + "name": "Pirate", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "23", + "melee_animation": "390", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6357", + "name": "Street urchin" + }, + { + "id": "6358", + "name": "Street urchin", + "examine": "The mother of all pests!", + "aggressive": "true", + "attack_level": "70", + "attack_speed": "6", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "1428", + "magic_animation": "0", + "magic_level": "70", + "range_level": "70", + "respawn_delay": "60", + "safespot": null, + "strength_level": "70", + "weakness": "10" + }, + { + "id": "6359", + "name": "Street urchin" + }, + { + "id": "6360", + "name": "Street urchin" + }, + { + "id": "6361", + "name": "Street urchin" + }, + { + "id": "6362", + "name": "Eniola" + }, + { + "id": "6363", + "name": "Zamorak warrior", + "examine": "A warrior of Zamorak.", + "aggressive": "true", + "attack_level": "44", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "44", + "lifepoints": "62", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "44", + "weakness": "7" + }, + { + "id": "6364", + "name": "Zamorak warrior", + "examine": "A warrior of Zamorak.", + "aggressive": "true", + "attack_level": "47", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "47", + "lifepoints": "67", + "magic_animation": "0", + "melee_animation": "390", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "47", + "weakness": "7" + }, + { + "id": "6365", + "name": "Zamorak ranger", + "examine": "A ranger of Zamorak.", + "aggressive": "true", + "attack_level": "1", + "combat_style": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "46", + "lifepoints": "65", + "magic_animation": "0", + "melee_animation": "426", + "range_animation": "426", + "range_level": "46", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "1" + }, + { + "id": "6366", + "name": "Zamorak ranger", + "examine": "A ranger of Zamorak.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "46", + "lifepoints": "65", + "magic_animation": "0", + "melee_animation": "426", + "range_animation": "426", + "range_level": "46", + "safespot": null, + "strength_level": "1", + "weakness": "1" + }, + { + "id": "6367", + "name": "Zamorak mage", + "examine": "A mage of Zamorak.", + "aggressive": "true", + "attack_level": "1", + "combat_style": "2", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "49", + "lifepoints": "70", + "magic_animation": "0", + "magic_level": "49", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "6368", + "name": "Zamorak mage", + "examine": "A mage of Zamorak.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "49", + "lifepoints": "70", + "magic_animation": "0", + "magic_level": "49", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "6369", + "name": "Cave lizard", + "examine": "A cave dweller.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "7205", + "defence_animation": "0", + "defence_level": "47", + "lifepoints": "67", + "magic_animation": "0", + "melee_animation": "7207", + "range_animation": "0", + "range_level": "47", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "0" + }, + { + "id": "6370", + "name": "Mage of Zamorak", + "examine": "A representative of the Z.M.I.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6371", + "name": "Zamorak crafter", + "examine": "A Z.M.I. runecrafter.", + "attack_level": "19", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "19", + "lifepoints": "27", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "19", + "weakness": "7" + }, + { + "id": "6372", + "name": "Zamorak crafter", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6373", + "name": "Kennith" + }, + { + "id": "6374", + "name": "Guard dog", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "slayer_exp": "49", + "strength_level": "1" + }, + { + "id": "6375", + "name": "Wizard Cromperty" + }, + { + "id": "6376", + "name": "Jungle spider", + "examine": "A barely visible deadly spider.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "5328", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "5327", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6377", + "name": "Jungle spider", + "examine": "A barely visible deadly spider.", + "aggressive": "true", + "attack_level": "1", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "5328", + "defence_level": "1", + "lifepoints": "25", + "melee_animation": "5327", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6378", + "name": "Tenacious toucan", + "examine": "I wouldn't want to be footing that bill.", + "attack_level": "60", + "attack_speed": "5", + "death_animation": "6779", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "85", + "magic_animation": "0", + "melee_animation": "6775", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "60", + "weakness": "9" + }, + { + "id": "6379", + "name": "Giant ant worker", + "examine": "I wonder how much he can lift.", + "attack_level": "35", + "death_animation": "7238", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "50", + "magic_animation": "0", + "melee_animation": "7237", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "35", + "weakness": "9" + }, + { + "id": "6380", + "name": "Giant ant soldier", + "examine": "Gi-ant-ant-ant-ant...", + "aggressive": "true", + "attack_level": "50", + "death_animation": "7238", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "71", + "magic_animation": "0", + "melee_animation": "7237", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "50", + "weakness": "9" + }, + { + "id": "6381", + "name": "Giant wasp", + "examine": "That stinger has to hurt...", + "aggressive": "true", + "attack_level": "60", + "attack_speed": "5", + "death_animation": "7244", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "85", + "magic_animation": "0", + "melee_animation": "7242", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "60", + "weakness": "9" + }, + { + "id": "6382", + "name": "Pernicious parrot", + "examine": "Polynomial - a parrot that goes without breakfast", + "attack_level": "45", + "attack_speed": "5", + "death_animation": "6777", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "64", + "magic_animation": "0", + "melee_animation": "6775", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "45", + "weakness": "9" + }, + { + "id": "6383", + "name": "Giant wasp", + "examine": "That stinger has to hurt...", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "7244", + "defence_animation": "7243", + "defence_level": "1", + "lifepoints": "37", + "melee_animation": "7242", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6384", + "name": "Karamjan Jungle Eagle" + }, + { + "id": "6385", + "name": "Karamjan Jungle eagle", + "examine": "A very large", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6386", + "name": "Bandit" + }, + { + "id": "6389", + "name": "Gargoyle", + "examine": "Flies like a rock.", + "aggressive": "true", + "attack_level": "75", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,20,20,0,20,20,0,0,0,0,0", + "clue_level": "2", + "combat_audio": "428,430,429", + "death_animation": "1518", + "defence_animation": "9455", + "defence_level": "107", + "lifepoints": "105", + "magic_animation": "1516", + "magic_level": "1", + "melee_animation": "9454", + "range_animation": "1516", + "range_level": "1", + "safespot": null, + "slayer_exp": "105", + "strength_level": "95" + }, + { + "id": "6390", + "name": "Grim Reaper", + "examine": "I wish I could tell where he was looking. What could be beneath that hood?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6391", + "name": "Glough" + }, + { + "id": "6392", + "name": "Oldak" + }, + { + "id": "6393", + "name": "Zanik" + }, + { + "id": "6394", + "name": "Zanik" + }, + { + "id": "6396", + "name": "Zanik" + }, + { + "id": "6398", + "name": "Zanik" + }, + { + "id": "6400", + "name": "Oldak" + }, + { + "id": "6402", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6403", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6404", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6405", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6406", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6407", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6408", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6409", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6410", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6411", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6412", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6413", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6414", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6415", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6416", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6417", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6418", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6419", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6420", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6421", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6422", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6423", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6424", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6425", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6426", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6427", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6428", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6429", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6430", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6431", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6432", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6433", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6434", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6435", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6436", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6437", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6438", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6439", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6440", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6441", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6442", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6443", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6444", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6445", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6446", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6447", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6448", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6449", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6450", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6451", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6452", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6453", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6454", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6455", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6456", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6457", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6458", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6459", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6460", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6461", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6462", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6463", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6464", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6465", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6466", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6467", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6468", + "name": "Skoblin" + }, + { + "id": "6469", + "name": "Snothead", + "examine": "A goblin high priest", + "aggressive": "true", + "attack_level": "14", + "death_animation": "6182", + "defence_animation": "0", + "defence_level": "14", + "lifepoints": "20", + "magic_animation": "0", + "melee_animation": "7317", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "14", + "weakness": "8" + }, + { + "id": "6470", + "name": "Snailfeet", + "examine": "A goblin high priest", + "aggressive": "true", + "attack_level": "13", + "death_animation": "6182", + "defence_animation": "0", + "defence_level": "18", + "lifepoints": "25", + "magic_animation": "0", + "melee_animation": "7317", + "range_animation": "0", + "range_level": "18", + "respawn_delay": "60", + "safespot": null, + "strength_level": "13", + "weakness": "2" + }, + { + "id": "6471", + "name": "Mosschin", + "examine": "A goblin high priest", + "aggressive": "true", + "attack_level": "16", + "death_animation": "6182", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "magic_level": "22", + "melee_animation": "7317", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "16", + "weakness": "5" + }, + { + "id": "6472", + "name": "Redeyes", + "examine": "A goblin high priest", + "aggressive": "true", + "attack_level": "19", + "death_animation": "6182", + "defence_animation": "0", + "defence_level": "26", + "lifepoints": "37", + "magic_animation": "0", + "magic_level": "26", + "melee_animation": "7317", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "19", + "weakness": "5" + }, + { + "id": "6473", + "name": "Strongbones", + "examine": "A goblin high priest", + "aggressive": "true", + "attack_level": "19", + "death_animation": "6182", + "defence_animation": "0", + "defence_level": "26", + "lifepoints": "37", + "magic_animation": "0", + "magic_level": "26", + "melee_animation": "7317", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "19", + "weakness": "5" + }, + { + "id": "6474", + "name": "Snothead" + }, + { + "id": "6475", + "name": "Snailfeet" + }, + { + "id": "6476", + "name": "Mosschin" + }, + { + "id": "6477", + "name": "Redeyes" + }, + { + "id": "6478", + "name": "Strongbones" + }, + { + "id": "6479", + "name": "Grubfoot" + }, + { + "id": "6480", + "name": "Grubfoot" + }, + { + "id": "6482", + "name": "Priest", + "examine": "Priest of the Ekeleshuun tribe.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6483", + "name": "Priest" + }, + { + "id": "6484", + "name": "Priest" + }, + { + "id": "6485", + "name": "Priest" + }, + { + "id": "6486", + "name": "Priest" + }, + { + "id": "6487", + "name": "Priest" + }, + { + "id": "6488", + "name": "Preacher", + "examine": "He is expounding the word of the Big High War God.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6489", + "name": "High priest" + }, + { + "id": "6490", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6491", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6492", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6493", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6494", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6495", + "name": "Goblin", + "attack_level": "1", + "clue_level": "0", + "combat_audio": "469,472,471", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6496", + "name": "Goblin guard", + "examine": "He doesn't look very welcoming.", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6497", + "name": "Goblin guard", + "examine": "He doesn't look very welcoming.", + "attack_level": "1", + "combat_audio": "469,472,471", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6498", + "name": "Guard", + "examine": "A guard wearing blue armour.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6499", + "name": "Guard", + "examine": "A guard wearing orange armour.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6500", + "name": "Guard", + "examine": "A guard wearing black armour.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6501", + "name": "Guard", + "examine": "A guard wearing white armour.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6502", + "name": "Guard", + "examine": "A guard wearing purple armour.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6503", + "name": "Guard", + "examine": "A guard wearing yellow armour.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6504", + "name": "Ghost", + "attack_level": "1", + "combat_audio": "436,439,438", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "slayer_exp": "25", + "strength_level": "1" + }, + { + "id": "6505", + "name": "Registrar 1" + }, + { + "id": "6507", + "name": "Registrar 2", + "examine": "A very noble spider and attendant to the Queen.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6508", + "name": "Registrar 3", + "examine": "The highest ranking of the Spider Queen's servants.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6509", + "name": "Registrar 4", + "examine": "The head of the Spider Queen's army.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6510", + "name": "Jury", + "examine": "Trying hard to hide his identity.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6511", + "name": "Jury" + }, + { + "id": "6512", + "name": "Spectator", + "examine": "Sir Amik's loyal squire.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6513", + "name": "Spectator" + }, + { + "id": "6514", + "name": "Spectator", + "examine": "A being of ore and minerals.", + "attack_level": "1", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "1", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6515", + "name": "Spectator" + }, + { + "id": "6516", + "name": "Spectator", + "examine": "A monkey on a mission.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6517", + "name": "Spectator" + }, + { + "id": "6518", + "name": "Spectator", + "examine": "He works for Doric & Son.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6519", + "name": "Spectator" + }, + { + "id": "6520", + "name": "Head Registrar" + }, + { + "id": "6521", + "name": "Grand Exchange Tutor", + "examine": "Gives an introduction to the Grand Exchange.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6522", + "examine": "Director of the Grand Exchange." + }, + { + "id": "6523", + "name": "Farid Morrisane (ores)", + "examine": "The son of Ali M!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6524", + "name": "Bob Barter (herbs)", + "examine": "He's probably seen better days.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6525", + "name": "Murky Matt (runes)", + "examine": "You can never miss a pirate in disguise.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6526", + "name": "Relobo Blinyo (logs)", + "examine": "A tribal man", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6527", + "name": "Hofuthand (armour and weapons)", + "examine": "He's travelled a long way.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6528", + "examine": "There to help me make my bids." + }, + { + "id": "6529", + "examine": "There to help me make my bids." + }, + { + "id": "6530", + "examine": "There to help me make my bids." + }, + { + "id": "6531", + "examine": "There to help me make my bids." + }, + { + "id": "6532", + "examine": "She can look after my money. Good with money." + }, + { + "id": "6533", + "examine": "She can look after my money. Good with money." + }, + { + "id": "6534", + "examine": "He can look after my money. Good with money." + }, + { + "id": "6535", + "examine": "He can look after my money. Good with money." + }, + { + "id": "6536", + "name": "Registrar 5", + "examine": "Chief architect of the Spider Realm.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6537", + "name": "Mandrith" + }, + { + "id": "6538", + "name": "Banker" + }, + { + "id": "6539", + "name": "Charley the Cleaner" + }, + { + "id": "6540", + "name": "Scotty the Cleaner" + }, + { + "id": "6541", + "name": "Sanchez the Cleaner" + }, + { + "id": "6542", + "name": "Summer Bonde" + }, + { + "id": "6543", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6544", + "name": "", + "attack_level": "1", + "combat_audio": "511,513,512", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6558", + "name": "null", + "examine": "Tapping his feet and looking very bored.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6560", + "name": "null", + "examine": "A huge war chief. ", + "aggressive": "true", + "attack_level": "250", + "attack_speed": "5", + "bonuses": "300,300,300,300,300,300,150,300,300,250,43,96,43,30,0", + "death_animation": "7062", + "defence_animation": "7061", + "defence_level": "250", + "lifepoints": "254", + "magic_animation": "422", + "melee_animation": "422", + "range_animation": "422", + "range_level": "200", + "respawn_delay": "20", + "safespot": null, + "strength_level": "251" + }, + { + "id": "6566", + "name": "Broken grave marker" + }, + { + "id": "6567", + "name": "Collapsing grave marker" + }, + { + "id": "6568", + "name": "Grave marker" + }, + { + "id": "6569", + "name": "Broken grave marker" + }, + { + "id": "6570", + "name": "Collapsing grave marker" + }, + { + "id": "6571", + "name": "Gravestone" + }, + { + "id": "6572", + "name": "Broken gravestone" + }, + { + "id": "6573", + "name": "Collapsing gravestone" + }, + { + "id": "6574", + "name": "Gravestone" + }, + { + "id": "6575", + "name": "Broken gravestone" + }, + { + "id": "6576", + "name": "Collapsing gravestone" + }, + { + "id": "6577", + "name": "Gravestone" + }, + { + "id": "6578", + "name": "Broken gravestone" + }, + { + "id": "6579", + "name": "Collapsing gravestone" + }, + { + "id": "6580", + "name": "Stele" + }, + { + "id": "6581", + "name": "Broken stele" + }, + { + "id": "6582", + "name": "Collapsing stele" + }, + { + "id": "6583", + "name": "Saradomin symbol" + }, + { + "id": "6584", + "name": "Broken Saradomin symbol" + }, + { + "id": "6585", + "name": "Collapsing Saradomin symbol" + }, + { + "id": "6586", + "name": "Zamorak symbol" + }, + { + "id": "6587", + "name": "Broken Zamorak symbol" + }, + { + "id": "6588", + "name": "Collapsing Zamorak symbol" + }, + { + "id": "6589", + "name": "Guthix symbol" + }, + { + "id": "6590", + "name": "Broken Guthix symbol" + }, + { + "id": "6591", + "name": "Collapsing Guthix symbol" + }, + { + "id": "6592", + "name": "Bandos symbol" + }, + { + "id": "6593", + "name": "Broken Bandos symbol" + }, + { + "id": "6594", + "name": "Collapsing Bandos symbol" + }, + { + "id": "6595", + "name": "Armadyl symbol" + }, + { + "id": "6596", + "name": "Broken Armadyl symbol" + }, + { + "id": "6597", + "name": "Collapsing Armadyl symbol" + }, + { + "id": "6598", + "name": "Memorial stone" + }, + { + "id": "6599", + "name": "Broken memorial stone" + }, + { + "id": "6600", + "name": "Collapsing memorial stone" + }, + { + "id": "6601", + "name": "Memorial stone" + }, + { + "id": "6602", + "name": "Broken memorial stone" + }, + { + "id": "6603", + "name": "Collapsing memorial stone" + }, + { + "id": "6604", + "name": "Revenant imp", + "examine": "The essence of an imp slain during the god wars.", + "attack_level": "10", + "combat_audio": "0,0,0", + "death_animation": "7408", + "defence_animation": "7404", + "defence_level": "10", + "lifepoints": "20", + "magic_animation": "7500", + "magic_level": "10", + "melee_animation": "7407", + "range_animation": "7501", + "range_level": "10", + "safespot": null, + "slayer_exp": "10", + "spawn_animation": "7410", + "strength_level": "10" + }, + { + "id": "6605", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6606", + "name": "Revenant icefiend", + "examine": "The ghost of an icefiend slain during the God Wars.", + "attack_level": "27", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "27", + "lifepoints": "40", + "magic_animation": "7506", + "magic_level": "27", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "27", + "safespot": null, + "slayer_exp": "40", + "spawn_animation": "7485", + "strength_level": "27" + }, + { + "id": "6607", + "name": "Revenant werewolf", + "examine": "The ghost of a werewolf slain during the god wars.", + "attack_level": "38", + "clue_level": "2", + "death_animation": "7398", + "defence_animation": "7399", + "defence_level": "38", + "lifepoints": "65", + "magic_animation": "7496", + "magic_level": "38", + "melee_animation": "7397", + "range_animation": "7521", + "range_level": "38", + "safespot": null, + "spawn_animation": "7403", + "strength_level": "38" + }, + { + "id": "6608", + "name": "Revenant hobgoblin", + "examine": "The ghost of a hobgoblin slain during the God Wars.", + "attack_level": "32", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7419", + "defence_animation": "7420", + "defence_level": "32", + "lifepoints": "72", + "magic_animation": "7503", + "magic_level": "32", + "melee_animation": "7418", + "range_animation": "7516", + "range_level": "32", + "safespot": null, + "slayer_exp": "72", + "strength_level": "32" + }, + { + "id": "6609", + "name": "Revenant werewolf", + "examine": "The ghost of a werewolf slain during the god wars.", + "attack_level": "38", + "clue_level": "2", + "death_animation": "7398", + "defence_animation": "7399", + "defence_level": "38", + "lifepoints": "65", + "magic_animation": "7496", + "magic_level": "38", + "melee_animation": "7397", + "range_animation": "7521", + "range_level": "38", + "safespot": null, + "spawn_animation": "7403", + "strength_level": "38" + }, + { + "id": "6610", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6611", + "name": "Revenant knight", + "examine": "A ghost of a knight slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7442", + "defence_animation": "7443", + "defence_level": "80", + "lifepoints": "143", + "magic_animation": "7508", + "magic_level": "80", + "melee_animation": "7441", + "poison_amount": "", + "poisonous": "", + "range_animation": "7522", + "range_level": "80", + "safespot": null, + "slayer_exp": "143", + "spawn_animation": "7440", + "strength_level": "80" + }, + { + "id": "6612", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6613", + "name": "Revenant vampire", + "examine": "The ghost of a vampire slain in the god wars.", + "attack_level": "34", + "clue_level": "1", + "death_animation": "7428", + "defence_animation": "7429", + "defence_level": "34", + "lifepoints": "60", + "magic_animation": "7507", + "magic_level": "34", + "melee_animation": "7427", + "range_animation": "7520", + "range_level": "34", + "safespot": null, + "slayer_exp": "60", + "spawn_animation": "7426", + "strength_level": "34" + }, + { + "id": "6614", + "name": "Revenant werewolf", + "examine": "The ghost of a werewolf slain during the god wars.", + "attack_level": "38", + "clue_level": "2", + "death_animation": "7398", + "defence_animation": "7399", + "defence_level": "38", + "lifepoints": "65", + "magic_animation": "7496", + "magic_level": "38", + "melee_animation": "7397", + "range_animation": "7521", + "range_level": "38", + "safespot": null, + "spawn_animation": "7403", + "strength_level": "38" + }, + { + "id": "6615", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6616", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6617", + "name": "Revenant werewolf", + "examine": "The ghost of a werewolf slain during the god wars.", + "attack_level": "38", + "clue_level": "2", + "death_animation": "7398", + "defence_animation": "7399", + "defence_level": "38", + "lifepoints": "65", + "magic_animation": "7496", + "magic_level": "38", + "melee_animation": "7397", + "range_animation": "7521", + "range_level": "38", + "safespot": null, + "spawn_animation": "7403", + "strength_level": "38" + }, + { + "id": "6618", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6619", + "name": "Revenant knight", + "examine": "A ghost of a knight slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7442", + "defence_animation": "7443", + "defence_level": "80", + "lifepoints": "143", + "magic_animation": "7508", + "magic_level": "80", + "melee_animation": "7441", + "poison_amount": "", + "poisonous": "", + "range_animation": "7522", + "range_level": "80", + "safespot": null, + "slayer_exp": "143", + "spawn_animation": "7440", + "strength_level": "80" + }, + { + "id": "6620", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6621", + "name": "Revenant icefiend", + "examine": "The ghost of an icefiend slain during the God Wars.", + "attack_level": "27", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "27", + "lifepoints": "40", + "magic_animation": "7506", + "magic_level": "27", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "27", + "safespot": null, + "slayer_exp": "40", + "spawn_animation": "7485", + "strength_level": "27" + }, + { + "id": "6622", + "name": "Revenant pyrefiend", + "examine": "The essence of a pyrefiend slain during the god wars.", + "attack_level": "29", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "29", + "lifepoints": "48", + "magic_animation": "7506", + "magic_level": "29", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "29", + "safespot": null, + "slayer_exp": "48", + "spawn_animation": "7485", + "strength_level": "29" + }, + { + "id": "6623", + "name": "Revenant vampire", + "examine": "The ghost of a vampire slain in the god wars.", + "attack_level": "34", + "clue_level": "1", + "death_animation": "7428", + "defence_animation": "7429", + "defence_level": "34", + "lifepoints": "60", + "magic_animation": "7507", + "magic_level": "34", + "melee_animation": "7427", + "range_animation": "7520", + "range_level": "34", + "safespot": null, + "slayer_exp": "60", + "spawn_animation": "7426", + "strength_level": "34" + }, + { + "id": "6624", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6625", + "name": "Revenant werewolf", + "examine": "The ghost of a werewolf slain during the god wars.", + "attack_level": "38", + "clue_level": "2", + "death_animation": "7398", + "defence_animation": "7399", + "defence_level": "38", + "lifepoints": "65", + "magic_animation": "7496", + "magic_level": "38", + "melee_animation": "7397", + "range_animation": "7521", + "range_level": "38", + "safespot": null, + "spawn_animation": "7403", + "strength_level": "38" + }, + { + "id": "6626", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6627", + "name": "Revenant knight", + "examine": "A ghost of a knight slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7442", + "defence_animation": "7443", + "defence_level": "80", + "lifepoints": "143", + "magic_animation": "7508", + "magic_level": "80", + "melee_animation": "7441", + "poison_amount": "", + "poisonous": "", + "range_animation": "7522", + "range_level": "80", + "safespot": null, + "slayer_exp": "143", + "spawn_animation": "7440", + "strength_level": "80" + }, + { + "id": "6628", + "name": "Revenant icefiend", + "examine": "The ghost of an icefiend slain during the God Wars.", + "attack_level": "27", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "27", + "lifepoints": "40", + "magic_animation": "7506", + "magic_level": "27", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "27", + "safespot": null, + "slayer_exp": "40", + "spawn_animation": "7485", + "strength_level": "27" + }, + { + "id": "6629", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6630", + "name": "Revenant knight", + "examine": "A ghost of a knight slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7442", + "defence_animation": "7443", + "defence_level": "80", + "lifepoints": "143", + "magic_animation": "7508", + "magic_level": "80", + "melee_animation": "7441", + "poison_amount": "", + "poisonous": "", + "range_animation": "7522", + "range_level": "80", + "safespot": null, + "slayer_exp": "143", + "spawn_animation": "7440", + "strength_level": "80" + }, + { + "id": "6631", + "name": "Revenant pyrefiend", + "examine": "The essence of a pyrefiend slain during the god wars.", + "attack_level": "29", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "29", + "lifepoints": "48", + "magic_animation": "7506", + "magic_level": "29", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "29", + "safespot": null, + "slayer_exp": "48", + "spawn_animation": "7485", + "strength_level": "29" + }, + { + "id": "6632", + "name": "Revenant werewolf", + "examine": "The ghost of a werewolf slain during the god wars.", + "attack_level": "38", + "clue_level": "2", + "death_animation": "7398", + "defence_animation": "7399", + "defence_level": "38", + "lifepoints": "65", + "magic_animation": "7496", + "magic_level": "38", + "melee_animation": "7397", + "range_animation": "7521", + "range_level": "38", + "safespot": null, + "spawn_animation": "7403", + "strength_level": "38" + }, + { + "id": "6633", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6634", + "name": "Revenant knight", + "examine": "A ghost of a knight slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7442", + "defence_animation": "7443", + "defence_level": "80", + "lifepoints": "143", + "magic_animation": "7508", + "magic_level": "80", + "melee_animation": "7441", + "poison_amount": "", + "poisonous": "", + "range_animation": "7522", + "range_level": "80", + "safespot": null, + "slayer_exp": "143", + "spawn_animation": "7440", + "strength_level": "80" + }, + { + "id": "6635", + "name": "Revenant imp", + "examine": "The essence of an imp slain during the god wars.", + "attack_level": "10", + "combat_audio": "0,0,0", + "death_animation": "7408", + "defence_animation": "7404", + "defence_level": "10", + "lifepoints": "20", + "magic_animation": "7500", + "magic_level": "10", + "melee_animation": "7407", + "range_animation": "7501", + "range_level": "10", + "safespot": null, + "slayer_exp": "10", + "spawn_animation": "7410", + "strength_level": "10" + }, + { + "id": "6636", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6637", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6638", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6639", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6640", + "name": "Revenant icefiend", + "examine": "The ghost of an icefiend slain during the God Wars.", + "attack_level": "27", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "27", + "lifepoints": "40", + "magic_animation": "7506", + "magic_level": "27", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "27", + "safespot": null, + "slayer_exp": "40", + "spawn_animation": "7485", + "strength_level": "27" + }, + { + "id": "6641", + "name": "Revenant pyrefiend", + "examine": "The essence of a pyrefiend slain during the god wars.", + "attack_level": "29", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "29", + "lifepoints": "48", + "magic_animation": "7506", + "magic_level": "29", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "29", + "safespot": null, + "slayer_exp": "48", + "spawn_animation": "7485", + "strength_level": "29" + }, + { + "id": "6642", + "name": "Revenant hobgoblin", + "examine": "The ghost of a hobgoblin slain during the God Wars.", + "attack_level": "32", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7419", + "defence_animation": "7420", + "defence_level": "32", + "lifepoints": "72", + "magic_animation": "7503", + "magic_level": "32", + "melee_animation": "7418", + "range_animation": "7516", + "range_level": "32", + "safespot": null, + "slayer_exp": "72", + "strength_level": "32" + }, + { + "id": "6643", + "name": "Revenant vampire", + "examine": "The ghost of a vampire slain in the god wars.", + "attack_level": "34", + "clue_level": "1", + "death_animation": "7428", + "defence_animation": "7429", + "defence_level": "34", + "lifepoints": "60", + "magic_animation": "7507", + "magic_level": "34", + "melee_animation": "7427", + "range_animation": "7520", + "range_level": "34", + "safespot": null, + "slayer_exp": "60", + "spawn_animation": "7426", + "strength_level": "34" + }, + { + "id": "6644", + "name": "Revenant werewolf", + "examine": "The ghost of a werewolf slain during the god wars.", + "attack_level": "38", + "clue_level": "2", + "death_animation": "7398", + "defence_animation": "7399", + "defence_level": "38", + "lifepoints": "65", + "magic_animation": "7496", + "magic_level": "38", + "melee_animation": "7397", + "range_animation": "7521", + "range_level": "38", + "safespot": null, + "spawn_animation": "7403", + "strength_level": "38" + }, + { + "id": "6645", + "name": "Revenant cyclops", + "examine": "The ghost of a cyclops slain during the god wars.", + "attack_level": "43", + "clue_level": "2", + "death_animation": "7454", + "defence_animation": "7455", + "defence_level": "43", + "lifepoints": "110", + "magic_animation": "7497", + "magic_level": "43", + "melee_animation": "7453", + "range_animation": "7510", + "range_level": "43", + "safespot": null, + "slayer_exp": "110", + "spawn_animation": "7457", + "strength_level": "43", + "weakness": "0" + }, + { + "id": "6646", + "name": "Revenant hellhound", + "examine": "The essence of a hellhound slain during the god wars.", + "attack_level": "50", + "clue_level": "2", + "combat_audio": "3717,3719,3718", + "death_animation": "7461", + "defence_animation": "7462", + "defence_level": "50", + "lifepoints": "80", + "magic_animation": "7515", + "magic_level": "50", + "melee_animation": "7460", + "range_animation": "7501", + "range_level": "50", + "safespot": null, + "slayer_exp": "80", + "spawn_animation": "7464", + "strength_level": "50" + }, + { + "id": "6647", + "name": "Revenant demon", + "examine": "The essence of a demon slain during the god wars.", + "attack_level": "60", + "clue_level": "2", + "combat_audio": "400,404,403", + "death_animation": "7475", + "defence_animation": "7476", + "defence_level": "60", + "lifepoints": "80", + "magic_animation": "7498", + "magic_level": "60", + "melee_animation": "7474", + "range_animation": "7512", + "range_level": "60", + "safespot": null, + "slayer_exp": "80", + "spawn_animation": "7478", + "strength_level": "60" + }, + { + "id": "6648", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6649", + "name": "Revenant dark beast", + "examine": "The ghost of a dark beast slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7468", + "defence_animation": "7469", + "defence_level": "80", + "lifepoints": "140", + "magic_animation": "7515", + "melee_animation": "7467", + "range_animation": "7514", + "range_level": "80", + "safespot": null, + "slayer_exp": "140", + "spawn_animation": "7471", + "strength_level": "80" + }, + { + "id": "6650", + "name": "Revenant knight", + "examine": "A ghost of a knight slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7442", + "defence_animation": "7443", + "defence_level": "80", + "lifepoints": "143", + "magic_animation": "7508", + "magic_level": "80", + "melee_animation": "7441", + "poison_amount": "", + "poisonous": "", + "range_animation": "7522", + "range_level": "80", + "safespot": null, + "slayer_exp": "143", + "spawn_animation": "7440", + "strength_level": "80" + }, + { + "id": "6651", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6652", + "name": "Revenant vampire", + "examine": "The ghost of a vampire slain in the god wars.", + "attack_level": "34", + "clue_level": "1", + "death_animation": "7428", + "defence_animation": "7429", + "defence_level": "34", + "lifepoints": "60", + "magic_animation": "7507", + "magic_level": "34", + "melee_animation": "7427", + "range_animation": "7520", + "range_level": "34", + "safespot": null, + "slayer_exp": "60", + "spawn_animation": "7426", + "strength_level": "34" + }, + { + "id": "6653", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6654", + "name": "Revenant knight", + "examine": "A ghost of a knight slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7442", + "defence_animation": "7443", + "defence_level": "80", + "lifepoints": "143", + "magic_animation": "7508", + "magic_level": "80", + "melee_animation": "7441", + "poison_amount": "", + "poisonous": "", + "range_animation": "7522", + "range_level": "80", + "safespot": null, + "slayer_exp": "143", + "spawn_animation": "7440", + "strength_level": "80" + }, + { + "id": "6655", + "name": "Revenant imp", + "examine": "The essence of an imp slain during the god wars.", + "attack_level": "10", + "combat_audio": "0,0,0", + "death_animation": "7408", + "defence_animation": "7404", + "defence_level": "10", + "lifepoints": "20", + "magic_animation": "7500", + "magic_level": "10", + "melee_animation": "7407", + "range_animation": "7501", + "range_level": "10", + "safespot": null, + "slayer_exp": "10", + "spawn_animation": "7410", + "strength_level": "10" + }, + { + "id": "6656", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6657", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "22", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "22", + "lifepoints": "34", + "magic_animation": "7499", + "magic_level": "22", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "22", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "22" + }, + { + "id": "6658", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6659", + "name": "Revenant icefiend", + "examine": "The ghost of an icefiend slain during the God Wars.", + "attack_level": "27", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "27", + "lifepoints": "40", + "magic_animation": "7506", + "magic_level": "27", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "27", + "safespot": null, + "slayer_exp": "40", + "spawn_animation": "7485", + "strength_level": "27" + }, + { + "id": "6660", + "name": "Revenant pyrefiend", + "examine": "The essence of a pyrefiend slain during the god wars.", + "attack_level": "29", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "29", + "lifepoints": "48", + "magic_animation": "7506", + "magic_level": "29", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "29", + "safespot": null, + "slayer_exp": "48", + "spawn_animation": "7485", + "strength_level": "29" + }, + { + "id": "6661", + "name": "Revenant hobgoblin", + "examine": "The ghost of a hobgoblin slain during the God Wars.", + "attack_level": "32", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7419", + "defence_animation": "7420", + "defence_level": "32", + "lifepoints": "72", + "magic_animation": "7503", + "magic_level": "32", + "melee_animation": "7418", + "range_animation": "7516", + "range_level": "32", + "safespot": null, + "slayer_exp": "72", + "strength_level": "32" + }, + { + "id": "6662", + "name": "Revenant vampire", + "examine": "The ghost of a vampire slain in the god wars.", + "attack_level": "34", + "clue_level": "1", + "death_animation": "7428", + "defence_animation": "7429", + "defence_level": "34", + "lifepoints": "60", + "magic_animation": "7507", + "magic_level": "34", + "melee_animation": "7427", + "range_animation": "7520", + "range_level": "34", + "safespot": null, + "slayer_exp": "60", + "spawn_animation": "7426", + "strength_level": "34" + }, + { + "id": "6663", + "name": "Revenant werewolf", + "examine": "The ghost of a werewolf slain during the god wars.", + "attack_level": "38", + "clue_level": "2", + "death_animation": "7398", + "defence_animation": "7399", + "defence_level": "38", + "lifepoints": "65", + "magic_animation": "7496", + "magic_level": "38", + "melee_animation": "7397", + "range_animation": "7521", + "range_level": "38", + "safespot": null, + "spawn_animation": "7403", + "strength_level": "38" + }, + { + "id": "6664", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "poisonous": "", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6665", + "name": "Revenant knight", + "examine": "A ghost of a knight slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7442", + "defence_animation": "7443", + "defence_level": "80", + "lifepoints": "143", + "magic_animation": "7508", + "magic_level": "80", + "melee_animation": "7441", + "poison_amount": "", + "poisonous": "", + "range_animation": "7522", + "range_level": "80", + "safespot": null, + "slayer_exp": "143", + "spawn_animation": "7440", + "strength_level": "80" + }, + { + "id": "6666", + "name": "Revenant imp", + "examine": "The essence of an imp slain during the god wars.", + "attack_level": "10", + "combat_audio": "0,0,0", + "death_animation": "7408", + "defence_animation": "7404", + "defence_level": "10", + "lifepoints": "20", + "magic_animation": "7500", + "magic_level": "10", + "melee_animation": "7407", + "range_animation": "7501", + "range_level": "10", + "safespot": null, + "slayer_exp": "10", + "spawn_animation": "7410", + "strength_level": "10" + }, + { + "id": "6667", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6668", + "name": "Revenant pyrefiend", + "examine": "The essence of a pyrefiend slain during the god wars.", + "attack_level": "29", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "29", + "lifepoints": "48", + "magic_animation": "7506", + "magic_level": "29", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "29", + "safespot": null, + "slayer_exp": "48", + "spawn_animation": "7485", + "strength_level": "29" + }, + { + "id": "6669", + "name": "Revenant vampire", + "examine": "The ghost of a vampire slain in the god wars.", + "attack_level": "34", + "clue_level": "1", + "death_animation": "7428", + "defence_animation": "7429", + "defence_level": "34", + "lifepoints": "60", + "magic_animation": "7507", + "magic_level": "34", + "melee_animation": "7427", + "range_animation": "7520", + "range_level": "34", + "safespot": null, + "slayer_exp": "60", + "spawn_animation": "7426", + "strength_level": "34" + }, + { + "id": "6670", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6671", + "name": "Revenant vampire", + "examine": "The ghost of a vampire slain in the god wars.", + "attack_level": "34", + "clue_level": "1", + "death_animation": "7428", + "defence_animation": "7429", + "defence_level": "34", + "lifepoints": "60", + "magic_animation": "7507", + "magic_level": "34", + "melee_animation": "7427", + "range_animation": "7520", + "range_level": "34", + "safespot": null, + "slayer_exp": "60", + "spawn_animation": "7426", + "strength_level": "34" + }, + { + "id": "6672", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6673", + "name": "Revenant knight", + "examine": "A ghost of a knight slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7442", + "defence_animation": "7443", + "defence_level": "80", + "lifepoints": "143", + "magic_animation": "7508", + "magic_level": "80", + "melee_animation": "7441", + "poison_amount": "", + "poisonous": "", + "prj_height": "", + "range_animation": "7522", + "range_level": "80", + "safespot": null, + "slayer_exp": "143", + "spawn_animation": "7440", + "strength_level": "80" + }, + { + "id": "6674", + "name": "Revenant vampire", + "examine": "The ghost of a vampire slain in the god wars.", + "attack_level": "34", + "clue_level": "1", + "death_animation": "7428", + "defence_animation": "7429", + "defence_level": "34", + "lifepoints": "60", + "magic_animation": "7507", + "magic_level": "34", + "melee_animation": "7427", + "range_animation": "7520", + "range_level": "34", + "safespot": null, + "slayer_exp": "60", + "spawn_animation": "7426", + "strength_level": "34" + }, + { + "id": "6675", + "name": "Revenant werewolf", + "examine": "The ghost of a werewolf slain during the god wars.", + "attack_level": "38", + "clue_level": "2", + "death_animation": "7398", + "defence_animation": "7399", + "defence_level": "38", + "lifepoints": "65", + "magic_animation": "7496", + "magic_level": "38", + "melee_animation": "7397", + "range_animation": "7521", + "range_level": "38", + "safespot": null, + "spawn_animation": "7403", + "strength_level": "38" + }, + { + "id": "6676", + "name": "Revenant knight", + "examine": "A ghost of a knight slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7442", + "defence_animation": "7443", + "defence_level": "80", + "lifepoints": "143", + "magic_animation": "7508", + "magic_level": "80", + "melee_animation": "7441", + "poison_amount": "", + "poisonous": "", + "range_animation": "7522", + "range_level": "80", + "safespot": null, + "slayer_exp": "143", + "spawn_animation": "7440", + "strength_level": "80" + }, + { + "id": "6677", + "name": "Revenant imp", + "examine": "The essence of an imp slain during the god wars.", + "attack_level": "10", + "combat_audio": "0,0,0", + "death_animation": "7408", + "defence_animation": "7404", + "defence_level": "10", + "lifepoints": "20", + "magic_animation": "7500", + "magic_level": "10", + "melee_animation": "7407", + "range_animation": "7501", + "range_level": "10", + "safespot": null, + "slayer_exp": "10", + "spawn_animation": "7410", + "strength_level": "10" + }, + { + "id": "6678", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6679", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6680", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6681", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6682", + "name": "Revenant icefiend", + "examine": "The ghost of an icefiend slain during the God Wars.", + "attack_level": "27", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "27", + "lifepoints": "40", + "magic_animation": "7506", + "magic_level": "27", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "27", + "safespot": null, + "slayer_exp": "40", + "spawn_animation": "7485", + "strength_level": "27" + }, + { + "id": "6683", + "name": "Revenant pyrefiend", + "examine": "The essence of a pyrefiend slain during the god wars.", + "attack_level": "29", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "29", + "lifepoints": "48", + "magic_animation": "7506", + "magic_level": "29", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "29", + "safespot": null, + "slayer_exp": "48", + "spawn_animation": "7485", + "strength_level": "29" + }, + { + "id": "6684", + "name": "Revenant hobgoblin", + "examine": "The ghost of a hobgoblin slain during the God Wars.", + "attack_level": "32", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7419", + "defence_animation": "7420", + "defence_level": "32", + "lifepoints": "72", + "magic_animation": "7503", + "magic_level": "32", + "melee_animation": "7418", + "range_animation": "7516", + "range_level": "32", + "safespot": null, + "slayer_exp": "72", + "strength_level": "32" + }, + { + "id": "6685", + "name": "Revenant vampire", + "examine": "The ghost of a vampire slain in the god wars.", + "attack_level": "34", + "clue_level": "1", + "death_animation": "7428", + "defence_animation": "7429", + "defence_level": "34", + "lifepoints": "60", + "magic_animation": "7507", + "magic_level": "34", + "melee_animation": "7427", + "range_animation": "7520", + "range_level": "34", + "safespot": null, + "slayer_exp": "60", + "spawn_animation": "7426", + "strength_level": "34" + }, + { + "id": "6686", + "name": "Revenant werewolf", + "examine": "The ghost of a werewolf slain during the god wars.", + "attack_level": "38", + "clue_level": "2", + "death_animation": "7398", + "defence_animation": "7399", + "defence_level": "38", + "lifepoints": "65", + "magic_animation": "7496", + "magic_level": "38", + "melee_animation": "7397", + "range_animation": "7521", + "range_level": "38", + "safespot": null, + "spawn_animation": "7403", + "strength_level": "38" + }, + { + "id": "6687", + "name": "Revenant cyclops", + "examine": "The ghost of a cyclops slain during the god wars.", + "attack_level": "43", + "clue_level": "2", + "death_animation": "7454", + "defence_animation": "7455", + "defence_level": "43", + "lifepoints": "110", + "magic_animation": "7497", + "magic_level": "43", + "melee_animation": "7453", + "range_animation": "7510", + "range_level": "43", + "safespot": null, + "slayer_exp": "110", + "spawn_animation": "7457", + "strength_level": "43", + "weakness": "0" + }, + { + "id": "6688", + "name": "Revenant hellhound", + "examine": "The essence of a hellhound slain during the god wars.", + "attack_level": "50", + "clue_level": "2", + "combat_audio": "3717,3719,3718", + "death_animation": "7461", + "defence_animation": "7462", + "defence_level": "50", + "lifepoints": "80", + "magic_animation": "7515", + "magic_level": "50", + "melee_animation": "7460", + "range_animation": "7501", + "range_level": "50", + "safespot": null, + "slayer_exp": "80", + "spawn_animation": "7464", + "strength_level": "50" + }, + { + "id": "6689", + "name": "Revenant demon", + "examine": "The essence of a demon slain during the god wars.", + "attack_level": "60", + "clue_level": "2", + "combat_audio": "400,404,403", + "death_animation": "7475", + "defence_animation": "7476", + "defence_level": "60", + "lifepoints": "80", + "magic_animation": "7498", + "magic_level": "60", + "melee_animation": "7474", + "range_animation": "7512", + "range_level": "60", + "safespot": null, + "slayer_exp": "80", + "spawn_animation": "7478", + "strength_level": "60" + }, + { + "id": "6690", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6691", + "name": "Revenant dark beast", + "examine": "The ghost of a dark beast slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7468", + "defence_animation": "7469", + "defence_level": "80", + "lifepoints": "140", + "magic_animation": "7515", + "melee_animation": "7467", + "range_animation": "7514", + "range_level": "80", + "safespot": null, + "slayer_exp": "140", + "spawn_animation": "7471", + "strength_level": "80" + }, + { + "id": "6692", + "name": "Revenant knight", + "examine": "A ghost of a knight slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7442", + "defence_animation": "7443", + "defence_level": "80", + "lifepoints": "143", + "magic_animation": "7508", + "magic_level": "80", + "melee_animation": "7441", + "poison_amount": "", + "poisonous": "", + "range_animation": "7522", + "range_level": "80", + "safespot": null, + "slayer_exp": "143", + "spawn_animation": "7440", + "strength_level": "80" + }, + { + "id": "6693", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6694", + "name": "Revenant icefiend", + "examine": "The ghost of an icefiend slain during the God Wars.", + "attack_level": "27", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "27", + "lifepoints": "40", + "magic_animation": "7506", + "magic_level": "27", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "27", + "safespot": null, + "slayer_exp": "40", + "spawn_animation": "7485", + "strength_level": "27" + }, + { + "id": "6695", + "name": "Revenant vampire", + "examine": "The ghost of a vampire slain in the god wars.", + "attack_level": "34", + "clue_level": "1", + "death_animation": "7428", + "defence_animation": "7429", + "defence_level": "34", + "lifepoints": "60", + "magic_animation": "7507", + "magic_level": "34", + "melee_animation": "7427", + "range_animation": "7520", + "range_level": "34", + "safespot": null, + "slayer_exp": "60", + "spawn_animation": "7426", + "strength_level": "34" + }, + { + "id": "6696", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6697", + "name": "Revenant imp", + "examine": "The essence of an imp slain during the god wars.", + "attack_level": "10", + "combat_audio": "0,0,0", + "death_animation": "7408", + "defence_animation": "7404", + "defence_level": "10", + "lifepoints": "20", + "magic_animation": "7500", + "magic_level": "10", + "melee_animation": "7407", + "range_animation": "7501", + "range_level": "10", + "safespot": null, + "slayer_exp": "10", + "spawn_animation": "7410", + "strength_level": "10" + }, + { + "id": "6698", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6699", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6700", + "name": "Revenant vampire", + "examine": "The ghost of a vampire slain in the god wars.", + "attack_level": "34", + "clue_level": "1", + "death_animation": "7428", + "defence_animation": "7429", + "defence_level": "34", + "lifepoints": "60", + "magic_animation": "7507", + "magic_level": "34", + "melee_animation": "7427", + "range_animation": "7520", + "range_level": "34", + "safespot": null, + "slayer_exp": "60", + "spawn_animation": "7426", + "strength_level": "34" + }, + { + "id": "6701", + "name": "Revenant werewolf", + "examine": "The ghost of a werewolf slain during the god wars.", + "attack_level": "38", + "clue_level": "2", + "death_animation": "7398", + "defence_animation": "7399", + "defence_level": "38", + "lifepoints": "65", + "magic_animation": "7496", + "magic_level": "38", + "melee_animation": "7397", + "range_animation": "7521", + "range_level": "38", + "safespot": null, + "spawn_animation": "7403", + "strength_level": "38" + }, + { + "id": "6702", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6703", + "name": "Revenant imp", + "examine": "The essence of an imp slain during the god wars.", + "attack_level": "10", + "combat_audio": "0,0,0", + "death_animation": "7408", + "defence_animation": "7404", + "defence_level": "10", + "lifepoints": "20", + "magic_animation": "7500", + "magic_level": "10", + "melee_animation": "7407", + "range_animation": "7501", + "range_level": "10", + "safespot": null, + "slayer_exp": "10", + "spawn_animation": "7410", + "strength_level": "10" + }, + { + "id": "6704", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6705", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6706", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6707", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6708", + "name": "Revenant icefiend", + "examine": "The ghost of an icefiend slain during the God Wars.", + "attack_level": "27", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "27", + "lifepoints": "40", + "magic_animation": "7506", + "magic_level": "27", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "27", + "safespot": null, + "slayer_exp": "40", + "spawn_animation": "7485", + "strength_level": "27" + }, + { + "id": "6709", + "name": "Revenant pyrefiend", + "examine": "The essence of a pyrefiend slain during the god wars.", + "attack_level": "29", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "29", + "lifepoints": "48", + "magic_animation": "7506", + "magic_level": "29", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "29", + "safespot": null, + "slayer_exp": "48", + "spawn_animation": "7485", + "strength_level": "29" + }, + { + "id": "6710", + "name": "Revenant hobgoblin", + "examine": "The ghost of a hobgoblin slain during the God Wars.", + "attack_level": "32", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7419", + "defence_animation": "7420", + "defence_level": "32", + "lifepoints": "72", + "magic_animation": "7503", + "magic_level": "32", + "melee_animation": "7418", + "range_animation": "7516", + "range_level": "32", + "safespot": null, + "slayer_exp": "72", + "strength_level": "32" + }, + { + "id": "6711", + "name": "Revenant vampire", + "examine": "The ghost of a vampire slain in the god wars.", + "attack_level": "34", + "clue_level": "1", + "death_animation": "7428", + "defence_animation": "7429", + "defence_level": "34", + "lifepoints": "60", + "magic_animation": "7507", + "magic_level": "34", + "melee_animation": "7427", + "range_animation": "7520", + "range_level": "34", + "safespot": null, + "slayer_exp": "60", + "spawn_animation": "7426", + "strength_level": "34" + }, + { + "id": "6712", + "name": "Revenant werewolf", + "examine": "The ghost of a werewolf slain during the god wars.", + "attack_level": "38", + "clue_level": "2", + "death_animation": "7398", + "defence_animation": "7399", + "defence_level": "38", + "lifepoints": "65", + "magic_animation": "7496", + "magic_level": "38", + "melee_animation": "7397", + "range_animation": "7521", + "range_level": "38", + "safespot": null, + "spawn_animation": "7403", + "strength_level": "38" + }, + { + "id": "6713", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6714", + "name": "Revenant knight", + "examine": "A ghost of a knight slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7442", + "defence_animation": "7443", + "defence_level": "80", + "lifepoints": "143", + "magic_animation": "7508", + "magic_level": "80", + "melee_animation": "7441", + "poison_amount": "", + "poisonous": "", + "range_animation": "7522", + "range_level": "80", + "safespot": null, + "slayer_exp": "143", + "spawn_animation": "7440", + "strength_level": "80" + }, + { + "id": "6715", + "name": "Revenant imp", + "examine": "The essence of an imp slain during the god wars.", + "attack_level": "10", + "combat_audio": "0,0,0", + "death_animation": "7408", + "defence_animation": "7404", + "defence_level": "10", + "lifepoints": "20", + "magic_animation": "7500", + "magic_level": "10", + "melee_animation": "7407", + "range_animation": "7501", + "range_level": "10", + "safespot": null, + "slayer_exp": "10", + "spawn_animation": "7410", + "strength_level": "10" + }, + { + "id": "6716", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6717", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6718", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6719", + "name": "Revenant goblin", + "examine": "The ghost of a goblin slain during the god wars.", + "attack_level": "12", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7448", + "defence_animation": "7450", + "defence_level": "12", + "lifepoints": "24", + "magic_animation": "7499", + "magic_level": "12", + "melee_animation": "7449", + "range_animation": "7513", + "range_level": "12", + "safespot": null, + "spawn_animation": "7447", + "strength_level": "12" + }, + { + "id": "6720", + "name": "Revenant icefiend", + "examine": "The ghost of an icefiend slain during the God Wars.", + "attack_level": "27", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "27", + "lifepoints": "40", + "magic_animation": "7506", + "magic_level": "27", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "27", + "safespot": null, + "slayer_exp": "40", + "spawn_animation": "7485", + "strength_level": "27" + }, + { + "id": "6721", + "name": "Revenant pyrefiend", + "examine": "The essence of a pyrefiend slain during the god wars.", + "attack_level": "29", + "attack_speed": "3", + "clue_level": "1", + "death_animation": "7482", + "defence_animation": "7483", + "defence_level": "29", + "lifepoints": "48", + "magic_animation": "7506", + "magic_level": "29", + "melee_animation": "7481", + "range_animation": "7519", + "range_level": "29", + "safespot": null, + "slayer_exp": "48", + "spawn_animation": "7485", + "strength_level": "29" + }, + { + "id": "6722", + "name": "Revenant hobgoblin", + "examine": "The ghost of a hobgoblin slain during the God Wars.", + "attack_level": "32", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7419", + "defence_animation": "7420", + "defence_level": "32", + "lifepoints": "72", + "magic_animation": "7503", + "magic_level": "32", + "melee_animation": "7418", + "range_animation": "7516", + "range_level": "32", + "safespot": null, + "slayer_exp": "72", + "strength_level": "32" + }, + { + "id": "6723", + "name": "Revenant vampire", + "examine": "The ghost of a vampire slain in the god wars.", + "attack_level": "34", + "clue_level": "1", + "death_animation": "7428", + "defence_animation": "7429", + "defence_level": "34", + "lifepoints": "60", + "magic_animation": "7507", + "magic_level": "34", + "melee_animation": "7427", + "range_animation": "7520", + "range_level": "34", + "safespot": null, + "slayer_exp": "60", + "spawn_animation": "7426", + "strength_level": "34" + }, + { + "id": "6724", + "name": "Revenant werewolf", + "examine": "The ghost of a werewolf slain during the god wars.", + "attack_level": "38", + "clue_level": "2", + "death_animation": "7398", + "defence_animation": "7399", + "defence_level": "38", + "lifepoints": "65", + "magic_animation": "7496", + "magic_level": "38", + "melee_animation": "7397", + "range_animation": "7521", + "range_level": "38", + "safespot": null, + "spawn_animation": "7403", + "strength_level": "38" + }, + { + "id": "6725", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6726", + "name": "Revenant knight", + "examine": "A ghost of a knight slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7442", + "defence_animation": "7443", + "defence_level": "80", + "lifepoints": "143", + "magic_animation": "7508", + "magic_level": "80", + "melee_animation": "7441", + "poison_amount": "", + "poisonous": "", + "range_animation": "7522", + "range_level": "80", + "safespot": null, + "slayer_exp": "143", + "spawn_animation": "7440", + "strength_level": "80" + }, + { + "id": "6727", + "name": "Revenant hobgoblin", + "examine": "The ghost of a hobgoblin slain during the God Wars.", + "attack_level": "32", + "clue_level": "1", + "combat_audio": "469,472,471", + "death_animation": "7419", + "defence_animation": "7420", + "defence_level": "32", + "lifepoints": "72", + "magic_animation": "7503", + "magic_level": "32", + "melee_animation": "7418", + "range_animation": "7516", + "range_level": "32", + "safespot": null, + "slayer_exp": "72", + "strength_level": "32" + }, + { + "id": "6728", + "name": "Revenant werewolf", + "examine": "The ghost of a werewolf slain during the god wars.", + "attack_level": "38", + "clue_level": "2", + "death_animation": "7398", + "defence_animation": "7399", + "defence_level": "38", + "lifepoints": "65", + "magic_animation": "7496", + "magic_level": "38", + "melee_animation": "7397", + "range_animation": "7521", + "range_level": "38", + "safespot": null, + "spawn_animation": "7403", + "strength_level": "38" + }, + { + "id": "6729", + "name": "Revenant ork", + "examine": "A ghost of an ork slain during the god wars.", + "attack_level": "70", + "clue_level": "2", + "death_animation": "7412", + "defence_animation": "7413", + "defence_level": "70", + "lifepoints": "105", + "magic_animation": "7505", + "magic_level": "70", + "melee_animation": "7411", + "range_animation": "7518", + "range_level": "70", + "safespot": null, + "strength_level": "70" + }, + { + "id": "6730", + "name": "Revenant knight", + "examine": "A ghost of a knight slain during the god wars.", + "attack_level": "80", + "clue_level": "2", + "death_animation": "7442", + "defence_animation": "7443", + "defence_level": "80", + "lifepoints": "143", + "magic_animation": "7508", + "magic_level": "80", + "melee_animation": "7441", + "poison_amount": "", + "poisonous": "", + "range_animation": "7522", + "range_level": "80", + "safespot": null, + "slayer_exp": "143", + "spawn_animation": "7440", + "strength_level": "80" + }, + { + "id": "6731", + "name": "Queen of Snow", + "examine": "Her lack of body heat is unsettling.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "movement_radius": "5", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6732", + "name": "Snow imp" + }, + { + "id": "6733", + "name": "Snow imp" + }, + { + "id": "6734", + "name": "Snow imp" + }, + { + "id": "6735", + "name": "Snow imp" + }, + { + "id": "6736", + "name": "Snow imp" + }, + { + "id": "6737", + "name": "Snow imp" + }, + { + "id": "6738", + "name": "Snow imp" + }, + { + "id": "6739", + "name": "Snow imp", + "examine": "It looks right at home here.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6740", + "name": "Snow", + "examine": "Snowflakes swirling in the wind.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6741", + "name": "Snow" + }, + { + "id": "6742", + "name": "Barbarian Snowman", + "examine": "A helmetted, barbarian snowman.", + "agg_radius": "", + "combat_audio": "12,3295,3287", + "death_animation": "7560", + "defence_animation": "7559", + "defence_level": "1", + "lifepoints": "20", + "melee_animation": "7565" + }, + { + "id": "6743", + "name": "Dragon snowman", + "examine": "A snowman in fake dragon armour.", + "attack_level": "1", + "combat_audio": "29,3295,3287", + "death_animation": "7560", + "defence_animation": "7559", + "defence_level": "1", + "lifepoints": "20", + "melee_animation": "7558", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6744", + "name": "Dwarf Snowman", + "examine": "A snow dwarf.", + "combat_audio": "12,3295,3287", + "death_animation": "7560", + "defence_animation": "7559", + "defence_level": "1", + "lifepoints": "20", + "melee_animation": "7565" + }, + { + "id": "6745", + "name": "Pirate snowman", + "examine": "Arr!", + "attack_level": "1", + "combat_audio": "29,3295,3287", + "death_animation": "7560", + "defence_animation": "7559", + "defence_level": "1", + "lifepoints": "20", + "melee_animation": "7558", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6746", + "name": "Snowman", + "examine": "A traditional snowman." + }, + { + "id": "6747", + "name": "Snow ranger", + "examine": "A snowman armed with a holly bow.", + "attack_level": "30", + "defence_level": "10", + "lifepoints": "30", + "range_level": "30", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6748", + "name": "Snow ranger", + "examine": "A snowman armed with an ice sword.", + "attack_level": "30", + "defence_level": "10", + "lifepoints": "20", + "magic_level": "30", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6749", + "name": "Snow mage", + "examine": "A snowman armed with a winter staff.", + "attack_level": "30", + "defence_level": "10", + "lifepoints": "20", + "range_level": "30", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6750", + "name": "Pet shop owner", + "examine": "The lady of the pet shop." + }, + { + "id": "6751", + "name": "Bulldog" + }, + { + "id": "6753", + "name": "Mummy" + }, + { + "id": "6754", + "name": "Mummy" + }, + { + "id": "6755", + "name": "Mummy" + }, + { + "id": "6756", + "name": "Mummy" + }, + { + "id": "6757", + "name": "Mummy" + }, + { + "id": "6758", + "name": "Mummy" + }, + { + "id": "6759", + "name": "Mummy" + }, + { + "id": "6760", + "name": "Mummy" + }, + { + "id": "6761", + "name": "Dried zombie", + "examine": "Cut-down and dried.", + "attack_level": "48", + "attack_speed": "5", + "death_animation": "5569", + "defence_animation": "0", + "defence_level": "48", + "lifepoints": "68", + "magic_animation": "0", + "melee_animation": "5568", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "48", + "weakness": "7" + }, + { + "id": "6762", + "name": "Dried zombie", + "examine": "Needs moisturising.", + "attack_level": "48", + "attack_speed": "5", + "death_animation": "5569", + "defence_animation": "0", + "defence_level": "48", + "lifepoints": "68", + "magic_animation": "0", + "melee_animation": "5568", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "48", + "weakness": "7" + }, + { + "id": "6763", + "name": "Dried zombie", + "examine": "I bet it's parched.", + "attack_level": "48", + "attack_speed": "5", + "death_animation": "5569", + "defence_animation": "0", + "defence_level": "48", + "lifepoints": "68", + "magic_animation": "0", + "melee_animation": "5568", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "48", + "weakness": "7" + }, + { + "id": "6764", + "name": "Skeleton", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "1", + "lifepoints": "97", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6765", + "name": "Skeleton", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "1", + "lifepoints": "108", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6766", + "name": "Skeleton", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6767", + "name": "Skeleton", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "1", + "lifepoints": "115", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6768", + "name": "Skeleton", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "774,775,777", + "death_animation": "5491", + "defence_animation": "5513", + "defence_level": "1", + "lifepoints": "140", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6769", + "name": "Doorman", + "examine": "A guard.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6770", + "name": "Giant scarab", + "examine": "A huge beast of a beetle.", + "aggressive": "true", + "attack_level": "49", + "death_animation": "7595", + "defence_animation": "0", + "defence_level": "66", + "lifepoints": "285", + "magic_animation": "0", + "melee_animation": "7596", + "range_animation": "0", + "range_level": "66", + "safespot": null, + "strength_level": "49", + "weakness": "2" + }, + { + "id": "6771", + "name": "Giant scarab" + }, + { + "id": "6772", + "name": "Scarab larva", + "examine": "It's not quite small enough to stamp upon.", + "attack_level": "18", + "death_animation": "7656", + "defence_animation": "0", + "defence_level": "18", + "lifepoints": "25", + "magic_animation": "0", + "melee_animation": "7657", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "18", + "weakness": "9" + }, + { + "id": "6773", + "name": "Scabaras ranger", + "examine": "Bred to shoot you down.", + "aggressive": "true", + "attack_level": "41", + "combat_style": "1", + "death_animation": "7609", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "157", + "magic_animation": "0", + "melee_animation": "7607", + "projectile": "11", + "range_animation": "7607", + "range_level": "55", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "18", + "strength_level": "41", + "weakness": "2" + }, + { + "id": "6774", + "name": "Scabaras lancer", + "examine": "It might be angry...it's hard to tell.", + "aggressive": "true", + "attack_level": "55", + "death_animation": "7614", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "7612", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "55", + "weakness": "9" + }, + { + "id": "6775", + "name": "Scabaras priest" + }, + { + "id": "6776", + "name": "Scabaras locust", + "examine": "A giant, mountable locust.", + "aggressive": "true", + "attack_level": "41", + "death_animation": "7581", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "7586", + "range_animation": "0", + "range_level": "55", + "respawn_delay": "60", + "safespot": null, + "strength_level": "41", + "weakness": "2" + }, + { + "id": "6777", + "name": "Locust lancer", + "examine": "Bouncy", + "aggressive": "true", + "attack_level": "55", + "death_animation": "7581", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "7584", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "55", + "weakness": "9" + }, + { + "id": "6778", + "name": "Locust ranger", + "examine": "He'll have someone's eye out with that.", + "aggressive": "true", + "attack_level": "41", + "combat_style": "1", + "death_animation": "7581", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "melee_animation": "5451", + "projectile": "11", + "range_animation": "5451", + "range_level": "55", + "respawn_delay": "60", + "safespot": null, + "start_gfx": "18", + "strength_level": "41", + "weakness": "2" + }, + { + "id": "6779", + "name": "Crocodile", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "combat_audio": "386,388,387", + "death_animation": "7591", + "defence_animation": "7590", + "defence_level": "1", + "lifepoints": "72", + "melee_animation": "7588", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "62", + "strength_level": "1" + }, + { + "id": "6780", + "name": "Scabaras mage", + "examine": "Part scarab, part man.", + "aggressive": "true", + "attack_level": "41", + "combat_style": "2", + "death_animation": "7616", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "78", + "magic_animation": "0", + "magic_level": "55", + "melee_animation": "7615", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "41", + "weakness": "4" + }, + { + "id": "6781", + "name": "Scabaras mage", + "examine": "Part scarab, part man.", + "aggressive": "true", + "attack_level": "1", + "combat_style": "2", + "death_animation": "7616", + "defence_animation": "7617", + "defence_level": "1", + "lifepoints": "70", + "melee_animation": "7620", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6782", + "name": "Maisa" + }, + { + "id": "6783", + "name": "Maisa" + }, + { + "id": "6784", + "name": "Priest" + }, + { + "id": "6785", + "name": "Clay golem", + "examine": "An animated clay statue.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6786", + "name": "Lead archaeologist Abigail", + "examine": "She looks a bit dirty from digging.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6787", + "name": "Assistant archaeologist Kerner", + "examine": "He looks a bit dusty from troweling.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6788", + "name": "High Priest of Scabaras", + "examine": "He exudes something like holiness.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6789", + "name": "High Priest of Scabaras", + "examine": "He exudes something like holiness.", + "attack_level": "66", + "death_animation": "7614", + "defence_animation": "0", + "defence_level": "66", + "lifepoints": "94", + "magic_animation": "0", + "magic_level": "66", + "melee_animation": "7612", + "range_animation": "0", + "range_level": "66", + "safespot": null, + "strength_level": "66", + "weakness": "10" + }, + { + "id": "6790", + "name": "High Priest of Scabaras", + "examine": "He exudes something like holiness.", + "attack_level": "66", + "death_animation": "7609", + "defence_animation": "0", + "defence_level": "66", + "lifepoints": "94", + "magic_animation": "0", + "magic_level": "66", + "melee_animation": "7607", + "range_animation": "7607", + "range_level": "66", + "safespot": null, + "strength_level": "66", + "weakness": "10" + }, + { + "id": "6791", + "name": "High Priest of Scabaras" + }, + { + "id": "6792", + "name": "Vulture" + }, + { + "id": "6793", + "name": "Spirit terrorbird" + }, + { + "id": "6794", + "name": "Spirit terrorbird", + "examine": "A bird. Literally terrifying.", + "attack_level": "50", + "death_animation": "1013", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "74", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "1010", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "0", + "safespot": null, + "strength_level": "50", + "weakness": "10" + }, + { + "id": "6795", + "name": "Spirit terrorbird", + "examine": "A bird. Literally terrifying.", + "attack_level": "50", + "death_animation": "1013", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "74", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "1010", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "0", + "safespot": null, + "strength_level": "50", + "weakness": "10" + }, + { + "id": "6796", + "name": "Granite crab", + "examine": "Is it a stone? Is it a crab? No! It's Granite Crab!", + "attack_level": "18", + "attack_speed": "3", + "bonuses": "16,9,5,12,4,11,57,53,61,12,45,22,0,0,0", + "death_animation": "8106", + "defence_animation": "8105", + "defence_level": "22", + "lifepoints": "39", + "magic_animation": "8104", + "magic_level": "13", + "melee_animation": "8104", + "range_animation": "8104", + "range_level": "16", + "respawn_delay": "50", + "safespot": null, + "strength_level": "17" + }, + { + "id": "6797", + "name": "Granite crab", + "examine": "Is it a stone? Is it a crab? No! It's Granite Crab!", + "attack_level": "18", + "attack_speed": "3", + "bonuses": "16,9,5,12,4,11,57,53,61,12,45,22,0,0,0", + "death_animation": "8106", + "defence_animation": "8105", + "defence_level": "22", + "lifepoints": "39", + "magic_animation": "8104", + "magic_level": "13", + "melee_animation": "8104", + "range_animation": "8104", + "range_level": "16", + "respawn_delay": "50", + "safespot": null, + "strength_level": "17", + "weakness": "10" + }, + { + "id": "6798", + "name": "Praying mantis", + "examine": "Wax on", + "attack_level": "60", + "death_animation": "8065", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "107", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "8069", + "range_animation": "0", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "6799", + "name": "Praying mantis", + "examine": "Wax on", + "attack_level": "60", + "death_animation": "8065", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "107", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "8069", + "range_animation": "0", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "6800", + "name": "Giant ent", + "examine": "He ent such a bad guy.", + "attack_level": "60", + "death_animation": "7854", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "111", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "7853", + "range_animation": "0", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "6801", + "name": "Giant ent", + "examine": "He ent such a bad guy.", + "attack_level": "60", + "death_animation": "7854", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "111", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "7853", + "range_animation": "0", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "6802", + "name": "Spirit cobra", + "examine": "Serpentine.", + "attack_level": "55", + "death_animation": "8153", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "90", + "magic_animation": "0", + "magic_level": "55", + "melee_animation": "8152", + "range_animation": "0", + "range_level": "55", + "respawn_delay": "0", + "safespot": null, + "strength_level": "55", + "weakness": "10" + }, + { + "id": "6803", + "name": "Spirit cobra", + "examine": "Serpentine.", + "attack_level": "55", + "death_animation": "8153", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "90", + "magic_animation": "0", + "magic_level": "55", + "melee_animation": "8152", + "range_animation": "0", + "range_level": "55", + "respawn_delay": "0", + "safespot": null, + "strength_level": "55", + "weakness": "10" + }, + { + "id": "6804", + "name": "Spirit dagannoth", + "examine": "Face the thing that should not be!", + "attack_level": "65", + "death_animation": "7780", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "115", + "magic_animation": "0", + "magic_level": "65", + "melee_animation": "7786", + "range_animation": "0", + "range_level": "65", + "respawn_delay": "0", + "safespot": null, + "strength_level": "65", + "weakness": "10" + }, + { + "id": "6805", + "name": "Spirit dagannoth", + "examine": "Face the thing that should not be!", + "attack_level": "65", + "death_animation": "7780", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "115", + "magic_animation": "0", + "magic_level": "65", + "melee_animation": "7786", + "range_animation": "0", + "range_level": "65", + "respawn_delay": "0", + "safespot": null, + "strength_level": "65", + "weakness": "10" + }, + { + "id": "6806", + "name": "Thorny snail", + "examine": "A hermit slug.", + "attack_level": "19", + "attack_speed": "5", + "bonuses": "47,50,52,52,54,49,13,3,13,4,0,0,0,0,0", + "combat_style": "1", + "death_animation": "8143", + "defence_animation": "8145", + "defence_level": "22", + "end_gfx": "1387", + "lifepoints": "28", + "magic_animation": "8143", + "magic_level": "18", + "melee_animation": "8143", + "poison_immune": "true", + "projectile": "1386", + "range_animation": "8143", + "range_level": "21", + "respawn_delay": "55", + "safespot": null, + "strength_level": "18" + }, + { + "id": "6807", + "name": "Thorny snail", + "examine": "A hermit slug.", + "attack_level": "19", + "attack_speed": "5", + "bonuses": "47,50,52,52,54,49,13,3,13,4,0,0,0,0,0", + "combat_style": "1", + "death_animation": "8143", + "defence_animation": "8145", + "defence_level": "22", + "end_gfx": "1387", + "lifepoints": "28", + "magic_animation": "8143", + "magic_level": "18", + "melee_animation": "8143", + "poison_immune": "true", + "projectile": "1386", + "range_animation": "8143", + "range_level": "21", + "respawn_delay": "55", + "safespot": null, + "strength_level": "18", + "weakness": "10" + }, + { + "id": "6808", + "name": "Beaver" + }, + { + "id": "6809", + "name": "Karamthulhu overlord", + "examine": "Kneel before squid!", + "attack_level": "50", + "combat_style": "2", + "death_animation": "7964", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "82", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "7963", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "0", + "safespot": null, + "strength_level": "50", + "weakness": "10" + }, + { + "id": "6810", + "name": "Karamthulhu overlord", + "examine": "Kneel before squid!", + "attack_level": "50", + "combat_style": "2", + "death_animation": "7964", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "82", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "7963", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "0", + "safespot": null, + "strength_level": "50", + "weakness": "10" + }, + { + "id": "6811", + "name": "Hydra", + "attack_level": "1", + "combat_style": "1", + "death_animation": "7937", + "defence_animation": "7936", + "defence_level": "1", + "lifepoints": "10", + "melee_animation": "7935", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6812", + "name": "Hydra", + "attack_level": "1", + "combat_style": "1", + "death_animation": "7937", + "defence_animation": "7936", + "defence_level": "1", + "lifepoints": "10", + "melee_animation": "7935", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6813", + "name": "Bunyip", + "attack_level": "1", + "death_animation": "7740", + "defence_animation": "7742", + "defence_level": "1", + "lifepoints": "40", + "melee_animation": "7741", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6814", + "name": "Bunyip", + "attack_level": "1", + "death_animation": "7740", + "defence_animation": "7742", + "defence_level": "1", + "lifepoints": "40", + "melee_animation": "7741", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6815", + "name": "War tortoise", + "examine": "Definitely not teenaged", + "attack_level": "55", + "combat_style": "0", + "death_animation": "8285", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "95", + "magic_animation": "0", + "magic_level": "55", + "melee_animation": "8286", + "range_animation": "0", + "range_level": "55", + "respawn_delay": "0", + "safespot": null, + "strength_level": "55", + "weakness": "10" + }, + { + "id": "6816", + "name": "War tortoise", + "examine": "Definitely not teenaged", + "attack_level": "55", + "combat_style": "0", + "death_animation": "8285", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "95", + "magic_animation": "0", + "magic_level": "55", + "melee_animation": "8286", + "range_animation": "0", + "range_level": "55", + "respawn_delay": "0", + "safespot": null, + "strength_level": "55", + "weakness": "10" + }, + { + "id": "6817", + "name": "Fruit bat", + "examine": "Fruity and bat-shaped. A winning combination!.", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6818", + "name": "Abyssal parasite", + "examine": "It's an extra-planar little blood hoover.", + "attack_level": "50", + "combat_style": "2", + "death_animation": "7671", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "77", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "8910", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "0", + "safespot": null, + "strength_level": "50", + "weakness": "10" + }, + { + "id": "6819", + "name": "Abyssal parasite", + "examine": "It's an extra-planar little blood hoover.", + "attack_level": "50", + "combat_style": "2", + "death_animation": "7671", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "77", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "8910", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "0", + "safespot": null, + "strength_level": "50", + "weakness": "10" + }, + { + "id": "6820", + "name": "Abyssal lurker", + "examine": "Lurking like only a lurker can.", + "attack_level": "55", + "death_animation": "7684", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "88", + "magic_animation": "0", + "magic_level": "55", + "melee_animation": "7680", + "range_animation": "0", + "range_level": "55", + "respawn_delay": "0", + "safespot": null, + "strength_level": "55", + "weakness": "10" + }, + { + "id": "6821", + "name": "Abyssal lurker", + "examine": "Lurking like only a lurker can.", + "attack_level": "55", + "death_animation": "7684", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "88", + "magic_animation": "0", + "magic_level": "55", + "melee_animation": "7680", + "range_animation": "0", + "range_level": "55", + "respawn_delay": "0", + "safespot": null, + "strength_level": "55", + "weakness": "10" + }, + { + "id": "6822", + "name": "Unicorn stallion", + "examine": "The pointiest horse on the planet.", + "attack_level": "64", + "bonuses": "48,59,43,52,104,52,116,123,134,46,127,4,0,0,0", + "combat_audio": "4135,4196,4195", + "death_animation": "6377", + "defence_animation": "6375", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "6376", + "magic_level": "69", + "melee_animation": "6376", + "poison_immune": "true", + "range_animation": "6376", + "range_level": "72", + "safespot": null, + "strength_level": "62" + }, + { + "id": "6823", + "name": "Unicorn stallion", + "examine": "The pointiest horse on the planet.", + "attack_level": "64", + "bonuses": "48,59,43,52,104,52,116,123,134,46,127,4,0,0,0", + "combat_audio": "4135,4196,4195", + "death_animation": "6377", + "defence_animation": "6375", + "defence_level": "70", + "lifepoints": "100", + "magic_animation": "6376", + "magic_level": "69", + "melee_animation": "6376", + "poison_immune": "true", + "range_animation": "6376", + "range_level": "72", + "safespot": null, + "strength_level": "62", + "weakness": "10" + }, + { + "id": "6824", + "name": "Magpie", + "attack_level": "1", + "attack_speed": "5", + "combat_style": "2", + "death_animation": "8012", + "defence_animation": "5388", + "defence_level": "1", + "lifepoints": "16", + "melee_animation": "7810", + "projectile": "1318", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6825", + "name": "Dreadfowl", + "examine": "Southern fried please!", + "attack_level": "17", + "attack_speed": "5", + "bonuses": "16,15,29,12,39,13,41,35,29,39,47,2,2,2,7", + "combat_style": "2", + "death_animation": "5389", + "defence_animation": "5388", + "defence_level": "22", + "lifepoints": "16", + "magic_animation": "7810", + "magic_level": "23", + "melee_animation": "7810", + "poison_immune": "true", + "projectile": "1318", + "range_animation": "7810", + "range_level": "16", + "respawn_delay": "50", + "safespot": null, + "strength_level": "15" + }, + { + "id": "6826", + "name": "Dreadfowl", + "examine": "Southern fried please!", + "attack_level": "17", + "attack_speed": "5", + "bonuses": "16,15,29,12,39,13,41,35,29,39,47,2,2,2,7", + "combat_style": "2", + "death_animation": "5389", + "defence_animation": "5388", + "defence_level": "22", + "lifepoints": "16", + "magic_animation": "7810", + "magic_level": "23", + "melee_animation": "7810", + "poison_immune": "true", + "projectile": "1318", + "range_animation": "7810", + "range_level": "16", + "respawn_delay": "50", + "safespot": null, + "strength_level": "15", + "weakness": "10" + }, + { + "id": "6827", + "name": "Stranger plant", + "examine": "It's mean and green!", + "attack_level": "55", + "attack_speed": "5", + "death_animation": "8209", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "91", + "magic_animation": "0", + "magic_level": "55", + "melee_animation": "8208", + "range_animation": "0", + "range_level": "55", + "respawn_delay": "0", + "safespot": null, + "strength_level": "55", + "weakness": "10" + }, + { + "id": "6828", + "name": "Stranger plant", + "examine": "It's mean and green!", + "attack_level": "55", + "attack_speed": "5", + "death_animation": "8209", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "91", + "magic_animation": "0", + "magic_level": "55", + "melee_animation": "8208", + "range_animation": "0", + "range_level": "55", + "respawn_delay": "0", + "safespot": null, + "strength_level": "55", + "weakness": "10" + }, + { + "id": "6829", + "name": "Spirit wolf", + "examine": "Man's significantly less-domesticated friend.", + "attack_level": "16", + "attack_speed": "5", + "bonuses": "12,7,4,10,23,5,29,27,16,12,13,17,0,0,0", + "death_animation": "8295", + "defence_animation": "8294", + "defence_level": "21", + "lifepoints": "15", + "magic_animation": "8292", + "magic_level": "7", + "melee_animation": "8292", + "range_animation": "8292", + "range_level": "9", + "safespot": null, + "strength_level": "18" + }, + { + "id": "6830", + "name": "Spirit wolf", + "examine": "Man's significantly less-domesticated friend.", + "attack_level": "16", + "attack_speed": "5", + "bonuses": "12,7,4,10,23,5,29,27,16,12,13,17,0,0,0", + "death_animation": "8295", + "defence_animation": "8294", + "defence_level": "21", + "lifepoints": "15", + "magic_animation": "8292", + "magic_level": "7", + "melee_animation": "8292", + "range_animation": "8292", + "range_level": "9", + "safespot": null, + "strength_level": "18", + "weakness": "10" + }, + { + "id": "6831", + "name": "Desert wyrm", + "examine": "Surprisingly slime-free.", + "attack_level": "18", + "combat_style": "1", + "death_animation": "7797", + "defence_animation": "0", + "defence_level": "18", + "lifepoints": "25", + "magic_animation": "0", + "magic_level": "18", + "melee_animation": "7795", + "range_animation": "0", + "range_level": "18", + "respawn_delay": "0", + "safespot": null, + "strength_level": "18", + "weakness": "10" + }, + { + "id": "6832", + "name": "Desert wyrm", + "examine": "Surprisingly slime-free.", + "attack_level": "18", + "combat_style": "1", + "death_animation": "7797", + "defence_animation": "0", + "defence_level": "18", + "lifepoints": "25", + "magic_animation": "0", + "magic_level": "18", + "melee_animation": "7795", + "range_animation": "0", + "range_level": "18", + "respawn_delay": "0", + "safespot": null, + "strength_level": "18", + "weakness": "10" + }, + { + "id": "6833", + "name": "Evil turnip", + "examine": "If you think he's evil", + "attack_level": "42", + "combat_style": "1", + "death_animation": "8250", + "defence_animation": "0", + "defence_level": "42", + "lifepoints": "60", + "magic_animation": "0", + "magic_level": "42", + "melee_animation": "8248", + "range_animation": "0", + "range_level": "42", + "safespot": null, + "strength_level": "42", + "weakness": "10" + }, + { + "id": "6834", + "name": "Evil turnip", + "examine": "If you think he's evil", + "attack_level": "42", + "combat_style": "1", + "death_animation": "8250", + "defence_animation": "0", + "defence_level": "42", + "lifepoints": "60", + "magic_animation": "0", + "magic_level": "42", + "melee_animation": "8248", + "range_animation": "0", + "range_level": "42", + "safespot": null, + "strength_level": "42", + "weakness": "10" + }, + { + "id": "6835", + "name": "Vampire bat", + "examine": "It vants to suck my blood!", + "attack_level": "31", + "death_animation": "8276", + "defence_animation": "0", + "defence_level": "31", + "lifepoints": "44", + "magic_animation": "0", + "magic_level": "31", + "melee_animation": "8275", + "range_animation": "0", + "range_level": "31", + "respawn_delay": "0", + "safespot": null, + "strength_level": "31", + "weakness": "10" + }, + { + "id": "6836", + "name": "Vampire bat", + "examine": "It vants to suck my blood!", + "attack_level": "31", + "death_animation": "8276", + "defence_animation": "0", + "defence_level": "31", + "lifepoints": "44", + "magic_animation": "0", + "magic_level": "31", + "melee_animation": "8275", + "range_animation": "0", + "range_level": "31", + "respawn_delay": "0", + "safespot": null, + "strength_level": "31", + "weakness": "10" + }, + { + "id": "6837", + "name": "Spirit scorpion", + "examine": "Salt and vinegaroon.", + "attack_level": "19", + "combat_audio": "3611,3612,3610", + "death_animation": "6256", + "defence_animation": "0", + "defence_level": "19", + "lifepoints": "27", + "magic_animation": "0", + "magic_level": "19", + "melee_animation": "6254", + "range_animation": "0", + "range_level": "19", + "respawn_delay": "0", + "safespot": null, + "strength_level": "19", + "weakness": "10" + }, + { + "id": "6838", + "name": "Spirit scorpion", + "examine": "Salt and vinegaroon.", + "attack_level": "19", + "combat_audio": "3611,3612,3610", + "death_animation": "6256", + "defence_animation": "0", + "defence_level": "19", + "lifepoints": "27", + "magic_animation": "0", + "magic_level": "19", + "melee_animation": "6254", + "range_animation": "0", + "range_level": "19", + "respawn_delay": "0", + "safespot": null, + "strength_level": "19", + "weakness": "10" + }, + { + "id": "6839", + "name": "Arctic bear", + "examine": "Crikey! Look at the size of those teeth!", + "attack_level": "60", + "bonuses": "90,50,50,60,90,80,50,30,40,100,0,0,0,0,0", + "combat_audio": "498,500,499", + "death_animation": "4929", + "defence_animation": "4928", + "defence_level": "60", + "lifepoints": "10", + "magic_level": "60", + "melee_animation": "4925", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60" + }, + { + "id": "6840", + "name": "Arctic bear", + "examine": "Crikey! Look at the size of those teeth!", + "attack_level": "60", + "bonuses": "90,50,50,60,90,80,50,30,40,100,0,0,0,0,0", + "combat_audio": "498,500,499", + "death_animation": "4929", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "101", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "4925", + "range_animation": "0", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "6841", + "name": "Spirit spider", + "examine": "Would scare anyone off their tuffet.", + "attack_level": "17", + "bonuses": "15,16,11,14,34,12,24,36,46,16,37,0,0,0,0", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "5328", + "defence_level": "17", + "lifepoints": "18", + "magic_animation": "5327", + "magic_level": "15", + "melee_animation": "5327", + "range_animation": "5327", + "range_level": "12", + "respawn_delay": "50", + "safespot": null, + "strength_level": "16" + }, + { + "id": "6842", + "name": "Spirit spider", + "examine": "Would scare anyone off their tuffet.", + "attack_level": "17", + "bonuses": "15,16,11,14,34,12,24,36,46,16,37,0,0,0,0", + "combat_audio": "537,539,538", + "death_animation": "5329", + "defence_animation": "5328", + "defence_level": "17", + "lifepoints": "18", + "magic_animation": "5327", + "magic_level": "15", + "melee_animation": "5327", + "range_animation": "5327", + "range_level": "12", + "respawn_delay": "50", + "safespot": null, + "strength_level": "16", + "weakness": "10" + }, + { + "id": "6843", + "name": "Bloated leech", + "examine": "It's like a little suction pump with eyes.", + "attack_level": "49", + "death_animation": "7656", + "defence_animation": "0", + "defence_level": "49", + "lifepoints": "70", + "magic_animation": "0", + "magic_level": "49", + "melee_animation": "7657", + "range_animation": "0", + "range_level": "49", + "respawn_delay": "0", + "safespot": null, + "strength_level": "49", + "weakness": "10" + }, + { + "id": "6844", + "name": "Bloated leech", + "examine": "It's like a little suction pump with eyes.", + "attack_level": "49", + "death_animation": "7656", + "defence_animation": "0", + "defence_level": "49", + "lifepoints": "70", + "magic_animation": "0", + "magic_level": "49", + "melee_animation": "7657", + "range_animation": "0", + "range_level": "49", + "respawn_delay": "0", + "safespot": null, + "strength_level": "49", + "weakness": "10" + }, + { + "id": "6845", + "name": "Honey badger", + "examine": "Violent little so-and-so.", + "attack_level": "32", + "death_animation": "7925", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "magic_level": "32", + "melee_animation": "7928", + "range_animation": "0", + "range_level": "32", + "respawn_delay": "0", + "safespot": null, + "strength_level": "32", + "weakness": "10" + }, + { + "id": "6846", + "name": "Honey badger", + "examine": "Violent little so-and-so.", + "attack_level": "32", + "death_animation": "7925", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "45", + "magic_animation": "0", + "magic_level": "32", + "melee_animation": "7928", + "range_animation": "0", + "range_level": "32", + "respawn_delay": "0", + "safespot": null, + "strength_level": "32", + "weakness": "10" + }, + { + "id": "6847", + "name": "Albino rat", + "examine": "The big cheese.", + "attack_level": "31", + "bonuses": "64,42,40,57,64,50,76,82,72,24,75,5,15,5,5", + "combat_audio": "703,705,704", + "defence_level": "32", + "lifepoints": "68", + "magic_level": "27", + "poison_immune": "true", + "range_level": "31", + "respawn_delay": "50", + "safespot": null, + "strength_level": "28" + }, + { + "id": "6848", + "name": "Albino rat", + "examine": "The big cheese.", + "attack_level": "31", + "bonuses": "64,42,40,57,64,50,76,82,72,24,75,5,15,5,5", + "combat_audio": "703,705,704", + "defence_level": "32", + "lifepoints": "68", + "magic_level": "27", + "poison_immune": "true", + "range_level": "31", + "respawn_delay": "50", + "safespot": null, + "strength_level": "28", + "weakness": "10" + }, + { + "id": "6849", + "name": "Granite lobster", + "examine": "Puts the 'crust' in 'crustacean'.", + "attack_level": "60", + "bonuses": "93,90,65,90,30,40,50,50,60,40,0,0,0,0,0", + "death_animation": "8113", + "defence_animation": "8114", + "defence_level": "60", + "lifepoints": "10", + "melee_animation": "8112", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60" + }, + { + "id": "6850", + "name": "Granite lobster", + "examine": "Puts the 'crust' in 'crustacean'.", + "attack_level": "60", + "bonuses": "93,90,65,90,30,40,50,50,60,40,0,0,0,0,0", + "death_animation": "8113", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "105", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "8112", + "range_animation": "0", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "6851", + "name": "Macaw", + "attack_level": "1", + "death_animation": "8012", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6852", + "name": "Macaw", + "attack_level": "1", + "death_animation": "8012", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6853", + "name": "Bronze minotaur", + "examine": "He's just a big bully.", + "attack_level": "19", + "bonuses": "-2,6,3,0,0,15,14,9,-6,14,5,90,0,0,0", + "combat_style": "0", + "death_animation": "8025", + "defence_animation": "8023", + "defence_level": "19", + "lifepoints": "133", + "magic_level": "1", + "melee_animation": "8024", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "19" + }, + { + "id": "6854", + "name": "Bronze minotaur", + "examine": "He's just a big bully.", + "attack_level": "19", + "bonuses": "15,20,10,15,10,15,15,15,0,0,0,90,0,0,0", + "combat_style": "0", + "death_animation": "8025", + "defence_animation": "0", + "defence_level": "19", + "lifepoints": "133", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "8024", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "19", + "weakness": "10" + }, + { + "id": "6855", + "name": "Iron minotaur", + "examine": "He's just a big bully.", + "attack_level": "25", + "bonuses": "-2,8,5,0,0,21,17,9,-6,20,5,100,0,100,0", + "combat_style": "0", + "death_animation": "8025", + "defence_animation": "8023", + "defence_level": "25", + "lifepoints": "193", + "magic_animation": "", + "magic_level": "25", + "melee_animation": "8024", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "25" + }, + { + "id": "6856", + "name": "Iron minotaur", + "examine": "He's just a big bully.", + "attack_level": "25", + "bonuses": "25,25,25,25,0,25,25,25,25,0,0,100,0,100,0", + "clue_level": "", + "combat_style": "0", + "death_animation": "8025", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "193", + "magic_animation": "0", + "magic_level": "25", + "melee_animation": "8024", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "25", + "weakness": "10" + }, + { + "id": "6857", + "name": "Steel minotaur", + "examine": "He's just a big bully!", + "attack_level": "28", + "bonuses": "-2,16,11,0,0,32,31,24,-6,31,5,122,0,122,0", + "combat_style": "0", + "death_animation": "8025", + "defence_animation": "8023", + "defence_level": "28", + "lifepoints": "260", + "magic_level": "28", + "melee_animation": "8024", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "28" + }, + { + "id": "6858", + "name": "Steel minotaur", + "examine": "He's just a big bully.", + "attack_level": "28", + "bonuses": "40,30,30,30,30,30,30,30,30,30,0,127,0,0,0", + "combat_style": "0", + "death_animation": "8025", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "260", + "magic_animation": "0", + "magic_level": "28", + "melee_animation": "8024", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "28", + "weakness": "10" + }, + { + "id": "6859", + "name": "Mithril minotaur", + "examine": "He's just a big bully", + "attack_level": "30", + "bonuses": "-2,22,17,0,0,46,44,38,-6,44,20,146,0,147,0", + "can_tolerate": "", + "combat_style": "0", + "death_animation": "8025", + "defence_animation": "8023", + "defence_level": "30", + "lifepoints": "340", + "magic_level": "30", + "melee_animation": "8024", + "range_level": "0", + "respawn_delay": "0", + "safespot": null, + "strength_level": "30" + }, + { + "id": "6860", + "name": "Mithril minotaur", + "examine": "He's just a big bully.", + "attack_level": "30", + "bonuses": "30,30,30,30,0,30,30,30,30,0,30,146,0,147,0", + "combat_style": "0", + "death_animation": "8025", + "defence_animation": "8023", + "defence_level": "30", + "lifepoints": "340", + "magic_animation": "0", + "magic_level": "30", + "melee_animation": "8024", + "range_animation": "0", + "range_level": "0", + "respawn_delay": "0", + "safespot": null, + "strength_level": "30", + "weakness": "10" + }, + { + "id": "6861", + "name": "Adamant minotaur", + "examine": "He's just a big bully.", + "attack_level": "35", + "attack_speed": "", + "bonuses": "-2,31,26,-3,-17,65,63,55,-6,63,30,146,0,181,0", + "combat_style": "0", + "death_animation": "8025", + "defence_animation": "8023", + "defence_level": "35", + "lifepoints": "441", + "magic_level": "35", + "melee_animation": "8024", + "poison_immune": "", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "35" + }, + { + "id": "6862", + "name": "Adamant minotaur", + "examine": "He's just a big bully.", + "attack_level": "35", + "bonuses": "40,50,40,45,35,20,50,36,30,40,15,180,30,10,0", + "combat_style": "0", + "death_animation": "8025", + "defence_animation": "0", + "defence_level": "35", + "lifepoints": "441", + "magic_animation": "0", + "magic_level": "35", + "melee_animation": "8024", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "35", + "weakness": "10" + }, + { + "id": "6863", + "name": "Rune minotaur", + "examine": "He's just a big bully.", + "attack_level": "40", + "bonuses": "-2,48,43,0,-1,207,209,192,-12,205,102,157,0,195,0", + "death_animation": "8025", + "defence_animation": "8023", + "defence_level": "40", + "lifepoints": "570", + "magic_level": "40", + "melee_animation": "8024", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "40" + }, + { + "id": "6864", + "name": "Rune minotaur", + "examine": "He's just a big bully.", + "attack_level": "40", + "bonuses": "50,40,40,56,40,30,50,30,60,30,40,219,50,40,40", + "death_animation": "8025", + "defence_animation": "8023", + "defence_level": "40", + "lifepoints": "570", + "magic_level": "40", + "melee_animation": "8024", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "slayer_exp": "0", + "strength_level": "40" + }, + { + "id": "6865", + "name": "Smoke devil", + "examine": "Well", + "attack_level": "55", + "death_animation": "7818", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "87", + "magic_animation": "0", + "magic_level": "55", + "melee_animation": "7816", + "range_animation": "0", + "range_level": "55", + "respawn_delay": "0", + "safespot": null, + "strength_level": "55", + "weakness": "10" + }, + { + "id": "6866", + "name": "Smoke devil", + "examine": "Well", + "attack_level": "55", + "death_animation": "7818", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "87", + "magic_animation": "0", + "magic_level": "55", + "melee_animation": "7816", + "range_animation": "0", + "range_level": "55", + "respawn_delay": "0", + "safespot": null, + "strength_level": "55", + "weakness": "10" + }, + { + "id": "6867", + "name": "Bull ant", + "examine": "Putting all three of its best feet forward.", + "attack_level": "40", + "death_animation": "7897", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "57", + "magic_animation": "0", + "magic_level": "40", + "melee_animation": "7896", + "range_animation": "0", + "range_level": "40", + "respawn_delay": "0", + "safespot": null, + "strength_level": "40", + "weakness": "10" + }, + { + "id": "6868", + "name": "Bull ant", + "examine": "Putting all three of its best feet forward.", + "attack_level": "40", + "death_animation": "7897", + "defence_animation": "0", + "defence_level": "40", + "lifepoints": "57", + "magic_animation": "0", + "magic_level": "40", + "melee_animation": "7896", + "range_animation": "0", + "range_level": "40", + "respawn_delay": "0", + "safespot": null, + "strength_level": "40", + "weakness": "10" + }, + { + "id": "6869", + "name": "Wolpertinger", + "examine": "It's just a harmless wee rabbit. ", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "59,50,50,50,50,50,50,50,50,50,50,50,50,68,0", + "combat_style": "2", + "death_animation": "8305", + "defence_animation": "8306", + "defence_level": "95", + "lifepoints": "619", + "magic_animation": "8304", + "magic_level": "95", + "melee_animation": "8304", + "poison_immune": "true", + "range_animation": "8304", + "range_level": "95", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6870", + "name": "Wolpertinger", + "examine": "It's just a harmless wee rabbit. ", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "59,50,50,50,50,50,50,50,50,50,50,50,50,68,0", + "combat_style": "2", + "death_animation": "8305", + "defence_animation": "8306", + "defence_level": "95", + "lifepoints": "619", + "magic_animation": "8304", + "magic_level": "95", + "melee_animation": "8304", + "poison_immune": "true", + "range_animation": "8304", + "range_level": "95", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6871", + "name": "Compost mound", + "examine": "I suppose it could smell worse", + "attack_level": "28", + "attack_speed": "5", + "death_animation": "7770", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "40", + "magic_animation": "0", + "magic_level": "28", + "melee_animation": "7769", + "range_animation": "0", + "range_level": "28", + "respawn_delay": "0", + "safespot": null, + "strength_level": "28", + "weakness": "10" + }, + { + "id": "6872", + "name": "Compost mound", + "examine": "I suppose it could smell worse", + "attack_level": "28", + "attack_speed": "5", + "death_animation": "7770", + "defence_animation": "0", + "defence_level": "28", + "lifepoints": "40", + "magic_animation": "0", + "magic_level": "28", + "melee_animation": "7769", + "range_animation": "0", + "range_level": "28", + "respawn_delay": "0", + "safespot": null, + "strength_level": "28", + "weakness": "10" + }, + { + "id": "6873", + "name": "Pack yak", + "examine": "Bulk haulage never smelled so bad.", + "attack_level": "112", + "attack_speed": "5", + "bonuses": "64,67,5,72,128,49,264,234,164,49,132,40,35,40,40", + "death_animation": "5784", + "defence_animation": "5783", + "defence_level": "121", + "lifepoints": "710", + "magic_animation": "5782", + "magic_level": "91", + "melee_animation": "5782", + "poison_immune": "true", + "range_animation": "5782", + "range_level": "86", + "safespot": null, + "strength_level": "104" + }, + { + "id": "6874", + "name": "Pack yak", + "examine": "Bulk haulage never smelled so bad.", + "attack_level": "112", + "attack_speed": "5", + "bonuses": "64,67,5,72,128,49,264,234,164,49,132,40,35,40,40", + "death_animation": "5784", + "defence_animation": "5783", + "defence_level": "121", + "lifepoints": "710", + "magic_animation": "5782", + "magic_level": "91", + "melee_animation": "5782", + "poison_immune": "true", + "range_animation": "5782", + "range_level": "86", + "safespot": null, + "strength_level": "104", + "weakness": "10" + }, + { + "id": "6875", + "name": "Spirit cockatrice", + "examine": "If looks could kill... Wait", + "attack_level": "43", + "combat_style": "2", + "death_animation": "7763", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "magic_level": "43", + "melee_animation": "7762", + "projectile": "1468", + "range_animation": "0", + "range_level": "43", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1467", + "strength_level": "43", + "weakness": "10" + }, + { + "id": "6876", + "name": "Spirit cockatrice", + "examine": "If looks could kill... Wait", + "attack_level": "43", + "combat_style": "2", + "death_animation": "7763", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "magic_level": "43", + "melee_animation": "7762", + "projectile": "1468", + "range_animation": "0", + "range_level": "43", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1467", + "strength_level": "43", + "weakness": "10" + }, + { + "id": "6877", + "name": "Spirit guthatrice", + "examine": "If looks could kill... Wait", + "attack_level": "43", + "combat_style": "2", + "death_animation": "7763", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "magic_level": "43", + "melee_animation": "7762", + "projectile": "1468", + "range_animation": "0", + "range_level": "43", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1467", + "strength_level": "43", + "weakness": "10" + }, + { + "id": "6878", + "name": "Spirit guthatrice", + "examine": "If looks could kill... Wait", + "attack_level": "43", + "combat_style": "2", + "death_animation": "7763", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "magic_level": "43", + "melee_animation": "7762", + "projectile": "1468", + "range_animation": "0", + "range_level": "43", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1467", + "strength_level": "43", + "weakness": "10" + }, + { + "id": "6879", + "name": "Spirit saratrice", + "examine": "If looks could kill... Wait", + "attack_level": "43", + "combat_audio": "703,705,704", + "combat_style": "2", + "death_animation": "7763", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "magic_level": "43", + "melee_animation": "7762", + "projectile": "1468", + "range_animation": "0", + "range_level": "43", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1467", + "strength_level": "43", + "weakness": "10" + }, + { + "id": "6880", + "name": "Spirit saratrice", + "examine": "If looks could kill... Wait", + "attack_level": "43", + "combat_audio": "703,705,704", + "combat_style": "2", + "death_animation": "7763", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "magic_level": "43", + "melee_animation": "7762", + "projectile": "1468", + "range_animation": "0", + "range_level": "43", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1467", + "strength_level": "43", + "weakness": "10" + }, + { + "id": "6881", + "name": "Spirit zamatrice", + "examine": "If looks could kill... Wait", + "attack_level": "43", + "combat_style": "2", + "death_animation": "7763", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "magic_level": "43", + "melee_animation": "7762", + "projectile": "1468", + "range_animation": "0", + "range_level": "43", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1467", + "strength_level": "43", + "weakness": "10" + }, + { + "id": "6882", + "name": "Spirit zamatrice", + "examine": "If looks could kill... Wait", + "attack_level": "43", + "combat_style": "2", + "death_animation": "7763", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "magic_level": "43", + "melee_animation": "7762", + "projectile": "1468", + "range_animation": "0", + "range_level": "43", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1467", + "strength_level": "43", + "weakness": "10" + }, + { + "id": "6883", + "name": "Spirit pengatrice", + "examine": "If looks could kill... Wait", + "attack_level": "43", + "combat_style": "2", + "death_animation": "7763", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "magic_level": "43", + "melee_animation": "7762", + "projectile": "1468", + "range_animation": "0", + "range_level": "43", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1467", + "strength_level": "43", + "weakness": "10" + }, + { + "id": "6884", + "name": "Spirit pengatrice", + "examine": "If looks could kill... Wait", + "attack_level": "43", + "combat_style": "2", + "death_animation": "7763", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "magic_level": "43", + "melee_animation": "7762", + "projectile": "1468", + "range_animation": "0", + "range_level": "43", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1467", + "strength_level": "43", + "weakness": "10" + }, + { + "id": "6885", + "name": "Spirit coraxatrice", + "examine": "If looks could kill... Wait", + "attack_level": "43", + "combat_style": "2", + "death_animation": "7763", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "magic_level": "43", + "melee_animation": "7762", + "projectile": "1468", + "range_animation": "0", + "range_level": "43", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1467", + "strength_level": "43", + "weakness": "10" + }, + { + "id": "6886", + "name": "Spirit coraxatrice", + "examine": "If looks could kill... Wait", + "attack_level": "43", + "combat_style": "2", + "death_animation": "7763", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "magic_level": "43", + "melee_animation": "7762", + "projectile": "1468", + "range_animation": "0", + "range_level": "43", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1467", + "strength_level": "43", + "weakness": "10" + }, + { + "id": "6887", + "name": "Spirit vulatrice", + "examine": "If looks could kill... Wait", + "attack_level": "43", + "combat_style": "2", + "death_animation": "7763", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "magic_level": "43", + "melee_animation": "7762", + "projectile": "1468", + "range_animation": "0", + "range_level": "43", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1467", + "strength_level": "43", + "weakness": "10" + }, + { + "id": "6888", + "name": "Spirit vulatrice", + "examine": "If looks could kill... Wait", + "attack_level": "43", + "combat_style": "2", + "death_animation": "7763", + "defence_animation": "0", + "defence_level": "43", + "lifepoints": "61", + "magic_animation": "0", + "magic_level": "43", + "melee_animation": "7762", + "projectile": "1468", + "range_animation": "0", + "range_level": "43", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1467", + "strength_level": "43", + "weakness": "10" + }, + { + "id": "6889", + "name": "Barker toad", + "examine": "The only creature with a mouth big enough to fit a cannon ball into.", + "attack_level": "55", + "death_animation": "7256", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "94", + "magic_animation": "0", + "magic_level": "55", + "melee_animation": "7260", + "range_animation": "0", + "range_level": "55", + "respawn_delay": "0", + "safespot": null, + "strength_level": "55", + "weakness": "10" + }, + { + "id": "6890", + "name": "Barker toad", + "examine": "The only creature with a mouth big enough to fit a cannon ball into.", + "attack_level": "55", + "death_animation": "7256", + "defence_animation": "0", + "defence_level": "55", + "lifepoints": "94", + "magic_animation": "0", + "magic_level": "55", + "melee_animation": "7260", + "range_animation": "0", + "range_level": "55", + "respawn_delay": "0", + "safespot": null, + "strength_level": "55", + "weakness": "10" + }, + { + "id": "6891", + "name": "Penguin keeper", + "examine": "He looks like the type of guy who would keep penguins.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6892", + "name": "Pet shop owner", + "examine": "The lady of the pet shop.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6893", + "name": "Pet shop owner", + "examine": "The man of the pet shop.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6894", + "name": "Terrier", + "examine": "A terrier puppy." + }, + { + "id": "6895", + "name": "Labrador", + "examine": "A labrador puppy." + }, + { + "id": "6896", + "name": "Dalmatian", + "examine": "A dalmatian puppy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6897", + "name": "Bulldog", + "examine": "A bulldog puppy.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6898", + "name": "Pet shop owner" + }, + { + "id": "6899", + "name": "Bulldog" + }, + { + "id": "6900", + "name": "Hatchling dragon", + "attack_level": "1", + "combat_audio": "408,410,409", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6901", + "name": "Baby dragon", + "attack_level": "1", + "combat_audio": "407,405,406", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6902", + "name": "Hatchling dragon", + "attack_level": "1", + "combat_audio": "408,410,409", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6903", + "name": "Baby dragon", + "attack_level": "1", + "combat_audio": "407,405,406", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6904", + "name": "Hatchling dragon", + "attack_level": "1", + "combat_audio": "408,410,409", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6905", + "name": "Baby dragon", + "attack_level": "1", + "combat_audio": "407,405,406", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6906", + "name": "Hatchling dragon", + "attack_level": "1", + "combat_audio": "408,410,409", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6907", + "name": "Baby dragon", + "attack_level": "1", + "combat_audio": "407,405,406", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6908", + "name": "Baby penguin" + }, + { + "id": "6909", + "name": "Penguin" + }, + { + "id": "6910", + "name": "Penguin" + }, + { + "id": "6911", + "name": "Raven chick" + }, + { + "id": "6912", + "name": "Raven" + }, + { + "id": "6913", + "name": "Baby raccoon" + }, + { + "id": "6914", + "name": "Raccoon" + }, + { + "id": "6915", + "name": "Baby gecko" + }, + { + "id": "6916", + "name": "Gecko", + "examine": "" + }, + { + "id": "6917", + "name": "Baby gecko", + "examine": "It's so adorably tiny!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6918", + "name": "Gecko", + "examine": "How cute!" + }, + { + "id": "6919", + "name": "Baby squirrel" + }, + { + "id": "6920", + "name": "Squirrel" + }, + { + "id": "6921", + "name": "Baby squirrel", + "examine": "A tiny nut-thief.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6922", + "name": "Baby chameleon" + }, + { + "id": "6923", + "name": "Chameleon" + }, + { + "id": "6924", + "name": "Baby chameleon" + }, + { + "id": "6925", + "name": "Chameleon" + }, + { + "id": "6926", + "name": "Baby chameleon" + }, + { + "id": "6927", + "name": "Chameleon" + }, + { + "id": "6928", + "name": "Baby chameleon" + }, + { + "id": "6929", + "name": "Chameleon" + }, + { + "id": "6930", + "name": "Baby chameleon" + }, + { + "id": "6931", + "name": "Chameleon" + }, + { + "id": "6932", + "name": "Baby chameleon" + }, + { + "id": "6933", + "name": "Chameleon" + }, + { + "id": "6934", + "name": "Baby chameleon" + }, + { + "id": "6935", + "name": "Chameleon" + }, + { + "id": "6936", + "name": "Baby chameleon" + }, + { + "id": "6937", + "name": "Chameleon" + }, + { + "id": "6938", + "name": "Baby chameleon" + }, + { + "id": "6939", + "name": "Chameleon" + }, + { + "id": "6940", + "name": "Baby chameleon" + }, + { + "id": "6941", + "name": "Chameleon" + }, + { + "id": "6942", + "name": "Baby monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6943", + "name": "Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6944", + "name": "Baby monkey", + "examine": "It's a tiny, cheeky monkey.", + "attack_level": "1", + "combat_audio": "629,631,630", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6945", + "name": "Vulture chick" + }, + { + "id": "6946", + "name": "Vulture" + }, + { + "id": "6947", + "name": "Baby giant crab" + }, + { + "id": "6948", + "name": "Giant crab" + }, + { + "id": "6949", + "name": "Saradomin chick" + }, + { + "id": "6950", + "name": "Saradomin bird" + }, + { + "id": "6951", + "name": "Saradomin owl" + }, + { + "id": "6952", + "name": "Zamorak chick" + }, + { + "id": "6953", + "name": "Zamorak bird" + }, + { + "id": "6954", + "name": "Zamorak hawk" + }, + { + "id": "6955", + "name": "Guthix chick" + }, + { + "id": "6956", + "name": "Guthix bird" + }, + { + "id": "6957", + "name": "Guthix raptor" + }, + { + "id": "6958", + "name": "Terrier puppy", + "examine": "It's lively and energetic." + }, + { + "id": "6959", + "name": "Terrier", + "examine": "It's lively and energetic." + }, + { + "id": "6960", + "name": "Greyhound puppy", + "examine": "This is one fast little pooch." + }, + { + "id": "6961", + "name": "Greyhound", + "examine": "An aerodynamic doggy." + }, + { + "id": "6962", + "name": "Labrador puppy", + "examine": "Soft but strong... and cute." + }, + { + "id": "6963", + "name": "Labrador", + "examine": "My most faithful friend." + }, + { + "id": "6964", + "name": "Dalmatian puppy", + "examine": "Now, if only I could find another hundred..." + }, + { + "id": "6965", + "name": "Dalmatian", + "examine": "A purebred doggy." + }, + { + "id": "6966", + "name": "Sheepdog puppy", + "examine": "This little puppy is very quiet." + }, + { + "id": "6967", + "name": "Sheepdog", + "examine": "Come by! Come by!" + }, + { + "id": "6968", + "name": "Bulldog", + "examine": "Looks like it's chewing a wasp." + }, + { + "id": "6969", + "name": "Bulldog puppy", + "attack_level": "1", + "attack_speed": "5", + "combat_style": "2", + "death_animation": "8305", + "defence_animation": "8306", + "defence_level": "1", + "lifepoints": "651", + "magic_level": "28", + "melee_animation": "8304", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6970", + "name": "Pikkupstix" + }, + { + "id": "6971", + "name": "Pikkupstix", + "examine": "He's a very important druid." + }, + { + "id": "6972", + "name": "Druid", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,513,512", + "death_animation": "7185", + "defence_animation": "7186", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7181", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28", + "weakness": "3" + }, + { + "id": "6973", + "name": "Druid", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,513,512", + "death_animation": "7185", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7182", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28", + "weakness": "3" + }, + { + "id": "6974", + "name": "Druid", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,513,512", + "death_animation": "7185", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7182", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28", + "weakness": "3" + }, + { + "id": "6975", + "name": "Druid", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,513,512", + "death_animation": "7185", + "defence_animation": "7186", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7181", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28", + "weakness": "3" + }, + { + "id": "6976", + "name": "Druid", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,513,512", + "death_animation": "7185", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7182", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28", + "weakness": "3" + }, + { + "id": "6977", + "name": "Druid", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,513,512", + "death_animation": "7185", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7182", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28", + "weakness": "3" + }, + { + "id": "6978", + "name": "Druid", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,513,512", + "death_animation": "7185", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7182", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28", + "weakness": "3" + }, + { + "id": "6979", + "name": "Druid", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,513,512", + "death_animation": "7185", + "defence_animation": "7186", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7181", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28" + }, + { + "id": "6980", + "name": "Druid", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,513,512", + "death_animation": "7185", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7182", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28", + "weakness": "3" + }, + { + "id": "6981", + "name": "Druidess", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,506,505", + "death_animation": "7185", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7182", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28", + "weakness": "3" + }, + { + "id": "6982", + "name": "Druidess", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,506,505", + "death_animation": "7185", + "defence_animation": "7186", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7181", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28", + "weakness": "3" + }, + { + "id": "6983", + "name": "Druidess", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,506,505", + "death_animation": "7185", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7182", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28", + "weakness": "3" + }, + { + "id": "6984", + "name": "Druidess", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,506,505", + "death_animation": "7185", + "defence_animation": "7186", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7181", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28", + "weakness": "3" + }, + { + "id": "6985", + "name": "Druidess", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,506,505", + "death_animation": "7185", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7182", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28", + "weakness": "3" + }, + { + "id": "6986", + "name": "Druidess", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,506,505", + "death_animation": "7185", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7182", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28", + "weakness": "3" + }, + { + "id": "6987", + "name": "Druidess", + "examine": "A nature lover.", + "attack_level": "28", + "attack_speed": "4", + "combat_audio": "511,506,505", + "death_animation": "7185", + "defence_animation": "0", + "defence_level": "32", + "lifepoints": "30", + "magic_animation": "711", + "magic_level": "25", + "melee_animation": "7182", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "strength_level": "28", + "weakness": "3" + }, + { + "id": "6988", + "name": "Giant wolpertinger" + }, + { + "id": "6991", + "name": "Ibis" + }, + { + "id": "6992", + "name": "Spirit jelly", + "examine": "On Gielinor", + "attack_level": "50", + "death_animation": "8570", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "78", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "8569", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "0", + "safespot": null, + "strength_level": "50", + "weakness": "10" + }, + { + "id": "6993", + "name": "Spirit jelly", + "examine": "On Gielinor", + "attack_level": "50", + "death_animation": "8570", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "78", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "8569", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "0", + "safespot": null, + "strength_level": "50", + "weakness": "10" + }, + { + "id": "6994", + "name": "Spirit kalphite", + "examine": "Hail to the Queen", + "attack_level": "25", + "combat_style": "1", + "death_animation": "6228", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "magic_level": "25", + "melee_animation": "6223", + "range_animation": "0", + "range_level": "25", + "respawn_delay": "0", + "safespot": null, + "strength_level": "25", + "weakness": "10" + }, + { + "id": "6995", + "name": "Spirit kalphite", + "examine": "Hail to the Queen", + "attack_level": "25", + "combat_style": "1", + "death_animation": "6228", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "magic_level": "25", + "melee_animation": "6223", + "range_animation": "0", + "range_level": "25", + "respawn_delay": "0", + "safespot": null, + "strength_level": "25", + "weakness": "10" + }, + { + "id": "6996", + "name": "Fishing spot" + }, + { + "id": "6997", + "name": "Baby raccoon", + "examine": "A stripy little baby raccoon.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "6998", + "name": "Revenant dragon", + "examine": "A ghost of a dragon slain during the god wars.", + "attack_level": "85", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "8593", + "defence_animation": "8592", + "defence_level": "85", + "lifepoints": "155", + "magic_animation": "8594", + "melee_animation": "8591", + "poison_amount": "", + "poisonous": "", + "range_animation": "8594", + "range_level": "85", + "safespot": null, + "spawn_animation": "8595", + "strength_level": "85" + }, + { + "id": "6999", + "name": "Revenant dragon", + "examine": "A ghost of a dragon slain during the god wars.", + "attack_level": "85", + "clue_level": "2", + "combat_audio": "408,410,409", + "death_animation": "8593", + "defence_animation": "8592", + "defence_level": "85", + "lifepoints": "155", + "magic_animation": "8594", + "melee_animation": "8591", + "poison_amount": "", + "poisonous": "", + "range_animation": "8594", + "range_level": "85", + "safespot": null, + "spawn_animation": "8595", + "strength_level": "85" + }, + { + "id": "7000", + "name": "Dark Squall" + }, + { + "id": "7002", + "name": "Surok Magis" + }, + { + "id": "7003", + "name": "Fire giant", + "examine": "A very large elemental adversary.", + "attack_level": "65", + "attack_speed": "5", + "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", + "combat_audio": "447,451,450", + "death_animation": "4668", + "defence_animation": "4664", + "defence_level": "65", + "lifepoints": "111", + "magic_animation": "4666", + "magic_level": "1", + "melee_animation": "4666", + "range_animation": "4666", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "slayer_exp": "111", + "strength_level": "65", + "weakness": "1" + }, + { + "id": "7004", + "name": "Fire giant", + "examine": "A very large elemental adversary.", + "attack_level": "65", + "attack_speed": "5", + "bonuses": "29,29,29,0,0,0,3,2,0,0,0,31,0,0,0", + "combat_audio": "447,451,450", + "death_animation": "4668", + "defence_animation": "4664", + "defence_level": "65", + "lifepoints": "111", + "magic_animation": "4666", + "magic_level": "1", + "melee_animation": "4666", + "range_animation": "4666", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "slayer_exp": "111", + "strength_level": "65", + "weakness": "1" + }, + { + "id": "7005", + "name": "Big wolf", + "examine": "Must be the pack leader.", + "aggressive": "true", + "attack_level": "60", + "death_animation": "6558", + "defence_animation": "0", + "defence_level": "62", + "lifepoints": "21", + "magic_animation": "0", + "melee_animation": "6559", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "74", + "strength_level": "60" + }, + { + "id": "7006", + "name": "Grenwall" + }, + { + "id": "7010", + "name": "Grenwall", + "examine": "An active spiny creature.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7011", + "name": "Grenwall", + "examine": "A hiding spiny creature.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7012", + "name": "Pawya", + "examine": "What a strange little creature.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7013", + "name": "Earth Mound", + "examine": "Dug by a Pawya (Not actual exam).", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7014", + "name": "Pawya", + "examine": "What a strange little creature.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7015", + "name": "Platypus" + }, + { + "id": "7016", + "name": "Platypus" + }, + { + "id": "7017", + "name": "Platypus" + }, + { + "id": "7018", + "name": "Baby platypus" + }, + { + "id": "7019", + "name": "Baby platypus" + }, + { + "id": "7020", + "name": "Baby platypus" + }, + { + "id": "7021", + "name": "Platypus", + "examine": "A most unlikely creature.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7022", + "name": "Platypus" + }, + { + "id": "7023", + "name": "Platypus" + }, + { + "id": "7024", + "name": "Baby platypus", + "examine": "A most unlikely creature.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7025", + "name": "Baby platypus" + }, + { + "id": "7026", + "name": "Baby platypus" + }, + { + "id": "7027", + "name": "Patrick" + }, + { + "id": "7028", + "name": "Penelope" + }, + { + "id": "7029", + "name": "Peter" + }, + { + "id": "7030", + "name": "Peanut" + }, + { + "id": "7031", + "name": "Wimpy bird", + "examine": "An ogre snack with wings.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7032", + "name": "Diseased kebbit" + }, + { + "id": "7039", + "name": "Diseased kebbit", + "examine": "A shy creature with a toxic bite.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7040", + "name": "Fishing spot" + }, + { + "id": "7045", + "name": "Fishing spot" + }, + { + "id": "7046", + "name": "Fishing spot" + }, + { + "id": "7047", + "name": "Balnea", + "examine": "She looks like she means business." + }, + { + "id": "7048", + "name": "Frawd" + }, + { + "id": "7049", + "name": "Ogress banker", + "examine": "Fit to wear the uniform?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7050", + "name": "Ogress banker" + }, + { + "id": "7051", + "name": "Chief Tess", + "examine": "She walks as if she owns the place.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7052", + "name": "Seegud" + }, + { + "id": "7053", + "name": "Chargurr" + }, + { + "id": "7054", + "name": "Chargurr" + }, + { + "id": "7055", + "name": "Snurgh" + }, + { + "id": "7058", + "name": "Kringk" + }, + { + "id": "7059", + "name": "Thump" + }, + { + "id": "7060", + "name": "Massage table" + }, + { + "id": "7061", + "name": "Thump" + }, + { + "id": "7062", + "name": "Muggh" + }, + { + "id": "7063", + "name": "Kringk" + }, + { + "id": "7064", + "name": "Hairdryer" + }, + { + "id": "7065", + "name": "Snert" + }, + { + "id": "7068", + "name": "Tyke" + }, + { + "id": "7069", + "name": "Snarrl" + }, + { + "id": "7070", + "name": "Snarrk" + }, + { + "id": "7071", + "name": "I'rk" + }, + { + "id": "7072", + "name": "Thuddley" + }, + { + "id": "7073", + "name": "Grr'bah" + }, + { + "id": "7074", + "name": "Chomp" + }, + { + "id": "7075", + "name": "Grubb" + }, + { + "id": "7076", + "name": "Grunther" + }, + { + "id": "7077", + "name": "Glum" + }, + { + "id": "7078", + "name": "Ogress champion", + "examine": "A fearsome adversary with no sense of humour.", + "aggressive": "true", + "attack_level": "48", + "death_animation": "8640", + "defence_animation": "0", + "defence_level": "48", + "lifepoints": "68", + "magic_animation": "0", + "melee_animation": "8636", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "48", + "weakness": "6" + }, + { + "id": "7079", + "name": "Ogress warrior", + "examine": "Irascible, belligerent and stupefyingly impolite.", + "aggressive": "true", + "attack_level": "45", + "death_animation": "8640", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "64", + "magic_animation": "0", + "melee_animation": "8636", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "45", + "weakness": "6" + }, + { + "id": "7080", + "name": "Ogress warrior", + "examine": "Irascible, beliggerent and stupefyingly impolite.", + "aggressive": "true", + "attack_level": "45", + "death_animation": "8641", + "defence_animation": "0", + "defence_level": "45", + "lifepoints": "64", + "magic_animation": "0", + "melee_animation": "8637", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "45", + "weakness": "6" + }, + { + "id": "7081", + "name": "Ogress", + "examine": "A large and contentious lady ogre.", + "aggressive": "true", + "attack_level": "42", + "attack_speed": "5", + "death_animation": "8640", + "defence_animation": "0", + "defence_level": "42", + "lifepoints": "60", + "magic_animation": "0", + "melee_animation": "8636", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "42", + "weakness": "6" + }, + { + "id": "7082", + "name": "Ogress", + "examine": "A large and contentious lady ogre.", + "aggressive": "true", + "attack_level": "42", + "attack_speed": "5", + "death_animation": "8641", + "defence_animation": "0", + "defence_level": "42", + "lifepoints": "60", + "magic_animation": "0", + "melee_animation": "8637", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "42", + "weakness": "6" + }, + { + "id": "7083", + "name": "Flying bugs" + }, + { + "id": "7084", + "name": "Eucalyptus ent", + "examine": "Dead stone defending a dead throne room.", + "aggressive": "true", + "attack_level": "51", + "attack_speed": "5", + "defence_animation": "0", + "defence_level": "51", + "lifepoints": "145", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "51", + "weakness": "7" + }, + { + "id": "7085", + "name": "Eucalyptus ent", + "examine": "Dead stone defending a dead throne room.", + "aggressive": "true", + "attack_level": "54", + "attack_speed": "5", + "defence_animation": "0", + "defence_level": "54", + "lifepoints": "142", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "54", + "weakness": "7" + }, + { + "id": "7086", + "name": "Eucalyptus ent", + "examine": "Dead stone defending a dead throne room.", + "aggressive": "true", + "attack_level": "57", + "defence_animation": "0", + "defence_level": "57", + "lifepoints": "162", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "57", + "weakness": "7" + }, + { + "id": "7087", + "name": "Balnea" + }, + { + "id": "7088", + "name": "Chief Tess" + }, + { + "id": "7089", + "name": "Chargurr" + }, + { + "id": "7090", + "name": "Wise Old Man" + }, + { + "id": "7091", + "name": "Dawg" + }, + { + "id": "7105", + "name": "Chaos druid", + "examine": "A crazy, evil druid.", + "aggressive": "true", + "attack_level": "8", + "attack_speed": "4", + "bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "12", + "end_gfx": "107", + "lifepoints": "20", + "magic_animation": "422", + "magic_level": "10", + "melee_animation": "422", + "projectile": "106", + "range_animation": "422", + "range_level": "1", + "respawn_delay": "25", + "safespot": null, + "start_gfx": "105", + "strength_level": "8", + "weakness": "3" + }, + { + "id": "7106", + "name": "Thug", + "examine": "Low on brains, high on aggression.", + "aggressive": "true", + "attack_level": "7", + "attack_speed": "4", + "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", + "clue_level": "0", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "9", + "lifepoints": "18", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "386", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "5" + }, + { + "id": "7107", + "name": "Thug", + "examine": "Low on brains, high on aggression.", + "aggressive": "true", + "attack_level": "7", + "attack_speed": "4", + "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", + "clue_level": "0", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "9", + "lifepoints": "18", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "386", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "5" + }, + { + "id": "7108", + "name": "Thug", + "examine": "Low on brains, high on aggression.", + "aggressive": "true", + "attack_level": "7", + "attack_speed": "4", + "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", + "clue_level": "0", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "9", + "lifepoints": "18", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "386", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "5" + }, + { + "id": "7109", + "name": "Thug", + "examine": "Low on brains, high on aggression.", + "aggressive": "true", + "attack_level": "7", + "attack_speed": "4", + "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", + "clue_level": "0", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "9", + "lifepoints": "18", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "386", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "5" + }, + { + "id": "7110", + "name": "Thug", + "examine": "Low on brains, high on aggression.", + "aggressive": "true", + "attack_level": "7", + "attack_speed": "4", + "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", + "clue_level": "0", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "9", + "lifepoints": "18", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "386", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "5" + }, + { + "id": "7111", + "name": "Thug", + "examine": "Low on brains, high on aggression.", + "aggressive": "true", + "attack_level": "7", + "attack_speed": "4", + "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", + "clue_level": "0", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "9", + "lifepoints": "18", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "386", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "5" + }, + { + "id": "7112", + "name": "Thug", + "examine": "Low on brains, high on aggression.", + "aggressive": "true", + "attack_level": "7", + "attack_speed": "4", + "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", + "clue_level": "0", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "9", + "lifepoints": "18", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "386", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "5" + }, + { + "id": "7113", + "name": "Thug", + "examine": "Low on brains, high on aggression.", + "aggressive": "true", + "attack_level": "7", + "attack_speed": "4", + "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", + "clue_level": "0", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "9", + "lifepoints": "18", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "386", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "5" + }, + { + "id": "7114", + "name": "Thug", + "examine": "Low on brains, high on aggression.", + "aggressive": "true", + "attack_level": "7", + "attack_speed": "4", + "bonuses": "5,5,5,0,0,0,2,3,3,0,0,5,0,0,0", + "clue_level": "0", + "death_animation": "9055", + "defence_animation": "404", + "defence_level": "9", + "lifepoints": "18", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "386", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "5" + }, + { + "id": "7115", + "name": "Thaki the delivery dwarf", + "examine": "He seems to be enjoying his time in the bar.", + "attack_level": "1", + "bonuses": "5,5,0,0,0,0,2,3,3,0,0,0,0,0,0", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "magic_level": "1", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7116", + "name": "Drunken sailor" + }, + { + "id": "7117", + "name": "Drunken sailor" + }, + { + "id": "7118", + "name": "Catapult engineer" + }, + { + "id": "7119", + "name": "Tyras guard" + }, + { + "id": "7120", + "name": "Tyras guard", + "examine": "One of King Tyras's men.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7121", + "name": "General Hining" + }, + { + "id": "7122", + "name": "Githan" + }, + { + "id": "7123", + "name": "Amulet of Nature" + }, + { + "id": "7124", + "name": "Mud" + }, + { + "id": "7125", + "name": "Rabbit", + "examine": "A hungry-looking rabbit.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7126", + "name": "Rabbit", + "examine": "A hungry-looking rabbit.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7127", + "name": "Rabbit", + "examine": "A hungry-looking rabbit.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "50", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7128", + "name": "Farmer", + "examine": "A gnome farmer.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7129", + "name": "Farmer", + "examine": "A gnome farmer.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7130", + "name": "Farmer", + "examine": "A gnome farmer.", + "aggressive": "true", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7131", + "name": "Farmer Blinkin", + "examine": "The head farmer, apparently." + }, + { + "id": "7132", + "name": "Mrs. Winkin", + "examine": "Owner of this homestead.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7133", + "name": "Bork", + "examine": "That's one big Ork... ", + "agg_radius": "64", + "attack_level": "100", + "attack_speed": "6", + "bonuses": "200,120,100,300,300,120,400,500,300,200,300,400,200,90,0", + "death_animation": "8756", + "defence_animation": "8755", + "defence_level": "80", + "lifepoints": "300", + "melee_animation": "8754", + "poison_immune": "true", + "range_level": "1", + "respawn_delay": "60", + "strength_level": "90" + }, + { + "id": "7134", + "name": "Bork", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "8", + "death_animation": "8756", + "defence_animation": "8755", + "defence_level": "1", + "lifepoints": "300", + "melee_animation": "8754", + "poison_immune": "true", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7135", + "name": "Ork legion", + "examine": "Aww, aren't they the cutest li - Argh!", + "aggressive": "true", + "attack_level": "68", + "bonuses": "5,10,3,5,3,5,5,5,10,0,0,0,0,0,0", + "death_animation": "8761", + "defence_animation": "0", + "defence_level": "57", + "lifepoints": "100", + "magic_animation": "0", + "melee_animation": "8760", + "poison_immune": "true", + "range_animation": "0", + "range_level": "68", + "respawn_delay": "60", + "safespot": null, + "strength_level": "68" + }, + { + "id": "7136", + "name": "Surok Magis" + }, + { + "id": "7137", + "name": "Dagon'hai Elite", + "examine": "A powerful wizard.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "25", + "bonuses": "220,190,140,120,120,130,90,120,120,200,100,154,150,93,190", + "combat_style": "2", + "defence_level": "40", + "lifepoints": "70", + "magic_level": "90", + "range_level": "1", + "safespot": null, + "spell_id": "11", + "strength_level": "90" + }, + { + "id": "7138", + "name": "Dagon'hai Monk", + "examine": "A monk of the Dagon'hai.", + "aggressive": "true", + "attack_level": "84", + "attack_speed": "5", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "80", + "lifepoints": "88", + "magic_animation": "0", + "magic_level": "98", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "84" + }, + { + "id": "7139", + "name": "Dagon'hai Monk", + "examine": "A monk of the Dagon'hai.", + "aggressive": "true", + "attack_level": "84", + "attack_speed": "5", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "80", + "lifepoints": "88", + "magic_animation": "0", + "magic_level": "98", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "84" + }, + { + "id": "7140", + "name": "Dagon'hai Monk", + "examine": "A monk of the Dagon'hai.", + "aggressive": "true", + "attack_level": "84", + "attack_speed": "5", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "80", + "lifepoints": "88", + "magic_animation": "0", + "magic_level": "98", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "84" + }, + { + "id": "7141", + "name": "null", + "examine": "He seems to have gone mad.", + "aggressive": "true", + "attack_level": "25", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "4", + "magic_animation": "0", + "magic_level": "25", + "melee_animation": "426", + "range_animation": "426", + "range_level": "25", + "safespot": null, + "strength_level": "25", + "weakness": "1" + }, + { + "id": "7142", + "name": "Guard", + "examine": "He thumps people who cheat.", + "attack_level": "1", + "clue_level": "1", + "combat_audio": "511,513,512", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7143", + "name": "Professor Henry" + }, + { + "id": "7144", + "name": "Gublinch jailmate", + "examine": "An imprisoned gublinch.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7145", + "name": "Gublinchette jailmate", + "examine": "An imprisoned gublinch.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7146", + "name": "Gublinchette jailmate", + "examine": "An imprisoned gublinch.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7147", + "name": "Gublinch jailmate", + "examine": "An imprisoned gublinch.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7148", + "name": "Gublinch jailmate", + "examine": "An imprisoned gublinch.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7149", + "name": "Gublinch jailmate", + "examine": "An imprisoned gublinch.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7150", + "name": "Gublinch jailmate", + "examine": "An imprisoned gublinch.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7151", + "name": "Student", + "examine": "A person sitting an exam.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "strength_level": "1" + }, + { + "id": "7152", + "name": "Student", + "examine": "A person sitting an exam.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7153", + "name": "Student", + "examine": "A person sitting an exam.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "strength_level": "1" + }, + { + "id": "7154", + "name": "Student", + "examine": "A person sitting an exam.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "strength_level": "1" + }, + { + "id": "7155", + "name": "Student", + "examine": "A person sitting an exam.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "strength_level": "1" + }, + { + "id": "7156", + "name": "Student", + "examine": "A person sitting an exam.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7157", + "name": "Student", + "examine": "A person sitting an exam.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "strength_level": "1" + }, + { + "id": "7158", + "name": "Cockroach drone", + "examine": "A household pest.", + "attack_level": "3", + "attack_speed": "5", + "death_animation": "8788", + "defence_animation": "0", + "defence_level": "3", + "lifepoints": "4", + "magic_animation": "0", + "melee_animation": "8785", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "3", + "weakness": "8" + }, + { + "id": "7159", + "name": "Cockroach worker", + "examine": "Eurgh! A big bug.", + "attack_level": "22", + "attack_speed": "5", + "death_animation": "8790", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "31", + "magic_animation": "0", + "melee_animation": "8787", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "22", + "weakness": "8" + }, + { + "id": "7160", + "name": "Cockroach soldier", + "examine": "Euww! A giant bug.", + "attack_level": "38", + "attack_speed": "5", + "bonuses": "10,10,10,5,0,0,0,0,0,0,0,0,0,0,0", + "death_animation": "8789", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "97", + "magic_animation": "0", + "melee_animation": "8786", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "26", + "weakness": "8" + }, + { + "id": "7161", + "name": "Mugger", + "aggressive": "true", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "8", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7162", + "name": "Mugger", + "aggressive": "true", + "attack_level": "1", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "8", + "melee_animation": "422", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7163", + "name": "Villager" + }, + { + "id": "7165", + "name": "Villager" + }, + { + "id": "7166", + "name": "Villager" + }, + { + "id": "7167", + "name": "Villager" + }, + { + "id": "7168", + "name": "Kimberly", + "examine": "A little girl. She looks terrified.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7169", + "name": "Kimberly" + }, + { + "id": "7170", + "name": "Kimberly" + }, + { + "id": "7171", + "name": "Kennith" + }, + { + "id": "7172", + "name": "Kennith" + }, + { + "id": "7173", + "name": "Kennith" + }, + { + "id": "7174", + "name": "Kennith" + }, + { + "id": "7175", + "name": "Kennith" + }, + { + "id": "7176", + "name": "Villager" + }, + { + "id": "7184", + "name": "Ezekial Lovecraft" + }, + { + "id": "7185", + "name": "Clive" + }, + { + "id": "7186", + "name": "Katherine" + }, + { + "id": "7187", + "name": "Katherine" + }, + { + "id": "7188", + "name": "Clive" + }, + { + "id": "7189", + "name": "Kent" + }, + { + "id": "7190", + "name": "Rabbit hole" + }, + { + "id": "7197", + "name": "Easter Bunny" + }, + { + "id": "7198", + "name": "Bunny" + }, + { + "id": "7199", + "name": "Bunny" + }, + { + "id": "7200", + "name": "Guard bunny" + }, + { + "id": "7201", + "name": "Chocatrice" + }, + { + "id": "7202", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "4933", + "melee_animation": "4933", + "range_animation": "4933", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7203", + "name": "Void Knight" + }, + { + "id": "7204", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "4933", + "melee_animation": "4933", + "range_animation": "4933", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7205", + "name": "Mouse" + }, + { + "id": "7206", + "name": "Cockroach", + "examine": "It seems to have eaten a lot of chocolate.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7207", + "name": "Spider", + "examine": "It's searching for crumbs of chocolate.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7208", + "name": "Rabbit" + }, + { + "id": "7209", + "name": "Snail", + "examine": "It seems to have eaten a lot of chocolate.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7210", + "name": "Baby monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7211", + "name": "Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7212", + "name": "Baby monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7213", + "name": "Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7214", + "name": "Baby monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7215", + "name": "Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7216", + "name": "Baby monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7217", + "name": "Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7218", + "name": "Baby monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7219", + "name": "Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7220", + "name": "Baby monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7221", + "name": "Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7222", + "name": "Baby monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7223", + "name": "Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7224", + "name": "Baby monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7225", + "name": "Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7226", + "name": "Baby monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7227", + "name": "Monkey", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7228", + "name": "Baby monkey", + "examine": "It's a tiny, cheeky monkey.", + "attack_level": "1", + "combat_audio": "629,631,630", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7229", + "name": "Baby monkey", + "examine": "It's a tiny, cheeky monkey.", + "attack_level": "1", + "combat_audio": "629,631,630", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7230", + "name": "Baby monkey", + "examine": "It's a tiny, cheeky monkey.", + "attack_level": "1", + "combat_audio": "629,631,630", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7231", + "name": "Baby monkey", + "examine": "It's a tiny, cheeky monkey.", + "attack_level": "1", + "combat_audio": "629,631,630", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7232", + "name": "Baby monkey", + "examine": "It's a tiny, cheeky monkey.", + "attack_level": "1", + "combat_audio": "629,631,630", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7233", + "name": "Baby monkey", + "examine": "It's a tiny, cheeky monkey.", + "attack_level": "1", + "combat_audio": "629,631,630", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7234", + "name": "Baby monkey", + "examine": "It's a tiny, cheeky monkey.", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7235", + "name": "Baby monkey", + "examine": "It's a tiny, cheeky monkey.", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7236", + "name": "Baby monkey", + "examine": "It's a tiny, cheeky monkey.", + "attack_level": "1", + "combat_audio": "629,631,630", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7237", + "name": "Terrier puppy", + "examine": "A hyperactive little pup." + }, + { + "id": "7238", + "name": "Terrier", + "examine": "A hyperactive little pup." + }, + { + "id": "7239", + "name": "Terrier puppy", + "examine": "Such a brave doggy." + }, + { + "id": "7240", + "name": "Terrier", + "examine": "Such a brave doggy." + }, + { + "id": "7241", + "name": "Greyhound puppy", + "examine": "This is one fast little pooch." + }, + { + "id": "7242", + "name": "Greyhound", + "examine": "An aerodynamic doggy." + }, + { + "id": "7243", + "name": "Greyhound puppy", + "examine": "This is one fast little pooch." + }, + { + "id": "7244", + "name": "Greyhound", + "examine": "An aerodynamic doggy." + }, + { + "id": "7245", + "name": "Labrador puppy", + "examine": "Soft but strong... and cute." + }, + { + "id": "7246", + "name": "Labrador", + "examine": "My most faithful friend." + }, + { + "id": "7247", + "name": "Labrador puppy", + "examine": "Soft but strong... and cute." + }, + { + "id": "7248", + "name": "Labrador", + "examine": "My most faithful friend." + }, + { + "id": "7249", + "name": "Dalmatian puppy", + "examine": "Now, if only I could find another hundred..." + }, + { + "id": "7250", + "name": "Dalmatian", + "examine": "A purebred doggy." + }, + { + "id": "7251", + "name": "Dalmatian puppy", + "examine": "Now, if only I could find another hundred..." + }, + { + "id": "7252", + "name": "Dalmatian", + "examine": "A purebred doggy." + }, + { + "id": "7253", + "name": "Sheepdog puppy", + "examine": "This little puppy is very quiet." + }, + { + "id": "7254", + "name": "Sheepdog", + "examine": "Come by! Come by!" + }, + { + "id": "7255", + "name": "Sheepdog puppy", + "examine": "This little puppy is very quiet." + }, + { + "id": "7256", + "name": "Sheepdog", + "examine": "Come by! Come by!" + }, + { + "id": "7257", + "name": "Bulldog", + "examine": "Looks like it's chewing a wasp." + }, + { + "id": "7258", + "name": "Bulldog", + "examine": "Looks like it's chewing a wasp." + }, + { + "id": "7259", + "name": "Bulldog puppy", + "examine": "One proud little puppy." + }, + { + "id": "7260", + "name": "Bulldog puppy", + "examine": "One proud little puppy." + }, + { + "id": "7261", + "name": "Raven chick" + }, + { + "id": "7262", + "name": "Raven" + }, + { + "id": "7263", + "name": "Raven chick" + }, + { + "id": "7264", + "name": "Raven" + }, + { + "id": "7265", + "name": "Raven chick" + }, + { + "id": "7266", + "name": "Raven" + }, + { + "id": "7267", + "name": "Raven chick" + }, + { + "id": "7268", + "name": "Raven" + }, + { + "id": "7269", + "name": "Raven chick" + }, + { + "id": "7270", + "name": "Raven" + }, + { + "id": "7271", + "name": "Baby raccoon" + }, + { + "id": "7272", + "name": "Raccoon" + }, + { + "id": "7273", + "name": "Baby raccoon" + }, + { + "id": "7274", + "name": "Raccoon" + }, + { + "id": "7275", + "name": "Baby Raccoon", + "examine": "A stripy little baby raccoon.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7276", + "name": "Baby raccoon" + }, + { + "id": "7277", + "name": "Baby gecko" + }, + { + "id": "7278", + "name": "Baby gecko" + }, + { + "id": "7279", + "name": "Baby gecko" + }, + { + "id": "7280", + "name": "Baby gecko" + }, + { + "id": "7281", + "name": "Gecko", + "examine": "" + }, + { + "id": "7282", + "name": "Gecko" + }, + { + "id": "7283", + "name": "Gecko" + }, + { + "id": "7284", + "name": "Gecko" + }, + { + "id": "7285", + "name": "Baby gecko", + "examine": "It's so adorably tiny!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7286", + "name": "Baby gecko", + "examine": "It's so adorably tiny!" + }, + { + "id": "7287", + "name": "Baby gecko", + "examine": "" + }, + { + "id": "7288", + "name": "Baby gecko", + "examine": "It's so adorably tiny!" + }, + { + "id": "7289", + "name": "Gecko" + }, + { + "id": "7290", + "name": "Gecko", + "examine": "How cute!" + }, + { + "id": "7291", + "name": "Gecko" + }, + { + "id": "7292", + "name": "Gecko", + "examine": "How cute!" + }, + { + "id": "7293", + "name": "Baby giant crab" + }, + { + "id": "7294", + "name": "Giant crab" + }, + { + "id": "7295", + "name": "Baby giant crab" + }, + { + "id": "7296", + "name": "Giant crab" + }, + { + "id": "7297", + "name": "Baby giant crab" + }, + { + "id": "7298", + "name": "Giant crab" + }, + { + "id": "7299", + "name": "Baby giant crab" + }, + { + "id": "7300", + "name": "Giant crab" + }, + { + "id": "7301", + "name": "Baby squirrel" + }, + { + "id": "7302", + "name": "Squirrel" + }, + { + "id": "7303", + "name": "Baby squirrel" + }, + { + "id": "7304", + "name": "Squirrel" + }, + { + "id": "7305", + "name": "Baby squirrel" + }, + { + "id": "7306", + "name": "Squirrel" + }, + { + "id": "7307", + "name": "Baby squirrel" + }, + { + "id": "7308", + "name": "Squirrel" + }, + { + "id": "7309", + "name": "Baby squirrel" + }, + { + "id": "7310", + "name": "Baby squirrel" + }, + { + "id": "7311", + "name": "Baby squirrel" + }, + { + "id": "7312", + "name": "Baby squirrel" + }, + { + "id": "7313", + "name": "Baby penguin" + }, + { + "id": "7314", + "name": "Penguin" + }, + { + "id": "7315", + "name": "Penguin" + }, + { + "id": "7316", + "name": "Baby penguin" + }, + { + "id": "7317", + "name": "Penguin" + }, + { + "id": "7318", + "name": "Penguin" + }, + { + "id": "7319", + "name": "Vulture chick" + }, + { + "id": "7320", + "name": "Vulture" + }, + { + "id": "7321", + "name": "Vulture chick" + }, + { + "id": "7322", + "name": "Vulture" + }, + { + "id": "7323", + "name": "Vulture chick" + }, + { + "id": "7324", + "name": "Vulture" + }, + { + "id": "7325", + "name": "Vulture chick" + }, + { + "id": "7326", + "name": "Vulture" + }, + { + "id": "7327", + "name": "Vulture chick" + }, + { + "id": "7328", + "name": "Vulture" + }, + { + "id": "7329", + "name": "Swamp titan", + "attack_level": "1", + "bonuses": "60,60,60,60,50,50,100,200,200,28,100,100,70,70,70", + "combat_style": "0", + "death_animation": "8226", + "defence_animation": "8224", + "defence_level": "78", + "lifepoints": "556", + "magic_level": "70", + "melee_animation": "8222", + "range_level": "70", + "respawn_delay": "0", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7330", + "name": "Swamp titan", + "examine": "Do you hear duelling banjos?", + "attack_level": "60", + "bonuses": "60,60,60,60,50,50,100,200,200,28,100,100,70,70,70", + "combat_style": "0", + "death_animation": "8226", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "117", + "magic_animation": "0", + "magic_level": "65", + "melee_animation": "8222", + "range_animation": "0", + "range_level": "65", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "7331", + "name": "Spirit mosquito", + "examine": "It buzzes and bites. Nasty.", + "attack_level": "28", + "bonuses": "45,49,42,39,47,46,29,43,51,16,53,10,0,0,0", + "death_animation": "8033", + "defence_animation": "8034", + "defence_level": "25", + "lifepoints": "43", + "magic_animation": "8032", + "magic_level": "21", + "melee_animation": "8032", + "poison_immune": "true", + "range_animation": "8032", + "range_level": "25", + "respawn_delay": "50", + "safespot": null, + "strength_level": "24" + }, + { + "id": "7332", + "name": "Spirit mosquito", + "examine": "It buzzes and bites. Nasty.", + "attack_level": "28", + "bonuses": "45,49,42,39,47,46,29,43,51,16,53,10,0,0,0", + "death_animation": "8033", + "defence_animation": "8034", + "defence_level": "25", + "lifepoints": "43", + "magic_animation": "8032", + "magic_level": "21", + "melee_animation": "8032", + "poison_immune": "true", + "range_animation": "8032", + "range_level": "25", + "respawn_delay": "50", + "safespot": null, + "strength_level": "24", + "weakness": "10" + }, + { + "id": "7333", + "name": "Void spinner", + "examine": "It spins.", + "attack_level": "34", + "death_animation": "8176", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "magic_level": "34", + "melee_animation": "8172", + "range_animation": "0", + "range_level": "34", + "safespot": null, + "strength_level": "34", + "weakness": "10" + }, + { + "id": "7334", + "name": "Void spinner", + "examine": "It spins.", + "attack_level": "34", + "death_animation": "8176", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "magic_level": "34", + "melee_animation": "8172", + "range_animation": "0", + "range_level": "34", + "safespot": null, + "strength_level": "34", + "weakness": "10" + }, + { + "id": "7335", + "name": "Forge regent", + "examine": "This one will burn right through the net!", + "attack_level": "60", + "combat_style": "1", + "death_animation": "7864", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "108", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "7863", + "range_animation": "0", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "7336", + "name": "Forge regent", + "examine": "This one will burn right through the net!", + "attack_level": "60", + "combat_style": "1", + "death_animation": "7864", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "108", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "7863", + "range_animation": "0", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "7337", + "name": "Spirit larupia", + "examine": "Fast cat is fast.", + "attack_level": "50", + "death_animation": "5230", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "81", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "5228", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "0", + "safespot": null, + "strength_level": "50", + "weakness": "10" + }, + { + "id": "7338", + "name": "Spirit larupia", + "examine": "Fast cat is fast.", + "attack_level": "50", + "death_animation": "5230", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "81", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "5228", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "0", + "safespot": null, + "strength_level": "50", + "weakness": "10" + }, + { + "id": "7339", + "name": "Geyser titan", + "examine": "It'll kill your enemies, and makes a great cup of tea.", + "attack_level": "70", + "bonuses": "115,115,115,110,110,102,95,110,110,105,78,120,115,120,120", + "combat_style": "1", + "death_animation": "7880", + "defence_animation": "7878", + "defence_level": "70", + "lifepoints": "620", + "magic_animation": "422", + "magic_level": "70", + "melee_animation": "7879", + "poison_immune": "true", + "range_animation": "422", + "range_level": "70", + "respawn_delay": "50", + "safespot": null, + "strength_level": "70", + "weakness": "0" + }, + { + "id": "7340", + "name": "Geyser titan", + "examine": "It'll kill your enemies, and makes a great cup of tea.", + "attack_level": "70", + "bonuses": "115,115,115,110,110,102,95,110,110,105,78,120,115,120,120", + "combat_style": "1", + "death_animation": "7880", + "defence_animation": "7878", + "defence_level": "70", + "lifepoints": "620", + "magic_animation": "422", + "magic_level": "70", + "melee_animation": "7879", + "poison_immune": "true", + "range_animation": "422", + "range_level": "70", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "70", + "weakness": "0" + }, + { + "id": "7341", + "name": "Lava titan", + "examine": "Made of lava.", + "attack_level": "65", + "bonuses": "100,120,90,100,90,90,40,50,0,0,0,0,0,0,0", + "combat_style": "0", + "death_animation": "7979", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "115", + "magic_animation": "0", + "magic_level": "65", + "melee_animation": "7980", + "range_animation": "0", + "range_level": "65", + "respawn_delay": "0", + "safespot": null, + "strength_level": "65", + "weakness": "10" + }, + { + "id": "7342", + "name": "Lava titan", + "examine": "Made of lava.", + "attack_level": "65", + "bonuses": "100,120,90,100,90,90,40,50,0,0,0,0,0,0,0", + "combat_style": "0", + "death_animation": "7979", + "defence_animation": "0", + "defence_level": "65", + "lifepoints": "115", + "magic_animation": "0", + "magic_level": "65", + "melee_animation": "7980", + "range_animation": "0", + "range_level": "65", + "respawn_delay": "0", + "safespot": null, + "strength_level": "65", + "weakness": "10" + }, + { + "id": "7343", + "name": "Steel titan", + "examine": "The King of the Titans!", + "attack_level": "70", + "bonuses": "105,105,105,100,110,102,95,110,110,105,78,120,115,120,120", + "combat_style": "1", + "death_animation": "8184", + "defence_animation": "8185", + "defence_level": "70", + "lifepoints": "750", + "magic_animation": "8183", + "magic_level": "70", + "melee_animation": "8183", + "poison_immune": "true", + "range_animation": "8183", + "range_level": "70", + "respawn_delay": "15", + "safespot": null, + "slayer_exp": "0", + "strength_level": "70", + "weakness": "10" + }, + { + "id": "7344", + "name": "Steel titan", + "examine": "The King of the Titans!", + "attack_level": "70", + "bonuses": "105,105,105,100,110,102,95,110,110,105,78,120,115,120,120", + "combat_style": "1", + "death_animation": "8184", + "defence_animation": "8185", + "defence_level": "70", + "lifepoints": "750", + "magic_animation": "8183", + "magic_level": "70", + "melee_animation": "8183", + "poison_immune": "true", + "range_animation": "8183", + "range_level": "70", + "respawn_delay": "15", + "safespot": null, + "slayer_exp": "0", + "strength_level": "70", + "weakness": "10" + }, + { + "id": "7345", + "name": "Obsidian golem", + "examine": "Four fists can make quite an impression IN someone...", + "attack_level": "60", + "bonuses": "100,120,90,100,90,90,40,50,0,0,0,0,0,0,0", + "death_animation": "8052", + "defence_animation": "8051", + "defence_level": "60", + "lifepoints": "10", + "magic_level": "60", + "melee_animation": "8050", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60" + }, + { + "id": "7346", + "name": "Obsidian golem", + "examine": "Four fists can make quite an impression IN someone...", + "attack_level": "60", + "bonuses": "100,120,90,100,90,90,40,50,0,0,0,0,0,0,0", + "death_animation": "8052", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "104", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "8050", + "range_animation": "0", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "7347", + "name": "Talon beast", + "examine": "If a normal black cat is bad luck", + "attack_level": "60", + "death_animation": "5990", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "110", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "5989", + "range_animation": "0", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "7348", + "name": "Talon beast", + "examine": "If a normal black cat is bad luck", + "attack_level": "60", + "death_animation": "5990", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "110", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "5989", + "range_animation": "0", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "7349", + "name": "Abyssal titan", + "examine": "Big", + "attack_level": "70", + "death_animation": "7692", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "125", + "magic_animation": "0", + "magic_level": "70", + "melee_animation": "7693", + "range_animation": "0", + "range_level": "70", + "respawn_delay": "0", + "safespot": null, + "strength_level": "70", + "weakness": "10" + }, + { + "id": "7350", + "name": "Abyssal titan", + "examine": "Big", + "attack_level": "70", + "death_animation": "7692", + "defence_animation": "0", + "defence_level": "70", + "lifepoints": "125", + "magic_animation": "0", + "magic_level": "70", + "melee_animation": "7693", + "range_animation": "0", + "range_level": "70", + "respawn_delay": "0", + "safespot": null, + "strength_level": "70", + "weakness": "10" + }, + { + "id": "7351", + "name": "Void torcher", + "examine": "It torches.", + "attack_level": "34", + "combat_style": "2", + "death_animation": "8236", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "magic_level": "34", + "melee_animation": "8235", + "range_animation": "0", + "range_level": "34", + "safespot": null, + "strength_level": "34", + "weakness": "10" + }, + { + "id": "7352", + "name": "Void torcher", + "examine": "It torches.", + "attack_level": "34", + "combat_style": "2", + "death_animation": "8236", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "magic_level": "34", + "melee_animation": "8235", + "range_animation": "0", + "range_level": "34", + "safespot": null, + "strength_level": "34", + "weakness": "10" + }, + { + "id": "7353", + "name": "Giant chinchompa", + "examine": "Looks a little...volatile.", + "attack_level": "29", + "combat_style": "1", + "death_animation": "7758", + "defence_animation": "0", + "defence_level": "29", + "lifepoints": "41", + "magic_animation": "0", + "magic_level": "29", + "melee_animation": "7755", + "range_animation": "0", + "range_level": "29", + "respawn_delay": "0", + "safespot": null, + "strength_level": "29", + "weakness": "10" + }, + { + "id": "7354", + "name": "Giant chinchompa", + "examine": "Looks a little...volatile.", + "attack_level": "29", + "combat_style": "1", + "death_animation": "7758", + "defence_animation": "0", + "defence_level": "29", + "lifepoints": "41", + "magic_animation": "0", + "magic_level": "29", + "melee_animation": "7755", + "range_animation": "0", + "range_level": "29", + "respawn_delay": "0", + "safespot": null, + "strength_level": "29", + "weakness": "10" + }, + { + "id": "7355", + "name": "Fire titan", + "examine": "Scorching!", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "64,45,76,82,120,84,140,120,106,89,113,80,0,0,0", + "combat_style": "2", + "death_animation": "7833", + "defence_animation": "7832", + "defence_level": "40", + "lifepoints": "476", + "magic_animation": "7834", + "magic_level": "40", + "melee_animation": "7834", + "poison_immune": "true", + "range_animation": "7834", + "range_level": "30", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "30", + "weakness": "10" + }, + { + "id": "7356", + "name": "Fire titan", + "examine": "Scorching!", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "64,45,76,82,208,84,221,231,179,89,113,23,0,0,0", + "combat_style": "2", + "death_animation": "7833", + "defence_animation": "7832", + "defence_level": "40", + "lifepoints": "476", + "magic_animation": "7834", + "magic_level": "40", + "melee_animation": "7834", + "poison_immune": "true", + "range_animation": "7834", + "range_level": "30", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "30", + "weakness": "10" + }, + { + "id": "7357", + "name": "Moss titan", + "examine": "Gathers rolling stones to bash people with.", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "64,45,76,82,120,84,140,120,106,89,113,80,0,0,0", + "death_animation": "7843", + "defence_animation": "7832", + "defence_level": "40", + "lifepoints": "476", + "magic_animation": "7834", + "magic_level": "40", + "melee_animation": "7844", + "poison_immune": "true", + "range_animation": "7834", + "range_level": "30", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "30", + "weakness": "10" + }, + { + "id": "7358", + "name": "Moss titan", + "examine": "Gathers rolling stones to bash people with.", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "64,45,76,82,120,84,140,120,106,89,113,80,0,0,0", + "death_animation": "7843", + "defence_animation": "7832", + "defence_level": "40", + "lifepoints": "476", + "magic_animation": "7834", + "magic_level": "40", + "melee_animation": "7844", + "poison_immune": "true", + "range_animation": "7834", + "range_level": "30", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "30", + "weakness": "10" + }, + { + "id": "7359", + "name": "Ice titan", + "examine": "Frosty the highly violent snowman.", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "64,45,76,82,120,84,140,120,106,89,113,80,0,0,0", + "death_animation": "7846", + "defence_animation": "7832", + "defence_level": "40", + "lifepoints": "476", + "magic_animation": "7834", + "magic_level": "40", + "melee_animation": "7845", + "poison_immune": "true", + "range_animation": "7834", + "range_level": "30", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "30", + "weakness": "10" + }, + { + "id": "7360", + "name": "Ice titan", + "examine": "Frosty the highly violent snowman.", + "attack_level": "40", + "attack_speed": "5", + "bonuses": "64,45,76,82,120,84,140,120,106,89,113,80,0,0,0", + "death_animation": "7846", + "defence_animation": "7832", + "defence_level": "40", + "lifepoints": "476", + "magic_animation": "7834", + "magic_level": "40", + "melee_animation": "7845", + "poison_immune": "true", + "range_animation": "7834", + "range_level": "30", + "respawn_delay": "50", + "safespot": null, + "slayer_exp": "0", + "strength_level": "30", + "weakness": "10" + }, + { + "id": "7361", + "name": "Spirit Tz-Kih", + "examine": "This bat burned down the belfry.", + "attack_level": "22", + "attack_speed": "3", + "combat_style": "2", + "death_animation": "8258", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "magic_level": "22", + "melee_animation": "8257", + "range_animation": "0", + "range_level": "22", + "respawn_delay": "0", + "safespot": null, + "strength_level": "22", + "weakness": "10" + }, + { + "id": "7362", + "name": "Spirit Tz-Kih", + "examine": "This bat burned down the belfry.", + "attack_level": "22", + "attack_speed": "3", + "combat_style": "2", + "death_animation": "8258", + "defence_animation": "0", + "defence_level": "22", + "lifepoints": "31", + "magic_animation": "0", + "magic_level": "22", + "melee_animation": "8257", + "range_animation": "0", + "range_level": "22", + "respawn_delay": "0", + "safespot": null, + "strength_level": "22", + "weakness": "10" + }, + { + "id": "7363", + "name": "Spirit graahk", + "examine": "Those spikes are pretty big!", + "attack_level": "50", + "death_animation": "5230", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "81", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "5229", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1367", + "strength_level": "50", + "weakness": "10" + }, + { + "id": "7364", + "name": "Spirit graahk", + "examine": "Those spikes are pretty big!", + "attack_level": "50", + "death_animation": "5230", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "81", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "5229", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1367", + "strength_level": "50", + "weakness": "10" + }, + { + "id": "7365", + "name": "Spirit kyatt", + "examine": "Those teeth are pretty big!", + "attack_level": "50", + "death_animation": "5230", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "81", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "5228", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1365", + "strength_level": "50", + "weakness": "10" + }, + { + "id": "7366", + "name": "Spirit kyatt", + "examine": "Those teeth are pretty big!", + "attack_level": "50", + "death_animation": "5230", + "defence_animation": "0", + "defence_level": "50", + "lifepoints": "81", + "magic_animation": "0", + "magic_level": "50", + "melee_animation": "5228", + "range_animation": "0", + "range_level": "50", + "respawn_delay": "0", + "safespot": null, + "start_gfx": "1365", + "strength_level": "50", + "weakness": "10" + }, + { + "id": "7367", + "name": "Void shifter", + "examine": "It shifts.", + "attack_level": "34", + "death_animation": "8133", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "magic_level": "34", + "melee_animation": "8131", + "range_animation": "0", + "range_level": "34", + "safespot": null, + "strength_level": "34", + "weakness": "10" + }, + { + "id": "7368", + "name": "Void shifter", + "examine": "It shifts.", + "attack_level": "34", + "death_animation": "8133", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "magic_level": "34", + "melee_animation": "8131", + "range_animation": "0", + "range_level": "34", + "safespot": null, + "strength_level": "34", + "weakness": "10" + }, + { + "id": "7369", + "name": "Void shifter" + }, + { + "id": "7370", + "name": "Void ravager", + "examine": "It ravages.", + "attack_level": "34", + "death_animation": "8087", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "magic_level": "34", + "melee_animation": "8086", + "range_animation": "0", + "range_level": "34", + "safespot": null, + "strength_level": "34", + "weakness": "10" + }, + { + "id": "7371", + "name": "Void ravager", + "examine": "It ravages.", + "attack_level": "34", + "death_animation": "8087", + "defence_animation": "0", + "defence_level": "34", + "lifepoints": "48", + "magic_animation": "0", + "magic_level": "34", + "melee_animation": "8086", + "range_animation": "0", + "range_level": "34", + "safespot": null, + "strength_level": "34", + "weakness": "10" + }, + { + "id": "7372", + "name": "Ravenous locust" + }, + { + "id": "7373", + "name": "Ravenous locust", + "examine": "It's like a little stomach on wings.", + "attack_level": "60", + "death_animation": "7996", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "7994", + "range_animation": "0", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "7374", + "name": "Ravenous locust", + "examine": "It's like a little stomach on wings.", + "attack_level": "60", + "death_animation": "7996", + "defence_animation": "0", + "defence_level": "60", + "lifepoints": "100", + "magic_animation": "0", + "magic_level": "60", + "melee_animation": "7994", + "range_animation": "0", + "range_level": "60", + "respawn_delay": "0", + "safespot": null, + "strength_level": "60", + "weakness": "10" + }, + { + "id": "7375", + "name": "Iron titan", + "examine": "He is an iron man!", + "attack_level": "65", + "bonuses": "120,130,100,109,80,120,102,90,103,80,100,108,105,66,90", + "combat_style": "0", + "death_animation": "7947", + "defence_animation": "7948", + "defence_level": "65", + "lifepoints": "694", + "magic_level": "65", + "melee_animation": "7946", + "range_level": "65", + "respawn_delay": "0", + "safespot": null, + "strength_level": "65", + "weakness": "10" + }, + { + "id": "7376", + "name": "Iron titan", + "examine": "He is an iron man!", + "attack_level": "65", + "bonuses": "120,130,100,109,80,120,102,90,103,80,100,108,105,66,90", + "combat_audio": "0,0,0", + "combat_style": "0", + "death_animation": "7947", + "defence_animation": "7948", + "defence_level": "65", + "lifepoints": "694", + "magic_level": "65", + "melee_animation": "7946", + "range_level": "65", + "respawn_delay": "0", + "safespot": null, + "slayer_exp": "0", + "strength_level": "65", + "weakness": "10" + }, + { + "id": "7377", + "name": "Pyrelord", + "examine": "Where did I put the marshmallows?", + "attack_level": "46", + "death_animation": "8078", + "defence_animation": "0", + "defence_level": "46", + "lifepoints": "65", + "magic_animation": "0", + "magic_level": "46", + "melee_animation": "8080", + "range_animation": "0", + "range_level": "46", + "safespot": null, + "strength_level": "46", + "weakness": "10" + }, + { + "id": "7378", + "name": "Pyrelord", + "examine": "Where did I put the marshmallows?", + "attack_level": "46", + "death_animation": "8078", + "defence_animation": "0", + "defence_level": "46", + "lifepoints": "65", + "magic_animation": "0", + "magic_level": "46", + "melee_animation": "8080", + "range_animation": "0", + "range_level": "46", + "safespot": null, + "strength_level": "46", + "weakness": "10" + }, + { + "id": "7379", + "name": "Elfinlocks", + "aggressive": "true", + "attack_level": "1", + "death_animation": "8967", + "defence_animation": "8966", + "defence_level": "1", + "lifepoints": "120", + "melee_animation": "8965", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7380", + "name": "Missi Sissi", + "aggressive": "true", + "attack_level": "1", + "death_animation": "8967", + "defence_animation": "8966", + "defence_level": "1", + "lifepoints": "120", + "melee_animation": "8965", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7381", + "name": "Missi Sissi", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_style": "2", + "death_animation": "8956", + "defence_animation": "8957", + "defence_level": "1", + "lifepoints": "75", + "melee_animation": "8955", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7382", + "name": "Uberlass", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "combat_style": "2", + "death_animation": "8956", + "defence_animation": "8957", + "defence_level": "1", + "lifepoints": "75", + "melee_animation": "8955", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7383", + "name": "Uberlass" + }, + { + "id": "7384", + "name": "Uberlass" + }, + { + "id": "7385", + "name": "Uberlass" + }, + { + "id": "7386", + "name": "Uberlass" + }, + { + "id": "7387", + "name": "Sannytea" + }, + { + "id": "7388", + "name": "Sannytea" + }, + { + "id": "7389", + "name": "Irollsixes" + }, + { + "id": "7390", + "name": "Irollsixes" + }, + { + "id": "7391", + "name": "Foxyhunter" + }, + { + "id": "7392", + "name": "Foxyhunter" + }, + { + "id": "7393", + "name": "Foxyhunter" + }, + { + "id": "7394", + "name": "Gabriela" + }, + { + "id": "7395", + "name": "Teodor" + }, + { + "id": "7396", + "name": "Aurel" + }, + { + "id": "7397", + "name": "Cornelius" + }, + { + "id": "7398", + "name": "Elisabeta", + "examine": "The vengeful spirit of one who died within Daemonheim.", + "aggressive": "true", + "attack_level": "25", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "7", + "magic_animation": "0", + "magic_level": "25", + "melee_animation": "0", + "range_animation": "0", + "range_level": "25", + "safespot": null, + "strength_level": "25", + "weakness": "3" + }, + { + "id": "7399", + "name": "Sorin" + }, + { + "id": "7400", + "name": "Luscion" + }, + { + "id": "7401", + "name": "Sergiu" + }, + { + "id": "7402", + "name": "Radu" + }, + { + "id": "7403", + "name": "Grigore" + }, + { + "id": "7404", + "name": "Ileana" + }, + { + "id": "7405", + "name": "Valeria" + }, + { + "id": "7406", + "name": "Emilia" + }, + { + "id": "7407", + "name": "Florin" + }, + { + "id": "7408", + "name": "Catalina" + }, + { + "id": "7409", + "name": "Ivan" + }, + { + "id": "7410", + "name": "Victor" + }, + { + "id": "7411", + "name": "Helena" + }, + { + "id": "7412", + "name": "Mihail" + }, + { + "id": "7413", + "name": "Nicoleta" + }, + { + "id": "7414", + "name": "Vasile" + }, + { + "id": "7415", + "name": "Razvan" + }, + { + "id": "7416", + "name": "Luminata" + }, + { + "id": "7417", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "3102,3104,3103", + "death_animation": "2707", + "defence_animation": "2706", + "defence_level": "1", + "lifepoints": "2", + "magic_animation": "2705", + "melee_animation": "2705", + "range_animation": "2705", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7418", + "name": "Juvinate" + }, + { + "id": "7419", + "name": "Held vampyre juvinate" + }, + { + "id": "7420", + "name": "Hieronymus Avlafrim" + }, + { + "id": "7421", + "name": "Sasquine Huburns" + }, + { + "id": "7422", + "name": "Sasquine Huburns" + }, + { + "id": "7423", + "name": "Lollery" + }, + { + "id": "7424", + "name": "Wigglewoo" + }, + { + "id": "7425", + "name": "Wigglewoo", + "examine": "An impling manager: what a terrifying thought!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7426", + "name": "Orangeowns", + "examine": "This worker looks after the incubator.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7427", + "name": "Orangeowns" + }, + { + "id": "7428", + "name": "I like m0m" + }, + { + "id": "7429", + "name": "I like m0m" + }, + { + "id": "7430", + "name": "Qutiedoll" + }, + { + "id": "7431", + "name": "Goreu" + }, + { + "id": "7432", + "name": "Ysgawyn" + }, + { + "id": "7433", + "name": "Arvel" + }, + { + "id": "7434", + "name": "Mawrth" + }, + { + "id": "7435", + "name": "Kelyn" + }, + { + "id": "7436", + "name": "Eoin" + }, + { + "id": "7437", + "name": "Iona" + }, + { + "id": "7438", + "name": "Elf warrior", + "attack_level": "1", + "clue_level": "2", + "combat_audio": "425,427,426", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7439", + "name": "Elf warrior", + "attack_level": "1", + "clue_level": "2", + "combat_audio": "425,427,426", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7440", + "name": "Elf warrior", + "attack_level": "1", + "clue_level": "2", + "combat_audio": "425,427,426", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7441", + "name": "Elf warrior", + "attack_level": "1", + "clue_level": "2", + "combat_audio": "425,427,426", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7442", + "name": "Arianwyn" + }, + { + "id": "7443", + "name": "Eudav", + "examine": "He holds up passers by.", + "aggressive": "true", + "attack_level": "8", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "8", + "lifepoints": "11", + "magic_animation": "0", + "melee_animation": "386", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "8", + "weakness": "7" + }, + { + "id": "7444", + "name": "Oronwen" + }, + { + "id": "7445", + "name": "Banker" + }, + { + "id": "7446", + "name": "Banker" + }, + { + "id": "7447", + "name": "Dalldav" + }, + { + "id": "7448", + "name": "Gethin" + }, + { + "id": "7449", + "name": "Amaethwr" + }, + { + "id": "7450", + "name": "Teclyn" + }, + { + "id": "7451", + "name": "Butterfly" + }, + { + "id": "7452", + "name": "Lapsang" + }, + { + "id": "7453", + "name": "Lapsang" + }, + { + "id": "7454", + "name": "Souchong" + }, + { + "id": "7455", + "name": "Souchong" + }, + { + "id": "7456", + "name": "Earlgrey" + }, + { + "id": "7457", + "name": "Earlgrey" + }, + { + "id": "7458", + "name": "Fairtrade" + }, + { + "id": "7459", + "name": "Fairtrade", + "attack_level": "1", + "attack_speed": "5", + "defence_level": "1", + "lifepoints": "75", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7460", + "name": "Teapotspout", + "attack_level": "1", + "attack_speed": "5", + "defence_level": "1", + "lifepoints": "75", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7461", + "name": "Rat", + "examine": "A popular dwarven delicacy.", + "attack_level": "1", + "attack_speed": "5", + "combat_audio": "703,705,704", + "death_animation": "4935", + "defence_animation": "4934", + "defence_level": "1", + "lifepoints": "5", + "magic_animation": "4933", + "melee_animation": "4933", + "range_animation": "4933", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7462", + "name": "Hotwater", + "examine": "It's bubbling, gross.", + "attack_level": "99", + "attack_speed": "5", + "bonuses": "20,20,20,20,20,20,20,20,20,20,20,20,45,20,0", + "death_animation": "9131", + "defence_animation": "9132", + "defence_level": "99", + "lifepoints": "120", + "magic_animation": "9130", + "melee_animation": "9130", + "range_animation": "9130", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "99" + }, + { + "id": "7463", + "name": "Hotwater", + "examine": "It's bubbling, gross.", + "attack_level": "99", + "attack_speed": "5", + "bonuses": "20,20,20,20,20,20,20,20,20,20,20,20,45,20,0", + "death_animation": "9131", + "defence_animation": "9132", + "defence_level": "99", + "lifepoints": "120", + "magic_animation": "9130", + "melee_animation": "9130", + "range_animation": "9130", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "99" + }, + { + "id": "7464", + "name": "Sliceoflemon" + }, + { + "id": "7465", + "name": "Sliceoflemon" + }, + { + "id": "7466", + "name": "Milknosugar" + }, + { + "id": "7467", + "name": "Milknosugar" + }, + { + "id": "7468", + "name": "Randomdood" + }, + { + "id": "7469", + "name": "Employedman" + }, + { + "id": "7470", + "name": "Heidiggle" + }, + { + "id": "7471", + "name": "Dodgy Penny" + }, + { + "id": "7472", + "name": "Shadydude98" + }, + { + "id": "7473", + "name": "Madam C" + }, + { + "id": "7474", + "name": "M0m Online" + }, + { + "id": "7475", + "name": "Lady Seenit", + "examine": "His usual sunny disposition is not in evidence.", + "attack_level": "30", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "magic_level": "30", + "range_animation": "0", + "range_level": "30", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "10" + }, + { + "id": "7476", + "name": "Berrybree", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "50", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7477", + "name": "Stuffstuffer", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "50", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7478", + "name": "Learking" + }, + { + "id": "7479", + "name": "Learking", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "60", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7480", + "name": "Rachael", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "70", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7481", + "name": "Cool Mom227", + "examine": "You clearly can't live on treasure alone.", + "attack_level": "30", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7482", + "name": "Purepker895", + "examine": "A testament to the effect of greed.", + "attack_level": "30", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7483", + "name": "Pkmaster0036", + "examine": "He wanted loot", + "attack_level": "30", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7484", + "name": "Cow1337killr", + "examine": "Eternally looking for that big payday.", + "attack_level": "30", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7485", + "name": "Mathdude", + "examine": "No more tea-breaks for this one.", + "attack_level": "30", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7486", + "name": "Mathdude", + "examine": "Even in death you can smell his feet.", + "attack_level": "30", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7487", + "name": "1337sp34kr", + "examine": "An anatomist's dream.", + "attack_level": "30", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7488", + "name": "1337sp34kr", + "examine": "A hand seems to be gripping his spine through his chest. Ouch.", + "attack_level": "30", + "death_animation": "5491", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7489", + "name": "Moglewee" + }, + { + "id": "7490", + "name": "Moglewee" + }, + { + "id": "7491", + "name": "Sarah Domin" + }, + { + "id": "7492", + "name": "Sarah Domin", + "examine": "A desert dweller taken to banditry.", + "attack_level": "30", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "9705", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7493", + "name": "Sarah Domin", + "examine": "Calls himself an archaeologist.", + "attack_level": "30", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "9715", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7494", + "name": "Sue Spammers", + "examine": "He hasn't found much of use", + "attack_level": "30", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "9705", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7495", + "name": "Killerwail", + "examine": "An amateur historian with added greed.", + "attack_level": "30", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "9715", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7496", + "name": "Wise Old Man", + "examine": "It all started with her love of genealogy.", + "attack_level": "30", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "melee_animation": "9705", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7497", + "name": "Sabre-toothed kyatt", + "examine": "A rocky horror.", + "attack_level": "27", + "defence_animation": "0", + "defence_level": "27", + "lifepoints": "38", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "27", + "weakness": "6" + }, + { + "id": "7498", + "name": "Snowy knight" + }, + { + "id": "7499", + "name": "Sapphire glacialis" + }, + { + "id": "7500", + "name": "Cerulean twitch", + "examine": "This dung beetle has mistaken you for its staple diet.", + "aggressive": "true", + "attack_level": "30", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7501", + "name": "Abone", + "examine": "It's looking unwell - probably something it ate.", + "aggressive": "true", + "attack_level": "30", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7502", + "name": "Mythmaster", + "examine": "Once a valuable contributor to the ecosystem.", + "aggressive": "true", + "attack_level": "30", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7503", + "name": "Donkey Wrong", + "examine": "This is what happens if you play with your food.", + "aggressive": "true", + "attack_level": "30", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "42", + "magic_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7504", + "name": "Creapantic", + "examine": "He likes a good fight", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7505", + "name": "Frondlike", + "examine": "He likes a good fight", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7506", + "name": "Happy Spud", + "examine": "His favourite must be winning.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7507", + "name": "Nobodyhere", + "examine": "Blood-thirsty and enthusiastic.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7508", + "name": "Bluehairlass", + "examine": "Probably discussing the strengths and weaknesses of the fighting slaves.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7509", + "name": "Evil Wibbler" + }, + { + "id": "7510", + "name": "Ilikekebabs", + "examine": "His favourite must be winning.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7511", + "name": "Trunka Lex", + "examine": "His favourite must be winning.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7512", + "name": "Val Razz", + "examine": "Probably discussing the strengths and weaknesses of the fighting slaves.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7513", + "name": "Abstractclas", + "examine": "Probably discussing the strengths and weaknesses of the fighting slaves.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7514", + "name": "Bigbluebox", + "examine": "Bloodthirsty and enthusiastic.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7515", + "name": "Funorbrox", + "examine": "Bloodthirsty and enthusiastic.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7516", + "name": "Heresjohnny" + }, + { + "id": "7517", + "name": "Mogglewump" + }, + { + "id": "7518", + "name": "Morrisnorris", + "examine": "He's asleep.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7519", + "name": "Matt Blitzer", + "examine": "He's propping the bar up. Or is it the other way round?", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7520", + "name": "Ketchuppl0x", + "examine": "He demands to have some booze.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7521", + "name": "Renderorder" + }, + { + "id": "7522", + "name": "Boolean" + }, + { + "id": "7523", + "name": "Stress Diva" + }, + { + "id": "7524", + "name": "Treadsoftly" + }, + { + "id": "7525", + "name": "Helphelphelp" + }, + { + "id": "7526", + "name": "Doorbellpl0x" + }, + { + "id": "7527", + "name": "Fixmydoorup" + }, + { + "id": "7528", + "name": "Redheadmonky", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "836", + "defence_animation": "425", + "defence_level": "1", + "lifepoints": "22", + "melee_animation": "395", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7529", + "name": "Wallscaler" + }, + { + "id": "7530", + "name": "2scompany" + }, + { + "id": "7531", + "name": "2scompany" + }, + { + "id": "7532", + "name": "3sacrowd", + "examine": "It's an NPC.", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "slayer_exp": "0", + "strength_level": "1" + }, + { + "id": "7533", + "name": "4sjustsilly" + }, + { + "id": "7534", + "name": "Roadblocked" + }, + { + "id": "7535", + "name": "Barricade" + }, + { + "id": "7536", + "name": "Barricade" + }, + { + "id": "7537", + "name": "Yoinker" + }, + { + "id": "7538", + "name": "Yoinker" + }, + { + "id": "7539", + "name": "Stopthief" + }, + { + "id": "7540", + "name": "Stopthief" + }, + { + "id": "7541", + "name": "Knickknack" + }, + { + "id": "7542", + "name": "Paddywhack" + }, + { + "id": "7543", + "name": "Giveadog" + }, + { + "id": "7544", + "name": "Spacebadgers" + }, + { + "id": "7545", + "name": "Freakypeaky" + }, + { + "id": "7546", + "name": "Rollinghome" + }, + { + "id": "7547", + "name": "Nullpointer" + }, + { + "id": "7548", + "name": "Badgerfreak" + }, + { + "id": "7549", + "name": "Windstrike32" + }, + { + "id": "7550", + "name": "Void Knight" + }, + { + "id": "7551", + "name": "Portal", + "examine": "Not somewhere I want to go...", + "attack_level": "1", + "attack_speed": "90", + "bonuses": "200,200,200,100,100,0,0,0,0,0,0,0,0,0,0", + "defence_level": "90", + "lifepoints": "250", + "magic_level": "70", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7552", + "name": "Portal", + "examine": "Not somewhere I want to go...", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "200,200,200,200,50,0,0,0,0,0,0,0,0,0,0", + "defence_level": "90", + "lifepoints": "250", + "magic_level": "50", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7553", + "name": "Portal", + "examine": "Not somewhere I want to go...", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "200,200,100,200,100,0,0,0,0,0,0,0,0,0,0", + "defence_level": "90", + "lifepoints": "250", + "magic_level": "90", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7554", + "name": "Portal", + "examine": "Not somewhere I want to go...", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "100,100,200,200,100,0,0,0,0,0,0,0,0,0,0", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "90", + "lifepoints": "250", + "magic_animation": "0", + "magic_level": "90", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7555", + "name": "Portal", + "examine": "The Void Knight will soon weaken the shield.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "100,100,100,50,50,0,0,0,0,0,0,0,0,0,0", + "defence_level": "30", + "lifepoints": "250", + "magic_level": "30", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7556", + "name": "Portal", + "examine": "The Void Knight will soon weaken the shield.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "100,100,100,100,25,0,0,0,0,0,0,0,0,0,0", + "defence_level": "30", + "lifepoints": "250", + "magic_level": "15", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7557", + "name": "Portal", + "examine": "The Void Knight will soon weaken the shield.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "100,100,50,100,50,0,0,0,0,0,0,0,0,0,0", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "250", + "magic_animation": "0", + "magic_level": "30", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7558", + "name": "Portal", + "examine": "The Void Knight will soon weaken the shield.", + "attack_level": "1", + "attack_speed": "5", + "bonuses": "50,50,100,100,50,0,0,0,0,0,0,0,0,0,0", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "30", + "lifepoints": "250", + "magic_animation": "0", + "magic_level": "30", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "125", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7559", + "name": "Brawler", + "examine": "Looks after your Farming tools.", + "attack_level": "1", + "combat_audio": "323,326,325", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7560", + "name": "Lostme", + "examine": "Looks after your Farming tools.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7561", + "name": "Chiercat", + "examine": "Looks after your Farming tools.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7562", + "name": "Skydischarge", + "examine": "Looks after your Farming tools.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7563", + "name": "Agplus", + "examine": "Looks after your Farming tools.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7564", + "name": "Distantthin", + "examine": "Looks after your Farming tools.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7565", + "name": "Allmarshes", + "examine": "Looks after your Farming tools.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7566", + "name": "Explosive67", + "examine": "Looks after your Farming tools.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7567", + "name": "Wraithboss" + }, + { + "id": "7568", + "name": "What Goudron" + }, + { + "id": "7569", + "name": "Alpha1beta", + "examine": "Looks after your Farming tools.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7570", + "name": "Solltalk", + "examine": "Enjoys locking up animals in small pens.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7571", + "name": "Hm Val", + "examine": "Enjoys locking up animals in small pens.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7572", + "name": "Wizzydumped", + "examine": "He looks like the type of guy who would mind monkeys.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7573", + "name": "Oddskater", + "examine": "He looks like the type of guy who would mind monkeys.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7574", + "name": "Lvzyoda" + }, + { + "id": "7575", + "name": "Airstriker" + }, + { + "id": "7576", + "name": "Droepedoff" + }, + { + "id": "7577", + "name": "Plzpudding" + }, + { + "id": "7578", + "name": "Assassin10" + }, + { + "id": "7579", + "name": "Steallake" + }, + { + "id": "7580", + "name": "Poledragon", + "attack_level": "1", + "combat_audio": "408,410,409", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7581", + "name": "Deepkiwi" + }, + { + "id": "7582", + "name": "Al Truism", + "examine": "He likes inflicting pain.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7583", + "name": "Ohhhhdude", + "examine": "The Don of penguins.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7584", + "name": "Bigface Oz" + }, + { + "id": "7585", + "name": "Torcher", + "examine": "A penguin pushing paper", + "attack_level": "1", + "combat_audio": "845,848,846", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7586", + "name": "Torcher", + "examine": "A penguin pushing paper", + "attack_level": "1", + "combat_audio": "845,848,846", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7587", + "name": "Torcher" + }, + { + "id": "7588", + "name": "Torcher" + }, + { + "id": "7589", + "name": "Defiler" + }, + { + "id": "7590", + "name": "Defiler" + }, + { + "id": "7591", + "name": "Shifter" + }, + { + "id": "7592", + "name": "Shifter" + }, + { + "id": "7593", + "name": "Shifter", + "examine": "He's a little rough around the edges.", + "attack_level": "1", + "combat_audio": "766,768,767", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7594", + "name": "Shifter" + }, + { + "id": "7595", + "name": "Splatter" + }, + { + "id": "7596", + "name": "Splatter" + }, + { + "id": "7597", + "name": "Splatter" + }, + { + "id": "7598", + "name": "Spinner" + }, + { + "id": "7599", + "name": "Ravager" + }, + { + "id": "7600", + "name": "Fiara" + }, + { + "id": "7601", + "name": "Reggie" + }, + { + "id": "7602", + "name": "Getorix" + }, + { + "id": "7603", + "name": "Pontimer" + }, + { + "id": "7604", + "name": "Alran" + }, + { + "id": "7605", + "name": "Banker", + "examine": "He has unbelievable strength!", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7606", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7607", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7608", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7609", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "130", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7610", + "name": "Flying female vampire" + }, + { + "id": "7611", + "name": "Flying female vampire" + }, + { + "id": "7612", + "name": "Flying female vampire" + }, + { + "id": "7613", + "name": "Flying female vampire" + }, + { + "id": "7614", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7615", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7616", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7617", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "130", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7618", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7619", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7620", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7621", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "130", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7622", + "name": "Vyrewatch" + }, + { + "id": "7623", + "name": "Vyrewatch" + }, + { + "id": "7624", + "name": "Vyrewatch" + }, + { + "id": "7625", + "name": "Vyrewatch" + }, + { + "id": "7626", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7627", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7628", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7629", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "130", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7630", + "name": "Vyrewatch" + }, + { + "id": "7631", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7632", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7633", + "name": "Vyrewatch" + }, + { + "id": "7634", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7635", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7636", + "name": "Fishing spot" + }, + { + "id": "7637", + "name": "Skeletal hand" + }, + { + "id": "7640", + "name": "Skeletal hand", + "examine": "Ew it's still alive.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "5", + "bonuses": "15,15,15,15,15,15,15,15,15,15,15,15,15,15,15", + "death_animation": "9126", + "defence_animation": "9127", + "defence_level": "85", + "lifepoints": "90", + "magic_animation": "9125", + "melee_animation": "9125", + "range_animation": "9125", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "85", + "weakness": "9" + }, + { + "id": "7641", + "name": "Zombie hand", + "examine": "Ew it's still alive.", + "aggressive": "true", + "attack_level": "75", + "attack_speed": "5", + "bonuses": "15,15,15,15,15,15,15,15,15,15,15,15,15,15,15", + "death_animation": "9126", + "defence_animation": "9127", + "defence_level": "75", + "lifepoints": "90", + "magic_animation": "9125", + "melee_animation": "9125", + "range_animation": "9125", + "range_level": "1", + "respawn_delay": "20", + "safespot": null, + "strength_level": "75", + "weakness": "9" + }, + { + "id": "7642", + "name": "Mutated bloodveld", + "examine": "A bloodveld with a very mixed heritage.", + "aggressive": "true", + "attack_level": "56", + "attack_speed": "5", + "death_animation": "9131", + "defence_animation": "0", + "defence_level": "56", + "lifepoints": "112", + "magic_animation": "0", + "melee_animation": "9102", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "206", + "strength_level": "56", + "weakness": "9" + }, + { + "id": "7643", + "name": "Mutated bloodveld", + "examine": "A bloodveld with a very mixed heritage.", + "aggressive": "true", + "attack_level": "58", + "attack_speed": "5", + "death_animation": "9131", + "defence_animation": "0", + "defence_level": "58", + "lifepoints": "116", + "magic_animation": "0", + "melee_animation": "9102", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "slayer_exp": "206", + "strength_level": "58", + "weakness": "9" + }, + { + "id": "7644", + "name": "Zaromark Sliver", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "88", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7645", + "name": "Zaromark Sliver", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "88", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7646", + "name": "Zaromark Sliver", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "88", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7647", + "name": "Zaromark Sliver", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "88", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7648", + "name": "Zaromark Sliver", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "88", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7649", + "name": "Zaromark Sliver", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "88", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7650", + "name": "Zaromark Sliver", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "88", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7651", + "name": "Zaromark Sliver", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "88", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7652", + "name": "Zaromark Sliver" + }, + { + "id": "7653", + "name": "Zaromark Sliver" + }, + { + "id": "7654", + "name": "Fistandantilus", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "65", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7655", + "name": "Fistandantilus", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "65", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7656", + "name": "Fistandantilus", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "65", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7657", + "name": "Fistandantilus", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "65", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7658", + "name": "Fistandantilus", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "65", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7659", + "name": "Fistandantilus", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "65", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7660", + "name": "Fistandantilus", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "65", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7661", + "name": "Fistandantilus", + "aggressive": "true", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "65", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7662", + "name": "Fistandantilus" + }, + { + "id": "7663", + "name": "Fistandantilus" + }, + { + "id": "7664", + "name": "Mercenary Adventurer" + }, + { + "id": "7665", + "name": "Ivan Strom" + }, + { + "id": "7666", + "name": "Mysterious person" + }, + { + "id": "7667", + "name": "Mysterious person" + }, + { + "id": "7668", + "name": "Mysterious person" + }, + { + "id": "7669", + "name": "Mysterious person" + }, + { + "id": "7670", + "name": "Mysterious person" + }, + { + "id": "7671", + "name": "Mysterious person" + }, + { + "id": "7672", + "name": "Flaygian Screwte" + }, + { + "id": "7673", + "name": "Mekritus A'hara" + }, + { + "id": "7674", + "name": "Andiess Juip" + }, + { + "id": "7675", + "name": "Kael Forshaw" + }, + { + "id": "7676", + "name": "Andiess Juip" + }, + { + "id": "7677", + "name": "Kael Forshaw" + }, + { + "id": "7678", + "name": "Safalaan" + }, + { + "id": "7679", + "name": "Andiess Juip" + }, + { + "id": "7680", + "name": "Kael Forshaw" + }, + { + "id": "7681", + "name": "Safalaan" + }, + { + "id": "7682", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7683", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7684", + "name": "Vyrewatch" + }, + { + "id": "7685", + "name": "Vyrewatch" + }, + { + "id": "7686", + "name": "Safalaan" + }, + { + "id": "7687", + "name": "Spectral Vyrewatch" + }, + { + "id": "7688", + "name": "Drezel" + }, + { + "id": "7690", + "name": "Drezel", + "examine": "A holy man." + }, + { + "id": "7691", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7692", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7693", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7694", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7695", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7696", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7697", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7698", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7699", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7700", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7701", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7702", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "130", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7703", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "95", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7704", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "105", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7705", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "120", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7706", + "name": "Vyrewatch", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "defence_level": "1", + "lifepoints": "130", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7707", + "name": "Drezel", + "examine": "A holy man." + }, + { + "id": "7708", + "name": "Temple guardian" + }, + { + "id": "7711", + "name": "Temple guardian", + "examine": "Looks like a big ugly dog.", + "attack_level": "24", + "death_animation": "6564", + "defence_animation": "0", + "defence_level": "24", + "lifepoints": "34", + "magic_animation": "0", + "melee_animation": "6565", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "24", + "weakness": "9" + }, + { + "id": "7712", + "name": "Baby icefiend" + }, + { + "id": "7713", + "name": "Baby icefiend", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "8078", + "defence_animation": "8084", + "defence_level": "1", + "lifepoints": "50", + "melee_animation": "8080", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7714", + "name": "Icefiend", + "examine": "A small ice demon.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "531,533,532", + "death_animation": "8078", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "magic_level": "25", + "melee_animation": "8080", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "7715", + "name": "Icefiend", + "examine": "The icefiend seems to be melting.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "clue_level": "0", + "combat_audio": "531,533,532", + "death_animation": "8078", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "magic_level": "25", + "melee_animation": "8080", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "7716", + "name": "null", + "examine": "The icefiend seems to be melting.", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "8078", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "35", + "magic_animation": "0", + "magic_level": "25", + "melee_animation": "8080", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "5" + }, + { + "id": "7718", + "name": "Brother Bordiss" + }, + { + "id": "7719", + "name": "Brother Althric" + }, + { + "id": "7720", + "name": "Drorkar" + }, + { + "id": "7721", + "name": "Nurmof" + }, + { + "id": "7722", + "name": "Lakki the delivery dwarf" + }, + { + "id": "7723", + "name": "Drorkar" + }, + { + "id": "7724", + "name": "Brother Bordiss" + }, + { + "id": "7725", + "name": "Professor Arblenap" + }, + { + "id": "7726", + "name": "Assistant" + }, + { + "id": "7727", + "name": "Monk", + "examine": "A holy man.", + "attack_level": "12", + "combat_audio": "511,513,512", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "12", + "lifepoints": "17", + "magic_animation": "0", + "melee_animation": "422", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "12", + "weakness": "9" + }, + { + "id": "7728", + "name": "Baby icefiend" + }, + { + "id": "7736", + "name": "Baby icefiend", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "5", + "death_animation": "8078", + "defence_animation": "8084", + "defence_level": "1", + "lifepoints": "50", + "melee_animation": "8080", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7737", + "name": "Will" + }, + { + "id": "7738", + "name": "Will" + }, + { + "id": "7739", + "name": "Phil" + }, + { + "id": "7740", + "name": "Jiggling crate", + "examine": "Is it full of rats?", + "attack_level": "1", + "combat_audio": "703,705,704", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7741", + "name": "Three little kittens", + "examine": "A warrior who has been long forgotten.", + "aggressive": "true", + "attack_level": "30", + "death_animation": "836", + "defence_animation": "0", + "defence_level": "25", + "lifepoints": "5", + "magic_animation": "0", + "magic_level": "25", + "range_animation": "0", + "range_level": "25", + "safespot": null, + "strength_level": "30", + "weakness": "6" + }, + { + "id": "7742", + "name": "Fluffs" + }, + { + "id": "7743", + "name": "Fluffs" + }, + { + "id": "7744", + "name": "Kittens" + }, + { + "id": "7746", + "name": "TzHaar-Mej-Malk" + }, + { + "id": "7747", + "name": "TzHaar-Xil-Tog", + "examine": "It looks upset.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7748", + "name": "TzHaar-Hur-Frok" + }, + { + "id": "7749", + "name": "TzHaar-Ket-Grol" + }, + { + "id": "7750", + "name": "TzHaar-Ket-Rok" + }, + { + "id": "7751", + "name": "TzHaar-Ket-Lurk" + }, + { + "id": "7752", + "name": "TzHaar-Mej-Lor", + "examine": "A TzHaar librarian.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7753", + "name": "TzHaar-Mej" + }, + { + "id": "7754", + "name": "TzHaar-Hur" + }, + { + "id": "7755", + "name": "TzHaar-Xil" + }, + { + "id": "7756", + "name": "Library assistant", + "examine": "A TzHaar-Hur stamping stone tablets.", + "attack_level": "1", + "death_animation": "0", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "10", + "magic_animation": "0", + "melee_animation": "0", + "range_animation": "0", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7757", + "name": "TzHaar-Hur-Brekt" + }, + { + "id": "7758", + "name": "TzHaar-Hur-Brekt" + }, + { + "id": "7759", + "name": "TzHaar-Ket-Jok" + }, + { + "id": "7760", + "name": "TzHaar-Ket-Jok" + }, + { + "id": "7761", + "name": "TzHaar-Xil-Mor" + }, + { + "id": "7762", + "name": "TzHaar-Xil-Mor" + }, + { + "id": "7763", + "name": "TzHaar-Mej-Kol" + }, + { + "id": "7764", + "name": "TzHaar-Mej-Kol" + }, + { + "id": "7765", + "name": "TzHaar-Hur-Klag" + }, + { + "id": "7766", + "name": "TzHaar-Hur-Klag" + }, + { + "id": "7767", + "name": "TzHaar-Hur", + "examine": "Looks like a craftsman of some kind.", + "attack_level": "50", + "attack_speed": "5", + "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "50", + "lifepoints": "80", + "magic_animation": "9286", + "magic_level": "50", + "melee_animation": "9286", + "range_animation": "9286", + "range_level": "1", + "safespot": null, + "strength_level": "50" + }, + { + "id": "7768", + "name": "TzHaar-Hur", + "examine": "Looks like a craftsman of some kind.", + "attack_level": "50", + "attack_speed": "5", + "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "50", + "lifepoints": "80", + "magic_animation": "9286", + "magic_level": "50", + "melee_animation": "9286", + "range_animation": "9286", + "range_level": "1", + "safespot": null, + "strength_level": "50" + }, + { + "id": "7769", + "name": "TzHaar-Hur", + "examine": "Looks like a craftsman of some kind.", + "attack_level": "50", + "attack_speed": "5", + "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", + "death_animation": "9288", + "defence_animation": "9287", + "defence_level": "50", + "lifepoints": "80", + "magic_animation": "9286", + "magic_level": "50", + "melee_animation": "9286", + "range_animation": "9286", + "range_level": "1", + "safespot": null, + "strength_level": "50" + }, + { + "id": "7770", + "name": "TokTz-Ket-Dill" + }, + { + "id": "7771", + "name": "TokTz-Ket-Dill" + }, + { + "id": "7772", + "name": "Lava monster", + "examine": "A monster made of magma.", + "aggressive": "true", + "attack_level": "28", + "combat_style": "1", + "death_animation": "9340", + "defence_animation": "0", + "defence_level": "38", + "lifepoints": "54", + "magic_animation": "0", + "melee_animation": "9337", + "range_animation": "0", + "range_level": "38", + "respawn_delay": "60", + "safespot": null, + "strength_level": "28", + "weakness": "0" + }, + { + "id": "7773", + "name": "Fire monster", + "examine": "A monster like many others", + "aggressive": "true", + "attack_level": "28", + "combat_style": "2", + "death_animation": "9344", + "defence_animation": "0", + "defence_level": "38", + "lifepoints": "54", + "magic_animation": "0", + "melee_animation": "9341", + "range_animation": "0", + "range_level": "38", + "respawn_delay": "60", + "safespot": null, + "strength_level": "28", + "weakness": "0" + }, + { + "id": "7774", + "name": "Skeleton" + }, + { + "id": "7775", + "name": "Skeleton" + }, + { + "id": "7776", + "name": "Skeleton" + }, + { + "id": "7777", + "name": "Skeleton" + }, + { + "id": "7778", + "name": "Skeleton" + }, + { + "id": "7779", + "name": "Sumona" + }, + { + "id": "7781", + "name": "Jesmona" + }, + { + "id": "7782", + "name": "Catolax" + }, + { + "id": "7783", + "name": "Ali Cat" + }, + { + "id": "7786", + "name": "Mighty banshee", + "examine": "Not the best of vocalists.", + "aggressive": "true", + "attack_level": "65", + "combat_audio": "284,286,285", + "combat_style": "1", + "death_animation": "9450", + "defence_animation": "9451", + "defence_level": "65", + "lifepoints": "85", + "magic_animation": "9382", + "magic_level": "65", + "melee_animation": "9449", + "range_animation": "9382", + "range_level": "0", + "respawn_delay": "60", + "safespot": null, + "strength_level": "65", + "weakness": "0" + }, + { + "id": "7787", + "name": "Cave crawler" + }, + { + "id": "7788", + "name": "Skeleton" + }, + { + "id": "7789", + "name": "Zombie" + }, + { + "id": "7790", + "name": "Zombie" + }, + { + "id": "7791", + "name": "Zombie" + }, + { + "id": "7792", + "name": "Zombie" + }, + { + "id": "7793", + "name": "Banshee mistress" + }, + { + "id": "7794", + "name": "Banshee mistress" + }, + { + "id": "7795", + "name": "Insectoid assassin" + }, + { + "id": "7796", + "name": "Insectoid assassin" + }, + { + "id": "7797", + "name": "Kurask overlord" + }, + { + "id": "7798", + "name": "Monstrous cave crawler" + }, + { + "id": "7799", + "name": "Basilisk boss" + }, + { + "id": "7800", + "name": "Mightiest turoth" + }, + { + "id": "7801", + "name": "Aberrant spectre" + }, + { + "id": "7802", + "name": "Aberrant spectre" + }, + { + "id": "7803", + "name": "Aberrant spectre" + }, + { + "id": "7804", + "name": "Aberrant spectre" + }, + { + "id": "7805", + "name": "Kurask minion" + }, + { + "id": "7806", + "name": "Mummy warrior" + }, + { + "id": "7807", + "name": "Mummy warrior" + }, + { + "id": "7808", + "name": "Mummy warrior" + }, + { + "id": "7809", + "name": "Cat" + }, + { + "id": "7810", + "name": "Banshee" + }, + { + "id": "7811", + "name": "Kurask" + }, + { + "id": "7812", + "name": "Cave crawler" + }, + { + "id": "7813", + "name": "Basilisk" + }, + { + "id": "7814", + "name": "Turoth" + }, + { + "id": "7815", + "name": "Skeleton" + }, + { + "id": "7816", + "name": "Master" + }, + { + "id": "7817", + "name": "Zombie" + }, + { + "id": "7818", + "name": "Zombie" + }, + { + "id": "7819", + "name": "Zombie" + }, + { + "id": "7820", + "name": "Zombie" + }, + { + "id": "7821", + "name": "A wanderer." + }, + { + "id": "7822", + "name": "A wanderer." + }, + { + "id": "7823", + "name": "Wall Beast", + "examine": "A big, scary hand! ", + "aggressive": "true", + "attack_level": "38", + "attack_speed": "6", + "death_animation": "1804", + "defence_animation": "1803", + "defence_level": "38", + "lifepoints": "105", + "melee_animation": "1802", + "movement_radius": "0", + "range_level": "1", + "respawn_delay": "0", + "safespot": null, + "slayer_exp": "105", + "strength_level": "38" + }, + { + "id": "7824", + "name": "Osman" + }, + { + "id": "7825", + "name": "50 Ships Mufassah" + }, + { + "id": "7826", + "name": "Karamthulhu" + }, + { + "id": "7827", + "name": "Karamthulhu" + }, + { + "id": "7828", + "name": "Giant lobster" + }, + { + "id": "7829", + "name": "Giant crab" + }, + { + "id": "7830", + "name": "Customs Sergeant" + }, + { + "id": "7831", + "name": "Customs Sergeant" + }, + { + "id": "7832", + "name": "Young Ralph" + }, + { + "id": "7833", + "name": "Young Ralph" + }, + { + "id": "7834", + "name": "Young Ralph" + }, + { + "id": "7835", + "name": "Young Ralph" + }, + { + "id": "7836", + "name": "Young Ralph" + }, + { + "id": "7837", + "name": "Customs Officer" + }, + { + "id": "7838", + "name": "Customs Officer" + }, + { + "id": "7839", + "name": "Customs Officer" + }, + { + "id": "7840", + "name": "Heavy-Handed Harry" + }, + { + "id": "7841", + "name": "Player" + }, + { + "id": "7842", + "name": "Locker Officer" + }, + { + "id": "7843", + "name": "Locker Officer" + }, + { + "id": "7844", + "name": "Ex-ex-parrot" + }, + { + "id": "7845", + "name": "Pirate impling" + }, + { + "id": "7846", + "name": "Pirate impling" + }, + { + "id": "7847", + "name": "Captain Rabid Jack" + }, + { + "id": "7848", + "name": "Jack" + }, + { + "id": "7849", + "name": "Bosun Giles" + }, + { + "id": "7850", + "name": "Pirate" + }, + { + "id": "7851", + "name": "Lizzie" + }, + { + "id": "7852", + "name": "Cap'n Izzy No-Beard" + }, + { + "id": "7853", + "name": "Ralph" + }, + { + "id": "7854", + "name": "Brass Hand Harry" + }, + { + "id": "7855", + "name": "Bill Teach" + }, + { + "id": "7856", + "name": "Pirate" + }, + { + "id": "7857", + "name": "Brass Hand Harry" + }, + { + "id": "7858", + "name": "Gull" + }, + { + "id": "7861", + "name": "Jack" + }, + { + "id": "7862", + "name": "Fishing spot" + }, + { + "id": "7863", + "name": "Fishing spot" + }, + { + "id": "7864", + "name": "Fishing spot" + }, + { + "id": "7865", + "name": "Guardsman Dante" + }, + { + "id": "7866", + "name": "Guardsman DeShawn" + }, + { + "id": "7867", + "name": "Guardsman Brawn" + }, + { + "id": "7868", + "name": "Iain" + }, + { + "id": "7869", + "name": "Julian" + }, + { + "id": "7870", + "name": "Lachtopher" + }, + { + "id": "7871", + "name": "Samuel" + }, + { + "id": "7872", + "name": "Victoria" + }, + { + "id": "7873", + "name": "Man" + }, + { + "id": "7874", + "name": "Man" + }, + { + "id": "7875", + "name": "Man" + }, + { + "id": "7876", + "name": "Man" + }, + { + "id": "7877", + "name": "Man" + }, + { + "id": "7878", + "name": "Man" + }, + { + "id": "7879", + "name": "Man" + }, + { + "id": "7880", + "name": "Woman" + }, + { + "id": "7881", + "name": "Woman" + }, + { + "id": "7882", + "name": "Woman" + }, + { + "id": "7883", + "name": "Woman" + }, + { + "id": "7884", + "name": "Woman" + }, + { + "id": "7885", + "name": "Guardsman Dante" + }, + { + "id": "7886", + "name": "Guardsman DeShawn" + }, + { + "id": "7887", + "name": "Guardsman Brawn" + }, + { + "id": "7888", + "name": "Sergeant Abram" + }, + { + "id": "7889", + "name": "Guardsman Pazel" + }, + { + "id": "7890", + "name": "Guardsman Peale" + }, + { + "id": "7891", + "name": "Melee dummy", + "examine": "A melee training dummy", + "aggressive": "true", + "attack_level": "1", + "attack_speed": "6", + "death_animation": "97", + "defence_animation": "0", + "defence_level": "1", + "lifepoints": "15", + "magic_animation": "0", + "melee_animation": "94", + "range_animation": "0", + "range_level": "1", + "respawn_delay": "60", + "safespot": null, + "strength_level": "1", + "weakness": "6" + }, + { + "id": "7892", + "name": "General Wartface" + }, + { + "id": "7893", + "name": "General Bentnoze" + }, + { + "id": "7894", + "name": "General Wartface" + }, + { + "id": "7896", + "name": "General Bentnoze" + }, + { + "id": "7898", + "name": "Loar Shadow" + }, + { + "id": "7901", + "name": "Loar Shadow" + }, + { + "id": "7902", + "name": "Sergeant Abram" + }, + { + "id": "7903", + "name": "Guardsman Pazel" + }, + { + "id": "7904", + "name": "Guardsman Peale" + }, + { + "id": "7905", + "name": "Barricade guard" + }, + { + "id": "7906", + "name": "Barricade guard" + }, + { + "id": "7907", + "name": "Barricade guard" + }, + { + "id": "7908", + "name": "Barricade guard" + }, + { + "id": "7909", + "name": "Barricade guard" + }, + { + "id": "7910", + "name": "Barricade guard" + }, + { + "id": "7911", + "name": "Barricade guard" + }, + { + "id": "7912", + "name": "Border guard" + }, + { + "id": "7913", + "name": "Iain" + }, + { + "id": "7914", + "name": "Julian" + }, + { + "id": "7915", + "name": "Lachtopher" + }, + { + "id": "7916", + "name": "Samuel" + }, + { + "id": "7917", + "name": "Victoria" + }, + { + "id": "7918", + "name": "Man" + }, + { + "id": "7919", + "name": "Man" + }, + { + "id": "7920", + "name": "Man" + }, + { + "id": "7921", + "name": "Man" + }, + { + "id": "7922", + "name": "Man" + }, + { + "id": "7923", + "name": "Man" + }, + { + "id": "7924", + "name": "Man" + }, + { + "id": "7925", + "name": "Woman" + }, + { + "id": "7926", + "name": "Woman" + }, + { + "id": "7927", + "name": "Woman" + }, + { + "id": "7928", + "name": "Woman" + }, + { + "id": "7929", + "name": "Lumbridge Guide" + }, + { + "id": "7930", + "name": "Doomsayer" + }, + { + "id": "7931", + "name": "Donie" + }, + { + "id": "7932", + "name": "Gee" + }, + { + "id": "7933", + "name": "Duke Horacio" + }, + { + "id": "7934", + "name": "Sigmund" + }, + { + "id": "7935", + "name": "Hans" + }, + { + "id": "7936", + "name": "Cook" + }, + { + "id": "7937", + "name": "Father Aereck" + }, + { + "id": "7938", + "name": "Sir Vant" + }, + { + "id": "7939", + "name": "Sir Vant" + }, + { + "id": "7940", + "name": "Sir Vant" + }, + { + "id": "7941", + "name": "Sir Vant" + }, + { + "id": "7942", + "name": "Sir Vant" + }, + { + "id": "7943", + "name": "Dragon" + }, + { + "id": "7944", + "name": "Dragon" + }, + { + "id": "7945", + "name": "Dragon" + }, + { + "id": "7946", + "name": "Dragon" + }, + { + "id": "7947", + "name": "Dragon" + }, + { + "id": "7948", + "name": "Dragon" + }, + { + "id": "7949", + "name": "Lumbridge Guide" + }, + { + "id": "7950", + "name": "Melee Tutor" + }, + { + "id": "7951", + "name": "Ranged Tutor" + }, + { + "id": "7952", + "name": "Magic Tutor" + }, + { + "id": "7953", + "name": "Cooking Tutor" + }, + { + "id": "7954", + "name": "Crafting Tutor" + }, + { + "id": "7955", + "name": "Fishing Tutor" + }, + { + "id": "7956", + "name": "Mining Tutor" + }, + { + "id": "7957", + "name": "Prayer Tutor" + }, + { + "id": "7958", + "name": "Smelting Tutor", + "examine": "A man of his craft.", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "movement_radius": "5", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7959", + "name": "Smelting Tutor", + "examine": "A master of his craft.", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "movement_radius": "5", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7960", + "name": "Woodcutting Tutor" + }, + { + "id": "7961", + "name": "Bank Tutor" + }, + { + "id": "7962", + "name": "Gee" + }, + { + "id": "7963", + "name": "Spirit" + }, + { + "id": "7964", + "name": "Goblin" + }, + { + "id": "7965", + "name": "Goblin" + }, + { + "id": "7966", + "name": "Chaos druid" + }, + { + "id": "7967", + "name": "Shopkeeper" + }, + { + "id": "7968", + "name": "Explorer Jack" + }, + { + "id": "7969", + "name": "Explorer Jack", + "examine": "He looks like a professional explorer.", + "attack_level": "1", + "defence_level": "1", + "lifepoints": "10", + "range_level": "1", + "safespot": null, + "strength_level": "1" + }, + { + "id": "7970", + "name": "Smithing Tutor" + }, + { + "id": "7971", + "name": "Mining Tutor" + }, + { + "id": "7972", + "name": "Spirit" + }, + { + "id": "7977", + "name": "Spirit" + }, + { + "id": "7978", + "name": "Spirit" + }, + { + "id": "7979", + "name": "Spirit" + }, + { + "id": "7980", + "name": "Spirit" + }, + { + "id": "7981", + "name": "Spirit" + }, + { + "id": "7982", + "name": "Spirit" + }, + { + "id": "7983", + "name": "Spirit" + }, + { + "id": "7984", + "name": "Spirit" + }, + { + "id": "7985", + "name": "Summer Bonde" + }, + { + "id": "7987", + "name": "Spirit" + }, + { + "id": "7988", + "name": "Spirit" + }, + { + "id": "7989", + "name": "Erik Bonde" + }, + { + "id": "7990", + "name": "Spirit" + }, + { + "id": "7991", + "name": "Jallek Lenkin" + }, + { + "id": "7992", + "name": "Spirit" + }, + { + "id": "7993", + "name": "Meranek Thanatos" + }, + { + "id": "7994", + "name": "Ghostly warrior" + }, + { + "id": "7995", + "name": "Spirit Beast" + }, + { + "id": "7996", + "name": "Spirit Beast" + }, + { + "id": "7997", + "name": "Spirit Beast" + }, + { + "id": "7998", + "name": "Ghost" + }, + { + "id": "7999", + "name": "Ghost" + }, + { + "id": "8000", + "name": "Goth leprechaun" + }, + { + "id": "8001", + "name": "Jack" + }, + { + "id": "8003", + "name": "Sarah" + }, + { + "id": "8004", + "name": "Laura" + }, + { + "id": "8005", + "name": "Laura" + }, + { + "id": "8006", + "name": "Roger" + }, + { + "id": "8007", + "name": "Jorral" + }, + { + "id": "8008", + "name": "Guthix" + }, + { + "id": "8009", + "name": "Max the traveller" + }, + { + "id": "8010", + "name": "Man" + }, + { + "id": "8011", + "name": "Man" + }, + { + "id": "8012", + "name": "Woman" + }, + { + "id": "8013", + "name": "Woman" + }, + { + "id": "8014", + "name": "Haluned" + }, + { + "id": "8015", + "name": "Jack" + }, + { + "id": "8016", + "name": "Baby Sarah" + }, + { + "id": "8017", + "name": "Snowy" + }, + { + "id": "8018", + "name": "Roger" + }, + { + "id": "8019", + "name": "Portal" + }, + { + "id": "8020", + "name": "Portal" + }, + { + "id": "8021", + "name": "Yellow orb" + }, + { + "id": "8023", + "name": "Yellow orb" + }, + { + "id": "8024", + "name": "Yellow orb" + }, + { + "id": "8025", + "name": "Green orb" + }, + { + "id": "8027", + "name": "Green orb" + }, + { + "id": "8028", + "name": "Green orb" + }, + { + "id": "8029", + "name": "Wizard Korvak" + }, + { + "id": "8030", + "name": "Wizard Vief" + }, + { + "id": "8031", + "name": "Wizard Acantha" + }, + { + "id": "8032", + "name": "Wizard Elriss" + }, + { + "id": "8033", + "name": "Wizard" + }, + { + "id": "8034", + "name": "Wizard" + }, + { + "id": "8035", + "name": "Wizard" + }, + { + "id": "8036", + "name": "Wizard" + }, + { + "id": "8037", + "name": "Wizard" + }, + { + "id": "8038", + "name": "Wizard" + }, + { + "id": "8039", + "name": "Wizard" + }, + { + "id": "8040", + "name": "Wizard" + }, + { + "id": "8041", + "name": "Imiago", + "examine": "Perhaps this gardener might look after your crops for you." + }, + { + "id": "8042", + "name": "Squire Fyre" + }, + { + "id": "8043", + "name": "Squire Fyre" + }, + { + "id": "8044", + "name": "Orry" + }, + { + "id": "8045", + "name": "Orry" + }, + { + "id": "8046", + "name": "Ube" + }, + { + "id": "8047", + "name": "Ube" + }, + { + "id": "8048", + "name": "Waldo" + }, + { + "id": "8049", + "name": "Waldo" + }, + { + "id": "8050", + "name": "Gjalp" + }, + { + "id": "8051", + "name": "Gjalp" + }, + { + "id": "8052", + "name": "Brother Fintan" + }, + { + "id": "8053", + "name": "Brother Fintan" + }, + { + "id": "8054", + "name": "Stubthumb" + }, + { + "id": "8055", + "name": "Stubthumb" + }, + { + "id": "8056", + "name": "Stubthumb" + }, + { + "id": "8057", + "name": "Doronbol" + }, + { + "id": "8058", + "name": "Doronbol" + }, + { + "id": "8059", + "name": "Crate" + }, + { + "id": "8060", + "name": "Crate" + }, + { + "id": "8061", + "name": "Egg" + }, + { + "id": "8062", + "name": "Egg" + }, + { + "id": "8063", + "name": "Nanuq" + }, + { + "id": "8064", + "name": "Nanuq" + }, + { + "id": "8065", + "name": "Pumpkin" + }, + { + "id": "8078", + "name": "Maggie" + }, + { + "id": "8079", + "name": "Circus barker" + }, + { + "id": "8080", + "name": "Circus barker" + }, + { + "id": "8081", + "name": "Circus barker" + }, + { + "id": "8082", + "name": "Agility assistant" + }, + { + "id": "8083", + "name": "Magic assistant" + }, + { + "id": "8084", + "name": "Ranged assistant" + }, + { + "id": "8085", + "name": "Ringmaster" + }, + { + "id": "8086", + "name": "Audience" + }, + { + "id": "8087", + "name": "Audience" + }, + { + "id": "8088", + "name": "Ticket vendor" + }, + { + "id": "8089", + "name": "Rock" + }, + { + "id": "8091", + "name": "Star sprite" + }, + { + "id": "8092", + "name": "Shooting star shadow" + }, + { + "id": "8093", + "name": "Penguin" + }, + { + "id": "8094", + "name": "Penguin" + }, + { + "id": "8095", + "name": "Penguin" + }, + { + "id": "8096", + "name": "Penguin" + }, + { + "id": "8097", + "name": "Penguin" + }, + { + "id": "8098", + "name": "Penguin" + }, + { + "id": "8099", + "name": "Penguin" + }, + { + "id": "8100", + "name": "Penguin" + }, + { + "id": "8101", + "name": "Penguin" + }, + { + "id": "8102", + "name": "Penguin" + }, + { + "id": "8103", + "name": "Penguin" + }, + { + "id": "8104", + "name": "Barrel" + }, + { + "id": "8105", + "name": "Bush" + }, + { + "id": "8106", + "name": "Bush" + }, + { + "id": "8107", + "name": "Cactus" + }, + { + "id": "8108", + "name": "Crate" + }, + { + "id": "8109", + "name": "Rock" + }, + { + "id": "8110", + "name": "Toadstool" + }, + { + "id": "8111", + "name": "Calladin" + }, + { + "id": "8112", + "name": "Summer Bonde" + }, + { + "id": "8114", + "name": "Summer Bonde" + }, + { + "id": "8115", + "name": "Erik Bonde" + }, + { + "id": "8116", + "name": "Erik Bonde" + }, + { + "id": "8117", + "name": "Jallek Lenkin" + }, + { + "id": "8118", + "name": "Jallek Lenkin" + }, + { + "id": "8119", + "name": "Meranek Thanatos" + }, + { + "id": "8120", + "name": "Meranek Thanatos" + }, + { + "id": "8121", + "name": "Spirit" + }, + { + "id": "8122", + "name": "Rogue" + }, + { + "id": "8123", + "name": "Tormented wraith" + }, + { + "id": "8126", + "name": "Dark energy core" + }, + { + "id": "8127", + "name": "Dark energy core" + }, + { + "id": "8128", + "name": "Spirit Beast" + }, + { + "id": "8129", + "name": "Spirit Beast" + }, + { + "id": "8130", + "name": "Spirit Beast" + }, + { + "id": "8131", + "name": "Spirit Beast" + }, + { + "id": "8132", + "name": "Spirit Beast" + }, + { + "id": "8133", + "name": "Corporeal Beast", + "examine": "A vision of supernatural horror.", + "agg_radius": "64", + "aggressive": "true", + "attack_level": "320", + "attack_speed": "6", + "bonuses": "50,50,50,0,0,25,200,100,150,230,0,0,0,0,0", + "death_animation": "10385", + "defence_animation": "10386", + "defence_level": "310", + "lifepoints": "2000", + "magic_animation": "10053", + "magic_level": "350", + "melee_animation": "10058", + "movement_radius": "64", + "poison_immune": "true", + "range_level": "150", + "respawn_delay": "80", + "safespot": null, + "strength_level": "320" + }, + { + "id": "8134", + "name": "Spirit" + }, + { + "id": "8135", + "name": "Summer Bonde" + }, + { + "id": "8136", + "name": "Erik Bonde" + }, + { + "id": "8137", + "name": "Jallek Lenkin" + }, + { + "id": "8138", + "name": "Meranek Thanatos" + }, + { + "id": "8139", + "name": "Hartwin" + }, + { + "id": "8140", + "name": "Hartwin" + }, + { + "id": "8141", + "name": "Zombie" + }, + { + "id": "8143", + "name": "Zombie" + }, + { + "id": "8144", + "name": "Zombie" + }, + { + "id": "8145", + "name": "Zombie" + }, + { + "id": "8146", + "name": "Zemouregal" + }, + { + "id": "8147", + "name": "Zemouregal" + }, + { + "id": "8149", + "name": "Armoured zombie", + "examine": "He sure looks grave.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "6", + "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "50", + "lifepoints": "62", + "melee_animation": "5571", + "range_level": "50", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "30", + "strength_level": "50" + }, + { + "id": "8150", + "name": "Armoured zombie", + "examine": "This is a rotten one.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "6", + "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "50", + "lifepoints": "62", + "melee_animation": "5571", + "range_level": "50", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "30", + "strength_level": "50" + }, + { + "id": "8151", + "name": "Armoured zombie", + "examine": "It hasn't quite gotten around to dying.", + "aggressive": "true", + "attack_level": "50", + "attack_speed": "6", + "bonuses": "30,30,80,85,80,40,40,60,38,0,0,0,0,0,0", + "combat_audio": "931,923,922", + "death_animation": "5575", + "defence_animation": "5574", + "defence_level": "50", + "lifepoints": "62", + "melee_animation": "5571", + "range_level": "50", + "respawn_delay": "35", + "safespot": null, + "slayer_exp": "30", + "strength_level": "50" + }, + { + "id": "8152", + "name": "Armoured zombie" + }, + { + "id": "8153", + "name": "Armoured zombie" + }, + { + "id": "8154", + "name": "Armoured zombie" + }, + { + "id": "8155", + "name": "Armoured zombie" + }, + { + "id": "8156", + "name": "Armoured zombie" + }, + { + "id": "8157", + "name": "Armoured zombie" + }, + { + "id": "8158", + "name": "Armoured zombie" + }, + { + "id": "8159", + "name": "Armoured zombie" + }, + { + "id": "8160", + "name": "Armoured zombie" + }, + { + "id": "8161", + "name": "Armoured zombie" + }, + { + "id": "8162", + "name": "Armoured zombie" + }, + { + "id": "8163", + "name": "Armoured zombie" + }, + { + "id": "8164", + "name": "Armoured zombie" + }, + { + "id": "8165", + "name": "Sharathteerk" + }, + { + "id": "8166", + "name": "Sharathteerk" + }, + { + "id": "8168", + "name": "Arrav" + }, + { + "id": "8169", + "name": "Arrav" + }, + { + "id": "8170", + "name": "Ramarno" + }, + { + "id": "8171", + "name": "Dimintheis" + }, + { + "id": "8172", + "name": "Dimintheis" + }, + { + "id": "8173", + "name": "Guard" + }, + { + "id": "8174", + "name": "Clive" + }, + { + "id": "8175", + "name": "Ellamaria" + }, + { + "id": "8176", + "name": "Fish" + }, + { + "id": "8177", + "name": "Fish" + }, + { + "id": "8178", + "name": "Monk of Zamorak" + }, + { + "id": "8179", + "name": "Ellamaria" + }, + { + "id": "8180", + "name": "Traiborn" + }, + { + "id": "8181", + "name": "Fenkenstrain's Monster" + }, + { + "id": "8182", + "name": "Wise Old Man" + }, + { + "id": "8183", + "name": "Acrobat" + }, + { + "id": "8186", + "name": "Acrobat" + }, + { + "id": "8187", + "name": "Acrobat" + }, + { + "id": "8188", + "name": "Acrobat" + }, + { + "id": "8189", + "name": "Acrobat" + }, + { + "id": "8190", + "name": "Acrobat" + }, + { + "id": "8191", + "name": "Acrobat" + }, + { + "id": "8192", + "name": "Acrobat" + }, + { + "id": "8193", + "name": "Acrobat" + }, + { + "id": "8194", + "name": "Acrobat" + }, + { + "id": "8195", + "name": "Acrobat" + }, + { + "id": "8196", + "name": "Acrobat" + }, + { + "id": "8197", + "name": "Acrobat" + }, + { + "id": "8198", + "name": "Acrobat" + }, + { + "id": "8199", + "name": "Acrobat" + }, + { + "id": "8200", + "name": "Acrobat" + }, + { + "id": "8201", + "name": "Wendy" + }, + { + "id": "8202", + "name": "Trogs" + }, + { + "id": "8203", + "name": "Norman" + }, + { + "id": "8204", + "name": "Babe" + }, + { + "id": "8205", + "name": "Gus" + }, + { + "id": "8206", + "name": "Lottie" + }, + { + "id": "8207", + "name": "Aggie" + }, + { + "id": "8208", + "name": "Bat" + }, + { + "id": "8209", + "name": "Rat" + }, + { + "id": "8210", + "name": "Lizard" + }, + { + "id": "8211", + "name": "Blackbird" + }, + { + "id": "8212", + "name": "Spider" + }, + { + "id": "8213", + "name": "Snail" + }, + { + "id": "8214", + "name": "Cat" + }, + { + "id": "8215", + "name": "Lazy cat" + }, + { + "id": "8216", + "name": "Overgrown cat" + }, + { + "id": "8217", + "name": "Kitten" + }, + { + "id": "8218", + "name": "Wily cat" + }, + { + "id": "8219", + "name": "Guardian of Armadyl" + }, + { + "id": "8227", + "name": "Head mystic" + }, + { + "id": "8228", + "name": "Rewards mystic" + }, + { + "id": "8229", + "name": "Mystic" + }, + { + "id": "8230", + "name": "Mystic" + }, + { + "id": "8231", + "name": "Mystic" + }, + { + "id": "8232", + "name": "Mystic" + }, + { + "id": "8233", + "name": "Mystic" + }, + { + "id": "8234", + "name": "Mystic" + }, + { + "id": "8235", + "name": "Mystic" + }, + { + "id": "8236", + "name": "Mystic" + }, + { + "id": "8237", + "name": "Mystic" + }, + { + "id": "8238", + "name": "Mystic" + }, + { + "id": "8239", + "name": "Head mystic" + }, + { + "id": "8240", + "name": "Clay familiar (class 1)" + }, + { + "id": "8241", + "name": "Clay familiar (class 1)" + }, + { + "id": "8242", + "name": "Clay familiar (class 2)" + }, + { + "id": "8243", + "name": "Clay familiar (class 2)" + }, + { + "id": "8244", + "name": "Clay familiar (class 3)" + }, + { + "id": "8245", + "name": "Clay familiar (class 3)" + }, + { + "id": "8246", + "name": "Clay familiar (class 4)" + }, + { + "id": "8247", + "name": "Clay familiar (class 4)" + }, + { + "id": "8248", + "name": "Clay familiar (class 5)" + }, + { + "id": "8249", + "name": "Clay familiar (class 5)" + }, + { + "id": "8250", + "name": "Grindxplox" + }, + { + "id": "8251", + "name": "Grindxplox" + }, + { + "id": "8252", + "name": "Stealing Creation team" + }, + { + "id": "8253", + "name": "Resource NPC" + }, + { + "id": "8254", + "name": "Game NPC" + }, + { + "id": "8255", + "name": "Resource NPC" + }, + { + "id": "8257", + "name": "Harrallak Menarous" + }, + { + "id": "8269", + "name": "Yadech Strongarm" + }, + { + "id": "8271", + "name": "Turael" + }, + { + "id": "8273", + "name": "Turael", + "examine": "He looks dangerous!" + }, + { + "id": "8274", + "name": "Mazchna" + }, + { + "id": "8275", + "name": "Duradel", + "examine": "He looks dangerous!" + }, + { + "id": "8276", + "name": "Cyrisus" + }, + { + "id": "8280", + "name": "Sloane" + }, + { + "id": "8281", + "name": "Balance Elemental" + }, + { + "id": "8282", + "name": "Balance Elemental" + }, + { + "id": "8283", + "name": "Balance Elemental" + }, + { + "id": "8284", + "name": "Balance Elemental" + }, + { + "id": "8285", + "name": "Balance Elemental" + }, + { + "id": "8286", + "name": "Undead hero" + }, + { + "id": "8287", + "name": "Undead hero" + }, + { + "id": "8288", + "name": "Undead hero" + }, + { + "id": "8289", + "name": "Undead hero" + }, + { + "id": "8290", + "name": "Undead hero" + }, + { + "id": "8291", + "name": "Undead hero" + }, + { + "id": "8292", + "name": "Undead hero" + }, + { + "id": "8293", + "name": "Undead hero" + }, + { + "id": "8294", + "name": "Undead hero" + }, + { + "id": "8295", + "name": "Undead hero" + }, + { + "id": "8296", + "name": "Undead hero" + }, + { + "id": "8297", + "name": "Undead hero" + }, + { + "id": "8298", + "name": "Stone block" + }, + { + "id": "8299", + "name": "Harrallak Menarous" + }, + { + "id": "8300", + "name": "Harrallak Menarous" + }, + { + "id": "8301", + "name": "Harrallak Menarous" + }, + { + "id": "8302", + "name": "Turael" + }, + { + "id": "8303", + "name": "Turael" + }, + { + "id": "8304", + "name": "Cyrisus" + }, + { + "id": "8305", + "name": "Cyrisus" + }, + { + "id": "8306", + "name": "Ghommal" + }, + { + "id": "8307", + "name": "Mazchna" + }, + { + "id": "8308", + "name": "Mazchna" + }, + { + "id": "8309", + "name": "Mazchna" + }, + { + "id": "8310", + "name": "Duradel" + }, + { + "id": "8311", + "name": "Sloane" + }, + { + "id": "8317", + "name": "Elite Dark Ranger" + }, + { + "id": "8318", + "name": "Elite Dark Ranger" + }, + { + "id": "8319", + "name": "Elite Dark Ranger" + }, + { + "id": "8320", + "name": "Elite Dark Mage" + }, + { + "id": "8321", + "name": "Elite Dark Mage" + }, + { + "id": "8322", + "name": "Elite Dark Mage" + }, + { + "id": "8323", + "name": "Elite Dark Mage" + }, + { + "id": "8324", + "name": "Elite Black Knight" + }, + { + "id": "8325", + "name": "Elite Black Knight" + }, + { + "id": "8326", + "name": "Elite Black Knight" + }, + { + "id": "8327", + "name": "Elite Black Knight" + }, + { + "id": "8328", + "name": "Elite Black Knight" + }, + { + "id": "8329", + "name": "Elite Black Knight" + }, + { + "id": "8330", + "name": "Elite Black Knight" + }, + { + "id": "8331", + "name": "Guardian of Armadyl" + }, + { + "id": "8332", + "name": "Guardian of Armadyl" + }, + { + "id": "8333", + "name": "Guardian of Armadyl" + }, + { + "id": "8334", + "name": "Mercenary axeman" + }, + { + "id": "8335", + "name": "Mercenary mage" + }, + { + "id": "8336", + "name": "Idria" + }, + { + "id": "8337", + "name": "Idria" + }, + { + "id": "8338", + "name": "Akrisae" + }, + { + "id": "8339", + "name": "Shady stranger" + }, + { + "id": "8340", + "name": "Shady stranger" + }, + { + "id": "8341", + "name": "Shady stranger" + }, + { + "id": "8342", + "name": "Guardian of Armadyl" + }, + { + "id": "8344", + "name": "Guardian of Armadyl" + }, + { + "id": "8345", + "name": "Local thug" + }, + { + "id": "8347", + "name": "Local mage" + }, + { + "id": "8349", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "2", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "0", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8350", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "2", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "2", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8351", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "2", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "1", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8352", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "1", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "0", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8353", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "1", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "2", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8354", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "1", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "1", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8355", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "0", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "0", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8356", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "0", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "2", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8357", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "0", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "1", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8358", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "2", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "0", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8359", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "2", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "2", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8360", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "2", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "1", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8361", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "1", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "0", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8362", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "1", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "2", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8363", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "1", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "1", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8364", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "0", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "0", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8365", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "0", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "2", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8366", + "name": "Tormented demon", + "examine": "Lucien must be incredibly powerful if he can bind such demons to his will.", + "aggressive": "true", + "attack_level": "85", + "attack_speed": "6", + "bonuses": "112,132,113,111,245,167,394,346,213,349,167,65,39,65,58", + "combat_style": "0", + "death_animation": "10924", + "defence_animation": "10923", + "defence_level": "85", + "lifepoints": "326", + "magic_animation": "10918", + "magic_level": "85", + "melee_animation": "10922", + "movement_radius": "40", + "poison_immune": "true", + "protect_style": "1", + "range_animation": "10919", + "range_level": "85", + "respawn_delay": "100", + "safespot": "true", + "slayer_exp": "136", + "strength_level": "85" + }, + { + "id": "8367", + "name": "Undead troll" + }, + { + "id": "8378", + "name": "Undead troll" + }, + { + "id": "8379", + "name": "Undead troll" + }, + { + "id": "8380", + "name": "Undead troll" + }, + { + "id": "8381", + "name": "Undead troll" + }, + { + "id": "8382", + "name": "Undead troll" + }, + { + "id": "8383", + "name": "Undead troll" + }, + { + "id": "8384", + "name": "Undead troll" + }, + { + "id": "8385", + "name": "Undead troll" + }, + { + "id": "8386", + "name": "Undead troll" + }, + { + "id": "8387", + "name": "Undead troll" + }, + { + "id": "8388", + "name": "Undead troll" + }, + { + "id": "8389", + "name": "Undead troll" + }, + { + "id": "8390", + "name": "Undead troll" + }, + { + "id": "8391", + "name": "Undead troll" + }, + { + "id": "8392", + "name": "Undead troll" + }, + { + "id": "8393", + "name": "Vasador" + }, + { + "id": "8394", + "name": "Valator" + }, + { + "id": "8395", + "name": "Vaasdor" + }, + { + "id": "8396", + "name": "Varosad" + }, + { + "id": "8397", + "name": "Verisad" + }, + { + "id": "8398", + "name": "Vudisor" + }, + { + "id": "8399", + "name": "Vlatoad" + }, + { + "id": "8400", + "name": "Vedolas" + }, + { + "id": "8401", + "name": "Vundiar" + }, + { + "id": "8402", + "name": "Versita" + }, + { + "id": "8403", + "name": "Vislota" + }, + { + "id": "8404", + "name": "Vanjuta" + }, + { + "id": "8405", + "name": "Vasador" + }, + { + "id": "8406", + "name": "Valator" + }, + { + "id": "8407", + "name": "Vaasdor" + }, + { + "id": "8408", + "name": "Varosad" + }, + { + "id": "8409", + "name": "Verisad" + }, + { + "id": "8410", + "name": "Vudisor" + }, + { + "id": "8411", + "name": "Vlatoad" + }, + { + "id": "8412", + "name": "Vedolas" + }, + { + "id": "8413", + "name": "Vundiar" + }, + { + "id": "8414", + "name": "Versita" + }, + { + "id": "8415", + "name": "Vislota" + }, + { + "id": "8416", + "name": "Vanjuta" + }, + { + "id": "8417", + "name": "Ivy Sophista" + }, + { + "id": "8418", + "name": "Thaerisk Cemphier" + }, + { + "id": "8419", + "name": "Thaerisk Cemphier" + }, + { + "id": "8420", + "name": "Assassin" + }, + { + "id": "8423", + "name": "Assassin" + }, + { + "id": "8424", + "name": "Mithril dragon" + }, + { + "id": "8425", + "name": "Dragon head" + }, + { + "id": "8426", + "name": "Dragon head" + }, + { + "id": "8427", + "name": "Dragon head" + }, + { + "id": "8428", + "name": "Khazard launderer" + }, + { + "id": "8429", + "name": "Khazard cook" + }, + { + "id": "8430", + "name": "Silif" + }, + { + "id": "8431", + "name": "Silif" + }, + { + "id": "8432", + "name": "Silif" + }, + { + "id": "8433", + "name": "Silif" + }, + { + "id": "8434", + "name": "Silif" + }, + { + "id": "8435", + "name": "Shady stranger" + }, + { + "id": "8436", + "name": "Suspicious outsider" + }, + { + "id": "8437", + "name": "Elite Khazard guard" + }, + { + "id": "8438", + "name": "Elite Khazard guard" + }, + { + "id": "8439", + "name": "Elite Khazard guard" + }, + { + "id": "8440", + "name": "Elite Khazard guard" + }, + { + "id": "8441", + "name": "Dark Squall" + }, + { + "id": "8442", + "name": "Surok Magis" + }, + { + "id": "8443", + "name": "Lucien" + }, + { + "id": "8444", + "name": "Druid" + }, + { + "id": "8445", + "name": "Druid" + }, + { + "id": "8446", + "name": "Druid" + }, + { + "id": "8447", + "name": "Druid bodyguard" + }, + { + "id": "8448", + "name": "Druid bodyguard" + }, + { + "id": "8449", + "name": "Movario" + }, + { + "id": "8450", + "name": "Darve" + }, + { + "id": "8451", + "name": "Cave goblin" + }, + { + "id": "8452", + "name": "Movario" + }, + { + "id": "8453", + "name": "Darve" + }, + { + "id": "8454", + "name": "Light creature" + }, + { + "id": "8455", + "name": "Light creature" + }, + { + "id": "8456", + "name": "Druid spirit" + }, + { + "id": "8457", + "name": "Druid spirit" + }, + { + "id": "8458", + "name": "Druid spirit" + }, + { + "id": "8459", + "name": "Druid spirit" + }, + { + "id": "8460", + "name": "Turael" + }, + { + "id": "8462", + "name": "Spria" + }, + { + "id": "8463", + "name": "Mazchna" + }, + { + "id": "8464", + "name": "Mazchna" + }, + { + "id": "8465", + "name": "Achtryn" + }, + { + "id": "8466", + "name": "Duradel" + }, + { + "id": "8467", + "name": "Lapalok" + }, + { + "id": "8468", + "name": "Laidee Gnonock" + }, + { + "id": "8485", + "name": "Hazelmere" + }, + { + "id": "8486", + "name": "Undead mage" + }, + { + "id": "8487", + "name": "Wild broav" + }, + { + "id": "8488", + "name": "Hazelmere" + }, + { + "id": "8490", + "name": "Hazelmere" + }, + { + "id": "8491", + "name": "Broav" + }, + { + "id": "8492", + "name": "Sithaph" + }, + { + "id": "8494", + "name": "Strisath" + }, + { + "id": "8495", + "name": "Sakirth" + }, + { + "id": "8496", + "name": "Hazelmere's hat" + }, + { + "id": "8497", + "name": "Lucien" + }, + { + "id": "8498", + "name": "A lazy Khazard guard" + }, + { + "id": "8499", + "name": "Thanksgiving Turkey" + }, + { + "id": "8500", + "name": "Cook's brother" + }, + { + "id": "8501", + "name": "Turkey" + }, + { + "id": "8502", + "name": "Cactus" + }, + { + "id": "8503", + "name": "Cactus" + }, + { + "id": "8504", + "name": "Bush" + }, + { + "id": "8505", + "name": "Toadstool" + }, + { + "id": "8506", + "name": "Barrel" + }, + { + "id": "8507", + "name": "Bush" + }, + { + "id": "8508", + "name": "Crate" + }, + { + "id": "8509", + "name": "Bush" + }, + { + "id": "8510", + "name": "Rock" + }, + { + "id": "8511", + "name": "Bush" + }, + { + "id": "8512", + "name": "Marvin" + }, + { + "id": "8513", + "name": "Marius" + }, + { + "id": "8514", + "name": "Benny" + }, + { + "id": "8515", + "name": "Yeti" + }, + { + "id": "8516", + "name": "Yeti" + }, + { + "id": "8517", + "name": "Jack Frost", + "examine": "The rebellious teenage son of the Queen of Snow. Interesting outfit!" + }, + { + "id": "8518", + "name": "Jack Frost" + }, + { + "id": "8519", + "name": "Jack Frost" + }, + { + "id": "8520", + "name": "Jack Frost" + }, + { + "id": "8521", + "name": "Snow imp" + }, + { + "id": "8537", + "name": "Snow imp" + }, + { + "id": "8538", + "name": "Snow imp" + }, + { + "id": "8539", + "name": "Queen of Snow" + }, + { + "id": "8540", + "name": "Santa Claus", + "examine": "A jolly-looking present-distributor." + }, + { + "id": "8541", + "name": "Head snow imp" + }, + { + "id": "8542", + "name": "Head snow imp" + }, + { + "id": "8543", + "name": "Head snow imp" + }, + { + "id": "8544", + "name": "Isidor" + }, + { + "id": "8545", + "name": "Mystic" + }, + { + "id": "8546", + "name": "Balance Elemental" + }, + { + "id": "8547", + "name": "Wounded phoenix" + }, + { + "id": "8548", + "name": "Phoenix" + }, + { + "id": "8549", + "name": "Phoenix" + }, + { + "id": "8550", + "name": "Phoenix eggling" + }, + { + "id": "8551", + "name": "Phoenix eggling" + }, + { + "id": "8552", + "name": "Large egg" + }, + { + "id": "8553", + "name": "Priest of Guthix" + }, + { + "id": "8556", + "name": "Brian Twitcher" + }, + { + "id": "8557", + "name": "Lesser reborn warrior" + }, + { + "id": "8558", + "name": "Lesser reborn warrior" + }, + { + "id": "8559", + "name": "Greater reborn warrior" + }, + { + "id": "8560", + "name": "Greater reborn warrior" + }, + { + "id": "8561", + "name": "Lesser reborn ranger" + }, + { + "id": "8562", + "name": "Lesser reborn ranger" + }, + { + "id": "8563", + "name": "Greater reborn ranger" + }, + { + "id": "8564", + "name": "Greater reborn ranger" + }, + { + "id": "8565", + "name": "Lesser reborn mage" + }, + { + "id": "8566", + "name": "Lesser reborn mage" + }, + { + "id": "8567", + "name": "Greater reborn mage" + }, + { + "id": "8568", + "name": "Greater reborn mage" + }, + { + "id": "8569", + "name": "Lesser reborn warrior" + }, + { + "id": "8570", + "name": "Greater reborn warrior" + }, + { + "id": "8571", + "name": "Lesser reborn ranger" + }, + { + "id": "8572", + "name": "Greater reborn ranger" + }, + { + "id": "8573", + "name": "Lesser reborn mage" + }, + { + "id": "8574", + "name": "Greater reborn mage" + }, + { + "id": "8575", + "name": "Phoenix" + }, + { + "id": "8576", + "name": "Phoenix" + }, + { + "id": "8577", + "name": "Phoenix eggling" + }, + { + "id": "8578", + "name": "Phoenix eggling" + }, + { + "id": "8579", + "name": "Karma the chameleon" + }, + { + "id": "8581", + "name": "Karma the chameleon" + }, + { + "id": "8582", + "name": "Karma the chameleon" + }, + { + "id": "8583", + "name": "Karma the chameleon" + }, + { + "id": "8584", + "name": "Karma the chameleon" + }, + { + "id": "8585", + "name": "Karma the chameleon" + }, + { + "id": "8586", + "name": "Karma the chameleon" + }, + { + "id": "8587", + "name": "Karma the chameleon" + }, + { + "id": "8588", + "name": "Karma the chameleon" + }, + { + "id": "8589", + "name": "Karma the chameleon" + }, + { + "id": "8590", + "name": "Geoffrey" } ] \ No newline at end of file From 2f792c88a2bd5c4ec4acd0b4a4a3d9b294e565b3 Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 10 Jun 2026 03:11:30 -0400 Subject: [PATCH 119/123] ..... lets not talk about it --- .../arena/npcs/PenanceFighterNPC.kt | 43 ++++++++++++---- .../arena/npcs/PenanceHealerNPC.kt | 46 ++++++++++++----- .../arena/npcs/PenanceRangerNPC.kt | 51 +++++++++++++++---- .../arena/npcs/PenanceRunnerNPC.kt | 4 ++ 4 files changed, 111 insertions(+), 33 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt index 6631d3cf7..8721fd92f 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt @@ -14,19 +14,30 @@ import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior import core.game.node.entity.player.Player +import core.game.node.entity.skill.Skills +import core.game.world.update.flag.context.Animation import org.rs09.consts.NPCs val PENANCE_FIGHTER_IDS = listOf( //NPCs.PENANCE_FIGHTER_5040, //tutorial - NPCs.PENANCE_FIGHTER_5044, - NPCs.PENANCE_FIGHTER_5045, - NPCs.PENANCE_FIGHTER_5213, - NPCs.PENANCE_FIGHTER_5214, - NPCs.PENANCE_FIGHTER_5215, - NPCs.PENANCE_FIGHTER_5216, - NPCs.PENANCE_FIGHTER_5217, - NPCs.PENANCE_FIGHTER_5218, - NPCs.PENANCE_FIGHTER_5219) + NPCs.PENANCE_FIGHTER_5044,NPCs.PENANCE_FIGHTER_5045,NPCs.PENANCE_FIGHTER_5213, + NPCs.PENANCE_FIGHTER_5214,NPCs.PENANCE_FIGHTER_5215,NPCs.PENANCE_FIGHTER_5216, + NPCs.PENANCE_FIGHTER_5217,NPCs.PENANCE_FIGHTER_5218,NPCs.PENANCE_FIGHTER_5219) + +data class PenanceFighterDefinition(val id: Int,val hp: Int,val attack: Int,val strength: Int, val defence: Int, val range: Int, val magic: Int){ + companion object { val BY_ID = PENANCE_FIGHTER_DEFINITIONS.associateBy { it.id } } +} +val PENANCE_FIGHTER_DEFINITIONS = listOf( + PenanceFighterDefinition(NPCs.PENANCE_FIGHTER_5044, 28, 26, 26, 25, 1, 1), + PenanceFighterDefinition(NPCs.PENANCE_FIGHTER_5045, 29, 28, 29, 27, 1, 1), + PenanceFighterDefinition(NPCs.PENANCE_FIGHTER_5213, 32, 33, 32, 34, 1, 1), + PenanceFighterDefinition(NPCs.PENANCE_FIGHTER_5214, 37, 36, 38, 37, 1, 1), + PenanceFighterDefinition(NPCs.PENANCE_FIGHTER_5215, 38, 41, 43, 44, 1, 1), + PenanceFighterDefinition(NPCs.PENANCE_FIGHTER_5216, 49, 50, 48, 48, 1, 1), + PenanceFighterDefinition(NPCs.PENANCE_FIGHTER_5217, 50, 56, 55, 52, 1, 1), + PenanceFighterDefinition(NPCs.PENANCE_FIGHTER_5218, 55, 60, 61, 62, 1, 1), + PenanceFighterDefinition(NPCs.PENANCE_FIGHTER_5219, 56, 71, 73, 66, 1, 1), +) class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { override fun canBeAttackedBy(self: NPC, attacker: Entity, style: CombatStyle, shouldSendMessage: Boolean): Boolean { @@ -66,6 +77,20 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { self.properties.combatPulse.style = CombatStyle.MELEE self.isAggressive = true + self.properties.defenceAnimation = Animation(5096) + self.properties.attackAnimation = Animation(5097) + self.properties.deathAnimation = Animation(5098) + self.properties.attackSpeed = 4 + + val definition = PenanceFighterDefinition.BY_ID[self.id] ?: return + + self.getSkills().setStaticLevel(Skills.ATTACK, definition.attack) + self.getSkills().setStaticLevel(Skills.STRENGTH, definition.strength) + self.getSkills().setStaticLevel(Skills.DEFENCE, definition.defence) + self.getSkills().setStaticLevel(Skills.RANGE, definition.range) + self.getSkills().setStaticLevel(Skills.MAGIC, definition.magic) + self.getSkills().setStaticLevel(Skills.HITPOINTS, definition.hp) + } override fun onDeathFinished(self: NPC, killer: Entity) { diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt index 71f033e46..18961ca42 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt @@ -1,30 +1,37 @@ package content.minigame.barbassault.arena.npcs -import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent import content.minigame.barbassault.arena.PenanceType import content.minigame.barbassault.getBASession import core.game.node.entity.Entity -import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior import core.game.node.entity.player.Player import core.game.node.entity.skill.Skills -import core.game.system.config.NPCConfigParser +import core.game.world.update.flag.context.Animation import org.rs09.consts.NPCs val PENANCE_HEALER_IDS = intArrayOf( //NPCs.PENANCE_HEALER_5043,//tut - NPCs.PENANCE_HEALER_5238, - NPCs.PENANCE_HEALER_5239, - NPCs.PENANCE_HEALER_5240, - NPCs.PENANCE_HEALER_5241, - NPCs.PENANCE_HEALER_5242, - NPCs.PENANCE_HEALER_5243, - NPCs.PENANCE_HEALER_5244, - NPCs.PENANCE_HEALER_5245, - NPCs.PENANCE_HEALER_5246 + NPCs.PENANCE_HEALER_5238,NPCs.PENANCE_HEALER_5239,NPCs.PENANCE_HEALER_5240, + NPCs.PENANCE_HEALER_5241,NPCs.PENANCE_HEALER_5242,NPCs.PENANCE_HEALER_5243, + NPCs.PENANCE_HEALER_5244,NPCs.PENANCE_HEALER_5245,NPCs.PENANCE_HEALER_5246 ) +data class PenanceHealerDefinition(val id: Int,val hp: Int,val attack: Int,val strength: Int, val defence: Int, val range: Int, val magic: Int){ + companion object { val BY_ID = PENANCE_HEALER_DEFINITIONS.associateBy { it.id } } +} +val PENANCE_HEALER_DEFINITIONS = listOf( + PenanceHealerDefinition(NPCs.PENANCE_HEALER_5238, 27, 9, 8, 9, 1, 1 ), + PenanceHealerDefinition(NPCs.PENANCE_HEALER_5239, 32, 13, 15, 14, 1, 1 ), + PenanceHealerDefinition(NPCs.PENANCE_HEALER_5240, 37, 20, 18, 19, 1, 1 ), + PenanceHealerDefinition(NPCs.PENANCE_HEALER_5241, 43, 22, 23, 21, 1, 1 ), + PenanceHealerDefinition(NPCs.PENANCE_HEALER_5242, 49, 26, 27, 25, 1, 1 ), + PenanceHealerDefinition(NPCs.PENANCE_HEALER_5243, 55, 30, 32, 28, 1, 1 ), + PenanceHealerDefinition(NPCs.PENANCE_HEALER_5244, 60, 33, 36, 34, 1, 1 ), + PenanceHealerDefinition(NPCs.PENANCE_HEALER_5245, 67, 40, 38, 36, 1, 1 ), + PenanceHealerDefinition(NPCs.PENANCE_HEALER_5246, 76, 40, 44, 38, 1, 1 ), +) + class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS) { override fun getXpMultiplier(self: NPC, attacker: Entity): Double { return 0.0 @@ -35,8 +42,19 @@ class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS) { self.isWalks = true self.walkRadius = 24 self.isRespawn = false - // self.isIgnoreAttackRestrictions(self) - //self.getSkills().setStaticLevel(Skills.HITPOINTS,15) + + self.properties.defenceAnimation = Animation(5105) + self.properties.deathAnimation = Animation(5106) + self.properties.attackAnimation = Animation(5107) + + val definition = PenanceHealerDefinition.BY_ID[self.id] ?: return + + self.getSkills().setStaticLevel(Skills.ATTACK, definition.attack) + self.getSkills().setStaticLevel(Skills.STRENGTH, definition.strength) + self.getSkills().setStaticLevel(Skills.DEFENCE, definition.defence) + self.getSkills().setStaticLevel(Skills.RANGE, definition.range) + self.getSkills().setStaticLevel(Skills.MAGIC, definition.magic) + self.getSkills().setStaticLevel(Skills.HITPOINTS, definition.hp) } //sendMessage(player,"that's the wrong type of poisoned food to use! Penalty!") diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt index 777f9b1ba..fca873663 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt @@ -4,6 +4,8 @@ import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent import content.minigame.barbassault.arena.BACombatValidation import content.minigame.barbassault.arena.PenanceType +import content.minigame.barbassault.arenas.monsters.PENANCE_FIGHTER_DEFINITIONS +import content.minigame.barbassault.arenas.monsters.PenanceFighterDefinition import content.minigame.barbassault.getBASession import core.api.* import core.api.getItemFromEquipment @@ -13,21 +15,33 @@ import core.game.node.entity.combat.CombatStyle import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior import core.game.node.entity.player.Player +import core.game.node.entity.skill.Skills +import core.game.world.update.flag.context.Animation import core.game.world.update.flag.context.Graphics import org.rs09.consts.NPCs //20730 = rangers cast val PENANCE_RANGER_IDS = listOf( - NPCs.PENANCE_RANGER_5041, // tut - NPCs.PENANCE_RANGER_5229, - NPCs.PENANCE_RANGER_5230, - NPCs.PENANCE_RANGER_5231, - NPCs.PENANCE_RANGER_5232, - NPCs.PENANCE_RANGER_5233, - NPCs.PENANCE_RANGER_5234, - NPCs.PENANCE_RANGER_5235, - NPCs.PENANCE_RANGER_5236, - NPCs.PENANCE_RANGER_5237 + // NPCs.PENANCE_RANGER_5041, // tut + NPCs.PENANCE_RANGER_5229,NPCs.PENANCE_RANGER_5230,NPCs.PENANCE_RANGER_5231, + NPCs.PENANCE_RANGER_5232,NPCs.PENANCE_RANGER_5233,NPCs.PENANCE_RANGER_5234, + NPCs.PENANCE_RANGER_5235,NPCs.PENANCE_RANGER_5236,NPCs.PENANCE_RANGER_5237 ) + +data class PenanceRangerDefinition(val id: Int,val hp: Int,val attack: Int,val strength: Int, val defence: Int, val range: Int, val magic: Int){ + companion object { val BY_ID = PENANCE_RANGER_DEFINITIONS.associateBy { it.id } } +} +val PENANCE_RANGER_DEFINITIONS = listOf( + PenanceRangerDefinition(NPCs.PENANCE_RANGER_5229, 20, 22, 1, 21, 23, 1), + PenanceRangerDefinition(NPCs.PENANCE_RANGER_5230, 28, 27, 1, 29, 24, 1), + PenanceRangerDefinition(NPCs.PENANCE_RANGER_5231, 29, 32, 1, 33, 34, 1), + PenanceRangerDefinition(NPCs.PENANCE_RANGER_5232, 34, 41, 1, 42, 40, 1), + PenanceRangerDefinition(NPCs.PENANCE_RANGER_5233, 41, 44, 1, 46, 45, 1), + PenanceRangerDefinition(NPCs.PENANCE_RANGER_5234, 50, 51, 1, 54, 52, 1), + PenanceRangerDefinition(NPCs.PENANCE_RANGER_5235, 50, 63, 1, 61, 62, 1), + PenanceRangerDefinition(NPCs.PENANCE_RANGER_5236, 54, 69, 1, 68, 70, 1), + PenanceRangerDefinition(NPCs.PENANCE_RANGER_5237, 58, 79, 1, 80, 78, 1), +) + class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { override fun canBeAttackedBy(self: NPC, attacker: Entity, style: CombatStyle, shouldSendMessage: Boolean): Boolean { if (attacker is Player && getItemFromEquipment(attacker, EquipmentSlot.CAPE)?.id != 10556) { @@ -60,6 +74,23 @@ class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { self.definition.combatDistance = 8 self.properties.combatPulse.style = CombatStyle.RANGE self.isAggressive = true + + self.properties.defenceAnimation = Animation(5396) + self.properties.attackAnimation = Animation(5395) + self.properties.rangeAnimation = Animation(5395) + self.properties.deathAnimation = Animation(5397) + self.properties.attackSpeed = 4 + + val definition = PenanceRangerDefinition.BY_ID[self.id] ?: return + + self.getSkills().setStaticLevel(Skills.ATTACK, definition.attack) + self.getSkills().setStaticLevel(Skills.STRENGTH, definition.strength) + self.getSkills().setStaticLevel(Skills.DEFENCE, definition.defence) + self.getSkills().setStaticLevel(Skills.RANGE, definition.range) + self.getSkills().setStaticLevel(Skills.MAGIC, definition.magic) + self.getSkills().setStaticLevel(Skills.HITPOINTS, definition.hp) + + } override fun onDeathFinished(self: NPC, killer: Entity) { diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt index 26b370be5..00bb665cc 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt @@ -19,6 +19,7 @@ import core.game.node.item.GroundItemManager import core.game.node.entity.player.Player import core.game.world.map.Location import core.game.world.map.RegionManager +import core.game.world.update.flag.context.Animation import kotlin.math.abs import kotlin.math.max @@ -73,6 +74,9 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { self.setAttribute(MODE, RunnerMode.RANDOM_WALKING) self.setAttribute(MODE_TICKS, (0..4).random()) self.setAttribute(HUNT_TICKS, (0..2).random()) + + self.properties.defenceAnimation = Animation(5101) + self.properties.deathAnimation = Animation(5106) } override fun tick(self: NPC): Boolean { From bffefaab3030d61ea3bbdceb5f43e48138bd04d5 Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 10 Jun 2026 03:12:19 -0400 Subject: [PATCH 120/123] ..... lets not talk about it --- .../minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt index 00bb665cc..529e6c513 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt @@ -17,6 +17,7 @@ import core.api.hasLineOfSight import core.api.sendChat import core.game.node.item.GroundItemManager import core.game.node.entity.player.Player +import core.game.node.entity.skill.Skills import core.game.world.map.Location import core.game.world.map.RegionManager import core.game.world.update.flag.context.Animation @@ -77,6 +78,8 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { self.properties.defenceAnimation = Animation(5101) self.properties.deathAnimation = Animation(5106) + + self.getSkills().setStaticLevel(Skills.HITPOINTS, 5) } override fun tick(self: NPC): Boolean { From 5291b13ff710301f337ff8747e2ea763713b9b6f Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 10 Jun 2026 12:41:35 -0400 Subject: [PATCH 121/123] penance healer logic --- .../content/minigame/barbassault/BAUtils.kt | 12 ++ .../barbassault/arena/BAArenaListener.kt | 37 +++- .../arena/npcs/PenanceHealerNPC.kt | 169 +++++++++++++++++- 3 files changed, 209 insertions(+), 9 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/BAUtils.kt b/Server/src/main/content/minigame/barbassault/BAUtils.kt index 3c13c2e50..84e6c64d9 100644 --- a/Server/src/main/content/minigame/barbassault/BAUtils.kt +++ b/Server/src/main/content/minigame/barbassault/BAUtils.kt @@ -3,7 +3,9 @@ package content.minigame.barbassault import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.PenanceType import core.api.getTimer +import core.api.hasTimerActive import core.api.registerTimer +import core.api.removeTimer import core.api.spawnTimer import core.game.node.entity.Entity import core.game.node.entity.combat.ImpactHandler @@ -265,3 +267,13 @@ fun applyBAPoison (entity: Entity, source: Entity, severity: Int) { } } +fun cureBAPoison(entity: Entity) { + if (!hasTimerActive(entity)) { + return + } + removeTimer(entity) +} + +fun isBAPoisoned(entity: Entity): Boolean { + return hasTimerActive(entity) +} diff --git a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt index c979dfc6d..a38fca630 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAArenaListener.kt @@ -145,10 +145,17 @@ class BarbassaultArenaListener : InteractionListener { Pulser.submit(object : Pulse(3, player) { override fun pulse(): Boolean { val restoreAmount = getHealerHealAmount(player) + val curedPoison = isBAPoisoned(player) heal(player, restoreAmount) + cureBAPoison(player) player.settings.updateRunEnergy((-restoreAmount).toDouble()) player.unlock() - sendMessage(player,"You've been healed $restoreAmount hitpoints.") + val message = if (curedPoison) { + "You've been healed $restoreAmount hitpoints and your poison cured." + } else { + "You've been healed $restoreAmount hitpoints." + } + sendMessage(player, message) getBASession(player)?.updateBarbHealerIfaceHPOfPlayer(player) return true } @@ -172,7 +179,8 @@ class BarbassaultArenaListener : InteractionListener { onUseWithPlayer(*All_HEALING_VIALS) { player, _, target -> target as Player //todo find Healing sound - if (target.skills.lifepoints >= target.skills.maximumLifepoints) { + val targetPoisoned = isBAPoisoned(target) + if (target.skills.lifepoints >= target.skills.maximumLifepoints && !targetPoisoned) { sendMessage(player, "The player's hitpoints are full.") return@onUseWithPlayer true } @@ -188,10 +196,11 @@ class BarbassaultArenaListener : InteractionListener { val restoreAmount = minOf(getHealerHealAmount(player), target.skills.maximumLifepoints - target.skills.lifepoints) - sendMessage(target, "You've been healed $restoreAmount hitpoints.") - sendMessage(player, "You healed $restoreAmount hitpoints.") + val curedPoison = isBAPoisoned(target) + sendHealerVialMessages(player, target, restoreAmount, curedPoison) player.animate(Animation(537)) heal(target, restoreAmount) + cureBAPoison(target) target.settings.updateRunEnergy((-restoreAmount).toDouble()) session?.updateBarbHealerIfaceHPOfPlayer(target) session?.eventBus?.emit(HitpointsHealed(player, restoreAmount)) @@ -347,6 +356,24 @@ class BarbassaultArenaListener : InteractionListener { val level = getBALevels(player).heal return healerHealAmounts.getOrElse(level) { healerHealAmounts.last() } } + + private fun sendHealerVialMessages(player: Player, target: Player, restoreAmount: Int, curedPoison: Boolean) { + when { + restoreAmount > 0 && curedPoison -> { + sendMessage(target, "You've been healed $restoreAmount hitpoints and your poison cured.") + sendMessage(player, "You healed $restoreAmount hitpoints and cured their poison.") + } + restoreAmount > 0 -> { + sendMessage(target, "You've been healed $restoreAmount hitpoints.") + sendMessage(player, "You healed $restoreAmount hitpoints.") + } + curedPoison -> { + sendMessage(target, "Your poison has been cured.") + sendMessage(player, "You cured their poison.") + } + } + } + fun fillHealerVial(player: Player){ queueScript(player,1, QueueStrength.STRONG) { if (player.inventory.containsAtLeastOneItem(All_HEALING_VIALS)) { @@ -478,4 +505,4 @@ Blocking off entrance, does NOT STOP runners entering, only slows Announce in game room when All of a monster has been killed " All of the $PENANCE Name have been killed! -* */ \ No newline at end of file +* */ diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt index 18961ca42..c5dcbf61a 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt @@ -1,15 +1,24 @@ package content.minigame.barbassault.arena.npcs import content.minigame.barbassault.arena.BarbAssEvent +import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.PenanceType +import content.minigame.barbassault.BA_SESSION_KEY +import content.minigame.barbassault.applyBAPoison import content.minigame.barbassault.getBASession +import core.api.forceWalk +import core.api.hasLineOfSight import core.game.node.entity.Entity +import core.game.node.entity.combat.ImpactHandler import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPCBehavior import core.game.node.entity.player.Player import core.game.node.entity.skill.Skills +import core.game.world.map.Location +import core.game.world.map.RegionManager import core.game.world.update.flag.context.Animation import org.rs09.consts.NPCs +import kotlin.math.abs val PENANCE_HEALER_IDS = intArrayOf( //NPCs.PENANCE_HEALER_5043,//tut @@ -33,14 +42,29 @@ val PENANCE_HEALER_DEFINITIONS = listOf( ) class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS) { + private enum class HealerMode { TARGET_PLAYER, TARGET_RUNNER, WANDER } + + private companion object { + const val MODE = "ba-healer:mode" + const val TARGET = "ba-healer:target" + const val WANDER_TICKS = "ba-healer:wander-ticks" + const val WANDER_MOVE_TICKS = "ba-healer:wander-move-ticks" + + const val VISION_RANGE = 15 + const val WANDER_AFTER_ACTION_TICKS = 4 + const val WANDER_STEP_TICKS = 5 + const val PLAYER_POISON_DAMAGE = 2 + } + override fun getXpMultiplier(self: NPC, attacker: Entity): Double { return 0.0 } override fun onCreation (self: NPC) { self.setAttribute("barbass-type", PenanceType.HEALER) - self.isWalks = true - self.walkRadius = 24 + self.setAttribute(MODE, HealerMode.TARGET_PLAYER) + self.isWalks = false + self.walkRadius = 0 self.isRespawn = false self.properties.defenceAnimation = Animation(5105) @@ -59,10 +83,147 @@ class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS) { } //sendMessage(player,"that's the wrong type of poisoned food to use! Penalty!") override fun tick(self: NPC): Boolean { + val session = self.getAttribute(BA_SESSION_KEY) ?: return false - return true + if (!hasLivingRunners(session)) { + wander(self) + self.shouldPreventStacking(self) + return false + } + + val wanderTicks = self.getAttribute(WANDER_TICKS, 0) + if (wanderTicks > 0) { + self.setAttribute(WANDER_TICKS, wanderTicks - 1) + wander(self) + self.shouldPreventStacking(self) + return false + } + + when (self.getAttribute(MODE, HealerMode.TARGET_PLAYER)) { + HealerMode.TARGET_PLAYER -> tickPlayerTarget(self, session) + HealerMode.TARGET_RUNNER -> tickRunnerTarget(self, session) + HealerMode.WANDER -> wander(self) + } + + self.shouldPreventStacking(self) + return false } + private fun tickPlayerTarget(self: NPC, session: BarbassaultSession) { + val target = currentTarget(self) ?: visiblePlayer(self, session)?.also { setTarget(self, it) } + if (target == null || !isValidPlayerTarget(self, target)) { + clearTarget(self) + return + } + + if (!isCloseEnough(self, target)) { + forceWalk(self, target.location, "DUMB") + return + } + + self.resetWalk() + self.face(target) + target.impactHandler.manualHit(self, PLAYER_POISON_DAMAGE, ImpactHandler.HitsplatType.POISON) + applyBAPoison(target, self, 6) + clearTarget(self) + self.setAttribute(MODE, HealerMode.TARGET_RUNNER) + self.setAttribute(WANDER_TICKS, WANDER_AFTER_ACTION_TICKS) + } + + private fun tickRunnerTarget(self: NPC, session: BarbassaultSession) { + val target = currentTarget(self) ?: visibleRunner(self, session)?.also { setTarget(self, it) } + if (target == null || !isValidRunnerTarget(self, target)) { + clearTarget(self) + return + } + + if (!isCloseEnough(self, target)) { + forceWalk(self, target.location, "DUMB") + return + } + + self.resetWalk() + self.face(target) + target.skills.heal(target.skills.maximumLifepoints) + clearTarget(self) + self.setAttribute(MODE, HealerMode.TARGET_PLAYER) + self.setAttribute(WANDER_TICKS, WANDER_AFTER_ACTION_TICKS) + } + + private fun visiblePlayer(self: NPC, session: BarbassaultSession): Player? { + return session.team.allPlayers() + .filter { isValidPlayerTarget(self, it) } + .minByOrNull { it.location.getDistance(self.location) } + } + + private fun visibleRunner(self: NPC, session: BarbassaultSession): NPC? { + return session.sessionNpcs + .filter { isValidRunnerTarget(self, it) } + .minByOrNull { it.location.getDistance(self.location) } + } + + private fun isValidPlayerTarget(self: NPC, player: Player): Boolean { + return player.skills.lifepoints > 0 && + tileRadius(self.location, player.location) <= VISION_RANGE && + hasLineOfSight(self, player) + } + + private fun isValidRunnerTarget(self: NPC, runner: NPC): Boolean { + return runner.getAttribute("barbass-type", null) == PenanceType.RUNNER && + runner.skills.lifepoints > 0 && + tileRadius(self.location, runner.location) <= VISION_RANGE && + hasLineOfSight(self, runner) + } + + private fun hasLivingRunners(session: BarbassaultSession): Boolean { + return session.sessionNpcs.any { + it.getAttribute("barbass-type", null) == PenanceType.RUNNER && + it.skills.lifepoints > 0 + } + } + + private fun wander(self: NPC) { + val moveTicks = self.getAttribute(WANDER_MOVE_TICKS, 0) + 1 + if (moveTicks < WANDER_STEP_TICKS) { + self.setAttribute(WANDER_MOVE_TICKS, moveTicks) + return + } + + self.setAttribute(WANDER_MOVE_TICKS, 0) + val destination = randomWalkableTile(self.location) ?: return + forceWalk(self, destination, "DUMB") + } + + private fun randomWalkableTile(location: Location): Location? { + val options = listOf( + location.transform(0, 1, 0), + location.transform(1, 0, 0), + location.transform(0, -1, 0), + location.transform(-1, 0, 0), + ).filter { RegionManager.isTeleportPermitted(it) } + + return options.randomOrNull() + } + + private fun isCloseEnough(self: NPC, target: Entity): Boolean { + return self.location == target.location || self.location.isNextTo(target) + } + + private fun tileRadius(a: Location, b: Location): Int { + return maxOf(abs(a.x - b.x), abs(a.y - b.y)) + } + + private fun setTarget(self: NPC, target: Entity) { + self.setAttribute(TARGET, target) + } + + private inline fun currentTarget(self: NPC): T? { + return self.getAttribute(TARGET, null) as? T + } + + private fun clearTarget(self: NPC) { + self.removeAttribute(TARGET) + } override fun onDeathFinished(self: NPC, killer: Entity) { super.onDeathFinished(self, killer) @@ -93,4 +254,4 @@ healer_Idle_5104 healer_hit_5105 healer_Death_5106 Healer_attack_5107? - */ \ No newline at end of file + */ From 2437d287f23a7a1fe991cb073c993a6249ef8cd1 Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 10 Jun 2026 21:39:08 -0400 Subject: [PATCH 122/123] oops --- .../barbassault/arena/npcs/PenanceFighterNPC.kt | 10 ++++------ .../barbassault/arena/npcs/PenanceHealerNPC.kt | 8 ++++---- .../barbassault/arena/npcs/PenanceRangerNPC.kt | 10 +++------- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt index 8721fd92f..b14bc935f 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceFighterNPC.kt @@ -23,10 +23,8 @@ val PENANCE_FIGHTER_IDS = listOf( NPCs.PENANCE_FIGHTER_5044,NPCs.PENANCE_FIGHTER_5045,NPCs.PENANCE_FIGHTER_5213, NPCs.PENANCE_FIGHTER_5214,NPCs.PENANCE_FIGHTER_5215,NPCs.PENANCE_FIGHTER_5216, NPCs.PENANCE_FIGHTER_5217,NPCs.PENANCE_FIGHTER_5218,NPCs.PENANCE_FIGHTER_5219) +data class PenanceFighterDefinition(val id: Int,val hp: Int,val attack: Int,val strength: Int, val defence: Int, val range: Int, val magic: Int) -data class PenanceFighterDefinition(val id: Int,val hp: Int,val attack: Int,val strength: Int, val defence: Int, val range: Int, val magic: Int){ - companion object { val BY_ID = PENANCE_FIGHTER_DEFINITIONS.associateBy { it.id } } -} val PENANCE_FIGHTER_DEFINITIONS = listOf( PenanceFighterDefinition(NPCs.PENANCE_FIGHTER_5044, 28, 26, 26, 25, 1, 1), PenanceFighterDefinition(NPCs.PENANCE_FIGHTER_5045, 29, 28, 29, 27, 1, 1), @@ -38,7 +36,7 @@ val PENANCE_FIGHTER_DEFINITIONS = listOf( PenanceFighterDefinition(NPCs.PENANCE_FIGHTER_5218, 55, 60, 61, 62, 1, 1), PenanceFighterDefinition(NPCs.PENANCE_FIGHTER_5219, 56, 71, 73, 66, 1, 1), ) - +val PENANCE_FIGHTER_DEFINITIONS_BY_ID = PENANCE_FIGHTER_DEFINITIONS.associateBy { it.id } class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { override fun canBeAttackedBy(self: NPC, attacker: Entity, style: CombatStyle, shouldSendMessage: Boolean): Boolean { if (attacker is Player && getItemFromEquipment(attacker, EquipmentSlot.CAPE)?.id != 10556) { @@ -82,7 +80,7 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { self.properties.deathAnimation = Animation(5098) self.properties.attackSpeed = 4 - val definition = PenanceFighterDefinition.BY_ID[self.id] ?: return + val definition = PENANCE_FIGHTER_DEFINITIONS_BY_ID[self.id] ?: return self.getSkills().setStaticLevel(Skills.ATTACK, definition.attack) self.getSkills().setStaticLevel(Skills.STRENGTH, definition.strength) @@ -109,4 +107,4 @@ class PenanceFighterNPC : NPCBehavior(*PENANCE_FIGHTER_IDS.toIntArray()) { //Fighter_Attack_5097 //5096 take hit //5095_Move -//9094_Idle \ No newline at end of file +//9094_Idle diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt index c5dcbf61a..570bf9296 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt @@ -26,9 +26,8 @@ val PENANCE_HEALER_IDS = intArrayOf( NPCs.PENANCE_HEALER_5241,NPCs.PENANCE_HEALER_5242,NPCs.PENANCE_HEALER_5243, NPCs.PENANCE_HEALER_5244,NPCs.PENANCE_HEALER_5245,NPCs.PENANCE_HEALER_5246 ) -data class PenanceHealerDefinition(val id: Int,val hp: Int,val attack: Int,val strength: Int, val defence: Int, val range: Int, val magic: Int){ - companion object { val BY_ID = PENANCE_HEALER_DEFINITIONS.associateBy { it.id } } -} +data class PenanceHealerDefinition(val id: Int,val hp: Int,val attack: Int,val strength: Int, val defence: Int, val range: Int, val magic: Int) + val PENANCE_HEALER_DEFINITIONS = listOf( PenanceHealerDefinition(NPCs.PENANCE_HEALER_5238, 27, 9, 8, 9, 1, 1 ), PenanceHealerDefinition(NPCs.PENANCE_HEALER_5239, 32, 13, 15, 14, 1, 1 ), @@ -40,6 +39,7 @@ val PENANCE_HEALER_DEFINITIONS = listOf( PenanceHealerDefinition(NPCs.PENANCE_HEALER_5245, 67, 40, 38, 36, 1, 1 ), PenanceHealerDefinition(NPCs.PENANCE_HEALER_5246, 76, 40, 44, 38, 1, 1 ), ) +val PENANCE_HEALER_DEFINITIONS_BY_ID = PENANCE_HEALER_DEFINITIONS.associateBy { it.id } class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS) { private enum class HealerMode { TARGET_PLAYER, TARGET_RUNNER, WANDER } @@ -71,7 +71,7 @@ class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS) { self.properties.deathAnimation = Animation(5106) self.properties.attackAnimation = Animation(5107) - val definition = PenanceHealerDefinition.BY_ID[self.id] ?: return + val definition = PENANCE_HEALER_DEFINITIONS_BY_ID[self.id] ?: return self.getSkills().setStaticLevel(Skills.ATTACK, definition.attack) self.getSkills().setStaticLevel(Skills.STRENGTH, definition.strength) diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt index fca873663..698bd6719 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRangerNPC.kt @@ -4,8 +4,6 @@ import content.minigame.barbassault.BarbRole import content.minigame.barbassault.arena.BarbAssEvent import content.minigame.barbassault.arena.BACombatValidation import content.minigame.barbassault.arena.PenanceType -import content.minigame.barbassault.arenas.monsters.PENANCE_FIGHTER_DEFINITIONS -import content.minigame.barbassault.arenas.monsters.PenanceFighterDefinition import content.minigame.barbassault.getBASession import core.api.* import core.api.getItemFromEquipment @@ -26,10 +24,8 @@ val PENANCE_RANGER_IDS = listOf( NPCs.PENANCE_RANGER_5232,NPCs.PENANCE_RANGER_5233,NPCs.PENANCE_RANGER_5234, NPCs.PENANCE_RANGER_5235,NPCs.PENANCE_RANGER_5236,NPCs.PENANCE_RANGER_5237 ) +data class PenanceRangerDefinition(val id: Int,val hp: Int,val attack: Int,val strength: Int, val defence: Int, val range: Int, val magic: Int) -data class PenanceRangerDefinition(val id: Int,val hp: Int,val attack: Int,val strength: Int, val defence: Int, val range: Int, val magic: Int){ - companion object { val BY_ID = PENANCE_RANGER_DEFINITIONS.associateBy { it.id } } -} val PENANCE_RANGER_DEFINITIONS = listOf( PenanceRangerDefinition(NPCs.PENANCE_RANGER_5229, 20, 22, 1, 21, 23, 1), PenanceRangerDefinition(NPCs.PENANCE_RANGER_5230, 28, 27, 1, 29, 24, 1), @@ -41,6 +37,7 @@ val PENANCE_RANGER_DEFINITIONS = listOf( PenanceRangerDefinition(NPCs.PENANCE_RANGER_5236, 54, 69, 1, 68, 70, 1), PenanceRangerDefinition(NPCs.PENANCE_RANGER_5237, 58, 79, 1, 80, 78, 1), ) +val PENANCE_RANGER_DEFINITIONS_BY_ID = PENANCE_RANGER_DEFINITIONS.associateBy { it.id } class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { override fun canBeAttackedBy(self: NPC, attacker: Entity, style: CombatStyle, shouldSendMessage: Boolean): Boolean { @@ -80,8 +77,7 @@ class PenanceRangerNPC : NPCBehavior(*PENANCE_RANGER_IDS.toIntArray()) { self.properties.rangeAnimation = Animation(5395) self.properties.deathAnimation = Animation(5397) self.properties.attackSpeed = 4 - - val definition = PenanceRangerDefinition.BY_ID[self.id] ?: return + val definition = PENANCE_RANGER_DEFINITIONS_BY_ID[self.id] ?: return self.getSkills().setStaticLevel(Skills.ATTACK, definition.attack) self.getSkills().setStaticLevel(Skills.STRENGTH, definition.strength) From 46658026cd50cebfdb1c0b2af3d53563a2173d25 Mon Sep 17 00:00:00 2001 From: Tooze Date: Wed, 10 Jun 2026 23:46:39 -0400 Subject: [PATCH 123/123] grounditem Resoawns fixed, Runner escape logic better --- .../barbassault/arena/BAGroundSpawn.kt | 10 +++- .../minigame/barbassault/arena/BASession.kt | 48 +++++++++++++------ .../arena/npcs/PenanceHealerNPC.kt | 28 ++++++----- .../arena/npcs/PenanceRunnerNPC.kt | 18 ++++++- .../barbassault/arena/scenery/DefenderTrap.kt | 2 + .../barbassault/bots/HealerBehavior.kt | 2 +- 6 files changed, 78 insertions(+), 30 deletions(-) diff --git a/Server/src/main/content/minigame/barbassault/arena/BAGroundSpawn.kt b/Server/src/main/content/minigame/barbassault/arena/BAGroundSpawn.kt index a522508db..04d814231 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BAGroundSpawn.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BAGroundSpawn.kt @@ -32,14 +32,20 @@ class BAGroundSpawn(private var session: BarbassaultSession, private var respawn fun addLureRange(addRange: Int) { lureRange += addRange } override fun respawn() { - if (!autoSpawn || respawnRate < 0) + if (!autoSpawn || respawnRate < 0) { + return + } GameWorld.Pulser.submit(object : Pulse(respawnRate) { override fun pulse(): Boolean { + active = true GroundItemManager.create(this@BAGroundSpawn) + if (!session.BAgroundItems.contains(this@BAGroundSpawn)) { + session.BAgroundItems.add(this@BAGroundSpawn) + } return true } }) } -} \ No newline at end of file +} diff --git a/Server/src/main/content/minigame/barbassault/arena/BASession.kt b/Server/src/main/content/minigame/barbassault/arena/BASession.kt index 43ec66b4d..724ebedf0 100644 --- a/Server/src/main/content/minigame/barbassault/arena/BASession.kt +++ b/Server/src/main/content/minigame/barbassault/arena/BASession.kt @@ -191,23 +191,30 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M tracker.defenderStats.runnersPast++ } } - fun isPenanceDead( type: PenanceType): Boolean = currentNPCDeathCount[type] >= currentNPCCount[type] + fun isPenanceDead(type: PenanceType): Boolean = currentNPCDeathCount[type] >= currentWaveDefinition.caps[type] fun isAllPenanceDead(): Boolean = PenanceType.values().all { isPenanceDead(it) } fun runnerEscaped(runner: NPC) { - if (!sessionNpcs.remove(runner)) { - return - } - - currentNPCEscapeCount[PenanceType.RUNNER] = currentNPCEscapeCount[PenanceType.RUNNER] + 1 val defenders = team.getPlayersByRole(BarbRole.DEFENDER) val penalizedPlayers = if (defenders.isEmpty()) team.allPlayers() else defenders penalizedPlayers.forEach { eventBus.emit(BarbAssEvent.RunnerEscaped(it)) } - runner.clear() + + val spawn = npcTunnel.firstOrNull { it.type == PenanceType.RUNNER } ?: return + runner.resetWalk() + runner.teleport(base.transform(spawn.spawnOffset)) + } + + fun runnerKilledByTrap(runner: NPC) { + sessionNpcs.remove(runner) + pennanceClearedMessage(runner) } fun pennanceClearedMessage(npc: NPC) { val session = getBASession(npc) ?: return + if (npc.getAttribute("ba:npc-death-counted", false)) { + return + } + npc.setAttribute("ba:npc-death-counted", true) val type = npc.getAttribute("barbass-type") session.currentNPCDeathCount[type]++ if (session.isPenanceDead(type)) { @@ -238,17 +245,20 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M } fun tryPenanceSpawn(type: PenanceType, force: Boolean = false): Boolean { - val current = currentNPCCount[type] - currentNPCEscapeCount[type] val cap = currentWaveDefinition.caps[type] val npcId = currentWaveDefinition.npcIds[type] ?: return false + if (currentNPCDeathCount[type] >= cap) return false + + val current = currentNPCCount[type] if (!force && current >= cap) return false val spawn = npcTunnel.firstOrNull { it.type == type } ?: return false - val npc = sessionNPCSpawn(npcId, location(30, 31, 0), spawn.direction) - - npc?.location = base.transform(spawn.spawnOffset) + val npc = NPC.create(npcId, base.transform(location(30, 31, 0)), spawn.direction) ?: return false setBASession(npc as Entity,this) + npc.location = base.transform(spawn.spawnOffset) + npc.init() + sessionNpcs.add(npc) currentNPCCount[type]++ return isCaveBlocked(type) @@ -268,20 +278,28 @@ class BarbassaultSession( val activity: BAActivity ? = null) :LogoutListener, M fun pickUpGroundItem(player: Player,node:BAGroundSpawn): Boolean { if (player.inventory.add(node)) { - destroyGroundItem(node) + destroyGroundItem(node, allowRespawn = isArenaSpawnItem(node)) return true } sendMessage(player,"You don't have enough inventory space to hold that item.") return false } - fun destroyGroundItem(node: BAGroundSpawn){ + fun destroyGroundItem(node: BAGroundSpawn, allowRespawn: Boolean = false){ node.isActive = false - node.isAutoSpawn = false - BAgroundItems.remove(node) + if (!allowRespawn) { + node.isAutoSpawn = false + BAgroundItems.remove(node) + } GroundItemManager.destroy(node) } + private fun isArenaSpawnItem(node: BAGroundSpawn): Boolean { + return arenaSpawnItems.any { spawnItem -> + node.id == spawnItem.id && node.location == base.transform(spawnItem.location) + } + } + fun findClosestLure(target: Location): BAGroundSpawn? { fun distance(a: Location, b: Location): Int =Math.abs(a.x - b.x) + Math.abs(a.y - b.y) return BAgroundItems diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt index 570bf9296..1b8ed3f8f 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceHealerNPC.kt @@ -1,10 +1,11 @@ package content.minigame.barbassault.arena.npcs +import content.minigame.barbassault.BA_SESSION_KEY +import content.minigame.barbassault.applyBAPoison +import content.minigame.barbassault.isBAPoisoned import content.minigame.barbassault.arena.BarbAssEvent import content.minigame.barbassault.arena.BarbassaultSession import content.minigame.barbassault.arena.PenanceType -import content.minigame.barbassault.BA_SESSION_KEY -import content.minigame.barbassault.applyBAPoison import content.minigame.barbassault.getBASession import core.api.forceWalk import core.api.hasLineOfSight @@ -73,15 +74,16 @@ class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS) { val definition = PENANCE_HEALER_DEFINITIONS_BY_ID[self.id] ?: return - self.getSkills().setStaticLevel(Skills.ATTACK, definition.attack) - self.getSkills().setStaticLevel(Skills.STRENGTH, definition.strength) - self.getSkills().setStaticLevel(Skills.DEFENCE, definition.defence) - self.getSkills().setStaticLevel(Skills.RANGE, definition.range) - self.getSkills().setStaticLevel(Skills.MAGIC, definition.magic) + self.getSkills().setLevel(Skills.ATTACK, definition.attack) + self.getSkills().setLevel(Skills.STRENGTH, definition.strength) + self.getSkills().setLevel(Skills.DEFENCE, definition.defence) + self.getSkills().setLevel(Skills.RANGE, definition.range) + self.getSkills().setLevel(Skills.MAGIC, definition.magic) + self.getSkills().setLevel(Skills.HITPOINTS, definition.hp) self.getSkills().setStaticLevel(Skills.HITPOINTS, definition.hp) } - //sendMessage(player,"that's the wrong type of poisoned food to use! Penalty!") + override fun tick(self: NPC): Boolean { val session = self.getAttribute(BA_SESSION_KEY) ?: return false @@ -113,6 +115,7 @@ class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS) { val target = currentTarget(self) ?: visiblePlayer(self, session)?.also { setTarget(self, it) } if (target == null || !isValidPlayerTarget(self, target)) { clearTarget(self) + wander(self) return } @@ -123,17 +126,20 @@ class PenanceHealerNPC : NPCBehavior(*PENANCE_HEALER_IDS) { self.resetWalk() self.face(target) - target.impactHandler.manualHit(self, PLAYER_POISON_DAMAGE, ImpactHandler.HitsplatType.POISON) - applyBAPoison(target, self, 6) + if (!isBAPoisoned(target)) { + target.impactHandler.manualHit(self, PLAYER_POISON_DAMAGE, ImpactHandler.HitsplatType.POISON) + applyBAPoison(target, self, 6) + } clearTarget(self) self.setAttribute(MODE, HealerMode.TARGET_RUNNER) - self.setAttribute(WANDER_TICKS, WANDER_AFTER_ACTION_TICKS) + self.setAttribute(WANDER_TICKS, 1) } private fun tickRunnerTarget(self: NPC, session: BarbassaultSession) { val target = currentTarget(self) ?: visibleRunner(self, session)?.also { setTarget(self, it) } if (target == null || !isValidRunnerTarget(self, target)) { clearTarget(self) + wander(self) return } diff --git a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt index 529e6c513..1ab97c042 100644 --- a/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt +++ b/Server/src/main/content/minigame/barbassault/arena/npcs/PenanceRunnerNPC.kt @@ -67,6 +67,7 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { return 0.0 } override fun onCreation(self: NPC) { + self.isRespawn = false self.isWalks = false self.walkRadius = 0 self.destinationFlag @@ -95,6 +96,7 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { self.resetWalk() if (escapeRemoveTicks <= 1) { session.runnerEscaped(self) + resetAfterEscape(self) } return false } @@ -321,7 +323,8 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { } private fun isAtEscapeTunnel(session: BarbassaultSession, location: Location): Boolean { - return location.y <= escapeLocation(session).y + val escape = escapeLocation(session) + return location.y <= escape.y || (location.y <= escape.y + 1 && abs(location.x - escape.x) <= 2) } private fun beginEscape(self: NPC) { @@ -331,6 +334,19 @@ class PenanceRunnerNPC : NPCBehavior(*PENANCE_RUNNER_IDS.toIntArray()) { self.setAttribute(ESCAPE_REMOVE_TICKS, 1) } + private fun resetAfterEscape(self: NPC) { + sendChat(self, "") + clearTarget(self) + self.removeAttribute(SKIP_NEXT_HUNT) + self.removeAttribute(BAD_FOOD_WALK_TICKS) + self.removeAttribute(EAT_PAUSE_TICKS) + self.removeAttribute(ESCAPE_REMOVE_TICKS) + self.setAttribute(MODE, RunnerMode.RANDOM_WALKING) + self.setAttribute(MODE_TICKS, (0..4).random()) + self.setAttribute(HUNT_TICKS, (0..2).random()) + self.resetWalk() + } + private fun escapeLocation(session: BarbassaultSession): Location { return session.base.transform(35, 15, 0) } diff --git a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt index a7c96f10a..c1b06988b 100644 --- a/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt +++ b/Server/src/main/content/minigame/barbassault/arena/scenery/DefenderTrap.kt @@ -9,6 +9,7 @@ import content.minigame.barbassault.getBASession import core.api.* import core.game.node.entity.Entity import core.game.node.entity.combat.DeathTask +import core.game.node.entity.npc.NPC import core.game.node.entity.player.Player import core.game.system.task.Pulse import core.game.world.GameWorld @@ -91,6 +92,7 @@ class DefenderTrap : MapArea { val bait = goodTrapBait(session, trapLocation) ?: return false session.destroyGroundItem(bait) entity.sendChat(GOOD_EAT) + (entity as? NPC)?.let { session.runnerKilledByTrap(it) } killRunner(entity) updateTrap(scenery, trapLocation) session.broadcastToRole(BarbRole.DEFENDER, "A Penance Runner broke a trap to the ${trapDirectionFor(session, trapLocation)}!") diff --git a/Server/src/main/content/minigame/barbassault/bots/HealerBehavior.kt b/Server/src/main/content/minigame/barbassault/bots/HealerBehavior.kt index 352715d8b..2a09e5b35 100644 --- a/Server/src/main/content/minigame/barbassault/bots/HealerBehavior.kt +++ b/Server/src/main/content/minigame/barbassault/bots/HealerBehavior.kt @@ -20,13 +20,13 @@ class HealerBehavior : RoleBehavior { val bot = ctx.bot val session = ctx.session ?: return - ctx.insultDefender() if (healTeamMate(ctx, session)) return if (stockUp(ctx)) return if (fillVial(ctx)) return if (healSelf(ctx)) return if (poisonPenanceHealer(ctx, session)) return if (healAnyTeammate(ctx, session)) return + ctx.insultDefender() if (ctx.poolIdle("BA-Healer: Idling at pool")) return