aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Chat.cpp27
-rw-r--r--src/game/Chat.h10
-rw-r--r--src/game/Group.cpp84
-rw-r--r--src/game/Group.h62
-rw-r--r--src/game/GroupHandler.cpp3
-rw-r--r--src/game/Language.h18
-rw-r--r--src/game/Level1.cpp108
-rw-r--r--src/game/Level2.cpp78
-rw-r--r--src/game/Level3.cpp40
-rw-r--r--src/game/MapManager.cpp4
10 files changed, 320 insertions, 114 deletions
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index 4ce6babce60..48d3890dd4f 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -386,6 +386,8 @@ ChatCommand * ChatHandler::getCommandTable()
{ "changeentry", SEC_ADMINISTRATOR, false, &ChatHandler::HandleChangeEntryCommand, "", NULL },
{ "info", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNpcInfoCommand, "", NULL },
{ "playemote", SEC_ADMINISTRATOR, false, &ChatHandler::HandlePlayEmoteCommand, "", NULL },
+ { "follow", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcFollowCommand, "", NULL },
+ { "unfollow", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcUnFollowCommand, "", NULL },
//{ TODO: fix or remove this commands
{ "name", SEC_GAMEMASTER, false, &ChatHandler::HandleNameCommand, "", NULL },
@@ -510,6 +512,7 @@ ChatCommand * ChatHandler::getCommandTable()
{ "neargrave", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNearGraveCommand, "", NULL },
{ "explorecheat", SEC_ADMINISTRATOR, false, &ChatHandler::HandleExploreCheatCommand, "", NULL },
{ "hover", SEC_ADMINISTRATOR, false, &ChatHandler::HandleHoverCommand, "", NULL },
+ { "waterwalk", SEC_ADMINISTRATOR, false, &ChatHandler::HandleWaterwalkCommand, "", NULL },
{ "levelup", SEC_ADMINISTRATOR, false, &ChatHandler::HandleLevelUpCommand, "", NULL },
{ "showarea", SEC_ADMINISTRATOR, false, &ChatHandler::HandleShowAreaCommand, "", NULL },
{ "hidearea", SEC_ADMINISTRATOR, false, &ChatHandler::HandleHideAreaCommand, "", NULL },
@@ -535,8 +538,9 @@ ChatCommand * ChatHandler::getCommandTable()
{ "cometome", SEC_ADMINISTRATOR, false, &ChatHandler::HandleComeToMeCommand, "", NULL },
{ "damage", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDamageCommand, "", NULL },
{ "combatstop", SEC_GAMEMASTER, false, &ChatHandler::HandleCombatStopCommand, "", NULL },
- { "chardelete", SEC_CONSOLE, true, &ChatHandler::HandleCombatStopCommand, "", NULL },
+ { "chardelete", SEC_CONSOLE, true, &ChatHandler::HandleCharDeleteCommand, "", NULL },
{ "sendmessage", SEC_ADMINISTRATOR, true, &ChatHandler::HandleSendMessageCommand, "", NULL },
+ { "repairitems", SEC_GAMEMASTER, false, &ChatHandler::HandleRepairitemsCommand, "", NULL },
{ "freeze", SEC_ADMINISTRATOR, false, &ChatHandler::HandleFreezeCommand, "", NULL },
{ "unfreeze", SEC_ADMINISTRATOR, false, &ChatHandler::HandleUnFreezeCommand, "", NULL },
{ "listfreeze", SEC_ADMINISTRATOR, false, &ChatHandler::HandleListFreezeCommand, "", NULL },
@@ -1207,6 +1211,17 @@ GameTele const* ChatHandler::extractGameTeleFromLink(char* text)
return objmgr.GetGameTele(cId);
}
+const char *ChatHandler::GetName() const
+{
+ return m_session->GetPlayer()->GetName();
+}
+
+bool ChatHandler::needReportToTarget(Player* chr) const
+{
+ Player* pl = m_session->GetPlayer();
+ return pl != chr && pl->IsVisibleGloballyFor(chr);
+}
+
const char *CliHandler::GetTrinityString(int32 entry) const
{
return objmgr.GetTrinityStringForDBCLocale(entry);
@@ -1224,6 +1239,16 @@ void CliHandler::SendSysMessage(const char *str)
m_print("\r\n");
}
+const char *CliHandler::GetName() const
+{
+ return GetTrinityString(LANG_CONSOLE_COMMAND);
+}
+
+bool CliHandler::needReportToTarget(Player* /*chr*/) const
+{
+ return true;
+}
+
bool ChatHandler::GetPlayerGroupAndGUIDByName(const char* cname, Player* &plr, Group* &group, uint64 &guid, bool offline)
{
plr = NULL;
diff --git a/src/game/Chat.h b/src/game/Chat.h
index 72f0a2ec79e..cf254238d0a 100644
--- a/src/game/Chat.h
+++ b/src/game/Chat.h
@@ -71,12 +71,14 @@ class ChatHandler
int ParseCommands(const char* text);
+ virtual char const* GetName() const;
protected:
explicit ChatHandler() : m_session(NULL) {} // for CLI subclass
bool hasStringAbbr(const char* name, const char* part);
virtual bool isAvailable(ChatCommand const& cmd) const;
+ virtual bool needReportToTarget(Player* chr) const;
void SendGlobalSysMessage(const char *str);
@@ -150,6 +152,9 @@ class ChatHandler
bool HandleModifyHonorCommand (const char* args);
bool HandleModifyRepCommand(const char* args);
bool HandleModifyArenaCommand(const char* args);
+
+ bool HandleNpcFollowCommand(const char* args);
+ bool HandleNpcUnFollowCommand(const char* args);
bool HandleReloadCommand(const char* args);
bool HandleReloadAllCommand(const char* args);
@@ -349,6 +354,7 @@ class ChatHandler
bool HandleTextEmoteCommand(const char* args);
bool HandleNpcInfoCommand(const char* args);
bool HandleHoverCommand(const char* args);
+ bool HandleWaterwalkCommand(const char* args);
bool HandleLevelUpCommand(const char* args);
bool HandleShowAreaCommand(const char* args);
bool HandleHideAreaCommand(const char* args);
@@ -416,7 +422,9 @@ class ChatHandler
bool HandleCastTargetCommand(const char *args);
bool HandleComeToMeCommand(const char *args);
bool HandleCombatStopCommand(const char *args);
+ bool HandleCharDeleteCommand(const char *args);
bool HandleSendMessageCommand(const char * args);
+ bool HandleRepairitemsCommand(const char* args);
bool HandleFlushArenaPointsCommand(const char *args);
//! Development Commands
@@ -473,6 +481,8 @@ class CliHandler : public ChatHandler
const char *GetTrinityString(int32 entry) const;
bool isAvailable(ChatCommand const& cmd) const;
void SendSysMessage(const char *str);
+ char const* GetName() const;
+ bool needReportToTarget(Player* chr) const;
private:
Print* m_print;
diff --git a/src/game/Group.cpp b/src/game/Group.cpp
index bf448df36f5..92c5b00e514 100644
--- a/src/game/Group.cpp
+++ b/src/game/Group.cpp
@@ -44,6 +44,7 @@ Group::Group()
m_lootMethod = (LootMethod)0;
m_looterGuid = 0;
m_lootThreshold = ITEM_QUALITY_UNCOMMON;
+ m_subGroupsCounts = NULL;
for(int i=0; i<TARGETICONCOUNT; i++)
m_targetIcons[i] = 0;
@@ -73,6 +74,8 @@ Group::~Group()
for(uint8 i = 0; i < TOTAL_DIFFICULTIES; i++)
for(BoundInstancesMap::iterator itr = m_boundInstances[i].begin(); itr != m_boundInstances[i].end(); ++itr)
itr->second.save->RemoveGroup(this);
+ if (m_subGroupsCounts)
+ delete[] m_subGroupsCounts;
}
bool Group::Create(const uint64 &guid, const char * name)
@@ -81,6 +84,10 @@ bool Group::Create(const uint64 &guid, const char * name)
m_leaderName = name;
m_groupType = isBGGroup() ? GROUPTYPE_RAID : GROUPTYPE_NORMAL;
+
+ if (m_groupType == GROUPTYPE_RAID)
+ _initRaidSubGroupsCounter();
+
m_lootMethod = GROUP_LOOT;
m_lootThreshold = ITEM_QUALITY_UNCOMMON;
m_looterGuid = guid;
@@ -136,6 +143,10 @@ bool Group::LoadGroupFromDB(const uint64 &leaderGuid, QueryResult *result, bool
}
m_groupType = (*result)[13].GetBool() ? GROUPTYPE_RAID : GROUPTYPE_NORMAL;
+
+ if (m_groupType == GROUPTYPE_RAID)
+ _initRaidSubGroupsCounter();
+
m_difficulty = (*result)[14].GetUInt8();
m_mainTank = (*result)[0].GetUInt64();
m_mainAssistant = (*result)[1].GetUInt64();
@@ -178,9 +189,22 @@ bool Group::LoadMemberFromDB(uint32 guidLow, uint8 subgroup, bool assistant)
member.group = subgroup;
member.assistant = assistant;
m_memberSlots.push_back(member);
+
+ SubGroupCounterIncrease(subgroup);
+
return true;
}
+void Group::ConvertToRaid()
+{
+ m_groupType = GROUPTYPE_RAID;
+
+ _initRaidSubGroupsCounter();
+
+ if(!isBGGroup()) CharacterDatabase.PExecute("UPDATE groups SET isRaid = 1 WHERE leaderGuid='%u'", GUID_LOPART(m_leaderGuid));
+ SendUpdate();
+}
+
bool Group::AddInvite(Player *player)
{
if(!player || player->GetGroupInvite() || player->GetGroup())
@@ -386,7 +410,7 @@ void Group::SendLootStartRoll(uint32 CountDown, const Roll &r)
}
}
-void Group::SendLootRoll(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r)
+void Group::SendLootRoll(const uint64& SourceGuid, const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r)
{
WorldPacket data(SMSG_LOOT_ROLL, (8+4+8+4+4+4+1+1));
data << uint64(SourceGuid); // guid of the item rolled
@@ -410,7 +434,7 @@ void Group::SendLootRoll(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber,
}
}
-void Group::SendLootRollWon(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r)
+void Group::SendLootRollWon(const uint64& SourceGuid, const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r)
{
WorldPacket data(SMSG_LOOT_ROLL_WON, (8+4+4+4+4+8+1+1));
data << uint64(SourceGuid); // guid of the item rolled
@@ -453,7 +477,7 @@ void Group::SendLootAllPassed(uint32 NumberOfPlayers, const Roll &r)
}
}
-void Group::GroupLoot(uint64 playerGUID, Loot *loot, Creature *creature)
+void Group::GroupLoot(const uint64& playerGUID, Loot *loot, Creature *creature)
{
std::vector<LootItem>::iterator i;
ItemPrototype const *item;
@@ -509,7 +533,7 @@ void Group::GroupLoot(uint64 playerGUID, Loot *loot, Creature *creature)
}
}
-void Group::NeedBeforeGreed(uint64 playerGUID, Loot *loot, Creature *creature)
+void Group::NeedBeforeGreed(const uint64& playerGUID, Loot *loot, Creature *creature)
{
ItemPrototype const *item;
Player *player = objmgr.GetPlayer(playerGUID);
@@ -563,7 +587,7 @@ void Group::NeedBeforeGreed(uint64 playerGUID, Loot *loot, Creature *creature)
}
}
-void Group::MasterLoot(uint64 playerGUID, Loot* /*loot*/, Creature *creature)
+void Group::MasterLoot(const uint64& playerGUID, Loot* /*loot*/, Creature *creature)
{
Player *player = objmgr.GetPlayer(playerGUID);
if(!player)
@@ -599,7 +623,7 @@ void Group::MasterLoot(uint64 playerGUID, Loot* /*loot*/, Creature *creature)
}
}
-void Group::CountRollVote(uint64 playerGUID, uint64 Guid, uint32 NumberOfPlayers, uint8 Choise)
+void Group::CountRollVote(const uint64& playerGUID, const uint64& Guid, uint32 NumberOfPlayers, uint8 Choise)
{
Rolls::iterator rollI = GetRoll(Guid);
if (rollI == RollId.end())
@@ -935,13 +959,20 @@ bool Group::_addMember(const uint64 &guid, const char* name, bool isAssistant)
{
// get first not-full group
uint8 groupid = 0;
- std::vector<uint8> temp(MAXRAIDSIZE/MAXGROUPSIZE);
- for(member_citerator itr = m_memberSlots.begin(); itr != m_memberSlots.end(); ++itr)
+ if (m_subGroupsCounts)
{
- if (itr->group >= temp.size()) continue;
- ++temp[itr->group];
- if(temp[groupid] >= MAXGROUPSIZE)
- ++groupid;
+ bool groupFound = false;
+ for (; groupid < MAXRAIDSIZE/MAXGROUPSIZE; ++groupid)
+ {
+ if (m_subGroupsCounts[groupid] < MAXGROUPSIZE)
+ {
+ groupFound = true;
+ break;
+ }
+ }
+ // We are raid group and no one slot is free
+ if (!groupFound)
+ return false;
}
return _addMember(guid, name, isAssistant, groupid);
@@ -963,6 +994,8 @@ bool Group::_addMember(const uint64 &guid, const char* name, bool isAssistant, u
member.group = group;
member.assistant = isAssistant;
m_memberSlots.push_back(member);
+
+ SubGroupCounterIncrease(group);
if(player)
{
@@ -1001,7 +1034,10 @@ bool Group::_removeMember(const uint64 &guid)
member_witerator slot = _getMemberWSlot(guid);
if (slot != m_memberSlots.end())
+ {
+ SubGroupCounterDecrease(slot->group);
m_memberSlots.erase(slot);
+ }
if(!isBGGroup())
CharacterDatabase.PExecute("DELETE FROM group_member WHERE memberGuid='%u'", GUID_LOPART(guid));
@@ -1094,13 +1130,6 @@ void Group::_removeRolls(const uint64 &guid)
}
}
-void Group::_convertToRaid()
-{
- m_groupType = GROUPTYPE_RAID;
-
- if(!isBGGroup()) CharacterDatabase.PExecute("UPDATE groups SET isRaid = 1 WHERE leaderGuid='%u'", GUID_LOPART(m_leaderGuid));
-}
-
bool Group::_setMembersGroup(const uint64 &guid, const uint8 &group)
{
member_witerator slot = _getMemberWSlot(guid);
@@ -1108,7 +1137,11 @@ bool Group::_setMembersGroup(const uint64 &guid, const uint8 &group)
return false;
slot->group = group;
+
+ SubGroupCounterIncrease(group);
+
if(!isBGGroup()) CharacterDatabase.PExecute("UPDATE group_member SET subgroup='%u' WHERE memberGuid='%u'", group, GUID_LOPART(guid));
+
return true;
}
@@ -1164,10 +1197,16 @@ void Group::ChangeMembersGroup(const uint64 &guid, const uint8 &group)
Player *player = objmgr.GetPlayer(guid);
if (!player)
{
+ uint8 prevSubGroup;
+ prevSubGroup = GetMemberGroup(guid);
+
+ SubGroupCounterDecrease(prevSubGroup);
+
if(_setMembersGroup(guid, group))
SendUpdate();
}
- else ChangeMembersGroup(player, group);
+ else
+ ChangeMembersGroup(player, group);
}
// only for online members
@@ -1177,6 +1216,11 @@ void Group::ChangeMembersGroup(Player *player, const uint8 &group)
return;
if(_setMembersGroup(player->GetGUID(), group))
{
+ uint8 prevSubGroup;
+ prevSubGroup = player->GetSubGroup();
+
+ SubGroupCounterDecrease(prevSubGroup);
+
player->GetGroupRef().setSubGroup(group);
SendUpdate();
}
diff --git a/src/game/Group.h b/src/game/Group.h
index 540232731c8..24546195682 100644
--- a/src/game/Group.h
+++ b/src/game/Group.h
@@ -183,8 +183,8 @@ class TRINITY_DLL_SPEC Group
ItemQualities GetLootThreshold() const { return m_lootThreshold; }
// member manipulation methods
- bool IsMember(uint64 guid) const { return _getMemberCSlot(guid) != m_memberSlots.end(); }
- bool IsLeader(uint64 guid) const { return (GetLeaderGUID() == guid); }
+ bool IsMember(const uint64& guid) const { return _getMemberCSlot(guid) != m_memberSlots.end(); }
+ bool IsLeader(const uint64& guid) const { return (GetLeaderGUID() == guid); }
bool IsAssistant(uint64 guid) const
{
member_citerator mslot = _getMemberCSlot(guid);
@@ -194,7 +194,7 @@ class TRINITY_DLL_SPEC Group
return mslot->assistant;
}
- bool SameSubGroup(uint64 guid1, uint64 guid2) const
+ bool SameSubGroup(uint64 guid1,const uint64& guid2) const
{
member_citerator mslot2 = _getMemberCSlot(guid2);
if(mslot2==m_memberSlots.end())
@@ -211,6 +211,11 @@ class TRINITY_DLL_SPEC Group
return (mslot1->group==slot2->group);
}
+
+ bool HasFreeSlotSubGroup(uint8 subgroup) const
+ {
+ return (m_subGroupsCounts && m_subGroupsCounts[subgroup] < MAXGROUPSIZE);
+ }
bool SameSubGroup(Player const* member1, Player const* member2) const;
@@ -228,25 +233,22 @@ class TRINITY_DLL_SPEC Group
}
// some additional raid methods
- void ConvertToRaid()
- {
- _convertToRaid();
- SendUpdate();
- }
+ void ConvertToRaid();
+
void SetBattlegroundGroup(BattleGround *bg) { m_bgGroup = bg; }
uint32 CanJoinBattleGroundQueue(uint32 bgTypeId, uint32 bgQueueType, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot);
void ChangeMembersGroup(const uint64 &guid, const uint8 &group);
void ChangeMembersGroup(Player *player, const uint8 &group);
- void SetAssistant(const uint64 &guid, const bool &state)
+ void SetAssistant(uint64 guid, const bool &state)
{
if(!isRaidGroup())
return;
if(_setAssistantFlag(guid, state))
SendUpdate();
}
- void SetMainTank(const uint64 &guid)
+ void SetMainTank(uint64 guid)
{
if(!isRaidGroup())
return;
@@ -254,7 +256,7 @@ class TRINITY_DLL_SPEC Group
if(_setMainTank(guid))
SendUpdate();
}
- void SetMainAssistant(const uint64 &guid)
+ void SetMainAssistant(uint64 guid)
{
if(!isRaidGroup())
return;
@@ -285,12 +287,12 @@ class TRINITY_DLL_SPEC Group
/*********************************************************/
void SendLootStartRoll(uint32 CountDown, const Roll &r);
- void SendLootRoll(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r);
- void SendLootRollWon(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r);
+ void SendLootRoll(const uint64& SourceGuid, const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r);
+ void SendLootRollWon(const uint64& SourceGuid, const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r);
void SendLootAllPassed(uint32 NumberOfPlayers, const Roll &r);
- void GroupLoot(uint64 playerGUID, Loot *loot, Creature *creature);
- void NeedBeforeGreed(uint64 playerGUID, Loot *loot, Creature *creature);
- void MasterLoot(uint64 playerGUID, Loot *loot, Creature *creature);
+ void GroupLoot(const uint64& playerGUID, Loot *loot, Creature *creature);
+ void NeedBeforeGreed(const uint64& playerGUID, Loot *loot, Creature *creature);
+ void MasterLoot(const uint64& playerGUID, Loot *loot, Creature *creature);
Rolls::iterator GetRoll(uint64 Guid)
{
Rolls::iterator iter;
@@ -304,7 +306,7 @@ class TRINITY_DLL_SPEC Group
return RollId.end();
}
void CountTheRoll(Rolls::iterator roll, uint32 NumberOfPlayers);
- void CountRollVote(uint64 playerGUID, uint64 Guid, uint32 NumberOfPlayers, uint8 Choise);
+ void CountRollVote(const uint64& playerGUID, const uint64& Guid, uint32 NumberOfPlayers, uint8 Choise);
void EndRoll();
void LinkMember(GroupReference *pRef) { m_memberMgr.insertFirst(pRef); }
@@ -323,13 +325,24 @@ class TRINITY_DLL_SPEC Group
void _removeRolls(const uint64 &guid);
- void _convertToRaid();
bool _setMembersGroup(const uint64 &guid, const uint8 &group);
bool _setAssistantFlag(const uint64 &guid, const bool &state);
bool _setMainTank(const uint64 &guid);
bool _setMainAssistant(const uint64 &guid);
void _homebindIfInstance(Player *player);
+
+ void _initRaidSubGroupsCounter()
+ {
+ // Sub group counters initialization
+ if (!m_subGroupsCounts)
+ m_subGroupsCounts = new uint8[MAXRAIDSIZE / MAXGROUPSIZE];
+
+ memset((void*)m_subGroupsCounts, 0, (MAXRAIDSIZE / MAXGROUPSIZE)*sizeof(uint8));
+
+ for (member_citerator itr = m_memberSlots.begin(); itr != m_memberSlots.end(); ++itr)
+ ++m_subGroupsCounts[itr->group];
+ }
member_citerator _getMemberCSlot(uint64 Guid) const
{
@@ -350,6 +363,18 @@ class TRINITY_DLL_SPEC Group
}
return m_memberSlots.end();
}
+
+ void SubGroupCounterIncrease(uint8 subgroup)
+ {
+ if (m_subGroupsCounts)
+ ++m_subGroupsCounts[subgroup];
+ }
+
+ void SubGroupCounterDecrease(uint8 subgroup)
+ {
+ if (m_subGroupsCounts)
+ --m_subGroupsCounts[subgroup];
+ }
MemberSlotList m_memberSlots;
GroupRefManager m_memberMgr;
@@ -367,5 +392,6 @@ class TRINITY_DLL_SPEC Group
uint64 m_looterGuid;
Rolls RollId;
BoundInstancesMap m_boundInstances[TOTAL_DIFFICULTIES];
+ uint8* m_subGroupsCounts;
};
#endif
diff --git a/src/game/GroupHandler.cpp b/src/game/GroupHandler.cpp
index 90281c15ed7..5f384aa1d8d 100644
--- a/src/game/GroupHandler.cpp
+++ b/src/game/GroupHandler.cpp
@@ -551,6 +551,9 @@ void WorldSession::HandleGroupChangeSubGroupOpcode( WorldPacket & recv_data )
/** error handling **/
if(!group->IsLeader(GetPlayer()->GetGUID()) && !group->IsAssistant(GetPlayer()->GetGUID()))
return;
+
+ if (!group->HasFreeSlotSubGroup(groupNr))
+ return;
/********************/
// everything's fine, do it
diff --git a/src/game/Language.h b/src/game/Language.h
index b4b4ae5e12f..5ef5b9c02f1 100644
--- a/src/game/Language.h
+++ b/src/game/Language.h
@@ -167,7 +167,8 @@ enum TrinityStrings
LANG_MAIL_SENT = 169,
LANG_SOUND_NOT_EXIST = 170,
LANG_TELEPORTED_TO_BY_CONSOLE = 171,
- // Room for more level 1 172-199 not used
+ LANG_CONSOLE_COMMAND = 172,
+ // Room for more level 1 173-199 not used
// level 2 chat
LANG_NO_SELECTION = 200,
@@ -316,7 +317,14 @@ enum TrinityStrings
LANG_GM_OFF = 333,
LANG_GM_CHAT_ON = 334,
LANG_GM_CHAT_OFF = 335,
- // Room for more level 2 336-399 not used
+ LANG_YOU_REPAIR_ITEMS = 336,
+ LANG_YOUR_ITEMS_REPAIRED = 337,
+ LANG_YOU_SET_WATERWALK = 338,
+ LANG_YOUR_WATERWALK_SET = 339,
+ LANG_CREATURE_FOLLOW_YOU_NOW = 340,
+ LANG_CREATURE_NOT_FOLLOW_YOU = 341,
+ LANG_CREATURE_NOT_FOLLOW_YOU_NOW = 342,
+ // Room for more level 2 343-399 not used
// level 3 chat
LANG_SCRIPTS_RELOADED = 400,
@@ -708,7 +716,7 @@ enum TrinityStrings
LANG_ITEMLIST_GUILD = 1118,
// Room for more level 3 1119-1199 not used
- // Trinity custom patches 5000-9999
+ // Trinity strings 5000-9999
LANG_COMMAND_FREEZE = 5000,
LANG_COMMAND_FREEZE_ERROR = 5001,
LANG_COMMAND_FREEZE_WRONG = 5002,
@@ -716,7 +724,9 @@ enum TrinityStrings
LANG_COMMAND_NO_FROZEN_PLAYERS = 5004,
LANG_COMMAND_LIST_FREEZE = 5005,
LANG_COMMAND_FROZEN_PLAYERS = 5006,
- // Room for more Trinity custom patches 5007-9999
+ LANG_INSTANCE_MUST_RAID_GRP = 5007,
+ LANG_INSTANCE_NOT_AS_GHOST = 5008,
+ // Room for more Trinity strings 5009-9999
// Use for not-in-svn patches 10000-10999
// opvp hp
diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp
index 0e8579b5c00..3543b3b91fa 100644
--- a/src/game/Level1.cpp
+++ b/src/game/Level1.cpp
@@ -324,7 +324,7 @@ bool ChatHandler::HandleGPSCommand(const char* args)
zone_x, zone_y, ground_z, floor_z, have_map, have_vmap );
sLog.outDebug("Player %s GPS call for %s '%s' (%s: %u):",
- m_session->GetPlayer()->GetName(),
+ GetName(),
(obj->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), obj->GetName(),
(obj->GetTypeId() == TYPEID_PLAYER ? "GUID" : "Entry"), (obj->GetTypeId() == TYPEID_PLAYER ? obj->GetGUIDLow(): obj->GetEntry()) );
sLog.outDebug(GetTrinityString(LANG_MAP_POSITION),
@@ -396,9 +396,8 @@ bool ChatHandler::HandleNamegoCommand(const char* args)
}
PSendSysMessage(LANG_SUMMONING, chr->GetName(),"");
-
- if (m_session->GetPlayer()->IsVisibleGloballyFor(chr))
- ChatHandler(chr).PSendSysMessage(LANG_SUMMONED_BY, m_session->GetPlayer()->GetName());
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_SUMMONED_BY, GetName());
// stop flight if need
if(chr->isInFlight())
@@ -697,7 +696,8 @@ bool ChatHandler::HandleModifyHPCommand(const char* args)
}
PSendSysMessage(LANG_YOU_CHANGE_HP, chr->GetName(), hp, hpm);
- ChatHandler(chr).PSendSysMessage(LANG_YOURS_HP_CHANGED, m_session->GetPlayer()->GetName(), hp, hpm);
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_HP_CHANGED, GetName(), hp, hpm);
chr->SetMaxHealth( hpm );
chr->SetHealth( hp );
@@ -740,7 +740,8 @@ bool ChatHandler::HandleModifyManaCommand(const char* args)
}
PSendSysMessage(LANG_YOU_CHANGE_MANA, chr->GetName(), mana, manam);
- ChatHandler(chr).PSendSysMessage(LANG_YOURS_MANA_CHANGED, m_session->GetPlayer()->GetName(), mana, manam);
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_MANA_CHANGED, GetName(), mana, manam);
chr->SetMaxPower(POWER_MANA,manam );
chr->SetPower(POWER_MANA, mana );
@@ -784,7 +785,8 @@ bool ChatHandler::HandleModifyEnergyCommand(const char* args)
}
PSendSysMessage(LANG_YOU_CHANGE_ENERGY, chr->GetName(), energy/10, energym/10);
- ChatHandler(chr).PSendSysMessage(LANG_YOURS_ENERGY_CHANGED, m_session->GetPlayer()->GetName(), energy/10, energym/10);
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_ENERGY_CHANGED, GetName(), energy/10, energym/10);
chr->SetMaxPower(POWER_ENERGY,energym );
chr->SetPower(POWER_ENERGY, energy );
@@ -830,7 +832,8 @@ bool ChatHandler::HandleModifyRageCommand(const char* args)
}
PSendSysMessage(LANG_YOU_CHANGE_RAGE, chr->GetName(), rage/10, ragem/10);
- ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_RAGE_CHANGED), m_session->GetPlayer()->GetName(), rage/10, ragem/10);
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_RAGE_CHANGED, GetName(), rage/10, ragem/10);
chr->SetMaxPower(POWER_RAGE,ragem );
chr->SetPower(POWER_RAGE, rage );
@@ -908,11 +911,6 @@ bool ChatHandler::HandleModifyFactionCommand(const char* args)
PSendSysMessage(LANG_YOU_CHANGE_FACTION, chr->GetGUIDLow(),factionid,flag,npcflag,dyflag);
- //sprintf((char*)buf,"%s changed your Faction to %i.", m_session->GetPlayer()->GetName(), factionid);
- //FillSystemMessageData(&data, m_session, buf);
-
- //chr->GetSession()->SendPacket(&data);
-
chr->setFaction(factionid);
chr->SetUInt32Value(UNIT_FIELD_FLAGS,flag);
chr->SetUInt32Value(UNIT_NPC_FLAGS,npcflag);
@@ -958,8 +956,8 @@ bool ChatHandler::HandleModifySpellCommand(const char* args)
}
PSendSysMessage(LANG_YOU_CHANGE_SPELLFLATID, spellflatid, val, mark, chr->GetName());
- if(chr != m_session->GetPlayer())
- ChatHandler(chr).PSendSysMessage(LANG_YOURS_SPELLFLATID_CHANGED, m_session->GetPlayer()->GetName(), spellflatid, val, mark);
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_SPELLFLATID_CHANGED, GetName(), spellflatid, val, mark);
WorldPacket data(SMSG_SET_FLAT_SPELL_MODIFIER, (1+1+2+2));
data << uint8(spellflatid);
@@ -1015,10 +1013,8 @@ bool ChatHandler::HandleTaxiCheatCommand(const char* args)
{
chr->SetTaxiCheater(true);
PSendSysMessage(LANG_YOU_GIVE_TAXIS, chr->GetName());
-
- if(chr != m_session->GetPlayer())
- // to send localized data to target
- ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_TAXIS_ADDED), m_session->GetPlayer()->GetName());
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_TAXIS_ADDED, GetName());
return true;
}
@@ -1026,9 +1022,8 @@ bool ChatHandler::HandleTaxiCheatCommand(const char* args)
{
chr->SetTaxiCheater(false);
PSendSysMessage(LANG_YOU_REMOVE_TAXIS, chr->GetName());
-
- if(chr != m_session->GetPlayer())
- ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_TAXIS_REMOVED), m_session->GetPlayer()->GetName());
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_TAXIS_REMOVED, GetName());
return true;
}
@@ -1069,9 +1064,8 @@ bool ChatHandler::HandleModifyASpeedCommand(const char* args)
}
PSendSysMessage(LANG_YOU_CHANGE_ASPEED, ASpeed, chr->GetName());
-
- if(chr != m_session->GetPlayer())
- ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_ASPEED_CHANGED), m_session->GetPlayer()->GetName(), ASpeed);
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_ASPEED_CHANGED, GetName(), ASpeed);
chr->SetSpeed(MOVE_WALK, ASpeed,true);
chr->SetSpeed(MOVE_RUN, ASpeed,true);
@@ -1112,9 +1106,8 @@ bool ChatHandler::HandleModifySpeedCommand(const char* args)
}
PSendSysMessage(LANG_YOU_CHANGE_SPEED, Speed, chr->GetName());
-
- if(chr != m_session->GetPlayer())
- ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_SPEED_CHANGED), m_session->GetPlayer()->GetName(), Speed);
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_SPEED_CHANGED, GetName(), Speed);
chr->SetSpeed(MOVE_RUN,Speed,true);
@@ -1152,9 +1145,8 @@ bool ChatHandler::HandleModifySwimCommand(const char* args)
}
PSendSysMessage(LANG_YOU_CHANGE_SWIM_SPEED, Swim, chr->GetName());
-
- if(chr != m_session->GetPlayer())
- ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_SWIM_SPEED_CHANGED), m_session->GetPlayer()->GetName(), Swim);
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_SWIM_SPEED_CHANGED, GetName(), Swim);
chr->SetSpeed(MOVE_SWIM,Swim,true);
@@ -1192,9 +1184,8 @@ bool ChatHandler::HandleModifyBWalkCommand(const char* args)
}
PSendSysMessage(LANG_YOU_CHANGE_BACK_SPEED, BSpeed, chr->GetName());
-
- if(chr != m_session->GetPlayer())
- ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_BACK_SPEED_CHANGED), m_session->GetPlayer()->GetName(), BSpeed);
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_BACK_SPEED_CHANGED, GetName(), BSpeed);
chr->SetSpeed(MOVE_WALKBACK,BSpeed,true);
@@ -1225,9 +1216,8 @@ bool ChatHandler::HandleModifyFlyCommand(const char* args)
}
PSendSysMessage(LANG_YOU_CHANGE_FLY_SPEED, FSpeed, chr->GetName());
-
- if(chr != m_session->GetPlayer())
- ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_FLY_SPEED_CHANGED), m_session->GetPlayer()->GetName(), FSpeed);
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_FLY_SPEED_CHANGED, GetName(), FSpeed);
chr->SetSpeed(MOVE_FLY,FSpeed,true);
@@ -1257,9 +1247,8 @@ bool ChatHandler::HandleModifyScaleCommand(const char* args)
}
PSendSysMessage(LANG_YOU_CHANGE_SIZE, Scale, chr->GetName());
-
- if(chr != m_session->GetPlayer())
- ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_SIZE_CHANGED), m_session->GetPlayer()->GetName(), Scale);
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_SIZE_CHANGED, GetName(), Scale);
chr->SetFloatValue(OBJECT_FIELD_SCALE_X, Scale);
@@ -1501,9 +1490,8 @@ bool ChatHandler::HandleModifyMountCommand(const char* args)
}
PSendSysMessage(LANG_YOU_GIVE_MOUNT, chr->GetName());
-
- if(chr != m_session->GetPlayer())
- ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_MOUNT_GIVED), m_session->GetPlayer()->GetName());
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_MOUNT_GIVED, GetName());
chr->SetUInt32Value( UNIT_FIELD_FLAGS , 0x001000 );
chr->Mount(mId);
@@ -1550,25 +1538,24 @@ bool ChatHandler::HandleModifyMoneyCommand(const char* args)
if(newmoney <= 0 )
{
PSendSysMessage(LANG_YOU_TAKE_ALL_MONEY, chr->GetName());
-
- if(chr != m_session->GetPlayer())
- ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_ALL_MONEY_GONE), m_session->GetPlayer()->GetName());
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_ALL_MONEY_GONE, GetName());
chr->SetMoney(0);
}
else
{
PSendSysMessage(LANG_YOU_TAKE_MONEY, abs(addmoney), chr->GetName());
- if(chr != m_session->GetPlayer())
- ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_MONEY_TAKEN), m_session->GetPlayer()->GetName(), abs(addmoney));
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_MONEY_TAKEN, GetName(), abs(addmoney));
chr->SetMoney( newmoney );
}
}
else
{
PSendSysMessage(LANG_YOU_GIVE_MONEY, addmoney, chr->GetName());
- if(chr != m_session->GetPlayer())
- ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_MONEY_GIVEN), m_session->GetPlayer()->GetName(), addmoney);
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_MONEY_GIVEN, GetName(), addmoney);
chr->ModifyMoney( addmoney );
}
@@ -1661,6 +1648,7 @@ bool ChatHandler::HandleTeleCommand(const char * args)
// id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r
GameTele const* tele = extractGameTeleFromLink((char*)args);
+
if (!tele)
{
SendSysMessage(LANG_COMMAND_TELE_NOTFOUND);
@@ -2074,14 +2062,8 @@ bool ChatHandler::HandleNameTeleCommand(const char * args)
}
PSendSysMessage(LANG_TELEPORTING_TO, chr->GetName(),"", tele->name.c_str());
-
- if (m_session)
- {
- if(m_session->GetPlayer()->IsVisibleGloballyFor(chr))
- ChatHandler(chr).PSendSysMessage(LANG_TELEPORTED_TO_BY, m_session->GetPlayer()->GetName());
- }
- else
- ChatHandler(chr).SendSysMessage(LANG_TELEPORTED_TO_BY_CONSOLE);
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_TELEPORTED_TO_BY, GetName());
// stop flight if need
if(chr->isInFlight())
@@ -2158,9 +2140,8 @@ bool ChatHandler::HandleGroupTeleCommand(const char * args)
}
PSendSysMessage(LANG_TELEPORTING_TO, pl->GetName(),"", tele->name.c_str());
-
- if (m_session->GetPlayer() != pl && m_session->GetPlayer()->IsVisibleGloballyFor(pl))
- ChatHandler(pl).PSendSysMessage(LANG_TELEPORTED_TO_BY, m_session->GetPlayer()->GetName());
+ if (needReportToTarget(pl))
+ ChatHandler(pl).PSendSysMessage(LANG_TELEPORTED_TO_BY, GetName());
// stop flight if need
if(pl->isInFlight())
@@ -2252,9 +2233,8 @@ bool ChatHandler::HandleGroupgoCommand(const char* args)
}
PSendSysMessage(LANG_SUMMONING, pl->GetName(),"");
-
- if (m_session->GetPlayer()->IsVisibleGloballyFor(pl))
- ChatHandler(pl).PSendSysMessage(LANG_SUMMONED_BY, m_session->GetPlayer()->GetName());
+ if (needReportToTarget(pl))
+ ChatHandler(pl).PSendSysMessage(LANG_SUMMONED_BY, GetName());
// stop flight if need
if(pl->isInFlight())
diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp
index 4164c5cde3c..f60b38b5522 100644
--- a/src/game/Level2.cpp
+++ b/src/game/Level2.cpp
@@ -44,6 +44,8 @@
#include <map>
#include "GlobalEvents.h"
+#include "TargetedMovementGenerator.h" // for HandleNpcUnFollowCommand
+
static uint32 ReputationRankStrIndex[MAX_REPUTATION_RANK] =
{
LANG_REP_HATED, LANG_REP_HOSTILE, LANG_REP_UNFRIENDLY, LANG_REP_NEUTRAL,
@@ -4052,3 +4054,79 @@ bool ChatHandler::HandleServerCorpsesCommand(const char* /*args*/)
CorpsesErase();
return true;
}
+
+bool ChatHandler::HandleRepairitemsCommand(const char* /*args*/)
+{
+ Player *target = getSelectedPlayer();
+
+ if(!target)
+ {
+ PSendSysMessage(LANG_NO_CHAR_SELECTED);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ // Repair items
+ target->DurabilityRepairAll(false, 0, false);
+
+ PSendSysMessage(LANG_YOU_REPAIR_ITEMS, target->GetName());
+ if(needReportToTarget(target))
+ ChatHandler(target).PSendSysMessage(LANG_YOUR_ITEMS_REPAIRED, GetName());
+ return true;
+}
+
+bool ChatHandler::HandleNpcFollowCommand(const char* /*args*/)
+{
+ Player *player = m_session->GetPlayer();
+ Creature *creature = getSelectedCreature();
+
+ if(!creature)
+ {
+ PSendSysMessage(LANG_SELECT_CREATURE);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ // Follow player - Using pet's default dist and angle
+ creature->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
+
+ PSendSysMessage(LANG_CREATURE_FOLLOW_YOU_NOW, creature->GetName());
+ return true;
+}
+
+bool ChatHandler::HandleNpcUnFollowCommand(const char* /*args*/)
+{
+ Player *player = m_session->GetPlayer();
+ Creature *creature = getSelectedCreature();
+
+ if(!creature)
+ {
+ PSendSysMessage(LANG_SELECT_CREATURE);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (creature->GetMotionMaster()->empty() ||
+ creature->GetMotionMaster()->GetCurrentMovementGeneratorType ()!=TARGETED_MOTION_TYPE)
+ {
+ PSendSysMessage(LANG_CREATURE_NOT_FOLLOW_YOU);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ TargetedMovementGenerator<Creature> const* mgen
+ = static_cast<TargetedMovementGenerator<Creature> const*>((creature->GetMotionMaster()->top()));
+
+ if(mgen->GetTarget()!=player)
+ {
+ PSendSysMessage(LANG_CREATURE_NOT_FOLLOW_YOU);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ // reset movement
+ creature->GetMotionMaster()->MovementExpired(true);
+
+ PSendSysMessage(LANG_CREATURE_NOT_FOLLOW_YOU_NOW, creature->GetName());
+ return true;
+}
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp
index c2c8645a27d..74986f217d4 100644
--- a/src/game/Level3.cpp
+++ b/src/game/Level3.cpp
@@ -747,7 +747,7 @@ bool ChatHandler::HandleAccountSetGmLevelCommand(const char* args)
if(targetPlayer)
{
- ChatHandler(targetPlayer).PSendSysMessage(LANG_YOURS_SECURITY_CHANGED,m_session->GetPlayer()->GetName(), gm);
+ ChatHandler(targetPlayer).PSendSysMessage(LANG_YOURS_SECURITY_CHANGED,GetName(), gm);
targetPlayer->GetSession()->SetSecurity(gm);
}
@@ -3728,14 +3728,14 @@ bool ChatHandler::HandleExploreCheatCommand(const char* args)
if (flag != 0)
{
PSendSysMessage(LANG_YOU_SET_EXPLORE_ALL, chr->GetName());
- if(chr!=m_session->GetPlayer())
- ChatHandler(chr).PSendSysMessage(LANG_YOURS_EXPLORE_SET_ALL,m_session->GetPlayer()->GetName());
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_EXPLORE_SET_ALL,GetName());
}
else
{
PSendSysMessage(LANG_YOU_SET_EXPLORE_NOTHING, chr->GetName());
- if(chr!=m_session->GetPlayer())
- ChatHandler(chr).PSendSysMessage(LANG_YOURS_EXPLORE_SET_NOTHING,m_session->GetPlayer()->GetName());
+ if (needReportToTarget(chr))
+ ChatHandler(chr).PSendSysMessage(LANG_YOURS_EXPLORE_SET_NOTHING,GetName());
}
for (uint8 i=0; i<128; i++)
@@ -3772,6 +3772,36 @@ bool ChatHandler::HandleHoverCommand(const char* args)
return true;
}
+bool ChatHandler::HandleWaterwalkCommand(const char* args)
+{
+ if(!args)
+ return false;
+
+ Player *player = getSelectedPlayer();
+ if(!player)
+ {
+ PSendSysMessage(LANG_NO_CHAR_SELECTED);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (strncmp(args, "on", 3) == 0)
+ player->SetMovement(MOVE_WATER_WALK); // ON
+ else if (strncmp(args, "off", 4) == 0)
+ player->SetMovement(MOVE_LAND_WALK); // OFF
+ else
+ {
+ SendSysMessage(LANG_USE_BOL);
+ return false;
+ }
+
+ PSendSysMessage(LANG_YOU_SET_WATERWALK, args, player->GetName());
+ if(needReportToTarget(player))
+ ChatHandler(player).PSendSysMessage(LANG_YOUR_WATERWALK_SET, args, GetName());
+ return true;
+
+}
+
bool ChatHandler::HandleLevelUpCommand(const char* args)
{
char* px = strtok((char*)args, " ");
diff --git a/src/game/MapManager.cpp b/src/game/MapManager.cpp
index e80cab60144..86206fef49b 100644
--- a/src/game/MapManager.cpp
+++ b/src/game/MapManager.cpp
@@ -165,7 +165,7 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player)
{
// probably there must be special opcode, because client has this string constant in GlobalStrings.lua
// TODO: this is not a good place to send the message
- player->GetSession()->SendAreaTriggerMessage("You must be in a raid group to enter %s instance", mapName);
+ player->GetSession()->SendAreaTriggerMessage(player->GetSession()->GetTrinityString(810), mapName);
sLog.outDebug("MAP: Player '%s' must be in a raid group to enter instance of '%s'", player->GetName(), mapName);
return false;
}
@@ -197,7 +197,7 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player)
if (!instance_map)
{
- player->GetSession()->SendAreaTriggerMessage("You cannot enter %s while in a ghost mode", mapName);
+ player->GetSession()->SendAreaTriggerMessage(player->GetSession()->GetTrinityString(811), mapName);
sLog.outDebug("MAP: Player '%s' doesn't has a corpse in instance '%s' and can't enter", player->GetName(), mapName);
return false;
}