mirror of
https://github.com/araxiaonline/mod-mythic-plus.git
synced 2026-06-13 03:02:24 -04:00
Added difficulty to death stats
This commit is contained in:
@@ -27,11 +27,10 @@ DROP TABLE IF EXISTS mp_player_death_stats;
|
||||
CREATE TABLE mp_player_death_stats(
|
||||
guid INT UNSIGNED NOT NULL DEFAULT '0',
|
||||
creatureEntry INT UNSIGNED NOT NULL,
|
||||
difficulty TINYINT UNSIGNED NOT NULL DEFAULT '0'
|
||||
numDeaths INT UNSIGNED NOT NULL DEFAULT '0',
|
||||
lastUpdated TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
PRIMARY KEY (guid),
|
||||
INDEX idx_creature (creatureEntry)
|
||||
PRIMARY KEY (guid, creatureEntry, difficulty)
|
||||
);
|
||||
|
||||
--- Used for tracking player runs in mythic dungeons
|
||||
|
||||
@@ -116,11 +116,13 @@ public:
|
||||
if (!sMythicPlus->IsMapEligible(map)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Removes currenct GroupData Instance Data and removes from database storage
|
||||
sMpDataStore->RemoveInstanceData(map->GetId(), map->GetInstanceId());
|
||||
|
||||
// If there is player data for this map reset it to default values
|
||||
|
||||
|
||||
// remove group instance and group instance data from database during a reset
|
||||
sMpDataStore->DBRemovePlayerInstanceData(map->GetInstanceId());
|
||||
sMpDataStore->DBRemoveGroupInstanceData(map->GetInstanceId());
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -339,7 +339,6 @@ void MpDataStore::DBAddPlayerDeath(Player* player) {
|
||||
MpLogger::error("DBAddPlayerDeath called with invalid player");
|
||||
return;
|
||||
}
|
||||
|
||||
CharacterDatabase.Execute("UPDATE mp_player_instance_data SET deaths = deaths + 1 WHERE guid = {} and mapId = {} and instanceId = {}",
|
||||
player->GetGUID().GetCounter(),
|
||||
player->GetMapId(),
|
||||
@@ -348,7 +347,7 @@ void MpDataStore::DBAddPlayerDeath(Player* player) {
|
||||
}
|
||||
|
||||
// Logs death for player that occurs by a creature directly.
|
||||
void MpDataStore::DBAddPlayerDeath(Player* player, Creature* creature) {
|
||||
void MpDataStore::DBAddPlayerDeath(Player* player, Creature* creature, MpDifficulty difficulty) {
|
||||
if (!player) {
|
||||
MpLogger::error("DBAddPlayerDeath called with invalid player");
|
||||
return;
|
||||
@@ -360,13 +359,14 @@ void MpDataStore::DBAddPlayerDeath(Player* player, Creature* creature) {
|
||||
player->GetInstanceId()
|
||||
);
|
||||
|
||||
CharacterDatabase.Execute("REPLACE INTO mp_player_death_stats (guid, mapId, instanceId, creatureId) VALUES ({},{},{},{}) ",
|
||||
CharacterDatabase.Execute(
|
||||
"INSERT INTO mp_player_death_stats (guid, creatureEntry, difficulty, numDeaths, lastUpdated) "
|
||||
"VALUES ({}, {}, {}, 1, CURRENT_TIMESTAMP) "
|
||||
"ON DUPLICATE KEY UPDATE numDeaths = numDeaths + 1, lastUpdated = CURRENT_TIMESTAMP",
|
||||
player->GetGUID().GetCounter(),
|
||||
player->GetMapId(),
|
||||
player->GetInstanceId(),
|
||||
creature->GetEntry()
|
||||
creature->GetEntry(),
|
||||
difficulty
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
void MpDataStore::DBUpdateGroupData(ObjectGuid groupGuid, MpDifficulty difficulty, uint32 mapId, uint32 instanceId, uint32 deaths) {
|
||||
@@ -399,7 +399,7 @@ void MpDataStore::DBAddGroupDeath(Group* group, uint32 mapId, uint32 instanceId,
|
||||
return;
|
||||
}
|
||||
|
||||
CharacterDatabase.Execute("UPDATE mp_group_data SET deaths = deaths + 1 WHERE guid = {} and mapId = {} and instanceId = {} and difficulty = {}",
|
||||
CharacterDatabase.Execute("UPDATE mp_group_data SET deaths = deaths + 1 WHERE groupId = {} and mapId = {} and instanceId = {} and difficulty = {}",
|
||||
group->GetGUID().GetCounter(),
|
||||
mapId,
|
||||
instanceId,
|
||||
@@ -416,6 +416,15 @@ void MpDataStore::DBRemovePlayerData(ObjectGuid playerGuid) {
|
||||
CharacterDatabase.Execute("DELETE FROM mp_player_instance_data WHERE guid = {} ", playerGuid.GetCounter());
|
||||
}
|
||||
|
||||
void MpDataStore::DBRemovePlayerInstanceData(uint32 instanceId) {
|
||||
if (!instanceId) {
|
||||
MpLogger::error("DBRemovePlayerInstanceData: missing instanceId to remove player instance ");
|
||||
return;
|
||||
}
|
||||
|
||||
CharacterDatabase.Execute("DELETE FROM mp_player_instance_data WHERE guid = {} ", instanceId);
|
||||
}
|
||||
|
||||
|
||||
void MpDataStore::DBUpdateGroupTimerDeaths(ObjectGuid groupGuid, uint32 mapId, uint32 instanceId, uint32 timer, uint32 deaths) {
|
||||
if (!groupGuid) {
|
||||
@@ -440,3 +449,14 @@ void MpDataStore::DBRemoveGroupData(ObjectGuid groupGuid) {
|
||||
|
||||
CharacterDatabase.Execute("DELETE FROM mp_group_data WHERE guid = {} ", groupGuid.GetCounter());
|
||||
}
|
||||
|
||||
// Remove instance data using the instanceId
|
||||
void MpDataStore::DBRemoveGroupInstanceData(uint32 instanceId) {
|
||||
if (!instanceId) {
|
||||
MpLogger::error("DBRemoveGroupData called with invalid groupGuid");
|
||||
return;
|
||||
}
|
||||
|
||||
CharacterDatabase.Execute("DELETE FROM mp_group_data WHERE instanceId = {} ", instanceId);
|
||||
}
|
||||
|
||||
|
||||
@@ -385,14 +385,17 @@ public:
|
||||
void DBUpdatePlayerInstanceData(ObjectGuid playerGuid, MpDifficulty difficulty, uint32 mapId = 0, uint32 instanceId = 0, uint32 deaths = 0);
|
||||
|
||||
void DBResetPlayerDeaths(Player* player);
|
||||
void DBAddPlayerDeath(Player* player, Creature* killer);
|
||||
void DBAddPlayerDeath(Player* player, Creature* killer, MpDifficulty difficulty);
|
||||
void DBAddPlayerDeath(Player* player);
|
||||
|
||||
void DBRemovePlayerData(ObjectGuid playerGuid);
|
||||
void DBRemovePlayerInstanceData(uint32 instanceId);
|
||||
void DBRemoveGroupInstanceData(uint32 instanceId);
|
||||
void DBUpdateGroupData(ObjectGuid groupGuid, MpDifficulty difficulty, uint32 mapId, uint32 instanceId, uint32 deaths);
|
||||
void DBUpdateGroupTimerDeaths(ObjectGuid groupGuid, uint32 mapId, uint32 instanceId, uint32 timer, uint32 deaths);
|
||||
void DBRemoveGroupData(ObjectGuid groupGuid);
|
||||
void DBAddGroupDeath(Group* group, uint32 mapId, uint32 instanceId, MpDifficulty difficulty);
|
||||
|
||||
//SavePlayerDungeonStats(Group* group, MpGroupData const* groupData);
|
||||
|
||||
static MpDataStore* instance() {
|
||||
|
||||
@@ -23,17 +23,33 @@ public:
|
||||
return;
|
||||
}
|
||||
|
||||
Group* group = player->GetGroup();
|
||||
if(!group) {
|
||||
MpLogger::warn("Missing group data for player {}", player->GetName());
|
||||
return;
|
||||
}
|
||||
|
||||
MpGroupData *data = sMpDataStore->GetGroupData(player->GetGroup());
|
||||
if (!data) {
|
||||
MpLogger::warn("Missin group data for player {}", player->GetName());
|
||||
return;
|
||||
}
|
||||
|
||||
MpPlayerData *playerData = sMpDataStore->GetPlayerData(player->GetGUID());
|
||||
if (!playerData) {
|
||||
MpLogger::warn("Missin player data for player {}", player->GetName());
|
||||
return;
|
||||
}
|
||||
|
||||
playerData->AddDeath(map->GetId(), map->GetInstanceId());
|
||||
|
||||
if(killer) {
|
||||
sMpDataStore->DBAddPlayerDeath(player, killer, data->difficulty);
|
||||
} else {
|
||||
sMpDataStore->DBAddPlayerDeath(player);
|
||||
}
|
||||
|
||||
sMpDataStore->DBAddGroupDeath(group, player->GetMapId(), player->GetInstanceId(), data->difficulty);
|
||||
}
|
||||
|
||||
void OnSave(Player* player) {
|
||||
|
||||
Reference in New Issue
Block a user