mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-22 23:30:14 +00:00
feat: add /mark slash command for setting raid target icons
Adds /mark [icon], /marktarget, and /raidtarget slash commands that set a raid mark on the current target. Accepts icon names (star, circle, diamond, triangle, moon, square, cross, skull), numbers 1-8, or "clear"/"none" to remove the mark. Defaults to skull when no argument is given.
This commit is contained in:
parent
e7fe35c1f9
commit
a802e05091
1 changed files with 51 additions and 0 deletions
|
|
@ -6519,6 +6519,57 @@ void GameScreen::sendChatMessage(game::GameHandler& gameHandler) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// /mark [icon] — set or clear a raid target mark on the current target.
|
||||||
|
// Icon names (case-insensitive): star, circle, diamond, triangle, moon, square, cross, skull
|
||||||
|
// /mark clear | /mark 0 — remove all marks (sets icon 0xFF = clear)
|
||||||
|
// /mark — no arg marks with skull (icon 7)
|
||||||
|
if (cmdLower == "mark" || cmdLower == "marktarget" || cmdLower == "raidtarget") {
|
||||||
|
if (!gameHandler.hasTarget()) {
|
||||||
|
game::MessageChatData noTgt;
|
||||||
|
noTgt.type = game::ChatType::SYSTEM;
|
||||||
|
noTgt.language = game::ChatLanguage::UNIVERSAL;
|
||||||
|
noTgt.message = "No target selected.";
|
||||||
|
gameHandler.addLocalChatMessage(noTgt);
|
||||||
|
chatInputBuffer[0] = '\0';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
static const char* kMarkWords[] = {
|
||||||
|
"star", "circle", "diamond", "triangle", "moon", "square", "cross", "skull"
|
||||||
|
};
|
||||||
|
uint8_t icon = 7; // default: skull
|
||||||
|
if (spacePos != std::string::npos) {
|
||||||
|
std::string arg = command.substr(spacePos + 1);
|
||||||
|
while (!arg.empty() && arg.front() == ' ') arg.erase(arg.begin());
|
||||||
|
std::string argLow = arg;
|
||||||
|
for (auto& c : argLow) c = static_cast<char>(std::tolower(c));
|
||||||
|
if (argLow == "clear" || argLow == "0" || argLow == "none") {
|
||||||
|
gameHandler.setRaidMark(gameHandler.getTargetGuid(), 0xFF);
|
||||||
|
chatInputBuffer[0] = '\0';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
bool found = false;
|
||||||
|
for (int mi = 0; mi < 8; ++mi) {
|
||||||
|
if (argLow == kMarkWords[mi]) { icon = static_cast<uint8_t>(mi); found = true; break; }
|
||||||
|
}
|
||||||
|
if (!found && !argLow.empty() && argLow[0] >= '1' && argLow[0] <= '8') {
|
||||||
|
icon = static_cast<uint8_t>(argLow[0] - '1');
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
game::MessageChatData badArg;
|
||||||
|
badArg.type = game::ChatType::SYSTEM;
|
||||||
|
badArg.language = game::ChatLanguage::UNIVERSAL;
|
||||||
|
badArg.message = "Unknown mark. Use: star circle diamond triangle moon square cross skull";
|
||||||
|
gameHandler.addLocalChatMessage(badArg);
|
||||||
|
chatInputBuffer[0] = '\0';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gameHandler.setRaidMark(gameHandler.getTargetGuid(), icon);
|
||||||
|
chatInputBuffer[0] = '\0';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Combat and Trade commands
|
// Combat and Trade commands
|
||||||
if (cmdLower == "duel") {
|
if (cmdLower == "duel") {
|
||||||
if (gameHandler.hasTarget()) {
|
if (gameHandler.hasTarget()) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue