mirror of
https://github.com/ZhengPeiRu21/mod-individual-progression
synced 2025-11-29 23:44:51 +08:00
Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3dbc2e0a56 | ||
|
|
f5bfc52729 | ||
|
|
a84a3452d3 | ||
|
|
be4496c034 | ||
|
|
d1bb3f2f23 | ||
|
|
f3a82db829 | ||
|
|
ba20397ea1 | ||
|
|
b3cb2bedae | ||
|
|
35e9f4dbdd | ||
|
|
4ad27208ff | ||
|
|
fa7d7ed502 | ||
|
|
a11fd7113e |
@@ -184,6 +184,8 @@ IndividualProgression.FishingFix = 1
|
|||||||
# Water Breath Timer to 1 Minute (Vanilla value, changed to 3 Minutes in WotLK)
|
# Water Breath Timer to 1 Minute (Vanilla value, changed to 3 Minutes in WotLK)
|
||||||
# Disable Quest Object sparkle and object quest markers (added in patch 2.3)
|
# Disable Quest Object sparkle and object quest markers (added in patch 2.3)
|
||||||
# Enable PlayerSettings (required by Individual Progression module)
|
# Enable PlayerSettings (required by Individual Progression module)
|
||||||
|
# Disable the LFG tool, aside from special Holiday events otherwise inaccessible
|
||||||
|
# Do not enforce DBC Item Attributes, so that Vanilla item changes can override client values
|
||||||
#
|
#
|
||||||
# Default: 1 - Enabled
|
# Default: 1 - Enabled
|
||||||
# 0 - Disabled
|
# 0 - Disabled
|
||||||
@@ -331,7 +333,8 @@ IndividualProgression.PvPGearRequirements = 1
|
|||||||
#
|
#
|
||||||
# IndividualProgression.DisableRDF
|
# IndividualProgression.DisableRDF
|
||||||
# Description: Enable or disable the Random Dungeon Finder feature within the context of Individual Progression.
|
# Description: Enable or disable the Random Dungeon Finder feature within the context of Individual Progression.
|
||||||
# Queing for specific dungeons will still be possible. (See worldserver.conf for total LFG removal).
|
# Queuing for specific dungeons and Holiday Events will still be possible. (Use DungeonFinder.OptionsMask in worldserver.conf to completely disable the LFG tool.)
|
||||||
|
# Please note that the LFG tool is disabled (except for Holiday events) by default if SimpleConfigOverride is enabled.
|
||||||
# Default: 0 - Enabled
|
# Default: 0 - Enabled
|
||||||
# 1 - Disabled
|
# 1 - Disabled
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ REPLACE INTO `creature_template` (`entry`, `modelid1`, `name`, `subname`, `minle
|
|||||||
(351080, 16605, "Naxxramas Follower", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 59.2, 2000, 1265, 1.0, 1.0, 8, 32832, 2048, 0, 7, 72, 0, 0, 0, 0, 0, 'SmartAI', 0, 1.0, 45.0, 10.0, 1.15, 1.0, 144, 1, 1023391482, 0, 0, ''),
|
(351080, 16605, "Naxxramas Follower", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 59.2, 2000, 1265, 1.0, 1.0, 8, 32832, 2048, 0, 7, 72, 0, 0, 0, 0, 0, 'SmartAI', 0, 1.0, 45.0, 10.0, 1.15, 1.0, 144, 1, 1023391482, 0, 0, ''),
|
||||||
(351081, 16603, "Naxxramas Worshipper", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 35.0, 2000, 1265, 1.0, 1.0, 8, 32832, 2048, 0, 7, 72, 0, 0, 0, 0, 0, 'SmartAI', 0, 1.0, 40.0, 10.0, 1.0, 1.0, 144, 1, 1023391482, 0, 0, ''),
|
(351081, 16603, "Naxxramas Worshipper", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 35.0, 2000, 1265, 1.0, 1.0, 8, 32832, 2048, 0, 7, 72, 0, 0, 0, 0, 0, 'SmartAI', 0, 1.0, 40.0, 10.0, 1.0, 1.0, 144, 1, 1023391482, 0, 0, ''),
|
||||||
(351082, 14698, "Crypt Guard", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 14.7, 1000, 1265, 1.0, 1.0, 1, 64, 2048, 0, 6, 72, 0, 0, 0, 0, 0, 'SmartAI', 0, 1.0, 65.0, 1.0, 1.15, 1.0, 144, 1, 1023391482, 0, 0, ''),
|
(351082, 14698, "Crypt Guard", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 14.7, 1000, 1265, 1.0, 1.0, 1, 64, 2048, 0, 6, 72, 0, 0, 0, 0, 0, 'SmartAI', 0, 1.0, 65.0, 1.0, 1.15, 1.0, 144, 1, 1023391482, 0, 0, ''),
|
||||||
(351083, 10005, "Corpse Scarab", "", 60, 60, 21, 0.833332, 2.14286, 18.0, 1.0, 0, 0, 2.1, 1000, 1265, 1.0, 1.0, 1, 0, 2048, 0, 10, 72, 0, 0, 0, 0, 0, 'SmartAI', 2, 1.0, 2.0, 1.0, 0.7, 1.0, 188, 1, 1022042641, 0, 0, ''),
|
(351083, 10005, "Corpse Scarab", "", 60, 60, 21, 0.833332, 2.14286, 18.0, 1.0, 0, 0, 2.1, 1000, 1265, 1.0, 1.0, 1, 0, 2048, 0, 10, 72, 0, 0, 0, 0, 0, 'SmartAI', 0, 1.0, 2.0, 1.0, 0.7, 1.0, 188, 1, 1022042641, 0, 0, ''),
|
||||||
(351084, 16539, "Deathknight Understudy", "", 60, 60, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 45.5, 3500, 1265, 1.0, 1.0, 1, 32832, 2048, 0, 7, 72, 0, 0, 0, 0, 0, '', 0, 1.0, 30.0, 2.0, 2.0, 1.0, 144, 1, 1022049874, 0, 0, 'boss_razuvious_minion_40'),
|
(351084, 16539, "Deathknight Understudy", "", 60, 60, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 45.5, 3500, 1265, 1.0, 1.0, 1, 32832, 2048, 0, 7, 72, 0, 0, 0, 0, 0, '', 0, 1.0, 30.0, 2.0, 2.0, 1.0, 144, 1, 1022049874, 0, 0, 'boss_razuvious_minion_40'),
|
||||||
(351085, 2606, "Plagued Guardian", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 24.25, 3000, 2000, 1.0, 1.0, 8, 0, 2048, 0, 6, 72, 0, 0, 0, 0, 0, 'SmartAI', 0, 1.0, 8.0, 18.0, 1.15, 1.0, 144, 1, 1015751184, 0, 0, ''),
|
(351085, 2606, "Plagued Guardian", "", 61, 61, 21, 1.0, 1.42857, 20.0, 1.0, 1, 0, 24.25, 3000, 2000, 1.0, 1.0, 8, 0, 2048, 0, 6, 72, 0, 0, 0, 0, 0, 'SmartAI', 0, 1.0, 8.0, 18.0, 1.15, 1.0, 144, 1, 1015751184, 0, 0, ''),
|
||||||
(351086, 7847, "Plagued Champion", "", 61, 61, 21, 0.888888, 1.42857, 20.0, 1.0, 1, 0, 26.85, 2000, 2000, 1.0, 1.0, 1, 64, 2048, 0, 6, 72, 0, 0, 0, 0, 0, 'SmartAI', 0, 1.0, 11.0, 1.0, 1.15, 1.0, 144, 1, 1015226896, 0, 0, ''),
|
(351086, 7847, "Plagued Champion", "", 61, 61, 21, 0.888888, 1.42857, 20.0, 1.0, 1, 0, 26.85, 2000, 2000, 1.0, 1.0, 1, 64, 2048, 0, 6, 72, 0, 0, 0, 0, 0, 'SmartAI', 0, 1.0, 11.0, 1.0, 1.15, 1.0, 144, 1, 1015226896, 0, 0, ''),
|
||||||
|
|||||||
@@ -352,10 +352,12 @@ public:
|
|||||||
if (sIndividualProgression->simpleConfigOverride)
|
if (sIndividualProgression->simpleConfigOverride)
|
||||||
{
|
{
|
||||||
sWorld->setIntConfig(CONFIG_WATER_BREATH_TIMER, 60000);
|
sWorld->setIntConfig(CONFIG_WATER_BREATH_TIMER, 60000);
|
||||||
|
sWorld->setIntConfig(CONFIG_LFG_OPTIONSMASK, 4);
|
||||||
sWorld->setBoolConfig(CONFIG_OBJECT_QUEST_MARKERS, false);
|
sWorld->setBoolConfig(CONFIG_OBJECT_QUEST_MARKERS, false);
|
||||||
sWorld->setBoolConfig(CONFIG_OBJECT_SPARKLES, false);
|
sWorld->setBoolConfig(CONFIG_OBJECT_SPARKLES, false);
|
||||||
sWorld->setBoolConfig(CONFIG_PLAYER_SETTINGS_ENABLED, true);
|
sWorld->setBoolConfig(CONFIG_PLAYER_SETTINGS_ENABLED, true);
|
||||||
sWorld->setBoolConfig(CONFIG_LOW_LEVEL_REGEN_BOOST, false);
|
sWorld->setBoolConfig(CONFIG_LOW_LEVEL_REGEN_BOOST, false);
|
||||||
|
sWorld->setBoolConfig(CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -347,29 +347,35 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OnQueueRandomDungeon(Player* player, uint32& rDungeonId) override
|
void OnQueueRandomDungeon(Player* player, uint32& rDungeonId) override
|
||||||
{
|
{
|
||||||
// Check if RDF is disabled in the context of Individual Progression
|
// List of exceptions for seasonal event dungeons
|
||||||
if (sConfigMgr->GetOption<bool>("IndividualProgression.DisableRDF", false))
|
std::set<uint32> seasonalEventDungeons = { 285, 286, 287, 288 };
|
||||||
{
|
if (seasonalEventDungeons.find(rDungeonId) != seasonalEventDungeons.end())
|
||||||
// Notify the player
|
{
|
||||||
player->GetSession()->SendNotification("The Random Dungeon feature is currently disabled by the Individual Progression module.");
|
return;
|
||||||
rDungeonId = 1000; // Set dungeon ID to an invalid value to cancel the queuing
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sIndividualProgression->hasPassedProgression(player, PROGRESSION_NAXX40))
|
// Check if RDF is disabled in the context of Individual Progression
|
||||||
{
|
if (sConfigMgr->GetOption<bool>("IndividualProgression.DisableRDF", false))
|
||||||
rDungeonId = RDF_CLASSIC;
|
{
|
||||||
}
|
player->GetSession()->SendNotification("The Random Dungeon feature is currently disabled by the Individual Progression module.");
|
||||||
else if (rDungeonId == RDF_WRATH_OF_THE_LICH_KING && !sIndividualProgression->hasPassedProgression(player, PROGRESSION_TBC_TIER_5))
|
rDungeonId = 1000; // Set dungeon ID to an invalid value to cancel the queuing
|
||||||
{
|
return;
|
||||||
rDungeonId = RDF_THE_BURNING_CRUSADE;
|
}
|
||||||
}
|
|
||||||
else if (rDungeonId == RDF_WRATH_OF_THE_LICH_KING_HEROIC && !sIndividualProgression->hasPassedProgression(player, PROGRESSION_TBC_TIER_5))
|
if (!sIndividualProgression->hasPassedProgression(player, PROGRESSION_NAXX40))
|
||||||
{
|
{
|
||||||
rDungeonId = RDF_THE_BURNING_CRUSADE_HEROIC;
|
rDungeonId = RDF_CLASSIC;
|
||||||
}
|
}
|
||||||
}
|
else if (rDungeonId == RDF_WRATH_OF_THE_LICH_KING && !sIndividualProgression->hasPassedProgression(player, PROGRESSION_TBC_TIER_5))
|
||||||
|
{
|
||||||
|
rDungeonId = RDF_THE_BURNING_CRUSADE;
|
||||||
|
}
|
||||||
|
else if (rDungeonId == RDF_WRATH_OF_THE_LICH_KING_HEROIC && !sIndividualProgression->hasPassedProgression(player, PROGRESSION_TBC_TIER_5))
|
||||||
|
{
|
||||||
|
rDungeonId = RDF_THE_BURNING_CRUSADE_HEROIC;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool CanEquipItem(Player* player, uint8 /*slot*/, uint16& /*dest*/, Item* pItem, bool /*swap*/, bool /*not_loading*/) override
|
bool CanEquipItem(Player* player, uint8 /*slot*/, uint16& /*dest*/, Item* pItem, bool /*swap*/, bool /*not_loading*/) override
|
||||||
{
|
{
|
||||||
@@ -570,6 +576,13 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Skip percentage based heals or spells already nerfed by damage reduction
|
// Skip percentage based heals or spells already nerfed by damage reduction
|
||||||
|
for (uint8 i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
if (spellInfo->Effects[i].Effect == SPELL_EFFECT_HEAL_MAX_HEALTH)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (spellInfo->Id == SPELL_RUNE_TAP || spellInfo->Id == SPELL_LIFE_STEAL)
|
if (spellInfo->Id == SPELL_RUNE_TAP || spellInfo->Id == SPELL_LIFE_STEAL)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -650,11 +663,20 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModifyPeriodicDamageAurasTick(Unit* /*target*/, Unit* attacker, uint32& damage, SpellInfo const* /*spellInfo*/) override
|
void ModifyPeriodicDamageAurasTick(Unit* /*target*/, Unit* attacker, uint32& damage, SpellInfo const* spellInfo) override
|
||||||
{
|
{
|
||||||
if (!sIndividualProgression->enabled || !attacker)
|
if (!sIndividualProgression->enabled || !attacker)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// Do not apply reductions to healing auras - these are already modified in the ModifyHeal hook
|
||||||
|
for (uint8 j = 0; j < MAX_SPELL_EFFECTS; ++j)
|
||||||
|
{
|
||||||
|
if (spellInfo->Effects[j].Effect == SPELL_EFFECT_APPLY_AURA && spellInfo->Effects[j].ApplyAuraName == SPELL_AURA_PERIODIC_HEAL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool isPet = attacker->GetOwner() && attacker->GetOwner()->GetTypeId() == TYPEID_PLAYER;
|
bool isPet = attacker->GetOwner() && attacker->GetOwner()->GetTypeId() == TYPEID_PLAYER;
|
||||||
if (!isPet && attacker->GetTypeId() != TYPEID_PLAYER)
|
if (!isPet && attacker->GetTypeId() != TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -94,7 +94,6 @@ public:
|
|||||||
me->SummonCreature(NPC_CRYPT_GUARD, 3299.086f, -3450.929f, 287.077f, 3.999f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
|
me->SummonCreature(NPC_CRYPT_GUARD, 3299.086f, -3450.929f, 287.077f, 3.999f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Reset() override
|
void Reset() override
|
||||||
{
|
{
|
||||||
BossAI::Reset();
|
BossAI::Reset();
|
||||||
@@ -112,15 +111,19 @@ public:
|
|||||||
|
|
||||||
void JustSummoned(Creature* cr) override
|
void JustSummoned(Creature* cr) override
|
||||||
{
|
{
|
||||||
if (me->IsInCombat())
|
if (me->IsInCombat())
|
||||||
{
|
{
|
||||||
cr->SetInCombatWithZone();
|
cr->SetInCombatWithZone(); // This line will set the creature in combat with the zone.
|
||||||
if (cr->GetEntry() == NPC_CRYPT_GUARD)
|
if (cr->GetEntry() == NPC_CRYPT_GUARD)
|
||||||
{
|
{
|
||||||
cr->AI()->Talk(EMOTE_SPAWN, me);
|
cr->AI()->Talk(EMOTE_SPAWN, me);
|
||||||
}
|
}
|
||||||
}
|
else if (cr->GetEntry() == NPC_CORPSE_SCARAB) // Explicitly check for Corpse Scarabs here.
|
||||||
summons.Summon(cr);
|
{
|
||||||
|
cr->SetInCombatWithZone(); // Set the Corpse Scarabs in combat with the zone too.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
summons.Summon(cr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SummonedCreatureDies(Creature* cr, Unit*) override
|
void SummonedCreatureDies(Creature* cr, Unit*) override
|
||||||
|
|||||||
Reference in New Issue
Block a user