Compare commits

...

24 Commits

Author SHA1 Message Date
ZhengPeiRu21
48ee89b122 Merge pull request #248 from jellemeeus/missing-eye-stalk
fix: Add eye stalk
2024-04-09 13:37:22 -06:00
Jelle Meeus
d13bafb42e fix: Add eye stalk 2024-03-30 23:04:08 +01:00
郑佩茹
e814c794c7 Port several TBC raid progression improvements from mod_progression 2024-03-26 17:01:54 -06:00
郑佩茹
19727d9f0e Fix several NPCs sending players to Isle of Quel'Danas early 2024-03-04 08:36:18 -07:00
郑佩茹
a92ce5b139 Move several Zul'Aman NPCs to correct phase (thanks Grimfeather) 2024-03-04 08:27:56 -07:00
ZhengPeiRu21
e34fbacba4 Merge pull request #233 from Day36512/master
Make AQ Gate Stay Open Beyond Stage 5
2024-02-29 09:37:37 -07:00
Dinkledork
803638a767 Open Gates for players beyond Stage 5 2024-01-29 14:20:44 -07:00
Dinkledork
c9d5eefa8b Update aq_scripts.cpp
Make gate and gong automatically unseen for players beyond AQ40.
2024-01-29 14:18:58 -07:00
ZhengPeiRu21
059eea8d6e Merge pull request #220 from atrapalis/atrapalis-patch-1
fix(DB): Added vanilla Onyxia as a dungeon/instance encounter
2024-01-22 16:24:43 -07:00
郑佩茹
77a65bd506 Fix Lvl 28 PvP Gear - thanks StraysFromPath 2024-01-22 16:19:39 -07:00
atrapalis
f97fb5d8d1 fix(DB): Added vanilla Onyxia as a dungeon/instance encounter
This fixes a minor issue where 40-man Onyxia was not identified as a dungeon/raid boss by `Creature->IsDungeonBoss()`
2024-01-07 15:30:23 +00:00
郑佩茹
9f09f01041 Fix Night Elf Ambusher damage 2023-12-18 09:21:21 -07:00
郑佩茹
3dbc2e0a56 Fix periodic healing auras being scaled twice 2023-11-03 09:51:14 -06:00
郑佩茹
f5bfc52729 Update SimpleConfigOverride description in config file 2023-09-29 08:15:49 -06:00
郑佩茹
a84a3452d3 Set DBC.EnforceItemAttributes to false when SimpleConfigOverride is enabled 2023-09-29 08:13:35 -06:00
郑佩茹
be4496c034 Disable LFG when SimpleConfigOverride is enabled 2023-09-29 08:10:44 -06:00
郑佩茹
d1bb3f2f23 Do not apply healing scaling to Max Health heals (LoH, etc.) 2023-09-29 08:05:30 -06:00
ZhengPeiRu21
f3a82db829 Merge pull request #190 from Day36512/master
RDF Exceptions for Holidays and Crypt Scarab enhancements
2023-09-29 07:58:06 -06:00
Dinkledork
ba20397ea1 Update individualProgression.conf.dist 2023-09-28 11:38:44 -06:00
Dinkledork
b3cb2bedae Update boss_anubrekhan_40.cpp
Ensures Corpse Scarabs engage in combat.
2023-09-27 19:08:20 -06:00
Dinkledork
35e9f4dbdd Holiday Exceptions for Disable RDF
Added Holiday events to the exception list.
2023-09-27 18:55:14 -06:00
Dinkledork
4ad27208ff Undo RDF Holliday Commit 2023-09-27 18:32:59 -06:00
Dinkledork
fa7d7ed502 RDF Disable Holliday Exceptions
Added exceptions to Headless Horseman, Frost Lord Ahune, Coren Direbrew, and Crown Chemical Co.
2023-09-27 18:02:54 -06:00
Dinkledork
a11fd7113e Update naxx40_creatures.sql
Movement type set to 0 for Scarab Corpse. Was set to wp path movement type, which is incorrect.
2023-09-27 11:42:51 -06:00
17 changed files with 460 additions and 70 deletions

View File

@@ -164,6 +164,25 @@ IndividualProgression.MoltenCore.ManualRuneHandling = 1
IndividualProgression.MoltenCore.AqualEssenceCooldownReduction = 0
#
# IndividualProgression.SerpentshrineCavern.RequireAllBosses
# Description: Requires all bosses being killed before accessing Vashj's console panel.
# Default: 1 - Enabled
# 0 - Disabled
#
#
IndividualProgression.SerpentshrineCavern.RequireAllBosses = 1
#
# IndividualProgression.TheEye.RequireAllBosses
# Description: Requires all bosses being killed to open the doors to Kael
# Default: 1 - Enabled
# 0 - Disabled
#
#
IndividualProgression.TheEye.RequireAllBosses = 1
#
# IndividualProgression.FishingFix
# Description: Before patch 3.1, fishing skill had progression and had to be leveled in low level zones before high level areas could add skill
# In patch 3.1, it was changed to allow leveling fishing even when catching junk in high level zones, allowing progression to be skipped
@@ -184,6 +203,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 +352,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
#

View File

@@ -0,0 +1,3 @@
UPDATE `acore_world`.`gameobject_template` SET `ScriptName`='aq_gate' WHERE `entry`=176148;
UPDATE `acore_world`.`gameobject_template` SET `ScriptName`='aq_gate' WHERE `entry`=176147;
UPDATE `acore_world`.`gameobject_template` SET `ScriptName`='aq_gate' WHERE `entry`=176146;

View File

@@ -908,6 +908,12 @@ DELETE FROM `mapdifficulty_dbc` WHERE `MapID` = 249;
INSERT INTO `mapdifficulty_dbc` (`ID`, `MapID`, `Difficulty`, `RaidDuration`, `MaxPlayers`, `Difficultystring`) VALUES
(755, 249, 2, 604800, 40, 'RAID_DIFFICULTY_40PLAYER');
INSERT INTO `dungeonencounter_dbc` (`ID`, `MapID`, `Difficulty`, `OrderIndex`, `Bit`, `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`, `SpellIconID`) VALUES
(895, 249, 2, 0, 0, 'Onyxia', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 16712190, 0);
INSERT INTO `instance_encounters` (`entry`, `creditType`, `creditEntry`, `lastEncounterDungeon`, `comment`) VALUES
(895, 0, 301000, 0, 'Onyxia (Vanilla)');
-- Victory for the Alliance - Bolvar or Varian
DELETE FROM `creature_questender` WHERE `quest` = 7495;
INSERT INTO `creature_questender` (`id`, `quest`) VALUES
@@ -1023,4 +1029,4 @@ DELETE FROM `areatrigger_scripts` WHERE `entry` = 2848;
INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES
(2848, 'onyxia_entrance_trigger');
UPDATE `gameobject` SET `spawnMask` = 7 WHERE `map` = 249;
UPDATE `gameobject` SET `spawnMask` = 7 WHERE `map` = 249;

View File

@@ -0,0 +1,12 @@
/* SSC Bosses should only drop 2 pieces of loot - was changed to 3 pieces after WotLK release */
DELETE FROM `creature_loot_template` WHERE (`Entry` = 21215) AND (`Item` IN (34059));
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(21215, 34059, 34059, 100, 0, 1, 0, 1, 2, 'Leotheras the Blind - (ReferenceTable)');
DELETE FROM `creature_loot_template` WHERE (`Entry` = 21214) AND (`Item` IN (34060));
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(21214, 34060, 34060, 100, 0, 1, 0, 1, 2, 'Fathom-Lord Karathress - (ReferenceTable)');
DELETE FROM `creature_loot_template` WHERE (`Entry` = 21212) AND (`Item` IN (34062));
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(21212, 34062, 34062, 100, 0, 1, 3, 1, 2, 'Lady Vashj - (ReferenceTable)');

View File

@@ -27,7 +27,10 @@ UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_wotlk_icc' WHERE `entry`
UPDATE `gameobject_template` SET `ScriptName` = 'gobject_ipp_tbc' WHERE `entry` IN (195141);
-- Drop source for 2.3 Jewelcrafting Recipe
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_tbc_t4' WHERE `entry` = 19768;
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_tbc_t4' WHERE `entry` IN (19768, 19227, 23761);
-- 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);
-- Argent Tournament
UPDATE `creature` SET `phaseMask` = @IPPPHASE WHERE `guid` IN (25, 63129, 63236, 63370, 63371, 65274, 65275, 65283, 65284, 65285, 65325, 65327, 65350, 65351, 65371, 65451,

View File

@@ -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, ''),
@@ -5356,3 +5356,32 @@ UPDATE `creature_template` SET `name` = 'Death Lord', `speed_run` = 1.42857, `Da
/* Mr. Bigglesworth */
UPDATE `creature_template` SET `speed_run` = 0.857143, `DamageModifier` = 400.0, `RangeAttackTime` = 1265 WHERE `entry`=16998;
/* Eye Stalk */
DELETE FROM `creature_template` WHERE (`entry` = 351090);
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid1`, `modelid2`, `modelid3`, `modelid4`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(351090, 0, 0, 0, 0, 0, 15788, 0, 0, 0, 'Eye Stalk', '', '', 0, 61, 61, 2, 16, 0, 1, 1, 1, 1, 20, 1, 1, 0, 7.5, 1000, 2000, 1, 1, 1, 4, 2048, 8, 0, 0, 0, 0, 0, 10, 72, 0, 0, 0, 0, 0, 0, 0, 'SmartAI', 0, 1, 1, 1, 1, 1, 0, 0, 1, 1022042641, 0, 0, '', 12340);
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 351090);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(351090, 0, 0, 0, 0, 0, 100, 0, 5000, 7000, 14000, 17000, 0, 0, 11, 29407, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Cast Spell IC (Naxx 40)');
DELETE FROM `creature` WHERE `guid` BETWEEN 362043 AND 362059;
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
(362043, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2798.06, -3788.95, 274.983, 1.51844, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362044, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2804.25, -3757.44, 274.983, 3.64774, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362045, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2867.35, -3778.54, 274.983, 2.47837, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362046, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2895.12, -3779.74, 274.983, 2.6529, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362047, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2830.7, -3777.03, 274.983, 2.9147, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362048, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2851.92, -3776.44, 274.983, 2.53073, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362049, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2789.62, -3752.53, 274.983, 2.61799, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362050, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2843.34, -3767.74, 274.983, 3.31613, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362051, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2797.94, -3776.81, 274.983, 2.35619, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362052, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2834.6, -3751.34, 274.983, 4.20624, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362053, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2862.27, -3758.34, 274.983, 3.36848, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362054, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2813.24, -3780.76, 274.983, 2.49582, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362055, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2881.55, -3782.26, 274.983, 2.47837, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362056, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2791.84, -3762.35, 274.983, 3.35103, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362057, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2877.97, -3761.82, 274.983, 3.64774, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362058, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2770.1, -3782.59, 274.983, 1.02974, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362059, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2846.52, -3789.07, 274.983, 2.23402, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL);

View File

@@ -23,3 +23,9 @@ UPDATE `item_template` SET `requiredhonorrank` = 14 WHERE `entry` IN (16526, 232
UPDATE `item_template` SET `requiredhonorrank` = 16 WHERE `entry` IN (16569, 16572, 16571, 16567, 16570, 16556, 16554, 16553, 16555, 16552, 17589, 17586, 17587, 17588, 17593, 29612, 29613, 29614, 16559, 16557, 16564, 16560, 16558, 16573, 16576, 16574, 16579, 16575, 16546, 16545, 16548, 16547, 16543, 17618, 17619, 17621, 17620, 17625, 16539, 16538, 16540, 16537, 16534);
UPDATE `item_template` SET `requiredhonorrank` = 17 WHERE `entry` IN (16565, 16566, 16568, 16551, 16549, 16550, 17591, 17590, 17592, 29615, 29616, 29617, 16563, 16561, 16562, 16577, 16578, 16580, 16541, 16542, 16544, 17623, 17622, 17624, 16536, 16533, 16535);
UPDATE `item_template` SET `requiredhonorrank` = 18 WHERE `entry` IN (18831, 23459, 23464, 16345, 18866, 18828, 18837, 23457, 23465, 18877, 18848, 18871, 18868, 23461, 23467, 18840, 18835, 18844, 18826, 23458, 23466, 18860, 23462, 23468, 23469, 18874);
/* Defilers and Highlander Gear */
UPDATE `item_template` SET `RequiredReputationFaction` = 510, `RequiredReputationRank` = 6 WHERE `entry` IN
(20152, 20157, 20162, 20164, 20169, 20172, 20178, 20182, 20188, 20191, 20197);
UPDATE `item_template` SET `RequiredReputationFaction` = 509, `RequiredReputationRank` = 6 WHERE `entry` IN
(20090, 20093, 20096, 20099, 20102, 20105, 20108, 20111, 20114);

View File

@@ -1,3 +1,6 @@
/* Badges of Justice were not added to raids until later patches - remove them from raid drops */
DELETE FROM `creature_loot_template` WHERE `Entry` IN (17225, 15690, 15688, 15689, 16524, 15691, 17533, 18168, 17521, 16457, 15687, 16152, 21216, 21217, 21215, 21214, 21213, 21212, 19514, 19622, 19516, 18805) AND (`Item` IN (29434));
/* Create alternate version of TBC Badge Vendor for pre-2.3 */
DELETE FROM `npc_vendor` WHERE `entry` = 30201;
INSERT INTO `npc_vendor` (`entry`, `slot`, `item`, `maxcount`, `incrtime`, `ExtendedCost`, `VerifiedBuild`) VALUES

View File

@@ -423,7 +423,7 @@ UPDATE `creature_template` SET `DamageModifier` = 0.7 WHERE `entry`=16221;
UPDATE `creature_template` SET `DamageModifier` = 0.6 WHERE `entry`=16231;
/* Night Elf Ambusher */
UPDATE `creature_template` SET `speed_run` = 1.38571, `DamageModifier` = 5.0 WHERE `entry`=16238;
UPDATE `creature_template` SET `speed_run` = 1.38571 WHERE `entry`=16238;
/* Magister Kaendris */
UPDATE `creature_template` SET `DamageModifier` = 0.6 WHERE `entry`=16239;

View File

@@ -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);
}
}
};

View File

@@ -104,6 +104,32 @@ public:
}
};
class npc_ipp_tbc_t5 : public CreatureScript
{
public:
npc_ipp_tbc_t5() : CreatureScript("npc_ipp_tbc_t5") { }
struct npc_ipp_tbc_t5AI: ScriptedAI
{
explicit npc_ipp_tbc_t5AI(Creature* creature) : ScriptedAI(creature) { };
bool CanBeSeen(Player const* player) override
{
if (player->IsGameMaster() || !sIndividualProgression->enabled)
{
return true;
}
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
return sIndividualProgression->hasPassedProgression(target, PROGRESSION_TBC_TIER_4);
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ipp_tbc_t5AI(creature);
}
};
class npc_ipp_tbc_pre_t4 : public CreatureScript
{
public:
@@ -323,6 +349,7 @@ void AddSC_mod_individual_progression_awareness()
new npc_ipp_ds2();
new npc_ipp_tbc();
new npc_ipp_tbc_t4();
new npc_ipp_tbc_t5();
new npc_ipp_tbc_pre_t4();
new npc_ipp_wotlk();
new npc_ipp_wotlk_ulduar();

View File

@@ -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)
{

View File

@@ -40,6 +40,8 @@ void AddSC_mod_individual_progression_awareness();
void AddSC_mod_individual_progression_player();
void AddSC_npc_archmage_timear();
void AddSC_karazhan_70();
void AddSC_the_eye_70();
void AddSC_serpentshrine_cavern_70();
void Addmod_individual_progressionScripts()
@@ -81,4 +83,6 @@ void Addmod_individual_progressionScripts()
AddSC_mod_individual_progression_player();
AddSC_npc_archmage_timear();
AddSC_karazhan_70();
AddSC_the_eye_70();
AddSC_serpentshrine_cavern_70();
}

View File

@@ -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

View File

@@ -0,0 +1,108 @@
/*
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3
*/
#include "Config.h"
#include "Player.h"
#include "ScriptMgr.h"
#include "SpellInfo.h"
enum SSCMisc
{
GO_LADY_VASHJ_BRIDGE_CONSOLE = 184568,
MAP_SSC = 548,
DATA_LURKER = 1,
DATA_VASHJ = 6
};
class GlobalSerpentshrineScript : public GlobalScript
{
public:
GlobalSerpentshrineScript() : GlobalScript("GlobalSerpentshrineScript") { }
bool IsAnyBossAlive(Map* map, uint32 bossId = 0, uint32 newState = 0)
{
if (InstanceMap* instanceMap = map->ToInstanceMap())
{
if (InstanceScript* instance = instanceMap->GetInstanceScript())
{
uint32 bossCount = instance->GetEncounterCount() - 3;
for (uint8 id = 0; id <= bossCount; ++id)
{
if (id == bossId && newState == DONE)
{
continue;
}
if (id == DATA_LURKER)
{
continue;
}
if (instance->GetBossState(id) != DONE)
{
return true;
}
}
}
}
return false;
}
void AfterInstanceGameObjectCreate(Map* map, GameObject* go) override
{
if (sConfigMgr->GetOption<int>("IndividualProgression.SerpentshrineCavern.RequireAllBosses", 1))
{
if (go->GetEntry() == GO_LADY_VASHJ_BRIDGE_CONSOLE)
{
if (IsAnyBossAlive(map))
{
go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
}
}
}
}
void OnLoadSpellCustomAttr(SpellInfo* spellInfo) override
{
switch (spellInfo->Id)
{
case 38236: // Caribdis - Spawn Spitfire Totem
spellInfo->Effects[EFFECT_0].BasePoints = 70000;
break;
}
}
void OnBeforeSetBossState(uint32 bossId, EncounterState newState, EncounterState /*oldState*/, Map* map) override
{
if (sConfigMgr->GetOption<int>("IndividualProgression.SerpentshrineCavern.RequireAllBosses", 1))
{
if (map->GetEntry()->MapID == MAP_SSC)
{
if (InstanceMap* instanceMap = map->ToInstanceMap())
{
if (InstanceScript* instance = instanceMap->GetInstanceScript())
{
if (!IsAnyBossAlive(map, bossId, newState))
{
if (Creature* vashj = instance->GetCreature(DATA_VASHJ))
{
if (GameObject* console = vashj->FindNearestGameObject(GO_LADY_VASHJ_BRIDGE_CONSOLE, 600.0f))
{
console->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
}
}
}
}
}
}
}
}
};
void AddSC_serpentshrine_cavern_70()
{
new GlobalSerpentshrineScript();
}

View File

@@ -0,0 +1,97 @@
/*
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3
*/
#include "Config.h"
#include "Player.h"
#include "ScriptMgr.h"
#include "SpellInfo.h"
enum SSCMisc
{
GO_RIGHT_KAEL_DOOR = 184327,
GO_LEFT_KAEL_DOOR = 184329,
MAP_TK = 550,
DATA_KAEL = 3
};
class GlobalTheEyeScript : public GlobalScript
{
public:
GlobalTheEyeScript() : GlobalScript("GlobalTheEyeScript") { }
bool IsAnyBossAlive(Map* map, uint32 bossId = 0, uint32 newState = 0)
{
if (InstanceMap* instanceMap = map->ToInstanceMap())
{
if (InstanceScript* instance = instanceMap->GetInstanceScript())
{
uint32 bossCount = instance->GetEncounterCount() - 1;
for (uint8 id = 0; id < bossCount; ++id)
{
if (id == bossId && newState == DONE)
{
continue;
}
if (instance->GetBossState(id) != DONE)
{
return true;
}
}
}
}
return false;
}
void AfterInstanceGameObjectCreate(Map* map, GameObject* go) override
{
if (sConfigMgr->GetOption<int>("IndividualProgression.TheEye.RequireAllBosses", 1))
{
if (go->GetEntry() == GO_RIGHT_KAEL_DOOR || go->GetEntry() == GO_LEFT_KAEL_DOOR)
{
if (IsAnyBossAlive(map))
{
go->SetGoState(GO_STATE_READY);
}
}
}
}
void OnBeforeSetBossState(uint32 bossId, EncounterState newState, EncounterState /*oldState*/, Map* map) override
{
if (sConfigMgr->GetOption<int>("IndividualProgression.TheEye.RequireAllBosses", 1))
{
if (map->GetEntry()->MapID == MAP_TK)
{
if (InstanceMap* instanceMap = map->ToInstanceMap())
{
if (InstanceScript* instance = instanceMap->GetInstanceScript())
{
if (!IsAnyBossAlive(map, bossId, newState))
{
if (Creature* kael = instance->GetCreature(DATA_KAEL))
{
if (GameObject* rightDoor = kael->FindNearestGameObject(GO_RIGHT_KAEL_DOOR, 600.0f))
{
if (GameObject* leftDoor = kael->FindNearestGameObject(GO_LEFT_KAEL_DOOR, 600.0f))
{
rightDoor->SetGoState(GO_STATE_ACTIVE);
leftDoor->SetGoState(GO_STATE_ACTIVE);
}
}
}
}
}
}
}
}
}
};
void AddSC_the_eye_70()
{
new GlobalTheEyeScript();
}

View File

@@ -1,3 +1,4 @@
#include "IndividualProgression.h"
#include "ScriptMgr.h"
#include "Player.h"
#include "GameObjectAI.h"
@@ -61,17 +62,32 @@ public:
{
switch (eventStage)
{
case STAGE_OPEN_GATES:
return HandleOpeningStage();
case STAGE_WAR:
return HandleWarStage();
case STAGE_RESET:
return ResetAQGates();
case STAGE_OPEN_GATES:
HandleOpeningStage();
break;
case STAGE_WAR:
HandleWarStage();
break;
case STAGE_RESET:
ResetAQGates();
break;
}
} else
}
else
eventTimer -= diff;
}
};
}
bool CanBeSeen(Player const* player) override
{
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (!target)
{
return false;
}
return sIndividualProgression->isBeforeProgression(target, PROGRESSION_AQ);
}
void NextStage(uint32 timeUntil = 100)
{
@@ -84,28 +100,26 @@ public:
{
switch (eventStep)
{
case 0:
go_aq_gate_roots->ResetDoorOrButton();
go_aq_gate_roots->UseDoorOrButton();
me->PlayDirectSound(SOUND_ROOTS_OPEN);
case 0:
go_aq_gate_roots->ResetDoorOrButton();
go_aq_gate_roots->UseDoorOrButton();
me->PlayDirectSound(SOUND_ROOTS_OPEN);
eventTimer = 5000;
break;
eventTimer = 5000;
break;
case 1:
go_aq_gate_runes->ResetDoorOrButton();
go_aq_gate_runes->UseDoorOrButton();
me->PlayDirectSound(SOUND_RUNES_OPEN);
eventTimer = 8000;
break;
case 1:
go_aq_gate_runes->ResetDoorOrButton();
go_aq_gate_runes->UseDoorOrButton();
me->PlayDirectSound(SOUND_RUNES_OPEN);
eventTimer = 8000;
break;
case 2:
go_aq_barrier->ResetDoorOrButton();
go_aq_barrier->UseDoorOrButton();
me->PlayDirectSound(SOUND_DOOR_OPEN);
NextStage(10000);
return;
case 2:
go_aq_barrier->ResetDoorOrButton();
go_aq_barrier->UseDoorOrButton();
me->PlayDirectSound(SOUND_DOOR_OPEN);
NextStage(10000);
return;
}
eventStep++;
@@ -117,15 +131,8 @@ public:
NextStage(5 * MINUTE * IN_MILLISECONDS);
}
void EventDone()
{
NextStage(0);
eventStage = STAGE_OPEN_GATES;
}
void ResetAQGates()
{
// go_aq_ghost_gate->SetGoState(GO_STATE_READY);
go_aq_barrier->SetGoState(GO_STATE_READY);
go_aq_gate_runes->SetGoState(GO_STATE_READY);
go_aq_gate_roots->ResetDoorOrButton();
@@ -134,6 +141,13 @@ public:
EventDone();
}
void EventDone()
{
NextStage(0);
eventStage = STAGE_OPEN_GATES; // Reset to the initial stage for potential future events
}
void OpenGate(Player *player, bool announce)
{
go_aq_barrier = GetClosestGameObjectWithEntry(me, GO_GATE_OF_AHN_QIRAJ, 150);
@@ -188,8 +202,37 @@ public:
}
};
class aq_gate : public GameObjectScript
{
public:
aq_gate() : GameObjectScript("aq_gate") {}
struct aq_gateAI : public GameObjectAI
{
explicit aq_gateAI(GameObject* go) : GameObjectAI(go) {}
bool CanBeSeen(Player const* player) override
{
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (!target)
{
return false;
}
return sIndividualProgression->isBeforeProgression(target, PROGRESSION_AQ);
}
};
GameObjectAI* GetAI(GameObject* go) const override
{
return new aq_gateAI(go);
}
};
void AddSC_aq_scripts()
{
new aq_gate();
new gobject_scarab_gong();
}