Merge branch 'Playerbot' of https://github.com/ZhengPeiRu21/azerothcore-wotlk into Playerbot

This commit is contained in:
郑佩茹
2022-06-16 10:06:30 -06:00
125 changed files with 5441 additions and 1838 deletions
+48
View File
@@ -0,0 +1,48 @@
name: build-db
on:
push:
branches:
- 'master' # only default branch
pull_request:
concurrency:
group: ${{ github.head_ref }} || concat(${{ github.ref }}, ${{ github.workflow }})
cancel-in-progress: true
jobs:
build:
strategy:
fail-fast: false
matrix:
# the result of the matrix will be the combination of all attributes, so we get os*compiler*modules builds
os: [ubuntu-latest]
compiler: [clang12]
runs-on: ${{ matrix.os }}
name: ${{ matrix.compiler }}
env:
COMPILER: ${{ matrix.compiler }}
steps:
- uses: actions/checkout@v2
- name: Cache
uses: actions/cache@v3
env:
cache-name: cache-db
with:
path: var/ccache
key: ${{ env.cache-name }}-${{ matrix.os }}-${{ matrix.compiler }}-${{ github.ref }}-${{ github.sha }}
restore-keys: |
${{ env.cache-name }}-${{ matrix.os }}-${{ matrix.compiler }}-${{ github.ref }}-
${{ env.cache-name }}-${{ matrix.os }}-${{ matrix.compiler }}-
${{ env.cache-name }}-${{ matrix.os }}-
- name: Configure OS
run: source ./acore.sh install-deps
env:
CONTINUOUS_INTEGRATION: true
- name: Create conf/config.sh
run: source ./apps/ci/ci-conf-db.sh
- name: Build
run: source ./apps/ci/ci-compile.sh
- name: Process pending sql
run: bash bin/acore-db-pendings
- name: Dry run
run: source ./apps/ci/ci-dry-run.sh dbimport
+2
View File
@@ -50,6 +50,8 @@ jobs:
CONTINUOUS_INTEGRATION: true
- name: Create conf/config.sh
run: source ./apps/ci/ci-conf-core.sh
- name: Process pending sql
run: bash bin/acore-db-pendings
- name: Build
run: source ./apps/ci/ci-compile.sh
- name: Dry run
+2
View File
@@ -43,6 +43,8 @@ jobs:
CONTINUOUS_INTEGRATION: true
- name: Create conf/config.sh
run: source ./apps/ci/ci-conf-core.sh
- name: Process pending sql
run: bash bin/acore-db-pendings
- name: Build
run: source ./apps/ci/ci-compile.sh
- name: Dry run
+46
View File
@@ -0,0 +1,46 @@
name: tools
on:
push:
branches:
- 'master'
pull_request:
concurrency:
group: ${{ github.head_ref }} || concat(${{ github.ref }}, ${{ github.workflow }})
cancel-in-progress: true
jobs:
build:
strategy:
fail-fast: false
matrix:
# the result of the matrix will be the combination of all attributes, so we get os*compiler builds
os: [ubuntu-20.04]
compiler: [clang]
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-${{ matrix.compiler }}
env:
COMPILER: ${{ matrix.compiler }}
if: github.repository == 'azerothcore/azerothcore-wotlk'
steps:
- uses: actions/checkout@v2
- name: Cache
uses: actions/cache@v3
env:
cache-name: cache-tools
with:
path: var/ccache
key: ${{ env.cache-name }}-${{ matrix.os }}-${{ matrix.compiler }}-${{ github.ref }}-${{ github.sha }}
restore-keys: |
${{ env.cache-name }}-${{ matrix.os }}-${{ matrix.compiler }}-${{ github.ref }}-
${{ env.cache-name }}-${{ matrix.os }}-${{ matrix.compiler }}-
${{ env.cache-name }}-${{ matrix.os }}-
- name: Configure OS
run: source ./acore.sh install-deps
env:
CONTINUOUS_INTEGRATION: true
- name: Create conf/config.sh
run: source ./apps/ci/ci-conf-tools.sh
- name: Build
run: source ./apps/ci/ci-compile.sh
+2 -2
View File
@@ -17,7 +17,7 @@ jobs:
matrix:
os: [windows-latest]
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-${{ matrix.compiler }}
name: ${{ matrix.os }}
env:
BOOST_ROOT: C:\local\boost_1_79_0
if: github.repository == 'azerothcore/azerothcore-wotlk' && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
@@ -29,7 +29,7 @@ jobs:
shell: bash
run: |
mkdir -p build && cd build
cmake .. -DTOOLS=ON
cmake .. -DTOOLS_BUILD=all
cmake --build . --config Release --parallel 4
- name: Copy dll files
shell: bash
+2 -1
View File
@@ -7,8 +7,9 @@ MTHREADS=$(($(grep -c ^processor /proc/cpuinfo) + 2))
CWARNINGS=ON
CDEBUG=OFF
CTYPE=Release
CTOOLS_BUILD=all
CTOOLS_BUILD=none
CSCRIPTS=static
CMODULES=static
CBUILD_TESTING=ON
CSCRIPTPCH=OFF
CCOREPCH=OFF
+39
View File
@@ -0,0 +1,39 @@
#!/bin/bash
set -e
cat >>conf/config.sh <<CONFIG_SH
MTHREADS=$(($(grep -c ^processor /proc/cpuinfo) + 2))
CWARNINGS=ON
CDEBUG=OFF
CTYPE=Release
CAPPS_BUILD=none
CTOOLS_BUILD=db-only
CSCRIPTPCH=OFF
CCOREPCH=OFF
CCUSTOMOPTIONS='-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror"'
DB_CHARACTERS_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
DB_AUTH_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
DB_WORLD_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
CONFIG_SH
case $COMPILER in
# this is in order to use the "default" clang version of the OS, without forcing a specific version
"clang" )
time sudo apt-get install -y clang
echo "CCOMPILERC=\"clang\"" >> ./conf/config.sh
echo "CCOMPILERCXX=\"clang++\"" >> ./conf/config.sh
;;
"clang12" )
time sudo apt-get install -y clang-12
echo "CCOMPILERC=\"clang-12\"" >> ./conf/config.sh
echo "CCOMPILERCXX=\"clang++-12\"" >> ./conf/config.sh
;;
* )
echo "Unknown compiler $COMPILER"
exit 1
;;
esac
-1
View File
@@ -7,7 +7,6 @@ MTHREADS=$(($(grep -c ^processor /proc/cpuinfo) + 2))
CWARNINGS=ON
CDEBUG=OFF
CTYPE=Release
CSCRIPTS=static
CAPPS_BUILD=none
CTOOLS_BUILD=maps-only
CSCRIPTPCH=OFF
+1 -2
View File
@@ -14,8 +14,7 @@
set(SCRIPTS_AVAILABLE_OPTIONS none static dynamic minimal-static minimal-dynamic)
set(MODULES_AVAILABLE_OPTIONS none static dynamic)
set(BUILD_APPS_AVAILABLE_OPTIONS none all auth-only world-only)
# set(BUILD_TOOLS_AVAILABLE_OPTIONS none all db-only maps-only) # DB import PR
set(BUILD_TOOLS_AVAILABLE_OPTIONS none all maps-only)
set(BUILD_TOOLS_AVAILABLE_OPTIONS none all db-only maps-only)
set(SCRIPTS "static" CACHE STRING "Build core with scripts")
set(MODULES "static" CACHE STRING "Build core with modules")
+2 -2
View File
@@ -70,8 +70,8 @@ CTYPE=${CTYPE:-Release}
# compile scripts
CSCRIPTS=${CSCRIPTS:-static}
# compile scripts
CMODULES=${CMODULES:-none}
# compile modules
CMODULES=${CMODULES:-static}
# compile unit tests
CBUILD_TESTING=OFF
@@ -0,0 +1,11 @@
-- DB update 2022_05_30_02 -> 2022_06_02_00
--
DELETE FROM `command` WHERE `name` IN ("deserter instance add", "deserter instance remove", "deserter instance remove all", "deserter bg add", "deserter bg remove", "deserter bg remove all");
INSERT INTO `command` (`name`, `security`, `help`) VALUES
("deserter instance add", 3, "Syntax: .deserter instance add $playerName $time \n\n Adds the instance deserter debuff to a player or your target with $time duration."),
("deserter instance remove", 3, "Syntax: .deserter instance remove $playerName \n\n Removes the instance deserter debuff from a player or your target."),
("deserter instance remove all", 3, "Syntax: .deserter instance remove all \n\n Removes the instance deserter debuff from all online and offline players."),
("deserter bg add", 3, "Syntax: .deserter bg add $playerName $time \n\n Adds the bg deserter debuff to a player or your target with $time duration."),
("deserter bg remove", 3, "Syntax: .deserter bg remove $playerName \n\n Removes the bg deserter debuff from a player or your target."),
("deserter bg remove all", 3, "Syntax: .deserter bg remove all \n\n Removes the bg deserter debuff from all online and offline players.");
@@ -0,0 +1,14 @@
-- DB update 2022_06_02_00 -> 2022_06_02_01
-- Condition for Loh'atu gossip
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=3481;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(15,3481,0,0,0,8,0,5535,0,0,0,0,0,'','Show gossip option 0 if player has quest ''Spiritual Unrest'' rewarded'),
(15,3481,0,0,0,8,0,5536,0,0,0,0,0,'','Show gossip option 0 if player has quest ''A Land Filled with Hatred'' rewarded'),
(15,3481,1,0,0,8,0,5535,0,0,0,0,0,'','Show gossip option 1 if player has quest ''Spiritual Unrest'' rewarded'),
(15,3481,1,0,0,8,0,5536,0,0,0,0,0,'','Show gossip option 1 if player has quest ''A Land Filled with Hatred'' rewarded'),
(15,3481,2,0,0,8,0,5535,0,0,0,0,0,'','Show gossip option 2 if player has quest ''Spiritual Unrest'' rewarded'),
(15,3481,2,0,0,8,0,5536,0,0,0,0,0,'','Show gossip option 2 if player has quest ''A Land Filled with Hatred'' rewarded'),
(15,3481,3,0,0,8,0,5535,0,0,0,0,0,'','Show gossip option 3 if player has quest ''Spiritual Unrest'' rewarded'),
(15,3481,3,0,0,8,0,5536,0,0,0,0,0,'','Show gossip option 3 if player has quest ''A Land Filled with Hatred'' rewarded'),
(15,3481,4,0,0,8,0,5535,0,0,0,0,0,'','Show gossip option 4 if player has quest ''Spiritual Unrest'' rewarded'),
(15,3481,4,0,0,8,0,5536,0,0,0,0,0,'','Show gossip option 4 if player has quest ''A Land Filled with Hatred'' rewarded');
@@ -0,0 +1,17 @@
-- DB update 2022_06_02_01 -> 2022_06_03_00
DELETE FROM `spell_proc_event` WHERE `entry` = '71602';
DELETE FROM `spell_proc_event` WHERE `entry` = '75465';
DELETE FROM `spell_proc_event` WHERE `entry` = '71845';
DELETE FROM `spell_proc_event` WHERE `entry` = '71846';
DELETE FROM `spell_proc_event` WHERE `entry` = '72419';
DELETE FROM `spell_proc_event` WHERE `entry` = '75474';
UPDATE `item_template` SET `spellppmRate_1` = 10 WHERE (`entry` = 50353);
UPDATE `item_template` SET `spellppmRate_1` = 10 WHERE (`entry` = 50348);
UPDATE `item_template` SET `spellppmRate_1` = 2 WHERE (`entry` = 49992);
UPDATE `item_template` SET `spellppmRate_1` = 2 WHERE (`entry` = 50648);
UPDATE `item_template` SET `spellppmRate_1` = 10 WHERE (`entry` = 50400);
UPDATE `item_template` SET `spellppmRate_1` = 10 WHERE (`entry` = 50399);
UPDATE `item_template` SET `spellppmRate_1` = 10 WHERE (`entry` = 54572);
UPDATE `item_template` SET `spellppmRate_1` = 10 WHERE (`entry` = 54588);
@@ -0,0 +1,9 @@
-- DB update 2022_06_03_00 -> 2022_06_03_01
--
UPDATE `creature_template` SET `speed_run` = 1.14286, `speed_walk` = 1.32 WHERE `entry` = 14517;
DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_batrider_bomb';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(23970, 'spell_batrider_bomb');
UPDATE `gameobject_template` SET `Data2` = 6 WHERE `entry` = 180125;
+582
View File
@@ -0,0 +1,582 @@
-- DB update 2022_06_03_01 -> 2022_06_04_00
/* Set correct movement flags for Buzzard creatures */
UPDATE `creature_template_movement` SET `Ground` = 2 WHERE `CreatureId` IN (2830, 2829);
/* Buzzard - GUID 7006 */
SET @NPC := 7006;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -6811.91, `position_y` = -3616.86, `position_z` = 247.556, `orientation` = 2.74597 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`) VALUES
(@PATH, 1, -6809.25, -3596.17, 243.167, 100.0, 0, 2),
(@PATH, 2, -6797.86, -3589.94, 241.792, 100.0, 0, 2),
(@PATH, 3, -6758.9, -3579.09, 243.121, 100.0, 0, 2),
(@PATH, 4, -6745.04, -3555.24, 245.206, 100.0, 5000, 2),
(@PATH, 5, -6770.95, -3532.25, 245.837, 100.0, 0, 2),
(@PATH, 6, -6797.96, -3506.01, 242.788, 100.0, 0, 2),
(@PATH, 7, -6799.65, -3463.84, 241.792, 100.0, 0, 2),
(@PATH, 8, -6760.58, -3444.72, 241.988, 100.0, 0, 2),
(@PATH, 9, -6735.39, -3412.09, 241.792, 100.0, 0, 2),
(@PATH, 10, -6720.83, -3385.17, 241.785, 100.0, 0, 2),
(@PATH, 11, -6697.01, -3374.81, 243.211, 100.0, 0, 2),
(@PATH, 12, -6720.83, -3385.17, 241.785, 100.0, 0, 2),
(@PATH, 13, -6735.39, -3412.09, 241.792, 100.0, 0, 2),
(@PATH, 14, -6760.58, -3444.72, 241.988, 100.0, 0, 2),
(@PATH, 15, -6799.65, -3463.84, 241.792, 100.0, 0, 2),
(@PATH, 16, -6797.96, -3506.01, 242.788, 100.0, 0, 2),
(@PATH, 17, -6770.95, -3532.25, 245.837, 100.0, 0, 2),
(@PATH, 18, -6745.04, -3555.24, 245.206, 100.0, 0, 2),
(@PATH, 19, -6758.9, -3579.09, 243.121, 100.0, 0, 2),
(@PATH, 20, -6797.86, -3589.94, 241.792, 100.0, 0, 2),
(@PATH, 21, -6809.25, -3596.17, 243.167, 100.0, 0, 2),
(@PATH, 22, -6814.66, -3615.71, 247.226, 100.0, 0, 2);
/* Buzzard - GUID 7137 */
SET @NPC := 7137;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -7112.69, `position_y` = -3521.0, `position_z` = 246.566, `orientation` = 5.30948 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`) VALUES
(@PATH, 1, -7077.76, -3543.48, 241.898, 100.0, 0, 2),
(@PATH, 2, -7045.7, -3551.22, 243.829, 100.0, 0, 2),
(@PATH, 3, -7015.01, -3551.6, 243.641, 100.0, 0, 2),
(@PATH, 4, -6982.05, -3518.47, 242.542, 100.0, 0, 2),
(@PATH, 5, -6968.26, -3491.34, 241.792, 100.0, 0, 2),
(@PATH, 6, -6940.34, -3458.93, 241.792, 100.0, 0, 2),
(@PATH, 7, -6921.61, -3465.03, 242.421, 100.0, 0, 2),
(@PATH, 8, -6878.95, -3466.98, 244.479, 100.0, 0, 2),
(@PATH, 9, -6851.05, -3453.28, 244.063, 100.0, 0, 2),
(@PATH, 10, -6826.14, -3458.7, 244.067, 100.0, 0, 2),
(@PATH, 11, -6784.65, -3464.25, 241.792, 100.0, 0, 2),
(@PATH, 12, -6754.12, -3479.79, 242.417, 100.0, 0, 2),
(@PATH, 13, -6715.67, -3483.13, 241.924, 100.0, 0, 2),
(@PATH, 14, -6686.95, -3487.32, 252.35699999999997, 100.0, 0, 2),
(@PATH, 15, -6715.67, -3483.13, 241.799, 100.0, 0, 2),
(@PATH, 16, -6754.12, -3479.79, 242.417, 100.0, 0, 2),
(@PATH, 17, -6784.65, -3464.25, 241.792, 100.0, 0, 2),
(@PATH, 18, -6826.14, -3458.7, 244.067, 100.0, 0, 2),
(@PATH, 19, -6851.05, -3453.28, 244.063, 100.0, 0, 2),
(@PATH, 20, -6878.95, -3466.98, 244.479, 100.0, 0, 2),
(@PATH, 21, -6921.61, -3465.03, 242.421, 100.0, 0, 2),
(@PATH, 22, -6940.34, -3458.93, 241.792, 100.0, 0, 2),
(@PATH, 23, -6968.26, -3491.34, 241.792, 100.0, 0, 2),
(@PATH, 24, -6982.05, -3518.47, 242.542, 100.0, 0, 2),
(@PATH, 25, -7015.01, -3551.6, 243.641, 100.0, 0, 2),
(@PATH, 26, -7045.7, -3551.22, 243.829, 100.0, 0, 2),
(@PATH, 27, -7077.76, -3543.48, 241.898, 100.0, 0, 2),
(@PATH, 28, -7107.82, -3528.15, 245.41, 100.0, 0, 2);
/* Shadowforge Surveyor - GUID 7220 */
SET @NPC := 7220;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -6144.04, -3081.53, 225.98, 100.0, 0),
(@PATH, 2, -6146.38, -3077.72, 225.765, 100.0, 0),
(@PATH, 3, -6149.53, -3071.44, 226.486, 100.0, 0),
(@PATH, 4, -6152.11, -3068.48, 226.113, 100.0, 0),
(@PATH, 5, -6154.74, -3063.19, 225.002, 100.0, 0),
(@PATH, 6, -6155.24, -3055.54, 224.84, 100.0, 0),
(@PATH, 7, -6154.36, -3048.77, 224.491, 100.0, 0),
(@PATH, 8, -6150.64, -3042.61, 224.529, 100.0, 0),
(@PATH, 9, -6144.75, -3037.45, 224.996, 100.0, 0),
(@PATH, 10, -6137.22, -3033.51, 223.743, 100.0, 0),
(@PATH, 11, -6144.75, -3037.45, 224.996, 100.0, 0),
(@PATH, 12, -6150.64, -3042.61, 224.529, 100.0, 0),
(@PATH, 13, -6154.36, -3048.77, 224.491, 100.0, 0),
(@PATH, 14, -6155.24, -3055.54, 224.84, 100.0, 0),
(@PATH, 15, -6154.85, -3062.72, 224.862, 100.0, 0),
(@PATH, 16, -6152.16, -3068.39, 226.126, 100.0, 0),
(@PATH, 17, -6149.53, -3071.44, 226.486, 100.0, 0),
(@PATH, 18, -6146.38, -3077.72, 225.765, 100.0, 0),
(@PATH, 19, -6144.04, -3081.53, 225.98, 100.0, 0),
(@PATH, 20, -6141.79, -3087.05, 225.732, 100.0, 0);
/* Shadowforge Digger - GUID 7224 */
SET @NPC := 7224;
SET @PATH := @NPC * 10;
UPDATE `creature_addon` set `path_id` = @PATH WHERE `guid` = @NPC;
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -6154.46, -3053.13, 224.826, 100.0, 0),
(@PATH, 2, -6154.06, -3046.47, 224.652, 100.0, 0),
(@PATH, 3, -6155.4, -3043.88, 224.422, 2.28, 45000),
(@PATH, 4, -6155.82, -3055.49, 224.807, 100.0, 0),
(@PATH, 5, -6153.58, -3059.57, 224.93, 100.0, 0),
(@PATH, 6, -6151.7, -3060.31, 225.245, 0.471239, 45000);
/* Buzzard - GUID 7251 */
SET @NPC := 7251;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -6883.96, `position_y` = -3329.96, `position_z` = 248.58, `orientation` = 0.251015 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`) VALUES
(@PATH, 1, -6888.0, -3356.21, 243.799, 100.0, 0, 2),
(@PATH, 2, -6901.86, -3377.27, 242.131, 100.0, 0, 2),
(@PATH, 3, -6933.3, -3395.66, 242.587, 100.0, 0, 2),
(@PATH, 4, -6933.27, -3431.34, 242.621, 100.0, 0, 2),
(@PATH, 5, -6924.07, -3460.16, 242.376, 100.0, 0, 2),
(@PATH, 6, -6951.56, -3493.01, 241.917, 100.0, 0, 2),
(@PATH, 7, -6944.84, -3526.17, 241.792, 100.0, 0, 2),
(@PATH, 8, -6926.08, -3562.52, 241.907, 100.0, 0, 2),
(@PATH, 9, -6915.77, -3598.79, 242.975, 100.0, 0, 2),
(@PATH, 10, -6951.36, -3628.01, 241.792, 100.0, 0, 2),
(@PATH, 11, -6934.38, -3651.09, 246.249, 100.0, 0, 2),
(@PATH, 12, -6951.36, -3628.01, 241.792, 100.0, 0, 2),
(@PATH, 13, -6915.77, -3598.79, 242.975, 100.0, 0, 2),
(@PATH, 14, -6926.08, -3562.52, 241.907, 100.0, 0, 2),
(@PATH, 15, -6944.84, -3526.17, 241.792, 100.0, 0, 2),
(@PATH, 16, -6951.56, -3493.01, 241.917, 100.0, 0, 2),
(@PATH, 17, -6924.07, -3460.16, 242.376, 100.0, 0, 2),
(@PATH, 18, -6933.27, -3431.34, 242.621, 100.0, 0, 2),
(@PATH, 19, -6933.3, -3395.66, 242.587, 100.0, 0, 2),
(@PATH, 20, -6901.86, -3377.27, 242.131, 100.0, 0, 2),
(@PATH, 21, -6888.0, -3356.21, 243.799, 100.0, 0, 2),
(@PATH, 22, -6879.02, -3328.7, 247.92, 100.0, 0, 2);
/* Buzzard - GUID 7252 */
SET @NPC := 7252;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -6947.38, `position_y` = -3311.41, `position_z` = 260.875, `orientation` = 4.50295 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`) VALUES
(@PATH, 1, -6932.46, -3343.0, 243.987, 100.0, 0, 2),
(@PATH, 2, -6936.72, -3372.14, 241.792, 100.0, 0, 2),
(@PATH, 3, -6936.86, -3388.97, 242.167, 100.0, 0, 2),
(@PATH, 4, -6957.8, -3415.2, 241.792, 100.0, 0, 2),
(@PATH, 5, -6981.07, -3437.66, 241.792, 100.0, 0, 2),
(@PATH, 6, -7012.01, -3448.14, 242.167, 100.0, 0, 2),
(@PATH, 7, -7034.03, -3482.56, 241.762, 100.0, 0, 2),
(@PATH, 8, -7041.37, -3520.53, 243.426, 100.0, 0, 2),
(@PATH, 9, -7044.2, -3550.63, 244.01, 100.0, 0, 2),
(@PATH, 10, -7085.11, -3563.21, 241.792, 100.0, 0, 2),
(@PATH, 11, -7098.92, -3597.39, 244.899, 100.0, 0, 2),
(@PATH, 12, -7085.11, -3563.21, 241.792, 100.0, 0, 2),
(@PATH, 13, -7044.2, -3550.63, 244.01, 100.0, 0, 2),
(@PATH, 14, -7041.37, -3520.53, 243.426, 100.0, 0, 2),
(@PATH, 15, -7034.03, -3482.56, 241.762, 100.0, 0, 2),
(@PATH, 16, -7012.01, -3448.14, 242.167, 100.0, 0, 2),
(@PATH, 17, -6981.07, -3437.66, 241.792, 100.0, 0, 2),
(@PATH, 18, -6957.8, -3415.2, 241.792, 100.0, 0, 2),
(@PATH, 19, -6936.86, -3388.97, 242.167, 100.0, 0, 2),
(@PATH, 20, -6936.72, -3372.14, 241.792, 100.0, 0, 2),
(@PATH, 21, -6932.46, -3343.0, 243.987, 100.0, 0, 2),
(@PATH, 22, -6946.19, -3315.67, 258.952, 100.0, 0, 2);
/* Buzzard - GUID 7253 */
SET @NPC := 7253;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -7181.01, `position_y` = -3326.08, `position_z` = 247.645, `orientation` = 0.822118 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`) VALUES
(@PATH, 1, -7147.13, -3335.6, 244.256, 100.0, 0, 2),
(@PATH, 2, -7120.95, -3360.97, 242.911, 100.0, 0, 2),
(@PATH, 3, -7112.48, -3395.7, 241.918, 100.0, 0, 2),
(@PATH, 4, -7093.57, -3428.64, 242.185, 100.0, 0, 2),
(@PATH, 5, -7063.82, -3436.23, 245.298, 100.0, 0, 2),
(@PATH, 6, -7031.27, -3456.35, 243.157, 100.0, 0, 2),
(@PATH, 7, -6998.35, -3486.11, 241.792, 100.0, 0, 2),
(@PATH, 8, -6992.29, -3516.26, 243.167, 100.0, 0, 2),
(@PATH, 9, -6970.74, -3551.4, 241.866, 100.0, 0, 2),
(@PATH, 10, -6947.52, -3554.22, 242.042, 100.0, 0, 2),
(@PATH, 11, -6919.98, -3577.41, 242.47, 100.0, 0, 2),
(@PATH, 12, -6901.67, -3608.33, 242.993, 100.0, 0, 2),
(@PATH, 13, -6891.81, -3634.18, 246.06, 100.0, 0, 2),
(@PATH, 14, -6901.67, -3608.33, 242.993, 100.0, 0, 2),
(@PATH, 15, -6919.98, -3577.41, 242.47, 100.0, 0, 2),
(@PATH, 16, -6947.52, -3554.22, 242.042, 100.0, 0, 2),
(@PATH, 17, -6970.74, -3551.4, 241.866, 100.0, 0, 2),
(@PATH, 18, -6992.29, -3516.26, 243.167, 100.0, 0, 2),
(@PATH, 19, -6998.35, -3486.11, 241.792, 100.0, 0, 2),
(@PATH, 20, -7031.27, -3456.35, 243.157, 100.0, 0, 2),
(@PATH, 21, -7063.82, -3436.23, 245.298, 100.0, 0, 2),
(@PATH, 22, -7093.57, -3428.64, 242.185, 100.0, 0, 2),
(@PATH, 23, -7112.48, -3395.7, 241.918, 100.0, 0, 2),
(@PATH, 24, -7120.95, -3360.97, 242.911, 100.0, 0, 2),
(@PATH, 25, -7147.13, -3335.6, 244.256, 100.0, 0, 2),
(@PATH, 26, -7177.73, -3322.53, 246.539, 100.0, 0, 2);
/* Starving Buzzard - GUID 7561 */
SET @NPC := 7561;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -6388.68, `position_y` = -3576.89, `position_z` = 269.532, `orientation` = 4.08407 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`) VALUES
(@PATH, 1, -6371.3, -3594.98, 247.97, 100.0, 0, 2),
(@PATH, 2, -6354.91, -3614.21, 242.14, 100.0, 0, 2),
(@PATH, 3, -6362.36, -3647.93, 242.31, 100.0, 0, 2),
(@PATH, 4, -6388.21, -3641.88, 242.295, 100.0, 0, 2),
(@PATH, 5, -6408.34, -3626.71, 250.96, 100.0, 0, 2),
(@PATH, 6, -6429.45, -3627.02, 257.59, 100.0, 0, 2),
(@PATH, 7, -6445.15, -3633.09, 254.014, 100.0, 0, 2),
(@PATH, 8, -6473.49, -3647.55, 244.618, 100.0, 0, 2),
(@PATH, 9, -6480.76, -3664.51, 247.527, 100.0, 0, 2),
(@PATH, 10, -6473.28, -3676.01, 252.08100000000002, 100.0, 0, 2),
(@PATH, 11, -6471.78, -3685.61, 256.946, 100.0, 0, 2),
(@PATH, 12, -6478.87, -3700.13, 265.363, 100.0, 0, 2),
(@PATH, 13, -6488.8, -3703.67, 270.987, 100.0, 0, 2),
(@PATH, 14, -6504.08, -3706.28, 273.873, 100.0, 0, 2),
(@PATH, 15, -6526.79, -3698.45, 272.456, 100.0, 0, 2),
(@PATH, 16, -6504.11, -3706.28, 273.991, 100.0, 0, 2),
(@PATH, 17, -6488.8, -3703.67, 270.987, 100.0, 0, 2),
(@PATH, 18, -6478.87, -3700.13, 265.363, 100.0, 0, 2),
(@PATH, 19, -6471.78, -3685.61, 256.946, 100.0, 0, 2),
(@PATH, 20, -6473.28, -3676.01, 252.08100000000002, 100.0, 0, 2),
(@PATH, 21, -6480.76, -3664.51, 247.527, 100.0, 0, 2),
(@PATH, 22, -6473.49, -3647.55, 244.618, 100.0, 0, 2),
(@PATH, 23, -6445.15, -3633.09, 254.014, 100.0, 0, 2),
(@PATH, 24, -6429.45, -3627.02, 257.59, 100.0, 0, 2),
(@PATH, 25, -6408.34, -3626.71, 250.96, 100.0, 0, 2),
(@PATH, 26, -6388.21, -3641.88, 242.295, 100.0, 0, 2),
(@PATH, 27, -6362.36, -3647.93, 242.31, 100.0, 0, 2),
(@PATH, 28, -6354.91, -3614.21, 242.14, 100.0, 0, 2),
(@PATH, 29, -6371.3, -3594.98, 247.97, 100.0, 0, 2),
(@PATH, 30, -6395.35, -3586.23, 270.905, 100.0, 0, 2);
/* Starving Buzzard - GUID 7607 */
SET @NPC := 7607;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -6547.11, `position_y` = -3590.26, `position_z` = 263.315, `orientation` = 5.2796 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`) VALUES
(@PATH, 1, -6546.91, -3612.78, 252.546, 100.0, 0, 2),
(@PATH, 2, -6567.01, -3630.33, 242.39, 100.0, 0, 2),
(@PATH, 3, -6596.16, -3615.76, 241.792, 100.0, 0, 2),
(@PATH, 4, -6621.69, -3592.92, 242.001, 100.0, 0, 2),
(@PATH, 5, -6643.48, -3599.43, 241.792, 100.0, 0, 2),
(@PATH, 6, -6653.5, -3629.29, 242.042, 100.0, 0, 2),
(@PATH, 7, -6665.13, -3654.09, 252.755, 100.0, 0, 2),
(@PATH, 8, -6655.26, -3666.55, 258.265, 100.0, 0, 2),
(@PATH, 9, -6648.55, -3671.17, 262.686, 100.0, 0, 2),
(@PATH, 10, -6634.89, -3676.32, 264.832, 100.0, 0, 2),
(@PATH, 11, -6615.17, -3681.26, 265.56, 100.0, 0, 2),
(@PATH, 12, -6593.81, -3698.81, 268.281, 100.0, 0, 2),
(@PATH, 13, -6571.59, -3703.16, 273.226, 100.0, 0, 2),
(@PATH, 14, -6547.1, -3700.65, 272.422, 100.0, 0, 2),
(@PATH, 15, -6571.59, -3703.16, 273.226, 100.0, 0, 2),
(@PATH, 16, -6593.81, -3698.81, 268.281, 100.0, 0, 2),
(@PATH, 17, -6615.17, -3681.26, 265.56, 100.0, 0, 2),
(@PATH, 18, -6634.89, -3676.32, 264.832, 100.0, 0, 2),
(@PATH, 19, -6648.55, -3671.17, 262.686, 100.0, 0, 2),
(@PATH, 20, -6655.26, -3666.55, 258.265, 100.0, 0, 2),
(@PATH, 21, -6665.13, -3654.09, 252.755, 100.0, 0, 2),
(@PATH, 22, -6653.5, -3629.29, 242.042, 100.0, 0, 2),
(@PATH, 23, -6643.48, -3599.43, 241.792, 100.0, 0, 2),
(@PATH, 24, -6621.69, -3592.92, 242.001, 100.0, 0, 2),
(@PATH, 25, -6596.16, -3615.76, 241.792, 100.0, 0, 2),
(@PATH, 26, -6567.01, -3630.33, 242.39, 100.0, 0, 2),
(@PATH, 27, -6546.91, -3612.78, 252.546, 100.0, 0, 2),
(@PATH, 28, -6545.3, -3593.11, 262.506, 100.0, 0, 2);
/* Buzzard - GUID 7614 */
SET @NPC := 7614;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -6787.12, `position_y` = -3653.08, `position_z` = 247.035, `orientation` = 2.40914 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`) VALUES
(@PATH, 1, -6772.58, -3640.43, 243.189, 100.0, 0, 2),
(@PATH, 2, -6754.54, -3631.1, 241.749, 100.0, 0, 2),
(@PATH, 3, -6755.22, -3618.73, 241.749, 100.0, 0, 2),
(@PATH, 4, -6752.14, -3604.26, 242.05, 100.0, 0, 2),
(@PATH, 5, -6737.61, -3596.97, 242.547, 100.0, 0, 2),
(@PATH, 6, -6721.14, -3587.47, 242.711, 100.0, 0, 2),
(@PATH, 7, -6716.05, -3564.79, 243.176, 100.0, 0, 2),
(@PATH, 8, -6688.82, -3544.26, 242.138, 100.0, 0, 2),
(@PATH, 9, -6661.65, -3516.61, 247.939, 100.0, 0, 2),
(@PATH, 10, -6658.14, -3483.01, 257.019, 100.0, 0, 2),
(@PATH, 11, -6648.16, -3458.14, 261.122, 100.0, 0, 2),
(@PATH, 12, -6658.12, -3412.55, 258.497, 100.0, 0, 2),
(@PATH, 13, -6648.16, -3458.14, 261.122, 100.0, 0, 2),
(@PATH, 14, -6658.14, -3483.01, 257.019, 100.0, 0, 2),
(@PATH, 15, -6661.65, -3516.61, 247.939, 100.0, 0, 2),
(@PATH, 16, -6688.82, -3544.26, 242.138, 100.0, 0, 2),
(@PATH, 17, -6715.98, -3564.71, 243.138, 100.0, 0, 2),
(@PATH, 18, -6721.04, -3587.42, 242.62, 100.0, 0, 2),
(@PATH, 19, -6737.61, -3596.97, 242.547, 100.0, 0, 2),
(@PATH, 20, -6752.14, -3604.26, 242.05, 100.0, 0, 2),
(@PATH, 21, -6755.22, -3618.73, 241.749, 100.0, 0, 2),
(@PATH, 22, -6754.54, -3631.1, 241.749, 100.0, 0, 2),
(@PATH, 23, -6772.58, -3640.43, 243.189, 100.0, 0, 2),
(@PATH, 24, -6787.63, -3652.62, 247.154, 100.0, 0, 2);
/* Starving Buzzard - GUID 7705 */
SET @NPC := 7705;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -6344.17, `position_y` = -3295.69, `position_z` = 262.754, `orientation` = 4.18879 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`) VALUES
(@PATH, 1, -6337.79, -3317.69, 249.862, 100.0, 0, 2),
(@PATH, 2, -6348.75, -3332.36, 242.44, 100.0, 0, 2),
(@PATH, 3, -6344.74, -3365.74, 241.792, 100.0, 0, 2),
(@PATH, 4, -6317.13, -3396.21, 240.141, 100.0, 0, 2),
(@PATH, 5, -6285.82, -3419.93, 239.051, 100.0, 0, 2),
(@PATH, 6, -6253.66, -3436.98, 237.79, 100.0, 0, 2),
(@PATH, 7, -6237.7, -3458.54, 239.34, 100.0, 0, 2),
(@PATH, 8, -6251.97, -3473.62, 246.596, 100.0, 0, 2),
(@PATH, 9, -6270.89, -3486.68, 252.644, 100.0, 0, 2),
(@PATH, 10, -6294.5, -3496.35, 250.91, 100.0, 0, 2),
(@PATH, 11, -6313.64, -3498.86, 246.061, 100.0, 0, 2),
(@PATH, 12, -6342.42, -3506.43, 241.834, 100.0, 0, 2),
(@PATH, 13, -6357.96, -3521.32, 246.796, 100.0, 0, 2),
(@PATH, 14, -6371.56, -3543.19, 259.244, 100.0, 0, 2),
(@PATH, 15, -6357.96, -3521.32, 246.796, 100.0, 0, 2),
(@PATH, 16, -6342.42, -3506.43, 241.834, 100.0, 0, 2),
(@PATH, 17, -6313.64, -3498.86, 246.061, 100.0, 0, 2),
(@PATH, 18, -6294.5, -3496.35, 250.91, 100.0, 0, 2),
(@PATH, 19, -6270.89, -3486.68, 252.644, 100.0, 0, 2),
(@PATH, 20, -6251.97, -3473.62, 246.596, 100.0, 0, 2),
(@PATH, 21, -6237.7, -3458.54, 239.34, 100.0, 0, 2),
(@PATH, 22, -6253.66, -3436.98, 237.79, 100.0, 0, 2),
(@PATH, 23, -6285.82, -3419.93, 239.051, 100.0, 0, 2),
(@PATH, 24, -6317.13, -3396.21, 240.141, 100.0, 0, 2),
(@PATH, 25, -6344.74, -3365.74, 241.792, 100.0, 0, 2),
(@PATH, 26, -6348.75, -3332.36, 242.44, 100.0, 0, 2),
(@PATH, 27, -6337.79, -3317.69, 249.862, 100.0, 0, 2),
(@PATH, 28, -6348.47, -3296.53, 262.444, 100.0, 0, 2);
/* Starving Buzzard - GUID 7706 */
SET @NPC := 7706;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -6293.02, `position_y` = -3540.83, `position_z` = 255.493, `orientation` = 6.0912 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`) VALUES
(@PATH, 1, -6309.64, -3551.04, 250.121, 100.0, 0, 2),
(@PATH, 2, -6330.5, -3565.26, 242.258, 100.0, 0, 2),
(@PATH, 3, -6356.39, -3578.34, 244.417, 100.0, 0, 2),
(@PATH, 4, -6360.57, -3601.59, 241.869, 100.0, 0, 2),
(@PATH, 5, -6363.55, -3635.48, 241.792, 100.0, 0, 2),
(@PATH, 6, -6383.01, -3653.02, 243.271, 100.0, 0, 2),
(@PATH, 7, -6400.48, -3665.74, 243.501, 100.0, 0, 2),
(@PATH, 8, -6423.64, -3669.32, 243.821, 100.0, 0, 2),
(@PATH, 9, -6449.26, -3667.73, 243.82, 100.0, 0, 2),
(@PATH, 10, -6473.78, -3659.77, 245.28, 100.0, 0, 2),
(@PATH, 11, -6486.57, -3671.69, 252.15499999999997, 100.0, 0, 2),
(@PATH, 12, -6473.78, -3659.77, 245.28, 100.0, 0, 2),
(@PATH, 13, -6449.26, -3667.73, 243.82, 100.0, 0, 2),
(@PATH, 14, -6423.64, -3669.32, 243.821, 100.0, 0, 2),
(@PATH, 15, -6400.48, -3665.74, 243.501, 100.0, 0, 2),
(@PATH, 16, -6383.01, -3653.02, 243.271, 100.0, 0, 2),
(@PATH, 17, -6363.55, -3635.48, 241.792, 100.0, 0, 2),
(@PATH, 18, -6360.57, -3601.59, 241.869, 100.0, 0, 2),
(@PATH, 19, -6356.46, -3578.38, 244.332, 100.0, 0, 2),
(@PATH, 20, -6330.5, -3565.26, 242.258, 100.0, 0, 2),
(@PATH, 21, -6309.64, -3551.04, 250.121, 100.0, 0, 2),
(@PATH, 22, -6293.6, -3543.78, 254.57100000000003, 100.0, 0, 2);
/* Starving Buzzard - GUID 7724 */
SET @NPC := 7724;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -6118.22, `position_y` = -3446.35, `position_z` = 263.376, `orientation` = 1.68663 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`) VALUES
(@PATH, 1, -6135.86, -3430.15, 250.7, 100.0, 0, 2),
(@PATH, 2, -6152.67, -3417.56, 244.799, 100.0, 0, 2),
(@PATH, 3, -6165.62, -3391.81, 243.028, 100.0, 0, 2),
(@PATH, 4, -6181.44, -3386.96, 241.163, 100.0, 0, 2),
(@PATH, 5, -6213.01, -3381.29, 239.398, 100.0, 0, 2),
(@PATH, 6, -6245.12, -3387.58, 239.271, 100.0, 0, 2),
(@PATH, 7, -6266.66, -3407.41, 239.168, 100.0, 0, 2),
(@PATH, 8, -6278.52, -3423.51, 238.746, 100.0, 0, 2),
(@PATH, 9, -6314.57, -3442.77, 239.492, 100.0, 0, 2),
(@PATH, 10, -6337.46, -3462.88, 241.753, 100.0, 0, 2),
(@PATH, 11, -6347.84, -3477.28, 241.86, 100.0, 0, 2),
(@PATH, 12, -6338.71, -3515.47, 241.834, 100.0, 0, 2),
(@PATH, 13, -6333.27, -3534.63, 241.685, 100.0, 0, 2),
(@PATH, 14, -6307.21, -3550.54, 250.302, 100.0, 0, 2),
(@PATH, 15, -6286.62, -3543.03, 258.238, 100.0, 0, 2),
(@PATH, 16, -6307.21, -3550.54, 250.302, 100.0, 0, 2),
(@PATH, 17, -6333.27, -3534.63, 241.685, 100.0, 0, 2),
(@PATH, 18, -6338.71, -3515.47, 241.834, 100.0, 0, 2),
(@PATH, 19, -6347.84, -3477.28, 241.86, 100.0, 0, 2),
(@PATH, 20, -6337.46, -3462.88, 241.753, 100.0, 0, 2),
(@PATH, 21, -6314.57, -3442.77, 239.492, 100.0, 0, 2),
(@PATH, 22, -6278.52, -3423.51, 238.746, 100.0, 0, 2),
(@PATH, 23, -6266.66, -3407.41, 239.168, 100.0, 0, 2),
(@PATH, 24, -6245.12, -3387.58, 239.271, 100.0, 0, 2),
(@PATH, 25, -6213.01, -3381.29, 239.398, 100.0, 0, 2),
(@PATH, 26, -6181.51, -3386.97, 241.042, 100.0, 0, 2),
(@PATH, 27, -6165.62, -3391.81, 243.028, 100.0, 0, 2),
(@PATH, 28, -6152.73, -3417.5, 244.855, 100.0, 0, 2),
(@PATH, 29, -6135.91, -3430.1, 250.674, 100.0, 0, 2),
(@PATH, 30, -6118.29, -3445.71, 263.008, 100.0, 0, 2);
/* Shadowforge Digger - GUID 7736 */
SET @NPC := 7736;
SET @PATH := @NPC * 10;
UPDATE `creature_addon` set `path_id` = @PATH WHERE `guid` = @NPC;
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -6116.14, -3006.02, 223.452, 100.0, 45000),
(@PATH, 2, -6123.77, -3009.48, 221.833, 2.9947, 45000);
/* Starving Buzzard - GUID 7796 */
SET @NPC := 7796;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -6363.76, `position_y` = -3508.55, `position_z` = 246.23, `orientation` = 5.96903 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`) VALUES
(@PATH, 1, -6368.26, -3466.82, 244.829, 100.0, 0, 2),
(@PATH, 2, -6362.57, -3443.06, 241.753, 100.0, 0, 2),
(@PATH, 3, -6345.93, -3416.62, 241.559, 100.0, 0, 2),
(@PATH, 4, -6313.67, -3401.18, 239.946, 100.0, 0, 2),
(@PATH, 5, -6285.39, -3406.43, 239.255, 100.0, 0, 2),
(@PATH, 6, -6257.33, -3442.1, 237.983, 100.0, 0, 2),
(@PATH, 7, -6238.56, -3451.22, 238.124, 100.0, 0, 2),
(@PATH, 8, -6210.24, -3438.81, 238.298, 100.0, 0, 2),
(@PATH, 9, -6198.03, -3408.55, 239.194, 100.0, 0, 2),
(@PATH, 10, -6192.33, -3386.96, 239.292, 100.0, 0, 2),
(@PATH, 11, -6174.5, -3369.47, 245.401, 100.0, 0, 2),
(@PATH, 12, -6149.01, -3369.75, 244.548, 100.0, 0, 2),
(@PATH, 13, -6174.5, -3369.47, 245.401, 100.0, 0, 2),
(@PATH, 14, -6192.33, -3386.96, 239.292, 100.0, 0, 2),
(@PATH, 15, -6198.03, -3408.55, 239.194, 100.0, 0, 2),
(@PATH, 16, -6210.24, -3438.81, 238.298, 100.0, 0, 2),
(@PATH, 17, -6238.56, -3451.22, 238.124, 100.0, 0, 2),
(@PATH, 18, -6257.33, -3442.1, 237.983, 100.0, 0, 2),
(@PATH, 19, -6285.39, -3406.43, 239.255, 100.0, 0, 2),
(@PATH, 20, -6313.67, -3401.18, 239.946, 100.0, 0, 2),
(@PATH, 21, -6345.93, -3416.62, 241.559, 100.0, 0, 2),
(@PATH, 22, -6362.57, -3443.06, 241.753, 100.0, 0, 2),
(@PATH, 23, -6368.25, -3466.71, 244.777, 100.0, 0, 2),
(@PATH, 24, -6360.65, -3507.1, 244.52, 100.0, 0, 2);
/* Shadowforge Ruffian - GUID 9230 */
SET @NPC := 9230;
SET @PATH := @NPC * 10;
UPDATE `creature_addon` set `path_id` = @PATH WHERE `guid` = @NPC;
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -6071.02, -3133.92, 254.006, 100.0, 0),
(@PATH, 2, -6067.03, -3134.64, 253.744, 100.0, 0),
(@PATH, 3, -6069.15, -3137.9, 254.253, 100.0, 0),
(@PATH, 4, -6076.13, -3133.62, 253.989, 100.0, 0),
(@PATH, 5, -6080.28, -3131.97, 253.426, 100.0, 0),
(@PATH, 6, -6084.9, -3130.2, 253.631, 100.0, 0),
(@PATH, 7, -6088.52, -3124.03, 252.514, 100.0, 0),
(@PATH, 8, -6089.38, -3117.48, 251.538, 100.0, 0),
(@PATH, 9, -6089.48, -3111.04, 251.394, 100.0, 0),
(@PATH, 10, -6089.52, -3106.35, 250.837, 100.0, 0),
(@PATH, 11, -6089.07, -3114.42, 251.377, 100.0, 0),
(@PATH, 12, -6088.68, -3121.53, 252.032, 100.0, 0),
(@PATH, 13, -6087.68, -3126.75, 253.098, 100.0, 0),
(@PATH, 14, -6085.5, -3129.51, 253.555, 100.0, 0),
(@PATH, 15, -6080.6, -3130.18, 253.74, 100.0, 0),
(@PATH, 16, -6076.07, -3130.61, 254.185, 100.0, 0);
@@ -0,0 +1,3 @@
-- DB update 2022_06_04_00 -> 2022_06_06_00
--
UPDATE `creature_template` SET `flags_extra`=`flags_extra`|256 WHERE `entry`=15082;
@@ -0,0 +1,15 @@
-- DB update 2022_06_06_00 -> 2022_06_06_01
DELETE FROM `creature_loot_template` WHERE (`Entry` = 15204) AND (`Item` IN (20689, 20690, 20691)) OR (`Entry` = 15205) AND (`Item` IN (20686, 20687, 20688)) OR (`Entry` = 15305) AND (`Item` IN (20683, 20684, 20685))OR (`Item` IN (20680, 20681, 20682));
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(15203, 20680, 0, 33.3334, 0, 1, 3, 1, 1, 'Prince Skaldrenox - Abyssal Mail Pauldrons'),
(15203, 20681, 0, 33.3333, 0, 1, 3, 1, 1, 'Prince Skaldrenox - Abyssal Leather Bracers'),
(15203, 20682, 0, 33.3333, 0, 1, 3, 1, 1, 'Prince Skaldrenox - Elemental Focus Band'),
(15204, 20689, 0, 33.3333, 0, 1, 3, 1, 1, 'High Marshal Whirlaxis - Abyssal Leather Shoulders'),
(15204, 20690, 0, 33.3333, 0, 1, 3, 1, 1, 'High Marshal Whirlaxis - Abyssal Cloth Wristbands'),
(15204, 20691, 0, 33.3334, 0, 1, 3, 1, 1, 'High Marshal Whirlaxis - Windshear Cape'),
(15205, 20686, 0, 33.3334, 0, 1, 3, 1, 1, 'Baron Kazum - Abyssal Cloth Amice'),
(15205, 20687, 0, 33.3333, 0, 1, 3, 1, 1, 'Baron Kazum - Abyssal Plate Vambraces'),
(15205, 20688, 0, 33.3333, 0, 1, 3, 1, 1, 'Baron Kazum - Earthen Guard'),
(15305, 20683, 0, 33.3333, 0, 1, 3, 1, 1, 'Lord Skwol - Abyssal Plate Epaulets'),
(15305, 20684, 0, 33.3333, 0, 1, 3, 1, 1, 'Lord Skwol - Abyssal Mail Armguards'),
(15305, 20685, 0, 33.3334, 0, 1, 3, 1, 1, 'Lord Skwol - Wavefront Necklace');
@@ -0,0 +1,44 @@
-- DB update 2022_06_06_01 -> 2022_06_06_02
-- Flame Leviathan add mising Boss Emote (15 and above)
DELETE FROM `creature_text` WHERE `CreatureID` = 33113;
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
(33113, 0, 0, 'Hostile entities detected. Threat assessment protocol active. Primary target engaged. Time minus 30 seconds to re-evaluation.', 14, 0, 100, 0, 0, 15506, 33487, 0, 'Flame Leviathan SAY_AGGRO'),
(33113, 1, 0, 'Threat assessment routine modified. Current target threat level: 0. Acquiring new target.', 14, 0, 100, 0, 0, 15521, 33507, 0, 'Flame Leviathan SAY_SLAY'),
(33113, 2, 0, 'Total systems failure. Defense protocols breached. Leviathan unit shutting down.', 14, 0, 100, 0, 0, 15520, 33506, 0, 'Flame Leviathan SAY_DEATH'),
(33113, 3, 0, 'Threat re-evaluated. Target assessment complete. Changing course.', 14, 0, 100, 0, 0, 15507, 33488, 0, 'Flame Leviathan SAY_TARGET_1'),
(33113, 3, 1, 'Pursuit objective modified. Changing course.', 14, 0, 100, 0, 0, 15508, 33489, 0, 'Flame Leviathan SAY_TARGET_2'),
(33113, 3, 2, 'Hostile entity\'s stratagem predicted. Re-routing battle function. Changing course.', 14, 0, 100, 0, 0, 15509, 33490, 0, 'Flame Leviathan SAY_TARGET_3'),
(33113, 4, 0, 'Orbital countermeasures enabled.', 14, 0, 100, 0, 0, 15510, 33491, 0, 'Flame Leviathan SAY_HARDMODE'),
(33113, 5, 0, '*ALERT* Static defense system failure. Orbital countermeasures disabled.', 14, 0, 100, 0, 0, 15511, 33492, 0, 'Flame Leviathan SAY_TOWER_NONE'),
(33113, 6, 0, 'Hodir\'s Fury online. Acquiring target.', 14, 0, 100, 0, 0, 15512, 33493, 0, 'Flame Leviathan SAY_TOWER_FROST'),
(33113, 7, 0, 'Mimiron\'s Inferno online. Acquiring target.', 14, 0, 100, 0, 0, 15513, 33495, 0, 'Flame Leviathan SAY_TOWER_FLAME'),
(33113, 8, 0, 'Freya\'s Ward online. Acquiring target.', 14, 0, 100, 0, 0, 15514, 33497, 0, 'Flame Leviathan SAY_TOWER_NATURE'),
(33113, 9, 0, 'Thorim\'s Hammer online. Acquiring target.', 14, 0, 100, 0, 0, 15515, 33499, 0, 'Flame Leviathan SAY_TOWER_STORM'),
(33113, 10, 0, 'Unauthorized entity attempting circuit overload. Activating anti-personnel countermeasures.', 14, 0, 100, 0, 0, 15516, 33501, 0, 'Flame Leviathan SAY_PLAYER_RIDING'),
(33113, 11, 0, 'System malfunction. Diverting power to support systems.', 14, 0, 100, 0, 0, 15517, 33503, 0, 'Flame Leviathan SAY_OVERLOAD_1'),
(33113, 11, 1, 'Combat matrix overload. Powering doooow...', 14, 0, 100, 0, 0, 15518, 33504, 0, 'Flame Leviathan SAY_OVERLOAD_2'),
(33113, 11, 2, 'System restart required. Deactivating weapons systems.', 14, 0, 100, 0, 0, 15519, 33505, 0, 'Flame Leviathan SAY_OVERLOAD_3'),
(33113, 12, 0, '%s pursues $n.', 41, 0, 100, 0, 0, 0, 33502, 0, 'Flame Leviathan EMOTE_PURSUE'),
(33113, 13, 0, '%s\'s circuits overloaded.', 41, 0, 100, 0, 0, 0, 33304, 0, 'Flame Leviathan EMOTE_OVERLOAD'),
(33113, 14, 0, 'Automatic repair sequence initiated.', 41, 0, 100, 0, 0, 0, 33538, 0, 'Flame Leviathan EMOTE_REPAIR'),
(33113, 15, 0, '%s activates Hodir\'s Fury.', 41, 0, 100, 0, 0, 0, 33494, 0, 'Flame Leviathan EMOTE_FROST'),
(33113, 16, 0, '%s activates Mimiron\'s Inferno.', 41, 0, 100, 0, 0, 0, 33496, 0, 'Flame Leviathan EMOTE_FLAME'),
(33113, 17, 0, '%s activates Freya\'s Ward.', 41, 0, 100, 0, 0, 0, 33498, 0, 'Flame Leviathan EMOTE_NATURE'),
(33113, 18, 0, '%s activates Thorim\'s Hammer.', 41, 0, 100, 0, 0, 0, 33500, 0, 'Flame Leviathan EMOTE_STORM'),
(33113, 19, 0, '%s reactivated. Resuming combat functions.', 41, 0, 100, 0, 0, 0, 33305, 0, 'Flame Leviathan EMOTE_REACTIVATE');
-- Bronzebeard Radio remove equipment (floating pickaxe)
DELETE FROM `creature_equip_template` WHERE `CreatureID` = 34054;
-- Bronzebeard Radio move hardcode to DB (previously empty)
DELETE FROM `creature_text` WHERE `CreatureID` = 34054;
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
(34054, 0, 0, 'You\'ve done it! You\'ve broken the defenses of Ulduar. In a few moments, we will be dropping in to...', 12, 0, 100, 0, 0, 15804, 34154, 3, 'Bronzebeard Radio SAY_FL_START_0'),
(34054, 1, 0, 'What is that? Be careful! Something\'s headed your way!', 12, 0, 100, 0, 0, 15805, 34155, 3, 'Bronzebeard Radio SAY_FL_START_1'),
(34054, 2, 0, 'Quicly! Evasive action! Evasive act--', 12, 0, 100, 0, 0, 15806, 34156, 3, 'Bronzebeard Radio SAY_FL_START_2'),
(34054, 3, 0, 'There are four generators powering the defense structures. If you sabotage the generators, the missile attacks will stop!', 12, 0, 100, 0, 0, 15796, 34147, 3, 'Bronzebeard Radio SAY_FL_GENERATORS'),
(34054, 4, 0, 'It appears you are near a repair station! Drive your vehicle onto the platform, and it should be automatically repaired.', 12, 0, 100, 0, 0, 15803, 34153, 3, 'Bronzebeard Radio SAY_STATIONS'),
(34054, 5, 0, 'Ah, the tower of Krolmir. It is said that the power of Thorim has been used only once... and that it turned an entire continent to dust.', 12, 0, 100, 0, 0, 15801, 34151, 3, 'Bronzebeard Radio SAY_TOWER_THORIM'),
(34054, 6, 0, 'This tower powers the Hammer of Hodir. It is said to have the power to turn entire armies to ice!', 12, 0, 100, 0, 0, 15797, 34148, 3, 'Bronzebeard Radio SAY_TOWER_HODIR'),
(34054, 7, 0, 'You\'re approaching the tower of Freya. It contains the power to turn barren wastelands into jungles teeming with life overnight.', 12, 0, 100, 0, 0, 15798, 34149, 3, 'Bronzebeard Radio SAY_TOWER_FREYA'),
(34054, 8, 0, 'This generator powers Mimiron\'s Gaze. In moments, it can turn earth to ash, stone to magma--we cannot let it reach full power!', 12, 0, 100, 0, 0, 15799, 34150, 3, 'Bronzebeard Radio SAY_TOWER_MIMIRON');
@@ -0,0 +1,3 @@
-- DB update 2022_06_06_02 -> 2022_06_06_03
--
UPDATE `smart_scripts` SET `action_param2`=0 WHERE `entryorguid`=30105 AND `source_type`=0 AND `id`=1;
@@ -0,0 +1,10 @@
-- DB update 2022_06_06_03 -> 2022_06_06_04
--
DELETE FROM `creature_text` WHERE `CreatureID` IN (11347, 11348) AND `GroupId` = 0;
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration` ,`Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
(11347, 0, 0, '%s dies.', 16, 0, 100, 0, 0, 0, 8251, 3, ''),
(11348, 0, 0, '%s dies.', 16, 0, 100, 0, 0, 0, 8251, 3, '');
DELETE FROM `creature_text` WHERE `CreatureID` = 14509 AND `GroupId` = 2;
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration` ,`Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
(14509, 2, 0, '%s dies.', 16, 0, 100, 0, 0, 0, 8251, 3, '');
@@ -0,0 +1,3 @@
-- DB update 2022_06_06_04 -> 2022_06_06_05
--
UPDATE `creature_template` SET `flags_extra`=`flags_extra`|0x00400000 WHERE `entry`=14986;
+834
View File
@@ -0,0 +1,834 @@
-- DB update 2022_06_06_05 -> 2022_06_08_00
--
/* Frostmane Troll Whelp - GUID 1311 */
SET @NPC := 1311;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -6528.93, `position_y` = 401.96, `position_z` = 382.521, `orientation` = 0.949249 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -6528.93, 401.96, 382.521, 100.0, 0),
(@PATH, 2, -6531.52, 394.46, 381.74, 100.0, 0),
(@PATH, 3, -6537.66, 385.633, 381.193, 100.0, 0),
(@PATH, 4, -6538.54, 377.197, 381.4, 100.0, 0),
(@PATH, 5, -6530.65, 380.315, 382.223, 100.0, 0),
(@PATH, 6, -6524.32, 382.633, 382.528, 100.0, 0),
(@PATH, 7, -6518.64, 384.007, 383.915, 100.0, 0),
(@PATH, 8, -6510.7, 385.93, 384.638, 100.0, 0),
(@PATH, 9, -6498.4, 390.355, 384.936, 100.0, 0),
(@PATH, 10, -6507.72, 386.65, 385.012, 100.0, 0),
(@PATH, 11, -6516.47, 384.167, 384.138, 100.0, 0),
(@PATH, 12, -6523.69, 382.846, 382.742, 100.0, 0),
(@PATH, 13, -6531.98, 379.712, 382.186, 100.0, 0),
(@PATH, 14, -6538.37, 377.715, 381.373, 100.0, 0),
(@PATH, 15, -6539.57, 386.47, 381.676, 100.0, 0),
(@PATH, 16, -6533.17, 392.053, 381.583, 100.0, 0);
/* Ironforge Guard - GUID 1748 */
SET @NPC := 1748;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -4958.85, `position_y` = -997.529, `position_z` = 501.572, `orientation` = 0.977868 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -4942.37, -973.067, 501.552, 0.0, 0),
(@PATH, 2, -4922.72, -954.752, 501.57, 0.0, 0),
(@PATH, 3, -4896.28, -936.781, 501.492, 0.0, 0),
(@PATH, 4, -4872.0, -926.028, 501.515, 0.0, 0),
(@PATH, 5, -4872.0, -926.028, 501.515, 3.5488, 45000),
(@PATH, 6, -4905.08, -941.83, 501.56, 0.0, 0),
(@PATH, 7, -4929.3, -961.502, 501.57, 0.0, 0),
(@PATH, 8, -4958.95, -997.889, 501.481, 0.0, 0),
(@PATH, 9, -4958.95, -997.889, 501.481, 0.9884, 45000);
/* High Priest Rohan - GUID 1777 */
SET @NPC := 1777;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -4612.27, `position_y` = -909.098, `position_z` = 501.146, `orientation` = 4.32842 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -4612.25, -909.152, 501.062, 4.32842, 90000),
(@PATH, 2, -4603.22, -905.336, 502.767, 0.0, 0),
(@PATH, 3, -4602.8, -903.233, 502.767, 0.0, 0),
(@PATH, 4, -4607.16, -897.28, 502.767, 0.0, 0),
(@PATH, 5, -4607.16, -897.28, 502.767, 5.35816, 90000),
(@PATH, 6, -4601.63, -904.615, 502.767, 0.0, 0),
(@PATH, 7, -4602.05, -906.355, 502.767, 0.0, 0),
(@PATH, 8, -4608.62, -913.508, 501.061, 0.0, 0),
(@PATH, 9, -4610.18, -921.852, 501.068, 0.0, 0),
(@PATH, 10, -4607.63, -926.901, 501.071, 0.0, 0),
(@PATH, 11, -4607.63, -926.901, 501.071, 2.33874, 180000),
(@PATH, 12, -4612.25, -909.152, 501.062, 0.0, 0);
/* Roetten Stonehammer - GUID 1888 */
SET @NPC := 1888;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -4681.39, `position_y` = -1266.61, `position_z` = 503.382, `orientation` = 2.35619 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -4686.15, -1255.14, 501.993, 0.0, 0),
(@PATH, 2, -4675.92, -1244.38, 501.993, 0.0, 0),
(@PATH, 3, -4667.5, -1245.78, 501.993, 0.0, 0),
(@PATH, 4, -4661.6, -1250.52, 503.382, 0.0, 0),
(@PATH, 5, -4661.6, -1250.52, 503.382, 2.03745, 60000),
(@PATH, 6, -4670.11, -1243.08, 501.993, 0.0, 0),
(@PATH, 7, -4681.15, -1244.8, 501.993, 0.0, 0),
(@PATH, 8, -4686.53, -1252.01, 501.993, 0.0, 0),
(@PATH, 9, -4685.42, -1262.68, 501.993, 0.0, 0),
(@PATH, 10, -4681.39, -1266.61, 503.382, 0.0, 0),
(@PATH, 11, -4681.39, -1266.61, 503.382, 2.03745, 60000);
/* Gnomeregan Evacuee - GUID 2442 */
SET @NPC := 2442;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5165.01, 635.986, 348.279, 100.0, 2000),
(@PATH, 2, -5176.52, 637.508, 348.279, 100.0, 0),
(@PATH, 3, -5180.35, 647.348, 348.279, 100.0, 0),
(@PATH, 4, -5176.56, 656.204, 348.279, 100.0, 0),
(@PATH, 5, -5163.17, 665.239, 348.932, 100.0, 0),
(@PATH, 6, -5159.09, 708.355, 369.766, 100.0, 0),
(@PATH, 7, -5165.51, 714.313, 369.766, 100.0, 0),
(@PATH, 8, -5171.31, 714.859, 369.766, 100.0, 0),
(@PATH, 9, -5175.11, 706.777, 369.766, 100.0, 0),
(@PATH, 10, -5182.93, 606.75, 408.966, 100.0, 0),
(@PATH, 11, -5180.14, 597.714, 408.496, 100.0, 0),
(@PATH, 12, -5174.19, 584.702, 404.797, 100.0, 0),
(@PATH, 13, -5148.45, 587.567, 416.345, 100.0, 3000);
/* Gibblewilt - GUID 2470 */
SET @NPC := 2470;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5068.52, 456.024, 410.131, 4.30862, 0),
(@PATH, 2, -5074.61, 458.308, 410.396, 3.00879, 0),
(@PATH, 3, -5081.69, 458.405, 408.17, 3.72546, 0),
(@PATH, 4, -5085.15, 449.702, 409.889, 5.68699, 0),
(@PATH, 5, -5074.26, 442.373, 410.967, 5.68503, 10000),
(@PATH, 6, -5085.2, 449.851, 409.845, 5.70859, 0),
(@PATH, 7, -5096.99, 463.844, 404.063, 2.40599, 10000),
(@PATH, 8, -5087.35, 455.114, 407.616, 5.84407, 0),
(@PATH, 9, -5081.69, 458.405, 408.17, 0.100844, 0),
(@PATH, 10, -5074.22, 458.364, 410.452, 0.175457, 0);
/* Great Father Arctikus - GUID 2938 */
SET @NPC := 2938;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5592.92, 677.581, 384.033, 0.369836, 0),
(@PATH, 2, -5600.41, 673.451, 383.062, 4.13975, 0),
(@PATH, 3, -5603.79, 663.913, 383.343, 4.70523, 0),
(@PATH, 4, -5600.97, 653.118, 384.407, 5.49849, 0),
(@PATH, 5, -5593.76, 645.6, 384.251, 2.21748, 20000),
(@PATH, 6, -5601.55, 654.102, 384.304, 5.37085, 0),
(@PATH, 7, -5603.73, 663.851, 383.358, 1.27893, 0),
(@PATH, 8, -5600.35, 673.342, 383.068, 0.522985, 0),
(@PATH, 9, -5591.76, 678.133, 384.23, 0.37965, 0),
(@PATH, 10, -5583.21, 681.232, 384.784, 0.389467, 0),
(@PATH, 11, -5579.47, 688.612, 383.054, 1.14149, 20000),
(@PATH, 12, -5583.21, 681.232, 384.784, 3.71563, 0);
/* Frostmane Headhunter - GUID 2942 */
SET @NPC := 2942;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -5577.25, `position_y` = 700.46, `position_z` = 381.931, `orientation` = 3.12328 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5577.25, 700.46, 381.931, 100.0, 0),
(@PATH, 2, -5585.01, 708.591, 381.949, 100.0, 0),
(@PATH, 3, -5592.0, 712.784, 381.934, 100.0, 0),
(@PATH, 4, -5602.55, 718.777, 382.803, 100.0, 0),
(@PATH, 5, -5594.0, 713.588, 382.19, 100.0, 0),
(@PATH, 6, -5587.96, 709.834, 382.064, 100.0, 0),
(@PATH, 7, -5583.34, 706.095, 381.943, 100.0, 0),
(@PATH, 8, -5577.5, 700.577, 381.933, 100.0, 0),
(@PATH, 9, -5576.83, 694.027, 382.176, 100.0, 0),
(@PATH, 10, -5579.36, 687.62, 383.216, 100.0, 0),
(@PATH, 11, -5584.23, 681.69, 384.767, 100.0, 0),
(@PATH, 12, -5587.87, 678.992, 384.853, 100.0, 0),
(@PATH, 13, -5590.26, 677.712, 384.489, 100.0, 0),
(@PATH, 14, -5596.81, 675.263, 383.396, 100.0, 0),
(@PATH, 15, -5602.21, 669.229, 383.059, 100.0, 0),
(@PATH, 16, -5603.85, 662.869, 383.443, 100.0, 0),
(@PATH, 17, -5601.49, 654.376, 384.313, 100.0, 0),
(@PATH, 18, -5597.38, 649.613, 384.351, 100.0, 0),
(@PATH, 19, -5594.43, 646.472, 384.272, 100.0, 0),
(@PATH, 20, -5601.32, 653.812, 384.335, 100.0, 0),
(@PATH, 21, -5603.84, 662.74, 383.459, 100.0, 0),
(@PATH, 22, -5601.41, 671.24, 383.043, 100.0, 0),
(@PATH, 23, -5596.83, 674.907, 383.396, 100.0, 0),
(@PATH, 24, -5589.57, 678.627, 384.581, 100.0, 0),
(@PATH, 25, -5582.65, 683.741, 384.33, 100.0, 0),
(@PATH, 26, -5578.19, 692.47, 382.37, 100.0, 0);
/* Frostmane Snowstrider - GUID 2947 */
SET @NPC := 2947;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -5546.03, `position_y` = 738.82, `position_z` = 385.222, `orientation` = 2.41982 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5546.03, 738.82, 385.222, 100.0, 0),
(@PATH, 2, -5539.86, 732.785, 385.999, 100.0, 0),
(@PATH, 3, -5535.38, 729.201, 387.988, 100.0, 0),
(@PATH, 4, -5529.31, 718.23, 390.967, 100.0, 0),
(@PATH, 5, -5528.62, 708.422, 393.078, 100.0, 0),
(@PATH, 6, -5531.43, 700.178, 394.781, 100.0, 0),
(@PATH, 7, -5534.25, 691.043, 396.589, 100.0, 0),
(@PATH, 8, -5537.04, 683.256, 397.741, 100.0, 0),
(@PATH, 9, -5533.79, 692.606, 396.268, 100.0, 0),
(@PATH, 10, -5529.48, 704.271, 394.017, 100.0, 0),
(@PATH, 11, -5527.69, 713.291, 392.18, 100.0, 0),
(@PATH, 12, -5529.17, 721.177, 390.416, 100.0, 0),
(@PATH, 13, -5534.22, 728.566, 388.28, 100.0, 0),
(@PATH, 14, -5540.0, 733.101, 385.949, 100.0, 0),
(@PATH, 15, -5545.22, 737.797, 385.304, 100.0, 0),
(@PATH, 16, -5554.19, 749.018, 384.436, 100.0, 0),
(@PATH, 17, -5561.87, 756.116, 383.703, 100.0, 0),
(@PATH, 18, -5569.84, 758.797, 383.349, 100.0, 0),
(@PATH, 19, -5578.21, 759.201, 383.616, 100.0, 0),
(@PATH, 20, -5585.1, 759.055, 384.322, 100.0, 0),
(@PATH, 21, -5596.88, 756.296, 385.322, 100.0, 0),
(@PATH, 22, -5603.58, 754.268, 385.485, 100.0, 0),
(@PATH, 23, -5610.61, 752.14, 386.286, 100.0, 0),
(@PATH, 24, -5619.16, 751.23, 386.073, 100.0, 0),
(@PATH, 25, -5626.79, 754.23, 386.583, 100.0, 0),
(@PATH, 26, -5619.98, 750.392, 385.832, 100.0, 0),
(@PATH, 27, -5610.77, 752.059, 386.309, 100.0, 0),
(@PATH, 28, -5603.11, 754.536, 385.458, 100.0, 0),
(@PATH, 29, -5598.01, 756.078, 385.329, 100.0, 0),
(@PATH, 30, -5586.29, 758.664, 384.464, 100.0, 0),
(@PATH, 31, -5577.01, 758.995, 383.548, 100.0, 0),
(@PATH, 32, -5566.79, 756.941, 383.457, 100.0, 0),
(@PATH, 33, -5560.0, 754.467, 383.881, 100.0, 0),
(@PATH, 34, -5549.91, 744.429, 384.671, 100.0, 0);
/* Wendigo - GUID 3122 */
SET @NPC := 3122;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -5432.3, `position_y` = -134.6, `position_z` = 350.456, `orientation` = 4.36332 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5432.3, -134.6, 350.456, 100.0, 0),
(@PATH, 2, -5433.38, -143.261, 351.339, 100.0, 0),
(@PATH, 3, -5434.1, -153.954, 351.684, 100.0, 0),
(@PATH, 4, -5433.57, -145.358, 351.426, 100.0, 0),
(@PATH, 5, -5432.38, -134.58, 350.455, 100.0, 0),
(@PATH, 6, -5430.27, -124.66, 348.582, 100.0, 0),
(@PATH, 7, -5426.28, -118.403, 347.057, 100.0, 0),
(@PATH, 8, -5419.41, -114.086, 345.655, 100.0, 0),
(@PATH, 9, -5425.61, -117.898, 346.897, 100.0, 0),
(@PATH, 10, -5429.94, -125.822, 348.842, 100.0, 0),
(@PATH, 11, -5431.77, -131.171, 349.875, 100.0, 0);
/* Wendigo - GUID 3139 */
SET @NPC := 3139;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -5401.76, `position_y` = -128.122, `position_z` = 367.779, `orientation` = 5.28835 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5401.76, -128.122, 367.779, 100.0, 0),
(@PATH, 2, -5397.15, -133.077, 367.889, 100.0, 0),
(@PATH, 3, -5393.43, -140.068, 367.868, 100.0, 0),
(@PATH, 4, -5391.8, -147.003, 367.704, 100.0, 0),
(@PATH, 5, -5390.86, -154.645, 367.061, 100.0, 0),
(@PATH, 6, -5390.79, -160.58, 367.624, 100.0, 0),
(@PATH, 7, -5391.51, -166.008, 368.767, 100.0, 0),
(@PATH, 8, -5392.28, -170.969, 369.525, 100.0, 0),
(@PATH, 9, -5390.91, -164.225, 368.239, 100.0, 0),
(@PATH, 10, -5391.26, -155.732, 367.063, 100.0, 0),
(@PATH, 11, -5392.36, -146.113, 367.866, 100.0, 0),
(@PATH, 12, -5394.55, -139.363, 368.009, 100.0, 0),
(@PATH, 13, -5397.07, -133.981, 367.915, 100.0, 0);
/* Timber - GUID 3154 */
SET @NPC := 3154;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5248.09, 117.958, 394.268, 1.82279, 0),
(@PATH, 2, -5248.79, 110.069, 393.106, 4.69539, 0),
(@PATH, 3, -5248.93, 99.99, 391.792, 4.97813, 0),
(@PATH, 4, -5244.47, 89.3014, 389.637, 5.15485, 0),
(@PATH, 5, -5233.49, 79.7149, 386.934, 5.64376, 0),
(@PATH, 6, -5215.74, 81.2445, 386.134, 0.348212, 0),
(@PATH, 7, -5201.64, 91.0505, 386.112, 0.707531, 0),
(@PATH, 8, -5196.96, 105.918, 386.112, 3.05587, 0),
(@PATH, 9, -5204.8, 116.565, 387.546, 3.1619, 0),
(@PATH, 10, -5217.0, 120.209, 391.652, 3.12263, 0),
(@PATH, 11, -5232.49, 121.31, 394.311, 3.00678, 0),
(@PATH, 12, -5241.29, 126.827, 394.337, 3.2267, 0),
(@PATH, 13, -5247.15, 123.429, 394.261, 3.93356, 0);
/* Frostmane Headhunter - GUID 3183 */
SET @NPC := 3183;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -5316.35, `position_y` = -214.36, `position_z` = 440.956, `orientation` = 0.401843 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5316.35, -214.36, 440.956, 100.0, 10000),
(@PATH, 2, -5317.84, -227.109, 441.159, 100.0, 0),
(@PATH, 3, -5316.58, -241.649, 440.671, 100.0, 0),
(@PATH, 4, -5313.8, -246.102, 441.356, 100.0, 0),
(@PATH, 5, -5305.87, -249.811, 445.312, 100.0, 10000),
(@PATH, 6, -5315.7, -246.452, 440.862, 100.0, 0),
(@PATH, 7, -5328.45, -244.869, 441.42, 100.0, 0),
(@PATH, 8, -5333.17, -249.242, 441.86, 100.0, 0),
(@PATH, 9, -5336.32, -257.158, 440.763, 100.0, 0),
(@PATH, 10, -5337.47, -261.884, 440.921, 100.0, 0),
(@PATH, 11, -5341.95, -273.199, 447.284, 100.0, 0),
(@PATH, 12, -5342.88, -276.696, 448.13, 100.0, 10000),
(@PATH, 13, -5347.71, -272.985, 447.438, 100.0, 0),
(@PATH, 14, -5358.61, -267.936, 442.177, 100.0, 0),
(@PATH, 15, -5368.57, -261.721, 440.882, 100.0, 0),
(@PATH, 16, -5377.26, -254.669, 447.094, 100.0, 0),
(@PATH, 17, -5380.6, -251.679, 447.381, 100.0, 10000),
(@PATH, 18, -5376.77, -244.195, 445.711, 100.0, 0),
(@PATH, 19, -5373.59, -238.356, 440.872, 100.0, 0),
(@PATH, 20, -5370.4, -233.202, 441.196, 100.0, 0),
(@PATH, 21, -5367.44, -227.769, 443.147, 100.0, 0),
(@PATH, 22, -5363.78, -223.348, 442.605, 100.0, 0),
(@PATH, 23, -5359.4, -218.502, 441.407, 100.0, 0),
(@PATH, 24, -5352.2, -210.538, 445.269, 100.0, 0),
(@PATH, 25, -5346.5, -210.742, 443.416, 100.0, 0),
(@PATH, 26, -5340.82, -213.811, 441.643, 100.0, 0),
(@PATH, 27, -5332.99, -215.503, 440.9, 100.0, 0),
(@PATH, 28, -5322.48, -217.418, 440.77, 100.0, 0);
/* Wendigo - GUID 3186 */
SET @NPC := 3186;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -5396.72, `position_y` = -269.959, `position_z` = 362.808, `orientation` = 0.560124 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5396.72, -269.959, 362.808, 100.0, 0),
(@PATH, 2, -5406.76, -273.025, 362.254, 100.0, 0),
(@PATH, 3, -5416.35, -273.843, 360.902, 100.0, 0),
(@PATH, 4, -5423.34, -273.987, 359.737, 100.0, 0),
(@PATH, 5, -5431.49, -273.724, 358.434, 100.0, 0),
(@PATH, 6, -5438.46, -273.045, 357.218, 100.0, 0),
(@PATH, 7, -5447.92, -271.071, 355.96, 100.0, 0),
(@PATH, 8, -5437.42, -273.181, 357.356, 100.0, 0),
(@PATH, 9, -5431.84, -273.568, 358.359, 100.0, 0),
(@PATH, 10, -5421.35, -273.87, 360.146, 100.0, 0),
(@PATH, 11, -5414.24, -273.794, 361.216, 100.0, 0),
(@PATH, 12, -5406.41, -272.245, 362.341, 100.0, 0),
(@PATH, 13, -5397.06, -270.431, 362.773, 100.0, 0),
(@PATH, 14, -5391.94, -266.715, 363.014, 100.0, 0),
(@PATH, 15, -5380.48, -256.786, 362.554, 100.0, 0),
(@PATH, 16, -5388.0, -263.463, 362.999, 100.0, 0);
/* Wendigo - GUID 3187 */
SET @NPC := 3187;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -5425.7, `position_y` = -223.195, `position_z` = 371.936, `orientation` = 1.8675 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5425.7, -223.195, 371.936, 100.0, 0),
(@PATH, 2, -5425.14, -215.183, 372.811, 100.0, 0),
(@PATH, 3, -5422.18, -207.492, 372.707, 100.0, 0),
(@PATH, 4, -5416.92, -197.329, 371.838, 100.0, 0),
(@PATH, 5, -5411.03, -190.942, 371.379, 100.0, 0),
(@PATH, 6, -5404.22, -186.135, 370.564, 100.0, 0),
(@PATH, 7, -5413.76, -193.226, 371.659, 100.0, 0),
(@PATH, 8, -5419.89, -202.552, 372.247, 100.0, 0),
(@PATH, 9, -5424.82, -211.675, 372.844, 100.0, 0),
(@PATH, 10, -5425.13, -216.157, 372.689, 100.0, 0);
/* Wendigo - GUID 3240 */
SET @NPC := 3240;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -5464.76, `position_y` = -246.758, `position_z` = 354.253, `orientation` = 2.74017 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5464.76, -246.758, 354.253, 100.0, 0),
(@PATH, 2, -5470.49, -242.217, 354.253, 100.0, 0),
(@PATH, 3, -5478.29, -238.068, 354.423, 100.0, 0),
(@PATH, 4, -5484.74, -235.35, 354.509, 100.0, 0),
(@PATH, 5, -5494.42, -231.274, 354.042, 100.0, 0),
(@PATH, 6, -5504.1, -227.198, 353.52, 100.0, 0),
(@PATH, 7, -5510.55, -224.48, 353.356, 100.0, 0),
(@PATH, 8, -5515.95, -222.701, 353.458, 100.0, 0),
(@PATH, 9, -5525.14, -223.195, 354.589, 100.0, 0),
(@PATH, 10, -5514.05, -223.276, 353.323, 100.0, 0),
(@PATH, 11, -5509.24, -224.293, 353.298, 100.0, 0),
(@PATH, 12, -5502.79, -227.016, 353.688, 100.0, 0),
(@PATH, 13, -5492.97, -231.373, 354.199, 100.0, 0),
(@PATH, 14, -5485.22, -234.873, 354.495, 100.0, 0),
(@PATH, 15, -5479.93, -237.388, 354.446, 100.0, 0),
(@PATH, 16, -5473.17, -240.281, 354.309, 100.0, 0),
(@PATH, 17, -5466.21, -245.116, 354.254, 100.0, 0),
(@PATH, 18, -5461.61, -251.304, 354.254, 100.0, 0),
(@PATH, 19, -5455.2, -261.391, 354.198, 100.0, 0),
(@PATH, 20, -5459.61, -254.523, 354.281, 100.0, 0);
/* Wendigo - GUID 3572 */
SET @NPC := 3572;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -5554.56, `position_y` = -235.988, `position_z` = 362.897, `orientation` = 0.511921 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5554.56, -235.988, 362.897, 100.0, 0),
(@PATH, 2, -5549.19, -231.872, 361.206, 100.0, 0),
(@PATH, 3, -5542.18, -227.456, 358.47, 100.0, 0),
(@PATH, 4, -5540.6, -226.723, 357.754, 100.0, 0),
(@PATH, 5, -5546.54, -230.191, 360.312, 100.0, 0),
(@PATH, 6, -5553.38, -235.414, 362.598, 100.0, 0),
(@PATH, 7, -5557.68, -239.184, 364.141, 100.0, 0),
(@PATH, 8, -5562.09, -245.774, 365.837, 100.0, 0),
(@PATH, 9, -5563.85, -249.584, 366.56, 100.0, 0),
(@PATH, 10, -5566.19, -256.791, 367.423, 100.0, 0),
(@PATH, 11, -5567.13, -259.798, 367.933, 100.0, 0),
(@PATH, 12, -5570.49, -267.524, 367.335, 100.0, 0),
(@PATH, 13, -5576.32, -277.889, 366.222, 100.0, 0),
(@PATH, 14, -5570.46, -267.145, 367.366, 100.0, 0),
(@PATH, 15, -5567.09, -260.1, 367.98, 100.0, 0),
(@PATH, 16, -5564.38, -250.211, 366.634, 100.0, 0),
(@PATH, 17, -5560.83, -243.65, 365.272, 100.0, 0),
(@PATH, 18, -5559.09, -240.479, 364.555, 100.0, 0);
/* Fluffy - GUID 4151 */
SET @NPC := 4151;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5549.0, -1295.66, 400.267, 1.96547, 0),
(@PATH, 2, -5555.14, -1286.75, 400.705, 2.50936, 0),
(@PATH, 3, -5563.65, -1281.34, 401.378, 4.89108, 0),
(@PATH, 4, -5571.76, -1283.92, 401.595, 4.92446, 0),
(@PATH, 5, -5574.1, -1292.32, 401.575, 5.63917, 0),
(@PATH, 6, -5550.61, -1316.42, 398.663, 5.5135, 0),
(@PATH, 7, -5539.53, -1319.2, 399.05, 0.388779, 0),
(@PATH, 8, -5527.46, -1315.68, 401.761, 0.37307, 0),
(@PATH, 9, -5510.42, -1310.07, 402.876, 6.27534, 0),
(@PATH, 10, -5496.35, -1307.78, 404.306, 5.15811, 0),
(@PATH, 11, -5485.81, -1317.02, 403.623, 4.65349, 0),
(@PATH, 12, -5482.9, -1328.74, 403.128, 1.90657, 0),
(@PATH, 13, -5497.13, -1351.01, 403.118, 4.14299, 0),
(@PATH, 14, -5506.29, -1361.86, 401.173, 0.79327, 0),
(@PATH, 15, -5512.5, -1380.78, 401.059, 4.32364, 0),
(@PATH, 16, -5523.74, -1388.3, 400.524, 0.430028, 0),
(@PATH, 17, -5532.06, -1391.59, 401.022, 5.71575, 0),
(@PATH, 18, -5536.64, -1400.22, 402.253, 0.392711, 0),
(@PATH, 19, -5534.24, -1407.77, 402.474, 0.645999, 0),
(@PATH, 20, -5526.26, -1409.96, 402.421, 1.3293, 0),
(@PATH, 21, -5516.35, -1405.69, 402.985, 3.07288, 0),
(@PATH, 22, -5512.02, -1380.34, 401.147, 1.27628, 0),
(@PATH, 23, -5505.66, -1361.61, 401.475, 1.08975, 0),
(@PATH, 24, -5496.98, -1350.89, 403.125, 0.861984, 0),
(@PATH, 25, -5483.01, -1328.78, 403.113, 1.27432, 0),
(@PATH, 26, -5485.76, -1316.7, 403.664, 2.0931, 0),
(@PATH, 27, -5496.2, -1307.95, 404.289, 2.74694, 0),
(@PATH, 28, -5510.93, -1310.19, 402.859, 3.38507, 0),
(@PATH, 29, -5527.54, -1315.5, 401.787, 3.47539, 0),
(@PATH, 30, -5537.08, -1315.39, 399.541, 3.32028, 0),
(@PATH, 31, -5543.39, -1309.22, 398.204, 1.88497, 0);
DELETE FROM `creature_formations` WHERE `memberGUID` IN (4151, 4153);
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
(4151, 4153, 4.80679, 183, 519, 0, 0),
(4151, 4151, 0, 0, 519, 0, 0);
/* Rockjaw Skullthumper - GUID 4524 */
SET @NPC := 4524;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5871.25, -1544.41, 372.448, 5.2547, 0),
(@PATH, 2, -5869.8, -1546.8, 372.373, 4.94055, 0),
(@PATH, 3, -5866.37, -1556.3, 366.145, 0.228153, 0),
(@PATH, 4, -5856.7, -1554.05, 358.833, 0.228153, 20000),
(@PATH, 5, -5866.48, -1556.24, 366.228, 1.85785, 0),
(@PATH, 6, -5869.95, -1546.57, 372.54, 1.94739, 0),
(@PATH, 7, -5872.4, -1542.05, 372.521, 2.02672, 0),
(@PATH, 8, -5874.47, -1532.95, 379.59, 1.76518, 0),
(@PATH, 9, -5871.17, -1523.61, 379.248, 4.41983, 30000),
(@PATH, 10, -5874.42, -1532.89, 379.63, 4.76776, 0),
(@PATH, 11, -5872.52, -1541.97, 372.526, 4.93505, 0);
/* Rockjaw Bonesnapper - GUID 4542 */
SET @NPC := 4542;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -5627.38, `position_y` = -1692.46, `position_z` = 399.612, `orientation` = 3.53051 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5627.38, -1692.46, 399.612, 100.0, 0),
(@PATH, 2, -5638.73, -1696.96, 399.131, 100.0, 0),
(@PATH, 3, -5647.65, -1705.31, 399.371, 100.0, 0),
(@PATH, 4, -5657.91, -1717.19, 400.254, 100.0, 0),
(@PATH, 5, -5665.49, -1732.89, 399.89, 100.0, 0),
(@PATH, 6, -5669.03, -1748.15, 400.046, 100.0, 0),
(@PATH, 7, -5666.81, -1767.67, 400.051, 100.0, 0),
(@PATH, 8, -5659.9, -1784.91, 399.696, 100.0, 0),
(@PATH, 9, -5651.59, -1797.52, 400.324, 100.0, 0),
(@PATH, 10, -5639.94, -1807.93, 399.766, 100.0, 0),
(@PATH, 11, -5627.84, -1813.34, 400.785, 100.0, 0),
(@PATH, 12, -5613.26, -1816.92, 400.942, 100.0, 0),
(@PATH, 13, -5597.3, -1820.47, 399.603, 100.0, 0),
(@PATH, 14, -5583.48, -1822.52, 399.955, 100.0, 0),
(@PATH, 15, -5568.99, -1823.99, 400.865, 100.0, 0),
(@PATH, 16, -5556.21, -1825.28, 399.653, 100.0, 0),
(@PATH, 17, -5572.36, -1823.33, 400.954, 100.0, 0),
(@PATH, 18, -5590.66, -1821.89, 399.622, 100.0, 0),
(@PATH, 19, -5608.77, -1817.4, 400.73, 100.0, 0),
(@PATH, 20, -5624.46, -1812.85, 400.957, 100.0, 0),
(@PATH, 21, -5636.85, -1809.99, 399.598, 100.0, 0),
(@PATH, 22, -5646.51, -1801.62, 400.293, 100.0, 0),
(@PATH, 23, -5657.3, -1789.51, 399.926, 100.0, 0),
(@PATH, 24, -5661.29, -1773.99, 400.341, 100.0, 0),
(@PATH, 25, -5661.82, -1757.66, 399.919, 100.0, 0),
(@PATH, 26, -5660.06, -1746.28, 400.097, 100.0, 0),
(@PATH, 27, -5657.01, -1733.84, 399.839, 100.0, 0),
(@PATH, 28, -5653.79, -1722.66, 400.801, 100.0, 0),
(@PATH, 29, -5647.43, -1708.26, 399.427, 100.0, 0),
(@PATH, 30, -5638.97, -1697.98, 399.135, 100.0, 0);
/* Rockjaw Bonesnapper - GUID 4545 */
SET @NPC := 4545;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -5596.2, `position_y` = -1683.52, `position_z` = 347.276, `orientation` = 6.25858 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5596.2, -1683.52, 347.276, 100.0, 0),
(@PATH, 2, -5600.28, -1681.07, 349.036, 100.0, 0),
(@PATH, 3, -5605.89, -1674.86, 350.655, 100.0, 0),
(@PATH, 4, -5611.91, -1679.3, 351.456, 100.0, 0),
(@PATH, 5, -5609.26, -1689.22, 353.038, 100.0, 0),
(@PATH, 6, -5605.37, -1700.32, 356.982, 100.0, 0),
(@PATH, 7, -5604.51, -1705.22, 358.703, 100.0, 0),
(@PATH, 8, -5609.27, -1706.74, 359.171, 100.0, 0),
(@PATH, 9, -5614.53, -1699.49, 360.345, 100.0, 0),
(@PATH, 10, -5618.3, -1691.87, 360.588, 100.0, 0),
(@PATH, 11, -5622.24, -1683.54, 362.224, 100.0, 0),
(@PATH, 12, -5624.64, -1673.57, 362.007, 100.0, 0),
(@PATH, 13, -5621.46, -1684.72, 362.087, 100.0, 0),
(@PATH, 14, -5618.48, -1691.23, 360.625, 100.0, 0),
(@PATH, 15, -5614.23, -1699.5, 360.307, 100.0, 0),
(@PATH, 16, -5609.8, -1705.37, 359.24, 100.0, 0),
(@PATH, 17, -5603.43, -1706.61, 359.209, 100.0, 0),
(@PATH, 18, -5605.95, -1698.77, 356.382, 100.0, 0),
(@PATH, 19, -5609.09, -1689.14, 353.042, 100.0, 0),
(@PATH, 20, -5610.99, -1683.02, 351.756, 100.0, 0),
(@PATH, 21, -5610.22, -1675.92, 350.97, 100.0, 0),
(@PATH, 22, -5606.03, -1675.62, 350.676, 100.0, 0),
(@PATH, 23, -5601.71, -1680.54, 349.575, 100.0, 0);
/* Rockjaw Bonesnapper - GUID 4561 */
SET @NPC := 4561;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -5536.41, `position_y` = -1741.26, `position_z` = 339.58, `orientation` = 5.88313 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5536.41, -1741.26, 339.58, 100.0, 0),
(@PATH, 2, -5526.61, -1743.64, 337.832, 100.0, 0),
(@PATH, 3, -5537.32, -1740.91, 339.711, 100.0, 0),
(@PATH, 4, -5544.39, -1735.85, 340.927, 100.0, 0),
(@PATH, 5, -5549.2, -1731.98, 342.204, 100.0, 0),
(@PATH, 6, -5556.28, -1727.06, 342.399, 100.0, 0),
(@PATH, 7, -5559.88, -1724.29, 342.479, 100.0, 0),
(@PATH, 8, -5567.05, -1719.29, 342.412, 100.0, 0),
(@PATH, 9, -5578.9, -1711.0, 342.412, 100.0, 0),
(@PATH, 10, -5582.96, -1706.39, 343.26, 100.0, 0),
(@PATH, 11, -5587.52, -1700.34, 344.939, 100.0, 0),
(@PATH, 12, -5590.26, -1692.03, 345.397, 100.0, 0),
(@PATH, 13, -5587.14, -1699.73, 345.092, 100.0, 0),
(@PATH, 14, -5583.42, -1705.41, 343.509, 100.0, 0),
(@PATH, 15, -5578.63, -1710.94, 342.412, 100.0, 0),
(@PATH, 16, -5572.14, -1716.08, 342.412, 100.0, 0),
(@PATH, 17, -5565.77, -1720.81, 342.512, 100.0, 0),
(@PATH, 18, -5559.49, -1724.6, 342.479, 100.0, 0),
(@PATH, 19, -5548.53, -1732.52, 342.105, 100.0, 0),
(@PATH, 20, -5543.56, -1736.61, 340.74, 100.0, 0);
/* Rockjaw Bonesnapper - GUID 4847 */
SET @NPC := 4847;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -5569.31, `position_y` = -1765.96, `position_z` = 346.369, `orientation` = 3.44248 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5569.31, -1765.96, 346.369, 100.0, 0),
(@PATH, 2, -5580.12, -1768.71, 348.96, 100.0, 0),
(@PATH, 3, -5591.17, -1770.6, 353.343, 100.0, 0),
(@PATH, 4, -5599.2, -1772.08, 356.385, 100.0, 0),
(@PATH, 5, -5587.93, -1770.32, 352.211, 100.0, 0),
(@PATH, 6, -5577.91, -1768.16, 348.083, 100.0, 0),
(@PATH, 7, -5569.47, -1765.65, 346.3, 100.0, 0),
(@PATH, 8, -5560.44, -1760.17, 342.953, 100.0, 0),
(@PATH, 9, -5552.35, -1754.22, 341.378, 100.0, 0),
(@PATH, 10, -5546.19, -1749.04, 340.797, 100.0, 0),
(@PATH, 11, -5540.59, -1742.04, 340.224, 100.0, 0),
(@PATH, 12, -5537.63, -1735.2, 340.318, 100.0, 0),
(@PATH, 13, -5534.81, -1727.29, 340.757, 100.0, 0),
(@PATH, 14, -5531.64, -1717.72, 341.291, 100.0, 0),
(@PATH, 15, -5533.11, -1710.31, 342.644, 100.0, 0),
(@PATH, 16, -5531.35, -1717.38, 341.3, 100.0, 0),
(@PATH, 17, -5533.43, -1726.32, 340.61, 100.0, 0),
(@PATH, 18, -5537.4, -1733.16, 340.365, 100.0, 0),
(@PATH, 19, -5543.9, -1742.4, 340.672, 100.0, 0),
(@PATH, 20, -5548.14, -1748.26, 340.921, 100.0, 0),
(@PATH, 21, -5551.7, -1752.42, 341.271, 100.0, 0),
(@PATH, 22, -5560.48, -1761.27, 343.182, 100.0, 0),
(@PATH, 23, -5563.01, -1763.52, 344.266, 100.0, 0);
/* Dun Morogh Mountaineer - GUID 6367 */
SET @NPC := 6367;
SET @PATH := @NPC * 10;
UPDATE `creature_addon` set `path_id` = @PATH WHERE `guid` = @NPC;
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -5001.43, -2312.58, 405.708, 0.015327, 0),
(@PATH, 2, -4994.43, -2312.47, 406.455, 0.015327, 0),
(@PATH, 3, -4987.0, -2311.8, 407.207, 6.25846, 0),
(@PATH, 4, -4978.09, -2312.61, 408.019, 6.10059, 0),
(@PATH, 5, -4966.22, -2315.96, 408.735, 5.94273, 0),
(@PATH, 6, -4958.98, -2320.9, 408.616, 5.54689, 0),
(@PATH, 7, -4951.2, -2327.95, 408.28, 5.54689, 0),
(@PATH, 8, -4943.42, -2335.0, 408.244, 5.54689, 0),
(@PATH, 9, -4937.18, -2339.43, 408.51, 5.78486, 0),
(@PATH, 10, -4928.8, -2343.15, 408.622, 5.98043, 0),
(@PATH, 11, -4921.01, -2345.13, 408.622, 6.09824, 0),
(@PATH, 12, -4910.69, -2347.06, 408.622, 6.09824, 0),
(@PATH, 13, -4903.19, -2349.92, 408.622, 5.70475, 0),
(@PATH, 14, -4911.04, -2346.58, 408.622, 2.84983, 0),
(@PATH, 15, -4917.76, -2345.17, 408.622, 3.00769, 0),
(@PATH, 16, -4928.5, -2343.13, 408.622, 2.84983, 0),
(@PATH, 17, -4934.95, -2340.75, 408.576, 2.73202, 0),
(@PATH, 18, -4944.53, -2335.04, 408.248, 2.53645, 0),
(@PATH, 19, -4951.1, -2328.78, 408.236, 2.34089, 0),
(@PATH, 20, -4957.91, -2322.43, 408.503, 2.4587, 0),
(@PATH, 21, -4963.34, -2318.01, 408.755, 2.4587, 0),
(@PATH, 22, -4972.36, -2313.44, 408.536, 2.85218, 0),
(@PATH, 23, -4979.42, -2311.96, 407.865, 3.01005, 0),
(@PATH, 24, -4992.02, -2312.32, 406.72, 3.28572, 0),
(@PATH, 25, -5002.32, -2313.53, 405.659, 3.20797, 0),
(@PATH, 26, -5013.18, -2312.1, 403.958, 2.81448, 0),
(@PATH, 27, -5019.8, -2308.56, 402.841, 2.50111, 0),
(@PATH, 28, -5027.78, -2300.47, 402.106, 2.26549, 0),
(@PATH, 29, -5034.5, -2292.4, 401.445, 2.26549, 0),
(@PATH, 30, -5039.68, -2287.59, 400.961, 2.50111, 0),
(@PATH, 31, -5048.81, -2282.12, 400.678, 2.77678, 0),
(@PATH, 32, -5059.3, -2278.6, 400.615, 3.05246, 0),
(@PATH, 33, -5072.53, -2278.86, 400.209, 3.25038, 0),
(@PATH, 34, -5080.73, -2280.5, 400.045, 3.4483, 0),
(@PATH, 35, -5089.7, -2283.8, 400.084, 3.56611, 0),
(@PATH, 36, -5099.56, -2289.5, 400.108, 3.72397, 0),
(@PATH, 37, -5108.33, -2295.28, 399.991, 3.72397, 0),
(@PATH, 38, -5119.27, -2305.02, 399.972, 3.9219, 0),
(@PATH, 39, -5125.72, -2309.44, 400.112, 3.56847, 0),
(@PATH, 40, -5137.37, -2312.98, 400.492, 3.34698, 0),
(@PATH, 41, -5146.26, -2314.14, 400.426, 3.19147, 0),
(@PATH, 42, -5156.74, -2314.67, 400.248, 3.19147, 0),
(@PATH, 43, -5168.25, -2314.5, 399.933, 2.99591, 0),
(@PATH, 44, -5178.92, -2311.86, 399.793, 2.72024, 0),
(@PATH, 45, -5184.51, -2307.65, 400.036, 2.32911, 0),
(@PATH, 46, -5187.81, -2301.88, 400.243, 1.93562, 0),
(@PATH, 47, -5191.47, -2294.36, 400.4, 2.13119, 0),
(@PATH, 48, -5198.22, -2287.34, 400.809, 2.40686, 0),
(@PATH, 49, -5192.27, -2293.99, 400.429, 5.20995, 0),
(@PATH, 50, -5187.26, -2303.21, 400.204, 5.20995, 0),
(@PATH, 51, -5182.48, -2309.11, 399.947, 5.56102, 0),
(@PATH, 52, -5176.64, -2312.85, 399.767, 5.83434, 0),
(@PATH, 53, -5168.76, -2314.9, 399.93, 6.22783, 0),
(@PATH, 54, -5153.5, -2314.91, 400.295, 0.06245, 0),
(@PATH, 55, -5140.6, -2313.82, 400.486, 0.102505, 0),
(@PATH, 56, -5134.87, -2312.79, 400.437, 0.220315, 0),
(@PATH, 57, -5127.18, -2310.48, 400.163, 0.375824, 0),
(@PATH, 58, -5120.43, -2306.3, 399.967, 0.731609, 0),
(@PATH, 59, -5112.62, -2299.29, 400.099, 0.731609, 0),
(@PATH, 60, -5105.76, -2293.91, 399.938, 0.576101, 0),
(@PATH, 61, -5099.89, -2290.1, 400.098, 0.576101, 0),
(@PATH, 62, -5091.38, -2284.57, 400.086, 0.576101, 0),
(@PATH, 63, -5080.73, -2279.57, 400.027, 0.222671, 0),
(@PATH, 64, -5068.14, -2278.18, 400.317, 0.027107, 0),
(@PATH, 65, -5052.9, -2279.86, 400.657, 6.11473, 0),
(@PATH, 66, -5046.31, -2282.43, 400.701, 5.69532, 0),
(@PATH, 67, -5036.54, -2289.96, 401.198, 5.57752, 0),
(@PATH, 68, -5029.26, -2297.66, 402.041, 5.41965, 0),
(@PATH, 69, -5025.51, -2302.71, 402.198, 5.30184, 0),
(@PATH, 70, -5020.02, -2309.3, 402.874, 5.53746, 0),
(@PATH, 71, -5012.95, -2312.65, 404.048, 6.12651, 0);
@@ -0,0 +1,4 @@
-- DB update 2022_06_08_00 -> 2022_06_08_01
DELETE FROM `item_loot_template` WHERE (`Entry` = 11024) AND (`Item` IN (785, 2449, 2450, 3356, 3357, 3820, 3821, 4625, 8838, 8839, 8846, 49209));
INSERT INTO `item_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(11024, 49209, 0, 63, 0, 1, 1, 1, 3, 'Evergreen Herb Casing - Mutated Morrowgrain');
@@ -0,0 +1,4 @@
-- DB update 2022_06_08_01 -> 2022_06_08_02
-- (Quest)Mystery of the Infinite NPC: "Future You", remove SAI (unused)
UPDATE `creature_template` SET `AIName` = '' WHERE `entry` = 27899;
DELETE FROM `smart_scripts` WHERE `entryorguid` = 27899 AND `source_type` = 0;
@@ -0,0 +1,5 @@
-- DB update 2022_06_08_02 -> 2022_06_09_00
--
DELETE FROM `spell_script_names` WHERE `spell_id`=24326;
INSERT INTO `spell_script_names` VALUES
(24326,'spell_gahzranka_slam');
@@ -0,0 +1,48 @@
-- DB update 2022_06_09_00 -> 2022_06_09_01
--
DELETE FROM `npc_text` WHERE `ID` IN (7637,100117,100118,100119);
INSERT INTO `npc_text` (`ID`,`text0_0`,`BroadcastTextID0`,`Probability0`) VALUES
(7637,'The markings of this tablet show ancient diagrams and hold dire words of power.$B$BYou believe it is an alchemical recipe, but it is beyond your skill...',10487,1),
(100117,'Hazza\'rah, the Dreamweaver.$B$BHis is the power of nightmares, and may his foes ever sleep.$B$BHazza\'rah now dwells near the edge of madness...',10540,1),
(100118,'Renataki, of the Thousand Blades.$B$BPain is his lifeblood. Fear, his ally. May he one day return and bring joyous bloodshed with him.$B$BRenataki now dwells far from here. One day, he may return...',10541,1),
(100119,'Wushoolay, the Storm Witch.$B$BHer power is the power of the sky, the rain, and the shattered earth. May she once again reign mother to the Gurubashi. $B$BWushoolay now dwells near the edge of madness...',10544,1);
DELETE FROM `gossip_menu` WHERE `MenuID`=6443 AND `TextID`=7637;
DELETE FROM `gossip_menu` WHERE `MenuID`=6448 AND `TextID`=7643;
DELETE FROM `gossip_menu` WHERE `MenuID`=6449 AND `TextID`=100117;
DELETE FROM `gossip_menu` WHERE `MenuID`=6450 AND `TextID`=100118;
DELETE FROM `gossip_menu` WHERE `MenuID`=6451 AND `TextID`=100119;
INSERT INTO `gossip_menu` (`MenuID`,`TextID`) VALUES
(6443,7637),
(6448,7643),
(6449,100117),
(6450,100118),
(6451,100119);
DELETE FROM `gossip_menu_option` WHERE `MenuID`=6443;
INSERT INTO `gossip_menu_option` (`MenuID`,`OptionId`,`OptionIcon`,`OptionText`,`OptionBroadcastTextID`,`OptionType`,`OptionNpcFlag`,`VerifiedBuild`) VALUES
(6443,0,0,"Learn the recipe.",10486,1,1,0);
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14,15) AND `SourceGroup`=6443;
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup` IN (6448,6449,6450,6451);
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
(14,6443,7635,0,0,25,0,2259,0,0,1,0,0,"","Show gossip text 7635 if spell 'Alchemy' is not learned"),
(14,6443,7636,0,0,7,0,171,300,0,0,0,0,"","Show gossip text 7636 if player has Alchemy with skill level 300"),
(14,6443,7637,0,0,25,0,2259,0,0,0,0,0,"","Show gossip text 7637 if spell 'Alchemy' is learned"),
(14,6443,7637,0,0,7,0,171,300,0,1,0,0,"","Show gossip text 7637 if player has not Alchemy with skill level 300"),
(15,6443,0,0,0,7,0,171,300,0,0,0,0,"","Show Gossip Option 0 if player has Alchemy with skill level 300"),
(15,6443,0,0,0,25,0,24266,0,0,1,0,0,"","Show Gossip Option 0 if spell 'Gurubashi Mojo Madness' is not learned"),
(14,6448,7643,0,0,12,0,27,0,0,1,0,0,"","Show gossip text 7643 if game event 'Edge of Madness: Gri'lek is not active"),
(14,6448,7669,0,0,12,0,27,0,0,0,0,0,"","Show gossip text 7669 if game event 'Edge of Madness: Gri'lek is active"),
(14,6449,7670,0,0,12,0,28,0,0,1,0,0,"","Show gossip text 7670 if game event 'Edge of Madness: Hazza'rah is not active"),
(14,6449,100117,0,0,12,0,28,0,0,0,0,0,"","Show gossip text 100117 if game event 'Edge of Madness: Hazza'rah is active"),
(14,6450,100118,0,0,12,0,29,0,0,1,0,0,"","Show gossip text 100118 if game event 'Edge of Madness: Renataki is not active"),
(14,6450,7673,0,0,12,0,29,0,0,0,0,0,"","Show gossip text 7673 if game event 'Edge of Madness: Renataki is active"),
(14,6451,7674,0,0,12,0,30,0,0,1,0,0,"","Show gossip text 7674 if game event 'Edge of Madness: Wushoolay is not active"),
(14,6451,100119,0,0,12,0,30,0,0,0,0,0,"","Show gossip text 100119 if game event 'Edge of Madness: Wushoolay is active");
UPDATE `gameobject_template` SET `AIName` = "SmartGameObjectAI", `ScriptName` = "" WHERE `entry` = 180368;
DELETE FROM `smart_scripts` WHERE `entryorguid` = 180368 AND `source_type` = 1;
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`,`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
(180368,1,0,1,62,0,100,0,6443,0,0,0,0,85,24267,0,0,0,0,0,7,0,0,0,0,0,0,0,0,"Tablet of Madness - On Gossip Option 0 Selected - Self Cast 'Gurubashi Mojo Madness'"),
(180368,1,1,0,61,0,100,0,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,"Tablet of Madness - On Link - Close Gossip");
@@ -0,0 +1,7 @@
-- DB update 2022_06_09_01 -> 2022_06_11_00
-- Add Chinese translation of road signs
DELETE FROM `gameobject_template_locale` WHERE `entry` IN (184084,176365,176364) AND `locale` = 'zhCN';
INSERT INTO `gameobject_template_locale` (`entry`, `locale`, `name`, `castBarCaption`, `VerifiedBuild`) VALUES
(184084, 'zhCN', '开往秘蓝岛的船只', '', 18019),
(176365, 'zhCN', '开往泰达希尔的船只', '', 18019),
(176364, 'zhCN', '开往暴风城的船只', '', 18019);
@@ -0,0 +1,3 @@
-- DB update 2022_06_11_00 -> 2022_06_13_00
--
UPDATE `creature_model_info` SET `CombatReach`=1.5 WHERE `DisplayID`=2836;
@@ -0,0 +1,8 @@
-- DB update 2022_06_13_00 -> 2022_06_13_01
--
UPDATE `gameobject_template` SET `AIName` = 'SmartGameObjectAI' WHERE `entry` = 180517;
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 180517) AND (`source_type` = 1) AND (`id` IN (0, 1));
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`, `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
(180517, 1, 0, 0, 63, 0, 100, 0, 0, 0, 0, 0, 0, 11, 24871, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Putrid Mushroom - On Just Created - Cast \'Spore Cloud\''),
(180517, 1, 1, 0, 1, 0, 100, 0, 120000, 120000, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Putrid Mushroom - Out of Combat - Despawn Instant');
@@ -0,0 +1,4 @@
-- DB update 2022_06_13_01 -> 2022_06_13_02
UPDATE `creature_template` SET `ScriptName`='npc_chained_spirit', `speed_run`=0.4, `unit_flags`=`unit_flags`|33554432 WHERE `entry`=15117;
@@ -0,0 +1,19 @@
-- DB update 2022_06_13_02 -> 2022_06_13_03
--
DELETE FROM `acore_string` WHERE `entry` IN (283,298,300,301,11003);
INSERT INTO `acore_string` (`entry`, `content_default`, `locale_koKR`, `locale_frFR`, `locale_deDE`, `locale_zhCN`, `locale_zhTW`, `locale_esES`, `locale_esMX`, `locale_ruRU`) VALUES
(283, "%s has disabled %s's chat for %s, effective at the player's next login. Reason: %s.", NULL, NULL, "Ihr habt dem Spieler %s das chatten für %s gesperrt, beginnend mit dem nächsten Login des Spielers. Grund: %s.", "你已经被 %s 禁言 %s,将在下一次登陆时生效。原因: %s。", NULL, "%s ha deshabilitado el chat de %s por %s, efectivo en el próximo ingreso del jugador. Razón: %s.", "%s ha deshabilitado el chat de %s por %s, efectivo en el próximo ingreso del jugador. Razón: %s.", NULL),
(298, "Spawn time changed to: %s", NULL, NULL, "Spawnzeit wurde auf: %s abgeändert", "复生时间改变为: %s", NULL, "Tiempo de desove cambiado a: %s", "Tiempo de desove cambiado a: %s", NULL),
(300, "Your chat has been disabled for %s. By: %s, Reason: %s.", NULL, NULL, "Euer Chat wurde für %s abgeschaltet. Von: %s, Grund: %s", "你将被禁言 %s.", NULL, "Tu chat ha sido desactivado durante %u. Por: %s ,Razón: %s.", "Tu chat ha sido desactivado durante %u. Por: %s ,Razón: %s.", NULL),
(301, "%s has disabled %s's chat for %s. Reason: %s.", NULL, NULL, "Ihr hab den Chat von %s für %s abgeschaltet. Von: %s, Grund: %s", NULL, NULL, "%s ha desactivado el chat de %s durante %s. Razón: %s.", "%s ha desactivado el chat de %s durante %s. Razón: %s.", NULL),
(11003, "Server: %s has muted %s for %s, reason: %s", NULL, NULL, NULL, "系统公告: %s has muted %s for %s, 原因: %s", NULL, NULL, NULL, "Server: %s замутил %s на %s, причина: %s");
UPDATE `command` SET `help` = "Syntax: .mute [$playerName] $mutetime [$reason]\r\nDisible chat messaging for any character from account of character $playerName (or currently selected) at $mutetime time. Player can be offline.\n$mutetime: use a timestring like \"1d15h33s\"." WHERE `name` = "mute";
UPDATE `command` SET `help` = "Syntax: .npc set spawntime #time\r\nAdjust spawntime of selected creature to #time.\n#time: use a timestring like \"10m30s\"." WHERE `name` = "npc set spawntime";
UPDATE `command` SET `help` = "Syntax: .server idlerestart #delay\r\nRestart the server after #delay if no active connections are present (no players). Use #exist_code or 2 as program exist code.\n#delay: use a timestring like \"1h15m30s\"." WHERE `name` = "server idlerestart";
UPDATE `command` SET `help` = "Syntax: .server idleshutdown #delay [#exist_code]\r\nShut the server down after #delay if no active connections are present (no players). Use #exist_code or 0 as program exist code.\n#delay: use a timestring like \"1h15m30s\"." WHERE `name` = "server idleshutdown";
UPDATE `command` SET `help` = "Syntax: .server restart #delay\r\nRestart the server after #delay. Use #exist_code or 2 as program exist code.\n#delay: use a timestring like \"1h15m30s\"." WHERE `name` = "server restart";
UPDATE `command` SET `help` = "Syntax: .server shutdown #delay [#exit_code]\r\nShut the server down after #delay. Use #exit_code or 0 as program exit code.\n#delay: use a timestring like \"1h15m30s\"." WHERE `name` = "server shutdown";
UPDATE `command` SET `help` = "Syntax: .bf timer #battleid #timer\n#timer: use a timestring like \"1h15m30s\"." WHERE `name` = "bf timer";
UPDATE `command` SET `help` = "Syntax: .deserter bg add $playerName <$time>\r\nAdds the bg deserter debuff to a player or your target with $time.\nOptional $time: use a timestring like \"1h15m30s\".Default: 15m" WHERE `name` = "deserter bg add";
UPDATE `command` SET `help` = "Syntax: .deserter instance add $playerName <$time>\r\nAdds the instance deserter debuff to a player or your target with $time.\nOptional $time: use a timestring like \"1h15m30s\". Default: 30m" WHERE `name` = "deserter instance add";
@@ -0,0 +1,45 @@
-- DB update 2022_06_13_03 -> 2022_06_13_04
DELETE FROM `player_factionchange_items` WHERE `alliance_id` IN (16393, 16397, 16423, 16422, 16424, 16421, 16401, 16403, 16425, 16426, 16427, 16428, 16369, 16391, 16413, 16414, 16415, 16416, 17594, 17596, 17598, 17599, 17600, 17601) OR `horde_id` IN (16498, 16499, 16505, 16506, 16507, 16508, 17570, 17571, 17572, 17573, 17576, 17577, 16509, 16510, 16513, 16514, 16515, 16516, 16494, 16496, 16501, 16503, 16504);
INSERT INTO `player_factionchange_items` (`alliance_id`, `alliance_comment`, `horde_id`, `horde_comment`) VALUES
(16393, 'Knight-Lieutenant\'s Dragonhide Footwraps', 16494, 'Blood Guard\'s Dragonhide Boots'),
(16397, 'Knight-Lieutenant\'s Dragonhide Gloves', 16496, 'Blood Guard\'s Dragonhide Gauntlets'),
(16423, 'Lieutenant Commander\'s Dragonhide Epaulets', 16501, 'Champion\'s Dragonhide Spaulders'),
(16422, 'Knight-Captain\'s Dragonhide Leggings', 16502, 'Legionnaire\'s Dragonhide Trousers'),
(16424, 'Lieutenant Commander\'s Dragonhide Shroud', 16503, 'Champion\'s Dragonhide Helm'),
(16421, 'Knight-Captain\'s Dragonhide Tunic', 16504, 'Legionnaire\'s Dragonhide Breastplate'),
(16401, 'Knight-Lieutenant\'s Chain Boots', 16531, 'Blood Guard\'s Chain Boots'),
(16403, 'Knight-Lieutenant\'s Chain Gauntlets', 16530, 'Blood Guard\'s Chain Gauntlets'),
(16425, 'Knight-Captain\'s Chain Hauberk', 16525, 'Legionnaire\'s Chain Breastplate'),
(16426, 'Knight-Captain\'s Chain Leggings', 16527, 'Legionnaire\'s Chain Leggings'),
(16427, 'Lieutenant Commander\'s Chain Pauldrons', 16528, 'Champion\'s Chain Pauldrons'),
(16428, 'Lieutenant Commander\'s Chain Helmet', 16526, 'Champion\'s Chain Headguard'),
(16369, 'Knight-Lieutenant\'s Silk Boots', 16485, 'Blood Guard\'s Silk Footwraps'),
(16391, 'Knight-Lieutenant\'s Silk Gloves', 16487, 'Blood Guard\'s Silk Gloves'),
(16413, 'Knight-Captain\'s Silk Raiment', 16491, 'Legionnaire\'s Silk Robes'),
(16414, 'Knight-Captain\'s Silk Leggings', 16490, 'Legionnaire\'s Silk Pants'),
(16415, 'Lieutenant Commander\'s Silk Spaulders', 16492, 'Champion\'s Silk Shoulderpads'),
(16416, 'Lieutenant Commander\'s Crown', 16489, 'Champion\'s Silk Hood'),
(16392, 'Knight-Lieutenant\'s Leather Boots', 16498, 'Blood Guard\'s Leather Treads'),
(16396, 'Knight-Lieutenant\'s Leather Gauntlets', 16499, 'Blood Guard\'s Leather Vices'),
(16417, 'Knight-Captain\'s Leather Armor', 16505, 'Legionnaire\'s Leather Hauberk'),
(16418, 'Lieutenant Commander\'s Leather Veil', 16506, 'Champion\'s Leather Headguard'),
(16419, 'Knight-Captain\'s Leather Legguards', 16508, 'Legionnaire\'s Leather Leggings'),
(16420, 'Lieutenant Commander\'s Leather Spaulders', 16507, 'Champion\'s Leather Mantle'),
(17594, 'Knight-Lieutenant\'s Satin Boots', 17616, 'Blood Guard\'s Satin Boots'),
(17596, 'Knight-Lieutenant\'s Satin Gloves', 17617, 'Blood Guard\'s Satin Gloves'),
(17598, 'Lieutenant Commander\'s Diadem', 17610, 'Champion\'s Satin Cowl'),
(17599, 'Knight-Captain\'s Satin Leggings', 17611, 'Legionnaire\'s Satin Trousers'),
(17600, 'Knight-Captain\'s Satin Robes', 17612, 'Legionnaire\'s Satin Vestments'),
(17601, 'Lieutenant Commander\'s Satin Amice', 17613, 'Champion\'s Satin Shoulderpads'),
(17562, 'Knight-Lieutenant\'s Dreadweave Boots', 17576, 'Blood Guard\'s Dreadweave Boots'),
(17564, 'Knight-Lieutenant\'s Dreadweave Gloves', 17577, 'Blood Guard\'s Dreadweave Gloves'),
(17566, 'Lieutenant Commander\'s Headguard', 17570, 'Champion\'s Dreadweave Hood'),
(17567, 'Knight-Captain\'s Dreadweave Leggings', 17571, 'Legionnaire\'s Dreadweave Leggings'),
(17568, 'Knight-Captain\'s Dreadweave Robe', 17572, 'Legionnaire\'s Dreadweave Robe'),
(17569, 'Lieutenant Commander\'s Dreadweave Mantle', 17573, 'Champion\'s Dreadweave Shoulders'),
(16405, 'Knight-Lieutenant\'s Plate Boots', 16509, 'Blood Guard\'s Plate Boots'),
(16406, 'Knight-Lieutenant\'s Plate Gauntlets', 16510, 'Blood Guard\'s Plate Gloves'),
(16429, 'Lieutenant Commander\'s Plate Helm',16514, 'Champion\'s Plate Headguard'),
(16430, 'Knight-Captain\'s Plate Chestguard', 16513, 'Legionnaire\'s Plate Armor'),
(16431, 'Knight-Captain\'s Plate Leggings', 16515, 'Legionnaire\'s Plate Legguards'),
(16432, 'Lieutenant Commander\'s Plate Pauldrons', 16516, 'Champion\'s Plate Pauldrons');
@@ -0,0 +1,22 @@
-- DB update 2022_06_13_04 -> 2022_06_13_05
--
DELETE FROM `spell_dbc` WHERE `ID` = 24081;
INSERT INTO `spell_dbc` (`ID`, `Category`, `DispelType`, `Mechanic`, `Attributes`, `AttributesEx`, `AttributesEx2`, `AttributesEx3`, `AttributesEx4`, `AttributesEx5`, `AttributesEx6`, `AttributesEx7`, `ShapeshiftMask`, `unk_320_2`, `ShapeshiftExclude`, `unk_320_3`, `Targets`, `TargetCreatureType`, `RequiresSpellFocus`, `FacingCasterFlags`, `CasterAuraState`, `TargetAuraState`, `ExcludeCasterAuraState`, `ExcludeTargetAuraState`, `CasterAuraSpell`, `TargetAuraSpell`, `ExcludeCasterAuraSpell`, `ExcludeTargetAuraSpell`, `CastingTimeIndex`, `RecoveryTime`, `CategoryRecoveryTime`, `InterruptFlags`, `AuraInterruptFlags`, `ChannelInterruptFlags`, `ProcTypeMask`, `ProcChance`, `ProcCharges`, `MaxLevel`, `BaseLevel`, `SpellLevel`, `DurationIndex`, `PowerType`, `ManaCost`, `ManaCostPerLevel`, `ManaPerSecond`, `ManaPerSecondPerLevel`, `RangeIndex`, `Speed`, `ModalNextSpell`, `CumulativeAura`, `Totem_1`, `Totem_2`, `Reagent_1`, `Reagent_2`, `Reagent_3`, `Reagent_4`, `Reagent_5`, `Reagent_6`, `Reagent_7`, `Reagent_8`, `ReagentCount_1`, `ReagentCount_2`, `ReagentCount_3`, `ReagentCount_4`, `ReagentCount_5`, `ReagentCount_6`, `ReagentCount_7`, `ReagentCount_8`, `EquippedItemClass`, `EquippedItemSubclass`, `EquippedItemInvTypes`, `Effect_1`, `Effect_2`, `Effect_3`, `EffectDieSides_1`, `EffectDieSides_2`, `EffectDieSides_3`, `EffectRealPointsPerLevel_1`, `EffectRealPointsPerLevel_2`, `EffectRealPointsPerLevel_3`, `EffectBasePoints_1`, `EffectBasePoints_2`, `EffectBasePoints_3`, `EffectMechanic_1`, `EffectMechanic_2`, `EffectMechanic_3`, `ImplicitTargetA_1`, `ImplicitTargetA_2`, `ImplicitTargetA_3`, `ImplicitTargetB_1`, `ImplicitTargetB_2`, `ImplicitTargetB_3`, `EffectRadiusIndex_1`, `EffectRadiusIndex_2`, `EffectRadiusIndex_3`, `EffectAura_1`, `EffectAura_2`, `EffectAura_3`, `EffectAuraPeriod_1`, `EffectAuraPeriod_2`, `EffectAuraPeriod_3`, `EffectMultipleValue_1`, `EffectMultipleValue_2`, `EffectMultipleValue_3`, `EffectChainTargets_1`, `EffectChainTargets_2`, `EffectChainTargets_3`, `EffectItemType_1`, `EffectItemType_2`, `EffectItemType_3`, `EffectMiscValue_1`, `EffectMiscValue_2`, `EffectMiscValue_3`, `EffectMiscValueB_1`, `EffectMiscValueB_2`, `EffectMiscValueB_3`, `EffectTriggerSpell_1`, `EffectTriggerSpell_2`, `EffectTriggerSpell_3`, `EffectPointsPerCombo_1`, `EffectPointsPerCombo_2`, `EffectPointsPerCombo_3`, `EffectSpellClassMaskA_1`, `EffectSpellClassMaskA_2`, `EffectSpellClassMaskA_3`, `EffectSpellClassMaskB_1`, `EffectSpellClassMaskB_2`, `EffectSpellClassMaskB_3`, `EffectSpellClassMaskC_1`, `EffectSpellClassMaskC_2`, `EffectSpellClassMaskC_3`, `SpellVisualID_1`, `SpellVisualID_2`, `SpellIconID`, `ActiveIconID`, `SpellPriority`, `Name_Lang_enUS`, `Name_Lang_enGB`, `Name_Lang_koKR`, `Name_Lang_frFR`, `Name_Lang_deDE`, `Name_Lang_enCN`, `Name_Lang_zhCN`, `Name_Lang_enTW`, `Name_Lang_zhTW`, `Name_Lang_esES`, `Name_Lang_esMX`, `Name_Lang_ruRU`, `Name_Lang_ptPT`, `Name_Lang_ptBR`, `Name_Lang_itIT`, `Name_Lang_Unk`, `Name_Lang_Mask`, `NameSubtext_Lang_enUS`, `NameSubtext_Lang_enGB`, `NameSubtext_Lang_koKR`, `NameSubtext_Lang_frFR`, `NameSubtext_Lang_deDE`, `NameSubtext_Lang_enCN`, `NameSubtext_Lang_zhCN`, `NameSubtext_Lang_enTW`, `NameSubtext_Lang_zhTW`, `NameSubtext_Lang_esES`, `NameSubtext_Lang_esMX`, `NameSubtext_Lang_ruRU`, `NameSubtext_Lang_ptPT`, `NameSubtext_Lang_ptBR`, `NameSubtext_Lang_itIT`, `NameSubtext_Lang_Unk`, `NameSubtext_Lang_Mask`, `Description_Lang_enUS`, `Description_Lang_enGB`, `Description_Lang_koKR`, `Description_Lang_frFR`, `Description_Lang_deDE`, `Description_Lang_enCN`, `Description_Lang_zhCN`, `Description_Lang_enTW`, `Description_Lang_zhTW`, `Description_Lang_esES`, `Description_Lang_esMX`, `Description_Lang_ruRU`, `Description_Lang_ptPT`, `Description_Lang_ptBR`, `Description_Lang_itIT`, `Description_Lang_Unk`, `Description_Lang_Mask`, `AuraDescription_Lang_enUS`, `AuraDescription_Lang_enGB`, `AuraDescription_Lang_koKR`, `AuraDescription_Lang_frFR`, `AuraDescription_Lang_deDE`, `AuraDescription_Lang_enCN`, `AuraDescription_Lang_zhCN`, `AuraDescription_Lang_enTW`, `AuraDescription_Lang_zhTW`, `AuraDescription_Lang_esES`, `AuraDescription_Lang_esMX`, `AuraDescription_Lang_ruRU`, `AuraDescription_Lang_ptPT`, `AuraDescription_Lang_ptBR`, `AuraDescription_Lang_itIT`, `AuraDescription_Lang_Unk`, `AuraDescription_Lang_Mask`, `ManaCostPct`, `StartRecoveryCategory`, `StartRecoveryTime`, `MaxTargetLevel`, `SpellClassSet`, `SpellClassMask_1`, `SpellClassMask_2`, `SpellClassMask_3`, `MaxTargets`, `DefenseType`, `PreventionType`, `StanceBarOrder`, `EffectChainAmplitude_1`, `EffectChainAmplitude_2`, `EffectChainAmplitude_3`, `MinFactionID`, `MinReputation`, `RequiredAuraVision`, `RequiredTotemCategoryID_1`, `RequiredTotemCategoryID_2`, `RequiredAreasID`, `SchoolMask`, `RuneCostID`, `SpellMissileID`, `PowerDisplayID`, `EffectBonusMultiplier_1`, `EffectBonusMultiplier_2`, `EffectBonusMultiplier_3`, `SpellDescriptionVariableID`, `SpellDifficultyID`) VALUES
(24081, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 28, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 15041, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Summon Spawn of Mar\'li', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 0, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0);
DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_hatch_eggs', 'spell_enveloping_webs', 'spell_marli_transform');
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(24083, 'spell_hatch_eggs'),
(24110, 'spell_enveloping_webs'),
(24084, 'spell_marli_transform');
DELETE FROM `creature_text` WHERE `CreatureID` = 15041;
DELETE FROM `creature_text` WHERE `CreatureID` = 14510 AND `GroupID` = 4;
INSERT INTO `creature_text` (`CreatureID`,`GroupID`,`ID`,`Text`,`Type`,`Language`,`Probability`,`Emote`,`Duration`,`Sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
(15041, 0, 0, '%s is fully grown!', 16, 0, 100, 0, 0, 0, 10445, 0, 'Spawn of Mar\'li - EMOTE_FULL_GROWN'),
(14510, 4, 0, 'The brood shall not fall!', 14, 0, 100, 0, 0, 0, 10444, 0, 'Mar\'li - SAY_TRANSFORM_BACK');
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 13 AND `SourceEntry` IN (24082, 24083);
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(13, 1, 24082, 0, 0, 31, 0, 5, 179985, 0, 0, 0, 0, '', 'Hatch Spider Egg targets Spider Egg'),
(13, 1, 24083, 0, 0, 31, 0, 5, 179985, 0, 0, 0, 0, '', 'Hatch Eggs targets Spider Egg');
@@ -0,0 +1,5 @@
-- DB update 2022_06_13_05 -> 2022_06_14_00
--
DELETE FROM `spell_script_names` WHERE `spell_id`=24684;
INSERT INTO `spell_script_names` VALUES
(24684,'spell_chain_burn');
@@ -0,0 +1,57 @@
-- DB update 2022_06_14_00 -> 2022_06_14_01
--
ALTER TABLE `gameobject_template_addon`
ADD COLUMN `artkit0` INT NOT NULL DEFAULT 0 AFTER `maxgold`,
ADD COLUMN `artkit1` INT NOT NULL DEFAULT 0 AFTER `artkit0`,
ADD COLUMN `artkit2` INT NOT NULL DEFAULT 0 AFTER `artkit1`,
ADD COLUMN `artkit3` INT NOT NULL DEFAULT 0 AFTER `artkit2`;
DROP TABLE IF EXISTS `gameobjectartkit_dbc`;
CREATE TABLE `gameobjectartkit_dbc`
(
`ID` INT NOT NULL DEFAULT 0,
`Texture_1` INT NOT NULL DEFAULT 0,
`Texture_2` INT NOT NULL DEFAULT 0,
`Texture_3` INT NOT NULL DEFAULT 0,
`Attach_Model_1` INT NOT NULL DEFAULT 0,
`Attach_Model_2` INT NOT NULL DEFAULT 0,
`Attach_Model_3` INT NOT NULL DEFAULT 0,
`Attach_Model_4` INT NOT NULL DEFAULT 0,
PRIMARY KEY (`ID`)
) ENGINE=MYISAM DEFAULT CHARSET=utf8mb4;
-- Note: All of these should be targetable by spells 46904 and 46903, but conditions are only set for Stormwind (damn Horde fanatics)
UPDATE `gameobject_template_addon` SET `artkit0` = 121, `artkit1` = 122 WHERE `entry` IN (
188352, -- Flame of Shattrath
188129, -- Flame of Silvermoon
188128, -- Flame of the Exodar
181567, -- Flame of the Wetlands
181566, -- Flame of Hillsbrad
181565, -- Flame of Westfall
181564, -- Flame of Silverpine
181563, -- Flame of Darkshore
181562, -- Flame of Stonetalon
181561, -- Flame of Ashenvale
181560, -- Flame of the Barrens
181349, -- Flame of the Scholomance
181348, -- Flame of Stratholme
181347, -- Flame of Blackrock Spire
181346, -- Flame of Dire Maul
181345, -- Flame of the Hinterlands
181344, -- Flame of the Blasted Lands
181343, -- Flame of Un'Goro
181342, -- Flame of Azshara
181341, -- Flame of Searing Gorge
181340, -- Flame of Winterspring
181339, -- Flame of Silithus
181338, -- Flame of the Plaguelands
181337, -- Flame of Thunder Bluff
181336, -- Flame of Orgrimmar
181335, -- Flame of the Undercity
181334, -- Flame of Darnassus
181333, -- Flame of Ironforge
181332 -- Flame of Stormwind
);
DELETE FROM `spell_script_names` WHERE `ScriptName`= "spell_banging_the_gong";
@@ -0,0 +1,13 @@
-- DB update 2022_06_14_01 -> 2022_06_14_02
--
UPDATE `spell_target_position` SET `PositionX`=-11688.5, `PositionY`=-1737.74, `PositionZ`=8.409842 WHERE `id` IN (24325, 24593);
DELETE FROM `event_scripts` WHERE `id`=9104;
DELETE FROM `spell_script_names` WHERE `spell_id`=24325;
INSERT INTO `spell_script_names` VALUES
(24325, 'spell_pagles_point_cast');
DELETE FROM `waypoint_data` WHERE `id`=151140;
INSERT INTO `waypoint_data` VALUES
(151140,1,-11697.263,-1759.001,10.364448,0,0,0,0,100,0),
(151140,2,-11689.899,-1776.087,12.593142,6.098,0,0,0,100,0);
@@ -0,0 +1,3 @@
-- DB update 2022_06_14_02 -> 2022_06_14_03
-- Update movement for Tarindralla
UPDATE `creature` SET `wander_distance` = 7, `MovementType` = 1 WHERE `guid` = 47347 AND `id1` = 1992;
@@ -0,0 +1,6 @@
-- DB update 2022_06_14_03 -> 2022_06_14_04
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 1540201) AND (`source_type` = 9) AND (`id` IN (4, 5, 6));
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`, `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
(1540201, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 12, 15958, 4, 15000, 0, 0, 0, 8, 0, 0, 0, 0, 8750.1, -7129.7, 35.2976, 3.8041, 'Apprentice Mirveda - Actionlist - Summon Creature \'Gharsul the Remorseless\''),
(1540201, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 12, 15656, 4, 15000, 0, 0, 0, 8, 0, 0, 0, 0, 8753.61, -7133.15, 35, 3.8576, 'Apprentice Mirveda - Actionlist - Summon Creature \'Angershade\''),
(1540201, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 12, 15656, 4, 15000, 0, 0, 0, 8, 0, 0, 0, 0, 8747.14, -7125.71, 35.848, 3.8576, 'Apprentice Mirveda - Actionlist - Summon Creature \'Angershade\'');
@@ -0,0 +1,16 @@
-- DB update 2022_06_14_04 -> 2022_06_14_05
--
DELETE FROM `creature_text` WHERE `CreatureID`=15111 AND `GroupID` IN (0,1);
INSERT INTO `creature_text` (`CreatureID`, `ID`, `Text`, `Type`, `Probability`, `BroadcastTextId`) VALUES
(15111, 0, 'I gonna make you into mojo!', 12, 100, 10435),
(15111, 1, 'Troll mojo da strongest mojo!', 12, 100, 10437);
DELETE FROM `creature_template_spell` WHERE (`CreatureID` = 15111) AND (`Index` IN (0, 1));
INSERT INTO `creature_template_spell` (`CreatureID`, `Index`, `Spell`, `VerifiedBuild`) VALUES
(15111, 0, 24611, 0),
(15111, 1, 24612, 0);
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 15111;
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 15111) AND (`source_type` = 0) AND (`id` IN (3));
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`, `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
(15111, 0, 3, 0, 4, 0, 15, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mad Servant - On Aggro - Say Line GroupID 0');
@@ -0,0 +1,6 @@
-- DB update 2022_06_14_05 -> 2022_06_14_06
--
DELETE FROM `spell_group` WHERE `spell_id` IN (8042,20005);
INSERT INTO `spell_group` VALUES
(1014,8042,0),
(1014,20005,0);
@@ -0,0 +1,5 @@
-- DB update 2022_06_14_06 -> 2022_06_14_07
--
DELETE FROM `spell_script_names` WHERE `spell_id`=29341;
INSERT INTO `spell_script_names` VALUES
(29341,'spell_warl_shadowburn');
@@ -0,0 +1,24 @@
-- DB update 2022_06_14_07 -> 2022_06_14_08
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 4966;
DELETE FROM `smart_scripts` WHERE ((`entryorguid` = 496603) AND (`source_type` = 9) AND (`id` IN (0, 1, 2, 3))) OR ((`entryorguid` = 496600) AND (`source_type` = 9) AND (`id` IN (0, 1, 2, 3, 4, 5, 6))) OR ((`entryorguid` = 5184) AND (`source_type` = 0)) OR (`source_type` = 0 AND `entryorguid` = 4966 AND (`id` IN (0, 1, 2, 3, 4, 5, 6, 7)));
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`, `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
(4966, 0, 0, 1, 11, 0, 100, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Private Hendel - On Respawn - Set Emote State 0'),
(4966, 0, 1, 2, 61, 0, 100, 512, 0, 0, 0, 0, 0, 82, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Private Hendel - On Respawn - Add Npc Flags Questgiver'),
(4966, 0, 2, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Private Hendel - On Respawn - Reset Invincibility Hp'),
(4966, 0, 3, 0, 19, 0, 100, 512, 1324, 0, 0, 0, 0, 80, 496600, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Private Hendel - On Quest \'The Missing Diplomat\' Taken - Run Script'),
(4966, 0, 4, 0, 7, 1, 100, 513, 0, 0, 0, 0, 0, 80, 496603, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Private Hendel - On Evade - Run Script (Phase 1) (No Repeat)'),
(4966, 0, 6, 0, 2, 1, 100, 512, 0, 20, 300, 500, 0, 80, 496601, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Private Hendel - Between 0-20% Health - Run Script (Phase 1)'),
(4966, 0, 7, 0, 40, 2, 100, 512, 1, 496600, 0, 0, 0, 80, 496602, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Private Hendel - On Waypoint 1 Reached - Run Script (Phase 2)'),
(496600, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Private Hendel - Actionlist - Remove Npc Flags Questgiver'),
(496600, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Private Hendel - Actionlist - Set Invincibility Hp 1'),
(496600, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 2, 168, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Private Hendel - Actionlist - Set Faction 168'),
(496600, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 11, 5184, 50, 0, 0, 0, 0, 0, 0, 'Private Hendel - Actionlist - Set Data 1 1'),
(496600, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Private Hendel - Actionlist - Store Targetlist'),
(496600, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Private Hendel - Actionlist - Start Attacking'),
(496600, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Private Hendel - Actionlist - Set Event Phase 1'),
(5184, 0, 0, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 11, 7165, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Theramore Sentry - On Aggro - Cast \'Battle Stance\''),
(5184, 0, 1, 0, 38, 0, 100, 513, 3, 3, 1, 2, 0, 41, 60000, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Theramore Sentry - On Data Set 3 3 - Despawn In 60000 ms (No Repeat)'),
(496603, 9, 0, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 0, 41, 1, 300, 0, 0, 0, 0, 19, 5184, 50, 0, 0, 0, 0, 0, 0, 'Private Hendel - Actionlist - Despawn In 1000 ms'),
(496603, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 6, 1324, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Private Hendel - Actionlist - Fail Quest \'The Missing Diplomat\''),
(496603, 9, 2, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 0, 41, 1, 300, 0, 0, 0, 0, 19, 5184, 50, 0, 0, 0, 0, 0, 0, 'Private Hendel - Actionlist - Despawn Instant'),
(496603, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 41, 1, 300, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Private Hendel - Actionlist - Despawn Instant');
@@ -0,0 +1,3 @@
-- DB update 2022_06_14_08 -> 2022_06_15_00
DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_gen_proc_once_per_cast';
@@ -0,0 +1,3 @@
-- DB update 2022_06_15_00 -> 2022_06_15_01
-- Adjust drop rate of Ritual salve to 72% (based by a sniffer with 325 kills)
UPDATE `creature_loot_template` SET `Chance` = 72 WHERE `Entry` = 2953 AND `Item` = 6634;
@@ -0,0 +1,4 @@
-- DB update 2022_06_15_01 -> 2022_06_15_02
DELETE FROM `spell_script_names` WHERE `spell_id` = 24834;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(24834, 'spell_shadow_bolt_whirl');
@@ -0,0 +1,3 @@
-- DB update 2022_06_15_02 -> 2022_06_16_00
UPDATE `quest_template_addon` SET `RewardMailTemplateID` = 107 WHERE (`ID` = 5237);
UPDATE `quest_template_addon` SET `RewardMailTemplateID` = 101 WHERE (`ID` = 5238);
@@ -0,0 +1,19 @@
-- DB update 2022_06_16_00 -> 2022_06_16_01
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 16332;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 16332);
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`, `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
(16332, 0, 0, 1, 1, 0, 100, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Darnassian Huntress - Out of Combat - Disable Combat Movement'),
(16332, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Darnassian Huntress - Out of Combat - Stop Attacking'),
(16332, 0, 2, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 11, 6660, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Darnassian Huntress - On Aggro - Cast \'Shoot\''),
(16332, 0, 3, 4, 9, 0, 100, 0, 5, 30, 2300, 3900, 0, 11, 6660, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Darnassian Huntress - Within 5-30 Range - Cast \'Shoot\''),
(16332, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 40, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Darnassian Huntress - Within 5-30 Range - Set Sheath Ranged'),
(16332, 0, 5, 6, 9, 0, 100, 0, 25, 80, 0, 0, 0, 21, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Darnassian Huntress - Within 25-80 Range - Enable Combat Movement'),
(16332, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Darnassian Huntress - Within 25-80 Range - Start Attacking'),
(16332, 0, 7, 8, 9, 0, 100, 0, 0, 5, 0, 0, 0, 21, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Darnassian Huntress - Within 0-5 Range - Enable Combat Movement'),
(16332, 0, 8, 9, 61, 0, 100, 0, 0, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Darnassian Huntress - Within 0-5 Range - Set Sheath Melee'),
(16332, 0, 9, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Darnassian Huntress - Within 0-5 Range - Start Attacking'),
(16332, 0, 10, 0, 9, 0, 100, 0, 5, 15, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Darnassian Huntress - Within 5-15 Range - Disable Combat Movement'),
(16332, 0, 11, 0, 9, 0, 100, 0, 0, 5, 5000, 9000, 0, 11, 11976, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Darnassian Huntress - Within 0-5 Range - Cast \'Strike\''),
(16332, 0, 12, 13, 2, 0, 100, 0, 0, 15, 0, 0, 0, 21, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Darnassian Huntress - Between 0-15% Health - Enable Combat Movement'),
(16332, 0, 13, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Darnassian Huntress - Between 0-15% Health - Flee For Assist'),
(16332, 0, 14, 0, 7, 0, 100, 0, 0, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Darnassian Huntress - On Evade - Set Sheath Melee');
@@ -0,0 +1,2 @@
-- DB update 2022_06_16_01 -> 2022_06_16_02
UPDATE `creature_template` SET `unit_flags` = `unit_flags`&~33554432 WHERE `entry` = 14467;
@@ -0,0 +1,4 @@
-- DB update 2022_06_16_02 -> 2022_06_16_03
--
UPDATE `creature_template` SET `unit_flags`=`unit_flags`|33554432,`flags_extra`=`flags_extra`|2 WHERE `entry`=13148;
@@ -0,0 +1,11 @@
-- DB update 2022_06_16_03 -> 2022_06_16_04
UPDATE `creature_template` SET `DamageModifier` = 29, `BaseAttackTime` = 1100 WHERE (`entry` = 15114);
UPDATE `creature_template` SET `DamageModifier` = 27, `BaseAttackTime` = 1300 WHERE (`entry` = 15083);
UPDATE `creature_template` SET `DamageModifier` = 24, `BaseAttackTime` = 2000 WHERE (`entry` = 15085);
UPDATE `creature_template` SET `DamageModifier` = 23, `BaseAttackTime` = 1108 WHERE (`entry` = 15084);
UPDATE `creature_template` SET `DamageModifier` = 20 WHERE `entry` IN (14834, 15082);
UPDATE `creature_template` SET `DamageModifier` = 17 WHERE `entry` IN (11382, 11380);
UPDATE `creature_template` SET `DamageModifier` = 15 WHERE `entry` IN (14517, 14515);
UPDATE `creature_template` SET `DamageModifier` = 14 WHERE `entry` IN (14510, 14507);
UPDATE `creature_template` SET `DamageModifier` = 13 WHERE (`entry` = 14509);
UPDATE `creature_template` SET `BaseAttackTime` = 1108 WHERE (`entry` = 15084);
@@ -0,0 +1,10 @@
-- DB update 2022_06_16_04 -> 2022_06_16_05
--
DELETE FROM `game_event_gameobject` WHERE `guid`=28704;
INSERT INTO `game_event_gameobject` VALUES
(27,28704),
(28,28704),
(29,28704),
(30,28704);
UPDATE `gameobject_template` SET `ScriptName`='go_brazier_of_madness' WHERE `entry`=180327;
@@ -0,0 +1,2 @@
-- DB update 2022_06_16_05 -> 2022_06_16_06
UPDATE `creature_template` SET `flags_extra` = `flags_extra`|4194304 WHERE `entry` = 15261;
@@ -0,0 +1,11 @@
-- DB update 2022_06_16_06 -> 2022_06_16_07
UPDATE `creature_template` SET `AIName`='SmartAI',`flags_extra`=2 WHERE `entry`=14989;
DELETE FROM `smart_scripts` WHERE `entryorguid`= 14989 AND `source_type`= 0 AND `id`= 0;
INSERT INTO `smart_scripts` (`entryorguid`, `event_type`, `event_flags`, `action_type`, `action_param1`, `target_type`, `comment`) VALUES
(14989, 54, 1, 11, 26744, 1, 'Poisonous Cloud - OOC - Cast \'Serverside - Poisonous Blood\'');
DELETE FROM `smart_scripts` WHERE `entryorguid`= 11357 AND `source_type`= 0 AND `id`= 2;
INSERT INTO `smart_scripts` (`entryorguid`, `id`, `event_type`, `event_flags`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `target_type`, `comment`) VALUES
(11357, 2, 6, 512, 12, 14989, 3, 10000, 1, 'Son of Hakkar - On Just Died - Summon \'Poisonous Cloud\'');
+1 -2
View File
@@ -26,8 +26,7 @@ add_subdirectory(stdfs)
add_subdirectory(threads)
add_subdirectory(utf8cpp)
# if ((APPS_BUILD AND (NOT APPS_BUILD STREQUAL "none")) OR BUILD_TOOLS_DB_IMPORT) #DB import PR
if ((APPS_BUILD AND (NOT APPS_BUILD STREQUAL "none")))
if ((APPS_BUILD AND (NOT APPS_BUILD STREQUAL "none")) OR BUILD_TOOLS_DB_IMPORT)
add_subdirectory(mysql)
endif()
+1 -3
View File
@@ -10,8 +10,6 @@
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
message("")
# Make the script module list available in the current scope
GetModuleSourceList(MODULES_MODULE_LIST)
@@ -302,7 +300,7 @@ target_include_directories(modules
${CMAKE_CURRENT_SOURCE_DIR}
${PUBLIC_INCLUDES})
set_target_properties(scripts
set_target_properties(modules
PROPERTIES
FOLDER
"modules")
+1 -1
View File
@@ -22,7 +22,7 @@ ExternalProject_Add(
SOURCE_DIR "@GOOGLETEST_DOWNLOAD_ROOT@/googletest-src"
BINARY_DIR "@GOOGLETEST_DOWNLOAD_ROOT@/googletest-build"
GIT_REPOSITORY
https://github.com/Helias/googletest.git
https://github.com/google/googletest.git
GIT_TAG
main
CONFIGURE_COMMAND ""
+3 -3
View File
@@ -75,9 +75,9 @@ function(CheckToolsBuildList)
list(APPEND BUILD_TOOLS_WHITELIST map_extractor mmaps_generator vmap4_assembler vmap4_extractor)
endif()
# if (TOOLS_BUILD STREQUAL "db-only")
# list(APPEND BUILD_TOOLS_WHITELIST dbimport)
# endif()
if (TOOLS_BUILD STREQUAL "db-only")
list(APPEND BUILD_TOOLS_WHITELIST dbimport)
endif()
endif()
# Set the TOOL_${TOOL_BUILD_NAME} variables from the
+1 -2
View File
@@ -12,8 +12,7 @@
add_subdirectory(apps)
# if ((APPS_BUILD AND NOT APPS_BUILD STREQUAL "none") OR BUILD_TOOLS_DB_IMPORT) # DB import PR
if ((APPS_BUILD AND NOT APPS_BUILD STREQUAL "none"))
if ((APPS_BUILD AND NOT APPS_BUILD STREQUAL "none") OR BUILD_TOOLS_DB_IMPORT)
add_subdirectory(database)
endif()
-5
View File
@@ -56,11 +56,6 @@ foreach(BUILD_APP ${APPLICATIONS_BUILD_LIST})
set(BUILD_APP_VALUE_DISPLAY_apps apps)
list(APPEND BUILD_APP_VALUE_CONTAINS_apps ${BUILD_APP})
if (${BUILD_APP} MATCHES "authserver")
set (BUILD_APPLICATION_AUTHSERVER 1)
elseif(${BUILD_APP} MATCHES "worldserver")
set (BUILD_APPLICATION_WORLDSERVER 1)
endif()
else()
list(APPEND BUILD_APP_GRAPH_KEYS disabled)
set(BUILD_APP_VALUE_DISPLAY_disabled disabled)
+4 -12
View File
@@ -134,14 +134,6 @@ void CreatureAI::DoZoneInCombat(Creature* creature /*= nullptr*/, float maxRange
{
creature->AddThreat(player, 0.0f);
}
/* Causes certain things to never leave the threat list (Priest Lightwell, etc):
for (Unit::ControlSet::const_iterator itr = player->m_Controlled.begin(); itr != player->m_Controlled.end(); ++itr)
{
creature->SetInCombatWith(*itr);
(*itr)->SetInCombatWith(creature);
creature->AddThreat(*itr, 0.0f);
}*/
}
}
}
@@ -161,7 +153,7 @@ void CreatureAI::MoveInLineOfSight_Safe(Unit* who)
void CreatureAI::MoveInLineOfSight(Unit* who)
{
if (me->GetVictim())
if (me->IsEngaged())
return;
// pussywizard: civilian, non-combat pet or any other NOT HOSTILE TO ANYONE (!)
@@ -182,7 +174,7 @@ void CreatureAI::TriggerAlert(Unit const* who) const
if (!who || who->GetTypeId() != TYPEID_PLAYER)
return;
// If this unit isn't an NPC, is already distracted, is in combat, is confused, stunned or fleeing, do nothing
if (me->GetTypeId() != TYPEID_UNIT || me->IsInCombat() || me->HasUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_STUNNED | UNIT_STATE_FLEEING | UNIT_STATE_DISTRACTED))
if (me->GetTypeId() != TYPEID_UNIT || me->IsEngaged() || me->HasUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_STUNNED | UNIT_STATE_FLEEING | UNIT_STATE_DISTRACTED))
return;
// Only alert for hostiles!
if (me->IsCivilian() || me->HasReactState(REACT_PASSIVE) || !me->IsHostileTo(who) || !me->_IsTargetAcceptable(who))
@@ -253,7 +245,7 @@ void CreatureAI::SetGazeOn(Unit* target)
bool CreatureAI::UpdateVictimWithGaze()
{
if (!me->IsInCombat())
if (!me->IsEngaged())
return false;
if (me->HasReactState(REACT_PASSIVE))
@@ -271,7 +263,7 @@ bool CreatureAI::UpdateVictimWithGaze()
bool CreatureAI::UpdateVictim()
{
if (!me->IsInCombat())
if (!me->IsEngaged())
return false;
if (!me->HasReactState(REACT_PASSIVE))
+2 -1
View File
@@ -114,7 +114,7 @@ public:
// Called for reaction at stopping attack at no attackers or targets
virtual void EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER);
// Called for reaction at enter to combat if not in combat yet (enemy can be nullptr)
// Called for reaction when initially engaged
virtual void EnterCombat(Unit* /*victim*/) {}
// Called when the creature is killed
@@ -196,6 +196,7 @@ public:
virtual bool CanSeeAlways(WorldObject const* /*obj*/) { return false; }
virtual bool CanBeSeen(Player const* /*seer*/) { return true; }
virtual bool CanAlwaysBeDetectable(WorldObject const* /*seer*/) { return false; }
virtual void PetStopAttack() { }
@@ -574,7 +574,7 @@ void BossAI::TeleportCheaters()
void BossAI::JustSummoned(Creature* summon)
{
summons.Summon(summon);
if (me->IsInCombat())
if (me->IsEngaged())
DoZoneInCombat(summon);
}
+16 -16
View File
@@ -4044,18 +4044,18 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax);
break;
case SMART_EVENT_UPDATE_OOC:
if (me && me->IsInCombat())
if (me && me->IsEngaged())
return;
ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax);
break;
case SMART_EVENT_UPDATE_IC:
if (!me || !me->IsInCombat())
if (!me || !me->IsEngaged())
return;
ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax);
break;
case SMART_EVENT_HEALTH_PCT:
{
if (!me || !me->IsInCombat() || !me->GetMaxHealth())
if (!me || !me->IsEngaged() || !me->GetMaxHealth())
return;
uint32 perc = (uint32)me->GetHealthPct();
if (perc > e.event.minMaxRepeat.max || perc < e.event.minMaxRepeat.min)
@@ -4065,7 +4065,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
}
case SMART_EVENT_TARGET_HEALTH_PCT:
{
if (!me || !me->IsInCombat() || !me->GetVictim() || !me->GetVictim()->GetMaxHealth())
if (!me || !me->IsEngaged() || !me->GetVictim() || !me->GetVictim()->GetMaxHealth())
return;
uint32 perc = (uint32)me->GetVictim()->GetHealthPct();
if (perc > e.event.minMaxRepeat.max || perc < e.event.minMaxRepeat.min)
@@ -4075,7 +4075,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
}
case SMART_EVENT_MANA_PCT:
{
if (!me || !me->IsInCombat() || !me->GetMaxPower(POWER_MANA))
if (!me || !me->IsEngaged() || !me->GetMaxPower(POWER_MANA))
return;
uint32 perc = uint32(me->GetPowerPct(POWER_MANA));
if (perc > e.event.minMaxRepeat.max || perc < e.event.minMaxRepeat.min)
@@ -4085,7 +4085,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
}
case SMART_EVENT_TARGET_MANA_PCT:
{
if (!me || !me->IsInCombat() || !me->GetVictim() || !me->GetVictim()->GetMaxPower(POWER_MANA))
if (!me || !me->IsEngaged() || !me->GetVictim() || !me->GetVictim()->GetMaxPower(POWER_MANA))
return;
uint32 perc = uint32(me->GetVictim()->GetPowerPct(POWER_MANA));
if (perc > e.event.minMaxRepeat.max || perc < e.event.minMaxRepeat.min)
@@ -4095,7 +4095,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
}
case SMART_EVENT_RANGE:
{
if (!me || !me->IsInCombat() || !me->GetVictim())
if (!me || !me->IsEngaged() || !me->GetVictim())
return;
if (me->IsInRange(me->GetVictim(), (float)e.event.minMaxRepeat.min, (float)e.event.minMaxRepeat.max))
@@ -4106,7 +4106,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
}
case SMART_EVENT_VICTIM_CASTING:
{
if (!me || !me->IsInCombat())
if (!me || !me->IsEngaged())
return;
Unit* victim = me->GetVictim();
@@ -4124,7 +4124,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
}
case SMART_EVENT_FRIENDLY_HEALTH:
{
if (!me || !me->IsInCombat())
if (!me || !me->IsEngaged())
return;
Unit* target = DoSelectLowestHpFriendly((float)e.event.friendlyHealth.radius, e.event.friendlyHealth.hpDeficit);
@@ -4139,7 +4139,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
}
case SMART_EVENT_FRIENDLY_IS_CC:
{
if (!me || !me->IsInCombat())
if (!me || !me->IsEngaged())
return;
std::list<Creature*> pList;
@@ -4285,7 +4285,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
}
case SMART_EVENT_OOC_LOS:
{
if (!me || me->IsInCombat())
if (!me || me->IsEngaged())
return;
//can trigger if closer than fMaxAllowedRange
float range = (float)e.event.los.maxDist;
@@ -4309,7 +4309,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
}
case SMART_EVENT_IC_LOS:
{
if (!me || !me->IsInCombat())
if (!me || !me->IsEngaged())
return;
//can trigger if closer than fMaxAllowedRange
float range = (float)e.event.los.maxDist;
@@ -4507,7 +4507,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
}
case SMART_EVENT_FRIENDLY_HEALTH_PCT:
{
if (!me || !me->IsInCombat())
if (!me || !me->IsEngaged())
return;
Unit* target = nullptr;
@@ -4701,10 +4701,10 @@ void SmartScript::UpdateTimer(SmartScriptHolder& e, uint32 const diff)
if (e.event.event_phase_mask && !IsInPhase(e.event.event_phase_mask))
return;
if (e.GetEventType() == SMART_EVENT_UPDATE_IC && (!me || !me->IsInCombat()))
if (e.GetEventType() == SMART_EVENT_UPDATE_IC && (!me || !me->IsEngaged()))
return;
if (e.GetEventType() == SMART_EVENT_UPDATE_OOC && (me && me->IsInCombat()))//can be used with me=nullptr (go script)
if (e.GetEventType() == SMART_EVENT_UPDATE_OOC && (me && me->IsEngaged()))//can be used with me=nullptr (go script)
return;
if (e.timer < diff)
@@ -4982,7 +4982,7 @@ void SmartScript::OnMoveInLineOfSight(Unit* who)
if (!me)
return;
ProcessEventsFor(me->IsInCombat() ? SMART_EVENT_IC_LOS : SMART_EVENT_OOC_LOS, who);
ProcessEventsFor(me->IsEngaged() ? SMART_EVENT_IC_LOS : SMART_EVENT_OOC_LOS, who);
}
/*
+3
View File
@@ -86,6 +86,8 @@ static FactionTeamMap sFactionTeamMap;
DBCStorage <FactionEntry> sFactionStore(FactionEntryfmt);
DBCStorage <FactionTemplateEntry> sFactionTemplateStore(FactionTemplateEntryfmt);
DBCStorage <GameObjectArtKitEntry> sGameObjectArtKitStore(GameObjectArtKitfmt);
DBCStorage <GameObjectDisplayInfoEntry> sGameObjectDisplayInfoStore(GameObjectDisplayInfofmt);
DBCStorage <GemPropertiesEntry> sGemPropertiesStore(GemPropertiesEntryfmt);
DBCStorage <GlyphPropertiesEntry> sGlyphPropertiesStore(GlyphPropertiesfmt);
@@ -306,6 +308,7 @@ void LoadDBCStores(const std::string& dataPath)
LOAD_DBC(sEmotesTextSoundStore, "EmotesTextSound.dbc", "emotetextsound_dbc");
LOAD_DBC(sFactionStore, "Faction.dbc", "faction_dbc");
LOAD_DBC(sFactionTemplateStore, "FactionTemplate.dbc", "factiontemplate_dbc");
LOAD_DBC(sGameObjectArtKitStore, "GameObjectArtKit.dbc", "gameobjectartkit_dbc");
LOAD_DBC(sGameObjectDisplayInfoStore, "GameObjectDisplayInfo.dbc", "gameobjectdisplayinfo_dbc");
LOAD_DBC(sGemPropertiesStore, "GemProperties.dbc", "gemproperties_dbc");
LOAD_DBC(sGlyphPropertiesStore, "GlyphProperties.dbc", "glyphproperties_dbc");
+1
View File
@@ -110,6 +110,7 @@ extern DBCStorage <EmotesTextEntry> sEmotesTextStore;
extern DBCStorage <EmotesTextSoundEntry> sEmotesTextSoundStore;
extern DBCStorage <FactionEntry> sFactionStore;
extern DBCStorage <FactionTemplateEntry> sFactionTemplateStore;
extern DBCStorage <GameObjectArtKitEntry> sGameObjectArtKitStore;
extern DBCStorage <GameObjectDisplayInfoEntry> sGameObjectDisplayInfoStore;
extern DBCStorage <GemPropertiesEntry> sGemPropertiesStore;
extern DBCStorage <GlyphPropertiesEntry> sGlyphPropertiesStore;
+19 -5
View File
@@ -704,7 +704,7 @@ void Creature::Update(uint32 diff)
}
// periodic check to see if the creature has passed an evade boundary
if (IsAIEnabled && !IsInEvadeMode() && IsInCombat())
if (IsAIEnabled && !IsInEvadeMode() && IsEngaged())
{
if (diff >= m_boundaryCheckTime)
{
@@ -1810,6 +1810,21 @@ bool Creature::CanAlwaysSee(WorldObject const* obj) const
return false;
}
bool Creature::IsAlwaysDetectableFor(WorldObject const* seer) const
{
if (Unit::IsAlwaysDetectableFor(seer))
{
return true;
}
if (IsAIEnabled && AI()->CanAlwaysBeDetectable(seer))
{
return true;
}
return false;
}
bool Creature::CanStartAttack(Unit const* who) const
{
if (IsCivilian())
@@ -1839,7 +1854,7 @@ bool Creature::CanStartAttack(Unit const* who) const
// pussywizard: at this point we are either hostile to who or friendly to who->getAttackerForHelper()
// pussywizard: if who is in combat and has an attacker, help him if the distance is right (help because who is hostile or help because attacker is friendly)
bool assist = false;
if (who->IsInCombat() && IsWithinDist(who, ATTACK_DISTANCE))
if (who->IsEngaged() && IsWithinDist(who, ATTACK_DISTANCE))
if (Unit* victim = who->getAttackerForHelper())
if (IsWithinDistInMap(victim, sWorld->getFloatConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS)))
assist = true;
@@ -2358,7 +2373,7 @@ bool Creature::CanAssistTo(Unit const* u, Unit const* enemy, bool checkfaction /
return false;
// skip fighting creature
if (IsInCombat())
if (IsEngaged())
return false;
// only free creature
@@ -2409,11 +2424,10 @@ bool Creature::_IsTargetAcceptable(Unit const* target) const
return false;
}
Unit const* myVictim = getAttackerForHelper();
Unit const* targetVictim = target->getAttackerForHelper();
// if I'm already fighting target, or I'm hostile towards the target, the target is acceptable
if (myVictim == target || targetVictim == this || IsHostileTo(target))
if (IsEngagedBy(target) || IsHostileTo(target))
return true;
// if the target's victim is friendly, and the target is neutral, the target is acceptable
@@ -386,6 +386,8 @@ public:
void ModifyThreatPercentTemp(Unit* victim, int32 percent, Milliseconds duration);
void ResetFaction() { SetFaction(GetCreatureTemplate()->faction); }
protected:
bool CreateFromProto(ObjectGuid::LowType guidlow, uint32 Entry, uint32 vehId, const CreatureData* data = nullptr);
bool InitEntry(uint32 entry, const CreatureData* data = nullptr);
@@ -441,6 +443,7 @@ protected:
[[nodiscard]] bool IsInvisibleDueToDespawn() const override;
bool CanAlwaysSee(WorldObject const* obj) const override;
bool IsAlwaysDetectableFor(WorldObject const* seer) const override;
private:
void ForcedDespawn(uint32 timeMSToDespawn = 0, Seconds forcedRespawnTimer = 0s);
@@ -190,7 +190,7 @@ void CreatureGroup::RemoveMember(Creature* member)
member->SetFormation(nullptr);
}
void CreatureGroup::MemberAttackStart(Creature* member, Unit* target)
void CreatureGroup::MemberEngagingTarget(Creature* member, Unit* target)
{
uint8 const groupAI = sFormationMgr->CreatureGroupMap[member->GetSpawnId()].groupAI;
if (member == m_leader)
@@ -106,7 +106,7 @@ public:
void FormationReset(bool dismiss, bool initMotionMaster);
void LeaderMoveTo(float x, float y, float z, bool run);
void MemberAttackStart(Creature* member, Unit* target);
void MemberEngagingTarget(Creature* member, Unit* target);
void MemberEvaded(Creature* member);
private:
@@ -701,8 +701,8 @@ void GameObject::Update(uint32 diff)
// search unfriendly creature
if (owner && goInfo->trap.autoCloseTime != -1) // hunter trap
{
Acore::AnyUnfriendlyNoTotemUnitInObjectRangeCheck checker(this, owner, radius);
Acore::UnitSearcher<Acore::AnyUnfriendlyNoTotemUnitInObjectRangeCheck> searcher(this, target, checker);
Acore::NearestAttackableNoTotemUnitInObjectRangeCheck checker(this, owner, radius);
Acore::UnitSearcher<Acore::NearestAttackableNoTotemUnitInObjectRangeCheck> searcher(this, target, checker);
Cell::VisitAllObjects(this, searcher, radius);
}
else // environmental trap
@@ -25,6 +25,7 @@
#include "Object.h"
#include "SharedDefines.h"
#include "Unit.h"
#include <array>
class GameObjectAI;
class Transport;
@@ -676,6 +677,7 @@ struct GameObjectTemplateAddon
uint32 flags;
uint32 mingold;
uint32 maxgold;
std::array<uint32, 4> artKits = {};
};
// Benchmarked: Faster than std::map (insert/find)
@@ -736,6 +738,35 @@ enum GOState
#define MAX_GO_STATE 3
enum class GameObjectActions : uint32
{
// Name from client executable // Comments
None, // -NONE-
AnimateCustom0, // Animate Custom0
AnimateCustom1, // Animate Custom1
AnimateCustom2, // Animate Custom2
AnimateCustom3, // Animate Custom3
Disturb, // Disturb // Triggers trap
Unlock, // Unlock // Resets GO_FLAG_LOCKED
Lock, // Lock // Sets GO_FLAG_LOCKED
Open, // Open // Sets GO_STATE_ACTIVE
OpenAndUnlock, // Open + Unlock // Sets GO_STATE_ACTIVE and resets GO_FLAG_LOCKED
Close, // Close // Sets GO_STATE_READY
ToggleOpen, // Toggle Open
Destroy, // Destroy // Sets GO_STATE_DESTROYED
Rebuild, // Rebuild // Resets from GO_STATE_DESTROYED
Creation, // Creation
Despawn, // Despawn
MakeInert, // Make Inert // Disables interactions
MakeActive, // Make Active // Enables interactions
CloseAndLock, // Close + Lock // Sets GO_STATE_READY and sets GO_FLAG_LOCKED
UseArtKit0, // Use ArtKit0 // 46904: 121
UseArtKit1, // Use ArtKit1 // 36639: 81, 46903: 122
UseArtKit2, // Use ArtKit2
UseArtKit3, // Use ArtKit3
SetTapList, // Set Tap List
};
// from `gameobject`
struct GameObjectData
{
+1 -1
View File
@@ -1234,7 +1234,7 @@ Position WorldObject::GetHitSpherePointFor(Position const& dest) const
{
G3D::Vector3 vThis(GetPositionX(), GetPositionY(), GetPositionZ() + GetCollisionHeight());
G3D::Vector3 vObj(dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ());
G3D::Vector3 contactPoint = vThis + (vObj - vThis).directionOrZero() * std::min(dest.GetExactDist(this), GetObjectSize());
G3D::Vector3 contactPoint = vThis + (vObj - vThis).directionOrZero() * std::min(dest.GetExactDist(this), GetCombatReach());
return Position(contactPoint.x, contactPoint.y, contactPoint.z, GetAngle(contactPoint.x, contactPoint.y));
}
+6 -4
View File
@@ -1620,7 +1620,11 @@ void Player::ProcessDelayedOperations()
SaveToDB(false, false);
if (m_DelayedOperations & DELAYED_SPELL_CAST_DESERTER)
CastSpell(this, 26013, true); // Deserter
{
Aura* aura = GetAura(26013);
if (!aura || aura->GetDuration() <= 900000)
CastSpell(this, 26013, true);
}
if (m_DelayedOperations & DELAYED_BG_MOUNT_RESTORE)
{
@@ -2139,10 +2143,8 @@ void Player::SetInWater(bool apply)
getHostileRefMgr().updateThreatTables();
}
bool Player::IsInAreaTriggerRadius(const AreaTrigger* trigger) const
bool Player::IsInAreaTriggerRadius(AreaTrigger const* trigger, float delta) const
{
static const float delta = 5.0f;
if (!trigger || GetMapId() != trigger->map)
return false;
+10 -2
View File
@@ -1095,7 +1095,7 @@ public:
[[nodiscard]] bool IsInWater() const override { return m_isInWater; }
[[nodiscard]] bool IsFalling() const;
bool IsInAreaTriggerRadius(const AreaTrigger* trigger) const;
bool IsInAreaTriggerRadius(AreaTrigger const* trigger, float delta = 0.f) const;
void SendInitialPacketsBeforeAddToMap();
void SendInitialPacketsAfterAddToMap();
@@ -2949,7 +2949,15 @@ template <class T> T Player::ApplySpellMod(uint32 spellId, SpellModOp op, T& bas
return;
}
totalflat += mod->value;
int32 flatValue = mod->value;
// SPELL_MOD_THREAT - divide by 100 (in packets we send threat * 100)
if (mod->op == SPELLMOD_THREAT)
{
flatValue /= 100;
}
totalflat += flatValue;
}
else if (mod->type == SPELLMOD_PCT)
{
@@ -277,10 +277,11 @@ void Player::Update(uint32 p_time)
// supposed to be in one
if (HasRestFlag(REST_FLAG_IN_TAVERN))
{
AreaTrigger const* atEntry =
sObjectMgr->GetAreaTrigger(GetInnTriggerId());
if (!atEntry || !IsInAreaTriggerRadius(atEntry))
AreaTrigger const* atEntry = sObjectMgr->GetAreaTrigger(GetInnTriggerId());
if (!atEntry || !IsInAreaTriggerRadius(atEntry, 5.f))
{
RemoveRestFlag(REST_FLAG_IN_TAVERN);
}
}
uint32 newzone, newarea;
+2
View File
@@ -85,6 +85,8 @@ void Totem::InitStats(uint32 duration)
void Totem::InitSummon()
{
Minion::InitSummon();
if (m_type == TOTEM_PASSIVE && GetSpell())
CastSpell(this, GetSpell(), true);
+15 -3
View File
@@ -316,6 +316,8 @@ Unit::Unit(bool isWorldObject) : WorldObject(isWorldObject),
_oldFactionId = 0;
_isWalkingBeforeCharm = false;
_lastExtraAttackSpell = 0;
}
@@ -10482,8 +10484,12 @@ void Unit::SetCharm(Unit* charm, bool apply)
if (!charm->AddGuidValue(UNIT_FIELD_CHARMEDBY, GetGUID()))
LOG_FATAL("entities.unit", "Unit {} is being charmed, but it already has a charmer {}", charm->GetEntry(), charm->GetCharmerGUID().ToString());
if (charm->HasUnitMovementFlag(MOVEMENTFLAG_WALKING))
_isWalkingBeforeCharm = charm->IsWalking();
if (_isWalkingBeforeCharm)
{
charm->SetWalk(false);
charm->SendMovementFlagUpdate();
}
m_Controlled.insert(charm);
}
@@ -10521,6 +10527,12 @@ void Unit::SetCharm(Unit* charm, bool apply)
charm->SetByteValue(UNIT_FIELD_BYTES_2, 1, 0);
}
if (charm->IsWalking() != _isWalkingBeforeCharm)
{
charm->SetWalk(_isWalkingBeforeCharm);
charm->SendMovementFlagUpdate(true); // send packet to self, to update movement state on player.
}
m_Controlled.erase(charm);
}
}
@@ -12422,7 +12434,7 @@ bool Unit::IsImmunedToSpell(SpellInfo const* spellInfo)
{
SpellInfo const* immuneSpellInfo = sSpellMgr->GetSpellInfo(itr->spellId);
if (((itr->type & spellInfo->GetSchoolMask()) == spellInfo->GetSchoolMask())
&& !(immuneSpellInfo && immuneSpellInfo->IsPositive()) && !spellInfo->IsPositive()
&& (!immuneSpellInfo || immuneSpellInfo->IsPositive()) && !spellInfo->IsPositive()
&& !spellInfo->CanPierceImmuneAura(immuneSpellInfo))
return true;
}
@@ -13168,7 +13180,7 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy, uint32 duration)
creature->AI()->EnterCombat(enemy);
if (creature->GetFormation())
creature->GetFormation()->MemberAttackStart(creature, enemy);
creature->GetFormation()->MemberEngagingTarget(creature, enemy);
}
creature->RefreshSwimmingFlag();
+9 -2
View File
@@ -1326,6 +1326,7 @@ public:
bool IsWithinCombatRange(Unit const* obj, float dist2compare) const;
bool IsWithinMeleeRange(Unit const* obj, float dist = 0.f) const;
float GetMeleeRange(Unit const* target) const;
[[nodiscard]] virtual SpellSchoolMask GetMeleeDamageSchoolMask() const;
bool GetRandomContactPoint(Unit const* target, float& x, float& y, float& z, bool force = false) const;
uint32 m_extraAttacks;
bool m_canDualWield;
@@ -1343,6 +1344,9 @@ public:
if (GetVictim() != nullptr)
return GetVictim();
if (!IsEngaged())
return nullptr;
if (!m_attackers.empty())
return *(m_attackers.begin());
@@ -1644,6 +1648,9 @@ public:
[[nodiscard]] bool IsInFlight() const { return HasUnitState(UNIT_STATE_IN_FLIGHT); }
bool IsEngaged() const { return IsInCombat(); }
bool IsEngagedBy(Unit const* who) const { return IsInCombatWith(who); }
[[nodiscard]] bool IsInCombat() const { return HasUnitFlag(UNIT_FLAG_IN_COMBAT); }
bool IsInCombatWith(Unit const* who) const;
@@ -2105,6 +2112,7 @@ public:
void TauntApply(Unit* victim);
void TauntFadeOut(Unit* taunter);
ThreatMgr& GetThreatMgr() { return m_ThreatMgr; }
ThreatMgr const& GetThreatMgr() const { return m_ThreatMgr; }
void addHatedBy(HostileReference* pHostileReference) { m_HostileRefMgr.insertFirst(pHostileReference); };
void removeHatedBy(HostileReference* /*pHostileReference*/) { /* nothing to do yet */ }
HostileRefMgr& getHostileRefMgr() { return m_HostileRefMgr; }
@@ -2478,8 +2486,6 @@ protected:
CharmInfo* m_charmInfo;
SharedVisionList m_sharedVision;
[[nodiscard]] virtual SpellSchoolMask GetMeleeDamageSchoolMask() const;
MotionMaster* i_motionMaster;
uint32 m_reactiveTimer[MAX_REACTIVE];
@@ -2549,6 +2555,7 @@ private:
bool m_duringRemoveFromWorld; // lock made to not add stuff after begining removing from world
uint32 _oldFactionId; ///< faction before charm
bool _isWalkingBeforeCharm; ///< Are we walking before we were charmed?
[[nodiscard]] float processDummyAuras(float TakenTotalMod) const;
+17 -2
View File
@@ -7183,8 +7183,8 @@ void ObjectMgr::LoadGameObjectTemplateAddons()
{
uint32 oldMSTime = getMSTime();
// 0 1 2 3 4
QueryResult result = WorldDatabase.Query("SELECT entry, faction, flags, mingold, maxgold FROM gameobject_template_addon");
// 0 1 2 3 4 5 6 7 8
QueryResult result = WorldDatabase.Query("SELECT entry, faction, flags, mingold, maxgold, artkit0, artkit1, artkit2, artkit3 FROM gameobject_template_addon");
if (!result)
{
@@ -7215,6 +7215,21 @@ void ObjectMgr::LoadGameObjectTemplateAddons()
gameObjectAddon.mingold = fields[3].Get<uint32>();
gameObjectAddon.maxgold = fields[4].Get<uint32>();
for (uint32 i = 0; i < gameObjectAddon.artKits.size(); i++)
{
uint32 artKitID = fields[5 + i].Get<uint32>();
if (!artKitID)
continue;
if (!sGameObjectArtKitStore.LookupEntry(artKitID))
{
LOG_ERROR("sql.sql", "GameObject (Entry: {}) has invalid `artkit{}` {} defined, set to zero instead.", entry, i, artKitID);
continue;
}
gameObjectAddon.artKits[i] = artKitID;
}
// checks
if (gameObjectAddon.faction && !sFactionTemplateStore.LookupEntry(gameObjectAddon.faction))
LOG_ERROR("sql.sql",
@@ -898,6 +898,47 @@ namespace Acore
float i_range;
};
class NearestAttackableNoTotemUnitInObjectRangeCheck
{
public:
NearestAttackableNoTotemUnitInObjectRangeCheck(WorldObject const* obj, Unit const* owner, float range) : i_obj(obj), i_owner(owner), i_range(range) {}
bool operator()(Unit* u)
{
if (!u->IsAlive())
{
return false;
}
if (u->GetCreatureType() == CREATURE_TYPE_NON_COMBAT_PET)
{
return false;
}
if (u->GetTypeId() == TYPEID_UNIT && u->ToCreature()->IsTotem())
{
return false;
}
if (!u->isTargetableForAttack(false, i_owner))
{
return false;
}
if (!i_obj->IsWithinDistInMap(u, i_range) || !i_owner->IsValidAttackTarget(u) || !i_obj->IsWithinLOSInMap(u))
{
return false;
}
return true;
}
private:
WorldObject const* i_obj;
Unit const* i_owner;
float i_range;
};
class AnyUnfriendlyAttackableVisibleUnitInObjectRangeCheck
{
public:
@@ -1037,8 +1078,19 @@ namespace Acore
bool operator()(Unit* u)
{
// Check contains checks for: live, non-selectable, non-attackable flags, flight check and GM check, ignore totems
if (u->GetTypeId() == TYPEID_UNIT && ((Creature*)u)->IsTotem())
return false;
if (Creature* creature = u->ToCreature())
{
if (creature->IsTotem())
{
return false;
}
if (creature->IsAvoidingAOE())
{
return false;
}
}
if (i_funit->_IsValidAttackTarget(u, _spellInfo, i_obj->GetTypeId() == TYPEID_DYNAMICOBJECT ? i_obj : nullptr) && i_obj->IsWithinDistInMap(u, i_range))
return true;
+3 -2
View File
@@ -731,7 +731,8 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recv_data)
return;
}
if (!player->IsInAreaTriggerRadius(atEntry))
bool isTavernAreatrigger = sObjectMgr->IsTavernAreaTrigger(triggerId);
if (!player->IsInAreaTriggerRadius(atEntry, isTavernAreatrigger ? 5.f : 0.f))
{
LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player {} ({}) too far (trigger map: {} player map: {}), ignore Area Trigger ID: {}",
player->GetName(), player->GetGUID().ToString(), atEntry->map, player->GetMapId(), triggerId);
@@ -749,7 +750,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recv_data)
if (player->GetQuestStatus(questId) == QUEST_STATUS_INCOMPLETE)
player->AreaExploredOrEventHappens(questId);
if (sObjectMgr->IsTavernAreaTrigger(triggerId))
if (isTavernAreatrigger)
{
// set resting flag we are in the inn
player->SetRestFlag(REST_FLAG_IN_TAVERN, atEntry->entry);
@@ -26,6 +26,7 @@
#define MIN_QUIET_DISTANCE 28.0f
#define MAX_QUIET_DISTANCE 43.0f
#define MIN_PATH_LENGTH 2.0f
template<class T>
void FleeingMovementGenerator<T>::DoInitialize(T* owner)
@@ -144,6 +145,20 @@ void FleeingMovementGenerator<T>::SetTargetLocation(T* owner)
return;
}
// Same position - recheck
if (_path->getPathLength() < MIN_PATH_LENGTH)
{
if (_fleeTargetGUID)
{
++_shortPathsCount;
}
_timer.Reset(100);
return;
}
_shortPathsCount = 0;
Movement::MoveSplineInit init(owner);
init.MovebyPath(_path->GetPath());
init.SetWalk(false);
@@ -154,8 +169,13 @@ void FleeingMovementGenerator<T>::SetTargetLocation(T* owner)
template<class T>
void FleeingMovementGenerator<T>::GetPoint(T* owner, Position& position)
{
float casterDistance, casterAngle;
if (Unit* fleeTarget = ObjectAccessor::GetUnit(*owner, _fleeTargetGUID))
float casterDistance = 0.f;
float casterAngle = 0.f;
Unit* fleeTarget = nullptr;
if (_shortPathsCount < 5)
fleeTarget = ObjectAccessor::GetUnit(*owner, _fleeTargetGUID);
if (fleeTarget)
{
casterDistance = fleeTarget->GetDistance(owner);
if (casterDistance > 0.2f)
@@ -173,7 +193,8 @@ void FleeingMovementGenerator<T>::GetPoint(T* owner, Position& position)
casterAngle = frand(0.0f, 2.0f * float(M_PI));
}
float distance, angle;
float distance = 0.f;
float angle = 0.f;
if (casterDistance < MIN_QUIET_DISTANCE)
{
distance = frand(0.4f, 1.3f) * (MIN_QUIET_DISTANCE - casterDistance);
@@ -24,7 +24,7 @@ template<class T>
class FleeingMovementGenerator : public MovementGeneratorMedium< T, FleeingMovementGenerator<T> >
{
public:
explicit FleeingMovementGenerator(ObjectGuid fleeTargetGUID) : _path(nullptr), _fleeTargetGUID(fleeTargetGUID), _timer(0), _interrupt(false) {}
explicit FleeingMovementGenerator(ObjectGuid fleeTargetGUID) : _path(nullptr), _fleeTargetGUID(fleeTargetGUID), _timer(0), _interrupt(false), _shortPathsCount(0) { }
MovementGeneratorType GetMovementGeneratorType() override { return FLEEING_MOTION_TYPE; }
@@ -41,6 +41,7 @@ class FleeingMovementGenerator : public MovementGeneratorMedium< T, FleeingMovem
ObjectGuid _fleeTargetGUID;
TimeTracker _timer;
bool _interrupt;
uint8 _shortPathsCount;
};
class TimedFleeingMovementGenerator : public FleeingMovementGenerator<Creature>
+8 -8
View File
@@ -2842,9 +2842,10 @@ void DynObjAura::FillTargetMap(std::map<Unit*, uint8>& targets, Unit* /*caster*/
{
if (!HasEffect(effIndex))
continue;
SpellInfo const* spellInfo = GetSpellInfo();
UnitList targetList;
if (GetSpellInfo()->Effects[effIndex].TargetB.GetTarget() == TARGET_DEST_DYNOBJ_ALLY
|| GetSpellInfo()->Effects[effIndex].TargetB.GetTarget() == TARGET_UNIT_DEST_AREA_ALLY)
if (spellInfo->Effects[effIndex].TargetB.GetTarget() == TARGET_DEST_DYNOBJ_ALLY || spellInfo->Effects[effIndex].TargetB.GetTarget() == TARGET_UNIT_DEST_AREA_ALLY)
{
Acore::AnyFriendlyUnitInObjectRangeCheck u_check(GetDynobjOwner(), dynObjOwnerCaster, radius);
Acore::UnitListSearcher<Acore::AnyFriendlyUnitInObjectRangeCheck> searcher(GetDynobjOwner(), targetList, u_check);
@@ -2852,7 +2853,7 @@ void DynObjAura::FillTargetMap(std::map<Unit*, uint8>& targets, Unit* /*caster*/
}
// pussywizard: TARGET_DEST_DYNOBJ_NONE is supposed to search for both friendly and unfriendly targets, so for any unit
// what about EffectImplicitTargetA?
else if (GetSpellInfo()->Effects[effIndex].TargetB.GetTarget() == TARGET_DEST_DYNOBJ_NONE)
else if (spellInfo->Effects[effIndex].TargetB.GetTarget() == TARGET_DEST_DYNOBJ_NONE)
{
Acore::AnyAttackableUnitExceptForOriginalCasterInObjectRangeCheck u_check(GetDynobjOwner(), dynObjOwnerCaster, radius);
Acore::UnitListSearcher<Acore::AnyAttackableUnitExceptForOriginalCasterInObjectRangeCheck> searcher(GetDynobjOwner(), targetList, u_check);
@@ -2867,12 +2868,11 @@ void DynObjAura::FillTargetMap(std::map<Unit*, uint8>& targets, Unit* /*caster*/
for (UnitList::iterator itr = targetList.begin(); itr != targetList.end(); ++itr)
{
// xinef: check z level and los dependence
Unit* target = *itr;
float zLevel = GetDynobjOwner()->GetPositionZ();
if (target->GetPositionZ() + 3.0f < zLevel || target->GetPositionZ() - 5.0f > zLevel)
if (!target->IsWithinLOSInMap(GetDynobjOwner()))
continue;
if (!spellInfo->HasAttribute(SPELL_ATTR2_IGNORE_LINE_OF_SIGHT) && !spellInfo->HasAttribute(SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT) && !target->IsWithinLOSInMap(GetDynobjOwner()))
{
continue;
}
std::map<Unit*, uint8>::iterator existing = targets.find(*itr);
if (existing != targets.end())
+5 -9
View File
@@ -5892,31 +5892,27 @@ SpellCastResult Spell::CheckCast(bool strict)
if ((!m_caster->IsTotem() || !m_spellInfo->IsPositive()) && !m_spellInfo->HasAttribute(SPELL_ATTR2_IGNORE_LINE_OF_SIGHT) &&
!m_spellInfo->HasAttribute(SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT))
{
WorldObject* losCenter = nullptr;
bool castedByGameobject = false;
uint32 losChecks = LINEOFSIGHT_ALL_CHECKS;
if (m_originalCasterGUID.IsGameObject())
{
losCenter = m_caster->GetMap()->GetGameObject(m_originalCasterGUID);
castedByGameobject = m_caster->GetMap()->GetGameObject(m_originalCasterGUID) != nullptr;
}
else if (m_caster->GetEntry() == WORLD_TRIGGER)
{
if (TempSummon* tempSummon = m_caster->ToTempSummon())
{
losCenter = tempSummon->GetSummonerGameObject();
castedByGameobject = tempSummon->GetSummonerGameObject() != nullptr;
}
}
if (losCenter)
if (castedByGameobject)
{
// If spell casted by gameobject then ignore M2 models
losChecks &= ~LINEOFSIGHT_CHECK_GOBJECT_M2;
}
else
{
losCenter = m_caster;
}
if (!losCenter->IsWithinLOS(x, y, z, VMAP::ModelIgnoreFlags::M2, LineOfSightChecks((losChecks))))
if (!m_caster->IsWithinLOS(x, y, z, VMAP::ModelIgnoreFlags::M2, LineOfSightChecks((losChecks))))
{
return SPELL_FAILED_LINE_OF_SIGHT;
}
+67 -10
View File
@@ -2677,7 +2677,7 @@ void Spell::EffectDistract(SpellEffIndex /*effIndex*/)
return;
// Check for possible target
if (!unitTarget || unitTarget->IsInCombat())
if (!unitTarget || unitTarget->IsEngaged())
return;
// target must be OK to do this
@@ -4263,7 +4263,7 @@ void Spell::EffectSummonPlayer(SpellEffIndex /*effIndex*/)
player->GetSession()->SendPacket(&data);
}
void Spell::EffectActivateObject(SpellEffIndex /*effIndex*/)
void Spell::EffectActivateObject(SpellEffIndex effIndex)
{
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
return;
@@ -4271,17 +4271,74 @@ void Spell::EffectActivateObject(SpellEffIndex /*effIndex*/)
if (!gameObjTarget)
return;
Player* player = m_caster->GetTypeId() == TYPEID_PLAYER ? m_caster->ToPlayer() : m_caster->GetCharmerOrOwnerPlayerOrPlayerItself();
gameObjTarget->Use(player ? player : m_caster);
GameObjectActions action = GameObjectActions(m_spellInfo->Effects[effIndex].MiscValue);
switch (action)
{
case GameObjectActions::AnimateCustom0:
case GameObjectActions::AnimateCustom1:
case GameObjectActions::AnimateCustom2:
case GameObjectActions::AnimateCustom3:
gameObjTarget->SendCustomAnim(uint32(action) - uint32(GameObjectActions::AnimateCustom0));
break;
case GameObjectActions::Disturb: // What's the difference with Open?
case GameObjectActions::Open:
if (Unit* unitCaster = m_caster->ToUnit())
gameObjTarget->Use(unitCaster);
break;
case GameObjectActions::OpenAndUnlock:
if (Unit* unitCaster = m_caster->ToUnit())
gameObjTarget->UseDoorOrButton(0, false, unitCaster);
[[fallthrough]];
case GameObjectActions::Unlock:
case GameObjectActions::Lock:
gameObjTarget->ApplyModFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED, action == GameObjectActions::Lock);
break;
case GameObjectActions::Close:
case GameObjectActions::Rebuild:
gameObjTarget->ResetDoorOrButton();
break;
case GameObjectActions::Despawn:
gameObjTarget->DespawnOrUnsummon();
break;
case GameObjectActions::MakeInert:
case GameObjectActions::MakeActive:
gameObjTarget->ApplyModFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE, action == GameObjectActions::MakeInert);
break;
case GameObjectActions::CloseAndLock:
gameObjTarget->ResetDoorOrButton();
gameObjTarget->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
break;
case GameObjectActions::Destroy:
if (Unit* unitCaster = m_caster->ToUnit())
gameObjTarget->UseDoorOrButton(0, true, unitCaster);
break;
case GameObjectActions::UseArtKit0:
case GameObjectActions::UseArtKit1:
case GameObjectActions::UseArtKit2:
case GameObjectActions::UseArtKit3:
{
GameObjectTemplateAddon const* templateAddon = gameObjTarget->GetTemplateAddon();
//ScriptInfo activateCommand;
//activateCommand.command = SCRIPT_COMMAND_ACTIVATE_OBJECT;
uint32 artKitIndex = uint32(action) - uint32(GameObjectActions::UseArtKit0);
// int32 unk = m_spellInfo->Effects[effIndex].MiscValue; // This is set for EffectActivateObject spells; needs research
uint32 artKitValue = 0;
if (templateAddon)
artKitValue = templateAddon->artKits[artKitIndex];
// xinef: pass player to allow gossip scripts to work
//
//gameObjTarget->GetMap()->ScriptCommandStart(activateCommand, 0, player ? player : m_caster, gameObjTarget);
if (artKitValue == 0)
LOG_ERROR("sql.sql", "GameObject {} hit by spell {} needs `artkit{}` in `gameobject_template_addon`", gameObjTarget->GetEntry(), m_spellInfo->Id, artKitIndex);
else
gameObjTarget->SetGoArtKit(artKitValue);
break;
}
case GameObjectActions::None:
LOG_FATAL("spell", "Spell {} has action type NONE in effect {}", m_spellInfo->Id, int32(effIndex));
break;
default:
LOG_ERROR("spell", "Spell {} has unhandled action {} in effect {}", m_spellInfo->Id, int32(action), int32(effIndex));
break;
}
}
void Spell::EffectApplyGlyph(SpellEffIndex effIndex)
@@ -1363,6 +1363,12 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->Effects[EFFECT_0].Amplitude = 15000;
});
// Threatening Gaze
ApplySpellFix({ 24314 }, [](SpellInfo* spellInfo)
{
spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CAST;
});
// Isle of Conquest
ApplySpellFix({ 66551 }, [](SpellInfo* spellInfo)
{
+26 -1
View File
@@ -117,8 +117,33 @@ public:
return true;
}
static bool HandleBattlefieldTimer(ChatHandler* handler, uint32 battleId, uint32 time)
static bool HandleBattlefieldTimer(ChatHandler* handler, uint32 battleId, std::string timeStr)
{
if (timeStr.empty())
{
return false;
}
if (Acore::StringTo<int32>(timeStr).value_or(0) < 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
int32 time = TimeStringToSecs(timeStr);
if (time <= 0)
{
time = Acore::StringTo<int32>(timeStr).value_or(0);
}
if (time <= 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
Battlefield* bf = sBattlefieldMgr->GetBattlefieldByBattleId(battleId);
if (!bf)
+167 -31
View File
@@ -49,13 +49,15 @@ public:
{
static ChatCommandTable deserterInstanceCommandTable =
{
{ "add", HandleDeserterInstanceAdd, SEC_ADMINISTRATOR, Console::No },
{ "remove", HandleDeserterInstanceRemove, SEC_ADMINISTRATOR, Console::No }
{ "add", HandleDeserterInstanceAdd, SEC_ADMINISTRATOR, Console::Yes },
{ "remove all", HandleDeserterInstanceRemoveAll, SEC_ADMINISTRATOR, Console::Yes },
{ "remove", HandleDeserterInstanceRemove, SEC_ADMINISTRATOR, Console::Yes }
};
static ChatCommandTable deserterBGCommandTable =
{
{ "add", HandleDeserterBGAdd, SEC_ADMINISTRATOR, Console::No },
{ "remove", HandleDeserterBGRemove, SEC_ADMINISTRATOR, Console::No }
{ "add", HandleDeserterBGAdd, SEC_ADMINISTRATOR, Console::Yes },
{ "remove all", HandleDeserterBGRemoveAll, SEC_ADMINISTRATOR, Console::Yes },
{ "remove", HandleDeserterBGRemove, SEC_ADMINISTRATOR, Console::Yes }
};
static ChatCommandTable deserterCommandTable =
@@ -77,7 +79,8 @@ public:
* selected player, with the provided duration in seconds.
*
* @param handler The ChatHandler, passed by the system.
* @param time The provided duration in seconds.
* @param playerName Player by name. Optional, defaults to selected or self.
* @param time The provided duration as TimeString. Optional, defaults to bg/instance default time.
* @param isInstance provided by the relaying functions, so we don't have
* to write that much code :)
*
@@ -85,37 +88,128 @@ public:
*
* Example Usage:
* @code
* .deserter instance add 3600 (one hour)
* .deserter instance add 1h30m
* -or-
* .deserter bg add 3600 (one hour)
* .deserter bg add 1h30m
* @endcode
*/
static bool HandleDeserterAdd(ChatHandler* handler, uint32 time, bool isInstance)
static bool HandleDeserterAdd(ChatHandler* handler, Optional<std::string> playerName, Optional<std::string> time, bool isInstance)
{
Player* player = handler->getSelectedPlayer();
if (!player)
Player* target = handler->getSelectedPlayerOrSelf();
ObjectGuid guid;
if (playerName)
{
handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
handler->SetSentErrorMessage(true);
return false;
if (!normalizePlayerName(*playerName))
{
handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
handler->SetSentErrorMessage(true);
return false;
}
guid = sCharacterCache->GetCharacterGuidByName(*playerName);
if (guid)
{
target = ObjectAccessor::FindPlayerByName(*playerName);
}
else
{
if (time)
{
handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
handler->SetSentErrorMessage(true);
return false;
}
time = playerName;
playerName = "";
}
}
if (!playerName || playerName->empty())
{
if (!handler->GetSession())
{
return false;
}
playerName = target->GetName();
guid = target->GetGUID();
}
if (!time)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
time = isInstance ? "30m" : "15m";
}
Aura* aura = player->AddAura(isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER, player);
int32 duration = TimeStringToSecs(*time);
if (!aura)
if (duration == 0)
{
duration = Acore::StringTo<int32>(*time).value_or(0);
}
if (duration == 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
aura->SetDuration(time * IN_MILLISECONDS);
if (target)
{
Aura* aura = target->GetAura(isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER);
if (aura && aura->GetDuration() >= duration * IN_MILLISECONDS)
{
handler->PSendSysMessage("Player %s already has a longer %s Deserter active.", handler->playerLink(*playerName), isInstance ? "Instance" : "Battleground");
return true;
}
aura = target->AddAura(isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER, target);
if (!aura)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
aura->SetDuration(duration * IN_MILLISECONDS);
return true;
}
int32 remainTime = 0;
if (QueryResult result = CharacterDatabase.Query("SELECT remainTime FROM character_aura WHERE guid = {} AND spell = {}", guid.GetCounter(), isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER))
{
Field* fields = result->Fetch();
remainTime = fields[0].Get<int32>();
if (remainTime < 0 || remainTime >= duration * IN_MILLISECONDS)
{
handler->PSendSysMessage("Player %s already has a longer %s Deserter active.", handler->playerLink(*playerName), isInstance ? "Instance" : "Battleground");
return true;
}
CharacterDatabase.Query("DELETE FROM character_aura WHERE guid = {} AND spell = {}", guid.GetCounter(), isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER);
}
uint8 index = 0;
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_AURA);
stmt->SetData(index++, guid.GetCounter());
stmt->SetData(index++, guid.GetCounter());
stmt->SetData(index++, 0);
stmt->SetData(index++, isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER);
stmt->SetData(index++, 1);
stmt->SetData(index++, 1);
stmt->SetData(index++, 1);
stmt->SetData(index++, 0);
stmt->SetData(index++, 0);
stmt->SetData(index++, 0);
stmt->SetData(index++, 0);
stmt->SetData(index++, 0);
stmt->SetData(index++, 0);
stmt->SetData(index++, isInstance ? 1800000 : 900000);
stmt->SetData(index++, duration * 1000);
stmt->SetData(index, 0);
CharacterDatabase.Execute(stmt);
return true;
}
@@ -139,9 +233,13 @@ public:
* .deserter bg remove
* @endcode
*/
static bool HandleDeserterRemove(ChatHandler* handler, bool isInstance)
static bool HandleDeserterRemove(ChatHandler* handler, Optional<PlayerIdentifier> player, bool isInstance)
{
Player* player = handler->getSelectedPlayer();
if (!player)
{
player = PlayerIdentifier::FromTargetOrSelf(handler);
}
if (!player)
{
handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
@@ -149,33 +247,71 @@ public:
return false;
}
player->RemoveAura(isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER);
Player* target = player->GetConnectedPlayer();
if (target)
{
target->RemoveAura(isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER);
return true;
}
CharacterDatabase.Query("DELETE FROM character_aura WHERE guid = {} AND spell = {}", player->GetGUID().GetCounter(), isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER);
return true;
}
/// @sa HandleDeserterAdd()
static bool HandleDeserterInstanceAdd(ChatHandler* handler, uint32 time)
static bool HandleDeserterRemoveAll(ChatHandler* handler, bool isInstance)
{
return HandleDeserterAdd(handler, time, true);
CharacterDatabase.Query("DELETE FROM character_aura WHERE spell = {} AND remainTime <= 1800000", isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER);
std::shared_lock<std::shared_mutex> lock(*HashMapHolder<Player>::GetLock());
HashMapHolder<Player>::MapType const& onlinePlayerList = ObjectAccessor::GetPlayers();
for (HashMapHolder<Player>::MapType::const_iterator itr = onlinePlayerList.begin(); itr != onlinePlayerList.end(); ++itr)
{
Player* player = itr->second;
Aura* aura = player->GetAura(isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER);
if (aura && aura->GetDuration() <= 1800000)
{
player->RemoveAura(isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER);
}
}
handler->PSendSysMessage("%s Deserter has been removed from all players", isInstance ? "Instance" : "Battleground");
return true;
}
/// @sa HandleDeserterAdd()
static bool HandleDeserterBGAdd(ChatHandler* handler, uint32 time)
static bool HandleDeserterInstanceAdd(ChatHandler* handler, Optional<std::string> playerName, Optional<std::string> time)
{
return HandleDeserterAdd(handler, time, false);
return HandleDeserterAdd(handler, playerName, time, true);
}
/// @sa HandleDeserterAdd()
static bool HandleDeserterBGAdd(ChatHandler* handler, Optional<std::string> playerName, Optional<std::string> time)
{
return HandleDeserterAdd(handler, playerName, time, false);
}
/// @sa HandleDeserterRemove()
static bool HandleDeserterInstanceRemove(ChatHandler* handler)
static bool HandleDeserterInstanceRemove(ChatHandler* handler, Optional<PlayerIdentifier> player)
{
return HandleDeserterRemove(handler, true);
return HandleDeserterRemove(handler, player, true);
}
/// @sa HandleDeserterRemove()
static bool HandleDeserterBGRemove(ChatHandler* handler)
static bool HandleDeserterBGRemove(ChatHandler* handler, Optional<PlayerIdentifier> player)
{
return HandleDeserterRemove(handler, false);
return HandleDeserterRemove(handler, player, false);
}
static bool HandleDeserterInstanceRemoveAll(ChatHandler* handler)
{
return HandleDeserterRemoveAll(handler, true);
}
static bool HandleDeserterBGRemoveAll(ChatHandler* handler)
{
return HandleDeserterRemoveAll(handler, false);
}
};
+33 -8
View File
@@ -2374,10 +2374,22 @@ public:
}
// mute player for some times
static bool HandleMuteCommand(ChatHandler* handler, Optional<PlayerIdentifier> player, uint32 notSpeakTime, Tail muteReason)
static bool HandleMuteCommand(ChatHandler* handler, Optional<PlayerIdentifier> player, std::string notSpeakTime, Tail muteReason)
{
std::string muteReasonStr{ muteReason };
if (notSpeakTime.empty())
{
return false;
}
if (Acore::StringTo<int32>(notSpeakTime).value_or(0) < 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
if (muteReason.empty())
{
muteReasonStr = handler->GetAcoreString(LANG_NO_REASON);
@@ -2412,6 +2424,19 @@ public:
}
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_MUTE_TIME);
int32 muteDuration = TimeStringToSecs(notSpeakTime);
if (muteDuration <= 0)
{
muteDuration = Acore::StringTo<int32>(notSpeakTime).value_or(0);
}
if (muteDuration <= 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
std::string muteBy = "";
if (handler->GetSession())
{
@@ -2425,22 +2450,22 @@ public:
if (target)
{
// Target is online, mute will be in effect right away.
int64 muteTime = GameTime::GetGameTime().count() + notSpeakTime * MINUTE;
int64 muteTime = GameTime::GetGameTime().count() + muteDuration;
target->GetSession()->m_muteTime = muteTime;
stmt->SetData(0, muteTime);
std::string nameLink = handler->playerLink(player->GetName());
if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD))
{
sWorld->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy.c_str(), nameLink.c_str(), notSpeakTime, muteReasonStr.c_str());
sWorld->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy.c_str(), nameLink.c_str(), secsToTimeString(muteDuration, true).c_str(), muteReasonStr.c_str());
}
ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, notSpeakTime, muteBy.c_str(), muteReasonStr.c_str());
ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOUR_CHAT_DISABLED, secsToTimeString(muteDuration, true).c_str(), muteBy.c_str(), muteReasonStr.c_str());
}
else
{
// Target is offline, mute will be in effect starting from the next login.
stmt->SetData(0, -int32(notSpeakTime * MINUTE));
stmt->SetData(0, -int32(muteDuration));
}
stmt->SetData(1, muteReasonStr);
@@ -2450,7 +2475,7 @@ public:
stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_ACCOUNT_MUTE);
stmt->SetData(0, accountId);
stmt->SetData(1, notSpeakTime);
stmt->SetData(1, muteDuration / MINUTE);
stmt->SetData(2, muteBy);
stmt->SetData(3, muteReasonStr);
LoginDatabase.Execute(stmt);
@@ -2459,7 +2484,7 @@ public:
if (sWorld->getBoolConfig(CONFIG_SHOW_MUTE_IN_WORLD) && !target)
{
sWorld->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy.c_str(), nameLink.c_str(), notSpeakTime, muteReasonStr.c_str());
sWorld->SendWorldText(LANG_COMMAND_MUTEMESSAGE_WORLD, muteBy.c_str(), nameLink.c_str(), secsToTimeString(muteDuration, true).c_str(), muteReasonStr.c_str());
}
else
{
@@ -2469,7 +2494,7 @@ public:
for (HashMapHolder<Player>::MapType::const_iterator itr = m.begin(); itr != m.end(); ++itr)
if (itr->second->GetSession()->GetSecurity())
ChatHandler(itr->second->GetSession()).PSendSysMessage(target ? LANG_YOU_DISABLE_CHAT : LANG_COMMAND_DISABLE_CHAT_DELAYED,
(handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : handler->GetAcoreString(LANG_CONSOLE)), nameLink.c_str(), notSpeakTime, muteReasonStr.c_str());
(handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : handler->GetAcoreString(LANG_CONSOLE)), nameLink.c_str(), secsToTimeString(muteDuration, true).c_str(), muteReasonStr.c_str());
}
return true;
+27 -2
View File
@@ -988,19 +988,44 @@ public:
}
//spawn time handling
static bool HandleNpcSetSpawnTimeCommand(ChatHandler* handler, uint32 spawnTime)
static bool HandleNpcSetSpawnTimeCommand(ChatHandler* handler, std::string spawnTimeStr)
{
if (spawnTimeStr.empty())
{
return false;
}
if (Acore::StringTo<int32>(spawnTimeStr).value_or(0) < 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
Creature* creature = handler->getSelectedCreature();
if (!creature)
return false;
int32 spawnTime = TimeStringToSecs(spawnTimeStr);
if (spawnTime <= 0)
{
spawnTime = Acore::StringTo<int32>(spawnTimeStr).value_or(0);
}
if (spawnTime <= 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
WorldDatabasePreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_SPAWN_TIME_SECS);
stmt->SetData(0, spawnTime);
stmt->SetData(1, creature->GetSpawnId());
WorldDatabase.Execute(stmt);
creature->SetRespawnDelay(spawnTime);
handler->PSendSysMessage(LANG_COMMAND_SPAWNTIME, spawnTime);
handler->PSendSysMessage(LANG_COMMAND_SPAWNTIME, secsToTimeString(spawnTime, true).c_str());
return true;
}
+112 -12
View File
@@ -280,11 +280,23 @@ public:
return true;
}
static bool HandleServerShutDownCommand(ChatHandler* /*handler*/, int32 time, Optional<int32> exitCode, Tail reason)
static bool HandleServerShutDownCommand(ChatHandler* handler, std::string time, Optional<int32> exitCode, Tail reason)
{
std::wstring wReason = std::wstring();
std::string strReason = std::string();
if (time.empty())
{
return false;
}
if (Acore::StringTo<int32>(time).value_or(0) < 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
if (!reason.empty())
{
if (!Utf8toWStr(reason, wReason))
@@ -298,23 +310,48 @@ public:
}
}
int32 delay = TimeStringToSecs(time);
if (delay <= 0)
{
delay = Acore::StringTo<int32>(time).value_or(0);
}
if (delay <= 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
if (exitCode && *exitCode >= 0 && *exitCode <= 125)
{
sWorld->ShutdownServ(time, 0, *exitCode);
sWorld->ShutdownServ(delay, 0, *exitCode);
}
else
{
sWorld->ShutdownServ(time, 0, SHUTDOWN_EXIT_CODE, strReason);
sWorld->ShutdownServ(delay, 0, SHUTDOWN_EXIT_CODE, strReason);
}
return true;
}
static bool HandleServerRestartCommand(ChatHandler* /*handler*/, int32 time, Optional<int32> exitCode, Tail reason)
static bool HandleServerRestartCommand(ChatHandler* handler, std::string time, Optional<int32> exitCode, Tail reason)
{
std::wstring wReason = std::wstring();
std::string strReason = std::string();
if (time.empty())
{
return false;
}
if (Acore::StringTo<int32>(time).value_or(0) < 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
if (!reason.empty())
{
if (!Utf8toWStr(reason, wReason))
@@ -328,23 +365,48 @@ public:
}
}
int32 delay = TimeStringToSecs(time);
if (delay <= 0)
{
delay = Acore::StringTo<int32>(time).value_or(0);
}
if (delay <= 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
if (exitCode && *exitCode >= 0 && *exitCode <= 125)
{
sWorld->ShutdownServ(time, SHUTDOWN_MASK_RESTART, *exitCode);
sWorld->ShutdownServ(delay, SHUTDOWN_MASK_RESTART, *exitCode);
}
else
{
sWorld->ShutdownServ(time, SHUTDOWN_MASK_RESTART, RESTART_EXIT_CODE, strReason);
sWorld->ShutdownServ(delay, SHUTDOWN_MASK_RESTART, RESTART_EXIT_CODE, strReason);
}
return true;
}
static bool HandleServerIdleRestartCommand(ChatHandler* /*handler*/, int32 time, Optional<int32> exitCode, Tail reason)
static bool HandleServerIdleRestartCommand(ChatHandler* handler, std::string time, Optional<int32> exitCode, Tail reason)
{
std::wstring wReason = std::wstring();
std::string strReason = std::string();
if (time.empty())
{
return false;
}
if (Acore::StringTo<int32>(time).value_or(0) < 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
if (!reason.empty())
{
if (!Utf8toWStr(reason, wReason))
@@ -358,23 +420,48 @@ public:
}
}
int32 delay = TimeStringToSecs(time);
if (delay <= 0)
{
delay = Acore::StringTo<int32>(time).value_or(0);
}
if (delay <= 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
if (exitCode && *exitCode >= 0 && *exitCode <= 125)
{
sWorld->ShutdownServ(time, SHUTDOWN_MASK_RESTART | SHUTDOWN_MASK_IDLE, *exitCode);
sWorld->ShutdownServ(delay, SHUTDOWN_MASK_RESTART | SHUTDOWN_MASK_IDLE, *exitCode);
}
else
{
sWorld->ShutdownServ(time, SHUTDOWN_MASK_RESTART | SHUTDOWN_MASK_IDLE, RESTART_EXIT_CODE, strReason);
sWorld->ShutdownServ(delay, SHUTDOWN_MASK_RESTART | SHUTDOWN_MASK_IDLE, RESTART_EXIT_CODE, strReason);
}
return true;
}
static bool HandleServerIdleShutDownCommand(ChatHandler* /*handler*/, int32 time, Optional<int32> exitCode, Tail reason)
static bool HandleServerIdleShutDownCommand(ChatHandler* handler, std::string time, Optional<int32> exitCode, Tail reason)
{
std::wstring wReason = std::wstring();
std::string strReason = std::string();
if (time.empty())
{
return false;
}
if (Acore::StringTo<int32>(time).value_or(0) < 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
if (!reason.empty())
{
if (!Utf8toWStr(reason, wReason))
@@ -388,13 +475,26 @@ public:
}
}
int32 delay = TimeStringToSecs(time);
if (delay <= 0)
{
delay = Acore::StringTo<int32>(time).value_or(0);
}
if (delay <= 0)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}
if (exitCode && *exitCode >= 0 && *exitCode <= 125)
{
sWorld->ShutdownServ(time, SHUTDOWN_MASK_IDLE, *exitCode);
sWorld->ShutdownServ(delay, SHUTDOWN_MASK_IDLE, *exitCode);
}
else
{
sWorld->ShutdownServ(time, SHUTDOWN_MASK_IDLE, SHUTDOWN_EXIT_CODE, strReason);
sWorld->ShutdownServ(delay, SHUTDOWN_MASK_IDLE, SHUTDOWN_EXIT_CODE, strReason);
}
return true;
@@ -80,7 +80,10 @@ public:
{
if (hasYelled < 5)
{
Talk(SenatorYells[hasYelled]);
if (me->IsAlive())
{
Talk(SenatorYells[hasYelled]);
}
}
hasYelled++;
}
@@ -339,7 +339,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
void EnterCombat(Unit* who) override
{
if (Creature* delrissa = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_DELRISSA)))
if (delrissa->IsAlive() && !delrissa->IsInCombat())
if (delrissa->IsAlive() && !delrissa->IsEngaged())
delrissa->AI()->AttackStart(who);
events.ScheduleEvent(EVENT_SPELL_HELPER_HEALING_POTION, 1000);
@@ -244,7 +244,8 @@ public:
enum MograineEvents
{
EVENT_SPELL_CRUSADER_STRIKE = 1,
EVENT_SPELL_HAMMER_OF_JUSTICE = 2
EVENT_SPELL_HAMMER_OF_JUSTICE = 2,
EVENT_PULL_CATHEDRAL = 3
};
enum WhitemaneEvents
@@ -285,6 +286,8 @@ enum Says
SAY_WH_RESURRECT = 2,
};
float const CATHEDRAL_PULL_RANGE = 80.0f; // Distance from the Cathedral doors to where Mograine is standing
class npc_mograine : public CreatureScript
{
public:
@@ -357,6 +360,22 @@ public:
}
}
void PullCathedral() // CallForHelp will ignore any npcs without LOS
{
std::list<Creature*> creatureList;
GetCreatureListWithEntryInGrid(creatureList, me, NPC_SCARLET_MONK, CATHEDRAL_PULL_RANGE);
GetCreatureListWithEntryInGrid(creatureList, me, NPC_SCARLET_ABBOT, CATHEDRAL_PULL_RANGE);
GetCreatureListWithEntryInGrid(creatureList, me, NPC_SCARLET_CHAMPION, CATHEDRAL_PULL_RANGE);
GetCreatureListWithEntryInGrid(creatureList, me, NPC_SCARLET_CENTURION, CATHEDRAL_PULL_RANGE);
GetCreatureListWithEntryInGrid(creatureList, me, NPC_SCARLET_WIZARD, CATHEDRAL_PULL_RANGE);
GetCreatureListWithEntryInGrid(creatureList, me, NPC_SCARLET_CHAPLAIN, CATHEDRAL_PULL_RANGE);
for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
{
if (Creature* creature = *itr)
creature->AI()->AttackStart(me->GetVictim());
}
}
void Reset() override
{
//Incase wipe during phase that mograine fake death
@@ -392,8 +411,8 @@ public:
void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_MO_AGGRO);
me->CallForHelp(150.0f);
me->CastSpell(me, SPELL_RETRIBUTION_AURA, true);
events.ScheduleEvent(EVENT_PULL_CATHEDRAL, 1000); // Has to be done via event, otherwise mob aggroing Mograine DOES NOT aggro the room
events.ScheduleEvent(EVENT_SPELL_CRUSADER_STRIKE, urand(1000, 5000));
events.ScheduleEvent(EVENT_SPELL_HAMMER_OF_JUSTICE, urand(6000, 11000));
}
@@ -496,6 +515,9 @@ public:
me->CastSpell(me->GetVictim(), SPELL_HAMMER_OF_JUSTICE, true);
events.ScheduleEvent(EVENT_SPELL_HAMMER_OF_JUSTICE, 60000);
break;
case EVENT_PULL_CATHEDRAL:
PullCathedral();
break;
}
}
DoMeleeAttackIfReady();
@@ -783,37 +783,9 @@ public:
}
};
class spell_banging_the_gong : public SpellScriptLoader
{
public:
spell_banging_the_gong() : SpellScriptLoader("spell_banging_the_gong") { }
class spell_banging_the_gong_SpellScript : public SpellScript
{
PrepareSpellScript(spell_banging_the_gong_SpellScript);
void Activate(SpellEffIndex index)
{
PreventHitDefaultEffect(index);
GetHitGObj()->SendCustomAnim(0);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_banging_the_gong_SpellScript::Activate, EFFECT_1, SPELL_EFFECT_ACTIVATE_OBJECT);
}
};
SpellScript* GetSpellScript() const override
{
return new spell_banging_the_gong_SpellScript();
}
};
void AddSC_zulaman()
{
new npc_forest_frog();
new npc_zulaman_hostage();
new npc_harrison_jones();
new spell_banging_the_gong();
}
@@ -24,13 +24,16 @@ EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
#include "zulgurub.h"
enum Spells
{
SPELL_FROSTBREATH = 16099,
SPELL_MASSIVEGEYSER = 22421,
SPELL_SLAM = 24326
SPELL_SLAM = 24326,
SPELL_THRASH = 3417, // Triggers 3391
SPELL_SPLASH = 24593
};
enum Events
@@ -40,7 +43,12 @@ enum Events
EVENT_SLAM = 3
};
class boss_gahzranka : public CreatureScript // gahzranka
enum Misc
{
GAMEOBJECT_MUDSKUNK_LURE = 180346
};
class boss_gahzranka : public CreatureScript
{
public:
boss_gahzranka() : CreatureScript("boss_gahzranka") { }
@@ -49,6 +57,11 @@ public:
{
boss_gahzrankaAI(Creature* creature) : BossAI(creature, DATA_GAHZRANKA) { }
void IsSummonedBy(Unit* /*summoner*/) override
{
me->GetMotionMaster()->MovePath(me->GetEntry() * 10, false);
}
void Reset() override
{
_Reset();
@@ -62,9 +75,10 @@ public:
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
me->AddAura(SPELL_THRASH, me);
events.ScheduleEvent(EVENT_FROSTBREATH, 8000);
events.ScheduleEvent(EVENT_MASSIVEGEYSER, 25000);
events.ScheduleEvent(EVENT_SLAM, 17000);
events.ScheduleEvent(EVENT_SLAM, 15000);
}
void UpdateAI(uint32 diff) override
@@ -82,11 +96,11 @@ public:
switch (eventId)
{
case EVENT_FROSTBREATH:
DoCastVictim(SPELL_FROSTBREATH, true);
events.ScheduleEvent(EVENT_FROSTBREATH, urand(7000, 11000));
DoCastVictim(SPELL_FROSTBREATH);
events.ScheduleEvent(EVENT_FROSTBREATH, urand(8000, 20000));
break;
case EVENT_MASSIVEGEYSER:
DoCastVictim(SPELL_MASSIVEGEYSER, true);
DoCastVictim(SPELL_MASSIVEGEYSER);
events.ScheduleEvent(EVENT_MASSIVEGEYSER, urand(22000, 32000));
break;
case EVENT_SLAM:
@@ -108,7 +122,81 @@ public:
}
};
class spell_gahzranka_slam : public SpellScript
{
PrepareSpellScript(spell_gahzranka_slam);
void FilterTargets(std::list<WorldObject*>& targets)
{
if (Unit* caster = GetCaster())
{
_wipeThreat = targets.size() < caster->GetThreatMgr().getThreatList().size();
}
}
void HandleWipeThreat(SpellEffIndex /*effIndex*/)
{
if (_wipeThreat)
{
if (Unit* caster = GetCaster())
{
if (Unit* target = GetHitUnit())
{
caster->GetThreatMgr().modifyThreatPercent(target, -100);
}
}
}
}
void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_gahzranka_slam::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
OnEffectHitTarget += SpellEffectFn(spell_gahzranka_slam::HandleWipeThreat, EFFECT_1, SPELL_EFFECT_KNOCK_BACK);
}
private:
bool _wipeThreat = false;
};
class spell_pagles_point_cast : public SpellScript
{
PrepareSpellScript(spell_pagles_point_cast);
void OnEffect(SpellEffIndex /*effIndex*/)
{
if (Unit* caster = GetCaster())
{
if (InstanceScript* instanceScript = caster->GetInstanceScript())
{
if (!instanceScript->GetData(DATA_GAHZRANKA))
{
caster->m_Events.AddEventAtOffset([caster]()
{
if (GameObject* lure = caster->SummonGameObject(GAMEOBJECT_MUDSKUNK_LURE, -11688.5f, -1737.74f, 10.409842f, 1.f, 0.f, 0.f, 0.f, 0.f, 30 * IN_MILLISECONDS))
{
caster->m_Events.AddEventAtOffset([caster, lure]()
{
if (lure)
lure->DespawnOrUnsummon();
caster->CastSpell(caster, SPELL_SPLASH, true);
caster->SummonCreature(NPC_GAHZRANKA, -11688.5f, -1723.74f, -5.78f, 0.f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5 * DAY * IN_MILLISECONDS);
}, 5s);
}
}, 2s);
}
}
}
}
void Register() override
{
OnEffectLaunch += SpellEffectFn(spell_pagles_point_cast::OnEffect, EFFECT_1, SPELL_EFFECT_SEND_EVENT);
}
};
void AddSC_boss_gahzranka()
{
new boss_gahzranka();
RegisterSpellScript(spell_gahzranka_slam);
RegisterSpellScript(spell_pagles_point_cast);
}
@@ -29,13 +29,16 @@ EndScriptData */
enum Spells
{
SPELL_AVATAR = 24646, // Enrage Spell
SPELL_GROUND_TREMOR = 6524
SPELL_GROUND_TREMOR = 6524,
SPELL_ENTANGLING_ROOTS = 24648
};
enum Events
{
EVENT_AVATAR = 1,
EVENT_GROUND_TREMOR = 2
EVENT_GROUND_TREMOR = 2,
EVENT_START_PURSUIT = 3,
EVENT_ENTANGLING_ROOTS = 4
};
class boss_grilek : public CreatureScript // grilek
@@ -45,23 +48,16 @@ public:
struct boss_grilekAI : public BossAI
{
boss_grilekAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { }
void Reset() override
boss_grilekAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS)
{
_Reset();
}
void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_AVATAR, urand(15000, 25000));
events.ScheduleEvent(EVENT_GROUND_TREMOR, urand(15000, 25000));
events.ScheduleEvent(EVENT_AVATAR, 20s, 30s);
events.ScheduleEvent(EVENT_GROUND_TREMOR, 15s, 25s);
events.ScheduleEvent(EVENT_ENTANGLING_ROOTS, 5s, 15s);
}
void UpdateAI(uint32 diff) override
@@ -80,19 +76,21 @@ public:
{
case EVENT_AVATAR:
DoCast(me, SPELL_AVATAR);
if (Unit* victim = me->GetVictim())
{
if (DoGetThreat(victim))
DoModifyThreatPercent(victim, -50);
}
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
AttackStart(target);
events.ScheduleEvent(EVENT_AVATAR, urand(25000, 35000));
DoResetThreat();
me->SetReactState(REACT_PASSIVE);
events.ScheduleEvent(EVENT_START_PURSUIT, 2s);
events.ScheduleEvent(EVENT_AVATAR, 45s, 50s);
break;
case EVENT_GROUND_TREMOR:
DoCastVictim(SPELL_GROUND_TREMOR, true);
events.ScheduleEvent(EVENT_GROUND_TREMOR, urand(12000, 16000));
events.ScheduleEvent(EVENT_GROUND_TREMOR, 12s, 16s);
break;
case EVENT_START_PURSUIT:
me->SetReactState(REACT_AGGRESSIVE);
break;
case EVENT_ENTANGLING_ROOTS:
DoCastVictim(SPELL_ENTANGLING_ROOTS);
events.ScheduleEvent(EVENT_ENTANGLING_ROOTS, 10s, 20s);
break;
default:
break;
@@ -24,19 +24,25 @@ EndScriptData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
#include "zulgurub.h"
enum Spells
{
SPELL_MANABURN = 26046,
SPELL_SLEEP = 24664
SPELL_SLEEP = 24664,
SPELL_EARTH_SHOCK = 24685,
SPELL_CHAIN_BURN = 24684,
SPELL_SUMMON_NIGHTMARE_ILLUSION_LEFT = 24681,
SPELL_SUMMON_NIGHTMARE_ILLUSION_BACK = 24728,
SPELL_SUMMON_NIGHTMARE_ILLUSION_RIGHT = 24729
};
enum Events
{
EVENT_MANABURN = 1,
EVENT_SLEEP = 2,
EVENT_ILLUSIONS = 3
EVENT_SLEEP = 1,
EVENT_EARTH_SHOCK = 2,
EVENT_CHAIN_BURN = 3,
EVENT_ILLUSIONS = 4
};
class boss_hazzarah : public CreatureScript
@@ -48,22 +54,42 @@ public:
{
boss_hazzarahAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { }
void Reset() override
void JustSummoned(Creature* summon) override
{
_Reset();
}
summons.Summon(summon);
void JustDied(Unit* /*killer*/) override
{
_JustDied();
summon->SetCorpseDelay(10);
summon->SetReactState(REACT_PASSIVE);
summon->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE);
summon->SetVisible(false);
summon->m_Events.AddEventAtOffset([summon]()
{
summon->SetVisible(true);
}, 2s);
summon->m_Events.AddEventAtOffset([summon]()
{
summon->RemoveUnitFlag(UNIT_FLAG_DISABLE_MOVE);
summon->SetReactState(REACT_AGGRESSIVE);
summon->SetInCombatWithZone();
}, 3500ms);
}
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
events.ScheduleEvent(EVENT_MANABURN, urand(4000, 10000));
events.ScheduleEvent(EVENT_SLEEP, urand(10000, 18000));
events.ScheduleEvent(EVENT_ILLUSIONS, urand(10000, 18000));
events.ScheduleEvent(EVENT_SLEEP, 12s, 15s);
events.ScheduleEvent(EVENT_EARTH_SHOCK, 8s, 18s);
events.ScheduleEvent(EVENT_CHAIN_BURN, 12s, 28s);
events.ScheduleEvent(EVENT_ILLUSIONS, 16s, 24s);
}
bool CanAIAttack(Unit const* target) const override
{
if (me->GetThreatMgr().getThreatList().size() > 1 && me->GetThreatMgr().getOnlineContainer().getMostHated()->getTarget() == target)
return !target->HasAura(SPELL_SLEEP);
return true;
}
void UpdateAI(uint32 diff) override
@@ -80,27 +106,26 @@ public:
{
switch (eventId)
{
case EVENT_MANABURN:
DoCastVictim(SPELL_MANABURN, true);
events.ScheduleEvent(EVENT_MANABURN, urand(8000, 16000));
break;
case EVENT_SLEEP:
DoCastVictim(SPELL_SLEEP, true);
events.ScheduleEvent(EVENT_SLEEP, urand(12000, 20000));
events.ScheduleEvent(EVENT_SLEEP, 24s, 32s);
return;
case EVENT_EARTH_SHOCK:
DoCastVictim(SPELL_EARTH_SHOCK);
events.ScheduleEvent(EVENT_EARTH_SHOCK, 8s, 18s);
break;
case EVENT_CHAIN_BURN:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, [&](Unit* u) { return u && !u->IsPet() && u->getPowerType() == POWER_MANA; }))
{
DoCast(target, SPELL_CHAIN_BURN, false);
}
events.ScheduleEvent(EVENT_CHAIN_BURN, 12s, 28s);
break;
case EVENT_ILLUSIONS:
// We will summon 3 illusions that will spawn on a random gamer and attack this gamer
// We will just use one model for the beginning
for (uint8 i = 0; i < 3; ++i)
{
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
{
Creature* Illusion = me->SummonCreature(NPC_NIGHTMARE_ILLUSION, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000);
if (Illusion)
Illusion->AI()->AttackStart(target);
}
}
events.ScheduleEvent(EVENT_ILLUSIONS, urand(15000, 25000));
DoCastSelf(SPELL_SUMMON_NIGHTMARE_ILLUSION_LEFT, true);
DoCastSelf(SPELL_SUMMON_NIGHTMARE_ILLUSION_BACK, true);
DoCastSelf(SPELL_SUMMON_NIGHTMARE_ILLUSION_RIGHT, true);
events.ScheduleEvent(EVENT_ILLUSIONS, 16s, 24s);
break;
default:
break;
@@ -117,7 +142,28 @@ public:
}
};
class spell_chain_burn : public SpellScript
{
PrepareSpellScript(spell_chain_burn);
void FilterTargets(std::list<WorldObject*>& targets)
{
Unit* caster = GetCaster();
targets.remove_if([caster](WorldObject* target) -> bool
{
Unit* unit = target->ToUnit();
return !unit || unit->getPowerType() != POWER_MANA || caster->GetVictim() == unit;
});
}
void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_chain_burn::FilterTargets, EFFECT_0, TARGET_UNIT_TARGET_ENEMY);
}
};
void AddSC_boss_hazzarah()
{
new boss_hazzarah();
RegisterSpellScript(spell_chain_burn);
}
@@ -15,8 +15,11 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "GameObjectAI.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
#include "TaskScheduler.h"
#include "zulgurub.h"
enum Says
@@ -49,7 +52,8 @@ enum Spells
SPELL_GREATER_HEAL = 23954,
// Batriders Spell
SPELL_BOMB = 40332 // Wrong ID but Magmadars bomb is not working...
SPELL_THROW_LIQUID_FIRE = 23970,
SPELL_SUMMON_LIQUID_FIRE = 23971
};
enum BatIds
@@ -93,214 +97,227 @@ Position const SpawnBat[6] =
{ -12293.6220f, -1380.2640f, 144.8304f, 5.483f }
};
class boss_jeklik : public CreatureScript
struct boss_jeklik : public BossAI
{
public:
boss_jeklik() : CreatureScript("boss_jeklik") { }
boss_jeklik(Creature* creature) : BossAI(creature, DATA_JEKLIK) { }
struct boss_jeklikAI : public BossAI
void Reset() override
{
boss_jeklikAI(Creature* creature) : BossAI(creature, DATA_JEKLIK) { }
DoCastSelf(SPELL_GREEN_CHANNELING);
me->SetHover(false);
me->SetDisableGravity(false);
_Reset();
}
void Reset() override
void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
}
void EnterEvadeMode(EvadeReason why) override
{
const Position homePos = me->GetHomePosition();
me->NearTeleportTo(homePos.GetPositionX(), homePos.GetPositionY(), homePos.GetPositionZ(), homePos.GetOrientation());
BossAI::EnterEvadeMode(why);
}
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
me->RemoveAurasDueToSpell(SPELL_GREEN_CHANNELING);
me->SetHover(true);
me->SetDisableGravity(true);
me->AddUnitState(UNIT_STATE_IGNORE_PATHFINDING);
DoCastSelf(SPELL_BAT_FORM);
events.SetPhase(PHASE_ONE);
events.ScheduleEvent(EVENT_CHARGE_JEKLIK, urand(10000, 20000), PHASE_ONE);
events.ScheduleEvent(EVENT_PIERCE_ARMOR, urand(5000, 15000), PHASE_ONE);
events.ScheduleEvent(EVENT_BLOOD_LEECH, urand(5000, 15000), PHASE_ONE);
events.ScheduleEvent(EVENT_SONIC_BURST, urand(5000, 15000), PHASE_ONE);
events.ScheduleEvent(EVENT_SWOOP, 20000, PHASE_ONE);
events.ScheduleEvent(EVENT_SPAWN_BATS, 30000, PHASE_ONE);
}
void DamageTaken(Unit* /*who*/, uint32& /*damage*/, DamageEffectType, SpellSchoolMask) override
{
if (events.IsInPhase(PHASE_ONE) && !HealthAbovePct(50))
{
DoCastSelf(SPELL_GREEN_CHANNELING);
_Reset();
me->RemoveAurasDueToSpell(SPELL_BAT_FORM);
me->SetHover(false);
me->SetDisableGravity(false);
DoResetThreat();
events.SetPhase(PHASE_TWO);
events.CancelEventGroup(PHASE_ONE);
events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, urand(5000, 15000), PHASE_TWO);
events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(10000, 15000), PHASE_TWO);
events.ScheduleEvent(EVENT_PSYCHIC_SCREAM, urand(25000, 35000), PHASE_TWO);
events.ScheduleEvent(EVENT_MIND_FLAY, urand(10000, 30000), PHASE_TWO);
events.ScheduleEvent(EVENT_GREATER_HEAL, 25000, PHASE_TWO);
events.ScheduleEvent(EVENT_SPAWN_FLYING_BATS, 10000, PHASE_TWO);
return;
}
}
void JustDied(Unit* /*killer*/) override
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{
_JustDied();
Talk(SAY_DEATH);
}
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
me->RemoveAurasDueToSpell(SPELL_GREEN_CHANNELING);
me->SetDisableGravity(true);
DoCastSelf(SPELL_BAT_FORM);
events.SetPhase(PHASE_ONE);
events.ScheduleEvent(EVENT_CHARGE_JEKLIK, urand(10000, 20000), PHASE_ONE);
events.ScheduleEvent(EVENT_PIERCE_ARMOR, urand(5000, 15000), PHASE_ONE);
events.ScheduleEvent(EVENT_BLOOD_LEECH, urand(5000, 15000), PHASE_ONE);
events.ScheduleEvent(EVENT_SONIC_BURST, urand(5000, 15000), PHASE_ONE);
events.ScheduleEvent(EVENT_SWOOP, 20000, PHASE_ONE);
events.ScheduleEvent(EVENT_SPAWN_BATS, 30000, PHASE_ONE);
}
void DamageTaken(Unit*, uint32& /*damage*/, DamageEffectType, SpellSchoolMask) override
{
if (events.IsInPhase(PHASE_ONE) && !HealthAbovePct(50))
switch (eventId)
{
me->RemoveAurasDueToSpell(SPELL_BAT_FORM);
me->SetDisableGravity(false);
DoResetThreat();
events.SetPhase(PHASE_TWO);
events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, urand(5000, 15000), PHASE_TWO);
events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(10000, 15000), PHASE_TWO);
events.ScheduleEvent(EVENT_PSYCHIC_SCREAM, urand(25000, 35000), PHASE_TWO);
events.ScheduleEvent(EVENT_MIND_FLAY, urand(10000, 30000), PHASE_TWO);
events.ScheduleEvent(EVENT_GREATER_HEAL, 25000, PHASE_TWO);
events.ScheduleEvent(EVENT_SPAWN_FLYING_BATS, 10000, PHASE_TWO);
return;
}
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
// Phase one
case EVENT_CHARGE_JEKLIK:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
{
DoCast(target, SPELL_CHARGE);
AttackStart(target);
}
events.ScheduleEvent(EVENT_CHARGE_JEKLIK, urand(15000, 30000), PHASE_ONE);
break;
case EVENT_PIERCE_ARMOR:
DoCastVictim(SPELL_PIERCE_ARMOR);
events.ScheduleEvent(EVENT_PIERCE_ARMOR, urand(20000, 30000), PHASE_ONE);
break;
case EVENT_BLOOD_LEECH:
DoCastVictim(SPELL_BLOOD_LEECH);
events.ScheduleEvent(EVENT_BLOOD_LEECH, urand(10000, 20000), PHASE_ONE);
break;
case EVENT_SONIC_BURST:
DoCastVictim(SPELL_SONIC_BURST);
events.ScheduleEvent(EVENT_SONIC_BURST, urand(20000, 30000), PHASE_ONE);
break;
case EVENT_SWOOP:
DoCastVictim(SPELL_SWOOP);
events.ScheduleEvent(EVENT_SWOOP, urand(20000, 30000), PHASE_ONE);
break;
case EVENT_SPAWN_BATS:
Talk(EMOTE_SUMMON_BATS);
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
for (uint8 i = 0; i < 6; ++i)
if (Creature* bat = me->SummonCreature(NPC_BLOODSEEKER_BAT, SpawnBat[i], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
bat->AI()->AttackStart(target);
events.ScheduleEvent(EVENT_SPAWN_BATS, 30000, PHASE_ONE);
break;
// Phase one
case EVENT_CHARGE_JEKLIK:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
{
DoCast(target, SPELL_CHARGE);
AttackStart(target);
}
events.ScheduleEvent(EVENT_CHARGE_JEKLIK, urand(15000, 30000), PHASE_ONE);
break;
case EVENT_PIERCE_ARMOR:
DoCastVictim(SPELL_PIERCE_ARMOR);
events.ScheduleEvent(EVENT_PIERCE_ARMOR, urand(20000, 30000), PHASE_ONE);
break;
case EVENT_BLOOD_LEECH:
DoCastVictim(SPELL_BLOOD_LEECH);
events.ScheduleEvent(EVENT_BLOOD_LEECH, urand(10000, 20000), PHASE_ONE);
break;
case EVENT_SONIC_BURST:
DoCastVictim(SPELL_SONIC_BURST);
events.ScheduleEvent(EVENT_SONIC_BURST, urand(20000, 30000), PHASE_ONE);
break;
case EVENT_SWOOP:
DoCastVictim(SPELL_SWOOP);
events.ScheduleEvent(EVENT_SWOOP, urand(20000, 30000), PHASE_ONE);
break;
case EVENT_SPAWN_BATS:
Talk(EMOTE_SUMMON_BATS);
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
for (uint8 i = 0; i < 6; ++i)
if (Creature* bat = me->SummonCreature(NPC_BLOODSEEKER_BAT, SpawnBat[i], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
bat->AI()->AttackStart(target);
events.ScheduleEvent(EVENT_SPAWN_BATS, 30000, PHASE_ONE);
break;
//Phase two
case EVENT_CURSE_OF_BLOOD:
DoCastSelf(SPELL_CURSE_OF_BLOOD);
events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, urand(25000, 30000), PHASE_TWO);
break;
case EVENT_PSYCHIC_SCREAM:
DoCastVictim(SPELL_PSYCHIC_SCREAM);
events.ScheduleEvent(EVENT_PSYCHIC_SCREAM, urand(35000, 45000), PHASE_TWO);
break;
case EVENT_SHADOW_WORD_PAIN:
DoCastRandomTarget(SPELL_SHADOW_WORD_PAIN, 0, true);
events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(12000, 18000), PHASE_TWO);
break;
case EVENT_MIND_FLAY:
DoCastVictim(SPELL_MIND_FLAY);
events.ScheduleEvent(EVENT_MIND_FLAY, urand(20000, 40000), PHASE_TWO);
break;
case EVENT_GREATER_HEAL:
Talk(EMOTE_GREAT_HEAL);
me->InterruptNonMeleeSpells(false);
DoCastSelf(SPELL_GREATER_HEAL);
events.ScheduleEvent(EVENT_GREATER_HEAL, 25000, PHASE_TWO);
break;
case EVENT_SPAWN_FLYING_BATS:
Talk(SAY_CALL_RIDERS);
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
if (Creature* flyingBat = me->SummonCreature(NPC_FRENZIED_BAT, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ() + 15.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
flyingBat->AI()->AttackStart(target);
events.ScheduleEvent(EVENT_SPAWN_FLYING_BATS, urand(10000, 15000), PHASE_TWO);
break;
default:
break;
}
case EVENT_CURSE_OF_BLOOD:
DoCastSelf(SPELL_CURSE_OF_BLOOD);
events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, urand(25000, 30000), PHASE_TWO);
break;
case EVENT_PSYCHIC_SCREAM:
DoCastVictim(SPELL_PSYCHIC_SCREAM);
events.ScheduleEvent(EVENT_PSYCHIC_SCREAM, urand(35000, 45000), PHASE_TWO);
break;
case EVENT_SHADOW_WORD_PAIN:
DoCastRandomTarget(SPELL_SHADOW_WORD_PAIN, 0, true);
events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(12000, 18000), PHASE_TWO);
break;
case EVENT_MIND_FLAY:
DoCastVictim(SPELL_MIND_FLAY);
events.ScheduleEvent(EVENT_MIND_FLAY, urand(20000, 40000), PHASE_TWO);
break;
case EVENT_GREATER_HEAL:
Talk(EMOTE_GREAT_HEAL);
me->InterruptNonMeleeSpells(false);
DoCastSelf(SPELL_GREATER_HEAL);
events.ScheduleEvent(EVENT_GREATER_HEAL, 25000, PHASE_TWO);
break;
case EVENT_SPAWN_FLYING_BATS:
Talk(SAY_CALL_RIDERS);
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
if (Creature* flyingBat = me->SummonCreature(NPC_FRENZIED_BAT, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ() + 15.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000))
flyingBat->AI()->DoZoneInCombat();
events.ScheduleEvent(EVENT_SPAWN_FLYING_BATS, urand(10000, 15000), PHASE_TWO);
break;
default:
break;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetZulGurubAI<boss_jeklikAI>(creature);
DoMeleeAttackIfReady();
}
};
// Flying Bat
class npc_batrider : public CreatureScript
struct npc_batrider : public ScriptedAI
{
public:
npc_batrider() : CreatureScript("npc_batrider") { }
struct npc_batriderAI : public ScriptedAI
npc_batrider(Creature* creature) : ScriptedAI(creature)
{
npc_batriderAI(Creature* creature) : ScriptedAI(creature) { }
uint32 Bomb_Timer;
void Reset() override
_scheduler.SetValidator([this]
{
Bomb_Timer = 2000;
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->AddUnitState(UNIT_STATE_ROOT);
}
return !me->HasUnitState(UNIT_STATE_CASTING);
});
}
void EnterCombat(Unit* /*who*/) override { }
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
if (Bomb_Timer <= diff)
{
std::list<Unit*> targets;
SelectTargetList(targets, 1, SelectTargetMethod::Random, 500.0f, true);
if (!targets.empty())
{
if (targets.size() > 1)
{
targets.resize(1);
}
}
for (std::list<Unit*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
{
me->CastSpell((*itr), SPELL_BOMB);
}
Bomb_Timer = 7000;
}
else
Bomb_Timer -= diff;
}
};
CreatureAI* GetAI(Creature* creature) const override
void Reset() override
{
return GetZulGurubAI<npc_batriderAI>(creature);
_scheduler.CancelAll();
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetHover(true);
me->SetDisableGravity(true);
me->AddUnitState(UNIT_STATE_ROOT);
}
void EnterCombat(Unit* /*who*/) override
{
_scheduler.Schedule(2s, [this](TaskContext context)
{
DoCastRandomTarget(SPELL_THROW_LIQUID_FIRE);
context.Repeat(7s);
});
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
_scheduler.Update(diff);
}
private:
TaskScheduler _scheduler;
};
class spell_batrider_bomb : public SpellScript
{
PrepareSpellScript(spell_batrider_bomb);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_SUMMON_LIQUID_FIRE });
}
void HandleScriptEffect(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
if (Unit* target = GetHitUnit())
{
target->CastSpell(target, SPELL_SUMMON_LIQUID_FIRE, true);
}
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_batrider_bomb::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
void AddSC_boss_jeklik()
{
new boss_jeklik();
new npc_batrider();
RegisterCreatureAI(boss_jeklik);
RegisterCreatureAI(npc_batrider);
RegisterSpellScript(spell_batrider_bomb);
}

Some files were not shown because too many files have changed in this diff Show More