diff --git a/Server/data/configs/npc_configs.json b/Server/data/configs/npc_configs.json index de22bd97c..db292fc8d 100644 --- a/Server/data/configs/npc_configs.json +++ b/Server/data/configs/npc_configs.json @@ -11200,10 +11200,9 @@ "attack_speed": "7", "respawn_delay": "60", "defence_animation": "285", - "magic_animation": "284", - "death_animation": "287", "weakness": "7", "magic_animation": "0", + "death_animation": "287", "name": "Stick", "defence_level": "60", "safespot": null, @@ -11219,42 +11218,42 @@ "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", - "attack_speed": "6", - "defence_animation": "285", - "weakness": "7", - "magic_animation": "284", - "death_animation": "287", "id": "1097", "aggressive": "true", "bonuses": "40,40,40,0,0,25,25,40,200,200,0,70,0,0,0", "range_level": "1", - "respawn_delay": "60", "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", - "attack_speed": "6", - "defence_animation": "285", - "weakness": "7", - "magic_animation": "284", - "death_animation": "287", "id": "1098", "aggressive": "true", "bonuses": "40,40,40,0,0,25,25,40,200,400,0,70,0,0,0", "range_level": "1", - "respawn_delay": "60", "attack_level": "50" }, { @@ -67854,6 +67853,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8349", @@ -67879,6 +67879,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8350", @@ -67904,6 +67905,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8351", @@ -67929,6 +67931,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8352", @@ -67954,6 +67957,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8353", @@ -67979,6 +67983,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8354", @@ -68004,6 +68009,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8355", @@ -68029,6 +68035,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8356", @@ -68054,6 +68061,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8357", @@ -68079,6 +68087,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8358", @@ -68104,6 +68113,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8359", @@ -68129,6 +68139,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8360", @@ -68154,6 +68165,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8361", @@ -68179,6 +68191,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8362", @@ -68204,6 +68217,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8363", @@ -68229,6 +68243,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8364", @@ -68254,6 +68269,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8365", @@ -68279,6 +68295,7 @@ "defence_level": "85", "poison_immune": "true", "safespot": "true", + "movement_radius": "40", "lifepoints": "326", "strength_level": "85", "id": "8366", @@ -71622,4 +71639,4 @@ "id": "6062", "respawn_delay": "9999" } -] +] \ No newline at end of file diff --git a/Server/src/main/content/region/misthalin/lumbridge/handlers/TormentedDemonArea.kt b/Server/src/main/content/region/misthalin/lumbridge/handlers/TormentedDemonArea.kt new file mode 100644 index 000000000..22aef3339 --- /dev/null +++ b/Server/src/main/content/region/misthalin/lumbridge/handlers/TormentedDemonArea.kt @@ -0,0 +1,10 @@ +package content.region.misthalin.lumbridge + +import core.api.* +import core.game.world.map.zone.ZoneBorders +import core.game.world.map.zone.ZoneRestriction + +class TormentedDemonArea : MapArea { + override fun defineAreaBorders() : Array { return arrayOf (ZoneBorders.forRegion(10329)) } + override fun getRestrictions() : Array { return arrayOf (ZoneRestriction.CANNON) } +} diff --git a/Server/src/main/core/ServerConstants.kt b/Server/src/main/core/ServerConstants.kt index afe6f0157..277a4d108 100644 --- a/Server/src/main/core/ServerConstants.kt +++ b/Server/src/main/core/ServerConstants.kt @@ -281,5 +281,8 @@ class ServerConstants { @JvmField var MAX_PATHFIND_DISTANCE = 25 + + @JvmField + var IRONMAN_ICONS = false } } diff --git a/Server/src/main/core/game/node/entity/player/info/Rights.java b/Server/src/main/core/game/node/entity/player/info/Rights.java index cd9b28e59..c50de0e95 100644 --- a/Server/src/main/core/game/node/entity/player/info/Rights.java +++ b/Server/src/main/core/game/node/entity/player/info/Rights.java @@ -1,6 +1,7 @@ package core.game.node.entity.player.info; import core.game.node.entity.player.Player; +import core.ServerConstants; /** * Represent the rights of a player. @@ -24,9 +25,11 @@ public enum Rights { if (c != Rights.REGULAR_PLAYER && c != null) { return c.toInteger(); } - if (player.getIronmanManager().isIronman()) { - return player.getIronmanManager().getMode().getIcon(); - } + if (ServerConstants.IRONMAN_ICONS) { + if (player.getIronmanManager().isIronman()) { + return player.getIronmanManager().getMode().getIcon(); + } + } return 0; } diff --git a/Server/src/main/core/game/system/communication/GlobalChat.kt b/Server/src/main/core/game/system/communication/GlobalChat.kt index 060849cf7..6e8ed2161 100644 --- a/Server/src/main/core/game/system/communication/GlobalChat.kt +++ b/Server/src/main/core/game/system/communication/GlobalChat.kt @@ -6,6 +6,7 @@ import core.api.sendMessage import core.api.setAttribute import core.game.system.command.Privilege import core.game.world.repository.Repository +import core.game.node.entity.player.info.Rights import core.tools.colorize class GlobalChat : Commands { @@ -20,9 +21,9 @@ class GlobalChat : Commands { companion object { val ATTR_GLOBAL_MUTE = "/save:globalmute" - fun process(sender: String, message: String) { - val msgSD = prepare(sender, message, false) - val msgHD = prepare(sender, message, true) + fun process(sender: String, message: String, rights: Int) { + val msgSD = prepare(sender, message, false, rights) + val msgHD = prepare(sender, message, true, rights) for (player in Repository.players.filter { !getAttribute(it, ATTR_GLOBAL_MUTE, false) }) { if (player.interfaceManager.isResizable) sendMessage(player, msgHD) @@ -31,10 +32,10 @@ class GlobalChat : Commands { } } - private fun prepare(sender: String, message: String, isResizable: Boolean): String { + private fun prepare(sender: String, message: String, isResizable: Boolean, rights: Int): String { val baseColor = if (isResizable) "%f1b04c" else "%7512ff" val bracketColor = if (isResizable) "%ffffff" else "%000000" - return colorize("$bracketColor[${baseColor}G$bracketColor] $sender: ${baseColor}$message") + return colorize("$bracketColor[${baseColor}G$bracketColor] ${if (rights > 0) "" else ""}$sender: ${baseColor}$message") } } -} \ No newline at end of file +} diff --git a/Server/src/main/core/game/system/config/ServerConfigParser.kt b/Server/src/main/core/game/system/config/ServerConfigParser.kt index af22fb205..5dd559b87 100644 --- a/Server/src/main/core/game/system/config/ServerConfigParser.kt +++ b/Server/src/main/core/game/system/config/ServerConfigParser.kt @@ -151,6 +151,7 @@ object ServerConfigParser { ServerConstants.DISCORD_OPENRSC_HOOK = data.getString("server.openrsc_integration_webhook", "") ServerConstants.ENABLE_GLOBALCHAT = data.getBoolean("world.enable_globalchat", true) ServerConstants.MAX_PATHFIND_DISTANCE = data.getLong("server.max_pathfind_dist", 25L).toInt() + ServerConstants.IRONMAN_ICONS = data.getBoolean("world.ironman_icons", false) val logLevel = data.getString("server.log_level", "VERBOSE").uppercase() ServerConstants.LOG_LEVEL = parseEnumEntry(logLevel) ?: LogLevel.VERBOSE diff --git a/Server/src/main/core/net/packet/PacketProcessor.kt b/Server/src/main/core/net/packet/PacketProcessor.kt index 3d0ef5d3c..975dcda0b 100644 --- a/Server/src/main/core/net/packet/PacketProcessor.kt +++ b/Server/src/main/core/net/packet/PacketProcessor.kt @@ -210,7 +210,7 @@ object PacketProcessor { val messages = splitChatMessage(pkt.message.substring(2), pkt.player.name.length + 3, false) for (message in messages) { if (message.isNotBlank()) - GlobalChat.process(pkt.player.username, message) + GlobalChat.process(pkt.player.username, message, Rights.getChatIcon(pkt.player)) } return } @@ -222,7 +222,7 @@ object PacketProcessor { builder.sender = pkt.player.name builder.clanName = pkt.player.communication.clan.owner.lowercase().replace(" ", "_") builder.message = message - builder.rank = pkt.player.rights.ordinal + builder.rank = Rights.getChatIcon(pkt.player) ManagementEvents.publish(builder.build()) } return diff --git a/Server/src/main/core/worker/ManagementEvents.kt b/Server/src/main/core/worker/ManagementEvents.kt index 556e13325..860c29081 100644 --- a/Server/src/main/core/worker/ManagementEvents.kt +++ b/Server/src/main/core/worker/ManagementEvents.kt @@ -366,4 +366,4 @@ object ManagementEvents { private fun shouldWaitForClanInfo(clanName: String): Boolean { return ClanRepository.get(clanName) == null && hasRequestedClanInfo[clanName] == null } -} \ No newline at end of file +}