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)
|
||||
# Disable Quest Object sparkle and object quest markers (added in patch 2.3)
|
||||
# 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
|
||||
# 0 - Disabled
|
||||
@@ -331,7 +333,8 @@ IndividualProgression.PvPGearRequirements = 1
|
||||
#
|
||||
# IndividualProgression.DisableRDF
|
||||
# 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
|
||||
# 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, ''),
|
||||
(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, ''),
|
||||
(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'),
|
||||
(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, ''),
|
||||
|
||||
@@ -352,10 +352,12 @@ public:
|
||||
if (sIndividualProgression->simpleConfigOverride)
|
||||
{
|
||||
sWorld->setIntConfig(CONFIG_WATER_BREATH_TIMER, 60000);
|
||||
sWorld->setIntConfig(CONFIG_LFG_OPTIONSMASK, 4);
|
||||
sWorld->setBoolConfig(CONFIG_OBJECT_QUEST_MARKERS, false);
|
||||
sWorld->setBoolConfig(CONFIG_OBJECT_SPARKLES, false);
|
||||
sWorld->setBoolConfig(CONFIG_PLAYER_SETTINGS_ENABLED, true);
|
||||
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
|
||||
{
|
||||
// Check if RDF is disabled in the context of Individual Progression
|
||||
if (sConfigMgr->GetOption<bool>("IndividualProgression.DisableRDF", false))
|
||||
{
|
||||
// Notify the player
|
||||
player->GetSession()->SendNotification("The Random Dungeon feature is currently disabled by the Individual Progression module.");
|
||||
rDungeonId = 1000; // Set dungeon ID to an invalid value to cancel the queuing
|
||||
return;
|
||||
}
|
||||
{
|
||||
// List of exceptions for seasonal event dungeons
|
||||
std::set<uint32> seasonalEventDungeons = { 285, 286, 287, 288 };
|
||||
if (seasonalEventDungeons.find(rDungeonId) != seasonalEventDungeons.end())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!sIndividualProgression->hasPassedProgression(player, PROGRESSION_NAXX40))
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
// Check if RDF is disabled in the context of Individual Progression
|
||||
if (sConfigMgr->GetOption<bool>("IndividualProgression.DisableRDF", false))
|
||||
{
|
||||
player->GetSession()->SendNotification("The Random Dungeon feature is currently disabled by the Individual Progression module.");
|
||||
rDungeonId = 1000; // Set dungeon ID to an invalid value to cancel the queuing
|
||||
return;
|
||||
}
|
||||
|
||||
if (!sIndividualProgression->hasPassedProgression(player, PROGRESSION_NAXX40))
|
||||
{
|
||||
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
|
||||
{
|
||||
@@ -570,6 +576,13 @@ public:
|
||||
}
|
||||
|
||||
// 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)
|
||||
{
|
||||
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)
|
||||
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;
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
BossAI::Reset();
|
||||
@@ -112,15 +111,19 @@ public:
|
||||
|
||||
void JustSummoned(Creature* cr) override
|
||||
{
|
||||
if (me->IsInCombat())
|
||||
{
|
||||
cr->SetInCombatWithZone();
|
||||
if (me->IsInCombat())
|
||||
{
|
||||
cr->SetInCombatWithZone(); // This line will set the creature in combat with the zone.
|
||||
if (cr->GetEntry() == NPC_CRYPT_GUARD)
|
||||
{
|
||||
cr->AI()->Talk(EMOTE_SPAWN, me);
|
||||
cr->AI()->Talk(EMOTE_SPAWN, me);
|
||||
}
|
||||
}
|
||||
summons.Summon(cr);
|
||||
else if (cr->GetEntry() == NPC_CORPSE_SCARAB) // Explicitly check for Corpse Scarabs here.
|
||||
{
|
||||
cr->SetInCombatWithZone(); // Set the Corpse Scarabs in combat with the zone too.
|
||||
}
|
||||
}
|
||||
summons.Summon(cr);
|
||||
}
|
||||
|
||||
void SummonedCreatureDies(Creature* cr, Unit*) override
|
||||
|
||||
Reference in New Issue
Block a user