diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp index d3deca6bd..c84a39761 100644 --- a/src/game/Creature.cpp +++ b/src/game/Creature.cpp @@ -698,7 +698,7 @@ void Creature::prepareGossipMenu( Player *pPlayer,uint32 gossipid ) if(gso->Id==1) { uint32 textid=GetNpcTextId(); - GossipText * gossiptext=objmgr.GetGossipText(textid); + GossipText const* gossiptext=objmgr.GetGossipText(textid); if(!gossiptext) cantalking=false; } diff --git a/src/game/GossipDef.cpp b/src/game/GossipDef.cpp index e705d648e..f91c40483 100644 --- a/src/game/GossipDef.cpp +++ b/src/game/GossipDef.cpp @@ -194,10 +194,7 @@ void PlayerMenu::SendPointOfInterest( float X, float Y, uint32 Icon, uint32 Flag void PlayerMenu::SendTalking( uint32 textID ) { - GossipText *pGossip; - std::string GossipStr; - - pGossip = objmgr.GetGossipText(textID); + GossipText const* pGossip = objmgr.GetGossipText(textID); WorldPacket data( SMSG_NPC_TEXT_UPDATE, 100 ); // guess size data << textID; // can be < 0 @@ -257,14 +254,11 @@ void PlayerMenu::SendTalking( uint32 textID ) data << pGossip->Options[i].Language; - data << pGossip->Options[i].Emotes[0]._Delay; - data << pGossip->Options[i].Emotes[0]._Emote; - - data << pGossip->Options[i].Emotes[1]._Delay; - data << pGossip->Options[i].Emotes[1]._Emote; - - data << pGossip->Options[i].Emotes[2]._Delay; - data << pGossip->Options[i].Emotes[2]._Emote; + for(int j = 0; j < 3; ++j) + { + data << pGossip->Options[i].Emotes[j]._Delay; + data << pGossip->Options[i].Emotes[j]._Emote; + } } } pSession->SendPacket( &data ); diff --git a/src/game/LootMgr.h b/src/game/LootMgr.h index 42f775ddc..0c34d7904 100644 --- a/src/game/LootMgr.h +++ b/src/game/LootMgr.h @@ -237,18 +237,19 @@ struct Loot // void clear(); void clear() { - items.clear(); gold = 0; PlayersLooting.clear(); for (QuestItemMap::iterator itr = PlayerQuestItems.begin(); itr != PlayerQuestItems.end(); ++itr) delete itr->second; + PlayerQuestItems.clear(); + for (QuestItemMap::iterator itr = PlayerFFAItems.begin(); itr != PlayerFFAItems.end(); ++itr) delete itr->second; + PlayerFFAItems.clear(); + for (QuestItemMap::iterator itr = PlayerNonQuestNonFFAConditionalItems.begin(); itr != PlayerNonQuestNonFFAConditionalItems.end(); ++itr) delete itr->second; - - PlayerQuestItems.clear(); - PlayerFFAItems.clear(); PlayerNonQuestNonFFAConditionalItems.clear(); + PlayersLooting.clear(); items.clear(); quest_items.clear(); gold = 0; diff --git a/src/game/NPCHandler.h b/src/game/NPCHandler.h index 4ecf77378..a9896fb55 100644 --- a/src/game/NPCHandler.h +++ b/src/game/NPCHandler.h @@ -58,7 +58,6 @@ struct GossipTextOption struct GossipText { - uint32 Text_ID; GossipTextOption Options[8]; }; diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index f4caa8f35..b31b05bae 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -140,24 +140,10 @@ ObjectMgr::ObjectMgr() ObjectMgr::~ObjectMgr() { for( QuestMap::iterator i = mQuestTemplates.begin( ); i != mQuestTemplates.end( ); ++i ) - { delete i->second; - } - mQuestTemplates.clear( ); - - for( GossipTextMap::iterator i = mGossipText.begin( ); i != mGossipText.end( ); ++i ) - { - delete i->second; - } - mGossipText.clear( ); - - mAreaTriggers.clear(); for(PetLevelInfoMap::iterator i = petInfo.begin( ); i != petInfo.end( ); ++i ) - { delete[] i->second; - } - petInfo.clear(); // free only if loaded for (int class_ = 0; class_ < MAX_CLASSES; ++class_) @@ -4064,7 +4050,7 @@ void ObjectMgr::LoadInstanceTemplate() // entry->resetTimeHeroic store reset time for both heroic mode instance (raid and non-raid) // entry->resetTimeRaid store reset time for normal raid only // for current state entry->resetTimeRaid == entry->resetTimeHeroic in case raid instances with heroic mode. - // but at some point wee need implement reset time dependen from raid insatance mode + // but at some point wee need implement reset time dependent from raid instance mode if(temp->reset_delay == 0) { // use defaults from the DBC @@ -4087,21 +4073,11 @@ void ObjectMgr::LoadInstanceTemplate() sLog.outString(); } -void ObjectMgr::AddGossipText(GossipText *pGText) +GossipText const *ObjectMgr::GetGossipText(uint32 Text_ID) const { - ASSERT( pGText->Text_ID ); - ASSERT( mGossipText.find(pGText->Text_ID) == mGossipText.end() ); - mGossipText[pGText->Text_ID] = pGText; -} - -GossipText *ObjectMgr::GetGossipText(uint32 Text_ID) -{ - GossipTextMap::const_iterator itr; - for (itr = mGossipText.begin(); itr != mGossipText.end(); ++itr) - { - if(itr->second->Text_ID == Text_ID) - return itr->second; - } + GossipTextMap::const_iterator itr = mGossipText.find(Text_ID); + if(itr != mGossipText.end()) + return &itr->second; return NULL; } @@ -4134,30 +4110,29 @@ void ObjectMgr::LoadGossipText() bar.step(); - pGText = new GossipText; - pGText->Text_ID = fields[cic++].GetUInt32(); + uint32 Text_ID = fields[cic++].GetUInt32(); + if(!Text_ID) + { + sLog.outErrorDb("Table `npc_text` has record wit reserved id 0, ignore."); + continue; + } + + GossipText& gText = mGossipText[Text_ID]; for (int i=0; i< 8; i++) { - pGText->Options[i].Text_0 = fields[cic++].GetCppString(); - pGText->Options[i].Text_1 = fields[cic++].GetCppString(); + gText.Options[i].Text_0 = fields[cic++].GetCppString(); + gText.Options[i].Text_1 = fields[cic++].GetCppString(); - pGText->Options[i].Language = fields[cic++].GetUInt32(); - pGText->Options[i].Probability = fields[cic++].GetFloat(); + gText.Options[i].Language = fields[cic++].GetUInt32(); + gText.Options[i].Probability = fields[cic++].GetFloat(); - pGText->Options[i].Emotes[0]._Delay = fields[cic++].GetUInt32(); - pGText->Options[i].Emotes[0]._Emote = fields[cic++].GetUInt32(); - - pGText->Options[i].Emotes[1]._Delay = fields[cic++].GetUInt32(); - pGText->Options[i].Emotes[1]._Emote = fields[cic++].GetUInt32(); - - pGText->Options[i].Emotes[2]._Delay = fields[cic++].GetUInt32(); - pGText->Options[i].Emotes[2]._Emote = fields[cic++].GetUInt32(); + for(int j=0; j < 3; ++j) + { + gText.Options[i].Emotes[j]._Delay = fields[cic++].GetUInt32(); + gText.Options[i].Emotes[j]._Emote = fields[cic++].GetUInt32(); + } } - - if ( !pGText->Text_ID ) continue; - AddGossipText( pGText ); - } while( result->NextRow() ); sLog.outString(); diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index 3dd3adc7c..b84ca51cd 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -403,8 +403,7 @@ class ObjectMgr return false; } - void AddGossipText(GossipText *pGText); - GossipText *GetGossipText(uint32 Text_ID); + GossipText const* GetGossipText(uint32 Text_ID) const; WorldSafeLocsEntry const *GetClosestGraveYard(float x, float y, float z, uint32 MapId, uint32 team); bool AddGraveYardLink(uint32 id, uint32 zone, uint32 team, bool inDB = true); @@ -748,7 +747,7 @@ class ObjectMgr QuestMap mQuestTemplates; - typedef UNORDERED_MAP GossipTextMap; + typedef UNORDERED_MAP GossipTextMap; typedef UNORDERED_MAP QuestAreaTriggerMap; typedef UNORDERED_MAP ItemTextMap; typedef std::set TavernAreaTriggerSet; @@ -758,8 +757,6 @@ class ObjectMgr GuildMap mGuildMap; ArenaTeamMap mArenaTeamMap; - ItemMap mItems; - ItemTextMap mItemTexts; QuestAreaTriggerMap mQuestAreaTriggerMap; diff --git a/src/game/Player.cpp b/src/game/Player.cpp index b325106e9..f06357cc4 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -12299,7 +12299,7 @@ void Player::SendPreparedQuest( uint64 guid ) if( pCreature ) { uint32 textid = pCreature->GetNpcTextId(); - GossipText * gossiptext = objmgr.GetGossipText(textid); + GossipText const* gossiptext = objmgr.GetGossipText(textid); if( !gossiptext ) { qe._Delay = 0; //TEXTEMOTE_MESSAGE; //zyg: player emote diff --git a/src/game/QueryHandler.cpp b/src/game/QueryHandler.cpp index f05df8478..45195ec56 100644 --- a/src/game/QueryHandler.cpp +++ b/src/game/QueryHandler.cpp @@ -321,8 +321,6 @@ void WorldSession::HandleNpcTextQueryOpcode( WorldPacket & recv_data ) uint32 textID; uint64 guid; - GossipText *pGossip; - std::string GossipStr; recv_data >> textID; sLog.outDetail("WORLD: CMSG_NPC_TEXT_QUERY ID '%u'", textID); @@ -330,7 +328,7 @@ void WorldSession::HandleNpcTextQueryOpcode( WorldPacket & recv_data ) recv_data >> guid; GetPlayer()->SetUInt64Value(UNIT_FIELD_TARGET, guid); - pGossip = objmgr.GetGossipText(textID); + GossipText const* pGossip = objmgr.GetGossipText(textID); WorldPacket data( SMSG_NPC_TEXT_UPDATE, 100 ); // guess size data << textID; @@ -392,14 +390,11 @@ void WorldSession::HandleNpcTextQueryOpcode( WorldPacket & recv_data ) data << pGossip->Options[i].Language; - data << pGossip->Options[i].Emotes[0]._Delay; - data << pGossip->Options[i].Emotes[0]._Emote; - - data << pGossip->Options[i].Emotes[1]._Delay; - data << pGossip->Options[i].Emotes[1]._Emote; - - data << pGossip->Options[i].Emotes[2]._Delay; - data << pGossip->Options[i].Emotes[2]._Emote; + for(int j = 0; j < 3; ++j) + { + data << pGossip->Options[i].Emotes[j]._Delay; + data << pGossip->Options[i].Emotes[j]._Emote; + } } } diff --git a/src/game/SocialMgr.cpp b/src/game/SocialMgr.cpp index e620e8881..82cdf2e64 100644 --- a/src/game/SocialMgr.cpp +++ b/src/game/SocialMgr.cpp @@ -273,7 +273,7 @@ void SocialMgr::BroadcastToFriendListers(Player *player, WorldPacket *packet) for(SocialMap::iterator itr = m_socialMap.begin(); itr != m_socialMap.end(); ++itr) { - PlayerSocialMap::iterator itr2 = itr->second.m_playerSocialMap.find(guid); + PlayerSocialMap::const_iterator itr2 = itr->second.m_playerSocialMap.find(guid); if(itr2 != itr->second.m_playerSocialMap.end() && (itr2->second.Flags & SOCIAL_FLAG_FRIEND)) { Player *pFriend = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)); diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 11ffcae35..c572ec9a4 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -95,7 +95,7 @@ Unit::Unit() m_addDmgOnce = 0; for(int i = 0; i < MAX_TOTEM; ++i) - m_TotemSlot[i] = 0; + m_TotemSlot[i] = 0; m_ObjectSlot[0] = m_ObjectSlot[1] = m_ObjectSlot[2] = m_ObjectSlot[3] = 0; //m_Aura = NULL; @@ -111,9 +111,9 @@ Unit::Unit() m_ShapeShiftFormSpellId = 0; m_canModifyStats = false; - for (int i = 0; i < MAX_SPELL_IMMUNITY; i++) + for (int i = 0; i < MAX_SPELL_IMMUNITY; ++i) m_spellImmune[i].clear(); - for (int i = 0; i < UNIT_MOD_END; i++) + for (int i = 0; i < UNIT_MOD_END; ++i) { m_auraModifiersGroup[i][BASE_VALUE] = 0.0f; m_auraModifiersGroup[i][BASE_PCT] = 1.0f; @@ -123,12 +123,12 @@ Unit::Unit() // implement 50% base damage from offhand m_auraModifiersGroup[UNIT_MOD_DAMAGE_OFFHAND][TOTAL_PCT] = 0.5f; - for (int i = 0; i < 3; i++) + for (int i = 0; i < MAX_ATTACK; ++i) { m_weaponDamage[i][MINDAMAGE] = BASE_MINDAMAGE; m_weaponDamage[i][MAXDAMAGE] = BASE_MAXDAMAGE; } - for (int i = 0; i < MAX_STATS; i++) + for (int i = 0; i < MAX_STATS; ++i) m_createStats[i] = 0.0f; m_attacking = NULL; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 783c0af79..239221fd1 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "7284" + #define REVISION_NR "7285" #endif // __REVISION_NR_H__