Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
- index f3de237..1740d66 100755
- --- a/src/server/game/Achievements/AchievementMgr.cpp
- +++ b/src/server/game/Achievements/AchievementMgr.cpp
- @@ -1951,6 +1951,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement, b
- return;
- SendAchievementEarned(achievement);
- + GetPlayer()->CreateWowarmoryFeed(1, achievement->ID, 0, 0);
- CompletedAchievementData& ca = m_completedAchievements[achievement->ID];
- ca.date = time(NULL);
- ca.changed = true;
- diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
- index 29dff32..e29ee93 100755
- --- a/src/server/game/Entities/Item/Item.cpp
- +++ b/src/server/game/Entities/Item/Item.cpp
- @@ -278,6 +278,13 @@ bool Item::Create(uint32 guidlow, uint32 itemid, Player const* owner)
- SetUInt32Value(ITEM_FIELD_DURATION, abs(itemProto->Duration));
- SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, 0);
- +
- + if (itemProto->Quality > 2 && itemProto->Flags != 2048 && (itemProto->Class == ITEM_CLASS_WEAPON || itemProto->Class == ITEM_CLASS_ARMOR))
- + {
- + if (!GetOwner())
- + return true;
- + GetOwner()->CreateWowarmoryFeed(2, itemid, guidlow, itemProto->Quality);
- + }
- return true;
- }
- diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
- index 8f27455..def9773 100755
- --- a/src/server/game/Entities/Player/Player.cpp
- +++ b/src/server/game/Entities/Player/Player.cpp
- @@ -4951,7 +4951,15 @@
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SKILLS);
- stmt->setUInt32(0, guid);
- trans->Append(stmt);
- + stmt = CharacterDatabase.GetPreparedStatement(ARMORY_CHAR_STATS);
- + stmt->setUInt32(0, guid);
- + trans->Append(stmt);
- +
- + stmt = CharacterDatabase.GetPreparedStatement(ARMORY_CHAR_FEED);
- + stmt->setUInt32(0, guid);
- + trans->Append(stmt);
- +
- CharacterDatabase.CommitTransaction(trans);
- break;
- }
- @@ -16435,6 +16437,8 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
- CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '%u' WHERE guid ='%u'", uint32(AT_LOGIN_RENAME),guid);
- return false;
- }
- + // Cleanup old Wowarmory feeds
- + InitWowarmoryFeeds();
- // overwrite possible wrong/corrupted guid
- SetUInt64Value(OBJECT_FIELD_GUID, MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER));
- @@ -18365,6 +18369,30 @@ void Player::SaveToDB()
- CharacterDatabase.CommitTransaction(trans);
- + /* World of Warcraft Armory */
- + // Place this code AFTER CharacterDatabase.CommitTransaction(); to avoid some character saving errors.
- + // Wowarmory feeds
- + std::ostringstream sWowarmory;
- + for (WowarmoryFeeds::iterator iter = m_wowarmory_feeds.begin(); iter < m_wowarmory_feeds.end(); ++iter) {
- + sWowarmory << "INSERT IGNORE INTO character_feed_log (guid,type,data,date,counter,difficulty,item_guid,item_quality) VALUES ";
- + // guid type data date counter difficulty item_guid item_quality
- + sWowarmory << "(" << (*iter).guid << ", " << (*iter).type << ", " << (*iter).data << ", " << uint64((*iter).date) << ", " << (*iter).counter << ", " << uint32((*iter).difficulty) << ", " << (*iter).item_guid << ", " << (*iter).item_quality << ");";
- + CharacterDatabase.PExecute(sWowarmory.str().c_str());
- + sWowarmory.str("");
- + }
- + // Clear old saved feeds from storage - they are not required for server core.
- + InitWowarmoryFeeds();
- + // Character stats
- + std::ostringstream ps;
- + time_t t = time(NULL);
- + CharacterDatabase.PExecute("DELETE FROM armory_character_stats WHERE guid = %u", GetGUIDLow());
- + ps << "INSERT INTO armory_character_stats (guid, data, save_date) VALUES (" << GetGUIDLow() << ", '";
- + for (uint16 i = 0; i < m_valuesCount; ++i)
- + ps << GetUInt32Value(i) << " ";
- + ps << "', " << uint64(t) << ");";
- + CharacterDatabase.PExecute(ps.str().c_str());
- + /* World of Warcraft Armory */
- +
- // save pet (hunter pet level and experience and all type pets health/mana).
- if (Pet* pet = GetPet())
- pet->SavePetToDB(PET_SAVE_AS_CURRENT);
- @@ -24641,3 +24669,42 @@ void Player::_SaveInstanceTimeRestrictions(SQLTransaction& trans)
- trans->Append(stmt);
- }
- }
- +
- +void Player::InitWowarmoryFeeds() {
- + // Clear feeds
- + m_wowarmory_feeds.clear();
- +}
- +
- +void Player::CreateWowarmoryFeed(uint32 type, uint32 data, uint32 item_guid, uint32 item_quality) {
- + /*
- + 1 - TYPE_ACHIEVEMENT_FEED
- + 2 - TYPE_ITEM_FEED
- + 3 - TYPE_BOSS_FEED
- + */
- + if (GetGUIDLow() == 0)
- + {
- + sLog->outError(LOG_FILTER_PLAYER, "[Wowarmory]: player is not initialized, unable to create log entry!");
- + return;
- + }
- + if (type <= 0 || type > 3)
- + {
- + sLog->outError(LOG_FILTER_PLAYER, "[Wowarmory]: unknown feed type: %d, ignore.", type);
- + return;
- + }
- + if (data == 0)
- + {
- + sLog->outError(LOG_FILTER_PLAYER, "[Wowarmory]: empty data (GUID: %u), ignore.", GetGUIDLow());
- + return;
- + }
- + WowarmoryFeedEntry feed;
- + feed.guid = GetGUIDLow();
- + feed.type = type;
- + feed.data = data;
- + feed.difficulty = type == 3 ? GetMap()->GetDifficulty() : 0;
- + feed.item_guid = item_guid;
- + feed.item_quality = item_quality;
- + feed.counter = 0;
- + feed.date = time(NULL);
- + sLog->outDebug(LOG_FILTER_UNITS, "[Wowarmory]: create wowarmory feed (GUID: %u, type: %d, data: %u).", feed.guid, feed.type, feed.data);
- + m_wowarmory_feeds.push_back(feed);
- +}
- \ No newline at end of file
- diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
- index d22054f..129c2a2 100755
- --- a/src/server/game/Entities/Player/Player.h
- +++ b/src/server/game/Entities/Player/Player.h
- @@ -1028,6 +1028,21 @@ private:
- uint32 _xp;
- };
- +/* World of Warcraft Armory */
- +struct WowarmoryFeedEntry {
- + uint32 guid; // Player GUID
- + time_t date; // Log date
- + uint32 type; // TYPE_ACHIEVEMENT_FEED, TYPE_ITEM_FEED, TYPE_BOSS_FEED
- + uint32 data; // TYPE_ITEM_FEED: item_entry, TYPE_BOSS_FEED: creature_entry
- + uint32 item_guid; // Can be 0
- + uint32 item_quality; // Can be 0
- + uint8 difficulty; // Can be 0
- + int counter; // Can be 0
- +};
- +
- +typedef std::vector<WowarmoryFeedEntry> WowarmoryFeeds;
- +/* World of Warcraft Armory */
- +
- class Player : public Unit, public GridObject<Player>
- {
- friend class WorldSession;
- @@ -2316,6 +2331,12 @@ class Player : public Unit, public GridObject<Player>
- void SendCinematicStart(uint32 CinematicSequenceId);
- void SendMovieStart(uint32 MovieId);
- + /* World of Warcraft Armory */
- + void CreateWowarmoryFeed(uint32 type, uint32 data, uint32 item_guid, uint32 item_quality);
- + void InitWowarmoryFeeds();
- + /* World of Warcraft Armory */
- +
- +
- /*********************************************************/
- /*** INSTANCE SYSTEM ***/
- /*********************************************************/
- @@ -2755,6 +2776,8 @@ class Player : public Unit, public GridObject<Player>
- uint32 m_timeSyncTimer;
- uint32 m_timeSyncClient;
- uint32 m_timeSyncServer;
- + // World of Warcraft Armory Feeds
- + WowarmoryFeeds m_wowarmory_feeds;
- InstanceTimeMap _instanceResetTimes;
- InstanceSave* _pendingBind;
- diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
- index de68aef..96960f0 100755
- --- a/src/server/game/Entities/Unit/Unit.cpp
- +++ b/src/server/game/Entities/Unit/Unit.cpp
- @@ -15611,7 +15622,10 @@
- if (instanceMap->IsRaidOrHeroicDungeon())
- {
- if (creature->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_INSTANCE_BIND)
- + {
- ((InstanceMap*)instanceMap)->PermBindAllPlayers(creditedPlayer);
- + creditedPlayer->CreateWowarmoryFeed(3, creature->GetCreatureTemplate()->Entry, 0, 0);
- + }
- }
- else
- {
- diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h
- index 8f27455..def9773 100755
- --- a/src/server/shared/Database/Implementation/CharacterDatabase.h
- +++ b/src/server/shared/Database/Implementation/CharacterDatabase.h
- @@ -513,6 +513,8 @@
- CHAR_INS_CHAR_TALENT,
- CHAR_DEL_CHAR_ACTION_EXCEPT_SPEC,
- CHAR_SEL_CHAR_PET_BY_ENTRY_AND_SLOT,
- + ARMORY_CHAR_STATS,
- + ARMORY_CHAR_FEED,
- MAX_CHARACTERDATABASE_STATEMENTS,
- };
- diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
- index 8f27455..def9773 100755
- --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp
- +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
- @@ -551,4 +551,6 @@
- PREPARE_STATEMENT(CHAR_DEL_CHAR_ACTION_EXCEPT_SPEC, "DELETE FROM character_action WHERE spec<>? AND guid = ?", CONNECTION_ASYNC);
- PREPARE_STATEMENT(CHAR_SEL_CHAR_PET_BY_ENTRY_AND_SLOT, "SELECT id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, curhappiness, abdata, savetime, CreatedBySpell, PetType FROM character_pet WHERE owner = ? AND slot = ?", CONNECTION_SYNCH);
- + PREPARE_STATEMENT(ARMORY_CHAR_STATS, "DELETE FROM armory_character_stats WHERE guid = ?", CONNECTION_ASYNC);
- + PREPARE_STATEMENT(ARMORY_CHAR_FEED, "DELETE FROM character_feed_log WHERE guid = ?", CONNECTION_ASYNC);
- }
- \ No newline at end of file
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement