Merge branch 'PveStats' of git@gitlab.com:azerothshard/azerothcore.git

This commit is contained in:
Yehonal
2016-07-29 11:33:07 +02:00
7 changed files with 108 additions and 49 deletions
@@ -3,7 +3,7 @@
AzthGroupMgr::AzthGroupMgr(Group* group) {
this->group = group;
this->levelMaxGroup;
this->levelMaxGroup = 0;
}
void AzthGroupMgr::saveToDb() {
@@ -11,6 +11,11 @@
#include "AchievementMgr.h"
#include "AzthGroupMgr.h"
enum achievementStatsType {
ACHIEVEMENT_TYPE,
CRITERIA_TYPE
};
class AzthPlayerPlg : public PlayerScript{
public:
@@ -20,21 +25,19 @@ public:
uint16 tmpLevelPg;
uint8 groupLevel;
struct CompletedAchievementData
struct AzthAchiData
{
uint8 level;
uint8 levelParty;
};
typedef UNORDERED_MAP<uint16 /*achiId*/, CompletedAchievementData /*data*/> CompletedAchievementMap;
typedef UNORDERED_MAP<uint16 /*achiId*/, AzthAchiData /*data*/> CompletedAchievementMap;
CompletedAchievementMap m_completed_achievement_map;
typedef UNORDERED_MAP<uint16 /*critId*/, AzthAchiData /*data*/> CompletedCriteriaMap;
CompletedCriteriaMap m_completed_criteria_map;
uint32 instanceID;
// Fixa sta pircheria
void GetPartyLevel(Group* group, Player* player, AchievementMgr* achievement ) {
}
void OnLevelChanged(Player* player, uint8 oldLevel) override
{
@@ -75,44 +78,72 @@ public:
}
}
// Following 2 functions store levels in a temporary map
void OnAchiComplete(Player *player, AchievementEntry const* achievement) override {
AzthAchiData& it = m_completed_achievement_map[achievement->ID];
it.level = player->getLevel();
it.levelParty = getGroupLevel(player);
}
Group* group = NULL;
uint64 leaderGUID = 0;
uint16 levelPlayer = player->getLevel();
void OnCriteriaProgress(Player *player, AchievementCriteriaEntry const* criteria) override {
AzthAchiData& it = m_completed_criteria_map[criteria->ID];
it.level = player->getLevel();
it.levelParty = getGroupLevel(player);
}
// Following 2 functions save our temporary maps inside the db
void OnAchiSave(SQLTransaction& trans, Player *player, uint16 achId, CompletedAchievementData achiData) override {
AzthAchiData& it = m_completed_achievement_map[achId];
uint32 index = 0;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVESTATS);
stmt->setUInt32(index++, player->GetGUID());
stmt->setUInt32(index++, achId);
stmt->setUInt32(index++, ACHIEVEMENT_TYPE);
stmt->setUInt32(index++, it.level);
stmt->setUInt32(index++, it.levelParty);
stmt->setUInt32(index++, achiData.date);
trans->Append(stmt);
m_completed_achievement_map.erase(achId);
}
void OnCriteriaSave(SQLTransaction& trans, Player* player, uint16 critId, CriteriaProgress criteriaData) override {
AzthAchiData& it = m_completed_criteria_map[critId];
uint32 index = 0;
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVESTATS);
stmt->setUInt32(index++, player->GetGUID());
stmt->setUInt32(index++, critId);
stmt->setUInt32(index++, CRITERIA_TYPE);
stmt->setUInt32(index++, it.level);
stmt->setUInt32(index++, it.levelParty);
stmt->setUInt32(index++, criteriaData.date);
trans->Append(stmt);
m_completed_criteria_map.erase(critId);
}
private:
uint8 getGroupLevel(Player *player) {
uint8 groupLevel = 0;
Group *group = player->GetGroup();
Map* map = player->FindMap();
if (map->IsDungeon()) {
InstanceSave* is = sInstanceSaveMgr->PlayerGetInstanceSave(GUID_LOPART(player->GetGUID()), map->GetId(), player->GetDifficulty((map->IsRaid())));
if (is->azthInstMgr->levelMax!=0) {
levelPlayer = is->azthInstMgr->levelMax;
if (group) {
if (map->IsDungeon()) {
// caso party instance
InstanceSave* is = sInstanceSaveMgr->PlayerGetInstanceSave(GUID_LOPART(player->GetGUID()), map->GetId(), player->GetDifficulty((map->IsRaid())));
groupLevel = is->azthInstMgr->levelMax;
} else {
// caso party esterno
groupLevel = group->azthGroupMgr->levelMaxGroup;
}
}
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);
// 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 {
CompletedAchievementData& it = m_completed_achievement_map[achId];
CharacterDatabase.PExecute("UPDATE character_achievement SET levelPg = %u WHERE achievement = %u", it.level, achId);
m_completed_achievement_map.erase(achId);
return groupLevel;
}
};
@@ -546,7 +546,7 @@ void AchievementMgr::SaveToDB(SQLTransaction& trans)
stmt->setUInt16(0, iter->first);
stmt->setUInt32(1, GetPlayer()->GetGUID());
trans->Append(stmt);
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_ACHIEVEMENT);
stmt->setUInt32(0, GetPlayer()->GetGUID());
stmt->setUInt16(1, iter->first);
@@ -554,7 +554,12 @@ void AchievementMgr::SaveToDB(SQLTransaction& trans)
trans->Append(stmt);
iter->second.changed = false;
// [AZTH]
sScriptMgr->OnAchievementSave(trans, GetPlayer(), iter->first, iter->second);
}
}
if (!m_criteriaProgress.empty())
@@ -581,6 +586,9 @@ void AchievementMgr::SaveToDB(SQLTransaction& trans)
}
iter->second.changed = false;
//[AZTH]
sScriptMgr->OnCriteriaSave(trans, GetPlayer(), iter->first, iter->second);
}
}
}
@@ -2041,6 +2049,8 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry,
}
SendCriteriaUpdate(entry, progress, timeElapsed, timedCompleted);
sScriptMgr->OnCriteriaProgress(GetPlayer(), entry);
}
void AchievementMgr::RemoveCriteriaProgress(const AchievementCriteriaEntry* entry)
@@ -2138,6 +2148,8 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
ca.date = time(NULL);
ca.changed = true;
sScriptMgr->OnAchievementComplete(GetPlayer(), achievement);
// pussywizard: set all progress counters to 0, so progress will be deleted from db during save
{
bool allRefsCompleted = true;
@@ -248,9 +248,6 @@ struct CompletedAchievementData
{
time_t date;
bool changed;
//[AZTH]
uint16 levelPlayer;
uint8 groupLevel;
};
typedef UNORDERED_MAP<uint32, CriteriaProgress> CriteriaProgressMap;
-1
View File
@@ -158,7 +158,6 @@ 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);
+12 -2
View File
@@ -1199,9 +1199,19 @@ void ScriptMgr::OnAchievementComplete(Player* player, AchievementEntry const* ac
FOREACH_SCRIPT(PlayerScript)->OnAchiComplete(player, achievement);
}
void ScriptMgr::OnAchievementSave(Player* player, uint16 achId)
void ScriptMgr::OnCriteriaProgress(Player* player, AchievementCriteriaEntry const* criteria)
{
FOREACH_SCRIPT(PlayerScript)->OnAchiSave(player, achId);
FOREACH_SCRIPT(PlayerScript)->OnCriteriaProgress(player, criteria);
}
void ScriptMgr::OnAchievementSave(SQLTransaction& trans, Player* player, uint16 achiId, CompletedAchievementData achiData)
{
FOREACH_SCRIPT(PlayerScript)->OnAchiSave(trans, player, achiId, achiData);
}
void ScriptMgr::OnCriteriaSave(SQLTransaction& trans, Player* player, uint16 critId, CriteriaProgress criteriaData)
{
FOREACH_SCRIPT(PlayerScript)->OnCriteriaSave(trans, player, critId, criteriaData);
}
//[/AZTH]
+12 -2
View File
@@ -30,6 +30,10 @@
#include "World.h"
#include "Weather.h"
//[AZTH]
#include "AchievementMgr.h"
//[/AZTH]
class AuctionHouseObject;
class AuraScript;
class Battleground;
@@ -719,7 +723,11 @@ class PlayerScript : public ScriptObject
virtual void OnAchiComplete(Player* /*player*/, AchievementEntry const* /*achievement*/) { }
virtual void OnAchiSave(Player* /*player*/, uint16 /*achId*/) { }
virtual void OnCriteriaProgress(Player* /*player*/, AchievementCriteriaEntry const* /*criteria*/) { }
virtual void OnAchiSave(SQLTransaction& /*trans*/, Player* /*player*/, uint16 /*achId*/, CompletedAchievementData /*achiData*/) { }
virtual void OnCriteriaSave(SQLTransaction& /*trans*/, Player* /*player*/, uint16 /*achId*/, CriteriaProgress /*criteriaData*/) { }
//[/AZTH]
};
@@ -992,7 +1000,9 @@ class ScriptMgr
// [AZTH] all custom PlayerScript functions
void OnPlayerRemoveFromBattleground(Player* player, Battleground* bg);
void OnAchievementComplete(Player *player, AchievementEntry const* achievement);
void OnAchievementSave(Player *player, uint16 achId);
void OnCriteriaProgress(Player *player, AchievementCriteriaEntry const* criteria);
void OnAchievementSave(SQLTransaction& trans, Player* player, uint16 achiId, CompletedAchievementData achiData);
void OnCriteriaSave(SQLTransaction& trans, Player* player, uint16 critId, CriteriaProgress criteriaData);
// [/AZTH]
public: /* GuildScript */