aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjoschiwald <joschiwald.trinity@gmail.com>2017-02-17 21:54:49 +0100
committerjoschiwald <joschiwald.trinity@gmail.com>2017-02-17 21:54:49 +0100
commit80c36f3d9ca0da7feaed9e33b38294b7a6768542 (patch)
treee0c007bc9511a84ec1bdd5941e6a5e9063e8bca1 /src
parent06c1db0a0ef2ad5eaeac58f036b7c7f4ecad5228 (diff)
Scripts/Command: Fixed phases output in .pinfo command
Closes #19144
Diffstat (limited to 'src')
-rw-r--r--src/common/Utilities/Util.h16
-rw-r--r--src/server/game/Miscellaneous/Language.h2
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp14
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp11
4 files changed, 33 insertions, 10 deletions
diff --git a/src/common/Utilities/Util.h b/src/common/Utilities/Util.h
index d42d0314d76..ff01ba5f848 100644
--- a/src/common/Utilities/Util.h
+++ b/src/common/Utilities/Util.h
@@ -325,6 +325,22 @@ TC_COMMON_API void HexStrToByteArray(std::string const& str, uint8* out, bool re
TC_COMMON_API bool StringToBool(std::string const& str);
+template<class Container>
+TC_COMMON_API std::string StringJoin(Container const& c, std::string delinimiter)
+{
+ if (c.empty())
+ return "";
+
+ std::ostringstream os;
+ auto itr = c.begin();
+ os << *itr++;
+
+ for (; itr != c.end(); ++itr)
+ os << delinimiter << *itr;
+
+ return os.str();
+}
+
// simple class for not-modifyable list
template <typename T>
class HookList final
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index 1317373b2f9..a9a6832e8db 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -826,7 +826,7 @@ enum TrinityStrings
LANG_PINFO_CHR_LEVEL_LOW = 843,
LANG_PINFO_CHR_RACE = 844,
LANG_PINFO_CHR_ALIVE = 845,
- LANG_PINFO_CHR_PHASE = 846,
+ LANG_PINFO_CHR_PHASES = 846,
LANG_PINFO_CHR_MONEY = 847,
LANG_PINFO_CHR_MAP = 848,
LANG_PINFO_CHR_GUILD = 849,
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 225f46582d7..cd21c5335bb 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -1567,7 +1567,7 @@ public:
* * Level: %u (%u/%u XP (%u XP left) - X. LANG_PINFO_CHR_LEVEL
* * Race: %s %s, Class %s - XI. LANG_PINFO_CHR_RACE
* * Alive ?: %s - XII. LANG_PINFO_CHR_ALIVE
- * * Phase: %s - XIII. LANG_PINFO_CHR_PHASE (if not GM)
+ * * Phases: %s - XIII. LANG_PINFO_CHR_PHASE (if not GM)
* * Money: %ug%us%uc - XIV. LANG_PINFO_CHR_MONEY
* * Map: %s, Area: %s - XV. LANG_PINFO_CHR_MAP
* * Guild: %s (Id: %u) - XVI. LANG_PINFO_CHR_GUILD (if in guild)
@@ -1623,7 +1623,7 @@ public:
// Position data print
uint32 mapId;
uint32 areaId;
- uint32 phase = 0;
+ std::set<uint32> phases;
std::string areaName = handler->GetTrinityString(LANG_UNKNOWN);
std::string zoneName = handler->GetTrinityString(LANG_UNKNOWN);
@@ -1655,7 +1655,7 @@ public:
areaId = target->GetAreaId();
alive = target->IsAlive() ? handler->GetTrinityString(LANG_YES) : handler->GetTrinityString(LANG_NO);
gender = target->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER);
- phase = target->GetPhaseMask();
+ phases = target->GetPhases();
}
// get additional information from DB
else
@@ -1840,10 +1840,10 @@ public:
// Output XII. LANG_PINFO_CHR_ALIVE
handler->PSendSysMessage(LANG_PINFO_CHR_ALIVE, alive.c_str());
- // Output XIII. LANG_PINFO_CHR_PHASE if player is not in GM mode (GM is in every phase)
- if (target && !target->IsGameMaster()) // IsInWorld() returns false on loadingscreen, so it's more
- handler->PSendSysMessage(LANG_PINFO_CHR_PHASE, phase); // precise than just target (safer ?).
- // However, as we usually just require a target here, we use target instead.
+ // Output XIII. LANG_PINFO_CHR_PHASES if player is not in GM mode (GM is in every phase)
+ if (target && !target->IsGameMaster() && !phases.empty())
+ handler->PSendSysMessage(LANG_PINFO_CHR_PHASES, StringJoin(phases, "|").c_str());
+
// Output XIV. LANG_PINFO_CHR_MONEY
uint32 gold = money / GOLD;
uint32 silv = (money % GOLD) / SILVER;
diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp
index 95c483d545e..4071a8f4ed2 100644
--- a/src/server/scripts/Commands/cs_modify.cpp
+++ b/src/server/scripts/Commands/cs_modify.cpp
@@ -1047,13 +1047,20 @@ public:
if (!*args)
return false;
- uint32 phase = (uint32)atoi((char*)args);
+ uint32 phaseId = uint32(atoul(args));
+
+ if (!sPhaseStore.LookupEntry(phaseId))
+ {
+ handler->SendSysMessage(LANG_PHASE_NOTFOUND);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
Unit* target = handler->getSelectedUnit();
if (!target)
target = handler->GetSession()->GetPlayer();
- target->SetInPhase(phase, true, !target->IsInPhase(phase));
+ target->SetInPhase(phaseId, true, !target->IsInPhase(phaseId));
if (target->GetTypeId() == TYPEID_PLAYER)
target->ToPlayer()->SendUpdatePhasing();