mirror of
https://github.com/ZhengPeiRu21/mod-individual-progression
synced 2025-11-29 23:44:51 +08:00
Compare commits
3 Commits
a4b67e9e59
...
c6d3f5277a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c6d3f5277a | ||
|
|
cbf82d1f7c | ||
|
|
30139e0c88 |
@@ -44,7 +44,8 @@ This is handled by the client, so I have created an addon that will restore this
|
||||
Special thanks to all contributors of the following projects who made this module possible:
|
||||
* AzerothCore and TrinityCore, along with ancestors Mangos, etc.
|
||||
* AzerothCore Progression Module for Vanilla content and scripts
|
||||
* AzerothCore War Effort Module
|
||||
* AzerothCore mod-war-effort
|
||||
* AzerothCore mod-pvp-titles
|
||||
* Wrath of the Vanilla Module for more Vanilla world adjustments
|
||||
* Vmangos for Vanilla game and patch progression data
|
||||
* Sogladev for many Naxx 40 scripts and data
|
||||
|
||||
@@ -66,7 +66,7 @@ INSERT INTO `quest_template` (`ID`, `QuestType`, `QuestLevel`, `MinLevel`, `Ques
|
||||
`TimeAllowed`, `AllowableRaces`, `LogTitle`, `LogDescription`, `QuestDescription`, `AreaDescription`, `QuestCompletionLog`, `RequiredNpcOrGo1`, `RequiredNpcOrGo2`, `RequiredNpcOrGo3`, `RequiredNpcOrGo4`, `RequiredNpcOrGoCount1`, `RequiredNpcOrGoCount2`, `RequiredNpcOrGoCount3`, `RequiredNpcOrGoCount4`, `RequiredItemId1`, `RequiredItemId2`, `RequiredItemId3`, `RequiredItemId4`, `RequiredItemId5`, `RequiredItemId6`,
|
||||
`RequiredItemCount1`, `RequiredItemCount2`, `RequiredItemCount3`, `RequiredItemCount4`, `RequiredItemCount5`, `RequiredItemCount6`, `Unknown0`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES
|
||||
|
||||
(108743, 0, 60, 60, 1377, 82, 0, 0, 0, 0, 0, 108744, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Simply Bang a Gong!', '', '', NULL, 'Return to The Scarab Gong in Silithus.', 0, 0, 0, 0, 0, 0, 0, 0, 9240, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, '', '', '', '', 12340),
|
||||
(108743, 0, 60, 60, 1377, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Simply Bang a Gong!', '', '', NULL, 'Return to The Scarab Gong in Silithus.', 0, 0, 0, 0, 0, 0, 0, 0, 9240, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, '', '', '', '', 12340),
|
||||
(108744, 2, 60, 60, 1377, 82, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 910, 7, 0, 609, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172800, 0, 'Chaos and Destruction', 'Kill the Colossus of Ashi, Regal and Zora.', '', '', 'Return to Jonathan the Revelator at the Scarab Gong.', 15740, 15741, 15742, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', '', '', NULL);
|
||||
|
||||
UPDATE `quest_template` SET `RewardNextQuest` = 108744 WHERE `ID` = 8743;
|
||||
@@ -85,20 +85,28 @@ INSERT INTO `quest_offer_reward` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`,
|
||||
DELETE FROM `quest_template_addon` WHERE `ID` IN (8743, 108743, 108744);
|
||||
INSERT INTO `quest_template_addon` (`ID`, `MaxLevel`, `AllowableClasses`, `SourceSpellID`, `PrevQuestID`, `NextQuestID`, `ExclusiveGroup`, `RewardMailTemplateID`, `RewardMailDelay`,
|
||||
`RequiredSkillID`, `RequiredSkillPoints`, `RequiredMinRepFaction`, `RequiredMaxRepFaction`, `RequiredMinRepValue`, `RequiredMaxRepValue`, `ProvidedItemCount`, `SpecialFlags`) VALUES
|
||||
(8743, 0, 0, 0, 8742, 108744, 0, 0, 0, 0, 0, 910, 0, 0, 0, 0, 0),
|
||||
(108743, 0, 0, 0, 0, 108744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||
(108744, 0, 0, 0, 108743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
(8743, 0, 0, 0, 8742, 0, 0, 0, 0, 0, 0, 910, 0, 0, 0, 0, 0),
|
||||
(108743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||
(108744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 19 AND `ConditionTypeOrReference` = 8 AND `SourceEntry` IN (108744);
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`,
|
||||
`ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||
--
|
||||
(19, 0, 108744, 0, 0, 8, 0, 8743, 0, 0, 0, 0, 0, '', 'Quest: Chaos and Destruction is only available after the player completes either 8743 or 108743'),
|
||||
(19, 0, 108744, 0, 1, 8, 0, 108743, 0, 0, 0, 0, 0, '', 'Quest: Chaos and Destruction is only available after the player completes either 8743 or 108743');
|
||||
|
||||
UPDATE `quest_template` SET `QuestDescription` = '' WHERE `ID` = 108743;
|
||||
|
||||
-- Connect new 'Bang a Gong!' quest to the Scarab Gong in Silithus
|
||||
DELETE FROM `gameobject_queststarter` WHERE `id` = 180717;
|
||||
INSERT INTO `gameobject_queststarter` (`id`, `quest`) VALUES (180717, 8743), (180717, 108743), (180717, 108744);
|
||||
DELETE FROM `gameobject_queststarter` WHERE `id` = 180717 AND `quest` IN (8743, 108743, 108744);
|
||||
INSERT INTO `gameobject_queststarter` (`id`, `quest`) VALUES (180717, 8743), (180717, 108743);
|
||||
|
||||
DELETE FROM `gameobject_questender` WHERE `id` = 180717;
|
||||
DELETE FROM `gameobject_questender` WHERE `id` = 180717 AND `quest` IN (8743, 108743);
|
||||
INSERT INTO `gameobject_questender` (`id`, `quest`) VALUES (180717, 8743), (180717, 108743);
|
||||
|
||||
DELETE FROM `creature_questender` WHERE `id` = 15693;
|
||||
DELETE FROM `creature_queststarter` WHERE `id` = 15693 AND `quest` = 108744;
|
||||
INSERT INTO `creature_queststarter` (`id`, `quest`) VALUES (15693, 108744);
|
||||
|
||||
DELETE FROM `creature_questender` WHERE `id` = 15693 AND `quest` IN (8745, 108744);
|
||||
INSERT INTO `creature_questender` (`id`, `quest`) VALUES (15693, 8745), (15693, 108744);
|
||||
|
||||
|
||||
|
||||
@@ -197,7 +197,7 @@ UPDATE `gameobject` SET `ScriptName` = 'gobject_ipp_wotlk' WHERE `guid` IN (
|
||||
|
||||
/* Hide Rogg and his anvil + forge at the entrance of Orgrimmar until WotLK */
|
||||
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_wotlk' WHERE `entry` = 37072;
|
||||
UPDATE `gameobject` SET `ScriptName` = 'gobject_ipp_wotlk' WHERE `guid` IN (347, 387);
|
||||
UPDATE `gameobject` SET `ScriptName` = 'gobject_ipp_wotlk' WHERE `guid` IN (347, 387); -- this needs a fix still, Rogg is currently aggressive while hidden.
|
||||
|
||||
/* Landro for TCG promotion in Booty Bay */
|
||||
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_aq' WHERE `entry` = 17249;
|
||||
@@ -205,6 +205,3 @@ UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_aq' WHERE `entry` = 17249
|
||||
/* Hide barber in Kalimdor/Eastern Kingdom/Outland until WotLK - disabled by default, because most players will expect barbers to be there */
|
||||
/* UPDATE `creature` SET `ScriptName` = 'npc_ipp_wotlk' WHERE `map` IN (0, 1, 530) AND `id1` IN (29139, 29141, 29142, 29143, 29145);
|
||||
UPDATE `gameobject` SET `ScriptName` = 'gobject_ipp_wotlk' WHERE `map` IN (0, 1, 530) AND `id` IN (190683, 190684, 190697, 190698, 190699, 190704, 190710, 190711, 190712, 191028, 191029, 191030); */
|
||||
|
||||
/* Hide training dummy in Kalimdor/Eastern Kingdom/Outland until WotLK - disabled by default, because most players will expect dummies to be there */
|
||||
/* UPDATE `creature` SET `ScriptName` = 'npc_training_dummy_ipp_wotlk' WHERE `map` IN (0, 1, 530) AND `id1` IN (31144, 31146, 32666, 32667); */
|
||||
|
||||
@@ -930,3 +930,15 @@ DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 23 AND `SourceGroup`
|
||||
|
||||
-- Update Vanilla ExtendedCost
|
||||
UPDATE `npc_vendor` SET `ExtendedCost` = 0 WHERE `entry` IN (12777, 12792, 12799, 12805, 26394, 26396, 112781, 112783, 112785, 112793, 112794, 112795, 112796);
|
||||
|
||||
-- officer room doors
|
||||
DELETE FROM `gameobject` WHERE `guid` IN (626262, 631660, 631661);
|
||||
INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`,
|
||||
`rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES
|
||||
--
|
||||
(626262, 176576, 0, 1519, 1519, 1, 1, -8765.82, 403.164, 104.162, -0.898844, 0, 0, -0.434445, 0.900698, 900, 100, 1, 'gobject_ipp_pvp_closed', 0, NULL),
|
||||
(631660, 176562, 1, 0, 0, 1, 1, 1634.87, -4247.86, 55.8397, 4.19752, 0, 0, -0.863835, 0.503774, 180, 0, 1, 'gobject_ipp_pvp_closed', NULL, NULL),
|
||||
(631661, 176562, 1, 0, 0, 1, 1, 1634.87, -4247.86, 55.8397, 4.19752, 0, 0, -0.863835, 0.503774, 180, 0, 0, 'gobject_ipp_pvp_open', NULL, NULL);
|
||||
-- I can't figure out why gate 31660 is not visible in Orgrimmar. something is blocking guid 31660 specifically. until someone figures it out, I created a new door. (631661)
|
||||
|
||||
UPDATE `gameobject` SET `state` = 0, `ScriptName` = 'gobject_ipp_pvp_open' WHERE `guid` = 26262;
|
||||
|
||||
@@ -71,8 +71,9 @@ enum ProgressionQuestIDs
|
||||
QUEST_WINTERFALL = 6241,
|
||||
QUEST_THE_ANCIENT_LEAF = 7632,
|
||||
MIGHT_OF_KALIMDOR = 8742,
|
||||
BANG_A_GONG = 8743,
|
||||
INTO_THE_BREACH = 10259,
|
||||
BANG_A_GONG = 108743,
|
||||
SIMPLY_BANG_A_GONG = 108743,
|
||||
CHAOS_AND_DESTRUCTION = 108744
|
||||
};
|
||||
|
||||
|
||||
@@ -236,6 +236,78 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class gobject_ipp_pvp_closed : public GameObjectScript
|
||||
{
|
||||
public:
|
||||
gobject_ipp_pvp_closed() : GameObjectScript("gobject_ipp_pvp_closed") { }
|
||||
|
||||
struct gobject_ipp_pvp_closedAI: GameObjectAI
|
||||
{
|
||||
explicit gobject_ipp_pvp_closedAI(GameObject* object) : GameObjectAI(object) { };
|
||||
|
||||
bool CanBeSeen(Player const* player) override
|
||||
{
|
||||
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
|
||||
uint32 PVP_RANK5_QUEST = 66105;
|
||||
|
||||
if (player->IsGameMaster() || !sIndividualProgression->enabled || sIndividualProgression->isExcludedFromProgression(target))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (target->GetQuestStatus(PVP_RANK5_QUEST) == QUEST_STATUS_REWARDED)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
GameObjectAI* GetAI(GameObject* object) const override
|
||||
{
|
||||
return new gobject_ipp_pvp_closedAI(object);
|
||||
}
|
||||
};
|
||||
|
||||
class gobject_ipp_pvp_open : public GameObjectScript
|
||||
{
|
||||
public:
|
||||
gobject_ipp_pvp_open() : GameObjectScript("gobject_ipp_pvp_open") { }
|
||||
|
||||
struct gobject_ipp_pvp_openAI: GameObjectAI
|
||||
{
|
||||
explicit gobject_ipp_pvp_openAI(GameObject* object) : GameObjectAI(object) { };
|
||||
|
||||
bool CanBeSeen(Player const* player) override
|
||||
{
|
||||
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
|
||||
uint32 PVP_RANK5_QUEST = 66105;
|
||||
|
||||
if (player->IsGameMaster() || !sIndividualProgression->enabled || sIndividualProgression->isExcludedFromProgression(target))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (target->GetQuestStatus(PVP_RANK5_QUEST) == QUEST_STATUS_REWARDED)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
GameObjectAI* GetAI(GameObject* object) const override
|
||||
{
|
||||
return new gobject_ipp_pvp_openAI(object);
|
||||
}
|
||||
};
|
||||
|
||||
class npc_ipp_preaq : public CreatureScript
|
||||
{
|
||||
public:
|
||||
@@ -675,74 +747,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class npc_training_dummy_ipp_wotlk : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_training_dummy_ipp_wotlk() : CreatureScript("npc_training_dummy_ipp_wotlk") { }
|
||||
|
||||
struct npc_training_dummy_ipp_wotlkAI : ScriptedAI
|
||||
{
|
||||
/*explicit*/ npc_training_dummy_ipp_wotlkAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
me->SetCombatMovement(false);
|
||||
me->ApplySpellImmune(0, 0, 98, true); // ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true)
|
||||
}
|
||||
|
||||
uint32 resetTimer;
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
me->CastSpell(me, 61204, true); // CastSpell(me, SPELL_STUN_PERMANENT, true)
|
||||
resetTimer = 5000;
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason why) override
|
||||
{
|
||||
if (!_EnterEvadeMode(why))
|
||||
return;
|
||||
|
||||
Reset();
|
||||
}
|
||||
|
||||
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
|
||||
{
|
||||
resetTimer = 5000;
|
||||
damage = 0;
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (resetTimer <= diff)
|
||||
{
|
||||
EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
|
||||
resetTimer = 5000;
|
||||
}
|
||||
else
|
||||
resetTimer -= diff;
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* /*who*/) override { }
|
||||
|
||||
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_5);
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return new npc_training_dummy_ipp_wotlkAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
// Add all scripts in one
|
||||
void AddSC_mod_individual_progression_awareness()
|
||||
{
|
||||
@@ -754,6 +758,8 @@ void AddSC_mod_individual_progression_awareness()
|
||||
new gobject_ipp_pre_tbc(); // Stormwind pvp room
|
||||
new gobject_ipp_tbc();
|
||||
new gobject_ipp_wotlk();
|
||||
new gobject_ipp_pvp_closed(); // pvp officer doors
|
||||
new gobject_ipp_pvp_open(); // pvp officer doors
|
||||
new npc_ipp_preaq(); // Cenarion Hold NPCs
|
||||
new npc_ipp_we(); // War Effort NPCs in cities
|
||||
new npc_ipp_aq();
|
||||
@@ -770,5 +776,4 @@ void AddSC_mod_individual_progression_awareness()
|
||||
new npc_ipp_wotlk_totc();
|
||||
new npc_ipp_wotlk_icc();
|
||||
new npc_ipp_ds2();
|
||||
// new npc_training_dummy_ipp_wotlk();
|
||||
}
|
||||
|
||||
@@ -279,14 +279,14 @@ public:
|
||||
}
|
||||
switch (quest->GetQuestId())
|
||||
{
|
||||
case MIGHT_OF_KALIMDOR:
|
||||
case BANG_A_GONG:
|
||||
if (!sIndividualProgression->disableDefaultProgression)
|
||||
{
|
||||
sIndividualProgression->UpdateProgressionState(player, PROGRESSION_PRE_AQ);
|
||||
sIndividualProgression->UpdateProgressionQuests(player);
|
||||
}
|
||||
break;
|
||||
case BANG_A_GONG:
|
||||
case SIMPLY_BANG_A_GONG:
|
||||
if (!sIndividualProgression->disableDefaultProgression)
|
||||
{
|
||||
sIndividualProgression->UpdateProgressionState(player, PROGRESSION_PRE_AQ);
|
||||
|
||||
Reference in New Issue
Block a user