diff options
author | joschiwald <joschiwald.trinity@gmail.com> | 2017-02-17 21:54:49 +0100 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-02-17 21:54:49 +0100 |
commit | 80c36f3d9ca0da7feaed9e33b38294b7a6768542 (patch) | |
tree | e0c007bc9511a84ec1bdd5941e6a5e9063e8bca1 /src | |
parent | 06c1db0a0ef2ad5eaeac58f036b7c7f4ecad5228 (diff) |
Scripts/Command: Fixed phases output in .pinfo command
Closes #19144
Diffstat (limited to 'src')
-rw-r--r-- | src/common/Utilities/Util.h | 16 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/Language.h | 2 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 14 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_modify.cpp | 11 |
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(); |