diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java
index 5c32955ca5..1245ab1991 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java
@@ -62,6 +62,7 @@ import net.runelite.client.input.KeyManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.util.StackFormatter;
+import static net.runelite.client.util.Text.sanitize;
import net.runelite.http.api.chat.ChatClient;
import net.runelite.http.api.hiscore.HiscoreClient;
import net.runelite.http.api.hiscore.HiscoreEndpoint;
@@ -792,19 +793,6 @@ public class ChatCommandsPlugin extends Plugin
return shortest;
}
- /**
- * Cleans the ironman status icon from playername string if present and
- * corrects spaces.
- *
- * @param lookup Playername to lookup.
- * @return Cleaned playername.
- */
- private static String sanitize(String lookup)
- {
- String cleaned = lookup.contains("
') + 1) : lookup;
- return cleaned.replace('\u00A0', ' ');
- }
-
/**
* Looks up the ironman status of the local player. Does NOT work on other players.
*
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/Raid.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/Raid.java
index a7b151f409..a0baabe691 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/Raid.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/Raid.java
@@ -134,4 +134,49 @@ public class Raid
return builder.toString();
}
+
+ public String toRoomString()
+ {
+ final StringBuilder sb = new StringBuilder();
+
+ for (Room r : getLayout().getRooms())
+ {
+ final int position = r.getPosition();
+ final RaidRoom room = getRoom(position);
+
+ if (room == null || !(room.getType() == RaidRoom.Type.COMBAT || room.getType() == RaidRoom.Type.PUZZLE))
+ {
+ continue;
+ }
+
+ switch (room.getType())
+ {
+ case PUZZLE:
+ final RaidRoom.Puzzle puzzle = room.getPuzzle();
+ sb.append(puzzle.getName());
+
+ if (puzzle == RaidRoom.Puzzle.UNKNOWN)
+ {
+ sb.append(" (puzzle)");
+ }
+
+ sb.append(", ");
+ break;
+ case COMBAT:
+ final RaidRoom.Boss boss = room.getBoss();
+ sb.append(boss.getName());
+
+ if (boss == RaidRoom.Boss.UNKNOWN)
+ {
+ sb.append(" (combat)");
+ }
+
+ sb.append(", ");
+ break;
+ }
+ }
+
+ final String roomsString = sb.toString();
+ return roomsString.substring(0, roomsString.length() - 2);
+ }
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java
index 18dd050f81..2323a15a49 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java
@@ -151,4 +151,15 @@ public interface RaidsConfig extends Config
{
return "";
}
+
+ @ConfigItem(
+ position = 11,
+ keyName = "layoutMessage",
+ name = "Send raid layout message when entering raid",
+ description = "Sends game message with raid layout on entering new raid"
+ )
+ default boolean layoutMessage()
+ {
+ return true;
+ }
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java
index 9b6e62e633..5ca7214b57 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java
@@ -86,7 +86,7 @@ public class RaidsOverlay extends Overlay
}
Color color = Color.WHITE;
- String layout = plugin.getRaid().getLayout().toCode().replaceAll("#", "").replaceAll("¤", "");
+ String layout = plugin.getRaid().getLayout().toCodeString();
if (config.enableLayoutWhitelist() && !plugin.getLayoutWhitelist().contains(layout.toLowerCase()))
{
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java
index f1c9ec5021..0d4633fe94 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java
@@ -242,21 +242,21 @@ public class RaidsPlugin extends Plugin
double percentage = personalPoints / (totalPoints / 100.0);
String chatMessage = new ChatMessageBuilder()
- .append(ChatColorType.NORMAL)
- .append("Total points: ")
- .append(ChatColorType.HIGHLIGHT)
- .append(POINTS_FORMAT.format(totalPoints))
- .append(ChatColorType.NORMAL)
- .append(", Personal points: ")
- .append(ChatColorType.HIGHLIGHT)
- .append(POINTS_FORMAT.format(personalPoints))
- .append(ChatColorType.NORMAL)
- .append(" (")
- .append(ChatColorType.HIGHLIGHT)
- .append(DECIMAL_FORMAT.format(percentage))
- .append(ChatColorType.NORMAL)
- .append("%)")
- .build();
+ .append(ChatColorType.NORMAL)
+ .append("Total points: ")
+ .append(ChatColorType.HIGHLIGHT)
+ .append(POINTS_FORMAT.format(totalPoints))
+ .append(ChatColorType.NORMAL)
+ .append(", Personal points: ")
+ .append(ChatColorType.HIGHLIGHT)
+ .append(POINTS_FORMAT.format(personalPoints))
+ .append(ChatColorType.NORMAL)
+ .append(" (")
+ .append(ChatColorType.HIGHLIGHT)
+ .append(DECIMAL_FORMAT.format(percentage))
+ .append(ChatColorType.NORMAL)
+ .append("%)")
+ .build();
chatMessageManager.queue(QueuedMessage.builder()
.type(ChatMessageType.CLANCHAT_INFO)
@@ -302,6 +302,7 @@ public class RaidsPlugin extends Plugin
raid.updateLayout(layout);
RotationSolver.solve(raid.getCombatRooms());
overlay.setScoutOverlayShown(true);
+ sendRaidLayoutMessage();
}
else if (!config.scoutOverlayAtBank())
{
@@ -316,6 +317,28 @@ public class RaidsPlugin extends Plugin
}
}
+ private void sendRaidLayoutMessage()
+ {
+ if (!config.layoutMessage())
+ {
+ return;
+ }
+
+ final String layout = getRaid().getLayout().toCodeString();
+ final String rooms = getRaid().toRoomString();
+ final String raidData = "[" + layout + "]: " + rooms;
+
+ chatMessageManager.queue(QueuedMessage.builder()
+ .type(ChatMessageType.CLANCHAT_INFO)
+ .runeLiteFormattedMessage(new ChatMessageBuilder()
+ .append(ChatColorType.HIGHLIGHT)
+ .append("Layout: ")
+ .append(ChatColorType.NORMAL)
+ .append(raidData)
+ .build())
+ .build());
+ }
+
private void updateInfoBoxState()
{
if (timer == null)
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/solver/Layout.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/solver/Layout.java
index d913f8080c..3bee58d4fc 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/solver/Layout.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/solver/Layout.java
@@ -62,4 +62,9 @@ public class Layout
return builder.toString();
}
+
+ public String toCodeString()
+ {
+ return toCode().replaceAll("#", "").replaceAll("¤", "");
+ }
}
diff --git a/runelite-client/src/main/java/net/runelite/client/util/Text.java b/runelite-client/src/main/java/net/runelite/client/util/Text.java
index 14a39f7009..890b24fd32 100644
--- a/runelite-client/src/main/java/net/runelite/client/util/Text.java
+++ b/runelite-client/src/main/java/net/runelite/client/util/Text.java
@@ -146,4 +146,17 @@ public class Text
return out.toString();
}
+
+ /**
+ * Cleans the ironman status icon from playername string if present and
+ * corrects spaces.
+ *
+ * @param name Playername to lookup.
+ * @return Cleaned playername.
+ */
+ public static String sanitize(String name)
+ {
+ String cleaned = name.contains("
') + 1) : name;
+ return cleaned.replace('\u00A0', ' ');
+ }
}