From 95b808860b10ca809a3f063cf322f0fe6f5c4877 Mon Sep 17 00:00:00 2001 From: MadAgos Date: Fri, 22 Jul 2016 02:42:55 +0200 Subject: [PATCH 1/3] [AZTH] WIP Pve Stats, added code for party in outworld --- .../db-characters/groups_maxLevelGroup.sql | 1 + .../data/sql/db-characters/pve_stats.sql | 10 ++++++++ .../src/server/game/AzthGroupMgr.cpp | 12 ++++++++++ .../src/server/game/AzthGroupMgr.h | 16 +++++++++++++ .../src/server/plugins/AzthPlayerPlg.cpp | 24 ++++++++++++++----- src/server/game/Groups/Group.cpp | 9 +++++++ src/server/game/Groups/Group.h | 9 +++++++ .../Implementation/CharacterDatabase.cpp | 4 +++- 8 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 modules/azerothshard/data/sql/db-characters/groups_maxLevelGroup.sql create mode 100644 modules/azerothshard/data/sql/db-characters/pve_stats.sql create mode 100644 modules/azerothshard/src/server/game/AzthGroupMgr.cpp create mode 100644 modules/azerothshard/src/server/game/AzthGroupMgr.h diff --git a/modules/azerothshard/data/sql/db-characters/groups_maxLevelGroup.sql b/modules/azerothshard/data/sql/db-characters/groups_maxLevelGroup.sql new file mode 100644 index 0000000000..b386180e97 --- /dev/null +++ b/modules/azerothshard/data/sql/db-characters/groups_maxLevelGroup.sql @@ -0,0 +1 @@ +ALTER TABLE `groups` ADD COLUMN `MaxlevelGroup` INT(10) UNSIGNED DEFAULT 0 NOT NULL AFTER `masterLooterGuid`; \ No newline at end of file diff --git a/modules/azerothshard/data/sql/db-characters/pve_stats.sql b/modules/azerothshard/data/sql/db-characters/pve_stats.sql new file mode 100644 index 0000000000..8ad6dd43a4 --- /dev/null +++ b/modules/azerothshard/data/sql/db-characters/pve_stats.sql @@ -0,0 +1,10 @@ +CREATE TABLE IF NOT EXISTS pve_stats( + GUID INT(10) UNSIGNED NOT NULL DEFAULT 0, + id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + achievement INT(10) UNSIGNED NOT NULL DEFAULT 0, + type INT(8) UNSIGNED NOT NULL DEFAULT 0, + level INT(10) UNSIGNED NOT NULL DEFAULT 0, + lvlParty INT(10) UNSIGNED NOT NULL DEFAULT 0, + date DATETIME NOT NULL DEFAULT NOW(), + PRIMARY KEY (id) +) ENGINE=MYISAM CHARSET=utf8 COLLATE=utf8_general_ci; \ No newline at end of file diff --git a/modules/azerothshard/src/server/game/AzthGroupMgr.cpp b/modules/azerothshard/src/server/game/AzthGroupMgr.cpp new file mode 100644 index 0000000000..9e75f8ff3b --- /dev/null +++ b/modules/azerothshard/src/server/game/AzthGroupMgr.cpp @@ -0,0 +1,12 @@ +#include "AzthGroupMgr.h" +#include "DatabaseEnv.h" + +AzthGroupMgr::AzthGroupMgr(Group* group) { + this->levelMaxGroup = 0; + this->group = group; +} + +void AzthGroupMgr::saveToDb() { + CharacterDatabase.PExecute("UPDATE groups SET maxLevelGroup = %u WHERE leaderGuid = %u", this->levelMaxGroup, this->group->GetLeaderGUID()); +} + diff --git a/modules/azerothshard/src/server/game/AzthGroupMgr.h b/modules/azerothshard/src/server/game/AzthGroupMgr.h new file mode 100644 index 0000000000..e332a6b100 --- /dev/null +++ b/modules/azerothshard/src/server/game/AzthGroupMgr.h @@ -0,0 +1,16 @@ +#ifndef AZTHGROUPMGR_H +#define AZTHGROUPMGR_H + +#include "Group.h" + +class AzthGroupMgr { +public: + explicit AzthGroupMgr(Group* group); + ~AzthGroupMgr(); + + void saveToDb(); + + uint8 levelMaxGroup; + Group* group; +}; +#endif diff --git a/modules/azerothshard/src/server/plugins/AzthPlayerPlg.cpp b/modules/azerothshard/src/server/plugins/AzthPlayerPlg.cpp index 6c6716045d..0e548deaae 100644 --- a/modules/azerothshard/src/server/plugins/AzthPlayerPlg.cpp +++ b/modules/azerothshard/src/server/plugins/AzthPlayerPlg.cpp @@ -9,7 +9,7 @@ #include "Map.h" #include "WorldSession.h" -class AzthPlayerPlg : public PlayerScript { +class AzthPlayerPlg : public PlayerScript{ public: AzthPlayerPlg() : PlayerScript("AzthPlayerPlg") { } @@ -41,12 +41,11 @@ public: void OnUpdateZone(Player* player, uint32 newZone, uint32 newArea) override { player->setFactionForRace(player->getRace()); - - return; // disable following - + Map* map = player->FindMap(); uint16 levelPlayer = player->getLevel(); + if (map->IsDungeon()) { InstanceSave* is = sInstanceSaveMgr->PlayerGetInstanceSave(GUID_LOPART(player->GetGUID()), map->GetId(), player->GetDifficulty(map->IsRaid())); if (is->azthInstMgr->levelMax == 0) { @@ -67,7 +66,6 @@ public: } void OnAchiComplete(Player *player, AchievementEntry const* achievement) override { - return; // disable following uint16 levelPlayer = player->getLevel(); @@ -84,7 +82,6 @@ public: } void OnAchiSave(Player *player, uint16 achId) override { - return; // disable following CompletedAchievementData& it = m_completed_achievement_map[achId]; @@ -93,7 +90,22 @@ public: } }; +class AzthGroupPlg : public GroupScript { +public: + + AzthGroupPlg() : GroupScript("AzthGroupPlg") { } + + void OnAddMember(Group* group, uint64 guid) override { + Player* player = ObjectAccessor::FindPlayer(guid); + if (group->azthGroupMgr->levelMaxGroup < player->getLevel()) { + group->azthGroupMgr->levelMaxGroup = player->getLevel(); + group->azthGroupMgr->saveToDb(); + } + } +}; + void AddSC_azth_player_plg() { new AzthPlayerPlg(); + new AzthGroupPlg(); } diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 2fa1c60fc6..8709d1416a 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -41,6 +41,8 @@ #include "SharedDefines.h" #include "MapManager.h" #include "UpdateFieldFlags.h" +// [AZTH] +#include "AzthGroupMgr.h" Roll::Roll(uint64 _guid, LootItem const& li) : itemGUID(_guid), itemid(li.itemid), itemRandomPropId(li.randomPropertyId), itemRandomSuffix(li.randomSuffix), itemCount(li.count), @@ -105,6 +107,10 @@ bool Group::Create(Player* leader) m_leaderName = leader->GetName(); leader->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); + // [AZTH] + azthGroupMgr = new AzthGroupMgr(this); + // [/AZTH] + if (isBGGroup() || isBFGroup()) m_groupType = GROUPTYPE_BGRAID; @@ -148,6 +154,9 @@ bool Group::Create(Player* leader) stmt->setUInt32(index++, uint8(m_dungeonDifficulty)); stmt->setUInt32(index++, uint8(m_raidDifficulty)); stmt->setUInt32(index++, GUID_LOPART(m_masterLooterGuid)); + //[/AZTH] + stmt->setUInt32(index++, uint8(leader->getLevel())); + // [/AZTH] CharacterDatabase.Execute(stmt); diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index 1d295525cb..5e4c527c3a 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -25,6 +25,11 @@ #include "QueryResult.h" #include "SharedDefines.h" + //[AZTH] +#include "AzthGroupMgr.h" +class AzthGroupMgr; +// [/AZTH] + class Battlefield; class Battleground; class Creature; @@ -329,6 +334,10 @@ class Group _difficultyChangePreventionType = type; } + // [AZTH] + AzthGroupMgr* azthGroupMgr; + // [/AZTH] + protected: void _homebindIfInstance(Player* player); void _cancelHomebindIfInstance(Player* player); diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp index 66cfe197a2..5e1a506ded 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -340,7 +340,9 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_UPD_PETITION_NAME, "UPDATE petition SET name = ? WHERE petitionguid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_PETITION_SIGNATURE, "INSERT INTO petition_sign (ownerguid, petitionguid, playerguid, player_account) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_ACCOUNT_ONLINE, "UPDATE characters SET online = 0 WHERE account = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_GROUP, "INSERT INTO groups (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raiddifficulty, masterLooterGuid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + //[AZTH] + PrepareStatement(CHAR_INS_GROUP, "INSERT INTO groups (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raiddifficulty, masterLooterGuid, MaxLevelGroup) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + //[/AZTH] PrepareStatement(CHAR_REP_GROUP_MEMBER, "REPLACE INTO group_member (guid, memberGuid, memberFlags, subgroup, roles) VALUES(?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_GROUP_MEMBER, "DELETE FROM group_member WHERE memberGuid = ? AND guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_GROUP_LEADER, "UPDATE groups SET leaderGuid = ? WHERE guid = ?", CONNECTION_ASYNC); From ebcf6e86f61921b5b4128180d288762c2639e829 Mon Sep 17 00:00:00 2001 From: MadAgos Date: Fri, 22 Jul 2016 17:07:17 +0200 Subject: [PATCH 2/3] AZTH WIP PvEstats second working wave --- .../data/sql/db-characters/pve_stats.sql | 20 +++++------ .../src/server/game/AzthGroupMgr.cpp | 3 ++ .../src/server/game/AzthPlayer.cpp | 2 ++ .../azerothshard/src/server/game/AzthPlayer.h | 1 - .../src/server/plugins/AzthGroupPlg.cpp | 28 +++++++++++++++ .../src/server/plugins/AzthPlayerPlg.cpp | 34 +++++++++++-------- .../src/server/plugins/AzthPlgLoader.cpp | 2 ++ src/server/game/Achievements/AchievementMgr.h | 5 +++ src/server/game/Entities/Player/Player.cpp | 2 ++ src/server/game/Groups/Group.cpp | 2 ++ .../Implementation/CharacterDatabase.cpp | 3 ++ .../Implementation/CharacterDatabase.h | 3 ++ 12 files changed, 80 insertions(+), 25 deletions(-) create mode 100644 modules/azerothshard/src/server/plugins/AzthGroupPlg.cpp diff --git a/modules/azerothshard/data/sql/db-characters/pve_stats.sql b/modules/azerothshard/data/sql/db-characters/pve_stats.sql index 8ad6dd43a4..403e16b363 100644 --- a/modules/azerothshard/data/sql/db-characters/pve_stats.sql +++ b/modules/azerothshard/data/sql/db-characters/pve_stats.sql @@ -1,10 +1,10 @@ -CREATE TABLE IF NOT EXISTS pve_stats( - GUID INT(10) UNSIGNED NOT NULL DEFAULT 0, - id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - achievement INT(10) UNSIGNED NOT NULL DEFAULT 0, - type INT(8) UNSIGNED NOT NULL DEFAULT 0, - level INT(10) UNSIGNED NOT NULL DEFAULT 0, - lvlParty INT(10) UNSIGNED NOT NULL DEFAULT 0, - date DATETIME NOT NULL DEFAULT NOW(), - PRIMARY KEY (id) -) ENGINE=MYISAM CHARSET=utf8 COLLATE=utf8_general_ci; \ No newline at end of file +CREATE TABLE IF NOT EXISTS azth_achievement_stats ( + id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + playerGuid INT(10) UNSIGNED NOT NULL DEFAULT 0, + achievement INT(10) UNSIGNED NOT NULL DEFAULT 0, + type INT(8) UNSIGNED NOT NULL DEFAULT 0, + level INT(10) UNSIGNED NOT NULL DEFAULT 0, + levelParty INT(10) UNSIGNED DEFAULT 0, + date DATETIME NOT NULL DEFAULT NOW(), + PRIMARY KEY (id) + ) ENGINE=MYISAM CHARSET=utf8 COLLATE=utf8_general_ci; \ No newline at end of file diff --git a/modules/azerothshard/src/server/game/AzthGroupMgr.cpp b/modules/azerothshard/src/server/game/AzthGroupMgr.cpp index 9e75f8ff3b..5a44f1ff3a 100644 --- a/modules/azerothshard/src/server/game/AzthGroupMgr.cpp +++ b/modules/azerothshard/src/server/game/AzthGroupMgr.cpp @@ -10,3 +10,6 @@ void AzthGroupMgr::saveToDb() { CharacterDatabase.PExecute("UPDATE groups SET maxLevelGroup = %u WHERE leaderGuid = %u", this->levelMaxGroup, this->group->GetLeaderGUID()); } +AzthGroupMgr::~AzthGroupMgr() {} + + diff --git a/modules/azerothshard/src/server/game/AzthPlayer.cpp b/modules/azerothshard/src/server/game/AzthPlayer.cpp index 628e1792e4..68f502e4ed 100644 --- a/modules/azerothshard/src/server/game/AzthPlayer.cpp +++ b/modules/azerothshard/src/server/game/AzthPlayer.cpp @@ -25,3 +25,5 @@ void AzthPlayer::setArena1v1Info(uint8 type, uint32 value) { float AzthPlayer::GetPlayerQuestRate() { return playerQuestRate; } + +AzthPlayer::~AzthPlayer() {} diff --git a/modules/azerothshard/src/server/game/AzthPlayer.h b/modules/azerothshard/src/server/game/AzthPlayer.h index f32539a11e..49055b3911 100644 --- a/modules/azerothshard/src/server/game/AzthPlayer.h +++ b/modules/azerothshard/src/server/game/AzthPlayer.h @@ -8,7 +8,6 @@ class CrossFaction; -/* [TODO] fix and re-enable */ class AzthPlayer { public: explicit AzthPlayer(Player *origin); diff --git a/modules/azerothshard/src/server/plugins/AzthGroupPlg.cpp b/modules/azerothshard/src/server/plugins/AzthGroupPlg.cpp new file mode 100644 index 0000000000..6f9f982529 --- /dev/null +++ b/modules/azerothshard/src/server/plugins/AzthGroupPlg.cpp @@ -0,0 +1,28 @@ +/** +This plugin can be used for common group customizations +*/ + +#include "ScriptMgr.h" +#include "InstanceScript.h" +#include "InstanceSaveMgr.h" +#include "Player.h" +#include "Map.h" +#include "WorldSession.h" + +class AzthGroupPlg : public GroupScript { +public: + + AzthGroupPlg() : GroupScript("AzthGroupPlg") { } + + void OnAddMember(Group* group, uint64 guid) override { + Player* player = ObjectAccessor::FindPlayer(guid); + if (group->azthGroupMgr->levelMaxGroup < player->getLevel()) { + group->azthGroupMgr->levelMaxGroup = player->getLevel(); + group->azthGroupMgr->saveToDb(); + } + } +}; + +void AddSC_azth_group_plg() { + new AzthGroupPlg(); +} \ No newline at end of file diff --git a/modules/azerothshard/src/server/plugins/AzthPlayerPlg.cpp b/modules/azerothshard/src/server/plugins/AzthPlayerPlg.cpp index 0e548deaae..607767ef5a 100644 --- a/modules/azerothshard/src/server/plugins/AzthPlayerPlg.cpp +++ b/modules/azerothshard/src/server/plugins/AzthPlayerPlg.cpp @@ -8,6 +8,7 @@ #include "Player.h" #include "Map.h" #include "WorldSession.h" +#include "AchievementMgr.h" class AzthPlayerPlg : public PlayerScript{ public: @@ -16,7 +17,8 @@ public: uint16 levelPlayer; uint16 tmpLevelPg; - + uint8 groupLevel; + struct CompletedAchievementData { uint8 level; @@ -26,6 +28,12 @@ public: CompletedAchievementMap m_completed_achievement_map; uint32 instanceID; + // Fixa sta pircheria + void GetPartyLevel(Group* group, Player* player, AchievementMgr* achievement ) { + achievement->GetCompletedAchievement(); + + } + void OnLevelChanged(Player* player, uint8 oldLevel) override { if (oldLevel == 9) @@ -79,6 +87,17 @@ public: CompletedAchievementData& it = m_completed_achievement_map[achievement->ID]; it.level = levelPlayer; + + // Da spostare nella SaveToDb + /* PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVESTATS); + // playerGuid, achievement, type, level, levelParty, date + stmt->setUInt32(0, player->GetGUID()); + stmt->setUInt32(1, achievement->ID); + stmt->setUInt32(2, 0); + stmt->setUInt32(3, levelPlayer); + stmt->setUInt32(4, ); + stmt->setUInt32(5, ); + CharacterDatabase.Execute(stmt);*/ } void OnAchiSave(Player *player, uint16 achId) override { @@ -90,22 +109,9 @@ public: } }; -class AzthGroupPlg : public GroupScript { -public: - AzthGroupPlg() : GroupScript("AzthGroupPlg") { } - - void OnAddMember(Group* group, uint64 guid) override { - Player* player = ObjectAccessor::FindPlayer(guid); - if (group->azthGroupMgr->levelMaxGroup < player->getLevel()) { - group->azthGroupMgr->levelMaxGroup = player->getLevel(); - group->azthGroupMgr->saveToDb(); - } - } -}; void AddSC_azth_player_plg() { new AzthPlayerPlg(); - new AzthGroupPlg(); } diff --git a/modules/azerothshard/src/server/plugins/AzthPlgLoader.cpp b/modules/azerothshard/src/server/plugins/AzthPlgLoader.cpp index 0563d8f9f5..8267e7e74f 100644 --- a/modules/azerothshard/src/server/plugins/AzthPlgLoader.cpp +++ b/modules/azerothshard/src/server/plugins/AzthPlgLoader.cpp @@ -19,6 +19,7 @@ void AddSC_guildhouse_npcs(); void AddSC_npc_transmogrifier(); void AddSC_npc_transmogrifier(); void AddSC_hearthstone(); +void AddSC_azth_group_plg(); void AddAzthScripts() @@ -36,6 +37,7 @@ void AddAzthScripts() AddSC_npc_transmogrifier(); //sAnticheatMgr->StartScripts(); //[AZTH] Anticheat AddSC_hearthstone(); + AddSC_azth_group_plg(); } diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h index 9ad013f766..18aeb7ff96 100644 --- a/src/server/game/Achievements/AchievementMgr.h +++ b/src/server/game/Achievements/AchievementMgr.h @@ -248,6 +248,9 @@ struct CompletedAchievementData { time_t date; bool changed; + //[AZTH] + uint16 levelPlayer; + uint8 groupLevel; }; typedef UNORDERED_MAP CriteriaProgressMap; @@ -278,6 +281,8 @@ class AchievementMgr void UpdateTimedAchievements(uint32 timeDiff); void StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry, uint32 timeLost = 0); void RemoveTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry); // used for quest and scripted timed achievements + CompletedAchievementMap GetCompletedAchievement() const { return m_completedAchievements; } + void RemoveCriteriaProgress(AchievementCriteriaEntry const* entry); private: diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e3f54d9242..830e952a05 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -968,6 +968,8 @@ Player::~Player() delete m_runes; delete m_achievementMgr; delete m_reputationMgr; + // [AZTH] + delete azthPlayer; sWorld->DecreasePlayerCount(); diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 8709d1416a..10b821e7e2 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -95,6 +95,8 @@ Group::~Group() // Sub group counters clean up delete[] m_subGroupsCounts; + //[AZTH] + delete azthGroupMgr; } bool Group::Create(Player* leader) diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp index 5e1a506ded..6af66f6d04 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -565,6 +565,9 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_INS_PVPSTATS_PLAYER, "INSERT INTO pvpstats_players (battleground_id, character_guid, winner, score_killing_blows, score_deaths, score_honorable_kills, score_bonus_honor, score_damage_done, score_healing_done, attr_1, attr_2, attr_3, attr_4, attr_5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_PVPSTATS_FACTIONS_OVERALL, "SELECT winner_faction, COUNT(*) AS count FROM pvpstats_battlegrounds WHERE DATEDIFF(NOW(), date) < 7 GROUP BY winner_faction ORDER BY winner_faction ASC", CONNECTION_SYNCH); + // PvEStats + PrepareStatement(CHAR_INS_PVESTATS, "INSERT INTO azth_achievement_stats (playerGuid, achievement, type, level, levelParty, date) VALUES (?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + // Deserter tracker PrepareStatement(CHAR_INS_DESERTER_TRACK, "INSERT INTO battleground_deserters (guid, type, datetime) VALUES (?, ?, NOW())", CONNECTION_ASYNC); diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h index 19ab2f84a8..d26a60625e 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.h +++ b/src/server/shared/Database/Implementation/CharacterDatabase.h @@ -284,6 +284,9 @@ enum CharacterDatabaseStatements CHAR_INS_PETITION_SIGNATURE, CHAR_UPD_ACCOUNT_ONLINE, CHAR_INS_GROUP, +//[AZTH] + CHAR_INS_PVESTATS, +//[/AZTH] CHAR_REP_GROUP_MEMBER, CHAR_DEL_GROUP_MEMBER, CHAR_UPD_GROUP_LEADER, From 1ee1bec7f0d8ed805566fc8eab5140a423be6c79 Mon Sep 17 00:00:00 2001 From: MadAgos Date: Tue, 26 Jul 2016 18:38:52 +0200 Subject: [PATCH 3/3] [AZTH] PvEStats, recover Max Level group after a crash --- modules/azerothshard/src/server/game/AzthGroupMgr.cpp | 2 +- .../azerothshard/src/server/plugins/AzthPlayerPlg.cpp | 9 ++++++++- src/server/game/Achievements/AchievementMgr.h | 1 - src/server/game/Groups/Group.cpp | 9 +++++---- src/server/game/Groups/GroupMgr.cpp | 8 ++++++-- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/modules/azerothshard/src/server/game/AzthGroupMgr.cpp b/modules/azerothshard/src/server/game/AzthGroupMgr.cpp index 5a44f1ff3a..3776c23cca 100644 --- a/modules/azerothshard/src/server/game/AzthGroupMgr.cpp +++ b/modules/azerothshard/src/server/game/AzthGroupMgr.cpp @@ -2,8 +2,8 @@ #include "DatabaseEnv.h" AzthGroupMgr::AzthGroupMgr(Group* group) { - this->levelMaxGroup = 0; this->group = group; + this->levelMaxGroup; } void AzthGroupMgr::saveToDb() { diff --git a/modules/azerothshard/src/server/plugins/AzthPlayerPlg.cpp b/modules/azerothshard/src/server/plugins/AzthPlayerPlg.cpp index 607767ef5a..55b73b1cc8 100644 --- a/modules/azerothshard/src/server/plugins/AzthPlayerPlg.cpp +++ b/modules/azerothshard/src/server/plugins/AzthPlayerPlg.cpp @@ -9,6 +9,7 @@ #include "Map.h" #include "WorldSession.h" #include "AchievementMgr.h" +#include "AzthGroupMgr.h" class AzthPlayerPlg : public PlayerScript{ public: @@ -22,6 +23,7 @@ public: struct CompletedAchievementData { uint8 level; + uint8 levelParty; }; typedef UNORDERED_MAP CompletedAchievementMap; @@ -30,7 +32,7 @@ public: // Fixa sta pircheria void GetPartyLevel(Group* group, Player* player, AchievementMgr* achievement ) { - achievement->GetCompletedAchievement(); + } @@ -75,6 +77,8 @@ public: void OnAchiComplete(Player *player, AchievementEntry const* achievement) override { + Group* group = NULL; + uint64 leaderGUID = 0; uint16 levelPlayer = player->getLevel(); Map* map = player->FindMap(); @@ -87,6 +91,9 @@ public: CompletedAchievementData& it = m_completed_achievement_map[achievement->ID]; it.level = levelPlayer; + if(player->GetGroup()->isRaidGroup()) + it.levelParty = group->azthGroupMgr->levelMaxGroup; + // Da spostare nella SaveToDb /* PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVESTATS); diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h index 18aeb7ff96..c821f35f4e 100644 --- a/src/server/game/Achievements/AchievementMgr.h +++ b/src/server/game/Achievements/AchievementMgr.h @@ -281,7 +281,6 @@ class AchievementMgr void UpdateTimedAchievements(uint32 timeDiff); void StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry, uint32 timeLost = 0); void RemoveTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry); // used for quest and scripted timed achievements - CompletedAchievementMap GetCompletedAchievement() const { return m_completedAchievements; } void RemoveCriteriaProgress(AchievementCriteriaEntry const* entry); diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 10b821e7e2..d7769c93ad 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -73,6 +73,10 @@ _difficultyChangePreventionType(DIFFICULTY_PREVENTION_CHANGE_NONE) { for (uint8 i = 0; i < TARGETICONCOUNT; ++i) m_targetIcons[i] = 0; + + // [AZTH] + azthGroupMgr = new AzthGroupMgr(this); + // [/AZTH] } Group::~Group() @@ -109,10 +113,6 @@ bool Group::Create(Player* leader) m_leaderName = leader->GetName(); leader->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); - // [AZTH] - azthGroupMgr = new AzthGroupMgr(this); - // [/AZTH] - if (isBGGroup() || isBFGroup()) m_groupType = GROUPTYPE_BGRAID; @@ -158,6 +158,7 @@ bool Group::Create(Player* leader) stmt->setUInt32(index++, GUID_LOPART(m_masterLooterGuid)); //[/AZTH] stmt->setUInt32(index++, uint8(leader->getLevel())); + azthGroupMgr->levelMaxGroup = 0; // [/AZTH] CharacterDatabase.Execute(stmt); diff --git a/src/server/game/Groups/GroupMgr.cpp b/src/server/game/Groups/GroupMgr.cpp index e80e0c83f9..1f5ed93b18 100644 --- a/src/server/game/Groups/GroupMgr.cpp +++ b/src/server/game/Groups/GroupMgr.cpp @@ -107,8 +107,8 @@ void GroupMgr::LoadGroups() // 0 1 2 3 4 5 6 7 8 9 QueryResult result = CharacterDatabase.Query("SELECT g.leaderGuid, g.lootMethod, g.looterGuid, g.lootThreshold, g.icon1, g.icon2, g.icon3, g.icon4, g.icon5, g.icon6" - // 10 11 12 13 14 15 16 17 18 - ", g.icon7, g.icon8, g.groupType, g.difficulty, g.raiddifficulty, g.masterLooterGuid, g.guid, lfg.dungeon, lfg.state FROM groups g LEFT JOIN lfg_data lfg ON lfg.guid = g.guid ORDER BY g.guid ASC"); + // 10 11 12 13 14 15 16 17 18 19 + ", g.icon7, g.icon8, g.groupType, g.difficulty, g.raiddifficulty, g.masterLooterGuid, g.guid, lfg.dungeon, lfg.state, g.MaxlevelGroup FROM groups g LEFT JOIN lfg_data lfg ON lfg.guid = g.guid ORDER BY g.guid ASC"); if (!result) { @@ -131,6 +131,10 @@ void GroupMgr::LoadGroups() RegisterGroupId(group->GetLowGUID()); + //[AZTH] + group->azthGroupMgr->levelMaxGroup = fields[19].GetUInt32(); + //[/AZTH] + ++count; } while (result->NextRow());