Merge branch 'master' into Playerbot
This commit is contained in:
@@ -25,7 +25,7 @@ runs:
|
|||||||
using: composite
|
using: composite
|
||||||
steps:
|
steps:
|
||||||
- name: Cache
|
- name: Cache
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v4
|
||||||
if: inputs.pch != 'true'
|
if: inputs.pch != 'true'
|
||||||
with:
|
with:
|
||||||
path: ${{ github.workspace }}/var/ccache
|
path: ${{ github.workspace }}/var/ccache
|
||||||
|
|||||||
@@ -33,8 +33,16 @@ jobs:
|
|||||||
CXX: clang++-15
|
CXX: clang++-15
|
||||||
- os: ubuntu-22.04
|
- os: ubuntu-22.04
|
||||||
compiler:
|
compiler:
|
||||||
CC: gcc-13
|
CC: gcc-12
|
||||||
CXX: g++-13
|
CXX: g++-12
|
||||||
|
- os: ubuntu-24.04
|
||||||
|
compiler:
|
||||||
|
CC: clang-18
|
||||||
|
CXX: clang++-18
|
||||||
|
- os: ubuntu-24.04
|
||||||
|
compiler:
|
||||||
|
CC: gcc-14
|
||||||
|
CXX: g++-14
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
name: ${{ matrix.os }}-${{ matrix.compiler }}-nopch
|
name: ${{ matrix.os }}-${{ matrix.compiler }}-nopch
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -30,8 +30,16 @@ jobs:
|
|||||||
CXX: clang++-15
|
CXX: clang++-15
|
||||||
- os: ubuntu-22.04
|
- os: ubuntu-22.04
|
||||||
compiler:
|
compiler:
|
||||||
CC: gcc-13
|
CC: gcc-12
|
||||||
CXX: g++-13
|
CXX: g++-12
|
||||||
|
- os: ubuntu-24.04
|
||||||
|
compiler:
|
||||||
|
CC: clang-18
|
||||||
|
CXX: clang++-18
|
||||||
|
- os: ubuntu-24.04
|
||||||
|
compiler:
|
||||||
|
CC: gcc-14
|
||||||
|
CXX: g++-14
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
name: ${{ matrix.os }}-${{ matrix.compiler }}-pch
|
name: ${{ matrix.os }}-${{ matrix.compiler }}-pch
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Cache
|
- name: Cache
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: ~/Library/Caches/ccache
|
path: ~/Library/Caches/ccache
|
||||||
key: ccache:${{ matrix.os }}:${{ github.ref }}:${{ github.sha }}
|
key: ccache:${{ matrix.os }}:${{ github.ref }}:${{ github.sha }}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Cache
|
- name: Cache
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v4
|
||||||
env:
|
env:
|
||||||
cache-name: cache-tools
|
cache-name: cache-tools
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: ccache
|
- name: ccache
|
||||||
uses: hendrikmuhs/ccache-action@v1.2.9
|
uses: hendrikmuhs/ccache-action@v1.2.13
|
||||||
- name: Configure OS
|
- name: Configure OS
|
||||||
shell: bash
|
shell: bash
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -1,14 +1,46 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
|
CONF_DIR="${CONF_DIR:-/azerothcore/env/dist/etc}"
|
||||||
|
LOGS_DIR="${LOGS_DIR:-/azerothcore/env/dist/logs}"
|
||||||
|
|
||||||
|
if ! touch "$CONF_DIR/.write-test" || ! touch "$LOGS_DIR/.write-test"; then
|
||||||
|
cat <<EOF
|
||||||
|
===== WARNING =====
|
||||||
|
The current user doesn't have write permissions for
|
||||||
|
the configuration dir ($CONF_DIR) or logs dir ($LOGS_DIR).
|
||||||
|
It's likely that services will fail due to this.
|
||||||
|
|
||||||
|
This is usually caused by cloning the repository as root,
|
||||||
|
so the files are owned by root (uid 0).
|
||||||
|
|
||||||
|
To resolve this, you can set the ownership of the
|
||||||
|
configuration directory with the command on the host machine.
|
||||||
|
Note that if the files are owned as root, the ownership must
|
||||||
|
be changed as root (hence sudo).
|
||||||
|
|
||||||
|
$ sudo chown -R $(id -u):$(id -g) /path/to$CONF_DIR /path/to$LOGS_DIR
|
||||||
|
|
||||||
|
Alternatively, you can set the DOCKER_USER environment
|
||||||
|
variable (on the host machine) to "root", though this
|
||||||
|
isn't recommended.
|
||||||
|
|
||||||
|
$ DOCKER_USER=root docker-compose up -d
|
||||||
|
====================
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ -f "$CONF_DIR/.write-test" ]] && rm -f "$CONF_DIR/.write-test"
|
||||||
|
[[ -f "$LOGS_DIR/.write-test" ]] && rm -f "$LOGS_DIR/.write-test"
|
||||||
|
|
||||||
# Copy all default config files to env/dist/etc if they don't already exist
|
# Copy all default config files to env/dist/etc if they don't already exist
|
||||||
# -r == recursive
|
# -r == recursive
|
||||||
# -n == no clobber (don't overwrite)
|
# -n == no clobber (don't overwrite)
|
||||||
# -v == be verbose
|
# -v == be verbose
|
||||||
cp -rnv /azerothcore/env/ref/etc/* /azerothcore/env/dist/etc
|
cp -rnv /azerothcore/env/ref/etc/* "$CONF_DIR"
|
||||||
|
|
||||||
CONF="/azerothcore/env/dist/etc/$ACORE_COMPONENT.conf"
|
CONF="$CONF_DIR/$ACORE_COMPONENT.conf"
|
||||||
CONF_DIST="/azerothcore/env/dist/etc/$ACORE_COMPONENT.conf.dist"
|
CONF_DIST="$CONF_DIR/$ACORE_COMPONENT.conf.dist"
|
||||||
|
|
||||||
# Copy the "dist" file to the "conf" if the conf doesn't already exist
|
# Copy the "dist" file to the "conf" if the conf doesn't already exist
|
||||||
if [[ -f "$CONF_DIST" ]]; then
|
if [[ -f "$CONF_DIST" ]]; then
|
||||||
|
|||||||
@@ -0,0 +1,72 @@
|
|||||||
|
-- DB update 2024_05_04_00 -> 2024_05_09_00
|
||||||
|
SET @REFIDONE = 35100,
|
||||||
|
@REFIDTWO = 35101,
|
||||||
|
@REFIDTHREE = 35102,
|
||||||
|
@TANZAR = 22699,
|
||||||
|
@KRAZ = 22790,
|
||||||
|
@ASHLI = 22797,
|
||||||
|
@HARKOR = 22968;
|
||||||
|
|
||||||
|
DELETE FROM `gameobject_loot_template` WHERE `Entry` IN (@TANZAR, @KRAZ, @ASHLI, @HARKOR);
|
||||||
|
INSERT INTO `gameobject_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
|
||||||
|
(@TANZAR, @REFIDONE, @REFIDONE, 100, 0, 1, 0, 1, 1, 'Tanzar\'s Trunk - First Hostage Loot'),
|
||||||
|
(@TANZAR, @REFIDTWO, @REFIDTWO, 100, 0, 1, 0, 1, 1, 'Tanzar\'s Trunk - Second Hostage Loot'),
|
||||||
|
(@TANZAR, @REFIDTHREE, @REFIDTHREE, 100, 0, 1, 0, 1, 1, 'Tanzar\'s Trunk - Third Hostage Loot'),
|
||||||
|
(@KRAZ, @REFIDONE, @REFIDONE, 100, 0, 1, 0, 1, 1, 'Kraz\'s Package - First Hostage Loot'),
|
||||||
|
(@KRAZ, @REFIDTWO, @REFIDTWO, 100, 0, 1, 0, 1, 1, 'Kraz\'s Package - Second Hostage Loot'),
|
||||||
|
(@KRAZ, @REFIDTHREE, @REFIDTHREE, 100, 0, 1, 0, 1, 1, 'Kraz\'s Package - Third Hostage Loot'),
|
||||||
|
(@ASHLI, @REFIDONE, @REFIDONE, 100, 0, 1, 0, 1, 1, 'Ashli\'s Bag - First Hostage Loot'),
|
||||||
|
(@ASHLI, @REFIDTWO, @REFIDTWO, 100, 0, 1, 0, 1, 1, 'Ashli\'s Bag - Second Hostage Loot'),
|
||||||
|
(@ASHLI, @REFIDTHREE, @REFIDTHREE, 100, 0, 1, 0, 1, 1, 'Ashli\'s Bag - Third Hostage Loot'),
|
||||||
|
(@HARKOR, @REFIDONE, @REFIDONE, 100, 0, 1, 0, 1, 1, 'Harkor\'s Satchel - First Hostage Loot'),
|
||||||
|
(@HARKOR, @REFIDTWO, @REFIDTWO, 100, 0, 1, 0, 1, 1, 'Harkor\'s Satchel - Second Hostage Loot'),
|
||||||
|
(@HARKOR, @REFIDTHREE, @REFIDTHREE, 100, 0, 1, 0, 1, 1, 'Harkor\'s Satchel - Third Hostage Loot');
|
||||||
|
|
||||||
|
DELETE FROM `reference_loot_template` WHERE `Entry` IN (@REFIDONE, @REFIDTWO, @REFIDTHREE);
|
||||||
|
INSERT INTO `reference_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
|
||||||
|
(@REFIDONE, 33480, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - First Hostage Loot - Cord of Braided Troll Hair'),
|
||||||
|
(@REFIDONE, 33481, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - First Hostage Loot - Pauldrons of Stone Resolve'),
|
||||||
|
(@REFIDONE, 33483, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - First Hostage Loot - Life-step Belt'),
|
||||||
|
(@REFIDONE, 33489, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - First Hostage Loot - Mantle of Ill Intent'),
|
||||||
|
(@REFIDONE, 33590, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - First Hostage Loot - Cloak of Fiends'),
|
||||||
|
(@REFIDONE, 33591, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - First Hostage Loot - Shadowcaster\'s Drape'),
|
||||||
|
(@REFIDONE, 33805, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - First Hostage Loot - Shadowhunter\'s Treads'),
|
||||||
|
(@REFIDONE, 33971, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - First Hostage Loot - Elunite Imbued Leggings'),
|
||||||
|
(@REFIDTWO, 33490, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - Second Hostage Loot - Staff of Dark Mending'),
|
||||||
|
(@REFIDTWO, 33491, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - Second Hostage Loot - Tuskbreaker'),
|
||||||
|
(@REFIDTWO, 33492, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - Second Hostage Loot - Trollbane'),
|
||||||
|
(@REFIDTWO, 33493, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - Second Hostage Loot - Umbral Shiv'),
|
||||||
|
(@REFIDTWO, 33494, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - Second Hostage Loot - Amani Divining Staff'),
|
||||||
|
(@REFIDTWO, 33495, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - Second Hostage Loot - Rage'),
|
||||||
|
(@REFIDTHREE, 33496, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - Third Hostage Loot - Signet of Primal Wrath'),
|
||||||
|
(@REFIDTHREE, 33497, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - Third Hostage Loot - Mana Attuned Band'),
|
||||||
|
(@REFIDTHREE, 33498, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - Third Hostage Loot - Signet of the Quiet Forest'),
|
||||||
|
(@REFIDTHREE, 33499, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - Third Hostage Loot - Signet of the Last Defender'),
|
||||||
|
(@REFIDTHREE, 33500, 0, 0, 0, 1, 1, 1, 1, 'Zul\'Aman - Third Hostage Loot - Signet of Eternal Life');
|
||||||
|
|
||||||
|
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 10) AND (`SourceGroup` IN (@REFIDONE, @REFIDTWO, @REFIDTHREE, @REFIDFOUR)) AND (`ConditionTypeOrReference` = 13) AND (`ConditionValue1` = 8);
|
||||||
|
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||||
|
(10, @REFIDONE, 33480, 0, 0, 13, 0, 8, 1, 0, 0, 0, 0, '', 'Yield first hostage loot if first hostage has been rescued'),
|
||||||
|
(10, @REFIDONE, 33481, 0, 0, 13, 0, 8, 1, 0, 0, 0, 0, '', 'Yield first hostage loot if first hostage has been rescued'),
|
||||||
|
(10, @REFIDONE, 33483, 0, 0, 13, 0, 8, 1, 0, 0, 0, 0, '', 'Yield first hostage loot if first hostage has been rescued'),
|
||||||
|
(10, @REFIDONE, 33489, 0, 0, 13, 0, 8, 1, 0, 0, 0, 0, '', 'Yield first hostage loot if first hostage has been rescued'),
|
||||||
|
(10, @REFIDONE, 33590, 0, 0, 13, 0, 8, 1, 0, 0, 0, 0, '', 'Yield first hostage loot if first hostage has been rescued'),
|
||||||
|
(10, @REFIDONE, 33591, 0, 0, 13, 0, 8, 1, 0, 0, 0, 0, '', 'Yield first hostage loot if first hostage has been rescued'),
|
||||||
|
(10, @REFIDONE, 33805, 0, 0, 13, 0, 8, 1, 0, 0, 0, 0, '', 'Yield first hostage loot if first hostage has been rescued'),
|
||||||
|
(10, @REFIDONE, 33971, 0, 0, 13, 0, 8, 1, 0, 0, 0, 0, '', 'Yield first hostage loot if first hostage has been rescued'),
|
||||||
|
(10, @REFIDTWO, 33490, 0, 0, 13, 0, 8, 2, 0, 0, 0, 0, '', 'Yield second hostage loot if second hostage has been rescued'),
|
||||||
|
(10, @REFIDTWO, 33491, 0, 0, 13, 0, 8, 2, 0, 0, 0, 0, '', 'Yield second hostage loot if second hostage has been rescued'),
|
||||||
|
(10, @REFIDTWO, 33492, 0, 0, 13, 0, 8, 2, 0, 0, 0, 0, '', 'Yield second hostage loot if second hostage has been rescued'),
|
||||||
|
(10, @REFIDTWO, 33493, 0, 0, 13, 0, 8, 2, 0, 0, 0, 0, '', 'Yield second hostage loot if second hostage has been rescued'),
|
||||||
|
(10, @REFIDTWO, 33494, 0, 0, 13, 0, 8, 2, 0, 0, 0, 0, '', 'Yield second hostage loot if second hostage has been rescued'),
|
||||||
|
(10, @REFIDTWO, 33495, 0, 0, 13, 0, 8, 2, 0, 0, 0, 0, '', 'Yield second hostage loot if second hostage has been rescued'),
|
||||||
|
(10, @REFIDTHREE, 33496, 0, 1, 13, 0, 8, 3, 0, 0, 0, 0, '', 'Yield third hostage loot if third hostage has been rescued'),
|
||||||
|
(10, @REFIDTHREE, 33497, 0, 1, 13, 0, 8, 3, 0, 0, 0, 0, '', 'Yield third hostage loot if third hostage has been rescued'),
|
||||||
|
(10, @REFIDTHREE, 33498, 0, 1, 13, 0, 8, 3, 0, 0, 0, 0, '', 'Yield third hostage loot if third hostage has been rescued'),
|
||||||
|
(10, @REFIDTHREE, 33499, 0, 1, 13, 0, 8, 3, 0, 0, 0, 0, '', 'Yield third hostage loot if third hostage has been rescued'),
|
||||||
|
(10, @REFIDTHREE, 33500, 0, 1, 13, 0, 8, 3, 0, 0, 0, 0, '', 'Yield third hostage loot if third hostage has been rescued'),
|
||||||
|
(10, @REFIDTHREE, 33496, 0, 2, 13, 0, 8, 4, 0, 0, 0, 0, '', 'Yield third hostage loot if all hostages have been rescued'),
|
||||||
|
(10, @REFIDTHREE, 33497, 0, 2, 13, 0, 8, 4, 0, 0, 0, 0, '', 'Yield third hostage loot if all hostages have been rescued'),
|
||||||
|
(10, @REFIDTHREE, 33498, 0, 2, 13, 0, 8, 4, 0, 0, 0, 0, '', 'Yield third hostage loot if all hostages have been rescued'),
|
||||||
|
(10, @REFIDTHREE, 33499, 0, 2, 13, 0, 8, 4, 0, 0, 0, 0, '', 'Yield third hostage loot if all hostages have been rescued'),
|
||||||
|
(10, @REFIDTHREE, 33500, 0, 2, 13, 0, 8, 4, 0, 0, 0, 0, '', 'Yield third hostage loot if all hostages have been rescued');
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
-- DB update 2024_05_09_00 -> 2024_05_11_00
|
||||||
|
--
|
||||||
|
UPDATE `gameobject_template` SET `AIName` = 'SmartGameObjectAI' WHERE `entry` IN (180690, 180691);
|
||||||
|
|
||||||
|
DELETE FROM `smart_scripts` WHERE (`source_type` = 1 AND `entryorguid` IN (180690, 180691));
|
||||||
|
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
|
||||||
|
(180690, 1, 0, 0, 70, 0, 100, 0, 2, 0, 0, 0, 0, 0, 106, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Large Scarab Coffer - On Gameobject State Changed - Remove Gameobject Flags Locked'),
|
||||||
|
(180691, 1, 0, 0, 70, 0, 100, 0, 2, 0, 0, 0, 0, 0, 106, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarab Coffer - On Gameobject State Changed - Remove Gameobject Flags Locked');
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
-- DB update 2024_05_11_00 -> 2024_05_11_01
|
||||||
|
--
|
||||||
|
UPDATE `spell_target_position` SET `PositionX`=386.27, `PositionY`=33.4144, `PositionZ`=-130.934, `VerifiedBuild`=52237 WHERE `ID`=21128;
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
-- DB update 2024_05_11_01 -> 2024_05_11_02
|
||||||
|
-- Onslaught Raven Priest with guid 102088 smart ai
|
||||||
|
SET @ENTRY := -102088;
|
||||||
|
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 27202;
|
||||||
|
DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY;
|
||||||
|
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`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||||
|
(@ENTRY, 0, 0, 0, 4, 0, 100, 0, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 10, 85485, 27210, 0, 0, 0, 0, 0, 'On aggro - Creature High General Abbendis (27210) with guid 85485 (fetching): Set creature data #0 to 1');
|
||||||
|
|
||||||
|
-- Onslaught Footman with guid 102193 smart ai
|
||||||
|
SET @ENTRY := -102193;
|
||||||
|
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 27203;
|
||||||
|
DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY;
|
||||||
|
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`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||||
|
(@ENTRY, 0, 0, 0, 4, 0, 100, 0, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 10, 85485, 27210, 0, 0, 0, 0, 0, 'On aggro - Creature High General Abbendis (27210) with guid 85485 (fetching): Set creature data #0 to 1');
|
||||||
|
|
||||||
|
-- Onslaught Footman with guid 102194 smart ai
|
||||||
|
SET @ENTRY := -102194;
|
||||||
|
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 27203;
|
||||||
|
DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY;
|
||||||
|
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`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||||
|
(@ENTRY, 0, 0, 0, 4, 0, 100, 0, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 10, 85485, 27210, 0, 0, 0, 0, 0, 'On aggro - Creature High General Abbendis (27210) with guid 85485 (fetching): Set creature data #0 to 1');
|
||||||
|
|
||||||
|
DELETE FROM `creature_text` WHERE `CreatureID` = 27210;
|
||||||
|
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
|
||||||
|
(27210, 0, 0, 'Now I\'ll show you the REAL power of the Onslaught!', 12, 0, 100, 0, 0, 14192, 27593, 0, 'High General Abbendis'),
|
||||||
|
(27210, 1, 0, 'You\'ve come to test the might of the Onslaught?', 14, 0, 100, 6, 0, 14188, 27596, 0, 'High General Abbendis'),
|
||||||
|
(27210, 1, 1, 'Deal with this intrusion quickly. I don\'t have time for this!', 14, 0, 100, 5, 0, 14189, 27597, 0, 'High General Abbendis'),
|
||||||
|
(27210, 1, 2, 'You may want to rethink your actions, fool.', 14, 0, 100, 25, 0, 14190, 27598, 0, 'High General Abbendis'),
|
||||||
|
(27210, 1, 3, 'Am I going to have to deal with this intrusion myself?', 14, 0, 100, 6, 0, 14191, 27599, 0, 'High General Abbendis');
|
||||||
|
|
||||||
|
-- High General Abbendis smart ai
|
||||||
|
SET @ENTRY := 27210;
|
||||||
|
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @ENTRY;
|
||||||
|
DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY;
|
||||||
|
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`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||||
|
(@ENTRY, 0, 0, 0, 4, 0, 100, 1, 0, 0, 0, 0, 11, 50908, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High General Abbendis - On aggro - Cast spell Seal of Onslaught (50908) on Self'),
|
||||||
|
(@ENTRY, 0, 1, 0, 0, 0, 100, 0, 4000, 7000, 19000, 23000, 11, 50915, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'High General Abbendis - Cast spell - Raging Consecration (50915) on Victim'),
|
||||||
|
(@ENTRY, 0, 2, 0, 0, 0, 100, 0, 9000, 12000, 20000, 23000, 11, 50905, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'High General Abbendis- Cast spell - Judgement of Onslaught (50905) on Victim'),
|
||||||
|
(@ENTRY, 0, 3, 4, 2, 0, 100, 1, 0, 20, 0, 0, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'When health between 0%-20%% (once) - Set event phase to phase 1'),
|
||||||
|
(@ENTRY, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'When health between 0%-20%% (once) - Self: Talk 0 to Self'),
|
||||||
|
(@ENTRY, 0, 5, 0, 0, 1, 100, 0, 0, 0, 6000, 6000, 11, 50921, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High General Abbendis - Cast spell - Reckless Onslaught (50921) on Self'),
|
||||||
|
(@ENTRY, 0, 6, 0, 6, 0, 100, 512, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 85322, 27951, 0, 0, 0, 0, 0, 'High General Abbendis - On death - Creature Admiral Barean Westwind (27951) with guid 85322 (fetching): Set creature data #1 to 1'),
|
||||||
|
(@ENTRY, 0, 7, 0, 4, 0, 100, 512, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 27951, 10, 0, 0, 0, 0, 0, 'High General Abbendis - On aggro - Closest alive creature Admiral Barean Westwind (27951) in 10 yards: Set creature data #0 to 1'),
|
||||||
|
(@ENTRY, 0, 8, 0, 11, 0, 100, 512, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 10, 85322, 27951, 0, 0, 0, 0, 0, 'High General Abbendis - On respawn - Creature Admiral Barean Westwind (27951) with guid 85322 (fetching): Set respawn timer to 0 ms'),
|
||||||
|
(@ENTRY, 0, 9, 0, 25, 0, 100, 512, 0, 0, 0, 0, 45, 0, 2, 0, 0, 0, 0, 10, 85322, 27951, 0, 0, 0, 0, 0, 'High General Abbendis - On reset - Creature Admiral Barean Westwind (27951) with guid 85322 (fetching): Set creature data #0 to 2'),
|
||||||
|
(@ENTRY, 0, 10, 0, 38, 0, 100, 0, 0, 1, 5000, 5000, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'On data[0] set to 1 (wait 5000 - 5000 ms before next event trigger) - Self: Talk 1 to invoker'),
|
||||||
|
(@ENTRY, 0, 11, 0, 38, 0, 100, 0, 0, 2, 0, 0, 49, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 'On data[0] set to 2 - Self: Attack storedTarget[0]');
|
||||||
|
|
||||||
|
-- Admiral Barean Westwind smart ai
|
||||||
|
SET @ENTRY := 27951;
|
||||||
|
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @ENTRY;
|
||||||
|
DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY;
|
||||||
|
DELETE FROM `smart_scripts` WHERE `source_type` = 9 AND `entryOrGuid` IN (@ENTRY * 100, @ENTRY * 100 + 1, @ENTRY * 100 + 2, @ENTRY * 100 + 3, @ENTRY * 100 + 4);
|
||||||
|
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`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||||
|
(@ENTRY, 0, 0, 1, 11, 0, 100, 512, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On respawn - Set react state to Defensive'),
|
||||||
|
(@ENTRY, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On respawn - Unset active'),
|
||||||
|
(@ENTRY, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 19, 256, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On respawn - Remove UNIT_FLAGS to IMMUNE_TO_PC'),
|
||||||
|
(@ENTRY, 0, 3, 4, 4, 0, 100, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On aggro - Remove all auras'),
|
||||||
|
(@ENTRY, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On aggro - storedTarget[0] = Attacked unit'),
|
||||||
|
(@ENTRY, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 10, 85485, 27210, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On aggro - Send stored target storedTarget[0] to Creature High General Abbendis (27210) with guid 85485 (fetching)'),
|
||||||
|
(@ENTRY, 0, 6, 7, 61, 0, 100, 0, 0, 0, 0, 0, 45, 0, 2, 0, 0, 0, 0, 19, 27210, 10, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On aggro - Closest alive creature High General Abbendis (27210) in 10 yards: Set creature data #0 to 2'),
|
||||||
|
(@ENTRY, 0, 7, 0, 61, 0, 100, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On aggro - Evade'),
|
||||||
|
(@ENTRY, 0, 8, 0, 21, 0, 100, 512, 0, 0, 0, 0, 80, 2795100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind On home reached - Self: Start timed action list id #Admiral Barean Westwind #0 (2795100) (update always) // -inline'),
|
||||||
|
(@ENTRY * 100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Set react state to Passive'),
|
||||||
|
(@ENTRY * 100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 18, 256, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Set UNIT_FLAGS to IMMUNE_TO_PC'),
|
||||||
|
(@ENTRY * 100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 19, 524288, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Remove UNIT_FLAGS to IN_COMBAT'),
|
||||||
|
(@ENTRY * 100, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 50161, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Cast spell Protection Sphere (50161) on Self'),
|
||||||
|
(@ENTRY * 100, 9, 4, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 27210, 50, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Look at Closest alive creature High General Abbendis (27210) in 50 yards'),
|
||||||
|
(@ENTRY * 100, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11, 27210, 50, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Talk 0 to Creature High General Abbendis (27210) in 50 yd'),
|
||||||
|
(@ENTRY * 100, 9, 6, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Set orientation to home position orientation'),
|
||||||
|
(@ENTRY, 0, 9, 10, 38, 0, 100, 512, 1, 1, 0, 0, 48, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On data[1] set to 1 - Set active'),
|
||||||
|
(@ENTRY, 0, 10, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2795101, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On data[1] set to 1 - Start timed action list id #Admiral Barean Westwind #1 (2795101) (update always) // -inline'),
|
||||||
|
(@ENTRY * 100 + 1, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Talk 1 to invoker'),
|
||||||
|
(@ENTRY * 100 + 1, 9, 1, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 59, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Set walk'),
|
||||||
|
(@ENTRY * 100 + 1, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 69, 1, 0, 0, 1, 0, 0, 19, 27210, 50, 1, 0, 0, 0, 0, 'Admiral Barean Westwind - Move to Closest dead creature High General Abbendis (27210) in 50 yards in 1 yd distance (point id 1)'),
|
||||||
|
(@ENTRY, 0, 11, 0, 34, 0, 100, 0, 8, 1, 0, 0, 80, 2795102, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On movement of type POINT_MOTION_TYPE inform, point 1 - Self: Start timed action list id #Admiral Barean Westwind #2 (2795102) (update out of combat) // -inline_wp'),
|
||||||
|
(@ENTRY * 100 + 2, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 90, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Set stand state to KNEEL'),
|
||||||
|
(@ENTRY * 100 + 2, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Talk 2 to invoker'),
|
||||||
|
(@ENTRY * 100 + 2, 9, 5, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 91, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Remove stand state KNEEL'),
|
||||||
|
(@ENTRY * 100 + 2, 9, 6, 0, 0, 0, 100, 0, 1200, 1200, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0.139626, 'Admiral Barean Westwind - Set orientation to 0.139626'),
|
||||||
|
(@ENTRY * 100 + 2, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 5, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Play emote ONESHOT_LAUGH (11)'),
|
||||||
|
(@ENTRY * 100 + 2, 9, 8, 0, 0, 0, 100, 0, 3225, 3225, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Talk 3 to invoker'),
|
||||||
|
(@ENTRY * 100 + 2, 9, 9, 0, 0, 0, 100, 0, 0, 0, 0, 0, 53, 0, 27951, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Start path #27951, walk, do not repeat, Passive'),
|
||||||
|
(@ENTRY, 0, 12, 13, 38, 0, 100, 512, 0, 2, 0, 0, 28, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On data[0] set to 2 - Self: Remove all auras'),
|
||||||
|
(@ENTRY, 0, 13, 0, 61, 0, 100, 0, 0, 0, 0, 0, 19, 256, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On data[0] set to 2 - Self: Remove UNIT_FLAGS to IMMUNE_TO_PC'),
|
||||||
|
(@ENTRY, 0, 14, 15, 58, 0, 100, 512, 4, 27951, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On waypoint 4 of path 27951 ended - Self: Stop path, despawn instantly'),
|
||||||
|
(@ENTRY, 0, 15, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2795103, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On waypoint 4 of path 27951 ended - Self: Start timed action list id #Admiral Barean Westwind #3 (2795103) (update always) // -inline'),
|
||||||
|
(@ENTRY * 100 + 3, 9, 0, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 11, 34427, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Cast spell Ethereal Teleport(34427) on Self'),
|
||||||
|
(@ENTRY * 100 + 3, 9, 1, 0, 0, 0, 100, 0, 1700, 1700, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Self: Despawn instantly'),
|
||||||
|
(@ENTRY, 0, 16, 0, 38, 0, 100, 0, 0, 1, 0, 0, 80, 2795104, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - On data[0] set to 1 - Self: Start timed action list id #Admiral Barean Westwind #4 (2795104) (update always) // -inline'),
|
||||||
|
(@ENTRY * 100 + 4, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 18, 256, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Set UNIT_FLAGS to IMMUNE_TO_PC'),
|
||||||
|
(@ENTRY * 100 + 4, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 19, 524288, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Remove UNIT_FLAGS to IN_COMBAT'),
|
||||||
|
(@ENTRY * 100 + 4, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 50161, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Cast spell Protection Sphere (50161) on Self'),
|
||||||
|
(@ENTRY * 100 + 4, 9, 3, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 27210, 50, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Look at Closest alive creature High General Abbendis (27210) in 50 yards'),
|
||||||
|
(@ENTRY * 100 + 4, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 11, 27210, 50, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Talk 0 to Creature High General Abbendis (27210) in 50 yd'),
|
||||||
|
(@ENTRY * 100 + 4, 9, 5, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Admiral Barean Westwind - Set orientation to home position orientation');
|
||||||
|
|
||||||
|
DELETE FROM `waypoints` WHERE `entry`=27951;
|
||||||
|
INSERT INTO `waypoints` VALUES (27951, 1, 2711.5, -352.357, 141.363, NULL, 0, 'Admiral Barean Westwind');
|
||||||
|
INSERT INTO `waypoints` VALUES (27951, 2, 2718.2, -351.358, 141.363, NULL, 0, 'Admiral Barean Westwind');
|
||||||
|
INSERT INTO `waypoints` VALUES (27951, 3, 2721.99, -358.182, 141.363, NULL, 0, 'Admiral Barean Westwind');
|
||||||
|
INSERT INTO `waypoints` VALUES (27951, 4, 2738.1, -355.936, 141.363, NULL, 0, 'Admiral Barean Westwind');
|
||||||
|
|
||||||
|
DELETE FROM `creature_text` WHERE `CreatureID` = 27211;
|
||||||
|
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
|
||||||
|
(27211, 0, 0, 'About time!', 12, 0, 100, 0, 0, 0, 26292, 0, 'Onslaught Executioner'),
|
||||||
|
(27211, 1, 0, 'Any last words you impure mongrel?', 12, 0, 100, 0, 0, 0, 26293, 0, 'Onslaught Executioner'),
|
||||||
|
(27211, 2, 0, 'On second thought, I don\'t care. Burn in hell wretch!', 12, 0, 100, 0, 0, 0, 26294, 0, 'Onslaught Executioner'),
|
||||||
|
(27211, 3, 0, 'Hah! That never gets old.', 12, 0, 100, 0, 0, 0, 26295, 0, 'Onslaught Executioner');
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
-- DB update 2024_05_11_02 -> 2024_05_11_03
|
||||||
|
--
|
||||||
|
-- 28622: Web Wrap stunned dot
|
||||||
|
DELETE FROM `spell_script_names` WHERE `spell_id` = 28622;
|
||||||
|
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`)
|
||||||
|
VALUES(28622, 'spell_web_wrap_damage');
|
||||||
|
|
||||||
|
-- 28618: Disable pull effect and periodic trigger event. Keep pacify silence and set duration to 5 seconds
|
||||||
|
UPDATE `spell_dbc` SET `DurationIndex` = 27, `Effect_1` = 0, `Effect_2` = 0 WHERE `ID` = 28618;
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
-- DB update 2024_05_11_03 -> 2024_05_11_04
|
||||||
|
DELETE FROM `spell_script_names` WHERE `spell_id` = 28865;
|
||||||
|
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||||
|
(28865,'spell_gen_consumption');
|
||||||
|
|
||||||
|
DELETE FROM `creature_template_spell` WHERE `CreatureID` = 16697;
|
||||||
|
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = '', `AIName` = 'SmartAI' WHERE `entry` = 16697;
|
||||||
|
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 16697);
|
||||||
|
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
|
||||||
|
(16697, 0, 0, 0, 60, 0, 100, 0, 0, 0, 2500, 2500, 0, 0, 11, 28865, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Void Zone - On Update - Cast \'Consumption\''),
|
||||||
|
(16697, 0, 1, 0, 37, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Void Zone - On Initialize - Set Reactstate Passive');
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
-- DB update 2024_05_11_04 -> 2024_05_12_00
|
||||||
|
|
||||||
|
DELETE FROM `creature_template_spell` WHERE `CreatureID` = 27354;
|
||||||
|
INSERT INTO `creature_template_spell` (`CreatureID`, `Index`, `Spell`, `VerifiedBuild`) VALUES
|
||||||
|
(27354, 0, 48548, 53788),
|
||||||
|
(27354, 1, 48558, 53788),
|
||||||
|
(27354, 2, 48604, 53788),
|
||||||
|
(27354, 4, 48610, 53788);
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
-- DB update 2024_05_12_00 -> 2024_05_12_01
|
||||||
|
-- Shen'dralar Ancient smart ai
|
||||||
|
SET @ENTRY := 14358;
|
||||||
|
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @ENTRY;
|
||||||
|
DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY;
|
||||||
|
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`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||||
|
(@ENTRY, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Shen\'dralar Ancient - On reset - Set event phase to phase 1'),
|
||||||
|
(@ENTRY, 0, 1, 0, 62, 0, 100, 512, 5723, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Shen\'dralar Ancient - On gossip action 0 from menu 5723 selected - Gossip player: Close gossip'),
|
||||||
|
(@ENTRY, 0, 2, 3, 20, 1, 100, 0, 7461, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Shen\'dralar Ancient - On player rewarded quest The Madness Within (7461) - Set event phase to phase 2'),
|
||||||
|
(@ENTRY, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Shen\'dralar Ancient - storedTarget[0] = Rewarded player'),
|
||||||
|
(@ENTRY, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 12, 14364, 3, 300000, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 'Shen\'dralar Ancient - Summon creature Shen\'dralar Spirit (14364) at Self\'s position, moved by offset (5, 0, 0, 0) as summon type timed despawn with duration 300 seconds'),
|
||||||
|
(@ENTRY, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 12, 14364, 3, 300000, 0, 0, 0, 1, 0, 0, 0, 3.5, 3.5, 0, 0, 'Shen\'dralar Ancient - Summon creature Shen\'dralar Spirit (14364) at Self\'s position, moved by offset (3.5, 3.5, 0, 0) as summon type timed despawn with duration 300 seconds'),
|
||||||
|
(@ENTRY, 0, 6, 7, 61, 0, 100, 0, 0, 0, 0, 0, 12, 14364, 3, 300000, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 'Shen\'dralar Ancient - Summon creature Shen\'dralar Spirit (14364) at Self\'s position, moved by offset (0, 5, 0, 0) as summon type timed despawn with duration 300 seconds'),
|
||||||
|
(@ENTRY, 0, 7, 8, 61, 0, 100, 0, 0, 0, 0, 0, 12, 14364, 3, 300000, 0, 0, 0, 1, 0, 0, 0, 3.5, -3.5, 0, 0, 'Shen\'dralar Ancient - Summon creature Shen\'dralar Spirit (14364) at Self\'s position, moved by offset (3.5, -3.5, 0, 0) as summon type timed despawn with duration 300 seconds'),
|
||||||
|
(@ENTRY, 0, 8, 9, 61, 0, 100, 0, 0, 0, 0, 0, 12, 14364, 3, 300000, 0, 0, 0, 1, 0, 0, 0, -5, 0, 0, 0, 'Shen\'dralar Ancient - Summon creature Shen\'dralar Spirit (14364) at Self\'s position, moved by offset (-5, 0, 0, 0) as summon type timed despawn with duration 300 seconds'),
|
||||||
|
(@ENTRY, 0, 9, 10, 61, 0, 100, 0, 0, 0, 0, 0, 12, 14364, 3, 300000, 0, 0, 0, 1, 0, 0, 0, -3.5, -3.5, 0, 0, 'Shen\'dralar Ancient - Summon creature Shen\'dralar Spirit (14364) at Self\'s position, moved by offset (-3.5, -3.5, 0, 0) as summon type timed despawn with duration 300 seconds'),
|
||||||
|
(@ENTRY, 0, 10, 11, 61, 0, 100, 0, 0, 0, 0, 0, 12, 14364, 3, 300000, 0, 0, 0, 1, 0, 0, 0, 0, -5, 0, 0, 'Shen\'dralar Ancient - Summon creature Shen\'dralar Spirit (14364) at Self\'s position, moved by offset (0, -5, 0, 0) as summon type timed despawn with duration 300 seconds'),
|
||||||
|
(@ENTRY, 0, 11, 12, 61, 0, 100, 0, 0, 0, 0, 0, 12, 14364, 3, 300000, 0, 0, 0, 1, 0, 0, 0, -3.5, 3.5, 0, 0, 'Shen\'dralar Ancient - Summon creature Shen\'dralar Spirit (14364) at Self\'s position, moved by offset (-3.5, 3.5, 0, 0) as summon type timed despawn with duration 300 seconds'),
|
||||||
|
(@ENTRY, 0, 12, 13, 61, 0, 100, 0, 0, 0, 0, 0, 5, 21, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Shen\'dralar Ancient - Play emote ONESHOT_APPLAUD (21)'),
|
||||||
|
(@ENTRY, 0, 13, 0, 61, 0, 100, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 11, 14364, 10, 0, 0, 0, 0, 0, 'Shen\'dralar Ancient - Send stored target storedTarget[0] to Creature Shen\'dralar Spirit (14364) in 10 yd'),
|
||||||
|
(@ENTRY, 0, 14, 15, 20, 2, 100, 0, 7461, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Shen\'dralar Ancient - storedTarget[0] = Rewarded player (phase 2)'),
|
||||||
|
(@ENTRY, 0, 15, 0, 61, 0, 100, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 11, 14364, 10, 0, 0, 0, 0, 0, 'Shen\'dralar Ancient - Send stored target storedTarget[0] to Creature Shen\'dralar Spirit (14364) in 10 yd (phase 2)'),
|
||||||
|
(@ENTRY, 0, 16, 0, 35, 0, 100, 512, 14364, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Shen\'dralar Ancient - On summoned creature Shen\'dralar Spirit (14364) despawn - Set event phase to phase 1');
|
||||||
|
|
||||||
|
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` = 14358 AND `SourceId` = 0;
|
||||||
|
|
||||||
|
-- Shen'dralar Spirit smart ai
|
||||||
|
SET @ENTRY := 14364;
|
||||||
|
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @ENTRY;
|
||||||
|
DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY;
|
||||||
|
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`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||||
|
(@ENTRY, 0, 0, 0, 60, 0, 100, 0, 0, 30000, 20000, 30000, 10, 2, 21, 4, 66, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Shen\'dralar Spirit - Play random emote: ONESHOT_BOW (2), ONESHOT_APPLAUD (21), ONESHOT_CHEER(DNR) (4), ONESHOT_SALUTE (66),'),
|
||||||
|
(@ENTRY, 0, 1, 0, 60, 0, 100, 512, 15000, 15000, 15000, 15000, 66, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 'Shen\'dralar Spirit Look at storedTarget[0]');
|
||||||
|
|
||||||
|
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` = 14364 AND `SourceId` = 0;
|
||||||
|
|
||||||
|
-- Treasure of the Shen'dralar
|
||||||
|
-- 179517 (Area: 2557 - Difficulty: 1) CreateObject1
|
||||||
|
SET @OGUID1:=11921;
|
||||||
|
DELETE FROM `gameobject` WHERE (`id` = 179517) AND (`guid` IN (@OGUID1));
|
||||||
|
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`) VALUES
|
||||||
|
(@OGUID1, 179517, 429, 2557, 2557, 1, 1, 129.4810638427734375, 544.96710205078125, -48.4663200378417968, 1.623155713081359863, 0, 0, 0.725374221801757812, 0.688354730606079101, 7200, 255, 1, '', 52237);
|
||||||
|
|
||||||
|
-- Skeletal Remains of Kariel Winthalus
|
||||||
|
-- 179544 (Area: 2557 - Difficulty: 1) CreateObject1
|
||||||
|
SET @OGUID2:=44739;
|
||||||
|
DELETE FROM `gameobject` WHERE (`id` = 179544) AND (`guid` IN (@OGUID2));
|
||||||
|
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`) VALUES
|
||||||
|
(@OGUID2, 179544, 429, 2557, 2557, 1, 1, 163.0381622314453125, 530.1822509765625, -48.4669570922851562, 5.026549339294433593, 0, 0, -0.5877847671508789, 0.809017360210418701, 7200, 255, 1, '', 52237);
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,3 @@
|
|||||||
|
-- DB update 2024_05_12_02 -> 2024_05_12_03
|
||||||
|
-- was 20
|
||||||
|
UPDATE `creature_template` SET `detection_range` = 60 WHERE `entry` = 17968;
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
-- DB update 2024_05_12_03 -> 2024_05_13_00
|
||||||
|
-- Rimblat Earthshatter smart ai
|
||||||
|
SET @ENTRY := 16134;
|
||||||
|
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @ENTRY;
|
||||||
|
DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY;
|
||||||
|
DELETE FROM `smart_scripts` WHERE `source_type` = 9 AND `entryOrGuid` IN (@ENTRY * 100);
|
||||||
|
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`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||||
|
(@ENTRY, 0, 0, 0, 1, 0, 100, 512, 1000, 15000, 150000, 180000, 80, 1613400, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Rimblat Earthshatter: Start timed action list id #Rimblat Earthshatter #0 (1613400) (update out of combat) // -inline'),
|
||||||
|
(@ENTRY * 100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Rimblat Earthshatter - Talk 0 to invoker'),
|
||||||
|
(@ENTRY * 100, 9, 1, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 5, 16, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Rimblat Earthshatter - Play emote ONESHOT_KNEEL (16)'),
|
||||||
|
(@ENTRY * 100, 9, 2, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 50, 181104, 0, 1, 8, 0, 0, 8, 0, 0, 0, 2276.9, -5326.88, 88.6976, 1.67551, 'Rimblat Earthshatter - Summon gameobject - Small Dirt Mound (181104) at (2276.9, -5326.88, 88.6976, 1.67551) and despawn in 0 ms'),
|
||||||
|
(@ENTRY * 100, 9, 3, 0, 0, 0, 100, 0, 4400, 4400, 0, 0, 11, 27824, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Rimblat Earthshatter - Cast spell Rimblat Grows Flower DND (27824) on Self'),
|
||||||
|
(@ENTRY * 100, 9, 4, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 50, 181103, 0, 1, 8, 0, 0, 8, 0, 0, 0, 2277, -5326.86, 88.7085, 5.74214, 'Rimblat Earthshatter - Summon gameobject - Flower (181103) at (2277, -5326.86, 88.7085, 5.74214) and despawn in 0 ms'),
|
||||||
|
(@ENTRY * 100, 9, 5, 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 41, 0, 0, 0, 0, 0, 0, 20, 181104, 10, 0, 0, 0, 0, 0, 'Closest gameobject Small Dirt Mound (181104) in 10 yards: Despawn instantly'),
|
||||||
|
(@ENTRY * 100, 9, 6, 0, 0, 0, 100, 0, 1500, 1500, 0, 0, 5, 21, 0, 0, 0, 0, 0, 10, 54186, 16135, 0, 0, 0, 0, 0, 'Creature Rayne (16135) with guid 54186 (fetching): Play emote ONESHOT_APPLAUD (21)'),
|
||||||
|
(@ENTRY * 100, 9, 7, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10, 54186, 16135, 0, 0, 0, 0, 0, 'Creature Rayne (16135) with guid 54186 (fetching): Talk 0 to invoker'),
|
||||||
|
(@ENTRY * 100, 9, 8, 0, 0, 0, 100, 0, 58600, 58600, 0, 0, 41, 0, 0, 0, 0, 0, 0, 20, 181103, 10, 0, 0, 0, 0, 0, 'Closest gameobject Flower (181103) in 10 yards: Despawn instantly');
|
||||||
|
|
||||||
|
-- DEL Flower
|
||||||
|
DELETE FROM `gameobject` WHERE `id` = 181103 AND `guid` = 45964;
|
||||||
|
|
||||||
|
-- DEL Small Dirt Mound
|
||||||
|
DELETE FROM `gameobject` WHERE `id` = 181104 AND `guid` = 45965;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
-- DB update 2024_05_13_00 -> 2024_05_14_00
|
||||||
|
--
|
||||||
|
DELETE FROM `smart_scripts` WHERE `entryorguid` = 17908 AND `source_type` = 0;
|
||||||
|
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
|
||||||
|
(17908, 0, 0, 1, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 89, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Giant Infernal - On Respawn - Start Random Movement 10y'),
|
||||||
|
(17908, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 35747, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Giant Infernal - On Respawn - Cast \'Flame Buffet\'');
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,4 @@
|
|||||||
|
-- DB update 2024_05_14_02 -> 2024_05_15_00
|
||||||
|
-- clear all gameobjects in map 30 "Alterac Valley"
|
||||||
|
-- these will be spawned in the bg script
|
||||||
|
DELETE FROM `gameobject` WHERE `map` = 30;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- DB update 2024_05_15_00 -> 2024_05_18_00
|
||||||
|
UPDATE `creature_text` SET `BroadcastTextId`='32838' WHERE `CreatureID`='32169' AND `GroupID`='0' AND `ID`='0';
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
-- DB update 2024_05_18_00 -> 2024_05_18_01
|
||||||
|
--
|
||||||
|
UPDATE `acore_string` SET `content_default`='%d - |c%x|Hitem:%d:0:0:0:0:0:0:0:0|h[%s]|h|r ', `locale_deDE`='%d - |c%x|Hitem:%d:0:0:0:0:0:0:0:0|h[%s]|h|r ', `locale_zhCN`='%d - |c%x|Hitem:%d:0:0:0:0:0:0:0:0|h[%s]|h|r' WHERE `entry`=512;
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
-- DB update 2024_05_18_01 -> 2024_05_18_02
|
||||||
|
-- add missing broadcastID to Elder Clearwater txt lines
|
||||||
|
UPDATE `creature_text` SET `BroadcastTextId` = '38218' WHERE `CreatureID` = '38294' AND `GroupID` = '1' AND `ID`='0';
|
||||||
|
UPDATE `creature_text` SET `BroadcastTextId` = '38222' WHERE `CreatureID` = '38294' AND `GroupID` = '3' AND `ID`='0';
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
-- DB update 2024_05_18_02 -> 2024_05_19_00
|
||||||
|
-- Update gameobject 'Crossroads' Supply Crates' with sniffed values
|
||||||
|
-- updated spawns
|
||||||
|
DELETE FROM `gameobject` WHERE (`id` IN (175708))
|
||||||
|
AND (`guid` IN (13381, 13382, 13384, 13385));
|
||||||
|
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
|
||||||
|
(13381, 175708, 1, 0, 0, 1, 1, -69.6404571533203125, -3390.967529296875, 92.3358001708984375, 2.617989301681518554, 0, 0, 0.965925216674804687, 0.258821308612823486, 120, 255, 1, "", 45435, NULL),
|
||||||
|
(13382, 175708, 1, 0, 0, 1, 1, -230.87164306640625, -3307.604248046875, 91.66666412353515625, 1.745326757431030273, 0, 0, 0.766043663024902343, 0.642788589000701904, 120, 255, 1, "", 46902, NULL),
|
||||||
|
(13384, 175708, 1, 0, 0, 1, 1, -60.1678390502929687, -3398.855712890625, 91.72420501708984375, 5.602506637573242187, 0, 0, -0.33380699157714843, 0.942641437053680419, 120, 255, 1, "", 45435, NULL),
|
||||||
|
(13385, 175708, 1, 0, 0, 1, 1, -212.19598388671875, -3292.279052734375, 91.66666412353515625, 5.044002056121826171, 0, 0, -0.58070278167724609, 0.814115643501281738, 120, 255, 1, "", 51943, NULL);
|
||||||
|
|
||||||
|
-- new spawns
|
||||||
|
DELETE FROM `gameobject` WHERE (`id` IN (175708))
|
||||||
|
AND (`guid` IN (443, 444, 445, 446));
|
||||||
|
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
|
||||||
|
(443, 175708, 1, 0, 0, 1, 1, -134.407684326171875, -3309.6806640625, 91.66666412353515625, 5.375615119934082031, 0, 0, -0.4383707046508789, 0.898794233798980712, 120, 255, 1, "", 45435, NULL),
|
||||||
|
(444, 175708, 1, 0, 0, 1, 1, -238.936386108398437, -3337.522705078125, 91.68515777587890625, 1.064649581909179687, 0, 0, 0.507537841796875, 0.861629426479339599, 120, 255, 1, "", 45435, NULL),
|
||||||
|
(445, 175708, 1, 0, 0, 1, 1, -38.3517112731933593, -3373.55859375, 91.701904296875, 0.767943859100341796, 0, 0, 0.374606132507324218, 0.927184045314788818, 120, 255, 1, "", 46902, NULL),
|
||||||
|
(446, 175708, 1, 0, 0, 1, 1, -48.2439079284667968, -3403.219482421875, 91.69777679443359375, 2.478367090225219726, 0, 0, 0.94551849365234375, 0.325568377971649169, 120, 255, 1, "", 46902, NULL);
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
-- DB update 2024_05_19_00 -> 2024_05_19_01
|
||||||
|
UPDATE `creature_template` SET `mingold` = 2500000, `maxgold` = 2500000 WHERE `entry` IN (17767, 17808, 17842, 17888, 18805, 18831, 19044, 19514, 19516, 21213, 21214, 21215, 21216, 21217, 22841, 23420, 22871, 22887, 22898, 22947, 22948, 24882, 24892, 25038, 25840);
|
||||||
|
UPDATE `creature_template` SET `mingold` = 625000, `maxgold` = 625000 WHERE `entry` IN (22949, 22950, 22951, 22952);
|
||||||
|
UPDATE `creature_template` SET `mingold` = 3000000, `maxgold` = 3000000 WHERE `entry` IN (17968, 19622, 21212, 22917);
|
||||||
|
UPDATE `creature_template` SET `mingold` = 3500000, `maxgold` = 3500000 WHERE `entry` IN (25165, 25166);
|
||||||
|
UPDATE `creature_template` SET `mingold` = 5000000, `maxgold` = 5000000 WHERE `entry` = 25315;
|
||||||
|
-- Values below are entirely guessed, ±25g from Wowhead's ~500g average money drop.
|
||||||
|
UPDATE `creature_template` SET `mingold` = 4750000, `maxgold` = 5250000 WHERE `entry` IN (17257, 17711, 18728);
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
-- DB update 2024_05_19_01 -> 2024_05_20_00
|
||||||
|
--
|
||||||
|
DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_anetheron_sleep';
|
||||||
|
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||||
|
(31298, 'spell_anetheron_sleep');
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
-- DB update 2024_05_20_00 -> 2024_05_21_00
|
||||||
|
--
|
||||||
|
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 18104;
|
||||||
|
UPDATE `creature_template` SET `ScriptName` = '' WHERE `entry` = 18095;
|
||||||
|
|
||||||
|
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18104);
|
||||||
|
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
|
||||||
|
(18104, 0, 0, 0, 60, 0, 100, 512, 1600, 1600, 1600, 1600, 0, 0, 89, 40, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Doomfire Spirit - Update - move to random near position in 40 yards'),
|
||||||
|
(18104, 0, 1, 0, 60, 0, 100, 512, 1550, 1550, 1600, 1600, 0, 0, 212, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Doomfire Spirit - Update - stop moving');
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
-- DB update 2024_05_21_00 -> 2024_05_25_00
|
||||||
|
--
|
||||||
|
-- Remove encounter auras minus glow aura from Keepers, add glow aura to Gossip Keepers
|
||||||
|
UPDATE `creature_template_addon` SET `auras` = '62647' WHERE `entry` IN (33410,33411,33412,33413,33213,33241,33242,33244);
|
||||||
|
|
||||||
|
DELETE FROM `spell_script_names` WHERE `spell_id` = 64170;
|
||||||
|
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (64170, 'spell_keeper_freya_summon_sanity_well');
|
||||||
|
|
||||||
|
DELETE FROM `spell_script_names` WHERE `spell_id` IN (62650,62670,62671,62702);
|
||||||
|
DELETE FROM `spell_script_names` WHERE `spell_id` = 64174 AND `ScriptName` = 'spell_gen_area_aura_select_players';
|
||||||
|
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||||
|
(62650, 'spell_gen_area_aura_select_players_and_caster'),
|
||||||
|
(62670, 'spell_gen_area_aura_select_players_and_caster'),
|
||||||
|
(62671, 'spell_gen_area_aura_select_players_and_caster'),
|
||||||
|
(62702, 'spell_gen_area_aura_select_players_and_caster'),
|
||||||
|
(64174, 'spell_gen_area_aura_select_players');
|
||||||
|
|
||||||
|
-- Keeper: handle spawns with script
|
||||||
|
DELETE FROM `creature` WHERE `id1` IN (33213,33241,33242,33244);
|
||||||
|
-- Keeper: remove not selectable, immune to pc, immune to player; civilian
|
||||||
|
UPDATE `creature_template` SET `unit_flags` = `unit_flags` & ~(256 | 512 | 33554432), `flags_extra` = `flags_extra` & ~2 WHERE `entry` IN (33410,33411,33412,33413);
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
-- DB update 2024_05_25_00 -> 2024_05_25_01
|
||||||
|
UPDATE `creature_loot_template` SET `Reference` = 1080007 WHERE `Reference` = 1080008 AND `Comment` = 'World Drop - Profession Recipes - NPC Levels ~50-63';
|
||||||
|
DELETE FROM `reference_loot_template` WHERE `Entry` = 1080008;
|
||||||
@@ -5,7 +5,6 @@
|
|||||||
# Don't make changes this file! make a `docker-compose.override.yml` and make your
|
# Don't make changes this file! make a `docker-compose.override.yml` and make your
|
||||||
# changes there instead.
|
# changes there instead.
|
||||||
|
|
||||||
version: '3'
|
|
||||||
services:
|
services:
|
||||||
ac-database:
|
ac-database:
|
||||||
container_name: ac-database
|
container_name: ac-database
|
||||||
|
|||||||
@@ -1349,6 +1349,26 @@ bool BattlegroundAV::SetupBattleground()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Generic gameobjects
|
||||||
|
for (uint16 i = 0; i <= (BG_AV_OBJECT_GENERIC_MAX - BG_AV_OBJECT_GENERIC_MIN); i++)
|
||||||
|
{
|
||||||
|
if (!AddObject(BG_AV_OBJECT_GENERIC_MIN + i,
|
||||||
|
std::get<0>(BG_AV_GenericObjectPos[i]),
|
||||||
|
std::get<1>(BG_AV_GenericObjectPos[i]).GetPositionX(),
|
||||||
|
std::get<1>(BG_AV_GenericObjectPos[i]).GetPositionY(),
|
||||||
|
std::get<1>(BG_AV_GenericObjectPos[i]).GetPositionZ(),
|
||||||
|
std::get<1>(BG_AV_GenericObjectPos[i]).GetOrientation(),
|
||||||
|
std::get<2>(BG_AV_GenericObjectPos[i])[0],
|
||||||
|
std::get<2>(BG_AV_GenericObjectPos[i])[1],
|
||||||
|
std::get<2>(BG_AV_GenericObjectPos[i])[2],
|
||||||
|
std::get<2>(BG_AV_GenericObjectPos[i])[3],
|
||||||
|
RESPAWN_ONE_DAY))
|
||||||
|
{
|
||||||
|
LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!10.{}", i);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Quest banners
|
// Quest banners
|
||||||
if (!AddObject(BG_AV_OBJECT_FROSTWOLF_BANNER, BG_AV_OBJECTID_FROSTWOLF_BANNER, BG_AV_ObjectPos[AV_OPLACE_FROSTWOLF_BANNER][0], BG_AV_ObjectPos[AV_OPLACE_FROSTWOLF_BANNER][1], BG_AV_ObjectPos[AV_OPLACE_FROSTWOLF_BANNER][2], BG_AV_ObjectPos[AV_OPLACE_FROSTWOLF_BANNER][3], 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_FROSTWOLF_BANNER][3] / 2), cos(BG_AV_ObjectPos[AV_OPLACE_FROSTWOLF_BANNER][3] / 2), RESPAWN_ONE_DAY))
|
if (!AddObject(BG_AV_OBJECT_FROSTWOLF_BANNER, BG_AV_OBJECTID_FROSTWOLF_BANNER, BG_AV_ObjectPos[AV_OPLACE_FROSTWOLF_BANNER][0], BG_AV_ObjectPos[AV_OPLACE_FROSTWOLF_BANNER][1], BG_AV_ObjectPos[AV_OPLACE_FROSTWOLF_BANNER][2], BG_AV_ObjectPos[AV_OPLACE_FROSTWOLF_BANNER][3], 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_FROSTWOLF_BANNER][3] / 2), cos(BG_AV_ObjectPos[AV_OPLACE_FROSTWOLF_BANNER][3] / 2), RESPAWN_ONE_DAY))
|
||||||
{
|
{
|
||||||
@@ -1404,6 +1424,10 @@ bool BattlegroundAV::SetupBattleground()
|
|||||||
for (i = BG_AV_OBJECT_HANDPACKED_SNOWDRIFT_MIN ; i <= BG_AV_OBJECT_HANDPACKED_SNOWDRIFT_MAX; i++)
|
for (i = BG_AV_OBJECT_HANDPACKED_SNOWDRIFT_MIN ; i <= BG_AV_OBJECT_HANDPACKED_SNOWDRIFT_MAX; i++)
|
||||||
SpawnBGObject(i, RESPAWN_IMMEDIATELY);
|
SpawnBGObject(i, RESPAWN_IMMEDIATELY);
|
||||||
|
|
||||||
|
// Generic gameobjects
|
||||||
|
for (uint16 i = BG_AV_OBJECT_GENERIC_MIN; i <= BG_AV_OBJECT_GENERIC_MAX; i++)
|
||||||
|
SpawnBGObject(i, RESPAWN_IMMEDIATELY);
|
||||||
|
|
||||||
// Quest banners
|
// Quest banners
|
||||||
SpawnBGObject(BG_AV_OBJECT_FROSTWOLF_BANNER, RESPAWN_IMMEDIATELY);
|
SpawnBGObject(BG_AV_OBJECT_FROSTWOLF_BANNER, RESPAWN_IMMEDIATELY);
|
||||||
SpawnBGObject(BG_AV_OBJECT_STORMPIKE_BANNER, RESPAWN_IMMEDIATELY);
|
SpawnBGObject(BG_AV_OBJECT_STORMPIKE_BANNER, RESPAWN_IMMEDIATELY);
|
||||||
|
|||||||
@@ -324,8 +324,10 @@ enum BG_AV_ObjectTypes
|
|||||||
BG_AV_OBJECT_HANDPACKED_SNOWDRIFT_MAX = 246,
|
BG_AV_OBJECT_HANDPACKED_SNOWDRIFT_MAX = 246,
|
||||||
BG_AV_OBJECT_FROSTWOLF_BANNER = 247,
|
BG_AV_OBJECT_FROSTWOLF_BANNER = 247,
|
||||||
BG_AV_OBJECT_STORMPIKE_BANNER = 248,
|
BG_AV_OBJECT_STORMPIKE_BANNER = 248,
|
||||||
|
BG_AV_OBJECT_GENERIC_MIN = 249,
|
||||||
|
BG_AV_OBJECT_GENERIC_MAX = 323,
|
||||||
|
|
||||||
BG_AV_OBJECT_MAX = 249
|
BG_AV_OBJECT_MAX = 324
|
||||||
};
|
};
|
||||||
|
|
||||||
enum BG_AV_OBJECTS
|
enum BG_AV_OBJECTS
|
||||||
@@ -565,6 +567,97 @@ const float BG_AV_ObjectPos[AV_OPLACE_MAX][4] =
|
|||||||
{40.0913f, 0.0153897f, -4.0962f, 0.96131f}
|
{40.0913f, 0.0153897f, -4.0962f, 0.96131f}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// GO template ID, Position, rotation0-3, VerifiedBuild
|
||||||
|
std::tuple<uint32, Position, std::array<float, 4>> const BG_AV_GenericObjectPos[BG_AV_OBJECT_GENERIC_MAX - BG_AV_OBJECT_GENERIC_MIN + 1] =
|
||||||
|
{
|
||||||
|
// Burning Embers
|
||||||
|
{ 3832, { -1235.57f, -241.478f, 73.4377f, 1.48353f }, { 0.0f, 0.0f, 0.67559f, 0.737278f } }, // 46248
|
||||||
|
{ 3833, { -1248.85f, -254.06f, 73.4377f, 1.48353f }, { 0.0f, 0.0f, 0.67559f, 0.737278f } }, // 46248
|
||||||
|
{ 3834, { -1248.15f, -245.599f, 73.4377f, 6.23083f }, { 0.0f, 0.0f, -0.0261765f, 0.999657f } }, // 46248
|
||||||
|
{ 3835, { -1237.21f, -260.168f, 73.4377f, 1.48353f }, { 0.0f, 0.0f, 0.67559f, 0.737278f } }, // 46248
|
||||||
|
{ 3836, { -1260.37f, -248.767f, 77.9454f, 1.48353f }, { 0.0f, 0.0f, 0.67559f, 0.737278f } }, // 46248
|
||||||
|
{ 3837, { -1249.32f, -244.907f, 92.3372f, 0.401425f }, { 0.0f, 0.0f, 0.199368f, 0.979925f } }, // 46248
|
||||||
|
{ 3838, { -1250.09f, -254.604f, 92.3015f, 0.148352f }, { 0.0f, 0.0f, 0.0741081f, 0.99725f } }, // 46248
|
||||||
|
// Wooden Chair
|
||||||
|
{ 28048, { 41.1672f, -426.866f, 44.6828f, 2.7838f }, { 0.0f, 0.0f, 0.98404f, 0.177946f } }, // 52237
|
||||||
|
{ 28049, { 39.0988f, -425.746f, 44.688f, 5.66359f }, { 0.0f, 0.0f, -0.304864f, 0.952396f } }, // 52237
|
||||||
|
{ 28605, { 25.2482f, -433.104f, 47.6369f, 2.38237f }, { 0.0f, 0.0f, 0.928809f, 0.370558f } }, // 52237
|
||||||
|
{ 28606, { 25.758f, -425.837f, 47.6369f, 4.30224f }, { 0.0f, 0.0f, -0.836286f, 0.548294f } }, // 52237
|
||||||
|
{ 28607, { 27.6786f, -427.69f, 47.6369f, 3.60411f }, { 0.0f, 0.0f, -0.973379f, 0.229201f } }, // 52237
|
||||||
|
// Anvil
|
||||||
|
{ 32571, { -100.071f, -583.512f, 41.7316f, 0.00872424f }, { 0.0f, 0.0f, 0.00436211f, 0.99999f } }, // 46248
|
||||||
|
{ 32572, { -102.733f, -588.775f, 41.7316f, 5.24472f }, { 0.0f, 0.0f, -0.496216f, 0.868199f } }, // 46248
|
||||||
|
{ 32573, { -100.966f, -586.958f, 41.7316f, 5.76831f }, { 0.0f, 0.0f, -0.254601f, 0.967046f } }, // 46248
|
||||||
|
{ 32574, { -106.172f, -589.721f, 41.7316f, 4.72112f }, { 0.0f, 0.0f, -0.704014f, 0.710186f } }, // 46248
|
||||||
|
{ 51704, { -1245.2f, -307.059f, 63.3199f, 3.0796f }, { -0.00711155f, -0.0236301f, 0.99922f, 0.0308324f } }, // 46248
|
||||||
|
{ 51705, { -1258.23f, -310.977f, 63.2015f, 0.862903f }, { 0.0179744f, -0.0169086f, 0.418255f, 0.907994f } }, // 46248
|
||||||
|
{ 161489, { 360.38f, -527.549f, 71.1205f, 4.23242f }, { 0.0f, 0.0f, -0.854912f, 0.518773f } }, // 46248
|
||||||
|
{ 178685, { 646.207f, -57.2431f, 41.6587f, 6.12611f }, { 0.0f, 0.0f, -0.0784588f, 0.996917f } }, // 46248
|
||||||
|
{ 179391, { 548.682f, -100.846f, 44.8191f, 1.46608f }, { 0.0f, 0.0f, 0.66913f, 0.743145f } }, // 46248
|
||||||
|
{ 179391, { -172.363f, -452.824f, 33.2796f, 0.628319f }, { 0.0f, 0.0f, 0.309017f, 0.951056f } }, // 46248
|
||||||
|
{ 179392, { 552.429f, -102.764f, 44.8191f, 2.46964f }, { 0.0f, 0.0f, 0.944089f, 0.329691f } }, // 46248
|
||||||
|
{ 179392, { -171.282f, -456.892f, 33.2796f, 1.63188f }, { 0.0f, 0.0f, 0.728371f, 0.685183f } }, // 46248
|
||||||
|
{ 179393, { 549.472f, -101.547f, 44.8191f, 1.16064f }, { 0.0f, 0.0f, 0.548293f, 0.836286f } }, // 46248
|
||||||
|
{ 179393, { -172.356f, -453.88f, 33.2796f, 0.322884f }, { 0.0f, 0.0f, 0.160742f, 0.986997f } }, // 46248
|
||||||
|
{ 179394, { 550.347f, -101.698f, 44.8191f, 1.59698f }, { 0.0f, 0.0f, 0.716302f, 0.69779f } }, // 46248
|
||||||
|
{ 179394, { -171.882f, -454.632f, 33.2796f, 0.759217f }, { 0.0f, 0.0f, 0.370557f, 0.92881f } }, // 46248
|
||||||
|
{ 179395, { 551.271f, -102.226f, 44.8191f, 0.898843f }, { 0.0f, 0.0f, 0.434444f, 0.900699f } }, // 46248
|
||||||
|
{ 179395, { -171.656f, -455.671f, 33.2796f, 0.0610847f }, { 0.0f, 0.0f, 0.0305376f, 0.999534f } }, // 46248
|
||||||
|
{ 179396, { -170.699f, -458.41f, 33.2796f, 5.25344f }, { 0.0f, 0.0f, -0.492423f, 0.870356f } }, // 46248
|
||||||
|
{ 179396, { 553.947f, -103.347f, 44.8191f, 6.0912f }, { 0.0f, 0.0f, -0.0958452f, 0.995396f } }, // 46248
|
||||||
|
{ 179397, { -170.14f, -457.609f, 33.2796f, 5.60251f }, { 0.0f, 0.0f, -0.333806f, 0.942642f } }, // 46248
|
||||||
|
{ 179397, { 553.725f, -102.396f, 44.8191f, 0.157079f }, { 0.0f, 0.0f, 0.0784588f, 0.996917f } }, // 46248
|
||||||
|
// Forge
|
||||||
|
{ 34571, { -105.423f, -584.352f, 42.0149f, 2.36492f }, { 0.0f, 0.0f, 0.92554f, 0.37865f } }, // 46248
|
||||||
|
{ 161487, { 361.097f, -531.693f, 71.1898f, 4.12771f }, { 0.0f, 0.0f, -0.88089f, 0.473321f } }, // 46248
|
||||||
|
{ 178684, { 649.264f, -59.1111f, 41.5476f, 3.59538f }, { 0.0f, 0.0f, -0.97437f, 0.224951f } }, // 46248
|
||||||
|
// Bonfire
|
||||||
|
{ 161488, { 360.915f, -497.099f, 71.3389f, 3.14159f }, { 0.0f, 0.0f, -1.0f, 0.0f } }, // 46248
|
||||||
|
{ 177408, { -743.427f, -398.241f, 76.4266f, 0.872664f }, { 0.0173936f, -0.00633049f, 0.422701f, 0.90608f } }, // 46248
|
||||||
|
// Brazier
|
||||||
|
{ 177261, { -1290.27f, -172.47f, 72.1853f, 3.06302f }, { 0.00871992f, -0.00034237f, 0.99919f, 0.0392748f } }, // 46248
|
||||||
|
{ 177292, { -1099.21f, -266.231f, 57.8849f, 3.99681f }, { 0.0f, 0.0f, -0.909961f, 0.414694f } }, // 46248
|
||||||
|
{ 177293, { -1082.6f, -266.681f, 57.8575f, 2.40855f }, { 0.0f, 0.0f, 0.933579f, 0.35837f } }, // 46248
|
||||||
|
{ 177405, { -1140.82f, -343.392f, 50.9077f, 3.49939f }, { 0.0f, 0.0f, -0.98404f, 0.177946f } }, // 46248
|
||||||
|
{ 177406, { -1139.68f, -356.288f, 51.264f, 5.57633f }, { 0.0f, 0.0f, -0.346116f, 0.938192f } }, // 46248
|
||||||
|
{ 177409, { -1215.59f, -371.946f, 56.5293f, 0.357792f }, { 0.0f, 0.0f, 0.177943f, 0.984041f } }, // 46248
|
||||||
|
{ 177410, { -1241.25f, -345.115f, 59.6867f, 0.357792f }, { 0.0f, 0.0f, 0.177943f, 0.984041f } }, // 46248
|
||||||
|
{ 177411, { -1202.81f, -271.599f, 72.5805f, 0.357792f }, { 0.0f, 0.0f, 0.177943f, 0.984041f } }, // 46248
|
||||||
|
{ 177412, { -1282.21f, -284.083f, 87.256f, 6.2221f }, { 0.0f, 0.0f, -0.0305376f, 0.999534f } }, // 46248
|
||||||
|
{ 177413, { -1256.55f, -280.278f, 73.9473f, 6.2221f }, { 0.0f, 0.0f, -0.0305376f, 0.999534f } }, // 46248
|
||||||
|
{ 179419, { -1423.16f, -318.436f, 89.1136f, 2.35619f }, { 0.0f, 0.0f, 0.923879f, 0.382686f } }, // 46248
|
||||||
|
// Campfire
|
||||||
|
{ 177262, { -1286.25f, -184.481f, 71.8334f, 4.23243f }, { -0.00733089f, -0.0299597f, -0.854258f, 0.518934f } }, // 46248
|
||||||
|
{ 177263, { -1280.17f, -220.536f, 72.2686f, 1.62315f }, { 0.0f, 0.0f, 0.725373f, 0.688356f } }, // 46248
|
||||||
|
{ 177324, { -375.017f, -523.71f, 84.0771f, 3.14159f }, { 0.0f, 0.0f, -1.0f, 0.0f } }, // 46248
|
||||||
|
{ 177325, { -413.51f, -521.413f, 84.0771f, 2.05948f }, { 0.0f, 0.0f, 0.857166f, 0.51504f } }, // 46248
|
||||||
|
{ 177326, { -487.401f, -526.486f, 82.5708f, 5.47161f }, { 0.0f, 0.0f, -0.394743f, 0.918792f } }, // 46248
|
||||||
|
{ 177327, { -251.556f, -562.061f, 68.1725f, 6.11738f }, { 0.0f, 0.0f, -0.0828075f, 0.996566f } }, // 46248
|
||||||
|
{ 177425, { -353.118f, 37.0955f, 65.8904f, 3.14159f }, { 0.0f, 0.0f, -1.0f, 0.0f } }, // 48632
|
||||||
|
{ 179945, { -1070.53f, -617.908f, 51.3249f, 5.83813f }, { 0.0f, 0.0f, -0.220697f, 0.975342f } }, // 46248
|
||||||
|
// Cauldron
|
||||||
|
{ 177396, { 12.8247f, -120.21f, 41.6669f, 3.14159f }, { 0.0f, 0.0f, -1.0f, 0.0f } }, // 46248
|
||||||
|
// Chair
|
||||||
|
{ 179384, { -145.341f, -444.846f, 26.4163f, 6.23083f }, { 0.0f, 0.0f, -0.0261765f, 0.999657f } }, // 52237
|
||||||
|
{ 179384, { 560.834f, -75.4266f, 37.9558f, 0.785397f }, { 0.0f, 0.0f, 0.382683f, 0.92388f } }, // 52237
|
||||||
|
{ 179385, { 550.678f, -79.8234f, 44.8257f, 3.18527f }, { 0.0f, 0.0f, -0.999762f, 0.0218352f } }, // 52237
|
||||||
|
{ 179385, { -155.405f, -440.24f, 33.2862f, 2.34747f }, { 0.0f, 0.0f, 0.922201f, 0.38671f } }, // 52237
|
||||||
|
{ 179386, { 568.326f, -89.4992f, 37.9558f, 1.39626f }, { 0.0f, 0.0f, 0.642787f, 0.766045f } }, // 52237
|
||||||
|
{ 179386, { -150.787f, -459.829f, 26.4163f, 0.558504f }, { 0.0f, 0.0f, 0.275637f, 0.961262f } }, // 52237
|
||||||
|
{ 179387, { 550.597f, -77.5213f, 44.8257f, 4.23242f }, { 0.0f, 0.0f, -0.854912f, 0.518773f } }, // 52237
|
||||||
|
{ 179387, { -153.748f, -438.639f, 33.2862f, 3.39467f }, { 0.0f, 0.0f, -0.992004f, 0.126203f } }, // 52237
|
||||||
|
{ 179388, { 570.419f, -89.0567f, 37.9558f, 2.22529f }, { 0.0f, 0.0f, 0.896873f, 0.442289f } }, // 52237
|
||||||
|
{ 179388, { -149.057f, -461.089f, 26.4163f, 1.38754f }, { 0.0f, 0.0f, 0.63944f, 0.768841f } }, // 52237
|
||||||
|
{ 179389, { 555.517f, -101.589f, 44.8257f, 0.392697f }, { 0.0f, 0.0f, 0.195089f, 0.980785f } }, // 52237
|
||||||
|
{ 179389, { -168.342f, -458.4f, 33.2862f, 5.83813f }, { 0.0f, 0.0f, -0.220697f, 0.975342f } }, // 52237
|
||||||
|
{ 179390, { 561.851f, -73.1481f, 37.9558f, 4.88692f }, { 0.0f, 0.0f, -0.642787f, 0.766045f } }, // 52237
|
||||||
|
{ 179390, { -142.968f, -444.076f, 26.4163f, 4.04917f }, { 0.0f, 0.0f, -0.898793f, 0.438373f } }, // 52237
|
||||||
|
// Wanted: ORCS!
|
||||||
|
{ 179437, { 618.748f, -52.1126f, 42.1122f, 6.21337f }, { 0.0f, 0.0f, -0.0348988f, 0.999390f } }, // 46248
|
||||||
|
// Wanted: DWARVES!
|
||||||
|
{ 179438, { -1181.10f, -370.747f, 53.6246f, 2.68781f }, { 0.0f, 0.0f, 0.974370f, 0.224951f } }, // 46248
|
||||||
|
};
|
||||||
|
|
||||||
const float BG_AV_DoorPositons[2][4] =
|
const float BG_AV_DoorPositons[2][4] =
|
||||||
{
|
{
|
||||||
{780.487f, -493.024f, 99.9553f, 3.0976f}, //alliance
|
{780.487f, -493.024f, 99.9553f, 3.0976f}, //alliance
|
||||||
|
|||||||
@@ -6586,6 +6586,8 @@ void Player::_ApplyItemBonuses(ItemTemplate const* proto, uint8 slot, bool apply
|
|||||||
|
|
||||||
statType = proto->ItemStat[i].ItemStatType;
|
statType = proto->ItemStat[i].ItemStatType;
|
||||||
val = proto->ItemStat[i].ItemStatValue;
|
val = proto->ItemStat[i].ItemStatValue;
|
||||||
|
|
||||||
|
sScriptMgr->OnApplyItemModsBefore(this, slot, apply, i, statType, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (val == 0)
|
if (val == 0)
|
||||||
|
|||||||
@@ -4451,6 +4451,8 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sScriptMgr->OnApplyEnchantmentItemModsBefore(this, item, slot, apply, enchant_spell_id, enchant_amount);
|
||||||
|
|
||||||
LOG_DEBUG("entities.player.items", "Adding {} to stat nb {}", enchant_amount, enchant_spell_id);
|
LOG_DEBUG("entities.player.items", "Adding {} to stat nb {}", enchant_amount, enchant_spell_id);
|
||||||
switch (enchant_spell_id)
|
switch (enchant_spell_id)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19312,7 +19312,7 @@ float Unit::MeleeSpellMissChance(Unit const* victim, WeaponAttackType attType, i
|
|||||||
modOwner->ApplySpellMod(spellId, SPELLMOD_RESIST_MISS_CHANCE, hitChance);
|
modOwner->ApplySpellMod(spellId, SPELLMOD_RESIST_MISS_CHANCE, hitChance);
|
||||||
}
|
}
|
||||||
|
|
||||||
missChance += hitChance - 100.0f;
|
missChance -= hitChance - 100.0f;
|
||||||
|
|
||||||
if (attType == RANGED_ATTACK)
|
if (attType == RANGED_ATTACK)
|
||||||
missChance -= m_modRangedHitChance;
|
missChance -= m_modRangedHitChance;
|
||||||
|
|||||||
@@ -2351,6 +2351,6 @@ void LoadLootTemplates_Reference()
|
|||||||
// output error for any still listed ids (not referenced from any loot table)
|
// output error for any still listed ids (not referenced from any loot table)
|
||||||
LootTemplates_Reference.ReportUnusedIds(lootIdSet);
|
LootTemplates_Reference.ReportUnusedIds(lootIdSet);
|
||||||
|
|
||||||
LOG_INFO("server.loading", ">> Loaded refence loot templates in {} ms", GetMSTimeDiffToNow(oldMSTime));
|
LOG_INFO("server.loading", ">> Loaded reference loot templates in {} ms", GetMSTimeDiffToNow(oldMSTime));
|
||||||
LOG_INFO("server.loading", " ");
|
LOG_INFO("server.loading", " ");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -647,6 +647,16 @@ void ScriptMgr::OnCustomScalingStatValue(Player* player, ItemTemplate const* pro
|
|||||||
CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_CUSTOM_SCALING_STAT_VALUE, script->OnCustomScalingStatValue(player, proto, statType, val, itemProtoStatNumber, ScalingStatValue, ssv));
|
CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_CUSTOM_SCALING_STAT_VALUE, script->OnCustomScalingStatValue(player, proto, statType, val, itemProtoStatNumber, ScalingStatValue, ssv));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScriptMgr::OnApplyItemModsBefore(Player* player, uint8 slot, bool apply, uint8 itemProtoStatNumber, uint32 statType, int32& val)
|
||||||
|
{
|
||||||
|
CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_APPLY_ITEM_MODS_BEFORE, script->OnApplyItemModsBefore(player, slot, apply, itemProtoStatNumber, statType, val));
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScriptMgr::OnApplyEnchantmentItemModsBefore(Player* player, Item* item, EnchantmentSlot slot, bool apply, uint32 enchant_spell_id, uint32& enchant_amount)
|
||||||
|
{
|
||||||
|
CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_APPLY_ENCHANTMENT_ITEM_MODS_BEFORE, script->OnApplyEnchantmentItemModsBefore(player, item, slot, apply, enchant_spell_id, enchant_amount));
|
||||||
|
}
|
||||||
|
|
||||||
bool ScriptMgr::CanArmorDamageModifier(Player* player)
|
bool ScriptMgr::CanArmorDamageModifier(Player* player)
|
||||||
{
|
{
|
||||||
CALL_ENABLED_BOOLEAN_HOOKS(PlayerScript, PLAYERHOOK_CAN_ARMOR_DAMAGE_MODIFIER, !script->CanArmorDamageModifier(player));
|
CALL_ENABLED_BOOLEAN_HOOKS(PlayerScript, PLAYERHOOK_CAN_ARMOR_DAMAGE_MODIFIER, !script->CanArmorDamageModifier(player));
|
||||||
|
|||||||
@@ -146,6 +146,8 @@ enum PlayerHook
|
|||||||
PLAYERHOOK_ON_VICTIM_REWARD_AFTER,
|
PLAYERHOOK_ON_VICTIM_REWARD_AFTER,
|
||||||
PLAYERHOOK_ON_CUSTOM_SCALING_STAT_VALUE_BEFORE,
|
PLAYERHOOK_ON_CUSTOM_SCALING_STAT_VALUE_BEFORE,
|
||||||
PLAYERHOOK_ON_CUSTOM_SCALING_STAT_VALUE,
|
PLAYERHOOK_ON_CUSTOM_SCALING_STAT_VALUE,
|
||||||
|
PLAYERHOOK_ON_APPLY_ITEM_MODS_BEFORE,
|
||||||
|
PLAYERHOOK_ON_APPLY_ENCHANTMENT_ITEM_MODS_BEFORE,
|
||||||
PLAYERHOOK_CAN_ARMOR_DAMAGE_MODIFIER,
|
PLAYERHOOK_CAN_ARMOR_DAMAGE_MODIFIER,
|
||||||
PLAYERHOOK_ON_GET_FERAL_AP_BONUS,
|
PLAYERHOOK_ON_GET_FERAL_AP_BONUS,
|
||||||
PLAYERHOOK_CAN_APPLY_WEAPON_DEPENDENT_AURA_DAMAGE_MOD,
|
PLAYERHOOK_CAN_APPLY_WEAPON_DEPENDENT_AURA_DAMAGE_MOD,
|
||||||
@@ -543,6 +545,10 @@ public:
|
|||||||
|
|
||||||
virtual void OnCustomScalingStatValue(Player* /*player*/, ItemTemplate const* /*proto*/, uint32& /*statType*/, int32& /*val*/, uint8 /*itemProtoStatNumber*/, uint32 /*ScalingStatValue*/, ScalingStatValuesEntry const* /*ssv*/) { }
|
virtual void OnCustomScalingStatValue(Player* /*player*/, ItemTemplate const* /*proto*/, uint32& /*statType*/, int32& /*val*/, uint8 /*itemProtoStatNumber*/, uint32 /*ScalingStatValue*/, ScalingStatValuesEntry const* /*ssv*/) { }
|
||||||
|
|
||||||
|
virtual void OnApplyItemModsBefore(Player* /*player*/, uint8 /*slot*/, bool /*apply*/, uint8 /*itemProtoStatNumber*/, uint32 /*statType*/, int32& /*val*/) { }
|
||||||
|
|
||||||
|
virtual void OnApplyEnchantmentItemModsBefore(Player* /*player*/, Item* /*item*/, EnchantmentSlot /*slot*/, bool /*apply*/, uint32 /*enchant_spell_id*/, uint32& /*enchant_amount*/) { }
|
||||||
|
|
||||||
[[nodiscard]] virtual bool CanArmorDamageModifier(Player* /*player*/) { return true; }
|
[[nodiscard]] virtual bool CanArmorDamageModifier(Player* /*player*/) { return true; }
|
||||||
|
|
||||||
virtual void OnGetFeralApBonus(Player* /*player*/, int32& /*feral_bonus*/, int32 /*dpsMod*/, ItemTemplate const* /*proto*/, ScalingStatValuesEntry const* /*ssv*/) { }
|
virtual void OnGetFeralApBonus(Player* /*player*/, int32& /*feral_bonus*/, int32 /*dpsMod*/, ItemTemplate const* /*proto*/, ScalingStatValuesEntry const* /*ssv*/) { }
|
||||||
|
|||||||
@@ -445,6 +445,8 @@ public: /* PlayerScript */
|
|||||||
void OnVictimRewardAfter(Player* player, Player* victim, uint32& killer_title, uint32& victim_rank, float& honor_f);
|
void OnVictimRewardAfter(Player* player, Player* victim, uint32& killer_title, uint32& victim_rank, float& honor_f);
|
||||||
void OnCustomScalingStatValueBefore(Player* player, ItemTemplate const* proto, uint8 slot, bool apply, uint32& CustomScalingStatValue);
|
void OnCustomScalingStatValueBefore(Player* player, ItemTemplate const* proto, uint8 slot, bool apply, uint32& CustomScalingStatValue);
|
||||||
void OnCustomScalingStatValue(Player* player, ItemTemplate const* proto, uint32& statType, int32& val, uint8 itemProtoStatNumber, uint32 ScalingStatValue, ScalingStatValuesEntry const* ssv);
|
void OnCustomScalingStatValue(Player* player, ItemTemplate const* proto, uint32& statType, int32& val, uint8 itemProtoStatNumber, uint32 ScalingStatValue, ScalingStatValuesEntry const* ssv);
|
||||||
|
void OnApplyItemModsBefore(Player* player, uint8 slot, bool apply, uint8 itemProtoStatNumber, uint32 statType, int32& val);
|
||||||
|
void OnApplyEnchantmentItemModsBefore(Player* player, Item* item, EnchantmentSlot slot, bool apply, uint32 enchant_spell_id, uint32& enchant_amount);
|
||||||
bool CanArmorDamageModifier(Player* player);
|
bool CanArmorDamageModifier(Player* player);
|
||||||
void OnGetFeralApBonus(Player* player, int32& feral_bonus, int32 dpsMod, ItemTemplate const* proto, ScalingStatValuesEntry const* ssv);
|
void OnGetFeralApBonus(Player* player, int32& feral_bonus, int32 dpsMod, ItemTemplate const* proto, ScalingStatValuesEntry const* ssv);
|
||||||
bool CanApplyWeaponDependentAuraDamageMod(Player* player, Item* item, WeaponAttackType attackType, AuraEffect const* aura, bool apply);
|
bool CanApplyWeaponDependentAuraDamageMod(Player* player, Item* item, WeaponAttackType attackType, AuraEffect const* aura, bool apply);
|
||||||
|
|||||||
@@ -1275,7 +1275,7 @@ void World::LoadConfigSettings(bool reload)
|
|||||||
|
|
||||||
_bool_configs[CONFIG_ALLOW_JOIN_BG_AND_LFG] = sConfigMgr->GetOption<bool>("JoinBGAndLFG.Enable", false);
|
_bool_configs[CONFIG_ALLOW_JOIN_BG_AND_LFG] = sConfigMgr->GetOption<bool>("JoinBGAndLFG.Enable", false);
|
||||||
|
|
||||||
_bool_configs[CONFIG_LEAVE_GROUP_ON_LOGOUT] = sConfigMgr->GetOption<bool>("LeaveGroupOnLogout.Enabled", true);
|
_bool_configs[CONFIG_LEAVE_GROUP_ON_LOGOUT] = sConfigMgr->GetOption<bool>("LeaveGroupOnLogout.Enabled", false);
|
||||||
|
|
||||||
_bool_configs[CONFIG_QUEST_POI_ENABLED] = sConfigMgr->GetOption<bool>("QuestPOI.Enabled", true);
|
_bool_configs[CONFIG_QUEST_POI_ENABLED] = sConfigMgr->GetOption<bool>("QuestPOI.Enabled", true);
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ EndScriptData */
|
|||||||
#include "ReputationMgr.h"
|
#include "ReputationMgr.h"
|
||||||
#include "SpellInfo.h"
|
#include "SpellInfo.h"
|
||||||
#include "SpellMgr.h"
|
#include "SpellMgr.h"
|
||||||
|
#include "SharedDefines.h"
|
||||||
|
|
||||||
using namespace Acore::ChatCommands;
|
using namespace Acore::ChatCommands;
|
||||||
|
|
||||||
@@ -516,7 +517,7 @@ public:
|
|||||||
|
|
||||||
if (handler->GetSession())
|
if (handler->GetSession())
|
||||||
{
|
{
|
||||||
handler->PSendSysMessage(LANG_ITEM_LIST_CHAT, itemTemplate.ItemId, itemTemplate.ItemId, name.c_str());
|
handler->PSendSysMessage(LANG_ITEM_LIST_CHAT, itemTemplate.ItemId, ItemQualityColors[itemTemplate.Quality], itemTemplate.ItemId, name.c_str());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -550,7 +551,7 @@ public:
|
|||||||
|
|
||||||
if (handler->GetSession())
|
if (handler->GetSession())
|
||||||
{
|
{
|
||||||
handler->PSendSysMessage(LANG_ITEM_LIST_CHAT, itemTemplate.ItemId, itemTemplate.ItemId, name.c_str());
|
handler->PSendSysMessage(LANG_ITEM_LIST_CHAT, itemTemplate.ItemId, ItemQualityColors[itemTemplate.Quality], itemTemplate.ItemId, name.c_str());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -109,6 +109,18 @@ struct boss_nightbane : public BossAI
|
|||||||
me->GetMotionMaster()->MoveTakeoff(POINT_DESPAWN, -11013.246f, -1770.5212f, 166.50139f);
|
me->GetMotionMaster()->MoveTakeoff(POINT_DESPAWN, -11013.246f, -1770.5212f, 166.50139f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType damageEffectType, SpellSchoolMask spellSchoolMask) override
|
||||||
|
{
|
||||||
|
if (_flying || Phase == 2)
|
||||||
|
{
|
||||||
|
if (damage >= me->GetHealth())
|
||||||
|
{
|
||||||
|
damage = me->GetHealth() - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BossAI::DamageTaken(attacker, damage, damageEffectType, spellSchoolMask);
|
||||||
|
}
|
||||||
|
|
||||||
void JustEngagedWith(Unit* who) override
|
void JustEngagedWith(Unit* who) override
|
||||||
{
|
{
|
||||||
BossAI::JustEngagedWith(who);
|
BossAI::JustEngagedWith(who);
|
||||||
@@ -160,17 +172,21 @@ struct boss_nightbane : public BossAI
|
|||||||
scheduler.Schedule(2s, GROUP_FLYING, [this](TaskContext)
|
scheduler.Schedule(2s, GROUP_FLYING, [this](TaskContext)
|
||||||
{
|
{
|
||||||
DoResetThreatList();
|
DoResetThreatList();
|
||||||
DoCastVictim(SPELL_RAIN_OF_BONES);
|
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f))
|
||||||
|
{
|
||||||
|
_skeletonSpawnPos = target->GetPosition();
|
||||||
|
me->CastSpell(_skeletonSpawnPos.GetPositionX(), _skeletonSpawnPos.GetPositionY(), _skeletonSpawnPos.GetPositionZ(), SPELL_RAIN_OF_BONES, true);
|
||||||
_skeletonscheduler.Schedule(50ms, [this](TaskContext context)
|
_skeletonscheduler.Schedule(50ms, [this](TaskContext context)
|
||||||
{
|
{
|
||||||
//spawns skeletons every second until skeletonCount is reached
|
//spawns skeletons every 2 seconds until skeletonCount is reached
|
||||||
if(_skeletonSpawnCounter < _skeletonCount)
|
if(_skeletonSpawnCounter < _skeletonCount)
|
||||||
{
|
{
|
||||||
DoCastVictim(SPELL_SUMMON_SKELETON, true);
|
me->CastSpell(_skeletonSpawnPos.GetPositionX(), _skeletonSpawnPos.GetPositionY(), _skeletonSpawnPos.GetPositionZ(), SPELL_SUMMON_SKELETON, true);
|
||||||
_skeletonSpawnCounter++;
|
_skeletonSpawnCounter++;
|
||||||
context.Repeat(2s);
|
context.Repeat(2s);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
}).Schedule(20s, GROUP_FLYING, [this](TaskContext context)
|
}).Schedule(20s, GROUP_FLYING, [this](TaskContext context)
|
||||||
{
|
{
|
||||||
DoCastRandomTarget(SPELL_DISTRACTING_ASH);
|
DoCastRandomTarget(SPELL_DISTRACTING_ASH);
|
||||||
@@ -371,6 +387,7 @@ private:
|
|||||||
uint32 _movePhase;
|
uint32 _movePhase;
|
||||||
uint8 _skeletonCount;
|
uint8 _skeletonCount;
|
||||||
uint8 _skeletonSpawnCounter;
|
uint8 _skeletonSpawnCounter;
|
||||||
|
Position _skeletonSpawnPos;
|
||||||
};
|
};
|
||||||
|
|
||||||
class go_blackened_urn : public GameObjectScript
|
class go_blackened_urn : public GameObjectScript
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ void AddSC_event_winter_veil_scripts();
|
|||||||
void AddSC_event_love_in_the_air();
|
void AddSC_event_love_in_the_air();
|
||||||
void AddSC_event_midsummer_scripts();
|
void AddSC_event_midsummer_scripts();
|
||||||
void AddSC_event_childrens_week();
|
void AddSC_event_childrens_week();
|
||||||
|
void AddSC_event_firework_show_scripts();
|
||||||
|
|
||||||
// The name of this function should match:
|
// The name of this function should match:
|
||||||
// void Add${NameOfDirectory}Scripts()
|
// void Add${NameOfDirectory}Scripts()
|
||||||
@@ -35,4 +36,5 @@ void AddEventsScripts()
|
|||||||
AddSC_event_love_in_the_air();
|
AddSC_event_love_in_the_air();
|
||||||
AddSC_event_midsummer_scripts();
|
AddSC_event_midsummer_scripts();
|
||||||
AddSC_event_childrens_week();
|
AddSC_event_childrens_week();
|
||||||
|
AddSC_event_firework_show_scripts();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,206 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU Affero General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "firework_show.h"
|
||||||
|
#include "firework_show_BootyBay.h"
|
||||||
|
#include "firework_show_Exodar.h"
|
||||||
|
#include "firework_show_Ironforge.h"
|
||||||
|
#include "firework_show_Orgrimmar.h"
|
||||||
|
#include "firework_show_Shattrath.h"
|
||||||
|
#include "firework_show_Silvermoon.h"
|
||||||
|
#include "firework_show_Stormwind.h"
|
||||||
|
#include "firework_show_Teldrassil.h"
|
||||||
|
#include "firework_show_ThunderBluff.h"
|
||||||
|
#include "firework_show_Undercity.h"
|
||||||
|
#include "GameObjectAI.h"
|
||||||
|
#include "GameObjectScript.h"
|
||||||
|
|
||||||
|
// <mapId, zoneId>, show
|
||||||
|
std::map<std::pair<uint32, uint32>, FireworkShow const *> const FireworkShowStore = {
|
||||||
|
{ { 0, 1 }, &fireworkShowIronforge },
|
||||||
|
{ { 0, 33 }, &fireworkShowBootyBay },
|
||||||
|
{ { 0, 1497 }, &fireworkShowUndercity },
|
||||||
|
{ { 0, 1519 }, &fireworkShowStormwind },
|
||||||
|
{ { 1, 141 }, &fireworkShowTeldrassil },
|
||||||
|
{ { 1, 1637 }, &fireworkShowOrgrimmar },
|
||||||
|
{ { 1, 1638 }, &fireworkShowThunderBluff },
|
||||||
|
{ { 530, 3430 }, &fireworkShowSilvermoon },
|
||||||
|
{ { 530, 3557 }, &fireworkShowExodar },
|
||||||
|
{ { 530, 3703 }, &fireworkShowShattrath },
|
||||||
|
};
|
||||||
|
|
||||||
|
struct go_firework_show : public GameObjectAI
|
||||||
|
{
|
||||||
|
go_firework_show(GameObject* go) : GameObjectAI(go)
|
||||||
|
{
|
||||||
|
_curIdx = 0;
|
||||||
|
_showRunning = false;
|
||||||
|
_show = nullptr;
|
||||||
|
|
||||||
|
InitShow();
|
||||||
|
}
|
||||||
|
|
||||||
|
void InitShow()
|
||||||
|
{
|
||||||
|
_show = nullptr;
|
||||||
|
|
||||||
|
auto itr = FireworkShowStore.find(std::make_pair(me->GetMapId(), me->GetZoneId()));
|
||||||
|
if (itr != FireworkShowStore.end() && itr->second)
|
||||||
|
_show = itr->second;
|
||||||
|
|
||||||
|
StopShow();
|
||||||
|
|
||||||
|
_scheduler.Schedule(Milliseconds(4200), [this](TaskContext context)
|
||||||
|
{
|
||||||
|
// check for show start
|
||||||
|
if (!_showRunning)
|
||||||
|
{
|
||||||
|
tzset(); // set timezone for localtime_r() -> fix issues due to daylight time
|
||||||
|
tm local_tm = Acore::Time::TimeBreakdown();
|
||||||
|
|
||||||
|
// each show runs approx. 12 minutes
|
||||||
|
// and starts at the full hour
|
||||||
|
if ((local_tm.tm_min >= 0) && (local_tm.tm_min < 12))
|
||||||
|
{
|
||||||
|
StartShow(local_tm.tm_min);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
context.Repeat();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// provide start offset to handle a "late start"
|
||||||
|
// e.g. if the gameobject is spawned later then the desired start time
|
||||||
|
void StartShow(int minutesOffset)
|
||||||
|
{
|
||||||
|
if (!_show || !_show->schedule.entries || !_show->schedule.size || !_show->spawns.entries || !_show->spawns.size)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_curIdx = 0;
|
||||||
|
_showRunning = true;
|
||||||
|
me->setActive(true);
|
||||||
|
|
||||||
|
// fast-forward show if we've got a late start
|
||||||
|
if (minutesOffset > 0)
|
||||||
|
{
|
||||||
|
int ts = 0;
|
||||||
|
do {
|
||||||
|
ts = _show->schedule.entries[_curIdx].timestamp;
|
||||||
|
} while ((ts <= (minutesOffset * MINUTE * IN_MILLISECONDS)) && (++_curIdx < _show->schedule.size));
|
||||||
|
}
|
||||||
|
|
||||||
|
_scheduler.Schedule(0s, [this](TaskContext context)
|
||||||
|
{
|
||||||
|
int32 dt = 0;
|
||||||
|
do {
|
||||||
|
dt = SpawnNextFirework();
|
||||||
|
} while (dt == 0);
|
||||||
|
|
||||||
|
if (0 < dt)
|
||||||
|
context.Repeat(Milliseconds(dt));
|
||||||
|
else
|
||||||
|
StopShow();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void StopShow()
|
||||||
|
{
|
||||||
|
if (_showRunning)
|
||||||
|
{
|
||||||
|
// Trigger SAI to spawn 'Toasting Goblets' on show end
|
||||||
|
std::list<GameObject*> _goList;
|
||||||
|
me->GetGameObjectListWithEntryInGrid(_goList, GO_TOASTING_GOBLET, 1420.0f);
|
||||||
|
|
||||||
|
for (std::list<GameObject*>::const_iterator itr = _goList.begin(); itr != _goList.end(); ++itr)
|
||||||
|
{
|
||||||
|
if (GameObjectAI* ai = (*itr)->AI())
|
||||||
|
ai->SetData(0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Trigger SAI to make Revelers cheer on show end
|
||||||
|
for (uint32 i = 0; i < COUNT_REVELER_ID; i++)
|
||||||
|
{
|
||||||
|
std::list<Creature*> _crList;
|
||||||
|
me->GetCreatureListWithEntryInGrid(_crList, _show->revelerId[i], 1420.0f);
|
||||||
|
|
||||||
|
for (std::list<Creature*>::const_iterator itr = _crList.begin(); itr != _crList.end(); ++itr)
|
||||||
|
{
|
||||||
|
if (CreatureAI* ai = (*itr)->AI())
|
||||||
|
ai->SetData(0, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_showRunning = false;
|
||||||
|
me->setActive(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 SpawnNextFirework()
|
||||||
|
{
|
||||||
|
if (!_showRunning)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (!_show || !_show->schedule.entries || !_show->spawns.entries)
|
||||||
|
return -2;
|
||||||
|
|
||||||
|
if (_curIdx >= _show->schedule.size)
|
||||||
|
return -3;
|
||||||
|
|
||||||
|
uint32 posIdx = _show->schedule.entries[_curIdx].spawnIndex;
|
||||||
|
if (posIdx < _show->spawns.size)
|
||||||
|
{
|
||||||
|
me->SummonGameObject(_show->schedule.entries[_curIdx].gameobjectId,
|
||||||
|
_show->spawns.entries[posIdx].x,
|
||||||
|
_show->spawns.entries[posIdx].y,
|
||||||
|
_show->spawns.entries[posIdx].z,
|
||||||
|
_show->spawns.entries[posIdx].o,
|
||||||
|
_show->spawns.entries[posIdx].rot0,
|
||||||
|
_show->spawns.entries[posIdx].rot1,
|
||||||
|
_show->spawns.entries[posIdx].rot2,
|
||||||
|
_show->spawns.entries[posIdx].rot3,
|
||||||
|
0);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 ts = _show->schedule.entries[_curIdx].timestamp;
|
||||||
|
|
||||||
|
if (++_curIdx >= _show->schedule.size)
|
||||||
|
return -4;
|
||||||
|
|
||||||
|
if (_show->schedule.entries[_curIdx].timestamp < ts)
|
||||||
|
return -5;
|
||||||
|
|
||||||
|
return (_show->schedule.entries[_curIdx].timestamp - ts);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(uint32 diff) override
|
||||||
|
{
|
||||||
|
_scheduler.Update(diff);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
TaskScheduler _scheduler;
|
||||||
|
uint32_t _curIdx;
|
||||||
|
bool _showRunning;
|
||||||
|
FireworkShow const * _show;
|
||||||
|
};
|
||||||
|
|
||||||
|
void AddSC_event_firework_show_scripts()
|
||||||
|
{
|
||||||
|
// Gameobjects
|
||||||
|
RegisterGameObjectAI(go_firework_show);
|
||||||
|
}
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU Affero General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DEF_FIREWORK_SHOW_H
|
||||||
|
#define DEF_FIREWORK_SHOW_H
|
||||||
|
|
||||||
|
#include "Define.h"
|
||||||
|
|
||||||
|
enum eFireworks
|
||||||
|
{
|
||||||
|
GO_FIREWORK_SHOW_TYPE_1_RED = 180703,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_2_RED = 180704,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_1_RED_BIG = 180707,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_2_RED_BIG = 180708,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_1_BLUE = 180720,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_2_BLUE = 180721,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG = 180722,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_2_BLUE_BIG = 180723,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_1_GREEN = 180724,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_2_GREEN_BIG = 180725,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG = 180726,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_2_GREEN = 180727,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_1_WHITE = 180728,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG = 180729,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_2_WHITE = 180730,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG = 180731,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG = 180733,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_1_YELLOW = 180736,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG = 180737,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_2_YELLOW = 180738,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_2_YELLOW_BIG = 180739,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_2_PURPLE = 180740,
|
||||||
|
GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG = 180741,
|
||||||
|
|
||||||
|
GO_TOASTING_GOBLET = 180754,
|
||||||
|
|
||||||
|
NPC_STORMWIND_REVELER = 15694,
|
||||||
|
NPC_THUNDER_BLUFF_REVELER = 15719,
|
||||||
|
NPC_BOOTY_BAY_REVELER = 15723,
|
||||||
|
NPC_DARNASSUS_REVELER = 15905,
|
||||||
|
NPC_IRONFORGE_REVELER = 15906,
|
||||||
|
NPC_UNDERCITY_REVELER = 15907,
|
||||||
|
NPC_ORGRIMMAR_REVELER = 15908,
|
||||||
|
NPC_SCRYER_REVELER = 23023,
|
||||||
|
NPC_ALDOR_REVELER = 23024,
|
||||||
|
NPC_DRAENEI_REVELER = 23039,
|
||||||
|
NPC_BLOOD_ELF_REVELER = 23045,
|
||||||
|
|
||||||
|
COUNT_REVELER_ID = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct FireworkShowGameobject
|
||||||
|
{
|
||||||
|
float x;
|
||||||
|
float y;
|
||||||
|
float z;
|
||||||
|
float o;
|
||||||
|
float rot0;
|
||||||
|
float rot1;
|
||||||
|
float rot2;
|
||||||
|
float rot3;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct FireworkShowScheduleEntry
|
||||||
|
{
|
||||||
|
uint32 timestamp;
|
||||||
|
uint32 gameobjectId;
|
||||||
|
uint32 spawnIndex;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct FireworkShow
|
||||||
|
{
|
||||||
|
struct{
|
||||||
|
FireworkShowScheduleEntry const * entries;
|
||||||
|
uint32 const size;
|
||||||
|
} schedule;
|
||||||
|
struct {
|
||||||
|
FireworkShowGameobject const * entries;
|
||||||
|
uint32 const size;
|
||||||
|
} spawns;
|
||||||
|
uint32 const revelerId[COUNT_REVELER_ID];
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,537 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU Affero General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DEF_FIREWORK_SHOW_BOOTYBAY_H
|
||||||
|
#define DEF_FIREWORK_SHOW_BOOTYBAY_H
|
||||||
|
|
||||||
|
#include "firework_show.h"
|
||||||
|
|
||||||
|
// VerifiedBuild 50250 - Midsummer Fireworks Spectacular event
|
||||||
|
FireworkShowGameobject const FireworkShowGameobjectBootyBay[] =
|
||||||
|
{
|
||||||
|
{ -14360.708f, 493.60358f, 32.061573f, 5.8468537f, 0.0f, 0.0f, -0.21643925f, 0.97629607f }, /* 0 */
|
||||||
|
{ -14382.423f, 516.2576f, 37.59617f, 5.8468537f, 0.0f, 0.0f, -0.21643925f, 0.97629607f }, /* 1 */
|
||||||
|
{ -14351.329f, 506.18985f, 28.696842f, 5.8468537f, 0.0f, 0.0f, -0.21643925f, 0.97629607f }, /* 2 */
|
||||||
|
{ -14356.573f, 494.1887f, 39.58786f, 3.6826503f, 0.0f, 0.0f, -0.9636297f, 0.267241f }, /* 3 */
|
||||||
|
{ -14376.763f, 507.98416f, 59.565323f, 0.9773831f, 0.0f, 0.0f, 0.46947098f, 0.8829479f }, /* 4 */
|
||||||
|
{ -14358.028f, 515.05804f, 34.266403f, 3.6826503f, 0.0f, 0.0f, -0.9636297f, 0.267241f }, /* 5 */
|
||||||
|
{ -14358.974f, 502.0223f, 43.826313f, 2.1991146f, 0.0f, 0.0f, 0.89100647f, 0.45399064f }, /* 6 */
|
||||||
|
{ -14363.282f, 506.73438f, 41.271564f, 5.8992143f, 0.0f, 0.0f, -0.1908083f, 0.9816273f }, /* 7 */
|
||||||
|
{ -14370.767f, 487.4859f, 45.464447f, 4.886924f, 0.0f, 0.0f, -0.642787f, 0.766045f }, /* 8 */
|
||||||
|
{ -14357.489f, 490.84445f, 39.473286f, 0.9773831f, 0.0f, 0.0f, 0.46947098f, 0.8829479f }, /* 9 */
|
||||||
|
{ -14359.632f, 522.25714f, 31.286598f, 2.1991146f, 0.0f, 0.0f, 0.89100647f, 0.45399064f }, /* 10 */
|
||||||
|
{ -14376.658f, 516.6852f, 38.5385f, 2.1991146f, 0.0f, 0.0f, 0.89100647f, 0.45399064f }, /* 11 */
|
||||||
|
{ -14374.429f, 496.0701f, 31.312653f, 4.7647495f, 0.0f, 0.0f, -0.6883545f, 0.72537446f }, /* 12 */
|
||||||
|
{ -14374.914f, 491.50797f, 40.34925f, 4.886924f, 0.0f, 0.0f, -0.642787f, 0.766045f }, /* 13 */
|
||||||
|
{ -14355.49f, 518.56555f, 35.36923f, 4.7647495f, 0.0f, 0.0f, -0.6883545f, 0.72537446f }, /* 14 */
|
||||||
|
{ -14354.371f, 491.87906f, 39.833744f, 3.6826503f, 0.0f, 0.0f, -0.9636297f, 0.267241f }, /* 15 */
|
||||||
|
{ -14389.842f, 503.46115f, 37.370884f, 5.8992143f, 0.0f, 0.0f, -0.1908083f, 0.9816273f }, /* 16 */
|
||||||
|
{ -14353.637f, 485.4063f, 34.117043f, 4.7647495f, 0.0f, 0.0f, -0.6883545f, 0.72537446f }, /* 17 */
|
||||||
|
{ -14376.54f, 487.52817f, 44.470444f, 5.8992143f, 0.0f, 0.0f, -0.1908083f, 0.9816273f }, /* 18 */
|
||||||
|
{ -14379.146f, 507.23697f, 43.95641f, 6.0912004f, 0.0f, 0.0f, -0.09584522f, 0.99539626f }, /* 19 */
|
||||||
|
{ -14378.098f, 473.56082f, 40.167862f, 0.9773831f, 0.0f, 0.0f, 0.46947098f, 0.8829479f }, /* 20 */
|
||||||
|
{ -14380.022f, 506.33127f, 59.75512f, 6.0912004f, 0.0f, 0.0f, -0.09584522f, 0.99539626f }, /* 21 */
|
||||||
|
{ -14353.664f, 485.8341f, 36.866394f, 4.886924f, 0.0f, 0.0f, -0.642787f, 0.766045f }, /* 22 */
|
||||||
|
{ -14389.552f, 485.74365f, 36.326534f, 6.0912004f, 0.0f, 0.0f, -0.09584522f, 0.99539626f }, /* 23 */
|
||||||
|
{ -14371.19f, 505.8404f, 28.751783f, 6.0912004f, 0.0f, 0.0f, -0.09584522f, 0.99539626f }, /* 24 */
|
||||||
|
{ -14351.266f, 494.81473f, 26.889748f, 3.47321f, 0.0f, 0.0f, -0.9862852f, 0.1650499f }, /* 25 */
|
||||||
|
{ -14391.585f, 505.7818f, 29.009865f, 3.7001047f, 0.0f, 0.0f, -0.9612608f, 0.2756405f }, /* 26 */
|
||||||
|
{ -14360.903f, 476.7781f, 27.833723f, 2.5481794f, 0.0f, 0.0f, 0.95630455f, 0.29237235f }, /* 27 */
|
||||||
|
{ -14359.229f, 494.81744f, 41.420765f, 0.13962449f, 0.0f, 0.0f, 0.069755554f, 0.99756414f }, /* 28 */
|
||||||
|
{ -14373.079f, 524.4762f, 26.045519f, 4.66003f, 0.0f, 0.0f, -0.7253742f, 0.68835473f }, /* 29 */
|
||||||
|
{ -14373.886f, 491.5064f, 47.466377f, 3.47321f, 0.0f, 0.0f, -0.9862852f, 0.1650499f }, /* 30 */
|
||||||
|
{ -14372.838f, 508.7278f, 34.971527f, 2.5481794f, 0.0f, 0.0f, 0.95630455f, 0.29237235f }, /* 31 */
|
||||||
|
{ -14362.134f, 526.2929f, 24.909328f, 0.13962449f, 0.0f, 0.0f, 0.069755554f, 0.99756414f }, /* 32 */
|
||||||
|
{ -14401.415f, 506.0231f, 33.67751f, 4.729844f, 0.0f, 0.0f, -0.70090866f, 0.71325105f }, /* 33 */
|
||||||
|
{ -14349.437f, 528.6766f, 28.356276f, 6.073746f, 0.0f, 0.0f, -0.10452843f, 0.9945219f }, /* 34 */
|
||||||
|
{ -14351.302f, 489.6769f, 37.13969f, 4.66003f, 0.0f, 0.0f, -0.7253742f, 0.68835473f }, /* 35 */
|
||||||
|
{ -14382.14f, 470.336f, 30.188276f, 3.0543265f, 0.0f, 0.0f, 0.99904823f, 0.04361926f }, /* 36 */
|
||||||
|
{ -14392.547f, 503.00327f, 28.878883f, 4.66003f, 0.0f, 0.0f, -0.7253742f, 0.68835473f }, /* 37 */
|
||||||
|
{ -14377.155f, 486.9521f, 42.376797f, 5.550147f, 0.0f, 0.0f, -0.35836792f, 0.93358046f }, /* 38 */
|
||||||
|
{ -14358.694f, 516.5423f, 35.368343f, 2.1118479f, 0.0f, 0.0f, 0.8703556f, 0.4924237f }, /* 39 */
|
||||||
|
};
|
||||||
|
|
||||||
|
// VerifiedBuild 50250 - Midsummer Fireworks Spectacular event
|
||||||
|
FireworkShowScheduleEntry const fireworkShowScheduleBootyBay[] =
|
||||||
|
{
|
||||||
|
{ 0, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 0 },
|
||||||
|
{ 0, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 1 },
|
||||||
|
{ 3373, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 2 },
|
||||||
|
{ 3373, GO_FIREWORK_SHOW_TYPE_2_YELLOW_BIG, 3 },
|
||||||
|
{ 4811, GO_FIREWORK_SHOW_TYPE_2_BLUE, 4 },
|
||||||
|
{ 4811, GO_FIREWORK_SHOW_TYPE_1_RED, 5 },
|
||||||
|
{ 6671, GO_FIREWORK_SHOW_TYPE_1_BLUE, 6 },
|
||||||
|
{ 8088, GO_FIREWORK_SHOW_TYPE_2_GREEN, 7 },
|
||||||
|
{ 8088, GO_FIREWORK_SHOW_TYPE_2_GREEN_BIG, 8 },
|
||||||
|
{ 9699, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 9 },
|
||||||
|
{ 12937, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 10 },
|
||||||
|
{ 12937, GO_FIREWORK_SHOW_TYPE_1_RED_BIG, 11 },
|
||||||
|
{ 18189, GO_FIREWORK_SHOW_TYPE_2_GREEN_BIG, 12 },
|
||||||
|
{ 19399, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 13 },
|
||||||
|
{ 19399, GO_FIREWORK_SHOW_TYPE_1_GREEN, 0 },
|
||||||
|
{ 19399, GO_FIREWORK_SHOW_TYPE_2_RED, 14 },
|
||||||
|
{ 19399, GO_FIREWORK_SHOW_TYPE_2_BLUE_BIG, 15 },
|
||||||
|
{ 22854, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 1 },
|
||||||
|
{ 22854, GO_FIREWORK_SHOW_TYPE_2_YELLOW_BIG, 16 },
|
||||||
|
{ 23814, GO_FIREWORK_SHOW_TYPE_2_GREEN_BIG, 8 },
|
||||||
|
{ 24400, GO_FIREWORK_SHOW_TYPE_2_RED, 5 },
|
||||||
|
{ 30902, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 17 },
|
||||||
|
{ 35539, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 18 },
|
||||||
|
{ 36779, GO_FIREWORK_SHOW_TYPE_1_BLUE, 4 },
|
||||||
|
{ 36779, GO_FIREWORK_SHOW_TYPE_2_GREEN_BIG, 19 },
|
||||||
|
{ 39170, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 16 },
|
||||||
|
{ 43244, GO_FIREWORK_SHOW_TYPE_1_WHITE, 13 },
|
||||||
|
{ 43244, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 20 },
|
||||||
|
{ 44869, GO_FIREWORK_SHOW_TYPE_1_GREEN, 0 },
|
||||||
|
{ 44869, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 6 },
|
||||||
|
{ 48378, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 14 },
|
||||||
|
{ 54582, GO_FIREWORK_SHOW_TYPE_2_BLUE, 7 },
|
||||||
|
{ 54582, GO_FIREWORK_SHOW_TYPE_2_WHITE, 10 },
|
||||||
|
{ 56200, GO_FIREWORK_SHOW_TYPE_1_WHITE, 21 },
|
||||||
|
{ 56200, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 1 },
|
||||||
|
{ 57792, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 9 },
|
||||||
|
{ 59558, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 11 },
|
||||||
|
{ 59558, GO_FIREWORK_SHOW_TYPE_2_BLUE, 12 },
|
||||||
|
{ 62634, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 5 },
|
||||||
|
{ 64599, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 14 },
|
||||||
|
{ 72352, GO_FIREWORK_SHOW_TYPE_2_GREEN, 0 },
|
||||||
|
{ 75554, GO_FIREWORK_SHOW_TYPE_2_WHITE, 2 },
|
||||||
|
{ 77215, GO_FIREWORK_SHOW_TYPE_1_RED, 14 },
|
||||||
|
{ 77544, GO_FIREWORK_SHOW_TYPE_2_RED, 22 },
|
||||||
|
{ 79500, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 5 },
|
||||||
|
{ 80599, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 1 },
|
||||||
|
{ 82023, GO_FIREWORK_SHOW_TYPE_1_GREEN, 7 },
|
||||||
|
{ 84074, GO_FIREWORK_SHOW_TYPE_1_GREEN, 4 },
|
||||||
|
{ 84074, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 8 },
|
||||||
|
{ 84074, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 10 },
|
||||||
|
{ 88626, GO_FIREWORK_SHOW_TYPE_1_GREEN, 15 },
|
||||||
|
{ 88626, GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG, 17 },
|
||||||
|
{ 88986, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 13 },
|
||||||
|
{ 90134, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 9 },
|
||||||
|
{ 91901, GO_FIREWORK_SHOW_TYPE_1_WHITE, 20 },
|
||||||
|
{ 93406, GO_FIREWORK_SHOW_TYPE_1_RED, 23 },
|
||||||
|
{ 93406, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 12 },
|
||||||
|
{ 98400, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 2 },
|
||||||
|
{ 103301, GO_FIREWORK_SHOW_TYPE_1_RED, 22 },
|
||||||
|
{ 103301, GO_FIREWORK_SHOW_TYPE_1_GREEN, 4 },
|
||||||
|
{ 104878, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 21 },
|
||||||
|
{ 104878, GO_FIREWORK_SHOW_TYPE_1_RED_BIG, 5 },
|
||||||
|
{ 106741, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 20 },
|
||||||
|
{ 107980, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 11 },
|
||||||
|
{ 109583, GO_FIREWORK_SHOW_TYPE_2_RED, 23 },
|
||||||
|
{ 112931, GO_FIREWORK_SHOW_TYPE_2_YELLOW_BIG, 13 },
|
||||||
|
{ 114485, GO_FIREWORK_SHOW_TYPE_2_GREEN, 7 },
|
||||||
|
{ 114485, GO_FIREWORK_SHOW_TYPE_2_WHITE, 17 },
|
||||||
|
{ 114485, GO_FIREWORK_SHOW_TYPE_2_WHITE, 10 },
|
||||||
|
{ 119512, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 0 },
|
||||||
|
{ 119512, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 22 },
|
||||||
|
{ 120078, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 3 },
|
||||||
|
{ 122918, GO_FIREWORK_SHOW_TYPE_2_RED, 5 },
|
||||||
|
{ 124409, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 1 },
|
||||||
|
{ 124796, GO_FIREWORK_SHOW_TYPE_1_WHITE, 2 },
|
||||||
|
{ 126246, GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG, 13 },
|
||||||
|
{ 127461, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 8 },
|
||||||
|
{ 127461, GO_FIREWORK_SHOW_TYPE_1_GREEN, 4 },
|
||||||
|
{ 133204, GO_FIREWORK_SHOW_TYPE_1_RED, 14 },
|
||||||
|
{ 133790, GO_FIREWORK_SHOW_TYPE_2_GREEN, 6 },
|
||||||
|
{ 134298, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 16 },
|
||||||
|
{ 137335, GO_FIREWORK_SHOW_TYPE_1_BLUE, 15 },
|
||||||
|
{ 137481, GO_FIREWORK_SHOW_TYPE_1_RED, 23 },
|
||||||
|
{ 140362, GO_FIREWORK_SHOW_TYPE_2_BLUE, 19 },
|
||||||
|
{ 142113, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 12 },
|
||||||
|
{ 142355, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 22 },
|
||||||
|
{ 144060, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 5 },
|
||||||
|
{ 144060, GO_FIREWORK_SHOW_TYPE_1_WHITE, 2 },
|
||||||
|
{ 145573, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 9 },
|
||||||
|
{ 145573, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 0 },
|
||||||
|
{ 147185, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 3 },
|
||||||
|
{ 148806, GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG, 17 },
|
||||||
|
{ 150390, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 11 },
|
||||||
|
{ 151991, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 21 },
|
||||||
|
{ 155240, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 1 },
|
||||||
|
{ 156857, GO_FIREWORK_SHOW_TYPE_2_GREEN, 15 },
|
||||||
|
{ 158563, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 16 },
|
||||||
|
{ 161477, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 0 },
|
||||||
|
{ 161841, GO_FIREWORK_SHOW_TYPE_2_BLUE, 8 },
|
||||||
|
{ 163297, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 14 },
|
||||||
|
{ 163297, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 9 },
|
||||||
|
{ 163618, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 13 },
|
||||||
|
{ 164965, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 5 },
|
||||||
|
{ 166948, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 18 },
|
||||||
|
{ 170039, GO_FIREWORK_SHOW_TYPE_2_YELLOW_BIG, 2 },
|
||||||
|
{ 171084, GO_FIREWORK_SHOW_TYPE_2_BLUE_BIG, 6 },
|
||||||
|
{ 171577, GO_FIREWORK_SHOW_TYPE_2_RED, 22 },
|
||||||
|
{ 171577, GO_FIREWORK_SHOW_TYPE_2_YELLOW_BIG, 20 },
|
||||||
|
{ 174281, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 23 },
|
||||||
|
{ 174683, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 3 },
|
||||||
|
{ 177931, GO_FIREWORK_SHOW_TYPE_1_BLUE, 12 },
|
||||||
|
{ 178063, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 1 },
|
||||||
|
{ 178063, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 21 },
|
||||||
|
{ 178063, GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG, 16 },
|
||||||
|
{ 181375, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 11 },
|
||||||
|
{ 181375, GO_FIREWORK_SHOW_TYPE_2_BLUE, 8 },
|
||||||
|
{ 183163, GO_FIREWORK_SHOW_TYPE_2_YELLOW_BIG, 10 },
|
||||||
|
{ 184183, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 20 },
|
||||||
|
{ 184183, GO_FIREWORK_SHOW_TYPE_2_BLUE, 7 },
|
||||||
|
{ 185594, GO_FIREWORK_SHOW_TYPE_1_BLUE, 4 },
|
||||||
|
{ 191057, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 14 },
|
||||||
|
{ 192283, GO_FIREWORK_SHOW_TYPE_2_YELLOW_BIG, 13 },
|
||||||
|
{ 195742, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 17 },
|
||||||
|
{ 197319, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 5 },
|
||||||
|
{ 197319, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 0 },
|
||||||
|
{ 198932, GO_FIREWORK_SHOW_TYPE_2_GREEN, 19 },
|
||||||
|
{ 200843, GO_FIREWORK_SHOW_TYPE_1_RED_BIG, 18 },
|
||||||
|
{ 202366, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 3 },
|
||||||
|
{ 203966, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 21 },
|
||||||
|
{ 203966, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 22 },
|
||||||
|
{ 205480, GO_FIREWORK_SHOW_TYPE_1_WHITE, 20 },
|
||||||
|
{ 205480, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 8 },
|
||||||
|
{ 210262, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 10 },
|
||||||
|
{ 213488, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 3 },
|
||||||
|
{ 213488, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 11 },
|
||||||
|
{ 216732, GO_FIREWORK_SHOW_TYPE_2_GREEN, 7 },
|
||||||
|
{ 218348, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 1 },
|
||||||
|
{ 218348, GO_FIREWORK_SHOW_TYPE_2_RED, 23 },
|
||||||
|
{ 218348, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 8 },
|
||||||
|
{ 219949, GO_FIREWORK_SHOW_TYPE_2_RED, 18 },
|
||||||
|
{ 221574, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 19 },
|
||||||
|
{ 224412, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 0 },
|
||||||
|
{ 224806, GO_FIREWORK_SHOW_TYPE_2_GREEN, 15 },
|
||||||
|
{ 224806, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 5 },
|
||||||
|
{ 224806, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 4 },
|
||||||
|
{ 224806, GO_FIREWORK_SHOW_TYPE_1_WHITE, 16 },
|
||||||
|
{ 227653, GO_FIREWORK_SHOW_TYPE_2_GREEN_BIG, 6 },
|
||||||
|
{ 228197, GO_FIREWORK_SHOW_TYPE_1_WHITE, 2 },
|
||||||
|
{ 231054, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 1 },
|
||||||
|
{ 231054, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 12 },
|
||||||
|
{ 236554, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 21 },
|
||||||
|
{ 238978, GO_FIREWORK_SHOW_TYPE_2_WHITE, 10 },
|
||||||
|
{ 240997, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 17 },
|
||||||
|
{ 240997, GO_FIREWORK_SHOW_TYPE_2_RED, 22 },
|
||||||
|
{ 241228, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 16 },
|
||||||
|
{ 242637, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 23 },
|
||||||
|
{ 243860, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 4 },
|
||||||
|
{ 243860, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 14 },
|
||||||
|
{ 243860, GO_FIREWORK_SHOW_TYPE_2_GREEN_BIG, 7 },
|
||||||
|
{ 245491, GO_FIREWORK_SHOW_TYPE_2_GREEN, 15 },
|
||||||
|
{ 248733, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 3 },
|
||||||
|
{ 249123, GO_FIREWORK_SHOW_TYPE_1_BLUE, 19 },
|
||||||
|
{ 249123, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 18 },
|
||||||
|
{ 252159, GO_FIREWORK_SHOW_TYPE_1_WHITE, 2 },
|
||||||
|
{ 252159, GO_FIREWORK_SHOW_TYPE_2_BLUE, 0 },
|
||||||
|
{ 258449, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 20 },
|
||||||
|
{ 261694, GO_FIREWORK_SHOW_TYPE_1_GREEN, 12 },
|
||||||
|
{ 264945, GO_FIREWORK_SHOW_TYPE_1_BLUE, 6 },
|
||||||
|
{ 266555, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 9 },
|
||||||
|
{ 268343, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 11 },
|
||||||
|
{ 271638, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 14 },
|
||||||
|
{ 271638, GO_FIREWORK_SHOW_TYPE_1_BLUE, 15 },
|
||||||
|
{ 276618, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 1 },
|
||||||
|
{ 276618, GO_FIREWORK_SHOW_TYPE_2_YELLOW_BIG, 13 },
|
||||||
|
{ 277914, GO_FIREWORK_SHOW_TYPE_2_GREEN, 4 },
|
||||||
|
{ 281152, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 5 },
|
||||||
|
{ 284622, GO_FIREWORK_SHOW_TYPE_2_BLUE_BIG, 6 },
|
||||||
|
{ 286427, GO_FIREWORK_SHOW_TYPE_2_WHITE, 16 },
|
||||||
|
{ 286427, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 12 },
|
||||||
|
{ 286427, GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG, 21 },
|
||||||
|
{ 287804, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 2 },
|
||||||
|
{ 289649, GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG, 10 },
|
||||||
|
{ 292520, GO_FIREWORK_SHOW_TYPE_2_GREEN_BIG, 19 },
|
||||||
|
{ 292520, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 17 },
|
||||||
|
{ 292520, GO_FIREWORK_SHOW_TYPE_1_RED_BIG, 22 },
|
||||||
|
{ 294260, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 13 },
|
||||||
|
{ 297365, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 15 },
|
||||||
|
{ 298961, GO_FIREWORK_SHOW_TYPE_1_GREEN, 0 },
|
||||||
|
{ 300613, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 4 },
|
||||||
|
{ 300613, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 11 },
|
||||||
|
{ 302640, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 9 },
|
||||||
|
{ 307076, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 6 },
|
||||||
|
{ 307076, GO_FIREWORK_SHOW_TYPE_1_GREEN, 19 },
|
||||||
|
{ 308699, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 20 },
|
||||||
|
{ 310329, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 5 },
|
||||||
|
{ 312068, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 18 },
|
||||||
|
{ 318539, GO_FIREWORK_SHOW_TYPE_2_RED, 23 },
|
||||||
|
{ 321664, GO_FIREWORK_SHOW_TYPE_2_BLUE, 8 },
|
||||||
|
{ 323439, GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG, 3 },
|
||||||
|
{ 323439, GO_FIREWORK_SHOW_TYPE_2_BLUE_BIG, 0 },
|
||||||
|
{ 324888, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 6 },
|
||||||
|
{ 324888, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 7 },
|
||||||
|
{ 326864, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 11 },
|
||||||
|
{ 326864, GO_FIREWORK_SHOW_TYPE_2_WHITE, 21 },
|
||||||
|
{ 326864, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 2 },
|
||||||
|
{ 328133, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 1 },
|
||||||
|
{ 330143, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 16 },
|
||||||
|
{ 330143, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 10 },
|
||||||
|
{ 330143, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 13 },
|
||||||
|
{ 333012, GO_FIREWORK_SHOW_TYPE_2_GREEN_BIG, 12 },
|
||||||
|
{ 338445, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 21 },
|
||||||
|
{ 339491, GO_FIREWORK_SHOW_TYPE_2_BLUE, 15 },
|
||||||
|
{ 339491, GO_FIREWORK_SHOW_TYPE_2_RED, 22 },
|
||||||
|
{ 343023, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 14 },
|
||||||
|
{ 343023, GO_FIREWORK_SHOW_TYPE_2_WHITE, 20 },
|
||||||
|
{ 344952, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 8 },
|
||||||
|
{ 346258, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 4 },
|
||||||
|
{ 346379, GO_FIREWORK_SHOW_TYPE_2_BLUE, 19 },
|
||||||
|
{ 348137, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 17 },
|
||||||
|
{ 349225, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 6 },
|
||||||
|
{ 349225, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 18 },
|
||||||
|
{ 352459, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 13 },
|
||||||
|
{ 354263, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 5 },
|
||||||
|
{ 357492, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 9 },
|
||||||
|
{ 357706, GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG, 16 },
|
||||||
|
{ 364145, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 11 },
|
||||||
|
{ 364246, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 10 },
|
||||||
|
{ 365398, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 3 },
|
||||||
|
{ 368650, GO_FIREWORK_SHOW_TYPE_1_WHITE, 2 },
|
||||||
|
{ 368650, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 20 },
|
||||||
|
{ 368650, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 22 },
|
||||||
|
{ 370406, GO_FIREWORK_SHOW_TYPE_1_RED, 18 },
|
||||||
|
{ 375230, GO_FIREWORK_SHOW_TYPE_2_GREEN, 19 },
|
||||||
|
{ 378329, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 7 },
|
||||||
|
{ 378728, GO_FIREWORK_SHOW_TYPE_2_YELLOW_BIG, 21 },
|
||||||
|
{ 379950, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 11 },
|
||||||
|
{ 382105, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 14 },
|
||||||
|
{ 383602, GO_FIREWORK_SHOW_TYPE_1_GREEN, 12 },
|
||||||
|
{ 384820, GO_FIREWORK_SHOW_TYPE_1_RED, 23 },
|
||||||
|
{ 386448, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 9 },
|
||||||
|
{ 388461, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 13 },
|
||||||
|
{ 390083, GO_FIREWORK_SHOW_TYPE_2_WHITE, 10 },
|
||||||
|
{ 393115, GO_FIREWORK_SHOW_TYPE_1_GREEN, 8 },
|
||||||
|
{ 393324, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 6 },
|
||||||
|
{ 393324, GO_FIREWORK_SHOW_TYPE_1_RED, 22 },
|
||||||
|
{ 395247, GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG, 17 },
|
||||||
|
{ 399395, GO_FIREWORK_SHOW_TYPE_2_BLUE_BIG, 0 },
|
||||||
|
{ 400128, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 11 },
|
||||||
|
{ 400128, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 19 },
|
||||||
|
{ 401420, GO_FIREWORK_SHOW_TYPE_1_RED, 23 },
|
||||||
|
{ 401420, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 3 },
|
||||||
|
{ 404247, GO_FIREWORK_SHOW_TYPE_1_RED_BIG, 14 },
|
||||||
|
{ 406280, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 7 },
|
||||||
|
{ 406392, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 20 },
|
||||||
|
{ 412613, GO_FIREWORK_SHOW_TYPE_2_YELLOW_BIG, 17 },
|
||||||
|
{ 419353, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 23 },
|
||||||
|
{ 422060, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 15 },
|
||||||
|
{ 422454, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 11 },
|
||||||
|
{ 423676, GO_FIREWORK_SHOW_TYPE_2_RED, 22 },
|
||||||
|
{ 423676, GO_FIREWORK_SHOW_TYPE_1_WHITE, 13 },
|
||||||
|
{ 424078, GO_FIREWORK_SHOW_TYPE_2_BLUE, 7 },
|
||||||
|
{ 425639, GO_FIREWORK_SHOW_TYPE_1_WHITE, 10 },
|
||||||
|
{ 427333, GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG, 16 },
|
||||||
|
{ 428551, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 1 },
|
||||||
|
{ 429072, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 14 },
|
||||||
|
{ 430986, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 19 },
|
||||||
|
{ 432415, GO_FIREWORK_SHOW_TYPE_2_WHITE, 2 },
|
||||||
|
{ 435133, GO_FIREWORK_SHOW_TYPE_2_BLUE, 6 },
|
||||||
|
{ 435645, GO_FIREWORK_SHOW_TYPE_1_BLUE, 8 },
|
||||||
|
{ 436759, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 12 },
|
||||||
|
{ 445135, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 17 },
|
||||||
|
{ 446474, GO_FIREWORK_SHOW_TYPE_1_RED_BIG, 1 },
|
||||||
|
{ 447149, GO_FIREWORK_SHOW_TYPE_1_RED_BIG, 23 },
|
||||||
|
{ 448353, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 11 },
|
||||||
|
{ 448353, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 20 },
|
||||||
|
{ 449568, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 18 },
|
||||||
|
{ 449568, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 9 },
|
||||||
|
{ 456048, GO_FIREWORK_SHOW_TYPE_2_BLUE_BIG, 15 },
|
||||||
|
{ 456048, GO_FIREWORK_SHOW_TYPE_2_GREEN_BIG, 4 },
|
||||||
|
{ 457673, GO_FIREWORK_SHOW_TYPE_1_RED, 14 },
|
||||||
|
{ 458075, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 7 },
|
||||||
|
{ 467378, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 22 },
|
||||||
|
{ 469319, GO_FIREWORK_SHOW_TYPE_1_WHITE, 21 },
|
||||||
|
{ 470607, GO_FIREWORK_SHOW_TYPE_2_GREEN, 4 },
|
||||||
|
{ 472631, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 19 },
|
||||||
|
{ 472631, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 16 },
|
||||||
|
{ 474380, GO_FIREWORK_SHOW_TYPE_1_WHITE, 2 },
|
||||||
|
{ 475596, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 18 },
|
||||||
|
{ 476046, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 1 },
|
||||||
|
{ 480526, GO_FIREWORK_SHOW_TYPE_2_GREEN_BIG, 15 },
|
||||||
|
{ 480909, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 11 },
|
||||||
|
{ 483964, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 17 },
|
||||||
|
{ 485533, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 13 },
|
||||||
|
{ 488416, GO_FIREWORK_SHOW_TYPE_1_GREEN, 8 },
|
||||||
|
{ 488830, GO_FIREWORK_SHOW_TYPE_2_WHITE, 2 },
|
||||||
|
{ 490197, GO_FIREWORK_SHOW_TYPE_2_GREEN, 12 },
|
||||||
|
{ 493271, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 5 },
|
||||||
|
{ 495286, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 21 },
|
||||||
|
{ 496508, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 18 },
|
||||||
|
{ 498389, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 0 },
|
||||||
|
{ 500136, GO_FIREWORK_SHOW_TYPE_2_BLUE_BIG, 7 },
|
||||||
|
{ 504546, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 1 },
|
||||||
|
{ 506489, GO_FIREWORK_SHOW_TYPE_1_RED, 22 },
|
||||||
|
{ 507870, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 20 },
|
||||||
|
{ 508280, GO_FIREWORK_SHOW_TYPE_2_WHITE, 10 },
|
||||||
|
{ 509626, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 4 },
|
||||||
|
{ 513073, GO_FIREWORK_SHOW_TYPE_2_WHITE_BIG, 16 },
|
||||||
|
{ 519506, GO_FIREWORK_SHOW_TYPE_1_RED_BIG, 5 },
|
||||||
|
{ 519607, GO_FIREWORK_SHOW_TYPE_2_GREEN_BIG, 19 },
|
||||||
|
{ 520816, GO_FIREWORK_SHOW_TYPE_2_BLUE, 6 },
|
||||||
|
{ 522444, GO_FIREWORK_SHOW_TYPE_1_RED_BIG, 23 },
|
||||||
|
{ 524056, GO_FIREWORK_SHOW_TYPE_2_BLUE, 7 },
|
||||||
|
{ 524457, GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG, 3 },
|
||||||
|
{ 526082, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 10 },
|
||||||
|
{ 531320, GO_FIREWORK_SHOW_TYPE_2_GREEN, 15 },
|
||||||
|
{ 532256, GO_FIREWORK_SHOW_TYPE_2_GREEN_BIG, 0 },
|
||||||
|
{ 532548, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 2 },
|
||||||
|
{ 534172, GO_FIREWORK_SHOW_TYPE_2_BLUE, 8 },
|
||||||
|
{ 534172, GO_FIREWORK_SHOW_TYPE_1_WHITE, 13 },
|
||||||
|
{ 535387, GO_FIREWORK_SHOW_TYPE_1_RED, 22 },
|
||||||
|
{ 535789, GO_FIREWORK_SHOW_TYPE_2_BLUE_BIG, 4 },
|
||||||
|
{ 538623, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 21 },
|
||||||
|
{ 539026, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 1 },
|
||||||
|
{ 540639, GO_FIREWORK_SHOW_TYPE_2_RED, 23 },
|
||||||
|
{ 545637, GO_FIREWORK_SHOW_TYPE_2_WHITE, 17 },
|
||||||
|
{ 545637, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 13 },
|
||||||
|
{ 546711, GO_FIREWORK_SHOW_TYPE_2_BLUE, 0 },
|
||||||
|
{ 554835, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 18 },
|
||||||
|
{ 556447, GO_FIREWORK_SHOW_TYPE_2_GREEN, 12 },
|
||||||
|
{ 556986, GO_FIREWORK_SHOW_TYPE_1_BLUE, 19 },
|
||||||
|
{ 559700, GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG, 2 },
|
||||||
|
{ 559700, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 9 },
|
||||||
|
{ 559700, GO_FIREWORK_SHOW_TYPE_2_GREEN, 4 },
|
||||||
|
{ 561718, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 11 },
|
||||||
|
{ 561718, GO_FIREWORK_SHOW_TYPE_2_RED, 1 },
|
||||||
|
{ 562914, GO_FIREWORK_SHOW_TYPE_1_BLUE, 7 },
|
||||||
|
{ 563325, GO_FIREWORK_SHOW_TYPE_1_WHITE, 20 },
|
||||||
|
{ 566572, GO_FIREWORK_SHOW_TYPE_1_WHITE, 13 },
|
||||||
|
{ 568021, GO_FIREWORK_SHOW_TYPE_1_RED, 5 },
|
||||||
|
{ 568021, GO_FIREWORK_SHOW_TYPE_1_BLUE, 19 },
|
||||||
|
{ 568365, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 14 },
|
||||||
|
{ 570142, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 6 },
|
||||||
|
{ 571271, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 17 },
|
||||||
|
{ 573051, GO_FIREWORK_SHOW_TYPE_2_BLUE, 12 },
|
||||||
|
{ 574935, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 16 },
|
||||||
|
{ 576217, GO_FIREWORK_SHOW_TYPE_2_WHITE, 10 },
|
||||||
|
{ 576217, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 3 },
|
||||||
|
{ 580884, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 22 },
|
||||||
|
{ 585601, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 21 },
|
||||||
|
{ 588953, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 13 },
|
||||||
|
{ 590871, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 14 },
|
||||||
|
{ 592329, GO_FIREWORK_SHOW_TYPE_2_BLUE, 7 },
|
||||||
|
{ 592329, GO_FIREWORK_SHOW_TYPE_2_WHITE, 2 },
|
||||||
|
{ 595337, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 5 },
|
||||||
|
{ 595842, GO_FIREWORK_SHOW_TYPE_2_BLUE_BIG, 8 },
|
||||||
|
{ 597351, GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG, 10 },
|
||||||
|
{ 600721, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 16 },
|
||||||
|
{ 602198, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 1 },
|
||||||
|
{ 602198, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 22 },
|
||||||
|
{ 602198, GO_FIREWORK_SHOW_TYPE_2_WHITE, 17 },
|
||||||
|
{ 603681, GO_FIREWORK_SHOW_TYPE_1_RED, 9 },
|
||||||
|
{ 604103, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 15 },
|
||||||
|
{ 607059, GO_FIREWORK_SHOW_TYPE_2_BLUE, 4 },
|
||||||
|
{ 608678, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 11 },
|
||||||
|
{ 613545, GO_FIREWORK_SHOW_TYPE_2_WHITE, 20 },
|
||||||
|
{ 613545, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 19 },
|
||||||
|
{ 615572, GO_FIREWORK_SHOW_TYPE_2_WHITE, 13 },
|
||||||
|
{ 616784, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 5 },
|
||||||
|
{ 616784, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 18 },
|
||||||
|
{ 618808, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 22 },
|
||||||
|
{ 620021, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 17 },
|
||||||
|
{ 625058, GO_FIREWORK_SHOW_TYPE_2_YELLOW_BIG, 3 },
|
||||||
|
{ 626785, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 4 },
|
||||||
|
{ 626785, GO_FIREWORK_SHOW_TYPE_1_RED_BIG, 1 },
|
||||||
|
{ 626785, GO_FIREWORK_SHOW_TYPE_2_BLUE, 6 },
|
||||||
|
{ 627731, GO_FIREWORK_SHOW_TYPE_2_BLUE, 12 },
|
||||||
|
{ 629949, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 21 },
|
||||||
|
{ 630970, GO_FIREWORK_SHOW_TYPE_1_RED, 9 },
|
||||||
|
{ 631607, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 15 },
|
||||||
|
{ 632741, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 8 },
|
||||||
|
{ 634464, GO_FIREWORK_SHOW_TYPE_2_BLUE, 19 },
|
||||||
|
{ 634605, GO_FIREWORK_SHOW_TYPE_1_WHITE, 20 },
|
||||||
|
{ 636559, GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG, 2 },
|
||||||
|
{ 636559, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 13 },
|
||||||
|
{ 639045, GO_FIREWORK_SHOW_TYPE_1_BLUE, 0 },
|
||||||
|
{ 639437, GO_FIREWORK_SHOW_TYPE_2_YELLOW_BIG, 10 },
|
||||||
|
{ 641461, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 23 },
|
||||||
|
{ 642671, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 17 },
|
||||||
|
{ 645920, GO_FIREWORK_SHOW_TYPE_1_BLUE, 7 },
|
||||||
|
{ 645920, GO_FIREWORK_SHOW_TYPE_1_RED, 22 },
|
||||||
|
{ 648856, GO_FIREWORK_SHOW_TYPE_2_GREEN, 6 },
|
||||||
|
{ 649157, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 3 },
|
||||||
|
{ 652004, GO_FIREWORK_SHOW_TYPE_1_BLUE, 15 },
|
||||||
|
{ 652405, GO_FIREWORK_SHOW_TYPE_2_WHITE, 16 },
|
||||||
|
{ 652405, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 20 },
|
||||||
|
{ 655372, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 0 },
|
||||||
|
{ 660268, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 11 },
|
||||||
|
{ 661838, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 12 },
|
||||||
|
{ 663825, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 23 },
|
||||||
|
{ 666714, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 2 },
|
||||||
|
{ 666714, GO_FIREWORK_SHOW_TYPE_2_BLUE, 7 },
|
||||||
|
{ 667363, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 3 },
|
||||||
|
{ 667363, GO_FIREWORK_SHOW_TYPE_1_YELLOW_BIG, 21 },
|
||||||
|
{ 668168, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 14 },
|
||||||
|
{ 668168, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 5 },
|
||||||
|
{ 674629, GO_FIREWORK_SHOW_TYPE_1_WHITE, 24 },
|
||||||
|
{ 676245, GO_FIREWORK_SHOW_TYPE_2_RED, 22 },
|
||||||
|
{ 676245, GO_FIREWORK_SHOW_TYPE_1_RED, 1 },
|
||||||
|
{ 677053, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 25 },
|
||||||
|
{ 677053, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 26 },
|
||||||
|
{ 677053, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 27 },
|
||||||
|
{ 677053, GO_FIREWORK_SHOW_TYPE_2_BLUE_BIG, 28 },
|
||||||
|
{ 677053, GO_FIREWORK_SHOW_TYPE_2_YELLOW_BIG, 16 },
|
||||||
|
{ 677053, GO_FIREWORK_SHOW_TYPE_1_GREEN_BIG, 7 },
|
||||||
|
{ 677053, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 2 },
|
||||||
|
{ 677053, GO_FIREWORK_SHOW_TYPE_1_WHITE_BIG, 29 },
|
||||||
|
{ 677053, GO_FIREWORK_SHOW_TYPE_1_GREEN, 12 },
|
||||||
|
{ 677053, GO_FIREWORK_SHOW_TYPE_1_GREEN, 6 },
|
||||||
|
{ 677053, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 14 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_2_GREEN, 30 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 23 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_1_BLUE_BIG, 31 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_2_PURPLE, 32 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_2_GREEN_BIG, 15 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 11 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 5 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_1_PURPLE_BIG, 33 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_2_PURPLE_BIG, 34 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_1_BLUE, 35 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_2_RED, 36 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_2_BLUE_BIG, 19 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_2_RED, 37 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_2_BLUE_BIG, 38 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_1_GREEN, 4 },
|
||||||
|
{ 678667, GO_FIREWORK_SHOW_TYPE_2_RED_BIG, 18 },
|
||||||
|
{ 679422, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 3 },
|
||||||
|
{ 679422, GO_FIREWORK_SHOW_TYPE_2_WHITE, 39 },
|
||||||
|
{ 679422, GO_FIREWORK_SHOW_TYPE_1_YELLOW, 21 },
|
||||||
|
{ 679809, GO_FIREWORK_SHOW_TYPE_1_GREEN, 8 },
|
||||||
|
{ 679809, GO_FIREWORK_SHOW_TYPE_2_WHITE, 20 },
|
||||||
|
{ 681100, GO_FIREWORK_SHOW_TYPE_2_YELLOW, 17 },
|
||||||
|
{ 681100, GO_FIREWORK_SHOW_TYPE_2_BLUE, 0 },
|
||||||
|
{ 682717, GO_FIREWORK_SHOW_TYPE_1_WHITE, 13 },
|
||||||
|
{ 686258, GO_FIREWORK_SHOW_TYPE_1_WHITE, 10 },
|
||||||
|
{ 690976, GO_FIREWORK_SHOW_TYPE_1_RED_BIG, 9 },
|
||||||
|
};
|
||||||
|
|
||||||
|
FireworkShow const fireworkShowBootyBay =
|
||||||
|
{
|
||||||
|
.schedule =
|
||||||
|
{
|
||||||
|
.entries = fireworkShowScheduleBootyBay,
|
||||||
|
.size = sizeof(fireworkShowScheduleBootyBay) / sizeof(fireworkShowScheduleBootyBay[0])
|
||||||
|
},
|
||||||
|
.spawns =
|
||||||
|
{
|
||||||
|
.entries = FireworkShowGameobjectBootyBay,
|
||||||
|
.size = sizeof(FireworkShowGameobjectBootyBay) / sizeof(FireworkShowGameobjectBootyBay[0])
|
||||||
|
},
|
||||||
|
.revelerId =
|
||||||
|
{
|
||||||
|
NPC_BOOTY_BAY_REVELER,
|
||||||
|
0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -17,6 +17,8 @@
|
|||||||
|
|
||||||
#include "CreatureScript.h"
|
#include "CreatureScript.h"
|
||||||
#include "ScriptedCreature.h"
|
#include "ScriptedCreature.h"
|
||||||
|
#include "SpellScript.h"
|
||||||
|
#include "SpellScriptLoader.h"
|
||||||
#include "hyjal.h"
|
#include "hyjal.h"
|
||||||
|
|
||||||
enum Spells
|
enum Spells
|
||||||
@@ -58,18 +60,18 @@ public:
|
|||||||
|
|
||||||
scheduler.Schedule(20s, 28s, [this](TaskContext context)
|
scheduler.Schedule(20s, 28s, [this](TaskContext context)
|
||||||
{
|
{
|
||||||
if (DoCastRandomTarget(SPELL_CARRION_SWARM, 0, 60.f))
|
if (DoCastRandomTarget(SPELL_CARRION_SWARM, 0, 60.f) == SPELL_CAST_OK)
|
||||||
Talk(SAY_SWARM);
|
Talk(SAY_SWARM);
|
||||||
context.Repeat(10s, 15s);
|
context.Repeat(10s, 15s);
|
||||||
}).Schedule(25s, 32s, [this](TaskContext context)
|
}).Schedule(25s, 32s, [this](TaskContext context)
|
||||||
{
|
{
|
||||||
if (DoCastRandomTarget(SPELL_SLEEP))
|
if (DoCastRandomTarget(SPELL_SLEEP) == SPELL_CAST_OK)
|
||||||
Talk(SAY_SLEEP);
|
Talk(SAY_SLEEP);
|
||||||
|
|
||||||
context.Repeat(35s, 48s);
|
context.Repeat(35s, 48s);
|
||||||
}).Schedule(30s, 48s, [this](TaskContext context)
|
}).Schedule(30s, 48s, [this](TaskContext context)
|
||||||
{
|
{
|
||||||
if (DoCastRandomTarget(SPELL_INFERNO))
|
if (DoCastRandomTarget(SPELL_INFERNO) == SPELL_CAST_OK)
|
||||||
Talk(SAY_INFERNO);
|
Talk(SAY_INFERNO);
|
||||||
|
|
||||||
context.Repeat(50s, 55s);
|
context.Repeat(50s, 55s);
|
||||||
@@ -138,7 +140,24 @@ private:
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class spell_anetheron_sleep : public SpellScript
|
||||||
|
{
|
||||||
|
PrepareSpellScript(spell_anetheron_sleep);
|
||||||
|
|
||||||
|
void FilterTargets(std::list<WorldObject*>& targets)
|
||||||
|
{
|
||||||
|
if (!targets.empty())
|
||||||
|
Acore::Containers::RandomResize(targets, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register() override
|
||||||
|
{
|
||||||
|
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_anetheron_sleep::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void AddSC_boss_anetheron()
|
void AddSC_boss_anetheron()
|
||||||
{
|
{
|
||||||
RegisterHyjalAI(boss_anetheron);
|
RegisterHyjalAI(boss_anetheron);
|
||||||
|
RegisterSpellScript(spell_anetheron_sleep);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -144,79 +144,10 @@ struct npc_ancient_wisp : public ScriptedAI
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
InstanceScript* _instance;
|
InstanceScript* _instance;
|
||||||
};
|
};
|
||||||
|
|
||||||
//TODO: move to db?
|
|
||||||
struct npc_doomfire : public ScriptedAI
|
|
||||||
{
|
|
||||||
npc_doomfire(Creature* creature) : ScriptedAI(creature), _summons(me) { }
|
|
||||||
|
|
||||||
void Reset() override
|
|
||||||
{
|
|
||||||
_summons.DespawnAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveInLineOfSight(Unit* /*who*/) override { }
|
|
||||||
|
|
||||||
void JustEngagedWith(Unit* /*who*/) override { }
|
|
||||||
|
|
||||||
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
|
|
||||||
{
|
|
||||||
damage = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void JustSummoned(Creature* summoned) override
|
|
||||||
{
|
|
||||||
_summons.Summon(summoned);
|
|
||||||
if (summoned->GetEntry() == CREATURE_DOOMFIRE_SPIRIT)
|
|
||||||
{
|
|
||||||
me->GetMotionMaster()->MoveFollow(summoned, 0.0f, 0.0f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
SummonList _summons;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct npc_doomfire_targetting : public ScriptedAI
|
|
||||||
{
|
|
||||||
npc_doomfire_targetting(Creature* creature) : ScriptedAI(creature) { }
|
|
||||||
|
|
||||||
void Reset() override
|
|
||||||
{
|
|
||||||
_chaseTarget = nullptr;
|
|
||||||
ScheduleTimedEvent(5s, [&]
|
|
||||||
{
|
|
||||||
if (_chaseTarget)
|
|
||||||
{
|
|
||||||
me->GetMotionMaster()->MoveFollow(_chaseTarget, 0.0f, 0.0f);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Position randomPosition = me->GetRandomNearPosition(40.0f);
|
|
||||||
me->GetMotionMaster()->MovePoint(0, randomPosition);
|
|
||||||
}
|
|
||||||
}, 5s);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveInLineOfSight(Unit* who) override
|
|
||||||
{
|
|
||||||
if (who->IsPlayer())
|
|
||||||
{
|
|
||||||
_chaseTarget = who;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
|
|
||||||
{
|
|
||||||
damage = 0;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
Unit* _chaseTarget;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct boss_archimonde : public BossAI
|
struct boss_archimonde : public BossAI
|
||||||
{
|
{
|
||||||
boss_archimonde(Creature* creature) : BossAI(creature, DATA_ARCHIMONDE)
|
boss_archimonde(Creature* creature) : BossAI(creature, DATA_ARCHIMONDE)
|
||||||
@@ -256,6 +187,7 @@ struct boss_archimonde : public BossAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
ScheduleHealthCheckEvent(10, [&]{
|
ScheduleHealthCheckEvent(10, [&]{
|
||||||
|
scheduler.CancelAll();
|
||||||
me->SetReactState(REACT_PASSIVE);
|
me->SetReactState(REACT_PASSIVE);
|
||||||
DoCastProtection();
|
DoCastProtection();
|
||||||
Talk(SAY_ENRAGE);
|
Talk(SAY_ENRAGE);
|
||||||
@@ -326,11 +258,11 @@ struct boss_archimonde : public BossAI
|
|||||||
ScheduleTimedEvent(25s, 35s, [&]
|
ScheduleTimedEvent(25s, 35s, [&]
|
||||||
{
|
{
|
||||||
Talk(SAY_AIR_BURST);
|
Talk(SAY_AIR_BURST);
|
||||||
DoCastRandomTarget(SPELL_AIR_BURST);
|
DoCastRandomTarget(SPELL_AIR_BURST, 0, 0.0f, true, false, false);
|
||||||
}, 25s, 40s);
|
}, 25s, 40s);
|
||||||
ScheduleTimedEvent(25s, 35s, [&]
|
ScheduleTimedEvent(25s, 35s, [&]
|
||||||
{
|
{
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, false))
|
||||||
{
|
{
|
||||||
DoCastDoomFire(target);
|
DoCastDoomFire(target);
|
||||||
}
|
}
|
||||||
@@ -441,18 +373,22 @@ struct boss_archimonde : public BossAI
|
|||||||
{
|
{
|
||||||
summoned->AI()->AttackStart(me);
|
summoned->AI()->AttackStart(me);
|
||||||
}
|
}
|
||||||
|
else if (summoned->GetEntry() == CREATURE_DOOMFIRE)
|
||||||
|
{
|
||||||
|
summoned->CastSpell(summoned, SPELL_DOOMFIRE_SPAWN);
|
||||||
|
summoned->CastSpell(summoned, SPELL_DOOMFIRE, true, 0, 0, me->GetGUID());
|
||||||
|
}
|
||||||
|
else if (summoned->GetEntry() == CREATURE_DOOMFIRE_SPIRIT)
|
||||||
|
{
|
||||||
|
Position randomPosition = summoned->GetRandomNearPosition(40.0f);
|
||||||
|
summoned->GetMotionMaster()->MovePoint(0, randomPosition);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
summoned->SetFaction(me->GetFaction()); //remove?
|
summoned->SetFaction(me->GetFaction()); //remove?
|
||||||
summoned->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
summoned->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||||
summoned->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
summoned->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (summoned->GetEntry() == CREATURE_DOOMFIRE)
|
|
||||||
{
|
|
||||||
summoned->CastSpell(summoned, SPELL_DOOMFIRE_SPAWN);
|
|
||||||
summoned->CastSpell(summoned, SPELL_DOOMFIRE, true, 0, 0, me->GetGUID());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoCastDoomFire(Unit* target)
|
void DoCastDoomFire(Unit* target)
|
||||||
@@ -461,12 +397,16 @@ struct boss_archimonde : public BossAI
|
|||||||
Talk(SAY_DOOMFIRE);
|
Talk(SAY_DOOMFIRE);
|
||||||
Position spiritPosition = { target->GetPositionX() + DOOMFIRE_OFFSET, target->GetPositionY() + DOOMFIRE_OFFSET, target->GetPositionZ(), 0.0f };
|
Position spiritPosition = { target->GetPositionX() + DOOMFIRE_OFFSET, target->GetPositionY() + DOOMFIRE_OFFSET, target->GetPositionZ(), 0.0f };
|
||||||
Position doomfirePosition = { target->GetPositionX() - DOOMFIRE_OFFSET, target->GetPositionY() - DOOMFIRE_OFFSET, target->GetPositionZ(), 0.0f };
|
Position doomfirePosition = { target->GetPositionX() - DOOMFIRE_OFFSET, target->GetPositionY() - DOOMFIRE_OFFSET, target->GetPositionZ(), 0.0f };
|
||||||
if (Unit* doomfireSpirit = me->SummonCreature(CREATURE_DOOMFIRE_SPIRIT, spiritPosition, TEMPSUMMON_TIMED_DESPAWN, 27000))
|
if (Creature* doomfireSpirit = me->SummonCreature(CREATURE_DOOMFIRE_SPIRIT, spiritPosition, TEMPSUMMON_TIMED_DESPAWN, 27000))
|
||||||
{
|
{
|
||||||
if (Unit* doomfire = me->SummonCreature(CREATURE_DOOMFIRE, doomfirePosition, TEMPSUMMON_TIMED_DESPAWN, 27000))
|
if (Creature* doomfire = me->SummonCreature(CREATURE_DOOMFIRE, doomfirePosition, TEMPSUMMON_TIMED_DESPAWN, 27000))
|
||||||
{
|
{
|
||||||
doomfireSpirit->SetVisible(false);
|
doomfireSpirit->SetVisible(false);
|
||||||
doomfire->SetVisible(false);
|
doomfire->SetVisible(false);
|
||||||
|
doomfireSpirit->SetWalk(false);
|
||||||
|
doomfireSpirit->SetReactState(REACT_PASSIVE);
|
||||||
|
doomfire->SetReactState(REACT_PASSIVE);
|
||||||
|
doomfire->GetMotionMaster()->MoveFollow(doomfireSpirit, 0.0f, 0.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -567,8 +507,6 @@ void AddSC_boss_archimonde()
|
|||||||
RegisterSpellScript(spell_hand_of_death);
|
RegisterSpellScript(spell_hand_of_death);
|
||||||
RegisterSpellScript(spell_finger_of_death);
|
RegisterSpellScript(spell_finger_of_death);
|
||||||
RegisterHyjalAI(boss_archimonde);
|
RegisterHyjalAI(boss_archimonde);
|
||||||
RegisterHyjalAI(npc_doomfire);
|
|
||||||
RegisterHyjalAI(npc_doomfire_targetting);
|
|
||||||
RegisterHyjalAI(npc_ancient_wisp);
|
RegisterHyjalAI(npc_ancient_wisp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -48,14 +48,19 @@ struct boss_kazrogal : public BossAI
|
|||||||
public:
|
public:
|
||||||
boss_kazrogal(Creature* creature) : BossAI(creature, DATA_KAZROGAL)
|
boss_kazrogal(Creature* creature) : BossAI(creature, DATA_KAZROGAL)
|
||||||
{
|
{
|
||||||
_recentlySpoken = false;
|
|
||||||
_markCounter = 0;
|
|
||||||
scheduler.SetValidator([this]
|
scheduler.SetValidator([this]
|
||||||
{
|
{
|
||||||
return !me->HasUnitState(UNIT_STATE_CASTING);
|
return !me->HasUnitState(UNIT_STATE_CASTING);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Reset() override
|
||||||
|
{
|
||||||
|
_recentlySpoken = false;
|
||||||
|
_markCounter = 0;
|
||||||
|
BossAI::Reset();
|
||||||
|
}
|
||||||
|
|
||||||
void JustEngagedWith(Unit * who) override
|
void JustEngagedWith(Unit * who) override
|
||||||
{
|
{
|
||||||
BossAI::JustEngagedWith(who);
|
BossAI::JustEngagedWith(who);
|
||||||
|
|||||||
@@ -96,8 +96,6 @@ public:
|
|||||||
|
|
||||||
void Initialize() override
|
void Initialize() override
|
||||||
{
|
{
|
||||||
SetHeaders(DataHeader);
|
|
||||||
|
|
||||||
_bossWave = 0;
|
_bossWave = 0;
|
||||||
_retreat = 0;
|
_retreat = 0;
|
||||||
trash = 0;
|
trash = 0;
|
||||||
|
|||||||
@@ -16,11 +16,19 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "boss_four_horsemen.h"
|
#include "boss_four_horsemen.h"
|
||||||
|
#include "CreatureScript.h"
|
||||||
|
#include "Player.h"
|
||||||
|
#include "ScriptedCreature.h"
|
||||||
|
#include "SpellAuraEffects.h"
|
||||||
|
#include "SpellScript.h"
|
||||||
|
#include "SpellScriptLoader.h"
|
||||||
|
#include "naxxramas.h"
|
||||||
|
|
||||||
|
using namespace FourHorsemen;
|
||||||
|
|
||||||
void AddSC_boss_four_horsemen()
|
void AddSC_boss_four_horsemen()
|
||||||
{
|
{
|
||||||
new boss_four_horsemen();
|
new boss_four_horsemen();
|
||||||
new spell_four_horsemen_mark();
|
new spell_four_horsemen_mark();
|
||||||
RegisterSpellScript(spell_four_horsemen_consumption);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,13 +17,19 @@
|
|||||||
|
|
||||||
#include "boss_maexxna.h"
|
#include "boss_maexxna.h"
|
||||||
#include "CreatureScript.h"
|
#include "CreatureScript.h"
|
||||||
|
#include "Player.h"
|
||||||
#include "PassiveAI.h"
|
#include "PassiveAI.h"
|
||||||
#include "ScriptedCreature.h"
|
#include "ScriptedCreature.h"
|
||||||
|
#include "SpellAuraEffects.h"
|
||||||
|
#include "SpellScript.h"
|
||||||
|
#include "SpellScriptLoader.h"
|
||||||
#include "naxxramas.h"
|
#include "naxxramas.h"
|
||||||
|
|
||||||
|
using namespace Maexxna;
|
||||||
|
|
||||||
void AddSC_boss_maexxna()
|
void AddSC_boss_maexxna()
|
||||||
{
|
{
|
||||||
new boss_maexxna();
|
new boss_maexxna();
|
||||||
new boss_maexxna_webwrap();
|
new boss_maexxna_webwrap();
|
||||||
|
RegisterSpellScript(spell_web_wrap_damage);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1196,7 +1196,12 @@ public:
|
|||||||
{
|
{
|
||||||
if (InstanceScript *instance = player->GetInstanceScript())
|
if (InstanceScript *instance = player->GetInstanceScript())
|
||||||
{
|
{
|
||||||
if (instance->CheckRequiredBosses(BOSS_SAPPHIRON))
|
bool AreAllWingsCleared = instance->GetBossState(BOSS_MAEXXNA) == DONE
|
||||||
|
&& (instance->GetBossState(BOSS_LOATHEB) == DONE)
|
||||||
|
&& (instance->GetBossState(BOSS_THADDIUS) == DONE)
|
||||||
|
&& (instance->GetBossState(BOSS_HORSEMAN) == DONE);
|
||||||
|
|
||||||
|
if (AreAllWingsCleared)
|
||||||
{
|
{
|
||||||
player->TeleportTo(533, sapphironEntryTP.m_positionX, sapphironEntryTP.m_positionY, sapphironEntryTP.m_positionZ, sapphironEntryTP.m_orientation);
|
player->TeleportTo(533, sapphironEntryTP.m_positionX, sapphironEntryTP.m_positionY, sapphironEntryTP.m_positionZ, sapphironEntryTP.m_orientation);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ enum Spells
|
|||||||
SPELL_COSMIC_SMASH_VISUAL_STATE = 62300,
|
SPELL_COSMIC_SMASH_VISUAL_STATE = 62300,
|
||||||
SPELL_SELF_STUN = 65256,
|
SPELL_SELF_STUN = 65256,
|
||||||
SPELL_KILL_CREDIT = 65184,
|
SPELL_KILL_CREDIT = 65184,
|
||||||
SPELL_TELEPORT = 62940,
|
|
||||||
SPELL_DUAL_WIELD = 42459,
|
SPELL_DUAL_WIELD = 42459,
|
||||||
|
|
||||||
// Algalon Stalker
|
// Algalon Stalker
|
||||||
|
|||||||
@@ -347,7 +347,6 @@ public:
|
|||||||
uint32 chestId = RAID_MODE(GO_FREYA_CHEST, GO_FREYA_CHEST_HERO);
|
uint32 chestId = RAID_MODE(GO_FREYA_CHEST, GO_FREYA_CHEST_HERO);
|
||||||
chestId -= 2 * _elderCount; // offset
|
chestId -= 2 * _elderCount; // offset
|
||||||
|
|
||||||
me->DespawnOrUnsummon(5000);
|
|
||||||
if (GameObject* go = me->SummonGameObject(chestId, 2345.61f, -71.20f, 425.104f, 3.0f, 0, 0, 0, 0, 0))
|
if (GameObject* go = me->SummonGameObject(chestId, 2345.61f, -71.20f, 425.104f, 3.0f, 0, 0, 0, 0, 0))
|
||||||
{
|
{
|
||||||
go->ReplaceAllGameObjectFlags((GameObjectFlags)0);
|
go->ReplaceAllGameObjectFlags((GameObjectFlags)0);
|
||||||
@@ -360,10 +359,24 @@ public:
|
|||||||
me->CastSpell(me, 65074, true); // credit
|
me->CastSpell(me, 65074, true); // credit
|
||||||
m_pInstance->SetData(TYPE_FREYA, DONE);
|
m_pInstance->SetData(TYPE_FREYA, DONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scheduler.Schedule(14s, [this](TaskContext /*context*/)
|
||||||
|
{
|
||||||
|
DoCastSelf(SPELL_TELEPORT);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override
|
||||||
|
{
|
||||||
|
if (spellInfo->Id == SPELL_TELEPORT)
|
||||||
|
{
|
||||||
|
me->DespawnOrUnsummon();
|
||||||
|
m_pInstance->SetData(EVENT_KEEPER_TELEPORTED, DONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void JustSummoned(Creature* cr) override
|
void JustSummoned(Creature* cr) override
|
||||||
{
|
{
|
||||||
if (cr->GetEntry() == NPC_FREYA_UNSTABLE_SUN_BEAM)
|
if (cr->GetEntry() == NPC_FREYA_UNSTABLE_SUN_BEAM)
|
||||||
@@ -547,6 +560,7 @@ public:
|
|||||||
|
|
||||||
void UpdateAI(uint32 diff) override
|
void UpdateAI(uint32 diff) override
|
||||||
{
|
{
|
||||||
|
scheduler.Update(diff);
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
@@ -346,6 +346,7 @@ public:
|
|||||||
{
|
{
|
||||||
pInstance->SetData(TYPE_HODIR, DONE);
|
pInstance->SetData(TYPE_HODIR, DONE);
|
||||||
me->CastSpell(me, 64899, true); // credit
|
me->CastSpell(me, 64899, true); // credit
|
||||||
|
pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BITING_COLD_PLAYER_AURA);
|
||||||
}
|
}
|
||||||
|
|
||||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||||
@@ -355,7 +356,6 @@ public:
|
|||||||
me->CombatStop();
|
me->CombatStop();
|
||||||
me->InterruptNonMeleeSpells(true);
|
me->InterruptNonMeleeSpells(true);
|
||||||
me->RemoveAllAuras();
|
me->RemoveAllAuras();
|
||||||
pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BITING_COLD_PLAYER_AURA);
|
|
||||||
|
|
||||||
events.Reset();
|
events.Reset();
|
||||||
summons.DespawnAll();
|
summons.DespawnAll();
|
||||||
@@ -383,13 +383,17 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
Talk(TEXT_DEATH);
|
Talk(TEXT_DEATH);
|
||||||
me->DespawnOrUnsummon(10000);
|
scheduler.Schedule(14s, [this](TaskContext /*context*/)
|
||||||
|
{
|
||||||
|
DoCastSelf(SPELL_TELEPORT);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(uint32 diff) override
|
void UpdateAI(uint32 diff) override
|
||||||
{
|
{
|
||||||
|
scheduler.Update(diff);
|
||||||
if (me->GetPositionY() <= ENTRANCE_DOOR.GetPositionY() || me->GetPositionY() >= EXIT_DOOR.GetPositionY())
|
if (me->GetPositionY() <= ENTRANCE_DOOR.GetPositionY() || me->GetPositionY() >= EXIT_DOOR.GetPositionY())
|
||||||
{
|
{
|
||||||
boss_hodirAI::EnterEvadeMode();
|
boss_hodirAI::EnterEvadeMode();
|
||||||
@@ -497,6 +501,15 @@ public:
|
|||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override
|
||||||
|
{
|
||||||
|
if (spellInfo->Id == SPELL_TELEPORT)
|
||||||
|
{
|
||||||
|
me->DespawnOrUnsummon();
|
||||||
|
pInstance->SetData(EVENT_KEEPER_TELEPORTED, DONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Creature* GetHelper(uint8 index)
|
Creature* GetHelper(uint8 index)
|
||||||
{
|
{
|
||||||
return Helpers[index] ? ObjectAccessor::GetCreature(*me, Helpers[index]) : nullptr;
|
return Helpers[index] ? ObjectAccessor::GetCreature(*me, Helpers[index]) : nullptr;
|
||||||
|
|||||||
@@ -237,7 +237,6 @@ public:
|
|||||||
_looksAchievement = true;
|
_looksAchievement = true;
|
||||||
|
|
||||||
me->SetDisableGravity(true);
|
me->SetDisableGravity(true);
|
||||||
me->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE);
|
|
||||||
me->DisableRotate(true);
|
me->DisableRotate(true);
|
||||||
|
|
||||||
events.Reset();
|
events.Reset();
|
||||||
@@ -327,6 +326,8 @@ public:
|
|||||||
arm->DespawnOrUnsummon(3000); // visual
|
arm->DespawnOrUnsummon(3000); // visual
|
||||||
if (Creature* arm = ObjectAccessor::GetCreature(*me, _right))
|
if (Creature* arm = ObjectAccessor::GetCreature(*me, _right))
|
||||||
arm->DespawnOrUnsummon(3000); // visual
|
arm->DespawnOrUnsummon(3000); // visual
|
||||||
|
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||||
|
me->SetDisableGravity(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void KilledUnit(Unit*) override
|
void KilledUnit(Unit*) override
|
||||||
|
|||||||
@@ -802,12 +802,21 @@ public:
|
|||||||
case EVENT_DISAPPEAR:
|
case EVENT_DISAPPEAR:
|
||||||
if( pInstance )
|
if( pInstance )
|
||||||
pInstance->SetData(TYPE_MIMIRON, DONE);
|
pInstance->SetData(TYPE_MIMIRON, DONE);
|
||||||
|
DoCastSelf(SPELL_TELEPORT);
|
||||||
summons.DespawnAll();
|
summons.DespawnAll();
|
||||||
me->DespawnOrUnsummon();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override
|
||||||
|
{
|
||||||
|
if (spellInfo->Id == SPELL_TELEPORT)
|
||||||
|
{
|
||||||
|
me->DespawnOrUnsummon();
|
||||||
|
pInstance->SetData(EVENT_KEEPER_TELEPORTED, DONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MoveInLineOfSight(Unit* /*mover*/) override {}
|
void MoveInLineOfSight(Unit* /*mover*/) override {}
|
||||||
|
|
||||||
void EnterEvadeMode(EvadeReason why) override
|
void EnterEvadeMode(EvadeReason why) override
|
||||||
|
|||||||
@@ -197,6 +197,7 @@ enum ThorimEvents
|
|||||||
EVENT_THORIM_OUTRO1 = 13,
|
EVENT_THORIM_OUTRO1 = 13,
|
||||||
EVENT_THORIM_OUTRO2 = 14,
|
EVENT_THORIM_OUTRO2 = 14,
|
||||||
EVENT_THORIM_OUTRO3 = 15,
|
EVENT_THORIM_OUTRO3 = 15,
|
||||||
|
EVENT_THORIM_OUTRO4 = 16,
|
||||||
|
|
||||||
EVENT_DR_ACOLYTE_GH = 20,
|
EVENT_DR_ACOLYTE_GH = 20,
|
||||||
EVENT_DR_ACOLYTE_HS = 21,
|
EVENT_DR_ACOLYTE_HS = 21,
|
||||||
@@ -630,6 +631,11 @@ public:
|
|||||||
me->CastSpell(me, SPELL_LIGHTNING_CHARGE_BUFF, true);
|
me->CastSpell(me, SPELL_LIGHTNING_CHARGE_BUFF, true);
|
||||||
events.RescheduleEvent(EVENT_THORIM_LIGHTNING_CHARGE, 10s, 0, EVENT_PHASE_RING);
|
events.RescheduleEvent(EVENT_THORIM_LIGHTNING_CHARGE, 10s, 0, EVENT_PHASE_RING);
|
||||||
}
|
}
|
||||||
|
else if (spellInfo->Id == SPELL_TELEPORT)
|
||||||
|
{
|
||||||
|
me->DespawnOrUnsummon();
|
||||||
|
m_pInstance->SetData(EVENT_KEEPER_TELEPORTED, DONE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override
|
void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override
|
||||||
@@ -773,12 +779,13 @@ public:
|
|||||||
{
|
{
|
||||||
Talk(SAY_END_NORMAL_3);
|
Talk(SAY_END_NORMAL_3);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Defeat credit
|
// Defeat credit
|
||||||
if (m_pInstance)
|
if (m_pInstance)
|
||||||
m_pInstance->SetData(TYPE_THORIM, DONE);
|
m_pInstance->SetData(TYPE_THORIM, DONE);
|
||||||
|
events.ScheduleEvent(EVENT_THORIM_OUTRO4, 14s, 0, 3);
|
||||||
me->DespawnOrUnsummon(8000);
|
break;
|
||||||
|
case EVENT_THORIM_OUTRO4:
|
||||||
|
DoCastSelf(SPELL_TELEPORT);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -251,6 +251,8 @@ enum Misc
|
|||||||
ACTION_ILLUSION_ICECROWN = 2,
|
ACTION_ILLUSION_ICECROWN = 2,
|
||||||
ACTION_ILLUSION_STORMWIND = 3,
|
ACTION_ILLUSION_STORMWIND = 3,
|
||||||
|
|
||||||
|
// ACTION_SARA_UPDATE_SUMMON_KEEPERS = 4, // defined in ulduar.h
|
||||||
|
|
||||||
EVENT_PHASE_ONE = 1,
|
EVENT_PHASE_ONE = 1,
|
||||||
EVENT_PHASE_TWO = 2,
|
EVENT_PHASE_TWO = 2,
|
||||||
EVENT_PHASE_THREE = 3,
|
EVENT_PHASE_THREE = 3,
|
||||||
@@ -271,6 +273,26 @@ struct LocationsXY
|
|||||||
float x, y, z;
|
float x, y, z;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Position const GossipKeepersPos[4] =
|
||||||
|
{
|
||||||
|
{1945.6823f, 33.342014f, 411.44083f, 5.270895f}, // Freya
|
||||||
|
{1945.7609f, -81.52171f, 411.4407f, 1.029744f}, // Hodir
|
||||||
|
{2028.7656f, 17.42014f, 411.44458f, 3.857178f}, // Mimiron
|
||||||
|
{2028.8219f, -65.73573f, 411.44257f, 2.460914f} // Thorim
|
||||||
|
};
|
||||||
|
|
||||||
|
const Position KeepersPos[4] =
|
||||||
|
{
|
||||||
|
{1939.32f, 42.165f, 338.415f, 5.17955f}, // Freya
|
||||||
|
{1939.13f, -90.8332f, 338.415f, 1.00123f}, // Hodir
|
||||||
|
{2036.81f, 25.6646f, 338.415f, 3.74227f}, // Mimiron
|
||||||
|
{2036.59f, -73.8499f, 338.415f, 2.34819f} // Thorim
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint32 TABLE_KEEPER_ENTRY[4] = {NPC_FREYA_KEEPER, NPC_HODIR_KEEPER, NPC_MIMIRON_KEEPER, NPC_THORIM_KEEPER};
|
||||||
|
const uint32 TABLE_GOSSIP_ENTRY[4] = {NPC_FREYA_GOSSIP, NPC_HODIR_GOSSIP, NPC_MIMIRON_GOSSIP, NPC_THORIM_GOSSIP};
|
||||||
|
const uint32 TABLE_KEEPER_TYPE[4] = {TYPE_FREYA, TYPE_HODIR, TYPE_MIMIRON, TYPE_THORIM};
|
||||||
|
|
||||||
static LocationsXY yoggPortalLoc[] =
|
static LocationsXY yoggPortalLoc[] =
|
||||||
{
|
{
|
||||||
{1970.48f, -9.75f, 325.5f},
|
{1970.48f, -9.75f, 325.5f},
|
||||||
@@ -344,7 +366,6 @@ enum Texts
|
|||||||
SAY_LK_2 = 1,
|
SAY_LK_2 = 1,
|
||||||
SAY_YOGG_5 = 3,
|
SAY_YOGG_5 = 3,
|
||||||
SAY_YOGG_6 = 4,
|
SAY_YOGG_6 = 4,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const Position Middle = {1980.28f, -25.5868f, 329.397f, M_PI * 1.5f};
|
const Position Middle = {1980.28f, -25.5868f, 329.397f, M_PI * 1.5f};
|
||||||
@@ -371,7 +392,6 @@ public:
|
|||||||
SummonList summons;
|
SummonList summons;
|
||||||
|
|
||||||
uint32 _initFight;
|
uint32 _initFight;
|
||||||
ObjectGuid _keepersGUID[4];
|
|
||||||
uint8 _summonedGuardiansCount;
|
uint8 _summonedGuardiansCount;
|
||||||
uint32 _p2TalkTimer;
|
uint32 _p2TalkTimer;
|
||||||
bool _secondPhase;
|
bool _secondPhase;
|
||||||
@@ -382,17 +402,9 @@ public:
|
|||||||
void AttackStart(Unit*) override { }
|
void AttackStart(Unit*) override { }
|
||||||
void MoveInLineOfSight(Unit*) override { }
|
void MoveInLineOfSight(Unit*) override { }
|
||||||
|
|
||||||
void JustSummoned(Creature* cr) override
|
void JustSummoned(Creature* summon) override
|
||||||
{
|
{
|
||||||
summons.Summon(cr);
|
summons.Summon(summon);
|
||||||
if (cr->GetEntry() >= NPC_FREYA_KEEPER && cr->GetEntry() <= NPC_THORIM_KEEPER)
|
|
||||||
{
|
|
||||||
if (cr->GetEntry() == NPC_FREYA_KEEPER)
|
|
||||||
cr->CastSpell(cr, SPELL_CONJURE_SANITY_WELL, false);
|
|
||||||
_keepersGUID[cr->GetEntry() - NPC_FREYA_KEEPER] = cr->GetGUID();
|
|
||||||
}
|
|
||||||
else if (cr->GetEntry() == NPC_SANITY_WELL)
|
|
||||||
cr->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_SCALE, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpawnClouds()
|
void SpawnClouds()
|
||||||
@@ -407,15 +419,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpawnWeels()
|
|
||||||
{
|
|
||||||
me->SummonCreature(NPC_SANITY_WELL, 2042.56f, -40.3667f, 329.274f, 0.0f);
|
|
||||||
me->SummonCreature(NPC_SANITY_WELL, 1975.89f, 40.0216f, 331.1f, 0.0f);
|
|
||||||
me->SummonCreature(NPC_SANITY_WELL, 1987.12f, -91.2702f, 330.186f, 0.0f);
|
|
||||||
me->SummonCreature(NPC_SANITY_WELL, 1900.48f, -51.2386f, 332.13f, 0.0f);
|
|
||||||
me->SummonCreature(NPC_SANITY_WELL, 1899.94f, 0.330621f, 332.296f, 0.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EnterEvadeMode(EvadeReason why) override
|
void EnterEvadeMode(EvadeReason why) override
|
||||||
{
|
{
|
||||||
if (!_EnterEvadeMode(why))
|
if (!_EnterEvadeMode(why))
|
||||||
@@ -469,9 +472,7 @@ public:
|
|||||||
|
|
||||||
_initFight = 1;
|
_initFight = 1;
|
||||||
|
|
||||||
for (uint8 i = 0; i < 4; ++i)
|
UpdateKeeperSpawns();
|
||||||
_keepersGUID[i].Clear();
|
|
||||||
|
|
||||||
_summonedGuardiansCount = 0;
|
_summonedGuardiansCount = 0;
|
||||||
_p2TalkTimer = 0;
|
_p2TalkTimer = 0;
|
||||||
_secondPhase = false;
|
_secondPhase = false;
|
||||||
@@ -503,9 +504,11 @@ public:
|
|||||||
me->SetInCombatWithZone();
|
me->SetInCombatWithZone();
|
||||||
AttackStart(target);
|
AttackStart(target);
|
||||||
|
|
||||||
me->CastSpell(me, SPELL_SANITY_BASE, true);
|
DespawnGossipKeepers();
|
||||||
|
// Engage Keepers
|
||||||
|
summons.DoZoneInCombat();
|
||||||
|
|
||||||
SaveKeepers();
|
me->CastSpell(me, SPELL_SANITY_BASE, true);
|
||||||
|
|
||||||
events.ScheduleEvent(EVENT_SARA_P1_DOORS_CLOSE, 15s, 0, EVENT_PHASE_ONE);
|
events.ScheduleEvent(EVENT_SARA_P1_DOORS_CLOSE, 15s, 0, EVENT_PHASE_ONE);
|
||||||
events.ScheduleEvent(EVENT_SARA_P1_BERSERK, 15min, 0, 0);
|
events.ScheduleEvent(EVENT_SARA_P1_BERSERK, 15min, 0, 0);
|
||||||
@@ -516,25 +519,26 @@ public:
|
|||||||
me->setActive(true);
|
me->setActive(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SaveKeepers()
|
void DespawnGossipKeepers()
|
||||||
|
{
|
||||||
|
for (uint8 i = KEEPER_FREYA; i <= KEEPER_THORIM; i++)
|
||||||
|
summons.DespawnEntry(TABLE_GOSSIP_ENTRY[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateKeeperSpawns()
|
||||||
|
{
|
||||||
|
for (uint8 i = KEEPER_FREYA; i <= KEEPER_THORIM; i++)
|
||||||
{
|
{
|
||||||
for (uint8 i = 0; i < 4; ++i)
|
|
||||||
if (m_pInstance->GetData(TYPE_WATCHERS) & (1 << i))
|
if (m_pInstance->GetData(TYPE_WATCHERS) & (1 << i))
|
||||||
switch (i)
|
|
||||||
{
|
{
|
||||||
case KEEPER_FREYA:
|
if (!summons.HasEntry(TABLE_KEEPER_ENTRY[i]))
|
||||||
SpawnWeels();
|
me->SummonCreature(TABLE_KEEPER_ENTRY[i], KeepersPos[i]);
|
||||||
me->SummonCreature(NPC_FREYA_KEEPER, 1939.32f, 42.165f, 338.415f, 5.17955f);
|
}
|
||||||
break;
|
else if (m_pInstance->GetData(TABLE_KEEPER_TYPE[i]) == DONE)
|
||||||
case KEEPER_HODIR:
|
{
|
||||||
me->SummonCreature(NPC_HODIR_KEEPER, 1939.13f, -90.8332f, 338.415f, 1.00123f);
|
if (!summons.HasEntry(TABLE_GOSSIP_ENTRY[i]))
|
||||||
break;
|
me->SummonCreature(TABLE_GOSSIP_ENTRY[i], GossipKeepersPos[i]);
|
||||||
case KEEPER_MIMIRON:
|
}
|
||||||
me->SummonCreature(NPC_MIMIRON_KEEPER, 2036.81f, 25.6646f, 338.415f, 3.74227f);
|
|
||||||
break;
|
|
||||||
case KEEPER_THORIM:
|
|
||||||
me->SummonCreature(NPC_THORIM_KEEPER, 2036.59f, -73.8499f, 338.415f, 2.34819f);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -625,9 +629,8 @@ public:
|
|||||||
{
|
{
|
||||||
uint8 _count = 0;
|
uint8 _count = 0;
|
||||||
for (uint8 i = 0; i < 4; ++i)
|
for (uint8 i = 0; i < 4; ++i)
|
||||||
if (_keepersGUID[i])
|
if (m_pInstance->GetData(TYPE_WATCHERS) & (1 << i))
|
||||||
++_count;
|
++_count;
|
||||||
|
|
||||||
return _count;
|
return _count;
|
||||||
}
|
}
|
||||||
else if (param == DATA_GET_SARA_PHASE)
|
else if (param == DATA_GET_SARA_PHASE)
|
||||||
@@ -638,7 +641,11 @@ public:
|
|||||||
|
|
||||||
void DoAction(int32 param) override
|
void DoAction(int32 param) override
|
||||||
{
|
{
|
||||||
if (param == ACTION_BRAIN_DAMAGED)
|
if (param == ACTION_SARA_UPDATE_SUMMON_KEEPERS)
|
||||||
|
{
|
||||||
|
UpdateKeeperSpawns();
|
||||||
|
}
|
||||||
|
else if (param == ACTION_BRAIN_DAMAGED)
|
||||||
{
|
{
|
||||||
summons.DoAction(ACTION_REMOVE_STUN);
|
summons.DoAction(ACTION_REMOVE_STUN);
|
||||||
|
|
||||||
@@ -648,7 +655,7 @@ public:
|
|||||||
EntryCheckPredicate pred3(NPC_THORIM_KEEPER);
|
EntryCheckPredicate pred3(NPC_THORIM_KEEPER);
|
||||||
summons.DoAction(ACTION_THORIM_START_STORM, pred3);
|
summons.DoAction(ACTION_THORIM_START_STORM, pred3);
|
||||||
|
|
||||||
if (!(_keepersGUID[0] && _keepersGUID[1] && _keepersGUID[2] && _keepersGUID[3]) && me->GetMap()->Is25ManRaid())
|
if (me->GetMap()->Is25ManRaid() && (GetData(DATA_GET_KEEPERS_COUNT) > 0))
|
||||||
summons.DoAction(ACTION_YOGG_SARON_HARD_MODE, pred2);
|
summons.DoAction(ACTION_YOGG_SARON_HARD_MODE, pred2);
|
||||||
|
|
||||||
summons.DespawnEntry(NPC_DEATH_ORB);
|
summons.DespawnEntry(NPC_DEATH_ORB);
|
||||||
@@ -660,8 +667,17 @@ public:
|
|||||||
}
|
}
|
||||||
else if (param == ACTION_YOGG_SARON_DEATH)
|
else if (param == ACTION_YOGG_SARON_DEATH)
|
||||||
{
|
{
|
||||||
|
// Despawn everything but Yogg-Saron's corpse
|
||||||
|
summons.DoAction(ACTION_DESPAWN_ADDS);
|
||||||
|
summons.DespawnEntry(NPC_CRUSHER_TENTACLE);
|
||||||
|
summons.DespawnEntry(NPC_CONSTRICTOR_TENTACLE);
|
||||||
|
summons.DespawnEntry(NPC_CORRUPTOR_TENTACLE);
|
||||||
summons.DespawnEntry(NPC_VOICE_OF_YOGG_SARON);
|
summons.DespawnEntry(NPC_VOICE_OF_YOGG_SARON);
|
||||||
summons.DespawnEntry(NPC_BRAIN_OF_YOGG_SARON);
|
summons.DespawnEntry(NPC_BRAIN_OF_YOGG_SARON);
|
||||||
|
summons.DespawnEntry(NPC_MIMIRON_GOSSIP);
|
||||||
|
summons.DespawnEntry(NPC_HODIR_GOSSIP);
|
||||||
|
summons.DespawnEntry(NPC_FREYA_GOSSIP);
|
||||||
|
summons.DespawnEntry(NPC_THORIM_GOSSIP);
|
||||||
summons.DespawnEntry(NPC_MIMIRON_KEEPER);
|
summons.DespawnEntry(NPC_MIMIRON_KEEPER);
|
||||||
summons.DespawnEntry(NPC_HODIR_KEEPER);
|
summons.DespawnEntry(NPC_HODIR_KEEPER);
|
||||||
summons.DespawnEntry(NPC_FREYA_KEEPER);
|
summons.DespawnEntry(NPC_FREYA_KEEPER);
|
||||||
@@ -1709,52 +1725,56 @@ public:
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
class boss_yoggsaron_keeper : public CreatureScript
|
struct boss_yoggsaron_keeper : public NullCreatureAI
|
||||||
{
|
{
|
||||||
public:
|
boss_yoggsaron_keeper(Creature* creature) : NullCreatureAI(creature), _summons(creature) { }
|
||||||
boss_yoggsaron_keeper() : CreatureScript("boss_yoggsaron_keeper") { }
|
|
||||||
|
|
||||||
CreatureAI* GetAI(Creature* pCreature) const override
|
|
||||||
{
|
|
||||||
return GetUlduarAI<boss_yoggsaron_keeperAI>(pCreature);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct boss_yoggsaron_keeperAI : public NullCreatureAI
|
|
||||||
{
|
|
||||||
boss_yoggsaron_keeperAI(Creature* pCreature) : NullCreatureAI(pCreature)
|
|
||||||
{
|
|
||||||
_checkTimer = 0;
|
|
||||||
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_SCALE, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32 _checkTimer;
|
|
||||||
|
|
||||||
void DoAction(int32 param) override
|
void DoAction(int32 param) override
|
||||||
{
|
{
|
||||||
if (me->GetEntry() == NPC_THORIM_KEEPER && param == ACTION_THORIM_START_STORM)
|
if (me->GetEntry() == NPC_THORIM_KEEPER && param == ACTION_THORIM_START_STORM)
|
||||||
me->CastSpell(me, SPELL_TITANIC_STORM_PASSIVE, false);
|
me->CastSpell(me, SPELL_TITANIC_STORM_PASSIVE, false);
|
||||||
|
else if (param == ACTION_DESPAWN_ADDS)
|
||||||
|
_summons.DespawnAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustSummoned(Creature* summon) override
|
||||||
|
{
|
||||||
|
_summons.Summon(summon);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustEngagedWith(Unit* /*who*/) override
|
||||||
|
{
|
||||||
|
switch (me->GetEntry())
|
||||||
|
{
|
||||||
|
case NPC_FREYA_KEEPER:
|
||||||
|
me->AddAura(SPELL_FREYA_PASSIVE, me);
|
||||||
|
me->CastSpell(me, SPELL_CONJURE_SANITY_WELL, false);
|
||||||
|
break;
|
||||||
|
case NPC_HODIR_KEEPER:
|
||||||
|
me->AddAura(SPELL_HODIR_PASSIVE, me);
|
||||||
|
me->AddAura(SPELL_PROTECTIVE_GAZE, me);
|
||||||
|
break;
|
||||||
|
case NPC_MIMIRON_KEEPER:
|
||||||
|
me->AddAura(SPELL_MIMIRON_PASSIVE, me);
|
||||||
|
scheduler.Schedule(2s, [this](TaskContext context)
|
||||||
|
{
|
||||||
|
if (!me->HasUnitState(UNIT_STATE_CASTING))
|
||||||
|
me->CastSpell(me, SPELL_DESTABILIZATION_MATRIX, false);
|
||||||
|
context.Repeat(2s);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case NPC_THORIM_KEEPER:
|
||||||
|
me->AddAura(SPELL_THORIM_PASSIVE, me);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(uint32 diff) override
|
void UpdateAI(uint32 diff) override
|
||||||
{
|
{
|
||||||
if (me->GetInstanceScript())
|
scheduler.Update(diff);
|
||||||
if (me->GetInstanceScript()->GetData(TYPE_YOGGSARON) != IN_PROGRESS)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_checkTimer += diff;
|
|
||||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (me->GetEntry() == NPC_MIMIRON_KEEPER)
|
|
||||||
{
|
|
||||||
if (_checkTimer >= 2000)
|
|
||||||
{
|
|
||||||
me->CastSpell(me, SPELL_DESTABILIZATION_MATRIX, false);
|
|
||||||
_checkTimer = 0;
|
|
||||||
}
|
}
|
||||||
}
|
private:
|
||||||
}
|
SummonList _summons;
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class boss_yoggsaron_descend_portal : public CreatureScript
|
class boss_yoggsaron_descend_portal : public CreatureScript
|
||||||
@@ -2739,6 +2759,33 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const Position SanityWellsPos[5] =
|
||||||
|
{
|
||||||
|
{2042.56f, -40.3667f, 329.274f, 0.0f},
|
||||||
|
{1975.89f, 40.0216f, 331.1f, 0.0f},
|
||||||
|
{1987.12f, -91.2702f, 330.186f, 0.0f},
|
||||||
|
{1900.48f, -51.2386f, 332.13f, 0.0f},
|
||||||
|
{1899.94f, 0.330621f, 332.296f, 0.0f}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 64170 - Sanity Well
|
||||||
|
class spell_keeper_freya_summon_sanity_well : public SpellScript
|
||||||
|
{
|
||||||
|
PrepareSpellScript(spell_keeper_freya_summon_sanity_well);
|
||||||
|
|
||||||
|
void OnEffect(SpellEffIndex /*effIndex*/)
|
||||||
|
{
|
||||||
|
if (Unit* caster = GetCaster())
|
||||||
|
for (int i = 0; i < 5; i++)
|
||||||
|
caster->SummonCreature(NPC_SANITY_WELL, SanityWellsPos[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register() override
|
||||||
|
{
|
||||||
|
OnEffectLaunch += SpellEffectFn(spell_keeper_freya_summon_sanity_well::OnEffect, EFFECT_0, SPELL_EFFECT_SEND_EVENT);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/* 63881 - Malady of the Mind
|
/* 63881 - Malady of the Mind
|
||||||
63795 - Psychosis
|
63795 - Psychosis
|
||||||
63830 - Malady of the Mind
|
63830 - Malady of the Mind
|
||||||
@@ -3032,7 +3079,7 @@ void AddSC_boss_yoggsaron()
|
|||||||
new boss_yoggsaron_crusher_tentacle();
|
new boss_yoggsaron_crusher_tentacle();
|
||||||
new boss_yoggsaron_corruptor_tentacle();
|
new boss_yoggsaron_corruptor_tentacle();
|
||||||
new boss_yoggsaron_constrictor_tentacle();
|
new boss_yoggsaron_constrictor_tentacle();
|
||||||
new boss_yoggsaron_keeper();
|
RegisterUlduarCreatureAI(boss_yoggsaron_keeper);
|
||||||
new boss_yoggsaron_descend_portal();
|
new boss_yoggsaron_descend_portal();
|
||||||
new boss_yoggsaron_influence_tentacle();
|
new boss_yoggsaron_influence_tentacle();
|
||||||
new boss_yoggsaron_immortal_guardian();
|
new boss_yoggsaron_immortal_guardian();
|
||||||
@@ -3053,6 +3100,7 @@ void AddSC_boss_yoggsaron()
|
|||||||
new spell_yogg_saron_insane_periodic_trigger();
|
new spell_yogg_saron_insane_periodic_trigger();
|
||||||
new spell_yogg_saron_insane();
|
new spell_yogg_saron_insane();
|
||||||
new spell_yogg_saron_sanity_well();
|
new spell_yogg_saron_sanity_well();
|
||||||
|
RegisterSpellScript(spell_keeper_freya_summon_sanity_well);
|
||||||
new spell_yogg_saron_sanity_reduce();
|
new spell_yogg_saron_sanity_reduce();
|
||||||
new spell_yogg_saron_empowering_shadows();
|
new spell_yogg_saron_empowering_shadows();
|
||||||
new spell_yogg_saron_in_the_maws_of_the_old_god();
|
new spell_yogg_saron_in_the_maws_of_the_old_god();
|
||||||
|
|||||||
@@ -370,22 +370,6 @@ public:
|
|||||||
case NPC_MIMIRON_ACU:
|
case NPC_MIMIRON_ACU:
|
||||||
m_MimironACUguid = creature->GetGUID();
|
m_MimironACUguid = creature->GetGUID();
|
||||||
break;
|
break;
|
||||||
case NPC_FREYA_GOSSIP:
|
|
||||||
m_keepersGossipGUID[TYPE_FREYA - TYPE_FREYA] = creature->GetGUID();
|
|
||||||
ShowKeeperGossip(TYPE_FREYA, creature);
|
|
||||||
break;
|
|
||||||
case NPC_HODIR_GOSSIP:
|
|
||||||
m_keepersGossipGUID[TYPE_HODIR - TYPE_FREYA] = creature->GetGUID();
|
|
||||||
ShowKeeperGossip(TYPE_HODIR, creature);
|
|
||||||
break;
|
|
||||||
case NPC_THORIM_GOSSIP:
|
|
||||||
m_keepersGossipGUID[TYPE_THORIM - TYPE_FREYA] = creature->GetGUID();
|
|
||||||
ShowKeeperGossip(TYPE_THORIM, creature);
|
|
||||||
break;
|
|
||||||
case NPC_MIMIRON_GOSSIP:
|
|
||||||
m_keepersGossipGUID[TYPE_MIMIRON - TYPE_FREYA] = creature->GetGUID();
|
|
||||||
ShowKeeperGossip(TYPE_MIMIRON, creature);
|
|
||||||
break;
|
|
||||||
case NPC_ELDER_IRONBRANCH:
|
case NPC_ELDER_IRONBRANCH:
|
||||||
case NPC_ELDER_STONEBARK:
|
case NPC_ELDER_STONEBARK:
|
||||||
case NPC_ELDER_BRIGHTLEAF:
|
case NPC_ELDER_BRIGHTLEAF:
|
||||||
@@ -433,19 +417,6 @@ public:
|
|||||||
go->SetGoState(state);
|
go->SetGoState(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowKeeperGossip(uint8 type, Creature* cr, ObjectGuid guid = ObjectGuid::Empty)
|
|
||||||
{
|
|
||||||
if (!cr)
|
|
||||||
{
|
|
||||||
cr = instance->GetCreature(guid);
|
|
||||||
if (!cr)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool on = (GetData(type) == DONE && !(GetData(TYPE_WATCHERS) & (1 << (type - TYPE_FREYA))));
|
|
||||||
cr->SetVisible(on);
|
|
||||||
}
|
|
||||||
|
|
||||||
void OnGameObjectCreate(GameObject* gameObject) override
|
void OnGameObjectCreate(GameObject* gameObject) override
|
||||||
{
|
{
|
||||||
switch (gameObject->GetEntry())
|
switch (gameObject->GetEntry())
|
||||||
@@ -695,7 +666,6 @@ public:
|
|||||||
case TYPE_THORIM:
|
case TYPE_THORIM:
|
||||||
case TYPE_FREYA:
|
case TYPE_FREYA:
|
||||||
m_auiEncounter[type] = data;
|
m_auiEncounter[type] = data;
|
||||||
ShowKeeperGossip(type, nullptr, m_keepersGossipGUID[type - TYPE_FREYA]);
|
|
||||||
if (GetData(TYPE_MIMIRON) == DONE && GetData(TYPE_FREYA) == DONE && GetData(TYPE_HODIR) == DONE && GetData(TYPE_THORIM) == DONE)
|
if (GetData(TYPE_MIMIRON) == DONE && GetData(TYPE_FREYA) == DONE && GetData(TYPE_HODIR) == DONE && GetData(TYPE_THORIM) == DONE)
|
||||||
{
|
{
|
||||||
if (GameObject* go = instance->GetGameObject(m_keepersgateGUID))
|
if (GameObject* go = instance->GetGameObject(m_keepersgateGUID))
|
||||||
@@ -716,8 +686,11 @@ public:
|
|||||||
break;
|
break;
|
||||||
case TYPE_WATCHERS:
|
case TYPE_WATCHERS:
|
||||||
m_auiEncounter[type] |= 1 << data;
|
m_auiEncounter[type] |= 1 << data;
|
||||||
|
[[fallthrough]];
|
||||||
|
case EVENT_KEEPER_TELEPORTED:
|
||||||
|
if (Creature* sara = instance->GetCreature(m_saraGUID))
|
||||||
|
sara->AI()->DoAction(ACTION_SARA_UPDATE_SUMMON_KEEPERS);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DATA_MAGE_BARRIER:
|
case DATA_MAGE_BARRIER:
|
||||||
m_mageBarrier = data;
|
m_mageBarrier = data;
|
||||||
break;
|
break;
|
||||||
@@ -728,6 +701,7 @@ public:
|
|||||||
case EVENT_TOWER_OF_FLAMES_DESTROYED:
|
case EVENT_TOWER_OF_FLAMES_DESTROYED:
|
||||||
{
|
{
|
||||||
instance->LoadGrid(364.0f, -16.0f); //make sure leviathan is loaded
|
instance->LoadGrid(364.0f, -16.0f); //make sure leviathan is loaded
|
||||||
|
instance->LoadGrid(364.0f, 32.0f); //make sure Mimiron's and Thorim's Targetting Crystal are loaded
|
||||||
m_leviathanTowers[type - EVENT_TOWER_OF_LIFE_DESTROYED] = data;
|
m_leviathanTowers[type - EVENT_TOWER_OF_LIFE_DESTROYED] = data;
|
||||||
for (uint8 i = 0; i < 2; ++i)
|
for (uint8 i = 0; i < 2; ++i)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#include "GameObjectScript.h"
|
#include "GameObjectScript.h"
|
||||||
#include "Player.h"
|
#include "Player.h"
|
||||||
#include "ScriptedCreature.h"
|
#include "ScriptedCreature.h"
|
||||||
|
#include "PassiveAI.h"
|
||||||
#include "ScriptedGossip.h"
|
#include "ScriptedGossip.h"
|
||||||
#include "SpellAuraEffects.h"
|
#include "SpellAuraEffects.h"
|
||||||
#include "SpellScript.h"
|
#include "SpellScript.h"
|
||||||
@@ -51,7 +52,14 @@ enum Texts
|
|||||||
GOSSIP_MENU_CONFIRM = 10333,
|
GOSSIP_MENU_CONFIRM = 10333,
|
||||||
NPC_TEXT_CONFIRM = 14325,
|
NPC_TEXT_CONFIRM = 14325,
|
||||||
|
|
||||||
SAY_KEEPER_SELECTED = 1,
|
// Chosen
|
||||||
|
SAY_KEEPER_CHOSEN_TO_PLAYER = 0,
|
||||||
|
SAY_KEEPER_CHOSEN_ANNOUNCE = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum UldActions
|
||||||
|
{
|
||||||
|
ACTION_KEEPER_OUTRO = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum UldNPCs
|
enum UldNPCs
|
||||||
@@ -69,6 +77,8 @@ enum UldGameObjects
|
|||||||
|
|
||||||
enum UldSpells
|
enum UldSpells
|
||||||
{
|
{
|
||||||
|
SPELL_SIMPLE_TELEPORT = 12980,
|
||||||
|
SPELL_KEEPER_TELEPORT = 62940,
|
||||||
SPELL_SNOW_MOUND_PARTICLES = 64615
|
SPELL_SNOW_MOUND_PARTICLES = 64615
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -77,6 +87,68 @@ class npc_ulduar_keeper : public CreatureScript
|
|||||||
public:
|
public:
|
||||||
npc_ulduar_keeper() : CreatureScript("npc_ulduar_keeper_gossip") { }
|
npc_ulduar_keeper() : CreatureScript("npc_ulduar_keeper_gossip") { }
|
||||||
|
|
||||||
|
struct npc_ulduar_keeperAI : public NullCreatureAI
|
||||||
|
{
|
||||||
|
npc_ulduar_keeperAI(Creature* creature) : NullCreatureAI(creature) { }
|
||||||
|
|
||||||
|
void Reset() override
|
||||||
|
{
|
||||||
|
scheduler.Schedule(250ms, [this](TaskContext /*context*/)
|
||||||
|
{
|
||||||
|
DoCastSelf(SPELL_SIMPLE_TELEPORT);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoAction(int32 param) override
|
||||||
|
{
|
||||||
|
if (param == ACTION_KEEPER_OUTRO)
|
||||||
|
{
|
||||||
|
switch (me->GetEntry())
|
||||||
|
{
|
||||||
|
case NPC_FREYA_GOSSIP:
|
||||||
|
_keeper = KEEPER_FREYA;
|
||||||
|
break;
|
||||||
|
case NPC_HODIR_GOSSIP:
|
||||||
|
_keeper = KEEPER_HODIR;
|
||||||
|
break;
|
||||||
|
case NPC_MIMIRON_GOSSIP:
|
||||||
|
_keeper = KEEPER_MIMIRON;
|
||||||
|
break;
|
||||||
|
case NPC_THORIM_GOSSIP:
|
||||||
|
_keeper = KEEPER_THORIM;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
scheduler.Schedule(1s, [this](TaskContext /*context*/)
|
||||||
|
{
|
||||||
|
DoCastSelf(SPELL_KEEPER_TELEPORT);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override
|
||||||
|
{
|
||||||
|
if (spellInfo->Id == SPELL_TELEPORT)
|
||||||
|
{
|
||||||
|
me->DespawnOrUnsummon();
|
||||||
|
me->GetInstanceScript()->SetData(TYPE_WATCHERS, _keeper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(uint32 diff) override
|
||||||
|
{
|
||||||
|
scheduler.Update(diff);
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
uint8 _keeper;
|
||||||
|
};
|
||||||
|
|
||||||
|
CreatureAI* GetAI(Creature* creature) const override
|
||||||
|
{
|
||||||
|
return GetUlduarAI<npc_ulduar_keeperAI>(creature);
|
||||||
|
}
|
||||||
|
|
||||||
bool OnGossipHello(Player* player, Creature* creature) override
|
bool OnGossipHello(Player* player, Creature* creature) override
|
||||||
{
|
{
|
||||||
uint32 gossipMenuId = 0;
|
uint32 gossipMenuId = 0;
|
||||||
@@ -109,7 +181,6 @@ public:
|
|||||||
bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
|
bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
|
||||||
{
|
{
|
||||||
ClearGossipMenuFor(player);
|
ClearGossipMenuFor(player);
|
||||||
uint8 _keeper = 0;
|
|
||||||
switch (action)
|
switch (action)
|
||||||
{
|
{
|
||||||
case GOSSIP_ACTION_INFO_DEF+1:
|
case GOSSIP_ACTION_INFO_DEF+1:
|
||||||
@@ -118,34 +189,12 @@ public:
|
|||||||
break;
|
break;
|
||||||
case GOSSIP_ACTION_INFO_DEF+2:
|
case GOSSIP_ACTION_INFO_DEF+2:
|
||||||
{
|
{
|
||||||
switch (creature->GetEntry())
|
creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
||||||
{
|
|
||||||
case NPC_FREYA_GOSSIP:
|
|
||||||
creature->AI()->Talk(SAY_KEEPER_SELECTED);
|
|
||||||
_keeper = KEEPER_FREYA;
|
|
||||||
break;
|
|
||||||
case NPC_HODIR_GOSSIP:
|
|
||||||
creature->AI()->Talk(SAY_KEEPER_SELECTED);
|
|
||||||
_keeper = KEEPER_HODIR;
|
|
||||||
break;
|
|
||||||
case NPC_MIMIRON_GOSSIP:
|
|
||||||
creature->AI()->Talk(SAY_KEEPER_SELECTED);
|
|
||||||
_keeper = KEEPER_MIMIRON;
|
|
||||||
break;
|
|
||||||
case NPC_THORIM_GOSSIP:
|
|
||||||
creature->AI()->Talk(SAY_KEEPER_SELECTED);
|
|
||||||
_keeper = KEEPER_THORIM;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
creature->ReplaceAllNpcFlags(UNIT_NPC_FLAG_NONE);
|
|
||||||
CloseGossipMenuFor(player);
|
CloseGossipMenuFor(player);
|
||||||
|
|
||||||
if (creature->GetInstanceScript())
|
creature->AI()->Talk(SAY_KEEPER_CHOSEN_TO_PLAYER, player);
|
||||||
{
|
creature->AI()->Talk(SAY_KEEPER_CHOSEN_ANNOUNCE);
|
||||||
creature->GetInstanceScript()->SetData(TYPE_WATCHERS, _keeper);
|
creature->AI()->DoAction(ACTION_KEEPER_OUTRO);
|
||||||
creature->DespawnOrUnsummon(6000);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -284,6 +284,14 @@ enum UlduarMisc
|
|||||||
TIMER_ALGALON_TO_SUMMON = 200,
|
TIMER_ALGALON_TO_SUMMON = 200,
|
||||||
TIMER_ALGALON_SUMMONED = 100,
|
TIMER_ALGALON_SUMMONED = 100,
|
||||||
|
|
||||||
|
// Algalon the Observer, Freya, Hodir, Mimiron, Thorim, Gossip Keepers
|
||||||
|
SPELL_TELEPORT = 62940,
|
||||||
|
|
||||||
|
// Freya, Hodir, Mimiron, Thorim
|
||||||
|
EVENT_KEEPER_TELEPORTED = 62941,
|
||||||
|
|
||||||
|
// Yogg-Saron
|
||||||
|
ACTION_SARA_UPDATE_SUMMON_KEEPERS = 4,
|
||||||
KEEPER_FREYA = 0,
|
KEEPER_FREYA = 0,
|
||||||
KEEPER_HODIR = 1,
|
KEEPER_HODIR = 1,
|
||||||
KEEPER_MIMIRON = 2,
|
KEEPER_MIMIRON = 2,
|
||||||
|
|||||||
@@ -1287,19 +1287,21 @@ public:
|
|||||||
if (!summoner)
|
if (!summoner)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (summoner->GetTypeId() != TYPEID_UNIT)
|
if (summoner->GetTypeId() != TYPEID_PLAYER)
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
summoner->ToUnit()->CastSpell(summoner->ToUnit(), SPELL_WAITING_FOR_A_BOMBER, true);
|
Player* player = summoner->ToPlayer();
|
||||||
summoner->ToUnit()->CastSpell(summoner->ToUnit(), SPELL_FLIGHT_ORDERS, true);
|
if (!player)
|
||||||
|
return;
|
||||||
|
|
||||||
|
player->CastSpell(player, SPELL_WAITING_FOR_A_BOMBER, true);
|
||||||
|
player->CastSpell(player, SPELL_FLIGHT_ORDERS, true);
|
||||||
events.ScheduleEvent(EVENT_START_FLIGHT, 0);
|
events.ScheduleEvent(EVENT_START_FLIGHT, 0);
|
||||||
events.ScheduleEvent(EVENT_TAKE_PASSENGER, 3000);
|
events.ScheduleEvent(EVENT_TAKE_PASSENGER, 3000);
|
||||||
me->SetCanFly(true);
|
me->SetCanFly(true);
|
||||||
me->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
me->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
||||||
me->SetSpeed(MOVE_FLIGHT, 0.1f);
|
me->SetSpeed(MOVE_FLIGHT, 0.1f);
|
||||||
me->SetFaction(summoner->ToUnit()->GetFaction());
|
me->SetFaction(player->GetFaction());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DamageTaken(Unit* who, uint32&, DamageEffectType, SpellSchoolMask) override
|
void DamageTaken(Unit* who, uint32&, DamageEffectType, SpellSchoolMask) override
|
||||||
|
|||||||
@@ -472,7 +472,7 @@ struct boss_kaelthas : public BossAI
|
|||||||
{
|
{
|
||||||
DoCastRandomTarget(SPELL_FLAME_STRIKE, 0, 100.0f);
|
DoCastRandomTarget(SPELL_FLAME_STRIKE, 0, 100.0f);
|
||||||
}, 30250ms, 50650ms);
|
}, 30250ms, 50650ms);
|
||||||
ScheduleTimedEvent(71000ms, [&]
|
ScheduleTimedEvent(50000ms, [&]
|
||||||
{
|
{
|
||||||
Talk(SAY_SUMMON_PHOENIX);
|
Talk(SAY_SUMMON_PHOENIX);
|
||||||
DoCastSelf(SPELL_PHOENIX);
|
DoCastSelf(SPELL_PHOENIX);
|
||||||
|
|||||||
@@ -439,9 +439,6 @@ enum EnshlavedNetherwingDrake
|
|||||||
NPC_DRAGONMAW_WRANGLER = 21717,
|
NPC_DRAGONMAW_WRANGLER = 21717,
|
||||||
NPC_ESCAPE_DUMMY = 22317,
|
NPC_ESCAPE_DUMMY = 22317,
|
||||||
|
|
||||||
EVENT_TAKE_OFF = 1,
|
|
||||||
EVENT_CREDIT_PLAYER = 2,
|
|
||||||
|
|
||||||
// Point
|
// Point
|
||||||
POINT_DESPAWN = 1
|
POINT_DESPAWN = 1
|
||||||
};
|
};
|
||||||
@@ -451,18 +448,14 @@ struct npc_enslaved_netherwing_drake : public ScriptedAI
|
|||||||
public:
|
public:
|
||||||
npc_enslaved_netherwing_drake(Creature* creature) : ScriptedAI(creature)
|
npc_enslaved_netherwing_drake(Creature* creature) : ScriptedAI(creature)
|
||||||
{
|
{
|
||||||
Tapped = false;
|
_tapped = false;
|
||||||
Reset();
|
Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectGuid PlayerGUID;
|
|
||||||
bool Tapped;
|
|
||||||
|
|
||||||
Player* GetPlayer() { return ObjectAccessor::GetPlayer(*me, PlayerGUID); }
|
|
||||||
|
|
||||||
void Reset() override
|
void Reset() override
|
||||||
{
|
{
|
||||||
if (!Tapped)
|
scheduler.CancelAll();
|
||||||
|
if (!_tapped)
|
||||||
{
|
{
|
||||||
me->RestoreFaction();
|
me->RestoreFaction();
|
||||||
me->SetReactState(REACT_AGGRESSIVE);
|
me->SetReactState(REACT_AGGRESSIVE);
|
||||||
@@ -474,9 +467,8 @@ public:
|
|||||||
|
|
||||||
void JustDied(Unit* /*killer*/) override
|
void JustDied(Unit* /*killer*/) override
|
||||||
{
|
{
|
||||||
Tapped = false;
|
_tapped = false;
|
||||||
me->RestoreFaction();
|
me->RestoreFaction();
|
||||||
events.CancelEvent(EVENT_TAKE_OFF);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpellHit(Unit* caster, SpellInfo const* spell) override
|
void SpellHit(Unit* caster, SpellInfo const* spell) override
|
||||||
@@ -485,20 +477,45 @@ public:
|
|||||||
if (!playerCaster)
|
if (!playerCaster)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (spell->Id == SPELL_HIT_FORCE_OF_NELTHARAKU && !Tapped &&
|
if (spell->Id == SPELL_HIT_FORCE_OF_NELTHARAKU && !_tapped &&
|
||||||
playerCaster->GetQuestStatus(QUEST_THE_FORCE_OF_NELTHARAKU) == QUEST_STATUS_INCOMPLETE)
|
playerCaster->GetQuestStatus(QUEST_THE_FORCE_OF_NELTHARAKU) == QUEST_STATUS_INCOMPLETE)
|
||||||
{
|
{
|
||||||
Tapped = true;
|
_tapped = true;
|
||||||
PlayerGUID = caster->GetGUID();
|
_playerGUID = caster->GetGUID();
|
||||||
|
|
||||||
|
scheduler.Schedule(2s, [this](TaskContext)
|
||||||
|
{
|
||||||
me->SetFaction(FACTION_FLAYER_HUNTER); // Not sure if this is correct, it was taken off of Mordenai.
|
me->SetFaction(FACTION_FLAYER_HUNTER); // Not sure if this is correct, it was taken off of Mordenai.
|
||||||
|
|
||||||
if (Unit* Dragonmaw = me->FindNearestCreature(NPC_DRAGONMAW_SUBJUGATOR, 25.0f))
|
if (Unit* dragonmaw = me->FindNearestCreature(NPC_DRAGONMAW_SUBJUGATOR, 25.0f))
|
||||||
AttackStart(Dragonmaw);
|
AttackStart(dragonmaw);
|
||||||
else if (Unit* Dragonmaw = me->FindNearestCreature(NPC_DRAGONMAW_WRANGLER, 25.0f))
|
else if (Unit* dragonmaw = me->FindNearestCreature(NPC_DRAGONMAW_WRANGLER, 25.0f))
|
||||||
AttackStart(Dragonmaw);
|
AttackStart(dragonmaw);
|
||||||
|
scheduler.Schedule(2s, [this](TaskContext)
|
||||||
|
{
|
||||||
|
_tapped = false;
|
||||||
|
Position pos;
|
||||||
|
if (Unit* escapeDummy = me->FindNearestCreature(NPC_ESCAPE_DUMMY, 30.0f))
|
||||||
|
pos = escapeDummy->GetPosition();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pos = me->GetRandomNearPosition(20.0f);
|
||||||
|
pos.m_positionZ += 25.0f;
|
||||||
|
}
|
||||||
|
|
||||||
events.ScheduleEvent(EVENT_TAKE_OFF, 2s);
|
me->SetDisableGravity(true);
|
||||||
|
me->GetMotionMaster()->MovePoint(POINT_DESPAWN, pos);
|
||||||
|
me->SetReactState(REACT_PASSIVE);
|
||||||
|
scheduler.Schedule(100ms, [this](TaskContext)
|
||||||
|
{
|
||||||
|
if (Player* player = _GetPlayer())
|
||||||
|
{
|
||||||
|
DoCast(player, SPELL_FORCE_OF_NELTHARAKU, true);
|
||||||
|
}
|
||||||
|
me->DespawnOrUnsummon(3s, 0s);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -514,40 +531,21 @@ public:
|
|||||||
|
|
||||||
void UpdateAI(uint32 diff) override
|
void UpdateAI(uint32 diff) override
|
||||||
{
|
{
|
||||||
events.Update(diff);
|
scheduler.Update(diff);
|
||||||
|
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
{
|
|
||||||
switch (events.ExecuteEvent())
|
|
||||||
{
|
|
||||||
case EVENT_TAKE_OFF:
|
|
||||||
{
|
|
||||||
Tapped = false;
|
|
||||||
Position pos;
|
|
||||||
if (Unit* EscapeDummy = me->FindNearestCreature(NPC_ESCAPE_DUMMY, 30))
|
|
||||||
pos = EscapeDummy->GetPosition();
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pos = me->GetRandomNearPosition(20);
|
|
||||||
pos.m_positionZ += 25;
|
|
||||||
}
|
|
||||||
|
|
||||||
me->SetDisableGravity(true);
|
|
||||||
me->GetMotionMaster()->MovePoint(POINT_DESPAWN, pos);
|
|
||||||
me->SetReactState(REACT_PASSIVE);
|
|
||||||
events.ScheduleEvent(EVENT_CREDIT_PLAYER, 100ms);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case EVENT_CREDIT_PLAYER:
|
|
||||||
DoCast(GetPlayer(), SPELL_FORCE_OF_NELTHARAKU, true);
|
|
||||||
me->DespawnOrUnsummon(3s, 0s);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||||
|
return;
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
|
private:
|
||||||
|
bool _tapped;
|
||||||
|
ObjectGuid _playerGUID;
|
||||||
|
|
||||||
|
Player* _GetPlayer() { return ObjectAccessor::GetPlayer(*me, _playerGUID); }
|
||||||
};
|
};
|
||||||
|
|
||||||
/*#####
|
/*#####
|
||||||
|
|||||||
@@ -628,6 +628,7 @@ class spell_gen_black_magic_enchant : public AuraScript
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 53642 - The Might of Mograine
|
// 53642 - The Might of Mograine
|
||||||
|
// 64174 - Protective Gaze
|
||||||
class spell_gen_area_aura_select_players : public AuraScript
|
class spell_gen_area_aura_select_players : public AuraScript
|
||||||
{
|
{
|
||||||
PrepareAuraScript(spell_gen_area_aura_select_players);
|
PrepareAuraScript(spell_gen_area_aura_select_players);
|
||||||
@@ -642,6 +643,24 @@ class spell_gen_area_aura_select_players : public AuraScript
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 62650 - Fortitude of Frost
|
||||||
|
// 62670 - Resilience of Nature
|
||||||
|
// 62671 - Speed of Invention
|
||||||
|
// 62702 - Fury of the Storm
|
||||||
|
class spell_gen_area_aura_select_players_and_caster : public AuraScript
|
||||||
|
{
|
||||||
|
PrepareAuraScript(spell_gen_area_aura_select_players_and_caster);
|
||||||
|
|
||||||
|
bool CheckAreaTarget(Unit* target)
|
||||||
|
{
|
||||||
|
return target->GetTypeId() == TYPEID_PLAYER || target == GetCaster();
|
||||||
|
}
|
||||||
|
void Register() override
|
||||||
|
{
|
||||||
|
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_gen_area_aura_select_players_and_caster::CheckAreaTarget);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/* 29883 - Blink (spell_gen_select_target_count_15_1)
|
/* 29883 - Blink (spell_gen_select_target_count_15_1)
|
||||||
38573 - Spore Drop Effect (spell_gen_select_target_count_15_1)
|
38573 - Spore Drop Effect (spell_gen_select_target_count_15_1)
|
||||||
38633 - Arcane Volley (spell_gen_select_target_count_15_1)
|
38633 - Arcane Volley (spell_gen_select_target_count_15_1)
|
||||||
@@ -5134,6 +5153,43 @@ class spell_gen_choking_vines : public AuraScript
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 28865 - Consumption
|
||||||
|
class spell_gen_consumption : public SpellScript
|
||||||
|
{
|
||||||
|
PrepareSpellScript(spell_gen_consumption);
|
||||||
|
|
||||||
|
void CalculateDamage(SpellEffIndex /*effIndex*/)
|
||||||
|
{
|
||||||
|
Map* map = GetCaster()->GetMap();
|
||||||
|
if (!map)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int32 value = 0;
|
||||||
|
if (map->GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL) // NAXX25 N
|
||||||
|
{
|
||||||
|
value = urand(4500, 4700);
|
||||||
|
}
|
||||||
|
else if (map->GetId() == 533) // NAXX10 N
|
||||||
|
{
|
||||||
|
value = urand(3000, 3200);
|
||||||
|
}
|
||||||
|
else if (map->GetId() == 532) // Karazhan
|
||||||
|
{
|
||||||
|
value = urand(1110, 1310);
|
||||||
|
}
|
||||||
|
if (value)
|
||||||
|
{
|
||||||
|
SetEffectValue(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register() override
|
||||||
|
{
|
||||||
|
OnEffectLaunchTarget += SpellEffectFn(spell_gen_consumption::CalculateDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void AddSC_generic_spell_scripts()
|
void AddSC_generic_spell_scripts()
|
||||||
{
|
{
|
||||||
RegisterSpellScript(spell_silithyst);
|
RegisterSpellScript(spell_silithyst);
|
||||||
@@ -5156,6 +5212,7 @@ void AddSC_generic_spell_scripts()
|
|||||||
RegisterSpellScript(spell_gen_disabled_above_63);
|
RegisterSpellScript(spell_gen_disabled_above_63);
|
||||||
RegisterSpellScript(spell_gen_black_magic_enchant);
|
RegisterSpellScript(spell_gen_black_magic_enchant);
|
||||||
RegisterSpellScript(spell_gen_area_aura_select_players);
|
RegisterSpellScript(spell_gen_area_aura_select_players);
|
||||||
|
RegisterSpellScript(spell_gen_area_aura_select_players_and_caster);
|
||||||
RegisterSpellScriptWithArgs(spell_gen_select_target_count, "spell_gen_select_target_count_15_1", TARGET_UNIT_SRC_AREA_ENEMY, 1);
|
RegisterSpellScriptWithArgs(spell_gen_select_target_count, "spell_gen_select_target_count_15_1", TARGET_UNIT_SRC_AREA_ENEMY, 1);
|
||||||
RegisterSpellScriptWithArgs(spell_gen_select_target_count, "spell_gen_select_target_count_15_2", TARGET_UNIT_SRC_AREA_ENEMY, 2);
|
RegisterSpellScriptWithArgs(spell_gen_select_target_count, "spell_gen_select_target_count_15_2", TARGET_UNIT_SRC_AREA_ENEMY, 2);
|
||||||
RegisterSpellScriptWithArgs(spell_gen_select_target_count, "spell_gen_select_target_count_15_5", TARGET_UNIT_SRC_AREA_ENEMY, 5);
|
RegisterSpellScriptWithArgs(spell_gen_select_target_count, "spell_gen_select_target_count_15_5", TARGET_UNIT_SRC_AREA_ENEMY, 5);
|
||||||
@@ -5287,5 +5344,6 @@ void AddSC_generic_spell_scripts()
|
|||||||
RegisterSpellScript(spell_gen_jubling_cooldown);
|
RegisterSpellScript(spell_gen_jubling_cooldown);
|
||||||
RegisterSpellScript(spell_gen_yehkinya_bramble);
|
RegisterSpellScript(spell_gen_yehkinya_bramble);
|
||||||
RegisterSpellScript(spell_gen_choking_vines);
|
RegisterSpellScript(spell_gen_choking_vines);
|
||||||
|
RegisterSpellScript(spell_gen_consumption);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user