All pastes #439672 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-04-14 13:09 UTC
rendered paste body
Index: 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)