mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 00:48:56 +01:00
Core/Commands: Fix some commands still using phasemask
This commit is contained in:
4
sql/updates/world/4.3.4/2017_11_08_02_world.sql
Normal file
4
sql/updates/world/4.3.4/2017_11_08_02_world.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
UPDATE `trinity_string` SET `content_default`='│ Phases: %s' WHERE `entry`=846;
|
||||
DELETE FROM `trinity_string` WHERE `entry`=5083;
|
||||
INSERT INTO `trinity_string` (`entry`,`content_default`) VALUES
|
||||
(5083,"Uses invalid phaseID.");
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <map>
|
||||
@@ -325,6 +326,22 @@ TC_COMMON_API void HexStrToByteArray(std::string const& str, uint8* out, bool re
|
||||
TC_COMMON_API bool StringToBool(std::string const& str);
|
||||
TC_COMMON_API float DegToRad(float degrees);
|
||||
|
||||
template<class Container>
|
||||
std::string StringJoin(Container const& c, std::string delimiter)
|
||||
{
|
||||
if (c.empty())
|
||||
return "";
|
||||
|
||||
std::ostringstream os;
|
||||
auto itr = c.begin();
|
||||
os << *itr++;
|
||||
|
||||
for (; itr != c.end(); ++itr)
|
||||
os << delimiter << *itr;
|
||||
|
||||
return os.str();
|
||||
}
|
||||
|
||||
// simple class for not-modifyable list
|
||||
template <typename T>
|
||||
class HookList final
|
||||
|
||||
@@ -830,7 +830,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,
|
||||
@@ -1146,7 +1146,7 @@ enum TrinityStrings
|
||||
LANG_COMMAND_MUTEHISTORY = 5059,
|
||||
LANG_COMMAND_MUTEHISTORY_EMPTY = 5060,
|
||||
LANG_COMMAND_MUTEHISTORY_OUTPUT = 5061,
|
||||
|
||||
LANG_PHASE_NOTFOUND = 5083,
|
||||
// Room for more Trinity strings 5062-9999
|
||||
|
||||
// Level requirement notifications
|
||||
|
||||
@@ -262,15 +262,11 @@ public:
|
||||
|
||||
char const* unknown = handler->GetTrinityString(LANG_UNKNOWN);
|
||||
|
||||
std::ostringstream phases;
|
||||
for (uint32 phaseId : object->GetPhases())
|
||||
phases << phaseId << ", ";
|
||||
|
||||
handler->PSendSysMessage(LANG_MAP_POSITION,
|
||||
mapId, (mapEntry ? mapEntry->name : unknown),
|
||||
zoneId, (zoneEntry ? zoneEntry->area_name : unknown),
|
||||
areaId, (areaEntry ? areaEntry->area_name : unknown),
|
||||
object->GetPhaseMask(), phases.str().c_str(),
|
||||
object->GetPhaseMask(), StringJoin(object->GetPhases(), ", ").c_str(),
|
||||
object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), object->GetOrientation());
|
||||
if (Transport* transport = object->GetTransport())
|
||||
handler->PSendSysMessage(LANG_TRANSPORT_POSITION,
|
||||
@@ -1559,7 +1555,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)
|
||||
@@ -1615,7 +1611,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);
|
||||
|
||||
@@ -1647,7 +1643,7 @@ public:
|
||||
areaId = target->GetAreaId();
|
||||
alive = target->IsAlive() ? handler->GetTrinityString(LANG_YES) : handler->GetTrinityString(LANG_NO);
|
||||
gender = target->getGender();
|
||||
phase = target->GetPhaseMask();
|
||||
phases = target->GetPhases();
|
||||
}
|
||||
// get additional information from DB
|
||||
else
|
||||
@@ -1834,10 +1830,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 (target && !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;
|
||||
|
||||
@@ -1044,13 +1044,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();
|
||||
|
||||
@@ -1097,7 +1097,13 @@ public:
|
||||
if (!*args)
|
||||
return false;
|
||||
|
||||
uint32 phase = atoul(args);
|
||||
uint32 phaseID = uint32(atoi((char*)args));
|
||||
if (!sPhaseStore.LookupEntry(phaseID))
|
||||
{
|
||||
handler->SendSysMessage(LANG_PHASE_NOTFOUND);
|
||||
handler->SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
Creature* creature = handler->getSelectedCreature();
|
||||
if (!creature || creature->IsPet())
|
||||
@@ -1108,8 +1114,8 @@ public:
|
||||
}
|
||||
|
||||
creature->ClearPhases();
|
||||
creature->SetInPhase(phase, true, true);
|
||||
creature->SetDBPhase(phase);
|
||||
creature->SetInPhase(phaseID, true, true);
|
||||
creature->SetDBPhase(phaseID);
|
||||
|
||||
creature->SaveToDB();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user