mirror of
https://github.com/ZhengPeiRu21/mod-individual-progression
synced 2025-11-29 23:44:51 +08:00
Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8eb0654b5 | ||
|
|
923cb266d0 | ||
|
|
2e55d02a79 | ||
|
|
17e820ab2e | ||
|
|
affb14bdd1 | ||
|
|
2c95abb08b | ||
|
|
5d7077bf48 | ||
|
|
1a37c250cc | ||
|
|
050b195fa1 | ||
|
|
a45ca1e3e1 | ||
|
|
d8c71eec3e | ||
|
|
adfbfc981c | ||
|
|
10cc05ae1b | ||
|
|
f8a4ff57a3 | ||
|
|
4fb1a9e498 |
@@ -17,6 +17,8 @@ For content that is added in later expansion that is provided for use in lower-l
|
|||||||
* NPCs and Game Objects aware of individual player progress, visible based on player progression to each player
|
* NPCs and Game Objects aware of individual player progress, visible based on player progression to each player
|
||||||
* Restore of content removed or nerfed or later patch is released, such as original Naxxramas, Onyxia quests, TBC Attunements, and riding skills and quests.
|
* Restore of content removed or nerfed or later patch is released, such as original Naxxramas, Onyxia quests, TBC Attunements, and riding skills and quests.
|
||||||
|
|
||||||
|
For a complete list of changes, please see [here](https://github.com/ZhengPeiRu21/mod-individual-progression/wiki/List-of-Changes).
|
||||||
|
|
||||||
Options are provided to allow changes to experience based on preference. Please see config file.
|
Options are provided to allow changes to experience based on preference. Please see config file.
|
||||||
|
|
||||||
## How to Install
|
## How to Install
|
||||||
@@ -40,3 +42,4 @@ Special thanks to all contributors of the following projects which are make this
|
|||||||
* Wrath of the Vanilla Module for more Vanilla world adjustments
|
* Wrath of the Vanilla Module for more Vanilla world adjustments
|
||||||
* Vmangos for Vanilla game and patch progression data
|
* Vmangos for Vanilla game and patch progression data
|
||||||
* SoglaHash for many Naxx 40 scripts and data
|
* SoglaHash for many Naxx 40 scripts and data
|
||||||
|
* 55Honey for Acore_ZoneDebuff module, used as basis for damage and HP scaling
|
||||||
|
|||||||
@@ -292,3 +292,15 @@ IndividualProgression.DisableDefaultProgression = 0
|
|||||||
#
|
#
|
||||||
|
|
||||||
IndividualProgression.CustomProgression = ""
|
IndividualProgression.CustomProgression = ""
|
||||||
|
#
|
||||||
|
# IndividualProgression.AllowEarlyDungeonSet2
|
||||||
|
# Description: Dungeon Set 2 was introduced in patch 1.10 and requires completing some AQ content that is normally not available until a later phase
|
||||||
|
# When enabled, this allows the relevant content to be accessed early so that Dungeon Set 2 can be acquired before it is made obsolete
|
||||||
|
# by raid gear.
|
||||||
|
#
|
||||||
|
# Default: 0 - Disabled
|
||||||
|
# 1 - Enabled
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
IndividualProgression.AllowEarlyDungeonSet2 = 1
|
||||||
BIN
optional/dbc.zip
BIN
optional/dbc.zip
Binary file not shown.
@@ -1,9 +1,14 @@
|
|||||||
DELETE FROM `creature_template` WHERE `entry` BETWEEN 301000 AND 301003;
|
DELETE FROM `creature_template` WHERE `entry` BETWEEN 301000 AND 301003;
|
||||||
REPLACE INTO `creature_template` (`entry`, `modelid1`, `name`, `subname`, `minlevel`, `maxlevel`, `faction`, `speed_walk`, `speed_run`, `detection_range`,`scale`,`rank`,`dmgschool`,`DamageModifier`,`BaseAttackTime`,`RangeAttackTime`,`BaseVariance`,`RangeVariance`,`unit_class`,`unit_flags`,`unit_flags2`,`family`,`type`,`type_flags`,`lootid`,`skinloot`,`PetSpellDataId`,`mingold`,`maxgold`,`AIName`,`MovementType`,`HoverHeight`,`HealthModifier`,`ManaModifier`,`ArmorModifier`,`ExperienceModifier`,`movementId`,`RegenHealth`,`mechanic_immune_mask`,`spell_school_immune_mask`,`flags_extra`,`ScriptName`) VALUES
|
REPLACE INTO `creature_template` (`entry`, `modelid1`, `name`, `subname`, `minlevel`, `maxlevel`, `faction`, `speed_walk`, `speed_run`, `detection_range`,`scale`,`rank`,`dmgschool`,`DamageModifier`,`BaseAttackTime`,`RangeAttackTime`,`BaseVariance`,`RangeVariance`,`unit_class`,`unit_flags`,`unit_flags2`,`family`,`type`,`type_flags`,`lootid`,`skinloot`,`PetSpellDataId`,`mingold`,`maxgold`,`AIName`,`MovementType`,`HoverHeight`,`HealthModifier`,`ManaModifier`,`ArmorModifier`,`ExperienceModifier`,`movementId`,`RegenHealth`,`mechanic_immune_mask`,`spell_school_immune_mask`,`flags_extra`,`ScriptName`) VALUES
|
||||||
(301000, 8570, "Onyxia", "", 63, 63, 103, 1.0, 1.28571, 20.0, 1.0, 3, 0, 15.05, 2000, 2000, 1.0, 1.0, 1, 64, 2048, 0, 2, 108, 301000, 0, 0, 914892, 1066294, '', 0, 1.0, 330.0, 1.0, 1.0, 1.0, 0, 1, 646659963, 0, 1073742337, 'boss_onyxia_40'),
|
(301000, 8570, "Onyxia", "", 63, 63, 103, 1.0, 1.28571, 20.0, 1.0, 3, 0, 15.05, 2000, 2000, 1.0, 1.0, 1, 64, 2048, 0, 2, 108, 301000, 10184, 0, 914892, 1066294, '', 0, 1.0, 330.0, 1.0, 1.0, 1.0, 0, 1, 646659963, 0, 1073742337, 'boss_onyxia_40'),
|
||||||
(301001, 397, "Onyxian Whelp", "", 56, 57, 16, 1.11111, 1.14286, 18.0, 1.0, 0, 0, 3.7, 2000, 2000, 1.0, 1.0, 1, 0, 2048, 0, 2, 8, 0, 0, 0, 0, 0, '', 1, 1.0, 1.0, 1.0, 1.0, 1.0, 0, 1, 0, 0, 0, ''),
|
(301001, 397, "Onyxian Whelp", "", 56, 57, 16, 1.11111, 1.14286, 18.0, 1.0, 0, 0, 3.7, 2000, 2000, 1.0, 1.0, 1, 0, 2048, 0, 2, 8, 0, 0, 0, 0, 0, '', 1, 1.0, 1.0, 1.0, 1.0, 1.0, 0, 1, 0, 0, 0, ''),
|
||||||
(301002, 8711, "Onyxian Warder", "", 60, 63, 103, 0.888888, 1.14286, 20.0, 1.0, 1, 0, 9.8, 2000, 2000, 1.0, 1.0, 1, 64, 2048, 0, 2, 8, 301002, 0, 0, 1185, 4741, 'SmartAI', 1, 1.0, 25.0, 1.0, 1.0, 1.0, 0, 1, 617299803, 0, 0, '');
|
(301002, 8711, "Onyxian Warder", "", 60, 63, 103, 0.888888, 1.14286, 20.0, 1.0, 1, 0, 9.8, 2000, 2000, 1.0, 1.0, 1, 64, 2048, 0, 2, 8, 301002, 0, 0, 1185, 4741, 'SmartAI', 1, 1.0, 25.0, 1.0, 1.0, 1.0, 0, 1, 617299803, 0, 0, '');
|
||||||
|
|
||||||
|
DELETE FROM `spell_dbc` WHERE `ID` = 90003;
|
||||||
|
|
||||||
|
INSERT INTO spell_dbc (`ID`,`Category`,`DispelType`,`Mechanic`,`Attributes`,`AttributesEx`,`AttributesEx2`,`AttributesEx3`,`AttributesEx4`,`AttributesEx5`,`AttributesEx6`,`AttributesEx7`,`ShapeshiftMask`,`unk_320_2`,`ShapeshiftExclude`,`unk_320_3`,`Targets`,`TargetCreatureType`,`RequiresSpellFocus`,`FacingCasterFlags`,`CasterAuraState`,`TargetAuraState`,`ExcludeCasterAuraState`,`ExcludeTargetAuraState`,`CasterAuraSpell`,`TargetAuraSpell`,`ExcludeCasterAuraSpell`,`ExcludeTargetAuraSpell`,`CastingTimeIndex`,`RecoveryTime`,`CategoryRecoveryTime`,`InterruptFlags`,`AuraInterruptFlags`,`ChannelInterruptFlags`,`ProcTypeMask`,`ProcChance`,`ProcCharges`,`MaxLevel`,`BaseLevel`,`SpellLevel`,`DurationIndex`,`PowerType`,`ManaCost`,`ManaCostPerLevel`,`ManaPerSecond`,`ManaPerSecondPerLevel`,`RangeIndex`,`Speed`,`ModalNextSpell`,`CumulativeAura`,`Totem_1`,`Totem_2`,`Reagent_1`,`Reagent_2`,`Reagent_3`,`Reagent_4`,`Reagent_5`,`Reagent_6`,`Reagent_7`,`Reagent_8`,`ReagentCount_1`,`ReagentCount_2`,`ReagentCount_3`,`ReagentCount_4`,`ReagentCount_5`,`ReagentCount_6`,`ReagentCount_7`,`ReagentCount_8`,`EquippedItemClass`,`EquippedItemSubclass`,`EquippedItemInvTypes`,`Effect_1`,`Effect_2`,`Effect_3`,`EffectDieSides_1`,`EffectDieSides_2`,`EffectDieSides_3`,`EffectRealPointsPerLevel_1`,`EffectRealPointsPerLevel_2`,`EffectRealPointsPerLevel_3`,`EffectBasePoints_1`,`EffectBasePoints_2`,`EffectBasePoints_3`,`EffectMechanic_1`,`EffectMechanic_2`,`EffectMechanic_3`,`ImplicitTargetA_1`,`ImplicitTargetA_2`,`ImplicitTargetA_3`,`ImplicitTargetB_1`,`ImplicitTargetB_2`,`ImplicitTargetB_3`,`EffectRadiusIndex_1`,`EffectRadiusIndex_2`,`EffectRadiusIndex_3`,`EffectAura_1`,`EffectAura_2`,`EffectAura_3`,`EffectAuraPeriod_1`,`EffectAuraPeriod_2`,`EffectAuraPeriod_3`,`EffectMultipleValue_1`,`EffectMultipleValue_2`,`EffectMultipleValue_3`,`EffectChainTargets_1`,`EffectChainTargets_2`,`EffectChainTargets_3`,`EffectItemType_1`,`EffectItemType_2`,`EffectItemType_3`,`EffectMiscValue_1`,`EffectMiscValue_2`,`EffectMiscValue_3`,`EffectMiscValueB_1`,`EffectMiscValueB_2`,`EffectMiscValueB_3`,`EffectTriggerSpell_1`,`EffectTriggerSpell_2`,`EffectTriggerSpell_3`,`EffectPointsPerCombo_1`,`EffectPointsPerCombo_2`,`EffectPointsPerCombo_3`,`EffectSpellClassMaskA_1`,`EffectSpellClassMaskA_2`,`EffectSpellClassMaskA_3`,`EffectSpellClassMaskB_1`,`EffectSpellClassMaskB_2`,`EffectSpellClassMaskB_3`,`EffectSpellClassMaskC_1`,`EffectSpellClassMaskC_2`,`EffectSpellClassMaskC_3`,`SpellVisualID_1`,`SpellVisualID_2`,`SpellIconID`,`ActiveIconID`,`SpellPriority`,`Name_Lang_enUS`,`Name_Lang_enGB`,`Name_Lang_koKR`,`Name_Lang_frFR`,`Name_Lang_deDE`,`Name_Lang_enCN`,`Name_Lang_zhCN`,`Name_Lang_enTW`,`Name_Lang_zhTW`,`Name_Lang_esES`,`Name_Lang_esMX`,`Name_Lang_ruRU`,`Name_Lang_ptPT`,`Name_Lang_ptBR`,`Name_Lang_itIT`,`Name_Lang_Unk`,`Name_Lang_Mask`,`NameSubtext_Lang_enUS`,`NameSubtext_Lang_enGB`,`NameSubtext_Lang_koKR`,`NameSubtext_Lang_frFR`,`NameSubtext_Lang_deDE`,`NameSubtext_Lang_enCN`,`NameSubtext_Lang_zhCN`,`NameSubtext_Lang_enTW`,`NameSubtext_Lang_zhTW`,`NameSubtext_Lang_esES`,`NameSubtext_Lang_esMX`,`NameSubtext_Lang_ruRU`,`NameSubtext_Lang_ptPT`,`NameSubtext_Lang_ptBR`,`NameSubtext_Lang_itIT`,`NameSubtext_Lang_Unk`,`NameSubtext_Lang_Mask`,`Description_Lang_enUS`,`Description_Lang_enGB`,`Description_Lang_koKR`,`Description_Lang_frFR`,`Description_Lang_deDE`,`Description_Lang_enCN`,`Description_Lang_zhCN`,`Description_Lang_enTW`,`Description_Lang_zhTW`,`Description_Lang_esES`,`Description_Lang_esMX`,`Description_Lang_ruRU`,`Description_Lang_ptPT`,`Description_Lang_ptBR`,`Description_Lang_itIT`,`Description_Lang_Unk`,`Description_Lang_Mask`,`AuraDescription_Lang_enUS`,`AuraDescription_Lang_enGB`,`AuraDescription_Lang_koKR`,`AuraDescription_Lang_frFR`,`AuraDescription_Lang_deDE`,`AuraDescription_Lang_enCN`,`AuraDescription_Lang_zhCN`,`AuraDescription_Lang_enTW`,`AuraDescription_Lang_zhTW`,`AuraDescription_Lang_esES`,`AuraDescription_Lang_esMX`,`AuraDescription_Lang_ruRU`,`AuraDescription_Lang_ptPT`,`AuraDescription_Lang_ptBR`,`AuraDescription_Lang_itIT`,`AuraDescription_Lang_Unk`,`AuraDescription_Lang_Mask`,`ManaCostPct`,`StartRecoveryCategory`,`StartRecoveryTime`,`MaxTargetLevel`,`SpellClassSet`,`SpellClassMask_1`,`SpellClassMask_2`,`SpellClassMask_3`,`MaxTargets`,`DefenseType`,`PreventionType`,`StanceBarOrder`,`EffectChainAmplitude_1`,`EffectChainAmplitude_2`,`EffectChainAmplitude_3`,`MinFactionID`,`MinReputation`,`RequiredAuraVision`,`RequiredTotemCategoryID_1`,`RequiredTotemCategoryID_2`,`RequiredAreasID`,`SchoolMask`,`RuneCostID`,`SpellMissileID`,`PowerDisplayID`,`EffectBonusMultiplier_1`,`EffectBonusMultiplier_2`,`EffectBonusMultiplier_3`,`SpellDescriptionVariableID`,`SpellDifficultyID`) VALUES
|
||||||
|
(90003,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,31,0,0,0,101,0,0,0,0,4,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,28,0,0,1,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,301001,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,'Summon Onyxia Whelp','','','','','','','','','','','','','','','',16712190,'','','','','','','','','','','','','','','','',16712188,'','','','','','','','','','','','','','','','',16712188,'','','','','','','','','','','','','','','','',16712188,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0);
|
||||||
|
|
||||||
DELETE FROM `creature_loot_template` WHERE `Item`=18705;
|
DELETE FROM `creature_loot_template` WHERE `Item`=18705;
|
||||||
|
|
||||||
REPLACE INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `GroupId`, `MinCount`, `MaxCount`) VALUES
|
REPLACE INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `GroupId`, `MinCount`, `MaxCount`) VALUES
|
||||||
|
|||||||
@@ -4,7 +4,9 @@ UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_tbc' WHERE `entry` IN (16
|
|||||||
20026, 20027, 20053, 20054, 20069, 18542, 20080, 20081, 20082, 21643, 20130,
|
20026, 20027, 20053, 20054, 20069, 18542, 20080, 20081, 20082, 21643, 20130,
|
||||||
19934, 19936, 19950, 19951, 19959, 22889, 22902, 22835, 22837);
|
19934, 19936, 19950, 19951, 19959, 22889, 22902, 22835, 22837);
|
||||||
|
|
||||||
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_aq' WHERE `entry` IN (15293,15270,15306,15191,15181,15182,15306,15599,15282,15183,15194,15176,15270,16091,15701,15612,15613,15540,15704,15693,15431,15903,15180, 15499);
|
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_ds2' WHERE `entry` IN (15282, 15270);
|
||||||
|
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_aq' WHERE `entry` IN (15293,15306,15191,15181,15182,15306,15599,15183,15194,15176,15270,16091,15701,15612,15613,15540,15704,15693,15431,15903,15180, 15499, 15500, 15498);
|
||||||
# Two Cenarion Scouts - 15609 and 15610 - should be in this progression but they have some quest AI that we don't want to override, so leave them for now
|
# Two Cenarion Scouts - 15609 and 15610 - should be in this progression but they have some quest AI that we don't want to override, so leave them for now
|
||||||
|
|
||||||
# Light's Hope Chapel
|
# Light's Hope Chapel
|
||||||
@@ -17,9 +19,10 @@ UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_wotlk' WHERE `entry` IN (
|
|||||||
|
|
||||||
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_wotlk_ulduar' WHERE `entry` IN (34252);
|
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_wotlk_ulduar' WHERE `entry` IN (34252);
|
||||||
|
|
||||||
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_wotlk_totc' WHERE `entry` IN (35498, 35577, 35496, 36208, 35500, 35497, 34244);
|
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_wotlk_totc' WHERE `entry` IN (35498, 35577, 35496, 36208, 35500, 35497, 34244, 28701);
|
||||||
|
|
||||||
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_wotlk_icc' WHERE `entry` IN (37776, 40160);
|
# TODO: Harold Winston (32172) has rings from all patches, so he needs special phasing applied - for now make him require ICC progression
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_wotlk_icc' WHERE `entry` IN (37776, 40160, 37780, 32172);
|
||||||
|
|
||||||
UPDATE `gameobject_template` SET `ScriptName` = 'gobject_ipp_tbc' WHERE `entry` IN (195141);
|
UPDATE `gameobject_template` SET `ScriptName` = 'gobject_ipp_tbc' WHERE `entry` IN (195141);
|
||||||
|
|
||||||
|
|||||||
7
sql/world/base/wotlk_vendors.sql
Normal file
7
sql/world/base/wotlk_vendors.sql
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
-- Restore vendors to use pre-3.2 gems
|
||||||
|
UPDATE `npc_vendor` SET `item`=36918 WHERE `item`=36919;
|
||||||
|
UPDATE `npc_vendor` SET `item`=36921 WHERE `item`=36922;
|
||||||
|
UPDATE `npc_vendor` SET `item`=36924 WHERE `item`=36925;
|
||||||
|
UPDATE `npc_vendor` SET `item`=36927 WHERE `item`=36928;
|
||||||
|
UPDATE `npc_vendor` SET `item`=36930 WHERE `item`=36931;
|
||||||
|
UPDATE `npc_vendor` SET `item`=36933 WHERE `item`=36934;
|
||||||
@@ -264,6 +264,7 @@ private:
|
|||||||
sIndividualProgression->deathKnightProgressionLevel = sConfigMgr->GetOption<uint8>("IndividualProgression.DeathKnightUnlockProgression", 11);
|
sIndividualProgression->deathKnightProgressionLevel = sConfigMgr->GetOption<uint8>("IndividualProgression.DeathKnightUnlockProgression", 11);
|
||||||
sIndividualProgression->deathKnightStartingProgression = sConfigMgr->GetOption<uint8>("IndividualProgression.DeathKnightStartingProgression", 11);
|
sIndividualProgression->deathKnightStartingProgression = sConfigMgr->GetOption<uint8>("IndividualProgression.DeathKnightStartingProgression", 11);
|
||||||
sIndividualProgression->LoadCustomProgressionEntries(sConfigMgr->GetOption<std::string>("IndividualProgression.CustomProgression", ""));
|
sIndividualProgression->LoadCustomProgressionEntries(sConfigMgr->GetOption<std::string>("IndividualProgression.CustomProgression", ""));
|
||||||
|
sIndividualProgression->earlyDungeonSet2 = sConfigMgr->GetOption<bool>("IndividualProgression.AllowEarlyDungeonSet2", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void LoadXpValues()
|
static void LoadXpValues()
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ public:
|
|||||||
std::map<uint32, uint8> customProgressionMap;
|
std::map<uint32, uint8> customProgressionMap;
|
||||||
questXpMapType questXpMap;
|
questXpMapType questXpMap;
|
||||||
float vanillaPowerAdjustment, vanillaHealthAdjustment, tbcPowerAdjustment, tbcHealthAdjustment, vanillaHealingAdjustment, tbcHealingAdjustment, previousGearTuning;
|
float vanillaPowerAdjustment, vanillaHealthAdjustment, tbcPowerAdjustment, tbcHealthAdjustment, vanillaHealingAdjustment, tbcHealingAdjustment, previousGearTuning;
|
||||||
bool enabled, questXpFix, hunterPetLevelFix, requirePreAQQuests, enforceGroupRules, fishingFix, simpleConfigOverride, questMoneyAtLevelCap, repeatableVanillaQuestsXp, disableDefaultProgression;
|
bool enabled, questXpFix, hunterPetLevelFix, requirePreAQQuests, enforceGroupRules, fishingFix, simpleConfigOverride, questMoneyAtLevelCap, repeatableVanillaQuestsXp, disableDefaultProgression, earlyDungeonSet2;
|
||||||
int progressionLimit, startingProgression, tbcRacesProgressionLevel, deathKnightProgressionLevel, deathKnightStartingProgression;
|
int progressionLimit, startingProgression, tbcRacesProgressionLevel, deathKnightProgressionLevel, deathKnightStartingProgression;
|
||||||
|
|
||||||
bool hasPassedProgression(Player* player, ProgressionState state) const;
|
bool hasPassedProgression(Player* player, ProgressionState state) const;
|
||||||
|
|||||||
@@ -260,6 +260,36 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class npc_ipp_ds2 : public CreatureScript
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
npc_ipp_ds2() : CreatureScript("npc_ipp_ds2") { }
|
||||||
|
|
||||||
|
struct npc_ipp_ds2AI: ScriptedAI
|
||||||
|
{
|
||||||
|
explicit npc_ipp_ds2AI(Creature* creature) : ScriptedAI(creature) { };
|
||||||
|
|
||||||
|
bool CanBeSeen(Player const* player) override
|
||||||
|
{
|
||||||
|
if (player->IsGameMaster() || !sIndividualProgression->enabled)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (sIndividualProgression->earlyDungeonSet2)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
|
||||||
|
return sIndividualProgression->hasPassedProgression(target, PROGRESSION_BLACKWING_LAIR);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CreatureAI* GetAI(Creature* creature) const override
|
||||||
|
{
|
||||||
|
return new npc_ipp_ds2AI(creature);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class npc_ipp_naxx40 : public CreatureScript
|
class npc_ipp_naxx40 : public CreatureScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -290,6 +320,7 @@ void AddSC_mod_individual_progression_awareness()
|
|||||||
{
|
{
|
||||||
new npc_ipp_aq();
|
new npc_ipp_aq();
|
||||||
// new npc_ipp_naxx40(); // Not used yet
|
// new npc_ipp_naxx40(); // Not used yet
|
||||||
|
new npc_ipp_ds2();
|
||||||
new npc_ipp_tbc();
|
new npc_ipp_tbc();
|
||||||
new npc_ipp_tbc_t4();
|
new npc_ipp_tbc_t4();
|
||||||
new npc_ipp_tbc_pre_t4();
|
new npc_ipp_tbc_pre_t4();
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ public:
|
|||||||
|
|
||||||
void OnLogin(Player* player) override
|
void OnLogin(Player* player) override
|
||||||
{
|
{
|
||||||
if (sIndividualProgression->deathKnightStartingProgression && !sIndividualProgression->hasPassedProgression(player, static_cast<ProgressionState>(sIndividualProgression->deathKnightStartingProgression)))
|
if (player->getClass() == CLASS_DEATH_KNIGHT && sIndividualProgression->deathKnightStartingProgression && !sIndividualProgression->hasPassedProgression(player, static_cast<ProgressionState>(sIndividualProgression->deathKnightStartingProgression)))
|
||||||
{
|
{
|
||||||
sIndividualProgression->UpdateProgressionState(player, static_cast<ProgressionState>(sIndividualProgression->deathKnightStartingProgression));
|
sIndividualProgression->UpdateProgressionState(player, static_cast<ProgressionState>(sIndividualProgression->deathKnightStartingProgression));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -252,7 +252,7 @@ public:
|
|||||||
StartBalconyPhase();
|
StartBalconyPhase();
|
||||||
break;
|
break;
|
||||||
case EVENT_BLINK:
|
case EVENT_BLINK:
|
||||||
DoResetThreat();
|
DoResetThreatList();
|
||||||
me->CastSpell(me, SPELL_CRIPPLE, false);
|
me->CastSpell(me, SPELL_CRIPPLE, false);
|
||||||
me->CastSpell(me, SPELL_BLINK, true);
|
me->CastSpell(me, SPELL_BLINK, true);
|
||||||
Talk(EMOTE_BLINK);
|
Talk(EMOTE_BLINK);
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ enum Events
|
|||||||
class boss_sapphiron_40 : public CreatureScript
|
class boss_sapphiron_40 : public CreatureScript
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
static boolean isNaxx40Sapp(uint32 entry)
|
static bool isNaxx40Sapp(uint32 entry)
|
||||||
{
|
{
|
||||||
return (entry == NPC_SAPPHIRON_40);
|
return (entry == NPC_SAPPHIRON_40);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ enum Spells
|
|||||||
SPELL_FIREBALL = 18392,
|
SPELL_FIREBALL = 18392,
|
||||||
SPELL_BELLOWINGROAR = 18431,
|
SPELL_BELLOWINGROAR = 18431,
|
||||||
|
|
||||||
SPELL_SUMMON_WHELP = 17646,
|
SPELL_SUMMON_WHELP = 90003,
|
||||||
SPELL_SUMMON_LAIR_GUARD = 68968,
|
SPELL_SUMMON_LAIR_GUARD = 68968,
|
||||||
SPELL_ERUPTION = 17731,
|
SPELL_ERUPTION = 17731,
|
||||||
|
|
||||||
@@ -278,8 +278,8 @@ public:
|
|||||||
{
|
{
|
||||||
float angle = rand_norm() * 2 * M_PI;
|
float angle = rand_norm() * 2 * M_PI;
|
||||||
float dist = rand_norm() * 4.0f;
|
float dist = rand_norm() * 4.0f;
|
||||||
me->CastSpell(-33.18f + cos(angle) * dist, -258.80f + sin(angle) * dist, -89.0f, 17646, true);
|
me->CastSpell(-33.18f + cos(angle) * dist, -258.80f + sin(angle) * dist, -89.0f, SPELL_SUMMON_WHELP, true);
|
||||||
me->CastSpell(-32.535f + cos(angle) * dist, -170.190f + sin(angle) * dist, -89.0f, 17646, true);
|
me->CastSpell(-32.535f + cos(angle) * dist, -170.190f + sin(angle) * dist, -89.0f, SPELL_SUMMON_WHELP, true);
|
||||||
whelpCount += 2;
|
whelpCount += 2;
|
||||||
whelpSpamTimer += 600;
|
whelpSpamTimer += 600;
|
||||||
}
|
}
|
||||||
@@ -341,7 +341,7 @@ public:
|
|||||||
me->AttackStop();
|
me->AttackStop();
|
||||||
me->SetReactState(REACT_PASSIVE);
|
me->SetReactState(REACT_PASSIVE);
|
||||||
me->StopMoving();
|
me->StopMoving();
|
||||||
DoResetThreat();
|
DoResetThreatList();
|
||||||
me->GetMotionMaster()->MovePoint(10, OnyxiaMoveData[0].x, OnyxiaMoveData[0].y, OnyxiaMoveData[0].z);
|
me->GetMotionMaster()->MovePoint(10, OnyxiaMoveData[0].x, OnyxiaMoveData[0].y, OnyxiaMoveData[0].z);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -391,7 +391,7 @@ public:
|
|||||||
Talk(SAY_PHASE_3_TRANS);
|
Talk(SAY_PHASE_3_TRANS);
|
||||||
me->SendMeleeAttackStop(me->GetVictim());
|
me->SendMeleeAttackStop(me->GetVictim());
|
||||||
me->GetMotionMaster()->MoveLand(13, OnyxiaMoveData[0].x + 1.0f, OnyxiaMoveData[0].y, OnyxiaMoveData[0].z, 12.0f);
|
me->GetMotionMaster()->MoveLand(13, OnyxiaMoveData[0].x + 1.0f, OnyxiaMoveData[0].y, OnyxiaMoveData[0].z, 12.0f);
|
||||||
DoResetThreat();
|
DoResetThreatList();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EVENT_SPELL_FIREBALL_FIRST:
|
case EVENT_SPELL_FIREBALL_FIRST:
|
||||||
@@ -508,8 +508,8 @@ public:
|
|||||||
{
|
{
|
||||||
float angle = rand_norm() * 2 * M_PI;
|
float angle = rand_norm() * 2 * M_PI;
|
||||||
float dist = rand_norm() * 4.0f;
|
float dist = rand_norm() * 4.0f;
|
||||||
me->CastSpell(-33.18f + cos(angle) * dist, -258.80f + sin(angle) * dist, -89.0f, 17646, true);
|
me->CastSpell(-33.18f + cos(angle) * dist, -258.80f + sin(angle) * dist, -89.0f, SPELL_SUMMON_WHELP, true);
|
||||||
me->CastSpell(-32.535f + cos(angle) * dist, -170.190f + sin(angle) * dist, -89.0f, 17646, true);
|
me->CastSpell(-32.535f + cos(angle) * dist, -170.190f + sin(angle) * dist, -89.0f, SPELL_SUMMON_WHELP, true);
|
||||||
events.RepeatEvent(30000);
|
events.RepeatEvent(30000);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ public:
|
|||||||
|
|
||||||
void UpdateAI(uint32 diff) override
|
void UpdateAI(uint32 diff) override
|
||||||
{
|
{
|
||||||
if (!sWorld->getBoolConfig(CONFIG_WINTERGRASP_ENABLE))
|
if (sWorld->getIntConfig(CONFIG_WINTERGRASP_ENABLE) == 2)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ScriptedAI::UpdateAI(diff);
|
ScriptedAI::UpdateAI(diff);
|
||||||
@@ -164,4 +164,4 @@ public:
|
|||||||
void AddSC_Ipp_Wotlk_Modded_Scripts()
|
void AddSC_Ipp_Wotlk_Modded_Scripts()
|
||||||
{
|
{
|
||||||
new npc_wg_queue_ipp();
|
new npc_wg_queue_ipp();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user