diff options
20 files changed, 96 insertions, 38 deletions
diff --git a/sql/scripts/world_scripts_full.sql b/sql/scripts/world_scripts_full.sql index 812249830fa..b395f798636 100644 --- a/sql/scripts/world_scripts_full.sql +++ b/sql/scripts/world_scripts_full.sql @@ -1658,4 +1658,8 @@ UPDATE `outdoorpvp_template` SET `ScriptName`='outdoorpvp_zm' WHERE `TypeId`=4; UPDATE `outdoorpvp_template` SET `ScriptName`='outdoorpvp_si' WHERE `TypeId`=5; UPDATE `outdoorpvp_template` SET `ScriptName`='outdoorpvp_ep' WHERE `TypeId`=6; +/* ACHIEVEMENTS */ +UPDATE `achievement_criteria_data` SET `ScriptName`='achievement_school_of_hard_knocks' WHERE `criteria_id` IN (6641,6642,6643,6644); +UPDATE `achievement_criteria_data` SET `ScriptName`='achievement_storm_glory' WHERE `criteria_id`=3693; + /* EOF */ diff --git a/sql/updates/9240_world_achievement_criteria_data.sql b/sql/updates/9240_world_achievement_criteria_data.sql new file mode 100644 index 00000000000..bb883ffc884 --- /dev/null +++ b/sql/updates/9240_world_achievement_criteria_data.sql @@ -0,0 +1,2 @@ +UPDATE `achievement_criteria_data` SET `ScriptName`='achievement_school_of_hard_knocks' WHERE `criteria_id` IN (6641,6642,6643,6644); +UPDATE `achievement_criteria_data` SET `ScriptName`='achievement_storm_glory' WHERE `criteria_id`=3693; diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index ec384f9a995..cc8a3b96961 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -96,6 +96,7 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria) case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM: case ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT: case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT: + case ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE: break; default: sLog.outErrorDb("Table `achievement_criteria_data` has data for non-supported criteria type (Entry: %u Type: %u), ignored.", criteria->ID, criteria->requiredType); @@ -405,7 +406,7 @@ void AchievementMgr::Reset() CheckAllAchievementCriteria(); } -void AchievementMgr::ResetAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1, uint32 miscvalue2) +void AchievementMgr::ResetAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1, uint32 miscvalue2, bool evenIfCriteriaComplete) { if ((sLog.getLogFilter() & LOG_FILTER_ACHIEVEMENT_UPDATES) == 0) sLog.outDetail("AchievementMgr::ResetAchievementCriteria(%u, %u, %u)", type, miscvalue1, miscvalue2); @@ -422,26 +423,18 @@ void AchievementMgr::ResetAchievementCriteria(AchievementCriteriaTypes type, uin if (!achievement) continue; - // don't update already completed criteria - if (IsCompletedCriteria(achievementCriteria,achievement)) + // don't update already completed criteria if not forced or achievement already complete + if ((IsCompletedCriteria(achievementCriteria, achievement) && !evenIfCriteriaComplete) || HasAchieved(achievement->ID)) continue; - switch (type) - { - case ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE: // have total statistic also not expected to be reset - case ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE: // have total statistic also not expected to be reset - if (achievementCriteria->healing_done.flag == miscvalue1 && - achievementCriteria->healing_done.mapid == miscvalue2) - SetCriteriaProgress(achievementCriteria, 0, PROGRESS_SET); - break; - case ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA: // have total statistic also not expected to be reset - // reset only the criteria having the miscvalue1 condition - if (achievementCriteria->win_rated_arena.flag == miscvalue1) - SetCriteriaProgress(achievementCriteria, 0, PROGRESS_SET); - break; - default: // reset all cases + for (uint8 j = 0; j < MAX_CRITERIA_REQUIREMENTS; ++j) + if (achievementCriteria->additionalRequrements[j].additionalRequirement_type == miscvalue1 && + (!achievementCriteria->additionalRequrements[j].additionalRequirement_value || + achievementCriteria->additionalRequrements[j].additionalRequirement_value == miscvalue2)) + { + SetCriteriaProgress(achievementCriteria, 0, PROGRESS_SET); break; - } + } } } @@ -793,7 +786,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui if (achievementCriteria->win_bg.bgMapID != GetPlayer()->GetMapId()) continue; - if (achievementCriteria->win_bg.additionalRequirement1_type) + if (achievementCriteria->additionalRequrements[0].additionalRequirement_type) { // those requirements couldn't be found in the dbc AchievementCriteriaDataSet const* data = achievementmgr.GetCriteriaDataSet(achievementCriteria); @@ -1469,6 +1462,11 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui SetCriteriaProgress(achievementCriteria, miscvalue1, PROGRESS_ACCUMULATE); break; } + case ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE: + if (!miscvalue1 || miscvalue1 != achievementCriteria->bg_objective.objectiveId) + continue; + SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE); + break; // std case: not exist in DBC, not triggered in code as result case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALTH: case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_SPELLPOWER: @@ -1479,7 +1477,6 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui break; // FIXME: not triggered in code as result, need to implement case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_RAID: - case ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE: case ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA: case ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA: case ACHIEVEMENT_CRITERIA_TYPE_PLAY_ARENA: @@ -1582,6 +1579,8 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL: case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2: return progress->counter >= achievementCriteria->cast_spell.castCount; + case ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE: + return progress->counter >= achievementCriteria->bg_objective.completeCount; case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL: return progress->counter >= 1; case ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM: @@ -2165,7 +2164,7 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData() switch(criteria->requiredType) { case ACHIEVEMENT_CRITERIA_TYPE_WIN_BG: - if (!criteria->win_bg.additionalRequirement1_type) + if (!criteria->additionalRequrements[0].additionalRequirement_type) continue; break; case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE: @@ -2222,6 +2221,8 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData() if (criteria->loot_type.lootTypeCount != 1) continue; break; + case ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE: + break; // any cases default: // type not use DB data, ignore continue; } diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h index 301028e3e7b..f49c2954c4e 100644 --- a/src/server/game/Achievements/AchievementMgr.h +++ b/src/server/game/Achievements/AchievementMgr.h @@ -245,8 +245,8 @@ class AchievementMgr static void DeleteFromDB(uint32 lowguid); void LoadFromDB(QueryResult_AutoPtr achievementResult, QueryResult_AutoPtr criteriaResult); void SaveToDB(); - void ResetAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1=0, uint32 miscvalue2=0); - void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1=0, uint32 miscvalue2=0, Unit *unit=NULL, uint32 time=0); + void ResetAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1 = 0, uint32 miscvalue2 = 0, bool evenIfCriteriaComplete = false); + void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1 = 0, uint32 miscvalue2 = 0, Unit *unit = NULL, uint32 time = 0); void CompletedAchievement(AchievementEntry const* entry); void CheckAllAchievementCriteria(); void SendAllAchievementData(); diff --git a/src/server/game/BattleGrounds/BattleGround.cpp b/src/server/game/BattleGrounds/BattleGround.cpp index bc2c629aaf5..7bce925d90a 100644 --- a/src/server/game/BattleGrounds/BattleGround.cpp +++ b/src/server/game/BattleGrounds/BattleGround.cpp @@ -1002,6 +1002,7 @@ void BattleGround::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac plr->TeleportToBGEntryPoint(); sLog.outDetail("BATTLEGROUND: Removed player %s from BattleGround.", plr->GetName()); + plr->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, ACHIEVEMENT_CRITERIA_CONDITION_MAP, GetMapId(), true); } //battleground object will be deleted next BattleGround::Update() call @@ -1302,6 +1303,7 @@ void BattleGround::UpdatePlayerScore(Player *Source, uint32 type, uint32 value, break; case SCORE_DEATHS: // Deaths itr->second->Deaths += value; + Source->GetAchievementMgr().ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, ACHIEVEMENT_CRITERIA_CONDITION_NO_DEATH); break; case SCORE_HONORABLE_KILLS: // Honorable kills itr->second->HonorableKills += value; diff --git a/src/server/game/BattleGrounds/Zones/BattleGroundAA.cpp b/src/server/game/BattleGrounds/Zones/BattleGroundAA.cpp index 56cf3ebed15..921af6c9f32 100644 --- a/src/server/game/BattleGrounds/Zones/BattleGroundAA.cpp +++ b/src/server/game/BattleGrounds/Zones/BattleGroundAA.cpp @@ -81,4 +81,3 @@ bool BattleGroundAA::SetupBattleGround() { return true; } - diff --git a/src/server/game/BattleGrounds/Zones/BattleGroundAA.h b/src/server/game/BattleGrounds/Zones/BattleGroundAA.h index a13833697cf..65ae6e6f5dd 100644 --- a/src/server/game/BattleGrounds/Zones/BattleGroundAA.h +++ b/src/server/game/BattleGrounds/Zones/BattleGroundAA.h @@ -50,4 +50,3 @@ class BattleGroundAA : public BattleGround void HandleKillPlayer(Player* player, Player *killer); }; #endif - diff --git a/src/server/game/BattleGrounds/Zones/BattleGroundAB.cpp b/src/server/game/BattleGrounds/Zones/BattleGroundAB.cpp index 38671e85597..a741a4ba26c 100644 --- a/src/server/game/BattleGrounds/Zones/BattleGroundAB.cpp +++ b/src/server/game/BattleGrounds/Zones/BattleGroundAB.cpp @@ -693,9 +693,11 @@ void BattleGroundAB::UpdatePlayerScore(Player *Source, uint32 type, uint32 value { case SCORE_BASES_ASSAULTED: ((BattleGroundABScore*)itr->second)->BasesAssaulted += value; + Source->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AB_OBJECTIVE_ASSAULT_BASE); break; case SCORE_BASES_DEFENDED: ((BattleGroundABScore*)itr->second)->BasesDefended += value; + Source->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AB_OBJECTIVE_DEFEND_BASE); break; default: BattleGround::UpdatePlayerScore(Source,type,value, doAddHonor); diff --git a/src/server/game/BattleGrounds/Zones/BattleGroundAB.h b/src/server/game/BattleGrounds/Zones/BattleGroundAB.h index 3072f8beafd..fb4682490a5 100644 --- a/src/server/game/BattleGrounds/Zones/BattleGroundAB.h +++ b/src/server/game/BattleGrounds/Zones/BattleGroundAB.h @@ -172,6 +172,12 @@ enum BG_AB_Sounds BG_AB_SOUND_NEAR_VICTORY = 8456 }; +enum BG_AB_Objectives +{ + AB_OBJECTIVE_ASSAULT_BASE = 122, + AB_OBJECTIVE_DEFEND_BASE = 123 +}; + #define BG_AB_NotABBGWeekendHonorTicks 330 #define BG_AB_ABBGWeekendHonorTicks 200 #define BG_AB_NotABBGWeekendReputationTicks 200 diff --git a/src/server/game/BattleGrounds/Zones/BattleGroundAV.cpp b/src/server/game/BattleGrounds/Zones/BattleGroundAV.cpp index 67725fd3f39..7be793ad1f2 100644 --- a/src/server/game/BattleGrounds/Zones/BattleGroundAV.cpp +++ b/src/server/game/BattleGrounds/Zones/BattleGroundAV.cpp @@ -541,15 +541,19 @@ void BattleGroundAV::UpdatePlayerScore(Player* Source, uint32 type, uint32 value { case SCORE_GRAVEYARDS_ASSAULTED: ((BattleGroundAVScore*)itr->second)->GraveyardsAssaulted += value; + Source->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_ASSAULT_GRAVEYARD); break; case SCORE_GRAVEYARDS_DEFENDED: ((BattleGroundAVScore*)itr->second)->GraveyardsDefended += value; + Source->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_DEFEND_GRAVEYARD); break; case SCORE_TOWERS_ASSAULTED: ((BattleGroundAVScore*)itr->second)->TowersAssaulted += value; + Source->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_ASSAULT_TOWER); break; case SCORE_TOWERS_DEFENDED: ((BattleGroundAVScore*)itr->second)->TowersDefended += value; + Source->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_DEFEND_TOWER); break; case SCORE_MINES_CAPTURED: ((BattleGroundAVScore*)itr->second)->MinesCaptured += value; diff --git a/src/server/game/BattleGrounds/Zones/BattleGroundAV.h b/src/server/game/BattleGrounds/Zones/BattleGroundAV.h index 6d95c7bbc5d..837fba091c4 100644 --- a/src/server/game/BattleGrounds/Zones/BattleGroundAV.h +++ b/src/server/game/BattleGrounds/Zones/BattleGroundAV.h @@ -1499,6 +1499,14 @@ enum BG_AV_QuestIds AV_QUEST_H_RIDER_TAME = 7001 }; +enum BG_AV_Objectives +{ + AV_OBJECTIVE_ASSAULT_TOWER = 61, + AV_OBJECTIVE_ASSAULT_GRAVEYARD = 63, + AV_OBJECTIVE_DEFEND_TOWER = 64, + AV_OBJECTIVE_DEFEND_GRAVEYARD = 65 +}; + struct BG_AV_NodeInfo { uint16 TotalOwner; diff --git a/src/server/game/BattleGrounds/Zones/BattleGroundEY.cpp b/src/server/game/BattleGrounds/Zones/BattleGroundEY.cpp index 20f023e4c2a..556587b0711 100644 --- a/src/server/game/BattleGrounds/Zones/BattleGroundEY.cpp +++ b/src/server/game/BattleGrounds/Zones/BattleGroundEY.cpp @@ -817,6 +817,7 @@ void BattleGroundEY::UpdatePlayerScore(Player *Source, uint32 type, uint32 value { case SCORE_FLAG_CAPTURES: // flags captured ((BattleGroundEYScore*)itr->second)->FlagCaptures += value; + Source->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, EY_OBJECTIVE_CAPTURE_FLAG); break; default: BattleGround::UpdatePlayerScore(Source, type, value, doAddHonor); diff --git a/src/server/game/BattleGrounds/Zones/BattleGroundEY.h b/src/server/game/BattleGrounds/Zones/BattleGroundEY.h index 6b1ec6ced59..66442445a1b 100644 --- a/src/server/game/BattleGrounds/Zones/BattleGroundEY.h +++ b/src/server/game/BattleGrounds/Zones/BattleGroundEY.h @@ -240,6 +240,11 @@ enum EYBattleGroundPointState EY_POINT_UNDER_CONTROL = 3 }; +enum BG_EY_Objectives +{ + EY_OBJECTIVE_CAPTURE_FLAG = 183 +}; + struct BattleGroundEYPointIconsStruct { BattleGroundEYPointIconsStruct(uint32 _WorldStateControlIndex, uint32 _WorldStateAllianceControlledIndex, uint32 _WorldStateHordeControlledIndex) diff --git a/src/server/game/BattleGrounds/Zones/BattleGroundIC.h b/src/server/game/BattleGrounds/Zones/BattleGroundIC.h index e49ea01e850..e360014df69 100644 --- a/src/server/game/BattleGrounds/Zones/BattleGroundIC.h +++ b/src/server/game/BattleGrounds/Zones/BattleGroundIC.h @@ -27,6 +27,12 @@ enum Buffs QUARRY = 68720 }; +enum BG_IC_Objectives +{ + IC_OBJECTIVE_ASSAULT_BASE = 245, + IC_OBJECTIVE_DEFEND_BASE = 246 +}; + class BattleGroundICScore : public BattleGroundScore { public: diff --git a/src/server/game/BattleGrounds/Zones/BattleGroundWS.cpp b/src/server/game/BattleGrounds/Zones/BattleGroundWS.cpp index 2521e93ebcf..8c5949e106f 100644 --- a/src/server/game/BattleGrounds/Zones/BattleGroundWS.cpp +++ b/src/server/game/BattleGrounds/Zones/BattleGroundWS.cpp @@ -765,9 +765,11 @@ void BattleGroundWS::UpdatePlayerScore(Player *Source, uint32 type, uint32 value { case SCORE_FLAG_CAPTURES: // flags captured ((BattleGroundWGScore*)itr->second)->FlagCaptures += value; + Source->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, WS_OBJECTIVE_CAPTURE_FLAG); break; case SCORE_FLAG_RETURNS: // flags returned ((BattleGroundWGScore*)itr->second)->FlagReturns += value; + Source->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, WS_OBJECTIVE_RETURN_FLAG); break; default: BattleGround::UpdatePlayerScore(Source, type, value, doAddHonor); diff --git a/src/server/game/BattleGrounds/Zones/BattleGroundWS.h b/src/server/game/BattleGrounds/Zones/BattleGroundWS.h index ff3a3c893ff..2e712637f39 100644 --- a/src/server/game/BattleGrounds/Zones/BattleGroundWS.h +++ b/src/server/game/BattleGrounds/Zones/BattleGroundWS.h @@ -138,6 +138,12 @@ enum BG_WS_CarrierDebuffs WS_SPELL_BRUTAL_ASSAULT = 46393 }; +enum BG_WS_Objectives +{ + WS_OBJECTIVE_CAPTURE_FLAG = 42, + WS_OBJECTIVE_RETURN_FLAG = 44 +}; + class BattleGroundWGScore : public BattleGroundScore { public: diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 8caa77cddff..4d8cef56b3f 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -69,12 +69,14 @@ enum AchievementFlags ACHIEVEMENT_FLAG_REALM_FIRST_KILL = 0x00000200, // }; +#define MAX_CRITERIA_REQUIREMENTS 2 + enum AchievementCriteriaCondition { ACHIEVEMENT_CRITERIA_CONDITION_NONE = 0, - ACHIEVEMENT_CRITERIA_CONDITION_NO_DEATH = 1, + ACHIEVEMENT_CRITERIA_CONDITION_NO_DEATH = 1, // reset progress on death ACHIEVEMENT_CRITERIA_CONDITION_UNK1 = 2, // only used in "Complete a daily quest every day for five consecutive days" - ACHIEVEMENT_CRITERIA_CONDITION_MAP = 3, // requires you to be on specific map + ACHIEVEMENT_CRITERIA_CONDITION_MAP = 3, // requires you to be on specific map, reset at change ACHIEVEMENT_CRITERIA_CONDITION_NO_LOOSE = 4, // only used in "Win 10 arenas without losing" ACHIEVEMENT_CRITERIA_CONDITION_UNK2 = 9, // unk ACHIEVEMENT_CRITERIA_CONDITION_UNK3 = 13, // unk diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index 562cd740c72..a3aed724166 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -90,10 +90,6 @@ struct AchievementCriteriaEntry { uint32 bgMapID; // 3 uint32 winCount; // 4 - uint32 additionalRequirement1_type; // 5 additional requirement 1 type - uint32 additionalRequirement1_value; // 6 additional requirement 1 value - uint32 additionalRequirement2_type; // 7 additional requirement 2 type - uint32 additionalRequirement2_value; // 8 additional requirement 1 value } win_bg; // ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL = 5 @@ -210,6 +206,13 @@ struct AchievementCriteriaEntry uint32 castCount; // 4 } cast_spell; + // ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE + struct + { + uint32 objectiveId; // 3 + uint32 completeCount; // 4 + } bg_objective; + // ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA = 31 struct { @@ -247,7 +250,6 @@ struct AchievementCriteriaEntry { uint32 unused; // 3 uint32 count; // 4 - uint32 flag; // 5 4=in a row } win_rated_arena; // ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38 @@ -375,8 +377,6 @@ struct AchievementCriteriaEntry { uint32 unused; // 3 uint32 count; // 4 - uint32 flag; // 5 =3 for battleground healing - uint32 mapid; // 6 } healing_done; // ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM = 57 @@ -485,12 +485,15 @@ struct AchievementCriteriaEntry { uint32 field3; // 3 main requirement uint32 count; // 4 main requirement count - uint32 additionalRequirement1_type; // 5 additional requirement 1 type - uint32 additionalRequirement1_value; // 6 additional requirement 1 value - uint32 additionalRequirement2_type; // 7 additional requirement 2 type - uint32 additionalRequirement2_value; // 8 additional requirement 1 value } raw; }; + + struct + { + uint32 additionalRequirement_type; + uint32 additionalRequirement_value; + } additionalRequrements[MAX_CRITERIA_REQUIREMENTS]; + //char* name[16]; // 9-24 //uint32 name_flags; // 25 uint32 completionFlag; // 26 diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 64644bdbe8e..292c14f1a22 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -38,6 +38,7 @@ void AddSC_npc_professions(); void AddSC_npc_innkeeper(); void AddSC_npcs_special(); void AddSC_npc_taxi(); +void AddSC_achievement_scripts(); //eastern kingdoms void AddSC_alterac_valley(); //Alterac Valley @@ -598,6 +599,7 @@ void AddWorldScripts() AddSC_npc_innkeeper(); AddSC_npcs_special(); AddSC_npc_taxi(); + AddSC_achievement_scripts(); #endif } diff --git a/win/VC90/scripts.vcproj b/win/VC90/scripts.vcproj index 0141f0834bd..38c5c1b6b25 100644 --- a/win/VC90/scripts.vcproj +++ b/win/VC90/scripts.vcproj @@ -2988,6 +2988,10 @@ Name="World" > <File + RelativePath="..\..\src\server\scripts\World\achievement_scripts.cpp" + > + </File> + <File RelativePath="..\..\src\server\scripts\World\areatrigger_scripts.cpp" > </File> |