rendered paste bodyIndex: src/game/Object.cpp
===================================================================
--- src/game/Object.cpp (working copy)
+++ src/game/Object.cpp (working copy)
@@ -584,6 +584,8 @@
m_mapId = 0;
m_InstanceId = 0;
+ m_name = "";
+
mSemaphoreTeleport = false;
if (instantiator)
@@ -596,7 +598,8 @@
{
Object::_Create(guidlow, guidhigh);
- SetUInt32Value( OBJECT_FIELD_ENTRY,nameId);
+ // nameId not required, it set in other place...
+ //SetUInt32Value( OBJECT_FIELD_ENTRY,nameId);
m_mapId = mapid;
m_positionX = x;
@@ -720,6 +723,72 @@
z = GetPositionZ();
}
+void WorldObject::Say(const std::string text, const uint32 language)
+{
+ WorldPacket data(SMSG_MESSAGECHAT, 200);
+ data << (uint8)CHAT_MSG_MONSTER_SAY;
+ data << (uint32)language;
+ data << (uint64)GetGUID();
+ data << (uint32)(strlen(GetName())+1);
+ data << GetName();
+ data << (uint64)0;
+ data << (uint32)(text.length()+1);
+ data << text;
+ data << (uint8)0; // ChatTag
+
+ SendMessageToSet(&data, true);
+}
+
+void WorldObject::Yell(const std::string text, const uint32 language)
+{
+ WorldPacket data(SMSG_MESSAGECHAT, 200);
+ data << (uint8)CHAT_MSG_MONSTER_YELL;
+ data << (uint32)language;
+ data << (uint64)GetGUID();
+ data << (uint32)(strlen(GetName())+1);
+ data << GetName();
+ data << (uint64)0;
+ data << (uint32)(text.length()+1);
+ data << text;
+ data << (uint8)0; // ChatTag
+
+ SendMessageToSet(&data, true);
+}
+
+void WorldObject::TextEmote(const std::string text)
+{
+ std::string rightText = "%s " + text;
+
+ WorldPacket data(SMSG_MESSAGECHAT, 200);
+ data << (uint8)CHAT_MSG_MONSTER_EMOTE;
+ data << (uint32)LANG_UNIVERSAL;
+ data << (uint32)(strlen(GetName())+1);
+ data << GetName();
+ data << (uint64)0;
+ data << (uint32)(rightText.length()+1);
+ data << rightText;
+ data << (uint8)0; // ChatTag
+
+ SendMessageToSet(&data, true); // SendMessageToOwnTeamSet()?
+}
+
+void WorldObject::Whisper(const uint64 receiver, const std::string text)
+{
+ WorldPacket data(SMSG_MESSAGECHAT, 200);
+ data << (uint8)CHAT_MSG_MONSTER_WHISPER;
+ data << (uint32)LANG_UNIVERSAL;
+ data << (uint32)1;
+ data << GetName();
+ data << (uint64)receiver;
+ data << (uint32)(text.length()+1);
+ data << text;
+ data << (uint8)0; // ChatTag
+
+ Player *player = objmgr.GetPlayer(receiver);
+ if(player && player->GetSession())
+ player->GetSession()->SendPacket(&data);
+}
+
void WorldObject::GetClosePoint( const WorldObject* victim, float &x, float &y, float &z, float distance, float angle ) const
{
angle += victim ? GetAngle( victim ) : GetOrientation();
Index: src/game/Object.h
===================================================================
--- src/game/Object.h (working copy)
+++ src/game/Object.h (working copy)
@@ -275,7 +275,10 @@
uint32 GetMapId() const { return m_mapId; }
uint32 GetZoneId() const;
- uint32 GetAreaId() const;
+ uint32 GetAreaId() const;
+
+ const char* GetName() const { return m_name.c_str(); }
+ void SetName(std::string newname) { m_name=newname; }
float GetDistanceSq( const WorldObject* obj ) const;
float GetDistance2dSq( const WorldObject* obj ) const;
@@ -293,6 +296,11 @@
bool IsBeingTeleported() { return mSemaphoreTeleport; }
void SetSemaphoreTeleport(bool semphsetting) { mSemaphoreTeleport = semphsetting; }
+ virtual void Say(const std::string text, const uint32 language);
+ virtual void Yell(const std::string text, const uint32 language);
+ virtual void TextEmote(const std::string text);
+ virtual void Whisper(const uint64 receiver, const std::string text);
+
void SendDestroyObject(uint64 guid);
void SendObjectDeSpawnAnim(uint64 guid);
@@ -304,6 +312,8 @@
protected:
WorldObject( WorldObject *instantiator );
+ std::string m_name;
+
private:
uint32 m_mapId;
Index: src/game/Player.h
===================================================================
--- src/game/Player.h (working copy)
+++ src/game/Player.h (working copy)
@@ -646,6 +646,11 @@
void RemovePet(Pet* pet, PetSaveMode mode);
void Uncharm();
+ void Say(const std::string text, const uint32 language);
+ void Yell(const std::string text, const uint32 language);
+ void TextEmote(const std::string text);
+ void Whisper(const uint64 receiver, const std::string text, const uint32 language);
+
float GetResistanceBuffMods(SpellSchools school, bool positive) const { return GetFloatValue(positive ? PLAYER_FIELD_RESISTANCEBUFFMODSPOSITIVE+school : PLAYER_FIELD_RESISTANCEBUFFMODSNEGATIVE+school ); }
void SetResistanceBuffMods(SpellSchools school, bool positive, float val) { SetFloatValue(positive ? PLAYER_FIELD_RESISTANCEBUFFMODSPOSITIVE+school : PLAYER_FIELD_RESISTANCEBUFFMODSNEGATIVE+school,val); }
void ApplyResistanceBuffModsMod(SpellSchools school, bool positive, float val, bool apply) { ApplyModFloatValue(positive ? PLAYER_FIELD_RESISTANCEBUFFMODSPOSITIVE+school : PLAYER_FIELD_RESISTANCEBUFFMODSNEGATIVE+school, val, apply); }
Index: src/game/World.cpp
===================================================================
--- src/game/World.cpp (working copy)
+++ src/game/World.cpp (working copy)
@@ -348,7 +348,9 @@
||!MapManager::ExistMAP(1,-618.518,-4251.67)
||!MapManager::ExistMAP(0, 1676.35, 1677.45)
||!MapManager::ExistMAP(1, 10311.3, 832.463)
- ||!MapManager::ExistMAP(1,-2917.58,-257.98))
+ ||!MapManager::ExistMAP(1,-2917.58,-257.98)
+ ||!MapManager::ExistMAP(530,10349.6,-6357.29)
+ ||!MapManager::ExistMAP(530,-3961.64,-13931.2))
{
sLog.outError("Correct *.map files not found in path '%smaps'. Please place *.map files in the directory pointed by this path or correct the DataDir value in the mangosd.conf file.",m_dataPath.c_str());
exit(1);
@@ -406,7 +408,7 @@
sLog.outString( "Loading Item Texts..." );
objmgr.LoadItemTexts();
- sLog.outString( "Loading Creature Templates..." );
+ sLog.outString( "Loading Creature templates..." );
objmgr.LoadCreatureTemplates();
sLog.outString( "Loading Creature Reputation OnKill Data..." );
@@ -701,7 +703,7 @@
break;
}
- ((Creature *)step.source)->MonsterSay(step.script->datatext.c_str(), 0, step.target->GetGUID());
+ ((Creature *)step.source)->Say(step.script->datatext.c_str(), 0);
break;
case SCRIPT_COMMAND_EMOTE:
if(!step.source)
Index: src/game/Player.cpp
===================================================================
--- src/game/Player.cpp (working copy)
+++ src/game/Player.cpp (working copy)
@@ -11510,6 +11510,99 @@
GetSession()->SendPacket(&data);
}
+void Player::Say(const std::string text, const uint32 language)
+{
+ WorldPacket data(SMSG_MESSAGECHAT, 200);
+ data << (uint8)CHAT_MSG_SAY;
+ data << (uint32)language;
+ data << (uint64)GetGUID();
+ data << (uint64)GetGUID();
+ data << (uint32)(text.length()+1);
+ data << text;
+ data << (uint8)chatTag();
+
+ SendMessageToSet(&data, true);
+}
+
+void Player::Yell(const std::string text, const uint32 language)
+{
+ WorldPacket data(SMSG_MESSAGECHAT, 200);
+ data << (uint8)CHAT_MSG_YELL;
+ data << (uint32)language;
+ data << (uint64)GetGUID();
+ data << (uint64)GetGUID();
+ data << (uint32)(text.length()+1);
+ data << text;
+ data << (uint8)chatTag();
+
+ SendMessageToSet(&data, true);
+}
+
+void Player::TextEmote(const std::string text)
+{
+ WorldPacket data(SMSG_MESSAGECHAT, 200);
+ data << (uint8)CHAT_MSG_EMOTE;
+ data << (uint32)LANG_UNIVERSAL;
+ data << (uint64)GetGUID();
+ data << (uint32)(text.length()+1);
+ data << text;
+ data << (uint8)chatTag();
+
+ SendMessageToSet(&data, true);
+}
+
+void Player::Whisper(const uint64 receiver, const std::string text, const uint32 language)
+{
+ Player *player = objmgr.GetPlayer(receiver);
+
+ WorldPacket data(SMSG_MESSAGECHAT, 200);
+ data << (uint8)CHAT_MSG_WHISPER;
+ data << (uint32)LANG_UNIVERSAL;
+ data << (uint64)GetGUID();
+ data << (uint32)(text.length()+1);
+ data << text;
+ data << (uint8)chatTag();
+ player->GetSession()->SendPacket(&data);
+
+ data.Initialize(SMSG_MESSAGECHAT, 200);
+ data << (uint8)CHAT_MSG_WHISPER_INFORM;
+ data << (uint32)language;
+ data << (uint64)player->GetGUID();
+ data << (uint32)(text.length()+1);
+ data << text;
+ data << (uint8)chatTag();
+ GetSession()->SendPacket(&data);
+
+ if(player->isAFK())
+ {
+ data.Initialize(SMSG_MESSAGECHAT, 200);
+ data << (uint8)CHAT_MSG_AFK;
+ data << (uint32)language;
+ data << (uint64)player->GetGUID();
+ data << (uint32)(player->afkMsg.length()+1);
+ data << player->afkMsg;
+ data << (uint8)0;
+ GetSession()->SendPacket(&data);
+ }
+ if(player->isDND())
+ {
+ data.Initialize(SMSG_MESSAGECHAT, 200);
+ data << (uint8)CHAT_MSG_DND;
+ data << (uint32)language;
+ data << (uint64)player->GetGUID();
+ data << (uint32)(player->dndMsg.length()+1);
+ data << player->dndMsg;
+ data << (uint8)0;
+ GetSession()->SendPacket(&data);
+ }
+
+ if(!isAcceptWhispers())
+ {
+ SetAcceptWhispers(true);
+ sChatHandler.SendSysMessage(GetSession() ,"Whispers accepting now: ON");
+ }
+}
+
void Player::PetSpellInitialize()
{
Pet* pet = GetPet();
Index: src/game/ChatHandler.cpp
===================================================================
--- src/game/ChatHandler.cpp (working copy)
+++ src/game/ChatHandler.cpp (working copy)
@@ -59,8 +59,9 @@
switch(type)
{
- case CHAT_MSG_SAY:
- case CHAT_MSG_EMOTE: // "/me text" emote type
+ case CHAT_MSG_SAY:
+ case CHAT_MSG_EMOTE:
+ case CHAT_MSG_YELL:
{
std::string msg = "";
recv_data >> msg;
@@ -68,18 +69,52 @@
if (sChatHandler.ParseCommands(msg.c_str(), this) > 0)
break;
- if(type==CHAT_MSG_SAY)
+ if(type == CHAT_MSG_SAY)
+ GetPlayer()->Say(msg, lang);
+ else if(type == CHAT_MSG_EMOTE)
+ GetPlayer()->TextEmote(msg);
+ else if(type == CHAT_MSG_YELL)
+ GetPlayer()->Yell(msg, lang);
+ } break;
+
+ case CHAT_MSG_WHISPER:
+ {
+ std::string to, msg;
+ recv_data >> to;
+ CHECK_PACKET_SIZE(recv_data,4+4+(to.size()+1)+1);
+ recv_data >> msg;
+
+ if(to.size() == 0)
{
- sChatHandler.FillMessageData( &data, this, type, lang, NULL, 0, msg.c_str() );
- GetPlayer()->SendMessageToSet( &data, true );
+ WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1));
+ data<<to;
+ SendPacket(&data);
+ break;
}
- else
+
+ normalizePlayerName(to);
+ Player *player = objmgr.GetPlayer(to.c_str());
+ if(!player || GetSecurity() == 0 && player->GetSession()->GetSecurity() > 0 && !player->isAcceptWhispers())
{
- std::ostringstream msg2;
- msg2 << GetPlayer()->GetName() << " " << msg;
- sChatHandler.FillMessageData( &data, this, type, lang, NULL, 0, msg2.str().c_str() );
- GetPlayer()->SendMessageToOwnTeamSet( &data, true );
+ WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1));
+ data<<to;
+ SendPacket(&data);
+ return;
}
+ if (!sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHAT) && GetSecurity() == 0 && player->GetSession()->GetSecurity() == 0 )
+ {
+ uint32 sidea = GetPlayer()->GetTeam();
+ uint32 sideb = player->GetTeam();
+ if( sidea != sideb )
+ {
+ WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1));
+ data<<to;
+ SendPacket(&data);
+ return;
+ }
+ }
+
+ GetPlayer()->Whisper(player->GetGUID(), msg, lang);
} break;
case CHAT_MSG_PARTY:
@@ -99,7 +134,6 @@
group->BroadcastPacket(&data, group->GetMemberGroup(GetPlayer()->GetGUID()));
}
break;
-
case CHAT_MSG_GUILD:
{
std::string msg = "";
@@ -133,88 +167,50 @@
}
break;
}
-
- case CHAT_MSG_YELL:
+ case CHAT_MSG_RAID:
{
- std::string msg = "";
+ std::string msg="";
recv_data >> msg;
if (sChatHandler.ParseCommands(msg.c_str(), this) > 0)
break;
- sChatHandler.FillMessageData(&data, this, type, lang, NULL, 0, msg.c_str() );
+ Group *group = GetPlayer()->groupInfo.group;
+ if(!group || !group->isRaidGroup())
+ return;
- //please test this, its important that this is correct. I leave the previouse code becouse of this.
- GetPlayer()->SendMessageToSet( &data, true );
- //SendPacket(&data);
- //sWorld.SendGlobalMessage(&data, this);
-
+ WorldPacket data;
+ sChatHandler.FillMessageData(&data, this, CHAT_MSG_RAID, lang, "", 0, msg.c_str());
+ group->BroadcastPacket(&data);
} break;
-
- case CHAT_MSG_WHISPER:
+ case CHAT_MSG_RAID_LEADER:
{
- std::string to, msg;
- recv_data >> to;
-
- // recheck
- CHECK_PACKET_SIZE(recv_data,4+4+(to.size()+1)+1);
-
+ std::string msg="";
recv_data >> msg;
- if(to.size() == 0)
- {
- WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1));
- data<<to;
- SendPacket(&data);
+ if (sChatHandler.ParseCommands(msg.c_str(), this) > 0)
break;
- }
- normalizePlayerName(to);
- Player *player = objmgr.GetPlayer(to.c_str());
- // send whispers from player to GM only if GM accept its (not show online state GM in other case)
- if(!player || GetSecurity() == 0 && player->GetSession()->GetSecurity() > 0 && !player->isAcceptWhispers())
- {
- WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1));
- data<<to;
- SendPacket(&data);
- break;
- }
- if (!sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHAT) && GetSecurity() == 0 && player->GetSession()->GetSecurity() == 0 )
- {
- uint32 sidea = GetPlayer()->GetTeam();
- uint32 sideb = player->GetTeam();
- if( sidea != sideb )
- {
- WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1));
- data<<to;
- SendPacket(&data);
- break;
- }
- }
+ Group *group = GetPlayer()->groupInfo.group;
+ if(!group || !group->isRaidGroup() || !group->IsLeader(GetPlayer()->GetGUID()))
+ return;
- sChatHandler.FillMessageData(&data, this, type, lang, NULL, 0, msg.c_str() );
- player->GetSession()->SendPacket(&data);
+ WorldPacket data;
+ sChatHandler.FillMessageData(&data, this, CHAT_MSG_RAID_LEADER, lang, "", 0, msg.c_str());
+ group->BroadcastPacket(&data);
+ } break;
+ case CHAT_MSG_RAID_WARN:
+ {
+ std::string msg="";
+ recv_data >> msg;
- sChatHandler.FillMessageData(&data,this,CHAT_MSG_WHISPER_INFORM,lang,NULL,player->GetGUID(),msg.c_str() );
- SendPacket(&data);
+ Group *group = GetPlayer()->groupInfo.group;
+ if(!group || !group->isRaidGroup() || !group->IsLeader(GetPlayer()->GetGUID()))
+ return;
- if(player->isAFK())
- {
- sChatHandler.FillMessageData(&data, this, CHAT_MSG_AFK, LANG_UNIVERSAL, NULL, player->GetGUID(), player->afkMsg.c_str());
- SendPacket(&data);
- }
- if(player->isDND())
- {
- sChatHandler.FillMessageData(&data, this, CHAT_MSG_DND, LANG_UNIVERSAL, NULL, player->GetGUID(), player->dndMsg.c_str());
- SendPacket(&data);
- }
-
- // Auto enable whispers accepting at sending whispers
- if(!GetPlayer()->isAcceptWhispers())
- {
- GetPlayer()->SetAcceptWhispers(true);
- sChatHandler.SendSysMessage(this ,"Whispers accepting now: ON");
- }
+ WorldPacket data;
+ sChatHandler.FillMessageData(&data, this, CHAT_MSG_RAID_WARN, lang, "", 0, msg.c_str());
+ group->BroadcastPacket(&data);
} break;
case CHAT_MSG_CHANNEL:
@@ -227,9 +223,9 @@
recv_data >> msg;
- if(ChannelMgr* cMgr = channelMgr(GetPlayer()->GetTeam()))
- if(Channel *chn = cMgr->GetChannel(channel,GetPlayer()))
- chn->Say(GetPlayer(),msg.c_str(),lang);
+ if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
+ if(Channel *chn = cMgr->GetChannel(channel,_player))
+ chn->Say(_player->GetGUID(),msg.c_str(),lang);
} break;
case CHAT_MSG_AFK:
@@ -237,12 +233,12 @@
std::string msg;
recv_data >> msg;
- GetPlayer()->afkMsg = msg;
- if((msg.size() == 0 || !GetPlayer()->isAFK()) && !GetPlayer()->isInCombat() )
+ _player->afkMsg = msg;
+ if((msg.size() == 0 || !_player->isAFK()) && !_player->isInCombat() )
{
- GetPlayer()->ToggleAFK();
- if(GetPlayer()->isAFK() && GetPlayer()->isDND())
- GetPlayer()->ToggleDND();
+ _player->ToggleAFK();
+ if(_player->isAFK() && _player->isDND())
+ _player->ToggleDND();
}
} break;
@@ -260,54 +256,8 @@
}
} break;
- case CHAT_MSG_RAID:
- {
- std::string msg="";
- recv_data >> msg;
- if (sChatHandler.ParseCommands(msg.c_str(), this) > 0)
- break;
- Group *group = GetPlayer()->groupInfo.group;
- if(!group || !group->isRaidGroup())
- return;
-
- WorldPacket data;
- sChatHandler.FillMessageData(&data, this, CHAT_MSG_RAID, lang, "", 0, msg.c_str());
- group->BroadcastPacket(&data);
- } break;
-
- case CHAT_MSG_RAID_LEADER:
- {
- std::string msg="";
- recv_data >> msg;
-
- if (sChatHandler.ParseCommands(msg.c_str(), this) > 0)
- break;
-
- Group *group = GetPlayer()->groupInfo.group;
- if(!group || !group->isRaidGroup() || !group->IsLeader(GetPlayer()->GetGUID()))
- return;
-
- WorldPacket data;
- sChatHandler.FillMessageData(&data, this, CHAT_MSG_RAID_LEADER, lang, "", 0, msg.c_str());
- group->BroadcastPacket(&data);
- } break;
-
- case CHAT_MSG_RAID_WARN:
- {
- std::string msg="";
- recv_data >> msg;
-
- Group *group = GetPlayer()->groupInfo.group;
- if(!group || !group->isRaidGroup() || !group->IsLeader(GetPlayer()->GetGUID()))
- return;
-
- WorldPacket data;
- sChatHandler.FillMessageData(&data, this, CHAT_MSG_RAID_WARN, lang, "", 0, msg.c_str());
- group->BroadcastPacket(&data);
- } break;
-
default:
sLog.outError("CHAT: unknown msg type %u, lang: %u", type, lang);
}
Index: src/game/Creature.cpp
===================================================================
--- src/game/Creature.cpp (working copy)
+++ src/game/Creature.cpp (working copy)
@@ -1303,22 +1303,6 @@
}
}
-void Creature::Say(char const* message, uint32 language)
-{
- WorldPacket data;
-
- sChatHandler.FillMessageData( &data, NULL, CHAT_MSG_SAY, language, NULL, 0, message );
- SendMessageToSet( &data, false );
-}
-
-void Creature::MonsterSay(char const* message, uint32 language, uint64 targetGUID)
-{
- WorldPacket data;
-
- sChatHandler.FillMessageData( &data, NULL, CHAT_MSG_MONSTER_SAY, language, NULL, targetGUID, message, this );
- SendMessageToSet( &data, false );
-}
-
bool Creature::IsImmunedToSpell(SpellEntry const* spellInfo) const
{
if (!spellInfo)