mirror of
https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk.git
synced 2026-07-11 03:13:10 +00:00
[AZTH] PvEstats save Criteria and Achievements on achievement_stats and minor fix
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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]
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user