Compare commits

...

3 Commits

Author SHA1 Message Date
Grimfeather
02647cd191 TBC - Shattrath phasing (#862)
phase Shattered Sun npcs until TBC tier 5
2025-11-17 15:39:19 +01:00
Grimfeather
3981d381ee Phase Draenei at Forest Song in Ashenvale (#863)
added to optional_vanilla_phasing
2025-11-17 15:25:08 +01:00
Nicolas Lebacq
9bfb2b06c5 fix: Auto-assigned highest title as current title for PvP titles when cleaning up. (#861)
pvp titles are now auto assigned
2025-11-17 11:46:49 +01:00
5 changed files with 45 additions and 27 deletions

View File

@@ -63,8 +63,9 @@ UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_tbc_t4' WHERE `entry` IN
-- Phasing TBC vendors and trainers - Copies are added to replace them until TBC T4. -- Phasing TBC vendors and trainers - Copies are added to replace them until TBC T4.
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_tbc_t4' WHERE `entry` IN (18754, 18771, 19187, 21087); UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_tbc_t4' WHERE `entry` IN (18754, 18771, 19187, 21087);
-- TBC, Terrace of Light, phasing Shattered Sun offensive NPCs -- TBC, phasing Shattered Sun offensive NPCs in Shattrath
UPDATE `creature` SET `phaseMask` = @IPPPHASE WHERE `id1` IN (24932, 25115, 25142, 25153, 25155); UPDATE `creature` SET `phaseMask` = @IPPPHASE WHERE `id1` IN (17076, 19475, 24932, 24938, 25115, 25134, 25135, 25136, 25137, 25138, 25141, 25142, 25143, 25153, 25155);
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_tbc_t5' WHERE `entry` IN (18594, 25167, 27666, 27667);
-- TBC, Terrace of Light, phasing T5 game objects -- TBC, Terrace of Light, phasing T5 game objects
UPDATE `gameobject_template` SET `ScriptName` = 'gobject_ipp_tbc_t4' WHERE `entry` IN UPDATE `gameobject_template` SET `ScriptName` = 'gobject_ipp_tbc_t4' WHERE `entry` IN
@@ -73,9 +74,6 @@ UPDATE `gameobject_template` SET `ScriptName` = 'gobject_ipp_tbc_t4' WHERE `entr
187356, -- Shattered Sun Banner 187356, -- Shattered Sun Banner
187357); -- Shattered Sun Banner 187357); -- Shattered Sun Banner
-- Phasing for General Tiras'alan and Dathris Sunstriker - prevent early access to Isle of Quel'Danas
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_tbc_t5' WHERE `entry` IN (25167, 18594);
-- Dragons of Nightmare -- Dragons of Nightmare
UPDATE `creature` SET `phaseMask` = @IPPPHASE WHERE `id1` IN (14887, 14888, 14889, 14890); UPDATE `creature` SET `phaseMask` = @IPPPHASE WHERE `id1` IN (14887, 14888, 14889, 14890);

View File

@@ -73,6 +73,11 @@ UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_tbc' WHERE `entry` IN (
37915 -- Timothy Cunningham, The Bulwark, Flight Master 37915 -- Timothy Cunningham, The Bulwark, Flight Master
); );
SET @IPPPHASE := 65536;
-- Forest Song - Ashenvale - Draenei camp
UPDATE `creature` SET `phaseMask` = @IPPPHASE WHERE `id1` IN (17291, 17303, 17406, 17409, 17412, 17541, 22935, 22936);
/* Remove interactions between Cersei, Lorrin and the orcs in Stonard */ /* Remove interactions between Cersei, Lorrin and the orcs in Stonard */
UPDATE `creature_template` SET `AIName` = '' WHERE `entry` IN (12807, 17109, 27705); UPDATE `creature_template` SET `AIName` = '' WHERE `entry` IN (12807, 17109, 27705);

View File

@@ -18,7 +18,7 @@ bool IndividualProgression::hasPassedProgression(Player* player, ProgressionStat
{ {
return false; return false;
} }
return player->GetPlayerSetting("mod-individual-progression", SETTING_PROGRESSION_STATE).value >= state; return player->GetPlayerSetting("mod-individual-progression", SETTING_PROGRESSION_STATE).value >= state;
} }
@@ -33,7 +33,7 @@ void IndividualProgression::UpdateProgressionState(Player* player, ProgressionSt
{ {
return; return;
} }
uint8 currentState = player->GetPlayerSetting("mod-individual-progression", SETTING_PROGRESSION_STATE).value; uint8 currentState = player->GetPlayerSetting("mod-individual-progression", SETTING_PROGRESSION_STATE).value;
if (newState > currentState) if (newState > currentState)
{ {
@@ -52,7 +52,7 @@ void IndividualProgression::CheckAdjustments(Player* player) const
{ {
return; return;
} }
if (!hasPassedProgression(player, PROGRESSION_PRE_TBC) || (!hasPassedProgression(player, PROGRESSION_PRE_TBC) && (player->GetLevel() <= IP_LEVEL_VANILLA))) if (!hasPassedProgression(player, PROGRESSION_PRE_TBC) || (!hasPassedProgression(player, PROGRESSION_PRE_TBC) && (player->GetLevel() <= IP_LEVEL_VANILLA)))
{ {
float adjustmentApplyPercent = (player->GetLevel() - 10.0f) / 50.0f; float adjustmentApplyPercent = (player->GetLevel() - 10.0f) / 50.0f;
@@ -71,13 +71,13 @@ void IndividualProgression::CheckAdjustments(Player* player) const
AdjustStats(player, computedPowerAdjustment, tbcHealthAdjustment); AdjustStats(player, computedPowerAdjustment, tbcHealthAdjustment);
} }
if (player->getClass() == CLASS_HUNTER) if (player->getClass() == CLASS_HUNTER)
{ {
// Remove the 15% built-in ranged haste that was added to hunters in WotLK - This lets us add haste spells back to quivers // Remove the 15% built-in ranged haste that was added to hunters in WotLK - This lets us add haste spells back to quivers
player->RemoveAura(RANGED_HASTE_SPELL); player->RemoveAura(RANGED_HASTE_SPELL);
player->CastSpell(player, RANGED_HASTE_SPELL, false); player->CastSpell(player, RANGED_HASTE_SPELL, false);
} }
} }
void IndividualProgression::AdjustStats(Player* player, float computedPowerAdjustment, float computedHealthAdjustment) void IndividualProgression::AdjustStats(Player* player, float computedPowerAdjustment, float computedHealthAdjustment)
@@ -87,7 +87,7 @@ void IndividualProgression::AdjustStats(Player* player, float computedPowerAdjus
player->RemoveAura(ABSORB_SPELL); player->RemoveAura(ABSORB_SPELL);
player->CastCustomSpell(player, ABSORB_SPELL, &bp1, nullptr, nullptr, false); player->CastCustomSpell(player, ABSORB_SPELL, &bp1, nullptr, nullptr, false);
player->RemoveAura(HP_AURA_SPELL); player->RemoveAura(HP_AURA_SPELL);
player->CastCustomSpell(player, HP_AURA_SPELL, &bp2, nullptr, nullptr, false); player->CastCustomSpell(player, HP_AURA_SPELL, &bp2, nullptr, nullptr, false);
} }
@@ -165,7 +165,7 @@ bool IndividualProgression::hasCustomProgressionValue(uint32 creatureEntry)
bool IndividualProgression::isAttuned(Player* player) bool IndividualProgression::isAttuned(Player* player)
{ {
if ((player->GetQuestStatus(NAXX40_ATTUNEMENT_1) == QUEST_STATUS_REWARDED) || if ((player->GetQuestStatus(NAXX40_ATTUNEMENT_1) == QUEST_STATUS_REWARDED) ||
(player->GetQuestStatus(NAXX40_ATTUNEMENT_2) == QUEST_STATUS_REWARDED) || (player->GetQuestStatus(NAXX40_ATTUNEMENT_2) == QUEST_STATUS_REWARDED) ||
(player->GetQuestStatus(NAXX40_ATTUNEMENT_3) == QUEST_STATUS_REWARDED)) (player->GetQuestStatus(NAXX40_ATTUNEMENT_3) == QUEST_STATUS_REWARDED))
{ {
@@ -276,7 +276,7 @@ void IndividualProgression::checkIPProgression(Player* killer)
UpdateProgressionState(killer, PROGRESSION_NAXX40); UpdateProgressionState(killer, PROGRESSION_NAXX40);
} }
return; return;
} }
else if (killer->HasAchieved(C_THUN_KILL)) // 687 else if (killer->HasAchieved(C_THUN_KILL)) // 687
{ {
if (currentState < PROGRESSION_AQ) if (currentState < PROGRESSION_AQ)
@@ -402,9 +402,9 @@ void IndividualProgression::UpdateProgressionQuests(Player* player)
{ {
uint32 PROGRESSION_QUEST = 66000; uint32 PROGRESSION_QUEST = 66000;
PROGRESSION_QUEST = PROGRESSION_QUEST + i; PROGRESSION_QUEST = PROGRESSION_QUEST + i;
if (player->GetQuestStatus(PROGRESSION_QUEST) == QUEST_STATUS_REWARDED) if (player->GetQuestStatus(PROGRESSION_QUEST) == QUEST_STATUS_REWARDED)
player->RemoveRewardedQuest(PROGRESSION_QUEST); player->RemoveRewardedQuest(PROGRESSION_QUEST);
} }
// add hidden progression quests // add hidden progression quests
@@ -413,7 +413,7 @@ void IndividualProgression::UpdateProgressionQuests(Player* player)
ProgressionState PROGRESSION_STATE = static_cast<ProgressionState>(i); ProgressionState PROGRESSION_STATE = static_cast<ProgressionState>(i);
uint32 PROGRESSION_QUEST = 66000; uint32 PROGRESSION_QUEST = 66000;
PROGRESSION_QUEST = PROGRESSION_QUEST + i; PROGRESSION_QUEST = PROGRESSION_QUEST + i;
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_STATE)) && (player->GetQuestStatus(PROGRESSION_QUEST) != QUEST_STATUS_REWARDED)) if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_STATE)) && (player->GetQuestStatus(PROGRESSION_QUEST) != QUEST_STATUS_REWARDED))
{ {
Quest const* quest = sObjectMgr->GetQuestTemplate(PROGRESSION_QUEST); Quest const* quest = sObjectMgr->GetQuestTemplate(PROGRESSION_QUEST);
@@ -428,7 +428,7 @@ void IndividualProgression::UpdateProgressionQuests(Player* player)
void IndividualProgression::UpdateProgressionAchievements(Player* player, uint16 achievementID) void IndividualProgression::UpdateProgressionAchievements(Player* player, uint16 achievementID)
{ {
AchievementEntry const* entry = sAchievementStore.LookupEntry(achievementID); AchievementEntry const* entry = sAchievementStore.LookupEntry(achievementID);
if (entry) if (entry)
{ {
player->CompletedAchievement(entry); player->CompletedAchievement(entry);
@@ -480,7 +480,7 @@ void IndividualProgression::CleanUpVanillaPvpTitles(Player* player)
} }
} }
} }
int8_t highestRank = -1; int8_t highestRank = -1;
for (int8_t i = 13; i > -1; --i) for (int8_t i = 13; i > -1; --i)
@@ -500,15 +500,15 @@ void IndividualProgression::CleanUpVanillaPvpTitles(Player* player)
{ {
continue; continue;
} }
RemovePlayerAchievement(playerGUID, achievementId); RemovePlayerAchievement(playerGUID, achievementId);
} }
// remove all hidden pvp quests // remove all hidden pvp quests
for (uint8 i = 1; i <= 14; ++i) for (uint8 i = 1; i <= 14; ++i)
{ {
uint32 questId = PVP_QUEST + i; uint32 questId = PVP_QUEST + i;
if (player->GetQuestStatus(questId) == QUEST_STATUS_REWARDED) if (player->GetQuestStatus(questId) == QUEST_STATUS_REWARDED)
{ {
player->RemoveRewardedQuest(questId); player->RemoveRewardedQuest(questId);
@@ -535,10 +535,10 @@ void IndividualProgression::CleanUpVanillaPvpTitles(Player* player)
} }
} }
} }
++i; ++i;
} }
} }
void IndividualProgression::AwardEarnedVanillaPvpTitles(Player* player) void IndividualProgression::AwardEarnedVanillaPvpTitles(Player* player)
@@ -567,7 +567,7 @@ void IndividualProgression::AwardEarnedVanillaPvpTitles(Player* player)
}; };
if (!sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_TBC) || VanillaPvpTitlesEarnPostVanilla) if (!sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_TBC) || VanillaPvpTitlesEarnPostVanilla)
{ {
int highestTitle = -1; int highestTitle = -1;
// add highest title // add highest title
@@ -588,7 +588,12 @@ void IndividualProgression::AwardEarnedVanillaPvpTitles(Player* player)
{ {
player->SetTitle(sCharTitlesStore.LookupEntry(title.TitleId), true); player->SetTitle(sCharTitlesStore.LookupEntry(title.TitleId), true);
} }
} }
if (highestTitle != -1)
{
player->SetCurrentTitle(sCharTitlesStore.LookupEntry(highestTitle));
}
} }
} }
} }
@@ -636,7 +641,7 @@ private:
sIndividualProgression->VanillaPvpKillRank13 = sConfigMgr->GetOption<uint32>("IndividualProgression.VanillaPvpKillRequirement.Rank13", 18000); sIndividualProgression->VanillaPvpKillRank13 = sConfigMgr->GetOption<uint32>("IndividualProgression.VanillaPvpKillRequirement.Rank13", 18000);
sIndividualProgression->VanillaPvpKillRank14 = sConfigMgr->GetOption<uint32>("IndividualProgression.VanillaPvpKillRequirement.Rank14", 24000); sIndividualProgression->VanillaPvpKillRank14 = sConfigMgr->GetOption<uint32>("IndividualProgression.VanillaPvpKillRequirement.Rank14", 24000);
sIndividualProgression->VanillaPvpTitlesKeepPostVanilla = sConfigMgr->GetOption<bool>("IndividualProgression.VanillaPvpTitlesPersistAfterVanilla", true); sIndividualProgression->VanillaPvpTitlesKeepPostVanilla = sConfigMgr->GetOption<bool>("IndividualProgression.VanillaPvpTitlesPersistAfterVanilla", true);
sIndividualProgression->VanillaPvpTitlesEarnPostVanilla = sConfigMgr->GetOption<bool>("IndividualProgression.VanillaPvpEarnTitlesAfterVanilla", false); sIndividualProgression->VanillaPvpTitlesEarnPostVanilla = sConfigMgr->GetOption<bool>("IndividualProgression.VanillaPvpEarnTitlesAfterVanilla", false);
sIndividualProgression->DisableRDF = sConfigMgr->GetOption<bool>("IndividualProgression.DisableRDF", false); sIndividualProgression->DisableRDF = sConfigMgr->GetOption<bool>("IndividualProgression.DisableRDF", false);
sIndividualProgression->excludeAccounts = sConfigMgr->GetOption<bool>("IndividualProgression.ExcludeAccounts", true); sIndividualProgression->excludeAccounts = sConfigMgr->GetOption<bool>("IndividualProgression.ExcludeAccounts", true);
sIndividualProgression->excludedAccountsRegex = sConfigMgr->GetOption<std::string>("IndividualProgression.ExcludedAccountsRegex", "^RNDBOT.*"); sIndividualProgression->excludedAccountsRegex = sConfigMgr->GetOption<std::string>("IndividualProgression.ExcludedAccountsRegex", "^RNDBOT.*");
@@ -687,7 +692,7 @@ public:
if (sIndividualProgression->DisableRDF) if (sIndividualProgression->DisableRDF)
{ {
sWorld->setIntConfig(CONFIG_LFG_OPTIONSMASK, 4); sWorld->setIntConfig(CONFIG_LFG_OPTIONSMASK, 4);
} }
} }
}; };

View File

@@ -139,6 +139,7 @@ enum ProgressionAreas
AREA_ICE_THISTLE_HILLS = 2247, AREA_ICE_THISTLE_HILLS = 2247,
AREA_THE_MARRIS_STEAD = 2260, AREA_THE_MARRIS_STEAD = 2260,
AREA_LIGHTS_HOPE = 2268, AREA_LIGHTS_HOPE = 2268,
AREA_FOREST_SONG = 2358,
AREA_DRACO_DAR = 2421, AREA_DRACO_DAR = 2421,
AREA_RISE_OF_THE_DEFILER = 2517, AREA_RISE_OF_THE_DEFILER = 2517,
AREA_PESTILENT_SCAR = 2622, AREA_PESTILENT_SCAR = 2622,

View File

@@ -1026,6 +1026,15 @@ public:
player->CastSpell(player, IPP_PHASE, false); player->CastSpell(player, IPP_PHASE, false);
} }
break; break;
case AREA_FOREST_SONG:
if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_TBC))
{
player->RemoveAura(IPP_PHASE);
player->RemoveAura(IPP_PHASE_II);
player->RemoveAura(IPP_PHASE_III);
player->CastSpell(player, IPP_PHASE, false);
}
break;
case AREA_ARGENT_TOURNAMENT_GROUNDS: case AREA_ARGENT_TOURNAMENT_GROUNDS:
case AREA_ARGENT_SUNREAVER_PAVILION: case AREA_ARGENT_SUNREAVER_PAVILION:
case AREA_ARGENT_SILVER_COVENANT_PAVILION: case AREA_ARGENT_SILVER_COVENANT_PAVILION: