aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVincent-Michael <vincent_michael@gmx.de>2016-05-08 00:01:28 +0200
committerVincent-Michael <vincent_michael@gmx.de>2016-05-08 00:02:15 +0200
commit0940f3e0776b58bd7abad472347da7d0dea2ac50 (patch)
treec945bedf161a05c572d5792b11a2316ef8631f98 /src
parente226c315cfaad865e9d196fba105e2c8d65010e0 (diff)
Core/Commands: Allowed .server idlerestart / idleshutdown / restart / shutdown to take another parameter structure:
e.g.: * .server idlerestart 12d3h13m13s * .server idleshutdown 46m13s * .server restart 45h56m * .server shutdown 323m42s
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Commands/cs_server.cpp45
1 files changed, 38 insertions, 7 deletions
diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp
index 0d0264c022e..60f63650e54 100644
--- a/src/server/scripts/Commands/cs_server.cpp
+++ b/src/server/scripts/Commands/cs_server.cpp
@@ -29,6 +29,7 @@ EndScriptData */
#include "Player.h"
#include "ScriptMgr.h"
#include "GitRevision.h"
+#include <regex>
class server_commandscript : public CommandScript
{
@@ -316,10 +317,46 @@ private:
return false;
// #delay [#exit_code] [reason]
+ int32 delay = 0;
char* delayStr = strtok((char*)args, " ");
- if (!delayStr || !isNumeric(delayStr))
+ if (!delayStr)
return false;
+ if (isNumeric(delayStr))
+ {
+ delay = atoi(delayStr);
+ // Prevent interpret wrong arg value as 0 secs shutdown time
+ if ((delay == 0 && (delayStr[0] != '0' || delayStr[1] != '\0')) || delay < 0)
+ return false;
+ }
+ else
+ {
+ std::string timeStr(args);
+ static std::regex const regex("[0-9]+[A-Za-z]");
+ auto itr = std::sregex_iterator(timeStr.begin(), timeStr.end(), regex);
+ auto timesEnd = std::sregex_iterator();
+
+ for (; itr != timesEnd; ++itr)
+ {
+ std::string timeString = itr->str();
+
+ int32 amount = atoi(timeString.c_str());
+ if (std::count(timeString.begin(), timeString.end(), 'd') == 1)
+ delay += amount * DAY;
+ else if (std::count(timeString.begin(), timeString.end(), 'h') == 1)
+ delay += amount * HOUR;
+ else if (std::count(timeString.begin(), timeString.end(), 'm') == 1)
+ delay += amount * MINUTE;
+ else if (std::count(timeString.begin(), timeString.end(), 's') == 1)
+ delay += amount * 1;
+ else
+ return false;
+ }
+
+ if (delay == 0 || delay < 0)
+ return false;
+ }
+
char* exitCodeStr = nullptr;
char reason[256] = { 0 };
@@ -340,12 +377,6 @@ private:
}
}
- int32 delay = atoi(delayStr);
-
- // Prevent interpret wrong arg value as 0 secs shutdown time
- if ((delay == 0 && (delayStr[0] != '0' || delayStr[1] != '\0')) || delay < 0)
- return false;
-
int32 exitCode = defaultExitCode;
if (exitCodeStr)
if (!ParseExitCode(exitCodeStr, exitCode))