mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-22 23:30:14 +00:00
feat: add macro conditional support to /cleartarget and /startattack
/cleartarget [dead] now clears target only when it meets conditions; /startattack [harm,nodead] respects conditionals including target=mouseover.
This commit is contained in:
parent
6cd3c613ef
commit
11c07f19cb
1 changed files with 35 additions and 9 deletions
|
|
@ -6353,14 +6353,29 @@ void GameScreen::sendChatMessage(game::GameHandler& gameHandler) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cmdLower == "startattack") {
|
if (cmdLower == "startattack") {
|
||||||
if (gameHandler.hasTarget()) {
|
// Support macro conditionals: /startattack [harm,nodead]
|
||||||
gameHandler.startAutoAttack(gameHandler.getTargetGuid());
|
bool condPass = true;
|
||||||
} else {
|
uint64_t saOverride = static_cast<uint64_t>(-1);
|
||||||
game::MessageChatData msg;
|
if (spacePos != std::string::npos) {
|
||||||
msg.type = game::ChatType::SYSTEM;
|
std::string saArg = command.substr(spacePos + 1);
|
||||||
msg.language = game::ChatLanguage::UNIVERSAL;
|
while (!saArg.empty() && saArg.front() == ' ') saArg.erase(saArg.begin());
|
||||||
msg.message = "You have no target.";
|
if (!saArg.empty() && saArg.front() == '[') {
|
||||||
gameHandler.addLocalChatMessage(msg);
|
std::string result = evaluateMacroConditionals(saArg, gameHandler, saOverride);
|
||||||
|
condPass = !(result.empty() && saOverride == static_cast<uint64_t>(-1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (condPass) {
|
||||||
|
uint64_t atkTarget = (saOverride != static_cast<uint64_t>(-1) && saOverride != 0)
|
||||||
|
? saOverride : (gameHandler.hasTarget() ? gameHandler.getTargetGuid() : 0);
|
||||||
|
if (atkTarget != 0) {
|
||||||
|
gameHandler.startAutoAttack(atkTarget);
|
||||||
|
} else {
|
||||||
|
game::MessageChatData msg;
|
||||||
|
msg.type = game::ChatType::SYSTEM;
|
||||||
|
msg.language = game::ChatLanguage::UNIVERSAL;
|
||||||
|
msg.message = "You have no target.";
|
||||||
|
gameHandler.addLocalChatMessage(msg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
chatInputBuffer[0] = '\0';
|
chatInputBuffer[0] = '\0';
|
||||||
return;
|
return;
|
||||||
|
|
@ -6643,7 +6658,18 @@ void GameScreen::sendChatMessage(game::GameHandler& gameHandler) {
|
||||||
|
|
||||||
// Targeting commands
|
// Targeting commands
|
||||||
if (cmdLower == "cleartarget") {
|
if (cmdLower == "cleartarget") {
|
||||||
gameHandler.clearTarget();
|
// Support macro conditionals: /cleartarget [dead] clears only if target is dead
|
||||||
|
bool ctCondPass = true;
|
||||||
|
if (spacePos != std::string::npos) {
|
||||||
|
std::string ctArg = command.substr(spacePos + 1);
|
||||||
|
while (!ctArg.empty() && ctArg.front() == ' ') ctArg.erase(ctArg.begin());
|
||||||
|
if (!ctArg.empty() && ctArg.front() == '[') {
|
||||||
|
uint64_t ctOver = static_cast<uint64_t>(-1);
|
||||||
|
std::string res = evaluateMacroConditionals(ctArg, gameHandler, ctOver);
|
||||||
|
ctCondPass = !(res.empty() && ctOver == static_cast<uint64_t>(-1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ctCondPass) gameHandler.clearTarget();
|
||||||
chatInputBuffer[0] = '\0';
|
chatInputBuffer[0] = '\0';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue