mirror of
https://github.com/ZhengPeiRu21/mod-individual-progression
synced 2025-11-29 15:38:19 +08:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
19727d9f0e | ||
|
|
a92ce5b139 | ||
|
|
e34fbacba4 | ||
|
|
803638a767 | ||
|
|
c9d5eefa8b | ||
|
|
059eea8d6e | ||
|
|
77a65bd506 | ||
|
|
f97fb5d8d1 | ||
|
|
9f09f01041 |
3
sql/world/base/aq_gate.sql
Normal file
3
sql/world/base/aq_gate.sql
Normal 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;
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user