Merge branch 'Playerbot' of https://github.com/ZhengPeiRu21/azerothcore-wotlk into Playerbot
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
Vendored
+1
-2
@@ -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")
|
||||
|
||||
Vendored
+2
-2
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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\'');
|
||||
|
||||
Vendored
+1
-2
@@ -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()
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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 ""
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -85,6 +85,8 @@ void Totem::InitStats(uint32 duration)
|
||||
|
||||
void Totem::InitSummon()
|
||||
{
|
||||
Minion::InitSummon();
|
||||
|
||||
if (m_type == TOTEM_PASSIVE && GetSpell())
|
||||
CastSpell(this, GetSpell(), true);
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
+4
-1
@@ -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
Reference in New Issue
Block a user