Merge branch 'master' into Playerbot

This commit is contained in:
Yunfan Li
2024-12-31 17:18:40 +08:00
102 changed files with 2247 additions and 409 deletions
+7 -2
View File
@@ -26,6 +26,11 @@ inputs:
description: Flag to enable or disable PCH
required: false
type: boolean
maxerrors:
default: 1
description: Max allowed error count before compilation stops
required: false
type: number
runs:
using: composite
steps:
@@ -106,8 +111,8 @@ runs:
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_CXX_COMPILER_LAUNCHER="ccache" \
-DCMAKE_C_COMPILER_LAUNCHER="ccache" \
-DCMAKE_C_FLAGS="-Werror" \
-DCMAKE_CXX_FLAGS="-Werror" \
-DCMAKE_C_FLAGS="-Werror ${{ startsWith(inputs.cc, 'clang') && '-ferror-limit=' || '-fmax-errors=' }}${{inputs.maxerrors}} " \
-DCMAKE_CXX_FLAGS="-Werror ${{ startsWith(inputs.cxx, 'clang') && '-ferror-limit=' || '-fmax-errors=' }}${{inputs.maxerrors}}" \
-DBUILD_TESTING="ON" \
-DUSE_SCRIPTPCH=${{ inputs.pch == 'true' && 'ON' || '' }} \
-DUSE_COREPCH=${{ inputs.pch == 'true' && 'ON' || '' }} \
+6 -2
View File
@@ -1,6 +1,10 @@
name: Codestyle
on:
pull_request:
types:
- opened
- reopened
- synchronize
paths:
- src/**
- "!README.md"
@@ -10,7 +14,7 @@ jobs:
triage:
runs-on: ubuntu-latest
name: C++
if: github.repository == 'liyunfan1223/azerothcore-wotlk'
if: github.repository == 'liyunfan1223/azerothcore-wotlk' && !github.event.pull_request.draft
steps:
- uses: actions/checkout@v4
- name: Setup python
@@ -18,7 +22,7 @@ jobs:
with:
python-version: '3.10'
- name: AzerothCore codestyle
run: python ./apps/codestyle/codestyle.py
run: python ./apps/codestyle/codestyle-cpp.py
- name: C++ Advanced
run: |
sudo apt update -y
+2 -4
View File
@@ -32,10 +32,8 @@ jobs:
CC: gcc-14
CXX: g++-14
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-${{ matrix.compiler }}-nopch
env:
COMPILER: ${{ matrix.compiler }}
if: github.repository == 'liyunfan1223/azerothcore-wotlk'
name: ${{ matrix.os }}-${{ matrix.compiler.CC }}-nopch
if: github.repository == 'liyunfan1223/azerothcore-wotlk' && !github.event.pull_request.draft
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/linux-build
+4 -1
View File
@@ -4,7 +4,10 @@ on:
branches:
- 'master'
pull_request:
types: ['opened', 'synchronize', 'reopened']
types:
- opened
- reopened
- synchronize
concurrency:
group: ${{ github.head_ref }} || concat(${{ github.ref }}, ${{ github.workflow }})
+12 -10
View File
@@ -5,10 +5,19 @@ on:
- 'master'
pull_request:
types:
- labeled
- opened
- reopened
- synchronize
paths:
- 'src/*'
- 'src/common/**/*'
- 'src/genrev/**/*'
- 'src/server/*'
- 'src/server/apps/**/*'
- 'src/server/database/**/*'
- 'src/server/game/**/*'
- 'src/server/shared/**/*'
- 'src/tools/**/*'
concurrency:
group: ${{ github.head_ref }} || concat(${{ github.ref }}, ${{ github.workflow }})
@@ -26,15 +35,7 @@ jobs:
CXX: clang++-18
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-${{ matrix.compiler.CC }}-nopch-modules
if: github.repository == 'liyunfan1223/azerothcore-wotlk'
&& !github.event.pull_request.draft
&& (
github.ref_name == 'master'
|| contains(github.event.pull_request.labels.*.name, 'file-cpp'
|| github.event.label.name == 'file-cpp'
|| contains(github.event.pull_request.labels.*.name, 'run-build')
|| github.event.label.name == 'run-build')
)
if: github.repository == 'liyunfan1223/azerothcore-wotlk' && !github.event.pull_request.draft
steps:
- uses: actions/checkout@v4
# This script installs a general list of modules to compile with
@@ -48,3 +49,4 @@ jobs:
CXX: ${{ matrix.compiler.CXX }}
modules: true
pch: false
maxerrors: 0
-2
View File
@@ -6,9 +6,7 @@ on:
pull_request:
types:
- labeled
- opened
- synchronize
- reopened
concurrency:
group: ${{ github.head_ref }} || concat(${{ github.ref }}, ${{ github.workflow }})
+1 -1
View File
@@ -6,7 +6,7 @@ jobs:
triage:
runs-on: ubuntu-24.04
permissions: write-all
if: github.repository == 'azerothcore/azerothcore-wotlk'
if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft
steps:
- uses: actions/checkout@v4
with:
+11 -3
View File
@@ -1,6 +1,10 @@
name: Codestyle
on:
pull_request:
types:
- opened
- reopened
- synchronize
paths:
- data/**
- "!README.md"
@@ -10,8 +14,12 @@ jobs:
triage:
runs-on: ubuntu-latest
name: SQL
if: github.repository == 'azerothcore/azerothcore-wotlk'
if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft
steps:
- uses: actions/checkout@v4
- name: Check pending SQL
run: source ./apps/ci/ci-pending.sh
- name: Setup python
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: AzerothCore codestyle
run: python ./apps/codestyle/codestyle-sql.py
-2
View File
@@ -6,8 +6,6 @@ on:
pull_request:
types:
- labeled
- opened
- reopened
- synchronize
concurrency:
-36
View File
@@ -1,36 +0,0 @@
#!/bin/bash
set -e
echo "Pending SQL check script:"
echo
# We want to ensure the end of file has a semicolon and doesn't have extra
# newlines
find data/sql/updates/pending* -name "*.sql" -type f | while read -r file; do
# The first sed script collapses all strings into an empty string. The
# contents of strings aren't necessary for this check and its still valid
# sql.
#
# The second rule removes sql comments.
ERR_AT_EOF="$(sed -e "s/'.*'/''/g" -e 's/ --([^-])*$//' "$file" | tr -d '\n ' | tail -c 1)"
if [[ "$ERR_AT_EOF" != ";" ]]; then
echo "Missing Semicolon (;) or multiple newlines at the end of the file."
exit 1
else
echo "> Semicolon check - OK"
fi
done
find data/sql/updates/pending* -name "*.sql" -type f | while read -r file; do
if sed "s/'.*'\(.*\)/\1/g" "$file" | grep -q -i -E "broadcast_text"; then
echo "> broadcast_text check - Failed"
echo " - DON'T EDIT broadcast_text TABLE UNLESS YOU KNOW WHAT YOU ARE DOING!"
echo " - This error can safely be ignored if the changes are approved to be sniffed."
exit 1
else
echo "> broadcast_text check - OK"
fi
done
echo
echo "Everything looks good"
@@ -222,6 +222,11 @@ def misc_codestyle_check(file: io, file_path: str) -> None:
# used to check for "if/else (...) {" "} else" ignores "if/else (...) {...}" "#define ... if/else (...) {"
ifelse_curlyregex = r"^[^#define].*\s+(if|else)(\s*\(.*\))?\s*{[^}]*$|}\s*else(\s*{[^}]*$)"
# used to catch double semicolons ";;" ignores "(;;)"
double_semiregex = r"[^(];;[^)]"
# used to catch tabs
tab_regex = r"\t"
# Parse all the file
for line_number, line in enumerate(file, start = 1):
if 'const auto&' in line:
@@ -240,6 +245,15 @@ def misc_codestyle_check(file: io, file_path: str) -> None:
print(
f"Curly brackets are not allowed to be leading or trailing if/else statements. Place it on a new line: {file_path} at line {line_number}")
check_failed = True
if re.match(double_semiregex, line):
print(
f"Double semicolon (;;) found in {file_path} at line {line_number}")
check_failed = True
if re.match(tab_regex, line):
print(
f"Tab found! Replace it to 4 spaces: {file_path} at line {line_number}")
check_failed = True
# Handle the script error and update the result output
if check_failed:
error_handler = True
+169
View File
@@ -0,0 +1,169 @@
import io
import os
import sys
import re
import glob
# Get the pending directory of the project
base_dir = os.getcwd()
pattern = os.path.join(base_dir, 'data/sql/updates/pending_db_*')
src_directory = glob.glob(pattern)
# Global variables
error_handler = False
results = {
"Multiple blank lines check": "Passed",
"Trailing whitespace check": "Passed",
"SQL codestyle check": "Passed",
"Missing semicolon check": "Passed"
}
# Collect all files in all directories
def collect_files_from_directories(directories: list) -> list:
all_files = []
for directory in directories:
for root, _, files in os.walk(directory):
for file in files:
if not file.endswith('.sh'): # Skip .sh files
all_files.append(os.path.join(root, file))
return all_files
# Main function to parse all the files of the project
def parsing_file(files: list) -> None:
print("Starting AzerothCore SQL Codestyle check...")
print(" ")
print("Please read the SQL Standards for AzerothCore:")
print("https://www.azerothcore.org/wiki/sql-standards")
print(" ")
# Iterate over all files
for file_path in files:
try:
with open(file_path, 'r', encoding='utf-8') as file:
multiple_blank_lines_check(file, file_path)
trailing_whitespace_check(file, file_path)
sql_check(file, file_path)
semicolon_check(file, file_path)
except UnicodeDecodeError:
print(f"\nCould not decode file {file_path}")
sys.exit(1)
# Output the results
print("")
for check, result in results.items():
print(f"{check} : {result}")
if error_handler:
print("\nPlease fix the codestyle issues above.")
sys.exit(1)
else:
print(f"\nEverything looks good")
# Codestyle patterns checking for multiple blank lines
def multiple_blank_lines_check(file: io, file_path: str) -> None:
global error_handler, results
file.seek(0) # Reset file pointer to the beginning
check_failed = False
consecutive_blank_lines = 0
# Parse all the file
for line_number, line in enumerate(file, start = 1):
if line.strip() == '':
consecutive_blank_lines += 1
if consecutive_blank_lines > 1:
print(f"Multiple blank lines found in {file_path} at line {line_number - 1}")
check_failed = True
else:
consecutive_blank_lines = 0
# Additional check for the end of the file
if consecutive_blank_lines >= 1:
print(f"Multiple blank lines found at the end of: {file_path}")
check_failed = True
# Handle the script error and update the result output
if check_failed:
error_handler = True
results["Multiple blank lines check"] = "Failed"
# Codestyle patterns checking for whitespace at the end of the lines
def trailing_whitespace_check(file: io, file_path: str) -> None:
global error_handler, results
file.seek(0) # Reset file pointer to the beginning
check_failed = False
# Parse all the file
for line_number, line in enumerate(file, start = 1):
if line.endswith(' \n'):
print(f"Trailing whitespace found: {file_path} at line {line_number}")
check_failed = True
if check_failed:
error_handler = True
results["Trailing whitespace check"] = "Failed"
# Codestyle patterns checking for various codestyle issues
def sql_check(file: io, file_path: str) -> None:
global error_handler, results
file.seek(0) # Reset file pointer to the beginning
check_failed = False
# Parse all the file
for line_number, line in enumerate(file, start = 1):
if [match for match in ['broadcast_text'] if match in line]:
print(
f"DON'T EDIT broadcast_text TABLE UNLESS YOU KNOW WHAT YOU ARE DOING!\nThis error can safely be ignored if the changes are approved to be sniffed: {file_path} at line {line_number}")
check_failed = True
if [match for match in [';;'] if match in line]:
print(
f"Double semicolon (;;) found in {file_path} at line {line_number}")
check_failed = True
if re.match(r"\t", line):
print(
f"Tab found! Replace it to 4 spaces: {file_path} at line {line_number}")
check_failed = True
last_line = line[-1].strip()
if last_line:
print(
f"The last line is not a newline. Please add a newline: {file_path}")
check_failed = True
# Handle the script error and update the result output
if check_failed:
error_handler = True
results["SQL codestyle check"] = "Failed"
def semicolon_check(file: io, file_path: str) -> None:
global error_handler, results
file.seek(0) # Reset file pointer to the beginning
check_failed = False
sql_keywords = ["SELECT", "INSERT", "UPDATE", "DELETE"]
query_open = False
lines = file.readlines()
total_lines = len(lines)
for line_number, line in enumerate(lines, start=1):
stripped_line = line.rstrip() # Remove trailing whitespace including newline
# Check if one keyword is in the line
if not query_open and any(keyword in stripped_line for keyword in sql_keywords):
query_open = True
if query_open:
if stripped_line == '':
print(f"Missing semicolon in {file_path} at line {line_number - 1}")
check_failed = True
query_open = False
elif line_number == total_lines:
if not stripped_line.endswith(';'):
print(f"Missing semicolon in {file_path} at the last line {line_number}")
check_failed = True
query_open = False
elif stripped_line.endswith(';'):
query_open = False
if check_failed:
error_handler = True
results["Missing semicolon check"] = "Failed"
# Collect all files from matching directories
all_files = collect_files_from_directories(src_directory)
# Main function
parsing_file(all_files)
@@ -0,0 +1,23 @@
-- DB update 2024_12_20_00 -> 2024_12_20_01
--
DELETE FROM `creature_loot_template` WHERE (`Entry` IN (2359, 4120, 6073, 4499, 824, 624, 2450, 4113, 2269, 4844, 4846, 623, 674, 1094, 4849, 3586, 1167, 1393, 14427)) AND (`Item` IN (2838));
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(2359, 2838, 0, 25, 0, 1, 0, 1, 2, 'Heavy Stone -- Elemental Slave'),
(4120, 2838, 0, 25, 0, 1, 0, 1, 2, 'Heavy Stone -- Thundering Boulderkin'),
(6073, 2838, 0, 25, 0, 1, 0, 1, 2, 'Heavy Stone -- Searing Infernal'),
(4499, 2838, 0, 4, 0, 1, 0, 1, 1, 'Heavy Stone -- Defias Worker'),
(824, 2838, 0, 4, 0, 1, 0, 1, 1, 'Defias Digger'),
(624, 2838, 0, 3, 0, 1, 0, 1, 1, 'Heavy Stone -- Undead Excavator'),
(2450, 2838, 0, 2, 0, 1, 0, 1, 3, 'Heavy Stone -- Miner Hackett'),
(4113, 2838, 0, 2.66, 0, 1, 0, 1, 3, 'Heavy Stone -- Gravelsnout Digger'),
(2269, 2838, 0, 1.44, 0, 1, 0, 1, 3, 'Heavy Stone -- Hillsbrad Miner'),
(4844, 2838, 0, 1.1, 0, 1, 0, 1, 3, 'Heavy Stone -- Shadowforge Surveyor'),
(4846, 2838, 0, 1.1, 0, 1, 0, 1, 3, 'Heavy Stone -- Shadowforge Digger'),
(623, 2838, 0, 1, 0, 1, 0, 1, 1, 'Heavy Stone -- Skeletal Miner'),
(674, 2838, 0, 0.9, 0, 1, 0, 1, 3, 'Heavy Stone -- Venture CO Stripminer'),
(1094, 2838, 0, 0.9, 0, 1, 0, 1, 3, 'Heavy Stone -- Venture CO Miner'),
(4849, 2838, 0, 0.81, 0, 1, 0, 1, 3, 'Heavy Stone -- Shadowforge Archaeologist'),
(3586, 2838, 0, 0.8, 0, 1, 0, 1, 1, 'Heavy Stone -- Miner Johnson'),
(1167, 2838, 0, 0.8, 0, 1, 0, 1, 1, 'Heavy Stone -- Stonesplinter Digger'),
(1393, 2838, 0, 0.6, 0, 1, 0, 1, 1, 'Heavy Stone -- Beserk Trogg'),
(14427, 2838, 0, 0.4, 0, 1, 0, 3, 3, 'Heavy Stone -- Gibblesnik');
+202
View File
@@ -0,0 +1,202 @@
-- DB update 2024_12_20_01 -> 2024_12_20_02
-- Add Arrows for Phase 2( Sniffed Position/Orientation)
DELETE FROM `gameobject` WHERE (`id` = 190691) AND (`guid` IN (66234, 66236, 66237, 66238, 66239, 66240, 66241, 66242, 66243, 66244, 66256, 66257, 66314, 66320, 66327, 66333, 66337, 66350, 66386, 66387, 66388, 66390, 66391, 66394, 66395, 66398, 66399, 66400, 66402, 66416, 66417, 66418, 66419, 66433, 66434, 66435, 66459, 66460, 66461, 66462, 66463, 66464, 66465, 66466, 66467, 66468, 66469, 66470, 66474, 66477, 66478, 66479, 66484, 66491, 66499, 66505, 66509, 66516, 66518, 66520, 66521, 66600, 66601, 66602, 66603, 66604, 66605, 66606, 66607, 66608, 66609, 66610, 66636, 66637, 66638, 66674, 66675, 66676, 66677, 66680, 66690, 66692, 66694, 66707, 66714, 66716, 66718, 66719, 66720, 66721, 66722, 66723, 66724));
INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES
(66234, 190691, 609, 0, 0, 1, 2, 2123.6387, -5795.0356, 99.31831, 2.5747137, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66236, 190691, 609, 0, 0, 1, 2, 2085.0884, -5771.0396, 99.24098, 2.633809, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66237, 190691, 609, 0, 0, 1, 2, 2128.4812, -5861.964, 101.79257, 3.62098, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66238, 190691, 609, 0, 0, 1, 2, 2073.94, -5764.836, 99.47543, 2.6338243, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66239, 190691, 609, 0, 0, 1, 2, 2073.94, -5764.836, 99.47543, 2.6338243, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66240, 190691, 609, 0, 0, 1, 2, 1992.3824, -5784.0103, 100.81239, 2.879789, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66241, 190691, 609, 0, 0, 1, 2, 2002.1233, -5827.6704, 100.67761, 5.811947, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66242, 190691, 609, 0, 0, 1, 2, 2049.2368, -5845.334, 101.28788, 5.637414, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66243, 190691, 609, 0, 0, 1, 2, 2034.7698, -5849.362, 100.38089, 2.5830808, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66244, 190691, 609, 0, 0, 1, 2, 1992.5942, -5751.844, 101.293106, 3.2041564, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66256, 190691, 609, 0, 0, 1, 2, 2013.6654, -5757.4614, 100.92543, 3.0024395, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66257, 190691, 609, 0, 0, 1, 2, 2002.2798, -5751.238, 100.28231, 3.2041564, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66314, 190691, 609, 0, 0, 1, 2, 2056.2092, -5842.4326, 101.40695, 3.2728686, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66320, 190691, 609, 0, 0, 1, 2, 2025.1902, -5758.892, 100.18037, 3.02026, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66327, 190691, 609, 0, 0, 1, 2, 1996.4088, -5842.396, 100.7364, 3.38594, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66333, 190691, 609, 0, 0, 1, 2, 1961.3948, -5841.2725, 100.61539, 4.729844, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66337, 190691, 609, 0, 0, 1, 2, 1976.885, -5839.7812, 100.62573, 5.742135, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66350, 190691, 609, 0, 0, 1, 2, 1974.1791, -5808.8125, 101.05456, 3.9793549, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66386, 190691, 609, 0, 0, 1, 2, 1985.0178, -5824.089, 100.68411, 0.7155849, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66387, 190691, 609, 0, 0, 1, 2, 1986.0759, -5871.829, 100.72707, 1.2217293, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66388, 190691, 609, 0, 0, 1, 2, 1945.2169, -5809.99, 100.691086, 3.0966272, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66390, 190691, 609, 0, 0, 1, 2, 2063.1917, -5895.5386, 104.93898, 3.6205218, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66391, 190691, 609, 0, 0, 1, 2, 1978.1747, -5783.0503, 100.62018, 3.9401047, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66394, 190691, 609, 0, 0, 1, 2, 1960.6509, -5801.0396, 100.910286, 3.9401195, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66395, 190691, 609, 0, 0, 1, 2, 1986.6428, -5754.4897, 100.53683, 3.8135912, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66398, 190691, 609, 0, 0, 1, 2, 1953.3904, -5808.4883, 101.01305, 3.9396384, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66399, 190691, 609, 0, 0, 1, 2, 1946.0336, -5804.907, 100.59292, 3.3263502, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66400, 190691, 609, 0, 0, 1, 2, 2071.2483, -5763.3384, 99.87121, 2.6338243, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66402, 190691, 609, 0, 0, 1, 2, 2039.7643, -5906.7046, 105.286224, 3.0888205, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66416, 190691, 609, 0, 0, 1, 2, 1914.6744, -5834.2173, 100.37152, 1.3788092, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66417, 190691, 609, 0, 0, 1, 2, 1923.315, -5758.0312, 104.27794, 3.1205564, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66418, 190691, 609, 0, 0, 1, 2, 1899.3794, -5812.606, 100.99758, 3.3401446, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66419, 190691, 609, 0, 0, 1, 2, 1884.8516, -5835.8506, 101.27435, 2.6517444, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66433, 190691, 609, 0, 0, 1, 2, 1988.2023, -5905.0737, 103.40784, 3.1032207, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66434, 190691, 609, 0, 0, 1, 2, 1931.1116, -5911.1626, 101.47496, 3.736739, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66435, 190691, 609, 0, 0, 1, 2, 1901.2823, -5812.689, 100.86143, 4.4730635, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66459, 190691, 609, 0, 0, 1, 2, 1891.7834, -5822.647, 101.85674, 3.8966174, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66460, 190691, 609, 0, 0, 1, 2, 1965.7274, -5888.079, 102.252785, 4.5017023, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66461, 190691, 609, 0, 0, 1, 2, 1830.0138, -5818.806, 101.60298, 3.2022355, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66462, 190691, 609, 0, 0, 1, 2, 1861.3954, -5816.548, 100.18983, 3.21982, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66463, 190691, 609, 0, 0, 1, 2, 1862.0533, -5816.496, 100.23323, 3.21982, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66464, 190691, 609, 0, 0, 1, 2, 1830.64, -5924.63, 110.22774, 3.289136, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66465, 190691, 609, 0, 0, 1, 2, 1763.368, -5820.3086, 116.104294, 3.1376865, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66466, 190691, 609, 0, 0, 1, 2, 1771.0873, -5819.0786, 115.86837, 3.0985346, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66467, 190691, 609, 0, 0, 1, 2, 1765.3804, -5818.8335, 116.053604, 3.0986233, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66468, 190691, 609, 0, 0, 1, 2, 1805.0223, -5819.572, 108.09984, 3.151552, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66469, 190691, 609, 0, 0, 1, 2, 1799.2496, -5933.987, 115.95625, 3.4376955, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66470, 190691, 609, 0, 0, 1, 2, 1769.0741, -5931.673, 116.12647, 3.7480195, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66474, 190691, 609, 0, 0, 1, 2, 1755.3187, -5914.201, 116.09173, 2.6930852, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66477, 190691, 609, 0, 0, 1, 2, 1762.1227, -5817.0615, 116.05869, 3.156972, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66478, 190691, 609, 0, 0, 1, 2, 1756.3352, -5918.8296, 116.11929, 2.8022978, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66479, 190691, 609, 0, 0, 1, 2, 1671.5592, -5832.219, 116.33441, 1.8693184, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66484, 190691, 609, 0, 0, 1, 2, 1670.8466, -5829.9033, 116.656975, 1.8693184, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66491, 190691, 609, 0, 0, 1, 2, 1670.9194, -5830.1406, 116.62397, 1.8693184, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66499, 190691, 609, 0, 0, 1, 2, 1686.0815, -5851.0234, 116.54051, 1.9317135, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66505, 190691, 609, 0, 0, 1, 2, 1799.1763, -5819.629, 109.430016, 3.151552, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66509, 190691, 609, 0, 0, 1, 2, 1621.61, -5777.791, 116.11258, 2.9898148, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66516, 190691, 609, 0, 0, 1, 2, 1686.0815, -5851.0234, 116.54051, 1.9317135, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66518, 190691, 609, 0, 0, 1, 2, 1895.4905, -5819.1587, 101.21664, 3.8966174, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66520, 190691, 609, 0, 0, 1, 2, 1988.2023, -5905.0737, 103.40784, 3.1032207, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66521, 190691, 609, 0, 0, 1, 2, 2053.2026, -5842.8286, 101.24179, 3.2728686, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66600, 190691, 609, 0, 0, 1, 2, 1872.2634, -5874.153, 103.00137, 4.8772182, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66601, 190691, 609, 0, 0, 1, 2, 1940.7761, -5760.287, 103.94605, 3.3662097, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66602, 190691, 609, 0, 0, 1, 2, 1909.5654, -5778.5405, 101.86263, 4.4749866, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66603, 190691, 609, 0, 0, 1, 2, 2014.339, -5845.0737, 100.55747, 3.077108, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66604, 190691, 609, 0, 0, 1, 2, 1914.3354, -5768.8657, 103.23533, 3.4553163, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66605, 190691, 609, 0, 0, 1, 2, 1977.5481, -5783.6934, 100.627785, 3.9401047, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66606, 190691, 609, 0, 0, 1, 2, 1782.5889, -5819.573, 113.970634, 3.0985346, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66607, 190691, 609, 0, 0, 1, 2, 1757.7054, -5818.5005, 116.115585, 3.0980937, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66608, 190691, 609, 0, 0, 1, 2, 1665.2799, -5811.8164, 116.37822, 1.8693665, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66609, 190691, 609, 0, 0, 1, 2, 1575.1832, -5725.3354, 120.891266, 3.5115445, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66610, 190691, 609, 0, 0, 1, 2, 1756.3352, -5918.8296, 116.11929, 2.8022978, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66636, 190691, 609, 0, 0, 1, 2, 1770.0385, -5931.004, 116.12563, 3.7480195, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66637, 190691, 609, 0, 0, 1, 2, 1695.5388, -5833.481, 116.13345, 3.605054, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66638, 190691, 609, 0, 0, 1, 2, 1871.0338, -5866.7603, 103.05682, 4.8772182, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66674, 190691, 609, 0, 0, 1, 2, 1890.5739, -5910.3853, 102.459816, 3.1498792, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66675, 190691, 609, 0, 0, 1, 2, 1846.8546, -5821.57, 100.19991, 2.898973, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66676, 190691, 609, 0, 0, 1, 2, 1898.5533, -5816.2764, 100.98018, 3.896659, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66677, 190691, 609, 0, 0, 1, 2, 2080.05, -5886.793, 104.1466, 3.611832, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66680, 190691, 609, 0, 0, 1, 2, 2096.4055, -5878.481, 103.70926, 3.611791, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66690, 190691, 609, 0, 0, 1, 2, 2008.9229, -5756.7974, 100.806335, 3.0024395, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66692, 190691, 609, 0, 0, 1, 2, 1913.4982, -5771.6924, 102.54244, 4.4242997, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66694, 190691, 609, 0, 0, 1, 2, 2066.1157, -5894.036, 104.78343, 3.62098, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66707, 190691, 609, 0, 0, 1, 2, 1819.651, -5817.104, 104.0777, 3.1086764, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66714, 190691, 609, 0, 0, 1, 2, 1819.8297, -5819.427, 103.93707, 3.151928, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66716, 190691, 609, 0, 0, 1, 2, 1791.1454, -5930.194, 116.10103, 2.9340632, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66718, 190691, 609, 0, 0, 1, 2, 1756.3352, -5918.8296, 116.11929, 2.8022978, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66719, 190691, 609, 0, 0, 1, 2, 1766.993, -5933.116, 116.12829, 3.7480195, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66720, 190691, 609, 0, 0, 1, 2, 1755.1458, -5818.4126, 116.12125, 3.4063463, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66721, 190691, 609, 0, 0, 1, 2, 1746.2467, -5817.258, 116.121925, 0.3406124, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66722, 190691, 609, 0, 0, 1, 2, 1870.158, -5861.495, 103.20275, 4.8772182, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66723, 190691, 609, 0, 0, 1, 2, 1892.2543, -5839.8213, 101.16684, 2.6779408, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL),
(66724, 190691, 609, 0, 0, 1, 2, 1764.6449, -5934.745, 116.13034, 3.7480066, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL);
-- Create group
DELETE FROM `pool_template` WHERE (`entry` IN (22384));
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
(22384, 50, 'Saronite Arrows (Phase 2)');
DELETE FROM `pool_gameobject` WHERE (`pool_entry` IN (22384));
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
(66234, 22384, 0, 'Saronite Arrow (190691)'),
(66236, 22384, 0, 'Saronite Arrow (190691)'),
(66237, 22384, 0, 'Saronite Arrow (190691)'),
(66238, 22384, 0, 'Saronite Arrow (190691)'),
(66239, 22384, 0, 'Saronite Arrow (190691)'),
(66240, 22384, 0, 'Saronite Arrow (190691)'),
(66241, 22384, 0, 'Saronite Arrow (190691)'),
(66242, 22384, 0, 'Saronite Arrow (190691)'),
(66243, 22384, 0, 'Saronite Arrow (190691)'),
(66244, 22384, 0, 'Saronite Arrow (190691)'),
(66256, 22384, 0, 'Saronite Arrow (190691)'),
(66257, 22384, 0, 'Saronite Arrow (190691)'),
(66314, 22384, 0, 'Saronite Arrow (190691)'),
(66320, 22384, 0, 'Saronite Arrow (190691)'),
(66327, 22384, 0, 'Saronite Arrow (190691)'),
(66333, 22384, 0, 'Saronite Arrow (190691)'),
(66337, 22384, 0, 'Saronite Arrow (190691)'),
(66350, 22384, 0, 'Saronite Arrow (190691)'),
(66386, 22384, 0, 'Saronite Arrow (190691)'),
(66387, 22384, 0, 'Saronite Arrow (190691)'),
(66388, 22384, 0, 'Saronite Arrow (190691)'),
(66390, 22384, 0, 'Saronite Arrow (190691)'),
(66391, 22384, 0, 'Saronite Arrow (190691)'),
(66394, 22384, 0, 'Saronite Arrow (190691)'),
(66395, 22384, 0, 'Saronite Arrow (190691)'),
(66398, 22384, 0, 'Saronite Arrow (190691)'),
(66399, 22384, 0, 'Saronite Arrow (190691)'),
(66400, 22384, 0, 'Saronite Arrow (190691)'),
(66402, 22384, 0, 'Saronite Arrow (190691)'),
(66416, 22384, 0, 'Saronite Arrow (190691)'),
(66417, 22384, 0, 'Saronite Arrow (190691)'),
(66418, 22384, 0, 'Saronite Arrow (190691)'),
(66419, 22384, 0, 'Saronite Arrow (190691)'),
(66433, 22384, 0, 'Saronite Arrow (190691)'),
(66434, 22384, 0, 'Saronite Arrow (190691)'),
(66435, 22384, 0, 'Saronite Arrow (190691)'),
(66459, 22384, 0, 'Saronite Arrow (190691)'),
(66460, 22384, 0, 'Saronite Arrow (190691)'),
(66461, 22384, 0, 'Saronite Arrow (190691)'),
(66462, 22384, 0, 'Saronite Arrow (190691)'),
(66463, 22384, 0, 'Saronite Arrow (190691)'),
(66464, 22384, 0, 'Saronite Arrow (190691)'),
(66465, 22384, 0, 'Saronite Arrow (190691)'),
(66466, 22384, 0, 'Saronite Arrow (190691)'),
(66467, 22384, 0, 'Saronite Arrow (190691)'),
(66468, 22384, 0, 'Saronite Arrow (190691)'),
(66469, 22384, 0, 'Saronite Arrow (190691)'),
(66470, 22384, 0, 'Saronite Arrow (190691)'),
(66474, 22384, 0, 'Saronite Arrow (190691)'),
(66477, 22384, 0, 'Saronite Arrow (190691)'),
(66478, 22384, 0, 'Saronite Arrow (190691)'),
(66479, 22384, 0, 'Saronite Arrow (190691)'),
(66484, 22384, 0, 'Saronite Arrow (190691)'),
(66491, 22384, 0, 'Saronite Arrow (190691)'),
(66499, 22384, 0, 'Saronite Arrow (190691)'),
(66505, 22384, 0, 'Saronite Arrow (190691)'),
(66509, 22384, 0, 'Saronite Arrow (190691)'),
(66516, 22384, 0, 'Saronite Arrow (190691)'),
(66518, 22384, 0, 'Saronite Arrow (190691)'),
(66520, 22384, 0, 'Saronite Arrow (190691)'),
(66521, 22384, 0, 'Saronite Arrow (190691)'),
(66600, 22384, 0, 'Saronite Arrow (190691)'),
(66601, 22384, 0, 'Saronite Arrow (190691)'),
(66602, 22384, 0, 'Saronite Arrow (190691)'),
(66603, 22384, 0, 'Saronite Arrow (190691)'),
(66604, 22384, 0, 'Saronite Arrow (190691)'),
(66605, 22384, 0, 'Saronite Arrow (190691)'),
(66606, 22384, 0, 'Saronite Arrow (190691)'),
(66607, 22384, 0, 'Saronite Arrow (190691)'),
(66608, 22384, 0, 'Saronite Arrow (190691)'),
(66609, 22384, 0, 'Saronite Arrow (190691)'),
(66610, 22384, 0, 'Saronite Arrow (190691)'),
(66636, 22384, 0, 'Saronite Arrow (190691)'),
(66637, 22384, 0, 'Saronite Arrow (190691)'),
(66638, 22384, 0, 'Saronite Arrow (190691)'),
(66674, 22384, 0, 'Saronite Arrow (190691)'),
(66675, 22384, 0, 'Saronite Arrow (190691)'),
(66676, 22384, 0, 'Saronite Arrow (190691)'),
(66677, 22384, 0, 'Saronite Arrow (190691)'),
(66680, 22384, 0, 'Saronite Arrow (190691)'),
(66690, 22384, 0, 'Saronite Arrow (190691)'),
(66692, 22384, 0, 'Saronite Arrow (190691)'),
(66694, 22384, 0, 'Saronite Arrow (190691)'),
(66707, 22384, 0, 'Saronite Arrow (190691)'),
(66714, 22384, 0, 'Saronite Arrow (190691)'),
(66716, 22384, 0, 'Saronite Arrow (190691)'),
(66718, 22384, 0, 'Saronite Arrow (190691)'),
(66719, 22384, 0, 'Saronite Arrow (190691)'),
(66720, 22384, 0, 'Saronite Arrow (190691)'),
(66721, 22384, 0, 'Saronite Arrow (190691)'),
(66722, 22384, 0, 'Saronite Arrow (190691)'),
(66723, 22384, 0, 'Saronite Arrow (190691)'),
(66724, 22384, 0, 'Saronite Arrow (190691)');
@@ -0,0 +1,5 @@
-- DB update 2024_12_20_02 -> 2024_12_22_00
-- Remove Black Pearl Item from all creature loot tables.
DELETE FROM `creature_loot_template` WHERE (`Entry` IN (6347, 6348, 6349, 6350, 6351, 6352, 6369, 6370, 6371, 6372, 6649, 7246, 7864, 7885, 7886, 7977, 8136, 8408, 8716, 8761, 8905, 11741, 11783, 11793, 12207, 12397, 13599, 13896, 14123, 14446, 14638, 14639, 15206, 504, 595, 747, 750, 751, 752, 922, 950, 979, 1729, 1791, 1809, 1907, 2043, 2255, 2408, 2505, 2544, 2574, 2583, 2659, 2680, 2701, 2715, 2718, 2791, 2793, 2817, 2926, 3715, 4096, 4374, 4467, 4648, 4663, 4687, 5232, 5238, 5268, 5269, 5286, 5307, 5308, 5328, 5331, 5332, 5333, 5334, 5335, 5336, 5337, 5343, 5423, 5431, 5432, 5461, 5462, 5466, 5615, 5616, 5618, 5623, 5843, 5856, 5974, 6116, 6117, 6135, 6136, 6137, 6138, 6140, 6143, 6144, 6147, 6190, 6193, 6194, 6195, 6196, 6199, 6202)) AND (`Item` IN (7971));
@@ -0,0 +1,4 @@
-- DB update 2024_12_22_00 -> 2024_12_22_01
--
DELETE FROM `command` where `name` = 'reload game_event_npc_vendor';
INSERT INTO `command` (`name`, `security`, `help`) VALUES ('reload game_event_npc_vendor', 3, 'Syntax: .reload game_event_npc_vendor\r Reload game_event_npc_vendor table.');
@@ -0,0 +1,5 @@
-- DB update 2024_12_22_01 -> 2024_12_22_02
--
DELETE FROM `quest_request_items_locale` WHERE `CompletionText` = '';
DELETE FROM `quest_request_items_locale` WHERE `CompletionText` = 'NULL';
DELETE FROM `quest_request_items_locale` WHERE `CompletionText` IS NULL;
+149
View File
@@ -0,0 +1,149 @@
-- DB update 2024_12_22_02 -> 2024_12_24_00
-- Remove unofficial DBGuids and adds official spawn points (Sniffed Values)
DELETE FROM `gameobject` WHERE (`id` = 190691) AND (`guid` IN (66111, 66112, 66113, 66114, 66115, 66116, 66117, 66118, 66119, 66120, 66121, 66122, 66123, 66124, 66125, 66127, 66128, 66129, 66130, 66131, 66132, 66133, 66134, 66135, 66136, 66137, 66138, 66139, 66140, 66141, 66143, 66144, 66145, 66146, 66147, 66148, 66149, 66150, 66151, 66152, 66153, 66154, 66155, 66156, 66157, 66158, 66159, 66160, 66161, 66162, 66163, 66164, 66165, 66166, 66167, 66168, 66169, 66170, 66171, 66172, 66173, 66174, 66175, 66176, 66177, 66178, 66179, 66180, 66181, 66182, 66183, 66184, 66185, 66186, 66187, 66188, 66189, 66190, 66192, 66193, 66194, 66195, 66196, 66197, 66198, 66199, 66200, 66201, 66202, 66203, 66204, 66205, 66206, 66207, 66208, 66209, 66210, 66211, 66212, 66213, 66214, 66215, 66216, 66217, 66219, 66220, 66221, 66222, 66223, 66224, 66225, 66226, 66227, 66228, 66229, 66231, 66232, 66233));
INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES
(66111, 190691, 609, 0, 0, 1, 1, 2220.6106 , -5782.374 , 101.817215, 4.8694706, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66112, 190691, 609, 0, 0, 1, 1, 2185.355 , -5919.15 , 101.08694, 4.258607, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66113, 190691, 609, 0, 0, 1, 1, 1996.4088 , -5842.396 , 100.7364, 3.38594, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66114, 190691, 609, 0, 0, 1, 1, 1976.885 , -5839.7812 , 100.62573, 5.742135, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66115, 190691, 609, 0, 0, 1, 1, 1968.5273 , -5861.3496 , 100.64732, 2.2863789, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66116, 190691, 609, 0, 0, 1, 1, 2069.852 , -5841.052 , 102.76751, 3.1316335, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66117, 190691, 609, 0, 0, 1, 1, 2084.4976 , -5841.195 , 103.562, 3.1316335, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66118, 190691, 609, 0, 0, 1, 1, 1985.0178 , -5824.089 , 100.68411, 0.7155849, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66119, 190691, 609, 0, 0, 1, 1, 1961.3948 , -5841.2725 , 100.61539, 4.729844, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66120, 190691, 609, 0, 0, 1, 1, 1940.5985 , -5824.901 , 100.47675, 3.0543265, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66121, 190691, 609, 0, 0, 1, 1, 2056.4412 , -5846.3066 , 102.025215, 3.3863468, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66122, 190691, 609, 0, 0, 1, 1, 1958.8038 , -5809.7144 , 101.13848, 0.15707901, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66123, 190691, 609, 0, 0, 1, 1, 1974.2313 , -5786.4897 , 100.59507, 4.729844, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66124, 190691, 609, 0, 0, 1, 1, 1914.6744 , -5834.2173 , 100.37152, 1.3788092, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66125, 190691, 609, 0, 0, 1, 1, 2038.3315 , -5844.796 , 100.440384, 3.2734783, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66127, 190691, 609, 0, 0, 1, 1, 1997.3458 , -5844.343 , 100.75951, 3.1083305, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66128, 190691, 609, 0, 0, 1, 1, 1983.5228 , -5844.791 , 100.61369, 3.1415927, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66129, 190691, 609, 0, 0, 1, 1, 1933.4218 , -5762.193 , 104.0975, 3.2935214, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66130, 190691, 609, 0, 0, 1, 1, 1941.1277 , -5848.868 , 100.69379, 3.2374845, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66131, 190691, 609, 0, 0, 1, 1, 1905.713 , -5794.4614 , 101.17828, 4.4749866, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66132, 190691, 609, 0, 0, 1, 1, 1907.3081 , -5787.869 , 101.329254, 4.4749866, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66133, 190691, 609, 0, 0, 1, 1, 2027.9718 , -5757.5527 , 99.55013, 3.1865582, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66134, 190691, 609, 0, 0, 1, 1, 2027.9955 , -5751.978 , 99.075264, 3.039869, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66135, 190691, 609, 0, 0, 1, 1, 1989.4558 , -5754.071 , 100.958626, 3.0024395, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66136, 190691, 609, 0, 0, 1, 1, 1990.212 , -5751.9937 , 101.19646, 3.2041564, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66137, 190691, 609, 0, 0, 1, 1, 1992.3824 , -5784.0103 , 100.81239, 2.879789, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66138, 190691, 609, 0, 0, 1, 1, 2030.5973 , -5803.4043 , 100.4455, 4.8171096, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66139, 190691, 609, 0, 0, 1, 1, 1969.8164 , -5771.3735 , 100.47984, 1.7104216, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66140, 190691, 609, 0, 0, 1, 1, 2020.5231 , -5821.436 , 100.91554, 6.021387, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66141, 190691, 609, 0, 0, 1, 1, 2044.3993 , -5821.7314 , 100.85934, 1.4137151, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66143, 190691, 609, 0, 0, 1, 1, 1983.0048 , -5754.5845 , 99.77161, 3.2926145, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66144, 190691, 609, 0, 0, 1, 1, 2037.0658 , -5836.382 , 100.4912, 4.6425757, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66145, 190691, 609, 0, 0, 1, 1, 1986.0759 , -5871.829 , 100.72707, 1.2217293, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66146, 190691, 609, 0, 0, 1, 1, 1910.2681 , -5775.6367 , 102.14683, 4.4749866, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66147, 190691, 609, 0, 0, 1, 1, 1866.2843 , -5815.2437 , 100.51541, 3.2630513, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66148, 190691, 609, 0, 0, 1, 1, 1847.6194 , -5817.658 , 100.18135, 3.2224116, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66149, 190691, 609, 0, 0, 1, 1, 1825.1155 , -5817.2334 , 102.60431, 3.122061, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66150, 190691, 609, 0, 0, 1, 1, 1899.42, -5812.5977 , 100.99523, 3.3401446, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66151, 190691, 609, 0, 0, 1, 1, 1910.2681 , -5775.6367 , 102.14683, 4.4749866, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66152, 190691, 609, 0, 0, 1, 1, 1898.6533 , -5816.182 , 100.97481, 3.896659, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66153, 190691, 609, 0, 0, 1, 1, 1848.2504 , -5817.519 , 100.10902, 3.2374845, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66154, 190691, 609, 0, 0, 1, 1, 1963.5308 , -5798.0835 , 100.797935, 3.9401047, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66155, 190691, 609, 0, 0, 1, 1, 1932.7786 , -5806.3887 , 100.229904, 3.3866591, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66156, 190691, 609, 0, 0, 1, 1, 1813.3654 , -5817.226 , 105.75475, 3.1611245, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66157, 190691, 609, 0, 0, 1, 1, 2004.6646 , -5868.23 , 100.55443, 1.4660758, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66158, 190691, 609, 0, 0, 1, 1, 1893.9923 , -5910.102 , 102.065056, 3.1533117, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66159, 190691, 609, 0, 0, 1, 1, 1876.4713 , -5831.3823 , 101.15165, 2.6517444, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66160, 190691, 609, 0, 0, 1, 1, 2001.4006 , -5893.5283 , 101.45092, 1.7104216, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66161, 190691, 609, 0, 0, 1, 1, 1871.0381 , -5893.766 , 103.65555, 4.602811, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66162, 190691, 609, 0, 0, 1, 1, 1898.1274 , -5910.0537 , 101.89299, 3.1533117, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66163, 190691, 609, 0, 0, 1, 1, 1961.3948 , -5841.2725 , 100.61539, 4.729844, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66164, 190691, 609, 0, 0, 1, 1, 1851.5007 , -5907.953 , 104.657585, 3.769677, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66165, 190691, 609, 0, 0, 1, 1, 1921.0793 , -5907.0405 , 101.39488, 3.2276707, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66166, 190691, 609, 0, 0, 1, 1, 1866.1934 , -5826.356 , 100.42924, 2.898847, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66167, 190691, 609, 0, 0, 1, 1, 1801.4369 , -5932.352 , 115.83392, 2.934986, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66168, 190691, 609, 0, 0, 1, 1, 1841.6619 , -5818.099 , 100.35402, 3.2022355, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66169, 190691, 609, 0, 0, 1, 1, 1825.5342 , -5817.69 , 102.587555, 3.1161263, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66170, 190691, 609, 0, 0, 1, 1, 1820.4022 , -5926.401 , 112.87562, 3.3083558, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66171, 190691, 609, 0, 0, 1, 1, 1780.7356 , -5924.469 , 116.04771, 2.7775676, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66172, 190691, 609, 0, 0, 1, 1, 1734.1923 , -5904.1626 , 116.12229, 2.6980093, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66173, 190691, 609, 0, 0, 1, 1, 1717.5593 , -5895.232 , 116.131546, 2.5371814, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66174, 190691, 609, 0, 0, 1, 1, 1768.0194 , -5817.4536 , 116.0124, 3.1376865, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66175, 190691, 609, 0, 0, 1, 1, 1775.1846 , -5819.255 , 115.437355, 3.0985346, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66176, 190691, 609, 0, 0, 1, 1, 1646.7789 , -5849.391 , 117.284134, 4.5374284, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66177, 190691, 609, 0, 0, 1, 1, 1749.0945 , -5807.3667 , 117.10514, 2.274793, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66178, 190691, 609, 0, 0, 1, 1, 1717.2809 , -5831.0967 , 116.13906, 3.3866591, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66179, 190691, 609, 0, 0, 1, 1, 1678.9017 , -5833.643 , 116.258026, 2.9541461, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66180, 190691, 609, 0, 0, 1, 1, 1695.6592 , -5877.316 , 116.16627, 1.9197153, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL),
(66181, 190691, 609, 0, 0, 1, 1, 1691.6239 , -5878.599 , 116.16513, 2.6345763, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL);
-- Setup object groups
DELETE FROM `pool_template` WHERE (`entry` IN (22385));
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
(22385, 40, 'Saronite Arrows (Phase 1)');
DELETE FROM `pool_gameobject` WHERE (`pool_entry` IN (22385));
INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES
(66111, 22385, 0, 'Saronite Arrow (190691)'),
(66112, 22385, 0, 'Saronite Arrow (190691)'),
(66113, 22385, 0, 'Saronite Arrow (190691)'),
(66114, 22385, 0, 'Saronite Arrow (190691)'),
(66115, 22385, 0, 'Saronite Arrow (190691)'),
(66116, 22385, 0, 'Saronite Arrow (190691)'),
(66117, 22385, 0, 'Saronite Arrow (190691)'),
(66118, 22385, 0, 'Saronite Arrow (190691)'),
(66119, 22385, 0, 'Saronite Arrow (190691)'),
(66120, 22385, 0, 'Saronite Arrow (190691)'),
(66121, 22385, 0, 'Saronite Arrow (190691)'),
(66122, 22385, 0, 'Saronite Arrow (190691)'),
(66123, 22385, 0, 'Saronite Arrow (190691)'),
(66124, 22385, 0, 'Saronite Arrow (190691)'),
(66125, 22385, 0, 'Saronite Arrow (190691)'),
(66127, 22385, 0, 'Saronite Arrow (190691)'),
(66128, 22385, 0, 'Saronite Arrow (190691)'),
(66129, 22385, 0, 'Saronite Arrow (190691)'),
(66130, 22385, 0, 'Saronite Arrow (190691)'),
(66131, 22385, 0, 'Saronite Arrow (190691)'),
(66132, 22385, 0, 'Saronite Arrow (190691)'),
(66133, 22385, 0, 'Saronite Arrow (190691)'),
(66134, 22385, 0, 'Saronite Arrow (190691)'),
(66135, 22385, 0, 'Saronite Arrow (190691)'),
(66136, 22385, 0, 'Saronite Arrow (190691)'),
(66137, 22385, 0, 'Saronite Arrow (190691)'),
(66138, 22385, 0, 'Saronite Arrow (190691)'),
(66139, 22385, 0, 'Saronite Arrow (190691)'),
(66140, 22385, 0, 'Saronite Arrow (190691)'),
(66141, 22385, 0, 'Saronite Arrow (190691)'),
(66143, 22385, 0, 'Saronite Arrow (190691)'),
(66144, 22385, 0, 'Saronite Arrow (190691)'),
(66145, 22385, 0, 'Saronite Arrow (190691)'),
(66146, 22385, 0, 'Saronite Arrow (190691)'),
(66147, 22385, 0, 'Saronite Arrow (190691)'),
(66148, 22385, 0, 'Saronite Arrow (190691)'),
(66149, 22385, 0, 'Saronite Arrow (190691)'),
(66150, 22385, 0, 'Saronite Arrow (190691)'),
(66151, 22385, 0, 'Saronite Arrow (190691)'),
(66152, 22385, 0, 'Saronite Arrow (190691)'),
(66153, 22385, 0, 'Saronite Arrow (190691)'),
(66154, 22385, 0, 'Saronite Arrow (190691)'),
(66155, 22385, 0, 'Saronite Arrow (190691)'),
(66156, 22385, 0, 'Saronite Arrow (190691)'),
(66157, 22385, 0, 'Saronite Arrow (190691)'),
(66158, 22385, 0, 'Saronite Arrow (190691)'),
(66159, 22385, 0, 'Saronite Arrow (190691)'),
(66160, 22385, 0, 'Saronite Arrow (190691)'),
(66161, 22385, 0, 'Saronite Arrow (190691)'),
(66162, 22385, 0, 'Saronite Arrow (190691)'),
(66163, 22385, 0, 'Saronite Arrow (190691)'),
(66164, 22385, 0, 'Saronite Arrow (190691)'),
(66165, 22385, 0, 'Saronite Arrow (190691)'),
(66166, 22385, 0, 'Saronite Arrow (190691)'),
(66167, 22385, 0, 'Saronite Arrow (190691)'),
(66168, 22385, 0, 'Saronite Arrow (190691)'),
(66169, 22385, 0, 'Saronite Arrow (190691)'),
(66170, 22385, 0, 'Saronite Arrow (190691)'),
(66171, 22385, 0, 'Saronite Arrow (190691)'),
(66172, 22385, 0, 'Saronite Arrow (190691)'),
(66173, 22385, 0, 'Saronite Arrow (190691)'),
(66174, 22385, 0, 'Saronite Arrow (190691)'),
(66175, 22385, 0, 'Saronite Arrow (190691)'),
(66176, 22385, 0, 'Saronite Arrow (190691)'),
(66177, 22385, 0, 'Saronite Arrow (190691)'),
(66178, 22385, 0, 'Saronite Arrow (190691)'),
(66179, 22385, 0, 'Saronite Arrow (190691)'),
(66180, 22385, 0, 'Saronite Arrow (190691)'),
(66181, 22385, 0, 'Saronite Arrow (190691)');
@@ -0,0 +1,21 @@
-- DB update 2024_12_24_00 -> 2024_12_25_00
DELETE FROM `page_text_locale` WHERE `ID` IN (74, 77, 81, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2450, 2455, 2460, 2463, 2464, 2466, 2467) AND `locale` = 'deDE';
INSERT INTO `page_text_locale` (`ID`, `locale`, `Text`, `VerifiedBuild`) VALUES
(74,'deDE','TAG 1:$B$BDer Lehrling und ich sind heute im Eisklammtal angekommen. Die Reise durch die Höhle verlief ohne besondere Vorkommnisse. Wir schlugen unser Lager in sicherer Entfernung von der Höhle auf, in der sich die Trolle eingenistet haben sollen.$B$BTAG 2:$B$BDas verdammte Wolfsgeheul ließ mich fast die ganze Nacht kein Auge zutun.$B$BIn ein paar Tagen werde ich wohl neue Kleider aus Wolfsbalg haben.$B$BDer Bursche hat sich heute ausgerechnet mit einem Trogg eingelassen. Es kam zum Kampf und',0),
(77,'deDE','TAG 1: Der Lehrling und ich sind heute im Eisklammtal angekommen. Die Reise durch die Höhle verlief ohne besondere Vorkommnisse. Wir schlugen unser Lager in sicherer Entfernung von der Höhle auf, in der sich die Trolle eingenistet haben sollen. TAG 2: Das verdammte Wolfsgeheul ließ mich fast die ganze Nacht kein Auge zutun. In ein paar Tagen werde ich wohl neue Kleider aus Wolfsbalg haben. Der Bursche hat sich heute ausgerechnet mit einem Trogg eingelassen. Es kam zum Kampf und',0),
(81,'deDE','behielt tatsächlich die Oberhand gegen den hässlichen Kerl, aber dafür hat er jetzt auch eine unangenehme Verletzung am Arm. Also muss ich wohl in den nächsten Tagen die lästigen Pflichten erledigen.$B$BTAG 3:$B$BKalt. Um die Mittagszeit schneite es ein wenig.$B$BTAG 4:$B$BDer Bursche kam gut gelaunt zurück und wir haben uns die Trolle mal genauer angesehen. Nach den Zeichen auf ihrer Haut und dem Plunder an Schmuck zu urteilen, den sie an sich trugen, würde ich sagen: Frostmähnen.',0),
(2436,'deDE','Vergesst meine Worte nicht, $N. Dies ist die Zeit der Unterdrückung und Täuschung... selbst in unserer großartigen Unterstadt. Jeder, der loyal zu Sylvanas steht, arbeitet an der Schaffung einer neuen, von den Verlassenen bestimmten, Ära. Und obgleich wir über keine magischen Fertigkeiten verfügen und keine Waffen an unseren Grenzen postieren, haben wir unsere eigenen Rolle in diesem Spiel.$B$BSucht mich im Gasthaus von Todesend auf. Dort werden wir weiterreden.$B$B- David Trias, Schurkenlehrer',0),
(2437,'deDE','Sael\'ah. Ich hoffe, dieses Siegelzeichen erreicht Euch bei guter Gesundheit. Ich wurde gebeten, Euch meine Dienste anzubieten. Auch ich befinde mich im Laubschattental, in dem großen Baum von Aldrassil, und wollte Euch wissen lassen, dass Ihr, wenn Ihr irgendeine Ausbildung braucht, jederzeit zu mir kommen könnt.$B$BIn diesen unsicheren Zeiten halte ich es für klug, dass sich alle, die sich der Verstohlenheit bedienen, noch enger zusammenschließen. Wie sollten wir sonst Teldrassil und unsere Art des Lebens beschützen können?$B$BSucht mich auf, wenn Ihr könnt.$B$B- Frahun Schattenflüsterer, Schurkenlehrerin',0),
(2438,'deDE','Seid gegrüßt, $GBruder:Schwester;. Die Zerschmetterte Hand sendet Grüße und hofft, dass das Tal ein geeigneter Ort für die Ausübung Eures Handwerks sein wird. Dies ist eine Zeit der Prüfung für Euch, denkt also nicht, dass Ihr nicht ständig überwacht würdet.$B$BEs ist meine Pflicht, für die Hand Eure Fertigkeiten zu bewerten und sie darüber zu informieren, wenn Ihr für größere Herausforderungen bereit seid.$B$BWenn Ihr so weit seid, findet Ihr mich tief im Höhlenbau. Ich werde Euch dort erwarten.$B$B- Rwag, Schurkenlehrer',0),
(2439,'deDE','Sagt mir, $C, habt Ihr jemals einen Orc schreien gehört? Oder vielleicht Euer Zuhause vor Gnollen geschützt, die Euch an die Kehle wollen? Ja, das klingt brutal, nicht wahr?$B$BTja, Ihr werdet meine Hilfe brauchen wenn Ihr Eure Lieben schützen wollt. Ihr findet mich in der Abtei von Nordhain. Mein Wissen ist nicht billig, wenn Ihr jedoch erfahren genug seid, kann ich Euch ein ganze Reihe von Kampfarten und Bewegungen beibringen, die Euch helfen werden, Gefahren von Sturmwind und Umgebung abzuwenden.$B$B- Llane Beshere, Kriegerlehrer',0),
(2440,'deDE','ACHTUNG:$BIhr habt Euch umgehend bei Thran Khorman zu melden. Er hält sich im Gebäude A3 auf: den Bewohnern auch unter dem Namen Ambossar bekannt. Nachdem Ihr Euch bei Khorman gemeldet habt, werdet Ihr Euch für den kommenden Krieg bereit machen - den Krieg, mit dem wir unsere Heimat Gnomeregan zurückerobern werden!$B$BAlle Anstrengungen und wichtigen Aufgaben müssen auf das Erreichen dieser Direktive konzentriert sein. Habt Ihr diese erfüllt, wird Euch eine neue Aufgabe zugewiesen.',0),
(2441,'deDE','Viele Stämme behaupten, es sei eine Gabe, Magie wirken oder mit unseren Vorfahren sprechen zu können, Ihr sollt jedoch wissen, $C, dass auch Ihr begabt seid. Einige haben nicht die Kraft in den Armen, mächtige Waffen zu schwingen. Einige haben nicht die Fertigkeit, den Schlag eines Auftragsmörders zu parieren oder den körperlichen Angriffen eines arkanen Zauberers standzuhalten, Ihr jedoch schon. Ihr seid stark. Und ich werde Euch helfen, noch stärker zu werden. Ihr findet mich im Camp Narache.$B$B- Harutt Donnerhorn, Kriegerlehrer',0),
(2442,'deDE','Beim Barte Magnis, es gibt so viel zu bereden, $N, und wir haben nur so wenig Zeit! Sucht mich so schnell wie möglich in Ambossar über dem Eisklammtal auf. Wir müssen unverzüglich anfangen.$B$BEs gibt so viele Dinge, von denen ich Euch berichten kann, damit Ihr Euch eilt, aber mit denen haben wir nichts zu schaffen... jedenfalls im Moment. Worauf wir uns konzentrieren müssen, ist das Halten der Axt, das Gewicht unserer Rüstung und der Geruch unseres Schweißes, der uns im Kampf gegen unsere Feinde über die Stirn läuft. Damit beginnen wir.$B$B- Thran Khorman, Kriegerlehrer',0),
(2443,'deDE','Viele Eurer Art wenden sich dem Arkanen und Göttlichen zu, um so Kraft zu gewinnen, aber wir wissen es besser, nicht wahr, $C? Wir wissen, dass unsere heiligen Symbole unsere Waffen sind, unser Zauberbuch unser Schild und unsere Weisheit unser Panzer.$B$BSelbst im Untod sind wir stark und wir werden nur noch stärker.$B$BIhr findet mich im Gasthaus von Todesend. Dort werde ich mit Euch diese Angelegenheiten und weitere Dinge erörtern.$B$B- Dannal Stern, Kriegerlehrer',0),
(2450,'deDE','ACHTUNG:$B$BKein Wort! Seht Euch nicht um! Jemand könnte Euch jetzt gerade beobachten.$B$BIch heiße Alamar Grimm, $N. Ich unterweise diejenigen, die Wissen und größere Macht aus... den jenseitigen Welten suchen. Ich wurde gebeten, diskret mit Euch Kontakt aufzunehmen und Euch darüber zu informieren, dass ich Euch in einer echten Form der Magie weiterbilden kann.$B$BWenn Ihr könnt, sucht mich auf der Rückseite von Ambossar auf.$B$B- Alamar Grimm, Hexenmeisterlehrer',0),
(2455,'deDE','Zähmer der Wildtiere, meisterlicher Schütze, erprobter Fährtenleser... was wollt Ihr sonst noch in diesem Leben erreichen? Für all dies zusammen muss man äußerst intelligent und sehr geduldig sein.$B$BDer Weg des Jägers ist kein einfacher, so viel ist sicher. Ihr benötigt viel Übung, um auch nur so gut zu werden wie unser Scharfschütze im niedersten Rang. Aber dafür bin ich ja da.$B$BIhr findet mich in Ambossar über dem Eisklammtal. Ich werde Euch erwarten.$B$B- Thorgas Grimson, Jägerlehrer',0),
(2460,'deDE','Ich grüße Euch, $C. Der Wind flüsterte mir zu, dass Ihr kommen würdet. Die Erde pries Eure Kraft. Und jetzt künden die alten Geister von den Leistungen, die Ihr noch vollbringen werdet. Unser Volk kann weise und große Anführer brauchen. Für beide Eigenschaften wendet es sich häufig an uns. So Ihr dies wollt. Lehre ich Euch mehr von unseren Fertigkeiten.$B$BSucht mich im Camp Narache auf der Hochwolkenebene auf - dann werden wir weiterreden.$B$B- Meela Morgenwandler, Schamanenlehrerin',0),
(2463,'deDE','Ich hoffe, dieser Brief erreicht Euch bei guter Gesundheit, $C. Ich sage dies mit großem Stolz, da nicht viele so tiefen Glauben zeigen können, wisset jedoch auch, dass sie zu den Besten der Besten der Beschützer von Azeroth zählen.Vergesst niemals, Euer erster und wichtigster Gedanke sollte stets Eurer Pflicht gelten, die zu bekämpfen, die unserer Welt schaden und Verderbnis in unsere Häuser bringen wollen. Ich bin berechtigt, Euch zu unterweisen, zumindest vorläufig. Wenn Ihr bereit seid, findet Ihr mich in der Abtei von Nordhain. - Bruder Sammuel, Paladinlehrer',0),
(2464,'deDE','Einige fürchten unsere Art mehr als die Drachen. Einige beneiden uns mehr als selbst die begnadetsten Schmiede. Einige preisen unsere Stärke im Kampf. Andere Freuen sich an unserem Glauben. Einige sind einfach nur neidisch, dass wir sie unter den Tisch trinken können! Aber wisset dies, $C. Ihr seid unter den besten Beschützern von ganz Azeroth. Das Heilige Licht gibt uns so viel Kraft, wie wir es stärken.$B$BIch werde Euch mehr erzählen, wenn Ihr Euch ein wenig mit dem Land vertraut gemacht habt. Ihr findet mich in Ambossar, über dem Tal.$B$B- Bromos Grummler, Paladinlehrer',0),
(2466,'deDE','Das Heilige Licht wärmt unsere Rücken und jeden Tag werden neue Entdeckungen gemacht... dies ist eine aufregende Zeit für die Söhne von Eisenschmiede. Die Forscherliga macht große Fortschritte bei der Suche nach längst verlorenen Antworten auf noch ältere Fragen. Und jetzt können wir auch Euch zu unseren Getreuen zählen beim Kampf gegen die Troggs und alle anderen Bedrohungen unserer Grenzen.$B$BSucht mich auf, wenn Ihr die Zeit dazu findet. Ich bin auf der Rückseite von Ambossar zu finden, gleich den Hügel hoch.$B$B- Branstock Kahlder, Priesterlehrer',0),
(2467,'deDE','Fühlt Euch gesegnet, $N. dass Euer Geist nicht in die Nether-Welt gesogen wurde. Fühlt Euch umso mehr gesegnet, da ich entschieden habe, dass Ihr es wert seid, Empfänger dieser von mir verfassten Schriftrolle zu sein.$B$BDie Menschen, die Ihr einst kanntet und die Euch vielleicht sogar etwas bedeutet haben, sind nicht mehr! Ihr müsst lernen, damit für den Rest Eures jetzt unnatürlichen Lebens \"zu leben\". Ich schlage vor, dass Ihr zunächst lernt, damit klarzukommen.$B$BWenn Ihr meint, dass Ihr für die vor Euch liegenden Prüfungen bereit seid, sucht mich in der Kirche von Todesend auf.$B$B- Dunkler Kleriker Duesten, Priesterlehrer',0);
@@ -0,0 +1,3 @@
-- DB update 2024_12_25_00 -> 2024_12_26_00
-- Add interrupt immunity to Ashtongue Stormcaller
UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask` | 33554432 WHERE (`entry` = 22846);
@@ -0,0 +1,3 @@
-- DB update 2024_12_26_00 -> 2024_12_26_01
-- Add interrupt immunity to Illidari Nightlord
UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask` | 33554432 WHERE (`entry` = 22855);
@@ -0,0 +1,8 @@
-- DB update 2024_12_26_01 -> 2024_12_26_02
--
DELETE FROM `smart_scripts` WHERE (`source_type` = 1 AND `entryorguid` = 184568);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(184568, 1, 0, 1, 64, 0, 100, 1, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 205, 26, 2, 0, 0, 0, 0, 0, 0, 'Lady Vashj Bridge Console - On Gossip Hello - Activate Gameobject (No repeat)'),
(184568, 1, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 205, 27, 2, 0, 0, 0, 0, 0, 0, 'Lady Vashj Bridge Console - On Gossip Hello - Activate Gameobject (No repeat)'),
(184568, 1, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 205, 28, 2, 0, 0, 0, 0, 0, 0, 'Lady Vashj Bridge Console - On Gossip Hello - Activate Gameobject (No repeat)'),
(184568, 1, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 205, 29, 2, 0, 0, 0, 0, 0, 0, 'Lady Vashj Bridge Console - On Gossip Hello - Activate Gameobject (No repeat)');
@@ -0,0 +1,9 @@
-- DB update 2024_12_26_02 -> 2024_12_28_00
--
DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (70867, 70879, 70877, 71623, 70994);
INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`, `DifficultySpellID_3`, `DifficultySpellID_4`) VALUES
(70867, 70867, 71473, 71532, 71533),
(70879, 70879, 71525, 71530, 71531),
(70877, 70877, 71474, 70877, 71474),
(71623, 71623, 71624, 71625, 71626),
(70994, 70994, 71962, 71963, 71964);
@@ -0,0 +1,14 @@
-- DB update 2024_12_28_00 -> 2024_12_28_01
--
UPDATE `spell_dbc`
SET `Attributes`=`Attributes`|64, `AttributesEx4`=34603008, `ProcChance`=101, `DurationIndex`=21,
`Effect_1`=6, `Effect_2`=6, `Effect_3`=6, `EffectBasePoints_1`=-1, `EffectBasePoints_2`=-1, `EffectBasePoints_3`=-1,
`ImplicitTargetA_1`=1, `ImplicitTargetA_2`=1, `ImplicitTargetA_3`=1,
`EffectAura_1`=55, `EffectAura_2`=240, `EffectAura_3`=123,
`EffectMultipleValue_1`=1.0, `EffectMultipleValue_2`=1.0, `EffectMultipleValue_3`=1.0,
`EffectMiscValue_3`=124
WHERE `ID`=67561;
DELETE FROM `spell_script_names` WHERE `spell_id` IN (49040, 67561);
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(49040, 'spell_dk_army_of_the_dead_passive'),
(67561, 'spell_pet_spellhit_expertise_spellpen_scaling');
@@ -0,0 +1,24 @@
-- DB update 2024_12_28_01 -> 2024_12_28_02
--
-- Adds if missing SAI to Deadwood Warrior, Gardener and Pathfinder
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` in (7153, 7154, 7155);
-- Deadwood Warrior
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 7153);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(7153, 0, 0, 0, 0, 0, 100, 0, 4000, 11000, 12000, 15000, 0, 0, 11, 13583, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Warrior - In Combat - Cast \'Curse of the Deadwood\''),
(7153, 0, 1, 0, 0, 0, 100, 0, 6000, 6000, 5000, 10000, 0, 0, 11, 13584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Warrior - In Combat - Cast \'Strike\'');
-- Deadwood Gardener
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 7154) AND (`source_type` = 0) AND (`id` IN (0, 1, 2, 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`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(7154, 0, 0, 0, 0, 0, 100, 0, 4000, 11000, 12000, 15000, 0, 0, 11, 13583, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Gardener - In Combat - Cast \'Curse of the Deadwood\''),
(7154, 0, 1, 0, 2, 0, 100, 0, 0, 70, 15000, 15000, 0, 0, 11, 12160, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Gardener - Between 0-70% Health - Cast \'Rejuvenation\''),
(7154, 0, 3, 0, 2, 0, 100, 0, 0, 30, 10000, 10000, 0, 0, 11, 11986, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Gardener - Between 0-30% Health - Cast \'Healing Wave\'');
-- Deadwood Pathfinder
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 7155) AND (`source_type` = 0) AND (`id` IN (0, 1, 2));
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(7155, 0, 0, 0, 0, 0, 100, 0, 0, 0, 2200, 3800, 0, 0, 11, 6660, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Pathfinder - In Combat - Cast \'Shoot\''),
(7155, 0, 1, 0, 9, 0, 100, 0, 0, 0, 6000, 12000, 5, 30, 11, 6685, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Pathfinder - Within 5-30 Range - Cast \'Piercing Shot\''),
(7155, 0, 2, 0, 0, 0, 100, 0, 5000, 9000, 125000, 130000, 0, 0, 11, 13583, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Pathfinder - In Combat - Cast \'Curse of the Deadwood\'');
@@ -0,0 +1,3 @@
-- DB update 2024_12_28_02 -> 2024_12_29_00
UPDATE `gossip_menu` SET `TextID` = 7786 WHERE `MenuID` = 12002 AND `TextID` = 50030;
DELETE FROM `npc_text` WHERE `ID` = 50030;
@@ -0,0 +1,8 @@
-- DB update 2024_12_29_00 -> 2024_12_29_01
--
DELETE FROM `gameobject_template_locale` WHERE `name` = '';
DELETE FROM `gameobject_template_locale` WHERE `name` = 'NULL';
DELETE FROM `gameobject_template_locale` WHERE `name` IS NULL;
DELETE FROM `quest_offer_reward_locale` WHERE `RewardText` = '';
DELETE FROM `quest_offer_reward_locale` WHERE `RewardText` = 'NULL';
DELETE FROM `quest_offer_reward_locale` WHERE `RewardText` IS NULL;
@@ -0,0 +1,2 @@
-- DB update 2024_12_29_01 -> 2024_12_29_02
UPDATE `conditions` SET `ConditionValue1` = 17 WHERE `SourceTypeOrReferenceId` = 10 AND `SourceGroup` IN (35100, 35101, 35102) AND `ConditionTypeOrReference` = 13 AND `ConditionValue2` IN (1, 2, 3, 4);
@@ -0,0 +1,7 @@
-- DB update 2024_12_29_02 -> 2024_12_29_03
DELETE FROM `quest_template_locale` WHERE `ID` IN (182, 218, 3361, 3364) AND `locale` = 'deDE';
INSERT INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES
(182,'deDE','Die Trollhöhle','Mein Bruder Senir und ich wurden in unterschiedliche Ecken von Dun Morogh entsandt, um dort die von den Trollen ausgehende Gefahr zu untersuchen. Der Senat hat mit den Troggs bereits alle Hände voll zu tun, deswegen kann er keinen weiteren Ärger gebrauchen.$B$BNach allem, was ich gesehen habe, ist die Position der Trolle hier im Eisklammtal nicht sonderlich gut - sie sind vor allem in der südlichen Höhle zu finden. Ich würde sagen, die Armee brauchen wir nicht. Einige starke Arme sollten mehr als ausreichend sein.$B$BMöchtet Ihr vielleicht mithelfen? Ich bin ermächtigt, Euch für Eure Dienste eine Entschädigung anzubieten.','Grelin Weißbart möchte, dass Ihr 10 Trollwelpen der Frostmähnen tötet.','','Kehrt zu Grelin Weißbart in Dun Morogh zurück.','','','','',0),
(218,'deDE','Das gestohlene Tagebuch','Mein Tagebuch! Sie haben es in die Höhle gebracht. Der, der es hatte, war ein großer Kerl mit seltsamen Zeichen auf der Haut und im Gesicht. Viel mehr konnte ich leider nicht sehen.$B$BIhr hattet ja mit den Trollen Erfolg, vielleicht könntet Ihr es mir wiederbeschaffen?','Grelin Weißbart möchte, dass Ihr Grik\'nir den Kalten tötet und ihm sein Tagebuch wiederbeschafft.','','Kehrt zu Grelin Weißbart in Dun Morogh zurück.','','','','',0),
(3361,'deDE','Dilemma eines Flüchtlings','Wir haben die Troggs aus Gnomeregan vertrieben, aber dann ist alles schrecklich schief gegangen! Jetzt ist unsere Heimat völlig von Strahlen verseucht und wir Gnome sind überall in Dun Morogh zerstreut.$B$BIn meiner Hast, der Strahlung zu entkommen, habe ich all mein ganzes Hab und Gut und auch meine Werkzeuge verloren. Die Trolle haben sie geholt. Sie haben meine Truhe, meine Kiste, und meinen Bolzeneimer gestohlen! Alles das haben sie in ihre Lager südwestlich von Ambossar mitgenommen.$B$BIch bin nur leider kein Abenteurer - könntet Ihr bitte meine Sachen suchen und sie mir herbringen?','Bringt Felix Windenbolz in Ambossar den Kasten, die Truhe und den Bolzeneimer von Felix.','','Kehrt zu Felix Windenbolz in Ambossar in Dun Morogh zurück.','','','','',0),
(3364,'deDE','Lieferung des kochend heißen Morgengebräus','Bah! Ich sollte dieses köstliche, kochend heiße Morgengebräu schon vor einer ganzen Weile zu Durnan Pelznaht in Ambossar bringen, aber ich musste erst eine Ladung zu Grelin hier bringen. Ich werde es niemals bis nach Ambossar schaffen, bevor das Gebräu kalt wird!$B$BIhr seht hurtig aus. Vielleicht könnt Ihr es schaffen. Diese Tasse wird nur noch ein paar Minuten lang heiß bleiben, und Durnan bestellte kein \"eisiges\" Morgengebräu, also beeilt Euch. Ambossar liegt im Nordosten. Es ist eine Siedlung, die in den Berg gebaut wurde.$B$BDanke, $n, und vergesst nicht, mir meinen Becher zurückzubringen!','Bringt ein kochend heißes Morgengebräu zu Durnan Pelznaht in Ambossar hinein, bevor es kalt wird!','','','','','','',0);
@@ -0,0 +1,7 @@
-- DB update 2024_12_29_03 -> 2024_12_29_04
DELETE FROM `quest_template_locale` WHERE `ID` IN (364, 376, 380, 3901) AND `locale` = 'deDE';
INSERT INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES
(364,'deDE','Die Hirnlosen','Seit der erste Verlassene aus seinem Grab gekrochen ist, stehen wir mit der Geißel, der Armee des Lichkönigs im Krieg: durch Nekromantie erweckte Armeen von Untoten, grausige Bestien des Nordens und gepeinigte Schreckgespenster.$b$bDer nördliche Teil des Dorfes wurde von den Hirnlosen überrannt, und diese müssen vernichtet werden. Vernichtet sie, zeigt ihnen keine Gnade, auch wenn sie unsere früheren Brüder und Schwestern gewesen sein mögen. Die Gefallenen sind nichts als Sklaven des Lichkönigs.','Schattenpriester Sarvis will, dass Ihr 5 hirnlose Zombies und 5 elende Ghuls tötet.','','Kehrt zu Schattenpriester Sarvis in Todesend in Tirisfal zurück.','','','','',0),
(376,'deDE','Die Verdammten','Meine Pflichten umfassen, die verwundeten Krieger zu versorgen, Rüstung und Kleidung zu schneidern und Schattenpriester Sarvis in jeder erdenklichen Weise zu unterstützen.$b$bEs sieht so aus, als würdet Ihr ebenfalls in seine Dienste aufgenommen... wahrscheinlich um die Hirnlosen zu jagen, wie ich ihn kenne. Tja, wenn Ihr dabei in einem Stück bleiben wollt - und ich bezweifle nicht, dass Ihr das wollt -, dann kann ich Euch vielleicht helfen. Mir gehen die Tatzen und Flügel aus, und wenn Ihr mir einige davon bringt, besorge ich Euch eine Rüstung. Ihr werdet im Norden eine Menge Wölfe und Fledermäuse finden.','Novize Elreth benötigt 6 Aasfressertatzen und 6 Nachtsaugerflügel.','','Kehrt zu Novizin Elreth in Todesend in Tirisfal zurück.','','','','',0),
(380,'deDE','Nachtwebergrund','Eine unserer größten Schwierigkeiten besteht darin, die Rohstoffe zu besorgen, die wir zum Überleben brauchen. Gold war schon zu Hochzeiten der Macht der Allianz selten.$b$bEs gibt eine Goldmine im Nordwesten, die von Spinnen überrannt wurde. Wir brauchen das Gold dieser Mine, aber wir können es ja schlecht holen, während die Spinnen darin herumkrabbeln. Ich habe nicht viel Personal übrig für diese Aufgabe, also müssen wir sie Schritt für Schritt lösen.$B$BBegebt Euch dorthin und schaut mal, was Ihr für uns ausrichten könnt, $n.','Exekutor Arren will, dass Ihr 8 junge Nachtweber und 5 Nachtweber tötet.','','Kehrt zu Exekutor Arren in Todesend in Tirisfal zurück.','','','','',0),
(3901,'deDE','Klappernde Skelette','Ihr habt den Verlassenen Euer Potenzial unter normalen Umständen gezeigt, $n. Jetzt wollen wir mal sehen, wie es damit bestellt ist, wenn Ihr unter Druck steht.$B$BDie klappernden Skelette, weitere hirnlose Diener des Lichkönigs, sind zähere Feinde als die Zombies, mit denen Ihr es bisher zu tun hattet. Auch hier heißt es wieder: Dünnt ihre Reihen aus und beweist den Verlassenen, dass Ihr der Aufgabe gewachsen seid. Frisch ans Werk...und redet wieder mit mir, wenn Ihr fertig seid.','Tötet 8 klappernde Skelette und kehrt zu Schattenpriester Sarvis in Todesend zurück, wenn Ihr fertig seid.','','Kehrt zu Schattenpriester Sarvis in Todesend in Tirisfal zurück.','','','','',0);
@@ -0,0 +1,9 @@
-- DB update 2024_12_29_04 -> 2024_12_30_00
DELETE FROM `smart_scripts` WHERE `entryorguid` = 28802 AND `id` = 4 AND `source_type` = 0;
INSERT INTO `smart_scripts`
(`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`)
VALUES
(28802, 0, 4, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 142, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Servant of Drakuru - On Update Entry - Set Health 100%');
UPDATE `smart_scripts` SET `link` = 4 WHERE `entryorguid` = 28802 AND `id` = 2 AND `source_type` = 0 AND `link` = 0;
@@ -0,0 +1,72 @@
-- DB update 2024_12_30_00 -> 2024_12_30_01
DELETE FROM `quest_greeting_locale` WHERE `ID` IN (234, 235, 238, 239, 240, 241, 261, 265, 272, 278, 342, 344, 381, 382, 392, 415, 464, 633, 656, 661, 714, 733, 737, 773, 786, 823, 1071, 1092, 1105, 1239, 1284, 1343, 1344, 1356, 1374, 1377, 1428, 1495, 1499, 1500, 1515, 1518, 1646, 1719, 1738, 1748, 1937, 1938, 1950, 1952, 2080, 2086, 2094, 2121, 2215, 2216, 2263, 2498, 2501, 2700, 2706, 2713, 2785, 2786, 2817, 2860, 2910, 2920, 2921) AND `locale` = 'deDE';
INSERT INTO `quest_greeting_locale` (`ID`, `type`, `locale`, `Greeting`, `VerifiedBuild`) VALUES
(234,0,'deDE','In Westfall hat sich üble Verderbnis eingeschlichen. Während ich auf dem Schlachtfeld von Lordaeron meine Pflicht tat, wurden diese anständig geführten Höfe überfallen und zu Schlupfwinkeln für Schläger und Mörder umfunktioniert. Die Volksmiliz ist auf Eure Hilfe angewiesen.',0),
(235,0,'deDE','Willkommen in unserer bescheidenen Hütte! Wir freuen uns über jedes freundliche Gesicht. Und Ihr habt so starke Arme. Mein Mann und ich sind ständig auf der Suche nach jemandem, der uns auf dem Hof hilft. Jetzt, wo die ganzen guten Leute weg sind, ist es nicht einfach, kräftige Helfer zu bekommen.',0),
(238,0,'deDE','Manchmal denke ich, eine große dunkle Wolke schwebt über uns, aus der Unglück auf uns herabregnet. Erst werden wir von unserem Land vertrieben und jetzt kommen wir noch nicht einmal aus Westfall weg. Alles liegt im Argen. Es muss etwas geschehen.',0),
(239,0,'deDE','Abenteuer in Ländern so nah und so fern $BVerschiedene Leute, wir treffen sehr gern $BDocht wollt Ihr eine Frage stellen $BMüsst Ihr zuerst \'ne einfache Aufgabe erfüllen!',0),
(240,0,'deDE','Ach je, es ist auch ohne diese neuen Probleme schon schwer genug, hier für Ordnung zu sorgen! Ich hoffe, Ihr bringt gute Neuigkeiten, $N...',0),
(241,0,'deDE','He, mein Freund. Man nennt mich Remy. Ich komme aus dem Rotkammgebirge im Osten und bin auf der Suche nach interessanten... Geschäften, interessanten... Geschäften. Habt Ihr vielleicht welche... vielleicht welche?',0),
(261,0,'deDE','Seid gegrüßt. Ihr seht aus wie $Gein Mann:eine Frau; $Gder:die; weiß, was $Ger:sie; will... habt Ihr mit der Armee von Sturmwind zu tun?',0),
(265,0,'deDE','Ich spürte schon seit geraumer Zeit, dass Ihr kommen würdet, $N. Es stand in den Sternen geschrieben.',0),
(272,0,'deDE','Hallo, hallo! Willkommen in meiner Küche, $Gmein Herr:meine Dame;! Hier werden all die köstlichen Delikatessen der Taverne Zum roten Raben zubereitet. Ah, riecht nur das wunderbare Aroma!',0),
(278,0,'deDE','Hallo, $Gwerter Herr:werte Dame;. Nehmt Platz und esst etwas, wenn Ihr Hunger habt. Und keine Sorge, ich bin zwar mit meiner Handarbeit beschäftigt, aber ich höre Euch gut zu...',0),
(342,0,'deDE','Seid gegrüßt, $N! Willkommen in meinem bescheidenen Garten. Das Wetter ist in letzter Zeit wirklich vorzüglich. Lasst uns hoffen, dass es bis zur Ernte anhält.',0),
(344,0,'deDE','Wer ist $Gdieser:diese; $C, $Gder:die; sich vor das Gericht von Seenhain im Königreich Sturmwind begibt? Sagt, was Euer Anliegen in dieser Stadt ist, $R. Die Bedrohung des Königreichs durch die Orcs ist zu groß, um Zeit mit einem Geplänkel zu vergeuden.',0),
(381,0,'deDE','Grüße, $C. Wenn Ihr aus geschäftlichen Gründen hier seid, so schnappt Euch ein Bier und dann reden wir.',0),
(382,0,'deDE','Ich habe keine Zeit zum Schwatzen, doch wenn Ihr gewillt seid, uns im Kampf gegen die Orcs beizustehen, dann finden wir schon etwas für Euch zu tun.',0),
(392,0,'deDE','Erschreckt nicht, $R. Ich bin seit langem schon aus diesem Land geschieden, aber ich habe nicht vor, Euresgleichen Schaden zuzufügen. Ich habe in meinem Leben zu viel Tod gesehen. Mein einziger Wunsch ist der nach Frieden. Vielleicht könnt Ihr mir dabei helfen.',0),
(415,0,'deDE','He, $GKumpel:Maidlein;, könntet Ihr mir wohl bei einer Sache unter die Arme greifen? Ich stecke wirklich in der Klemme...',0),
(464,0,'deDE','Grüße, $C. Schlimme Zeiten sind dies, $Gmein Freund:meine Freundin;, denn unsere Stadt wird belagert! Die Orcs des Schwarzfelsklans greifen von der Burg Steinwacht aus an, die Schattenfellgnolle bedrohen den Ilgalar-Turm und das Rotkammgnollrudel gewinnt an Stärke. Ich hoffe, Ihr hattet nicht vor, hier Urlaub zu machen...',0),
(633,0,'deDE','Dunkle Zeiten sind über uns hereingebrochen, $C... Nicht mehr lange, und wir werden alles verlieren... wenn das Licht alle verlässt, außer jenen, die wahrhaftig unter dem Lichte wandeln.',0),
(656,0,'deDE','Überall waren Diebe!$B$BEs war schrecklich. Die Höhle stürzte über uns ein. Ich glaube, die Bergarbeiter sind alle tot, darunter auch mein Bruder, der Großknecht.',0),
(661,0,'deDE','Seid gegrüßt. Was habt Ihr mit der Familie Treuwein zu tun? Wollt Ihr die Treuweins im Kampf gegen die Untoten unterstützen?',0),
(714,0,'deDE','Grüße, $C! Herrlicher Tag zum Jagen, meint Ihr nicht auch? Ich selbst hatte bereits ziemliches Glück mit den Ebern. Möchtet Ihr es auch versuchen?',0),
(733,0,'deDE','Passt auf, was Ihr hier tut, $GSöhnchen:Mädel;. Ihr gehört zwar nicht zu unserer Truppe, aber das bedeutet nicht, dass ich Euch nicht übers Knie lege, wenn Ihr aus der Reihe tanzt!',0),
(737,0,'deDE','Ah, guten Tag. Mir scheint, Ihr seid einem kleinen Zusatzverdienst nicht abgeneigt, hmmm? Ich kann es an Euren Augen erkennen. Mein Name ist Mogul Kebok, Vorarbeiter der Unternehmungen in Azeroth, und wenn Ihr auf Reichtum aus seid, dann kann ich da vielleicht etwas arrangieren.',0),
(773,0,'deDE','$C, eh? Ich bin Krazek, Sekretär von Baron Revilgaz. Ich weiß über alles Bescheid, das in diesem Dschungel und darüber hinaus vor sich geht. Vielleicht möchtet Ihr den aktuellen Ölpreis in Ratschet wissen? Nein? Oder sucht Ihr vielleicht Arbeit? Da kann ich Euch helfen.',0),
(786,0,'deDE','Seid gegrüßt, $GJungchen:Mädel;. Mein Name ist Grelin Weißbart. Ich soll untersuchen, welche Bedrohung von den Trollen im Eisklammtal ausgeht, deren Zahl ständig anwächst. Was ich festgestellt habe? Naja, es ist schon etwas besorgniserregend...',0),
(823,0,'deDE','Guten Tag, $C. Normalerweise würde ich jetzt meine Runde machen und die Leute von Sturmwind beschützen, doch viele der Wachen von Sturmwind kämpfen in fremdem Landen. Daher mache ich jetzt hier Vertretung und setze Kopfgelder aus, wo ich doch eigentlich lieber auf Patrouille sein würde...',0),
(1071,0,'deDE','Ich habe mit der Zeit gelernt, dass es keine langweiligen Aufträge gibt. Der Schutz des Thandolübergangs hätte eine leichte Aufgabe sein sollen. Aber da der Hauptteil der Armee an der Seite der Allianz kämpft, wurden wir hier überwältigt und Dun Modr fiel.',0),
(1092,0,'deDE','Seid gegrüßt, $n.',0),
(1105,0,'deDE','Wisst Ihr, eigentlich wollte ich ja Ausgrabungsleiter werden. Aber da ich von jeher gut mit Zahlen umgehen konnte, beschloss die Gilde, dass ich am besten für die Buchhaltung geeignet sei! An jedem Tag meiner Jugend hieß es Lernen, Lernen und noch mal Lernen...',0),
(1239,0,'deDE','Wenn Ihr gewillt seid, Euch Geschichten anzuhören, die Eure Knochen zum Schlottern bringen und Euch das Fürchten lehren werden, dann holt Euch etwas zu trinken und setzt Euch hin...',0),
(1284,0,'deDE','Seid gegrüßt, $n.',0),
(1343,0,'deDE','Na, wenn das nicht $Gein junger, wilder:eine junge, wilde; $C ist, $Gden:die; zweifellos Erzählungen über meine Taten auf dem Schlachtfeld hierher geführt haben!$B$BLeider ist jetzt keine Zeit für große Geschichten, denn es gilt bedeutende Taten zu vollbringen! Wenn Ihr also auf Ruhm aus seid, dann ist Euch das Glück heute hold...',0),
(1344,0,'deDE','Auch wenn es in diesen Ruinen zurzeit recht ruhig ist, bin ich doch davon überzeugt, dass das nicht lange andauern wird. In der Zwischenzeit kann ich jemanden wie Euch jedoch gut gebrauchen. Möchtet Ihr die Forschergilde der Zwerge unterstützen?',0),
(1356,0,'deDE','Ich bin mit einer äußerst bedeutenden Aufgabe beschäftigt. Ausgrabungsleitergeschäfte. Sofern Ihr mir daher nicht etwas mindestens ebenso Wichtiges zu sagen habt, was ich bezweifeln möchte, müsst Ihr mich schon entschuldigen.',0),
(1374,0,'deDE','Verflucht sei die Brauerliga! Die Leute können sich die besten Zutaten besorgen, während wir uns hier verzweifelt ein bisschen Hopfen und Getreide zusammenkratzen müssen!$B$BWie gern würde ich denen als Ausgleich ein bisschen bittere Medizin zu schlucken geben...',0),
(1377,0,'deDE','Nicht jeder kann einen Dampfpanzer fahren. Dafür braucht man einen eisernen Griff und Nerven wie Drahtseile... Zum Glück besitze ich beides! Wie steht es mit Euch? Traut Ihr Euch? Möchtet Ihr es mir beweisen?',0),
(1428,0,'deDE','Seid gegrüßt, $n.',0),
(1495,0,'deDE','Seid gegrüßt, $C. Seid wachsam, wenn Ihr nach Osten zum Bollwerk reist. Aktuellen Spähermeldungen zufolge ist in dem Bereich eine erhöhte Aktivität der Geißel zu verzeichnen. Hier ist also Vorsicht geboten.',0),
(1499,0,'deDE','He, Ihr da! Ich hätte da ein paar Aufgaben zu vergeben und muss unbedingt kurz erklären, wie außerordentlich wichtig sie sind. Hört gut zu.',0),
(1500,0,'deDE','Ich hoffe, Ihr seid den Umständen entsprechend wohlauf.$B$BNehmt doch hier Platz und lauscht meiner Geschichte. Natürlich ist es eine Tragödie, aber hoffentlich eine, die am Ende gerächt wird!',0),
(1515,0,'deDE','Der scharlachrote Kreuzzug rückt unserer Heimat näher. Die törichten Eiferer erkennen nicht, dass die treuen Diener der dunklen Fürstin alles tun werden, um sie zu töten.',0),
(1518,0,'deDE','Die dunkle Fürstin hat die Herausforderung gestellt. Es liegt an uns, sie anzunehmen.',0),
(1646,0,'deDE','Seid gegrüßt, ich bin Baros Alexston, Stadtarchitekt von Sturmwind.',0),
(1719,0,'deDE','Hier drüben, nutzloses Pack...! Wenn Ihr etwas Sinnvolles tun wollt, dann hört genau zu!',0),
(1738,1,'deDE','Diese Schriftrollensammlung enthält verschiedene logistische und strategische Informationen sowie kodierte Nachrichten.',0),
(1748,0,'deDE','Ich bin Bolvar Fordragon, Hochlord von Sturmwind.',0),
(1937,0,'deDE','Die dunkle Fürstin hat die Herausforderung gestellt. Jetzt liegt es an der Königlichen Apothekervereinigung, eine neue Seuche zu entwickeln. Wir werden Arthas und seine jämmerliche Armee in die Knie zwingen.',0),
(1938,0,'deDE','Die Kirin Tor haben meine Warnungen in den Wind geschlagen! Die Allianz ist ein Schwindel. Arugal ist ein tollkühner Dummkopf.',0),
(1950,0,'deDE','Mein Bruder und ich sind in wichtiger Mission unterwegs, aber wir sind in diesem Bauernhaus festgenagelt. Die Todespirscher brauchen Eure Hilfe.',0),
(1952,0,'deDE','Hallo, $C. Da Ihr hier seid, wisst Ihr ja wohl, dass der Silberwald voll von unseren Feinden ist. Um zu überleben m',0),
(2080,0,'deDE','Die Entstehung von Teldrassil war ein großer Erfolg, doch jetzt muss sich die Welt neu orientieren, um wieder ins Gleichgewicht zu finden.',0),
(2086,0,'deDE','Seid gegrüßt, $n.',0),
(2094,0,'deDE','Seid gegrüßt, $C. Ich befinde mich gerade in einer etwas misslichen Lage, ich habe fast keine Bälge mehr.',0),
(2121,0,'deDE','Informationen... Mit unseren Spähern und Agenten haben wir den Informationsfluss in Lordaeron in der Hand. Bewegungen der Geißel, ihre Stellungen, nichts entgeht unseren wachsamen Augen...',0),
(2215,0,'deDE','Um der dunklen Fürstin und Varimathras zu dienen, müssen wir gegen die menschliche Plage vorgehen.',0),
(2216,0,'deDE','Wir stehen kurz vor der Entwicklung der neuen Seuche, nach der unsere dunkle Fürstin so dringend verlangt.',0),
(2263,0,'deDE','Ich hoffe, Ihr seid zum Arbeiten hergekommen, $C. Wir haben viel zu tun und von der Horde, dem Syndikat und den Ogern können wir keine Hilfe erwarten.',0),
(2498,0,'deDE','Was, Was?! Wir müssen alle einen Profit machen... und das geht nicht, wenn wir nur dumm herumstehen.',0),
(2501,0,'deDE','Eh! Lust auf eine Runde Fingerhakeln?',0),
(2700,0,'deDE','Wir auf der Zuflucht halten eines der letzten Gebiete von Stromgarde im Arathihochland. Aber wir werden zusehends bedrängt...$B$BWenn Ihr Neuigkeiten bringt, dann hoffentlich gute.',0),
(2706,0,'deDE','Dank des Kriegshäuptlings verbleibt selbst in den Ruinen unseres alten Gefängnisses noch Hoffnung, und die Horde erhebt sich erneut.',0),
(2713,1,'deDE','Dieses Holzbrett bietet Platz für primitive Steckbriefe.',0),
(2785,0,'deDE','Weg da! Bleibt zurück! Ich habe ein Paket Sprengpulver und zögere nicht, es zu benutzen! Ich sprenge uns alle in die Luft!$B$BOh, Verzeihung. Ich dachte, Ihr wäret jemand anderes...',0),
(2786,0,'deDE','Willkommen bei \'Knochengriffs Runen und Verdamnisse\', $C. Ihr dürft Euch umsehen, aber bitte fasst nichts an',0),
(2817,0,'deDE','Ihr müsst in Schwierigkeiten sein, wenn Ihr dieses Ödland durchstreift, $C. In Schwierigkeiten wie ich.$B$BOder vielleicht seid Ihr auch nur verrückt. Verrückt wie ich.',0),
(2860,0,'deDE','Es war ein ziemlich spektakulärer Abgang, kann ich Euch sagen, $C. Wir haben alles gegriffen, was nicht niet- und nagelfest war. Darum haben wir jetzt ein paar Vorräte übrig.',0),
(2910,0,'deDE','Die Bastarde haben sich nachts auf uns gestürzt, nachdem wir ordentlich gezecht hatten. Sonst hätten wir sie leicht überwältigt, das ist mal sicher.$B$BJetzt sind alle tot... bis auf einige wenige von uns.',0),
(2920,0,'deDE','He, hallo, $N.$B$BLotwil ist nicht gerade der aufmerksamste Boss, den ich je hatte. Manchmal ist er ziemlich in seine Arbeit vertieft. Dann kriegen sein Untergebenen nichts zu essen oder werden nicht bezahlt.$B$B<Lucien sieht Lotwil missbilligend an.>$B$BAber deshalb solltet Ihr nicht leiden müssen.',0),
(2921,0,'deDE','Wie gut, dass Ihr vorbeikommt, $C.$B$BIch heiße Lotwil Veriatus, Gründungsmitglied der Erleuchteten Versammlung für Arkanologie, Alchimie und Ingenieurwissenschaften: Unser Streben ist, die hohen Wissenschaften von Azeroth zu einer umfassenden Schule zu verschmelzen.',0);
@@ -0,0 +1,12 @@
-- DB update 2024_12_30_01 -> 2024_12_30_02
--
-- Eagle Trash Aggro Trigger
UPDATE `creature_template` SET `ScriptName` = '' WHERE (`entry` = 24223);
-- set spawntime to 30min Amani'shi Tempest
UPDATE `creature` SET `spawntimesecs` = 1800 WHERE (`id1` = 24549) AND (`guid` IN (89283));
-- delete Amani'shi Wind Walker #5 next to Tempest
DELETE FROM `creature` WHERE (`id1` = 24179) AND (`guid` IN (1107));
-- delete Amani'shi Protector #5 next to Tempest
DELETE FROM `creature` WHERE (`id1` = 24180) AND (`guid` IN (89311));
DELETE FROM `creature_addon` WHERE `guid` IN (1107, 89311);
DELETE FROM `linked_respawn` WHERE `guid` IN (1107, 89311);
+773
View File
@@ -0,0 +1,773 @@
-- DB update 2024_12_30_02 -> 2024_12_31_00
-- Set Run Speed
UPDATE `creature_template` SET `speed_run` = 1.05 WHERE `entry` IN (28576, 28577);
-- Remove Wrong Auras
UPDATE `creature_addon` SET `auras` = '' WHERE (`guid` IN (128916, 128921, 128925, 128927, 128966, 128969, 128972, 128975, 128980));
-- Remove Guids
DELETE FROM `creature` WHERE (`id1` = 28576) AND (`guid` IN (128921, 128923, 128925, 128931, 128932, 128933, 128936, 128937, 128938, 128939, 128940, 128941, 128942, 128943, 128944, 128945, 128946, 128947, 128949, 128950, 128951, 128952, 128953, 128955, 128956, 128957));
DELETE FROM `creature_addon` WHERE (`guid` IN (128921, 128923, 128925, 128931, 128932, 128933, 128936, 128937, 128938, 128939, 128940, 128941, 128942, 128943, 128944, 128945, 128946, 128947, 128949, 128950, 128951, 128952, 128953, 128955, 128956, 128957));
DELETE FROM `creature` WHERE (`id1` = 28577) AND (`guid` IN (128969, 128971, 128972, 128974, 128975, 128977, 128982, 128983, 128984, 128985, 128987, 128988, 128989, 128990, 128994, 128995, 128996, 128997, 128998, 128999, 129000, 129001));
DELETE FROM `creature_addon` WHERE (`guid` IN (128969, 128971, 128972, 128974, 128975, 128977, 128982, 128983, 128984, 128985, 128987, 128988, 128989, 128990, 128994, 128995, 128996, 128997, 128998, 128999, 129000, 129001));
-- Change Wander Distance and Movement Type
UPDATE `creature` SET `wander_distance` = 0, `MovementType` = 0 WHERE `guid` IN (128927, 128928, 128930, 128922, 128924, 128954, 128929, 128934, 128926, 128920, 128916, 128935, 128948, 128910, 128911, 128912, 128913, 128914, 128915, 128917, 128918, 128919) AND `id1` = 28576;
UPDATE `creature` SET `wander_distance` = 0, `MovementType` = 0 WHERE `guid` IN (128973, 128980, 128976, 128978, 128981, 128968, 128993, 128979, 128986, 128970, 128966, 128991, 128992, 128958, 128959, 128960, 128961, 128962, 128963, 128964, 128965, 128967) AND `id1` = 28577;
-- Change Positions (sniffed values)
UPDATE `creature` SET `position_x` = 2083.5244, `position_y` = -5713.8477, `position_z` = 100.62685, `orientation` = 5.6665, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128922, 28576), (128979, 28577));
UPDATE `creature` SET `position_x` = 1959.51, `position_y` = -5809.41, `position_z` = 101.222, `orientation` = 1.48353, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128927, 28576), (128986, 28577));
UPDATE `creature` SET `position_x` = 2104.597, `position_y` = -5852.6714, `position_z` = 102.65492, `orientation` = 3.7433, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128928, 28576), (128970, 28577));
UPDATE `creature` SET `position_x` = 2092.7227, `position_y` = -5778.4004, `position_z` = 99.17004, `orientation` = 2.3495708, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128930, 28576), (128966, 28577));
UPDATE `creature` SET `position_x` = 1965.97, `position_y` = -5833.76, `position_z` = 100.843, `orientation` = 4.08407, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128973, 28577), (128924, 28576));
UPDATE `creature` SET `position_x` = 2126.9946, `position_y` = -5881.348, `position_z` = 102.23642, `orientation` = 2.1005676, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128976, 28577), (128954, 28576));
UPDATE `creature` SET `position_x` = 2056.6086, `position_y` = -5754.899, `position_z` = 98.03694, `orientation` = 3.0397918, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128978, 28577), (128929, 28576));
UPDATE `creature` SET `position_x` = 2067.315, `position_y` = -5915.171, `position_z` = 106.67783, `orientation` = 3.5101542, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128980, 28577), (128934, 28576));
UPDATE `creature` SET `position_x` = 1927.4072, `position_y` = -5807.218, `position_z` = 100.20784, `orientation` = 5.9593172, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128981, 28577), (128926, 28576));
UPDATE `creature` SET `position_x` = 2160.4504, `position_y` = -5793.529, `position_z` = 100.928505, `orientation` = 2.87087, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128968, 28577), (128920, 28576));
UPDATE `creature` SET `position_x` = 2144.6318, `position_y` = -5754.6543, `position_z` = 99.69839, `orientation` = 5.02815, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128993, 28577), (128916, 28576));
UPDATE `creature` SET `position_x` = 2145.1165, `position_y` = -5919.1206, `position_z` = 98.640945, `orientation` = 1.53392, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128991, 28577), (128935, 28576));
UPDATE `creature` SET `position_x` = 2254.762, `position_y` = -5809.216, `position_z` = 101.03145, `orientation` = 2.50164, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128992, 28577), (128948, 28576));
UPDATE `creature` SET `position_x` = 2182.8823, `position_y` = -5747.591, `position_z` = 101.89203, `orientation` = 4.89732, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128958, 28577), (128910, 28576));
UPDATE `creature` SET `position_x` = 2220.754, `position_y` = -5868.3633, `position_z` = 101.3891, `orientation` = 3.23552, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128959, 28577), (128911, 28576));
UPDATE `creature` SET `position_x` = 2221.779, `position_y` = -5904.03, `position_z` = 101.254715, `orientation` = 1.18682, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128960, 28577), (128912, 28576));
UPDATE `creature` SET `position_x` = 2197.7969, `position_y` = -5908.8823, `position_z` = 100.96651, `orientation` = 2.43027, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128961, 28577), (128913, 28576));
UPDATE `creature` SET `position_x` = 2272.2073, `position_y` = -5888.6865, `position_z` = 100.51772, `orientation` = 3.63413, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128962, 28577), (128914, 28576));
UPDATE `creature` SET `position_x` = 2286.7288, `position_y` = -5786.4834, `position_z` = 101.393166, `orientation` = 2.39381, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128963, 28577), (128915, 28576));
UPDATE `creature` SET `position_x` = 2316.1199, `position_y` = -5880.3145, `position_z` = 100.80853, `orientation` = 2.82385, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128964, 28577), (128917, 28576));
UPDATE `creature` SET `position_x` = 2172.77, `position_y` = -5739.8115, `position_z` = 101.75742, `orientation` = 4.92786, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128965, 28577), (128918, 28576));
UPDATE `creature` SET `position_x` = 1959.3444, `position_y` = -5881.302, `position_z` = 101.192764, `orientation` = 2.11768, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128967, 28577), (128919, 28576));
-- Waypoints
DELETE FROM `waypoint_data` WHERE `id` IN (12897300);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12897300, 1, 1944.7305 , -5843.9497 , 100.4848, NULL, 0, 1, 0, 100, 0),
(12897300, 2, 1931.9498 , -5845.102 , 100.816826, NULL, 0, 1, 0, 100, 0),
(12897300, 3, 1903.3739 , -5842.505 , 100.84671, NULL, 0, 1, 0, 100, 0),
(12897300, 4, 1888.0885 , -5837.739 , 101.21175, NULL, 0, 1, 0, 100, 0),
(12897300, 5, 1848.5492 , -5823.535 , 100.22142, NULL, 0, 1, 0, 100, 0),
(12897300, 6, 1801.6525 , -5819.4927 , 108.76074, NULL, 0, 1, 0, 100, 0),
(12897300, 7, 1772.8551 , -5820.0854 , 115.72131, NULL, 0, 1, 0, 100, 0),
(12897300, 8, 1735.2579 , -5820.85 , 116.11808, NULL, 0, 1, 0, 100, 0),
(12897300, 9, 1716.0979 , -5821.3535 , 116.12192, NULL, 0, 1, 0, 100, 0),
(12897300, 10, 1707.7023 , -5817.693 , 116.06911, NULL, 0, 1, 0, 100, 0),
(12897300, 11, 1671.9619 , -5790.0522 , 116.16962, NULL, 0, 1, 0, 100, 0),
(12897300, 12, 1635.5886 , -5779.9287 , 116.1127, NULL, 0, 1, 0, 100, 0),
(12897300, 13, 1606.2896 , -5759.3193 , 118.430176, NULL, 0, 1, 0, 100, 0),
(12897300, 14, 1588.4744 , -5725.8613 , 121.6682, NULL, 0, 1, 0, 100, 0),
(12897300, 15, 1586.0789 , -5721.0986 , 121.72284, NULL, 0, 1, 0, 100, 0),
(12897300, 16, 1576.3289 , -5724.8486 , 121.22284, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12892700);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12892700, 1, 1969.4949 , -5841.5913 , 100.70409, NULL, 0, 1, 0, 100, 0),
(12892700, 2, 1967.9069 , -5879.0483 , 100.99721, NULL, 0, 1, 0, 100, 0),
(12892700, 3, 1941.4285 , -5904.2793 , 101.0126, NULL, 0, 1, 0, 100, 0),
(12892700, 4, 1905.0734 , -5910.6533 , 101.74708, NULL, 0, 1, 0, 100, 0),
(12892700, 5, 1867.1259 , -5916.288 , 104.24944, NULL, 0, 1, 0, 100, 0),
(12892700, 6, 1830.589 , -5926.684 , 110.515434, NULL, 0, 1, 0, 100, 0),
(12892700, 7, 1797.2595 , -5929.0654 , 116.07023, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12898000);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12898000, 1, 2040.1895, -5908.4395, 105.352394, NULL, 0, 1, 0, 100, 0),
(12898000, 2, 2022.1426, -5907.8115, 105.09137, NULL, 0, 1, 0, 100, 0),
(12898000, 3, 1998.4114, -5904.9033, 103.78064, NULL, 0, 1, 0, 100, 0),
(12898000, 4, 1959.7418, -5905.0034, 102.12171, NULL, 0, 1, 0, 100, 0),
(12898000, 5, 1930.9708, -5908.3857, 101.310776, NULL, 0, 1, 0, 100, 0),
(12898000, 6, 1882.8198, -5912.3, 103.69942, NULL, 0, 1, 0, 100, 0),
(12898000, 7, 1845.4309, -5921.158, 106.55255, NULL, 0, 1, 0, 100, 0),
(12898000, 8, 1827.6106, -5926.33, 111.30682, NULL, 0, 1, 0, 100, 0),
(12898000, 9, 1799.338, -5929.2344, 115.8991, NULL, 0, 1, 0, 100, 0),
(12898000, 10, 1763.3955, -5918.088, 116.10021, NULL, 0, 1, 0, 100, 0),
(12898000, 11, 1728.2671, -5901.347, 116.121765, NULL, 0, 1, 0, 100, 0),
(12898000, 12, 1703.8771, -5885.782, 116.13325, NULL, 0, 1, 0, 100, 0),
(12898000, 13, 1689.8062, -5861.2275, 116.30095, NULL, 0, 1, 0, 100, 0),
(12898000, 14, 1658.6609, -5843.833, 116.13829, NULL, 0, 1, 0, 100, 0),
(12898000, 15, 1654.2504, -5842.74, 116.59402, NULL, 0, 1, 0, 100, 0),
(12898000, 16, 1643.8115, -5842.8213, 117.292656, NULL, 0, 1, 0, 100, 0),
(12898000, 17, 1643.0146, -5856.5806, 117.29288, NULL, 0, 1, 0, 100, 0),
(12898000, 18, 1644.2047, -5856.674, 117.29288, NULL, 0, 1, 0, 100, 0),
(12898000, 19, 1646.0004, -5846.99, 122.09402, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12892800);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12892800, 1, 2066.441, -5892.1685, 104.63345, NULL, 0, 1, 0, 100, 0),
(12892800, 2, 2040.8818, -5904.998, 105.20388, NULL, 0, 1, 0, 100, 0),
(12892800, 3, 2015.8793, -5906.8616, 104.558655, NULL, 0, 1, 0, 100, 0),
(12892800, 4, 1992.981, -5905.2583, 103.64758, NULL, 0, 1, 0, 100, 0),
(12892800, 5, 1963.8256, -5904.36, 102.39117, NULL, 0, 1, 0, 100, 0),
(12892800, 6, 1915.5765, -5907.2207, 101.523865, NULL, 0, 1, 0, 100, 0),
(12892800, 7, 1877.1783, -5911.365, 103.98798, NULL, 0, 1, 0, 100, 0),
(12892800, 8, 1840.3024, -5922.0996, 107.65767, NULL, 0, 1, 0, 100, 0),
(12892800, 9, 1813.3237, -5929.456, 114.523346, NULL, 0, 1, 0, 100, 0),
(12892800, 10, 1776.1013, -5923.899, 116.10615, NULL, 0, 1, 0, 100, 0),
(12892800, 11, 1761.0944, -5918.087, 116.12125, NULL, 0, 1, 0, 100, 0),
(12892800, 12, 1761.0944, -5918.087, 116.12125, NULL, 0, 1, 0, 100, 0),
(12892800, 13, 1706.6926, -5886.3516, 116.134094, NULL, 0, 1, 0, 100, 0),
(12892800, 14, 1690.5028, -5875.701, 116.15037, NULL, 0, 1, 0, 100, 0),
(12892800, 15, 1672.8468, -5874.1313, 116.15768, NULL, 0, 1, 0, 100, 0),
(12892800, 16, 1656.9258, -5879.2573, 117.14002, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12897600);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12897600, 1, 2111.3591, -5871.938, 102.830246, NULL, 0, 1, 0, 100, 0),
(12897600, 2, 2074.83, -5891.751, 104.46708, NULL, 0, 1, 0, 100, 0),
(12897600, 3, 2047.8912, -5902.0273, 105.27161, NULL, 0, 1, 0, 100, 0),
(12897600, 4, 2018.3429, -5907.862, 104.67937, NULL, 0, 1, 0, 100, 0),
(12897600, 5, 1997.4357, -5905.4326, 103.8081, NULL, 0, 1, 0, 100, 0),
(12897600, 6, 1961.94, -5904.3047, 102.270355, NULL, 0, 1, 0, 100, 0),
(12897600, 7, 1913.7784, -5907.3794, 101.558586, NULL, 0, 1, 0, 100, 0),
(12897600, 8, 1875.4719, -5911.5635, 104.01149, NULL, 0, 1, 0, 100, 0),
(12897600, 9, 1838.9071, -5922.575, 107.9482, NULL, 0, 1, 0, 100, 0),
(12897600, 10, 1811.834, -5929.828, 114.76414, NULL, 0, 1, 0, 100, 0),
(12897600, 11, 1774.6315, -5923.45, 116.10475, NULL, 0, 1, 0, 100, 0),
(12897600, 12, 1747.9906, -5912.2446, 116.11488, NULL, 0, 1, 0, 100, 0),
(12897600, 13, 1706.5342, -5887.2197, 116.13313, NULL, 0, 1, 0, 100, 0),
(12897600, 14, 1690.7845, -5875.925, 116.14969, NULL, 0, 1, 0, 100, 0),
(12897600, 15, 1676.5111, -5873.307, 116.164276, NULL, 0, 1, 0, 100, 0),
(12897600, 16, 1676.5111, -5873.307, 116.164276, NULL, 0, 1, 0, 100, 0),
(12897600, 17, 1657.8718, -5880.3726, 117.14161, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12893000);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12893000, 1, 2070.2095, -5762.7603, 99.81166, NULL, 0, 1, 0, 100, 0),
(12893000, 2, 2070.2095, -5762.7603, 99.81166, NULL, 0, 1, 0, 100, 0),
(12893000, 3, 1994.7286, -5754.8096, 101.051895, NULL, 0, 1, 0, 100, 0),
(12893000, 4, 1978.1233, -5761.267, 100.05591, NULL, 0, 1, 0, 100, 0),
(12893000, 5, 1975.6188, -5775.5063, 100.50737, NULL, 0, 1, 0, 100, 0),
(12893000, 6, 1957.5121, -5804.2607, 101.00263, NULL, 0, 1, 0, 100, 0),
(12893000, 7, 1931.0342, -5809.3525, 100.24758, NULL, 0, 1, 0, 100, 0),
(12893000, 8, 1902.3887, -5812.0005, 100.822266, NULL, 0, 1, 0, 100, 0),
(12893000, 9, 1854.5596, -5817.096, 100.11816, NULL, 0, 1, 0, 100, 0),
(12893000, 10, 1825.8574, -5819.058, 102.42384, NULL, 0, 1, 0, 100, 0),
(12893000, 11, 1797.9662, -5819.641, 109.77238, NULL, 0, 1, 0, 100, 0),
(12893000, 12, 1760.0563, -5818.603, 116.11024, NULL, 0, 1, 0, 100, 0),
(12893000, 13, 1731.8124, -5824.739, 116.122055, NULL, 0, 1, 0, 100, 0),
(12893000, 14, 1695.5244, -5833.4883, 116.13347, NULL, 0, 1, 0, 100, 0),
(12893000, 15, 1677.6709, -5833.4097, 116.27008, NULL, 0, 1, 0, 100, 0),
(12893000, 16, 1664.9114, -5810.619, 116.269135, NULL, 0, 1, 0, 100, 0),
(12893000, 17, 1651.6998, -5803.006, 117.191055, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12897800);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12897800, 1, 2023.7551, -5751.5454, 99.346756, NULL, 0, 1, 0, 100, 0),
(12897800, 2, 1976.9875, -5752.822, 99.495636, NULL, 0, 1, 0, 100, 0),
(12897800, 3, 1939.8892, -5760.4897, 104.04903, NULL, 0, 1, 0, 100, 0),
(12897800, 4, 1921.4534, -5766.0054, 103.05617, NULL, 0, 1, 0, 100, 0),
(12897800, 5, 1902.7848, -5806.5317, 100.9096, NULL, 0, 1, 0, 100, 0),
(12897800, 6, 1871.4408, -5841.7896, 101.79826, NULL, 0, 1, 0, 100, 0),
(12897800, 7, 1871.3506, -5868.6646, 103.00215, NULL, 0, 1, 0, 100, 0),
(12897800, 8, 1869.5706, -5907.1045, 103.911934, NULL, 0, 1, 0, 100, 0),
(12897800, 9, 1829.5681, -5925.896, 110.61987, NULL, 0, 1, 0, 100, 0),
(12897800, 10, 1811.7615, -5931.8643, 114.946075, NULL, 0, 1, 0, 100, 0),
(12897800, 11, 1783.5422, -5928.593, 116.11073, NULL, 0, 1, 0, 100, 0),
(12897800, 12, 1766.4922, -5933.464, 116.12873, NULL, 0, 1, 0, 100, 0),
(12897800, 13, 1742.8866, -5964.3276, 117.121796, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12898100);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12898100, 1, 1951.9263, -5815.4497, 101.04118, NULL, 0, 1, 0, 100, 0),
(12898100, 2, 1970.7544, -5844.5786, 100.687996, NULL, 0, 1, 0, 100, 0),
(12898100, 3, 1967.2448, -5881.7847, 101.34556, NULL, 0, 1, 0, 100, 0),
(12898100, 4, 1938.9346, -5905.942, 101.04604, NULL, 0, 1, 0, 100, 0),
(12898100, 5, 1902.1019, -5910.5957, 101.783394, NULL, 0, 1, 0, 100, 0),
(12898100, 6, 1864.4154, -5916.9707, 104.330055, NULL, 0, 1, 0, 100, 0),
(12898100, 7, 1828.0709, -5927.4385, 111.26059, NULL, 0, 1, 0, 100, 0),
(12898100, 8, 1797.2505, -5929.193, 116.19281, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12892200);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12892200, 1, 2094.0906, -5834.092, 102.69047, NULL, 0, 1, 0, 100, 0),
(12892200, 2, 2079.626, -5841.1475, 103.4521, NULL, 0, 1, 0, 100, 0),
(12892200, 3, 2035.0693, -5845.4404, 100.44537, NULL, 0, 1, 0, 100, 0),
(12892200, 4, 2006.8013, -5844.5874, 100.6099, NULL, 0, 1, 0, 100, 0),
(12892200, 5, 2000.3555, -5844.169, 100.701965, NULL, 0, 1, 0, 100, 0),
(12892200, 6, 1946.4022, -5848.609, 100.432556, NULL, 0, 1, 0, 100, 0),
(12892200, 7, 1909.1177, -5846.7256, 100.54386, NULL, 0, 1, 0, 100, 0),
(12892200, 8, 1874.3818, -5830.268, 101.104195, NULL, 0, 1, 0, 100, 0),
(12892200, 9, 1849.9789, -5822.343, 100.16639, NULL, 0, 1, 0, 100, 0),
(12892200, 10, 1791.5347, -5817.185, 111.733925, NULL, 0, 1, 0, 100, 0),
(12892200, 11, 1754.2554, -5817.1816, 116.08976, NULL, 0, 1, 0, 100, 0),
(12892200, 12, 1748.3037, -5806.4995, 117.35039, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12896800);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12896800, 1, 2013.9696, -5750.505, 99.70143, NULL, 0, 1, 0, 100, 0),
(12896800, 2, 1972.1002, -5753.1313, 99.956764, NULL, 0, 1, 0, 100, 0),
(12896800, 3, 1930.2598, -5762.677, 103.71254, NULL, 0, 1, 0, 100, 0),
(12896800, 4, 1911.7079, -5769.6855, 103.2831, NULL, 0, 1, 0, 100, 0),
(12896800, 5, 1900.9596, -5814.0117, 100.851074, NULL, 0, 1, 0, 100, 0),
(12896800, 6, 1867.4998, -5845.516, 102.06406, NULL, 0, 1, 0, 100, 0),
(12896800, 7, 1872.8259, -5877.5146, 103.11753, NULL, 0, 1, 0, 100, 0),
(12896800, 8, 1868.8295, -5913.8647, 104.1411, NULL, 0, 1, 0, 100, 0),
(12896800, 9, 1824.596, -5927.4673, 112.021965, NULL, 0, 1, 0, 100, 0),
(12896800, 10, 1806.9615, -5933.51, 115.49063, NULL, 0, 1, 0, 100, 0),
(12896800, 11, 1775.8497, -5926.973, 116.12056, NULL, 0, 1, 0, 100, 0),
(12896800, 12, 1743.2236, -5964.2686, 117.110565, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12899300);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12899300, 1, 2076.472, -5888.584, 104.19423, NULL, 0, 1, 0, 100, 0),
(12899300, 2, 2041.5881, -5906.801, 105.34805, NULL, 0, 1, 0, 100, 0),
(12899300, 3, 2024.7155, -5907.803, 104.91816, NULL, 0, 1, 0, 100, 0),
(12899300, 4, 2004.056, -5904.8228, 103.98675, NULL, 0, 1, 0, 100, 0),
(12899300, 5, 1994.0098, -5904.212, 103.83737, NULL, 0, 1, 0, 100, 0),
(12899300, 6, 1975.0098, -5903.212, 103.33737, NULL, 0, 1, 0, 100, 0),
(12899300, 7, 1960.9049, -5902.596, 102.14691, NULL, 0, 1, 0, 100, 0),
(12899300, 8, 1920.0485, -5909.797, 101.558655, NULL, 0, 1, 0, 100, 0),
(12899300, 9, 1886.3186, -5910.0615, 103.367516, NULL, 0, 1, 0, 100, 0),
(12899300, 10, 1871.5569, -5910.3486, 104.01594, NULL, 0, 1, 0, 100, 0),
(12899300, 11, 1828.5173, -5925.0347, 110.76521, NULL, 0, 1, 0, 100, 0),
(12899300, 12, 1796.468, -5930.4634, 116.01326, NULL, 0, 1, 0, 100, 0),
(12899300, 13, 1756.4623, -5915.221, 116.10086, NULL, 0, 1, 0, 100, 0),
(12899300, 14, 1716.3547, -5893.5947, 116.14236, NULL, 0, 1, 0, 100, 0),
(12899300, 15, 1682.9327, -5873.7715, 116.17101, NULL, 0, 1, 0, 100, 0),
(12899300, 16, 1663.3423, -5876.8574, 117.09895, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12899100);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12899100, 1, 2133.4194, -5890.052, 102.231575, NULL, 0, 1, 0, 100, 0),
(12899100, 2, 2122.249, -5838.9604, 101.52284, NULL, 0, 1, 0, 100, 0),
(12899100, 3, 2100.3472, -5814.198, 100.14385, NULL, 0, 1, 0, 100, 0),
(12899100, 4, 2076.754, -5783.5723, 101.04958, NULL, 0, 1, 0, 100, 0),
(12899100, 5, 2058.3276, -5756.188, 98.141235, NULL, 0, 1, 0, 100, 0),
(12899100, 6, 2017.8334, -5758.0444, 100.78644, NULL, 0, 1, 0, 100, 0),
(12899100, 7, 1987.5137, -5753.7964, 100.69717, NULL, 0, 1, 0, 100, 0),
(12899100, 8, 1970.6337, -5767.217, 100.53471, NULL, 0, 1, 0, 100, 0),
(12899100, 9, 1979.3994, -5781.793, 100.605316, NULL, 0, 1, 0, 100, 0),
(12899100, 10, 1951.6432, -5810.2803, 101.017456, NULL, 0, 1, 0, 100, 0),
(12899100, 11, 1918.3981, -5808.7803, 100.12152, NULL, 0, 1, 0, 100, 0),
(12899100, 12, 1891.5178, -5814.1875, 101.82555, NULL, 0, 1, 0, 100, 0),
(12899100, 13, 1843.686, -5817.9766, 100.21717, NULL, 0, 1, 0, 100, 0),
(12899100, 14, 1820.1938, -5819.423, 103.83345, NULL, 0, 1, 0, 100, 0),
(12899100, 15, 1786.3748, -5819.7363, 113.102936, NULL, 0, 1, 0, 100, 0),
(12899100, 16, 1755.2192, -5818.3926, 116.12125, NULL, 0, 1, 0, 100, 0),
(12899100, 17, 1726.4553, -5826.191, 116.12224, NULL, 0, 1, 0, 100, 0),
(12899100, 18, 1691.1974, -5835.975, 116.13765, NULL, 0, 1, 0, 100, 0),
(12899100, 19, 1671.5693, -5832.2524, 116.32982, NULL, 0, 1, 0, 100, 0),
(12899100, 20, 1663.0612, -5804.608, 116.12191, NULL, 0, 1, 0, 100, 0),
(12899100, 21, 1650.4883, -5802.892, 117.11298, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12899200);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12899200, 1, 2208.9922, -5774.83, 101.751114, NULL, 0, 1, 0, 100, 0),
(12899200, 2, 2180.3252, -5769.429, 101.35872, NULL, 0, 1, 0, 100, 0),
(12899200, 3, 2159.842, -5798.3203, 101.017365, NULL, 0, 1, 0, 100, 0),
(12899200, 4, 2143.869, -5819.368, 100.95576, NULL, 0, 1, 0, 100, 0),
(12899200, 5, 2130.524, -5854.802, 101.66334, NULL, 0, 1, 0, 100, 0),
(12899200, 6, 2099.8154, -5874.7124, 103.43926, NULL, 0, 1, 0, 100, 0),
(12899200, 7, 2058.2124, -5898.143, 105.209, NULL, 0, 1, 0, 100, 0),
(12899200, 8, 2018.2173, -5908.242, 104.687775, NULL, 0, 1, 0, 100, 0),
(12899200, 9, 1980.6598, -5904.7993, 103.00401, NULL, 0, 1, 0, 100, 0),
(12899200, 10, 1951.6602, -5904.4023, 101.53832, NULL, 0, 1, 0, 100, 0),
(12899200, 11, 1916.6315, -5907.4443, 101.529045, NULL, 0, 1, 0, 100, 0),
(12899200, 12, 1874.3184, -5912.4497, 104.05506, NULL, 0, 1, 0, 100, 0),
(12899200, 13, 1830.64, -5924.63, 110.22774, NULL, 0, 1, 0, 100, 0),
(12899200, 14, 1799.2496, -5933.987, 115.95625, NULL, 0, 1, 0, 100, 0),
(12899200, 15, 1756.3352, -5918.8296, 116.11929, NULL, 0, 1, 0, 100, 0),
(12899200, 16, 1731.1982, -5905.51, 116.127594, NULL, 0, 1, 0, 100, 0),
(12899200, 17, 1719.0509, -5885.116, 116.58339, NULL, 0, 1, 0, 100, 0),
(12899200, 18, 1727.4645, -5872.8423, 116.125916, NULL, 0, 1, 0, 100, 0),
(12899200, 19, 1733.1125, -5871.979, 116.641304, NULL, 0, 1, 0, 100, 0),
(12899200, 20, 1739.6682, -5873.1895, 116.643486, NULL, 0, 1, 0, 100, 0),
(12899200, 21, 1739.8035, -5879.1963, 116.66808, NULL, 0, 1, 0, 100, 0),
(12899200, 22, 1750.481, -5878.4556, 116.03192, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12895800);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12895800, 1, 2112.2366, -5870.4365, 102.70522, NULL, 0, 1, 0, 100, 0),
(12895800, 2, 2076.472, -5888.584, 104.19423, NULL, 0, 1, 0, 100, 0),
(12895800, 3, 2041.5881, -5906.801, 105.34805, NULL, 0, 1, 0, 100, 0),
(12895800, 4, 2022.9702, -5905.5884, 104.894196, NULL, 0, 1, 0, 100, 0),
(12895800, 5, 2004.056, -5904.8228, 103.98675, NULL, 0, 1, 0, 100, 0),
(12895800, 6, 1960.9049, -5902.596, 102.14691, NULL, 0, 1, 0, 100, 0),
(12895800, 7, 1920.0485, -5909.797, 101.558655, NULL, 0, 1, 0, 100, 0),
(12895800, 8, 1871.5569, -5910.3486, 104.01594, NULL, 0, 1, 0, 100, 0),
(12895800, 9, 1828.5173, -5925.0347, 110.76521, NULL, 0, 1, 0, 100, 0),
(12895800, 10, 1796.468, -5930.4634, 116.01326, NULL, 0, 1, 0, 100, 0),
(12895800, 11, 1756.4623, -5915.221, 116.10086, NULL, 0, 1, 0, 100, 0),
(12895800, 12, 1716.3547, -5893.5947, 116.14236, NULL, 0, 1, 0, 100, 0),
(12895800, 13, 1682.9327, -5873.7715, 116.17101, NULL, 0, 1, 0, 100, 0),
(12895800, 14, 1663.3423, -5876.8574, 117.27307, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12895900);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12895900, 1, 2097.34, -5841.3203, 102.67261, NULL, 0, 1, 0, 100, 0),
(12895900, 2, 2066.8403, -5841.029, 102.287506, NULL, 0, 1, 0, 100, 0),
(12895900, 3, 2029.0686, -5846.0244, 100.455025, NULL, 0, 1, 0, 100, 0),
(12895900, 4, 1993.8956, -5843.7485, 100.748825, NULL, 0, 1, 0, 100, 0),
(12895900, 5, 1962.1233, -5843.173, 100.5741, NULL, 0, 1, 0, 100, 0),
(12895900, 6, 1935.0837, -5849.48, 101.044945, NULL, 0, 1, 0, 100, 0),
(12895900, 7, 1904.2611, -5846.199, 100.77372, NULL, 0, 1, 0, 100, 0),
(12895900, 8, 1867.7396, -5826.739, 100.54382, NULL, 0, 1, 0, 100, 0),
(12895900, 9, 1831.8232, -5817.8496, 101.37269, NULL, 0, 1, 0, 100, 0),
(12895900, 10, 1786.0167, -5816.726, 113.24113, NULL, 0, 1, 0, 100, 0),
(12895900, 11, 1746.1085, -5817.3066, 116.121925, NULL, 0, 1, 0, 100, 0),
(12895900, 12, 1747.8519, -5805.8174, 117.27875, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12896000);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12896000, 1, 2056.6086, -5754.899, 98.03696, NULL, 0, 1, 0, 100, 0),
(12896000, 2, 2013.9696, -5750.505, 99.70143, NULL, 0, 1, 0, 100, 0),
(12896000, 3, 1972.1002, -5753.1313, 99.956764, NULL, 0, 1, 0, 100, 0),
(12896000, 4, 1930.2598, -5762.677, 103.71254, NULL, 0, 1, 0, 100, 0),
(12896000, 5, 1911.7079, -5769.6855, 103.2831, NULL, 0, 1, 0, 100, 0),
(12896000, 6, 1900.9596, -5814.0117, 100.851074, NULL, 0, 1, 0, 100, 0),
(12896000, 7, 1867.4998, -5845.516, 102.06406, NULL, 0, 1, 0, 100, 0),
(12896000, 8, 1872.8259, -5877.5146, 103.11753, NULL, 0, 1, 0, 100, 0),
(12896000, 9, 1868.8295, -5913.8647, 104.1411, NULL, 0, 1, 0, 100, 0),
(12896000, 10, 1824.596, -5927.4673, 112.021965, NULL, 0, 1, 0, 100, 0),
(12896000, 11, 1806.9615, -5933.51, 115.49063, NULL, 0, 1, 0, 100, 0),
(12896000, 12, 1775.8497, -5926.973, 116.12056, NULL, 0, 1, 0, 100, 0),
(12896000, 13, 1755.8041, -5940.877, 116.13806, NULL, 0, 1, 0, 100, 0),
(12896000, 14, 1743.2236, -5964.2686, 117.27308, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12896100);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12896100, 1, 2092.1965, -5774.9946, 99.134636, NULL, 0, 1, 0, 100, 0),
(12896100, 2, 2058.3276, -5756.188, 98.141235, NULL, 0, 1, 0, 100, 0),
(12896100, 3, 2017.8334, -5758.0444, 100.78644, NULL, 0, 1, 0, 100, 0),
(12896100, 4, 1987.5137, -5753.7964, 100.69717, NULL, 0, 1, 0, 100, 0),
(12896100, 5, 1970.6337, -5767.217, 100.53471, NULL, 0, 1, 0, 100, 0),
(12896100, 6, 1979.3994, -5781.793, 100.605316, NULL, 0, 1, 0, 100, 0),
(12896100, 7, 1951.6432, -5810.2803, 101.017456, NULL, 0, 1, 0, 100, 0),
(12896100, 8, 1918.3981, -5808.7803, 100.12152, NULL, 0, 1, 0, 100, 0),
(12896100, 9, 1891.5178, -5814.1875, 101.82555, NULL, 0, 1, 0, 100, 0),
(12896100, 10, 1843.686, -5817.9766, 100.21717, NULL, 0, 1, 0, 100, 0),
(12896100, 11, 1820.1938, -5819.423, 103.83345, NULL, 0, 1, 0, 100, 0),
(12896100, 12, 1786.3748, -5819.7363, 113.102936, NULL, 0, 1, 0, 100, 0),
(12896100, 13, 1755.2192, -5818.3926, 116.12125, NULL, 0, 1, 0, 100, 0),
(12896100, 14, 1726.4553, -5826.191, 116.12224, NULL, 0, 1, 0, 100, 0),
(12896100, 15, 1691.1974, -5835.975, 116.13765, NULL, 0, 1, 0, 100, 0),
(12896100, 16, 1671.5693, -5832.2524, 116.32982, NULL, 0, 1, 0, 100, 0),
(12896100, 17, 1663.0612, -5804.608, 116.12191, NULL, 0, 1, 0, 100, 0),
(12896100, 18, 1650.4883, -5802.892, 117.27875, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12896200);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12896200, 1, 2112.2366, -5870.4365, 102.70522, NULL, 0, 1, 0, 100, 0),
(12896200, 2, 2076.472, -5888.584, 104.19423, NULL, 0, 1, 0, 100, 0),
(12896200, 3, 2041.5881, -5906.801, 105.34805, NULL, 0, 1, 0, 100, 0),
(12896200, 4, 2017.8765, -5905.41, 104.65199, NULL, 0, 1, 0, 100, 0),
(12896200, 5, 2004.056, -5904.8228, 103.98675, NULL, 0, 1, 0, 100, 0),
(12896200, 6, 1960.9049, -5902.596, 102.14691, NULL, 0, 1, 0, 100, 0),
(12896200, 7, 1920.0485, -5909.797, 101.558655, NULL, 0, 1, 0, 100, 0),
(12896200, 8, 1871.5569, -5910.3486, 104.01594, NULL, 0, 1, 0, 100, 0),
(12896200, 9, 1828.5173, -5925.0347, 110.76521, NULL, 0, 1, 0, 100, 0),
(12896200, 10, 1796.468, -5930.4634, 116.01326, NULL, 0, 1, 0, 100, 0),
(12896200, 11, 1756.4623, -5915.221, 116.10086, NULL, 0, 1, 0, 100, 0),
(12896200, 12, 1716.3547, -5893.5947, 116.14236, NULL, 0, 1, 0, 100, 0),
(12896200, 13, 1682.9327, -5873.7715, 116.17101, NULL, 0, 1, 0, 100, 0),
(12896200, 14, 1663.3423, -5876.8574, 117.27307, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12896300);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12896300, 1, 2097.34, -5841.3203, 102.67261, NULL, 0, 1, 0, 100, 0),
(12896300, 2, 2066.8403, -5841.029, 102.287506, NULL, 0, 1, 0, 100, 0),
(12896300, 3, 2029.0686, -5846.0244, 100.455025, NULL, 0, 1, 0, 100, 0),
(12896300, 4, 1993.8956, -5843.7485, 100.748825, NULL, 0, 1, 0, 100, 0),
(12896300, 5, 1962.1233, -5843.173, 100.5741, NULL, 0, 1, 0, 100, 0),
(12896300, 6, 1935.0837, -5849.48, 101.044945, NULL, 0, 1, 0, 100, 0),
(12896300, 7, 1904.2611, -5846.199, 100.77372, NULL, 0, 1, 0, 100, 0),
(12896300, 8, 1867.7396, -5826.739, 100.54382, NULL, 0, 1, 0, 100, 0),
(12896300, 9, 1831.8232, -5817.8496, 101.37269, NULL, 0, 1, 0, 100, 0),
(12896300, 10, 1786.0167, -5816.726, 113.24113, NULL, 0, 1, 0, 100, 0),
(12896300, 11, 1746.1085, -5817.3066, 116.121925, NULL, 0, 1, 0, 100, 0),
(12896300, 12, 1747.8519, -5805.8174, 117.27875, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12896400);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12896400, 1, 2112.2366, -5870.4365, 102.70522, NULL, 0, 1, 0, 100, 0),
(12896400, 2, 2076.472, -5888.584, 104.19423, NULL, 0, 1, 0, 100, 0),
(12896400, 3, 2041.5881, -5906.801, 105.34805, NULL, 0, 1, 0, 100, 0),
(12896400, 4, 2004.056, -5904.8228, 103.98675, NULL, 0, 1, 0, 100, 0),
(12896400, 5, 1960.9049, -5902.596, 102.14691, NULL, 0, 1, 0, 100, 0),
(12896400, 6, 1920.0485, -5909.797, 101.558655, NULL, 0, 1, 0, 100, 0),
(12896400, 7, 1871.5569, -5910.3486, 104.01594, NULL, 0, 1, 0, 100, 0),
(12896400, 8, 1828.5173, -5925.0347, 110.76521, NULL, 0, 1, 0, 100, 0),
(12896400, 9, 1796.468, -5930.4634, 116.01326, NULL, 0, 1, 0, 100, 0),
(12896400, 10, 1756.4623, -5915.221, 116.10086, NULL, 0, 1, 0, 100, 0),
(12896400, 11, 1716.3547, -5893.5947, 116.14236, NULL, 0, 1, 0, 100, 0),
(12896400, 12, 1682.9327, -5873.7715, 116.17101, NULL, 0, 1, 0, 100, 0),
(12896400, 13, 1663.3423, -5876.8574, 117.27307, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12896500);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12896500, 1, 2152.1838, -5846.8916, 101.93773, NULL, 0, 1, 0, 100, 0),
(12896500, 2, 2112.2366, -5870.4365, 102.70522, NULL, 0, 1, 0, 100, 0),
(12896500, 3, 2076.472, -5888.584, 104.19423, NULL, 0, 1, 0, 100, 0),
(12896500, 4, 2041.5881, -5906.801, 105.34805, NULL, 0, 1, 0, 100, 0),
(12896500, 5, 2022.9102, -5905.6533, 104.899635, NULL, 0, 1, 0, 100, 0),
(12896500, 6, 2004.056, -5904.8228, 103.98675, NULL, 0, 1, 0, 100, 0),
(12896500, 7, 1960.9049, -5902.596, 102.14691, NULL, 0, 1, 0, 100, 0),
(12896500, 8, 1920.0485, -5909.797, 101.558655, NULL, 0, 1, 0, 100, 0),
(12896500, 9, 1871.5569, -5910.3486, 104.01594, NULL, 0, 1, 0, 100, 0),
(12896500, 10, 1828.5173, -5925.0347, 110.76521, NULL, 0, 1, 0, 100, 0),
(12896500, 11, 1796.468, -5930.4634, 116.01326, NULL, 0, 1, 0, 100, 0),
(12896500, 12, 1756.4623, -5915.221, 116.10086, NULL, 0, 1, 0, 100, 0),
(12896500, 13, 1716.3547, -5893.5947, 116.14236, NULL, 0, 1, 0, 100, 0),
(12896500, 14, 1682.9327, -5873.7715, 116.17101, NULL, 0, 1, 0, 100, 0),
(12896500, 15, 1663.3423, -5876.8574, 117.27307, NULL, 0, 1, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (12896700);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(12896700, 1, 1924.832, -5845.7256, 100.16112, NULL, 0, 1, 0, 100, 0),
(12896700, 2, 1895.1543, -5841.2715, 101.08778, NULL, 0, 1, 0, 100, 0),
(12896700, 3, 1878.0494, -5832.7056, 101.27008, NULL, 0, 1, 0, 100, 0),
(12896700, 4, 1835.2166, -5819.3623, 100.88735, NULL, 0, 1, 0, 100, 0),
(12896700, 5, 1796.6736, -5819.528, 110.19136, NULL, 0, 1, 0, 100, 0),
(12896700, 6, 1763.368, -5820.3086, 116.104294, NULL, 0, 1, 0, 100, 0),
(12896700, 7, 1724.2448, -5821.062, 116.12348, NULL, 0, 1, 0, 100, 0),
(12896700, 8, 1711.1307, -5820.6772, 116.12192, NULL, 0, 1, 0, 100, 0),
(12896700, 9, 1698.2572, -5809.4565, 115.92327, NULL, 0, 1, 0, 100, 0),
(12896700, 10, 1664.177, -5784.301, 116.112946, NULL, 0, 1, 0, 100, 0),
(12896700, 11, 1621.61, -5777.791, 116.11258, NULL, 0, 1, 0, 100, 0),
(12896700, 12, 1602.2942, -5754.3105, 119.27875, NULL, 0, 1, 0, 100, 0),
(12896700, 13, 1586.1525, -5721.0815, 121.68814, NULL, 0, 1, 0, 100, 0),
(12896700, 14, 1575.1832, -5725.3354, 120.891266, NULL, 0, 1, 0, 100, 0);
-- Set Comment
UPDATE `creature` SET `Comment` = "has guid specific SAI" WHERE (`id1` = 28576) AND (`guid` IN (128922, 128927, 128928, 128930, 128924, 128954, 128929, 128934, 128926, 128920, 128916, 128935, 128948, 128910, 128911, 128912, 128913, 128914, 128915, 128917, 128918, 128919));
UPDATE `creature` SET `Comment` = "has guid specific SAI" WHERE (`id1` = 28577) AND (`guid` IN (128979, 128986, 128970, 128966, 128973, 128976, 128978, 128980, 128981, 128968, 128993, 128991, 128992, 128958, 128959, 128960, 128961, 128962, 128963, 128964, 128965, 128967));
-- Add Extra Flag (DONT_OVERRIDE_SAI_ENTRY). This is not a sniff, it is usefull to lighten the fix.
UPDATE `creature_template` SET `flags_extra` = `flags_extra`|134217728 WHERE `entry` IN (28576, 28577);
-- Change General SmartAI
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 28576;
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 28576) AND (`source_type` = 0);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(28576, 0, 0, 1, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Reset - Set Event Phase 1'),
(28576, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Reset - Set Reactstate Passive'),
(28576, 0, 2, 0, 4, 0, 50, 0, 0, 0, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Aggro - Set Event Phase 2'),
(28576, 0, 3, 4, 0, 1, 100, 0, 0, 0, 0, 0, 0, 0, 11, 51604, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Cast \'Serverside - Stun Self\' (Phase 1)'),
(28576, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 4, 14561, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Play Sound 14561 (Phase 1)'),
(28576, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 17, 431, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Set Emote State 431 (Phase 1)'),
(28576, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Say Line 1 (Phase 1)'),
(28576, 0, 7, 8, 0, 2, 100, 0, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Set Reactstate Aggressive (Phase 2)'),
(28576, 0, 8, 9, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52262, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Cast \'Cornered and Enraged!\' (Phase 2)'),
(28576, 0, 9, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Say Line 0 (Phase 2)'),
(28576, 0, 10, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Just Died - Say Line 2'),
(28576, 0, 11, 0, 4, 0, 50, 0, 0, 0, 0, 0, 0, 0, 86, 58207, 0, 10, 128581, 28765, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Aggro - Cross Cast \'Lich King VO Blocker\'');
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 28577;
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 28577) AND (`source_type` = 0);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(28577, 0, 0, 1, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Reset - Set Event Phase 1'),
(28577, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Reset - Set Reactstate Passive'),
(28577, 0, 2, 0, 4, 0, 50, 0, 0, 0, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Aggro - Set Event Phase 2'),
(28577, 0, 3, 4, 0, 1, 100, 0, 0, 0, 0, 0, 0, 0, 11, 51604, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Cast \'Serverside - Stun Self\' (Phase 1)'),
(28577, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 4, 14564, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Play Sound 14564 (Phase 1)'),
(28577, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 17, 431, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Set Emote State 431 (Phase 1)'),
(28577, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Say Line 1 (Phase 1)'),
(28577, 0, 7, 8, 0, 2, 100, 0, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Set Reactstate Aggressive (Phase 2)'),
(28577, 0, 8, 9, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52262, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Cast \'Cornered and Enraged!\' (Phase 2)'),
(28577, 0, 9, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Say Line 0 (Phase 2)'),
(28577, 0, 10, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Just Died - Say Line 2'),
(28577, 0, 11, 0, 4, 0, 50, 0, 0, 0, 0, 0, 0, 0, 86, 58207, 0, 10, 128581, 28765, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Aggro - Cross Cast \'Lich King VO Blocker\'');
-- Set Guid SmartAI
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128919);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128919, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896700'),
(-128919, 0, 13, 0, 109, 0, 100, 0, 0, 12896700, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896700 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128967);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128967, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896700'),
(-128967, 0, 13, 0, 109, 0, 100, 0, 0, 12896700, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896700 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128918);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128918, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896500, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896500'),
(-128918, 0, 13, 0, 109, 0, 100, 0, 0, 12896500, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896500 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128965);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128965, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896500, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896500'),
(-128965, 0, 13, 0, 109, 0, 100, 0, 0, 12896500, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896500 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128917);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128917, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896400, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896400'),
(-128917, 0, 13, 0, 109, 0, 100, 0, 0, 12896400, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896400 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128964);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128964, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896400, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896400'),
(-128964, 0, 13, 0, 109, 0, 100, 0, 0, 12896400, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896400 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128915);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128915, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896300'),
(-128915, 0, 13, 0, 109, 0, 100, 0, 0, 12896300, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896300 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128963);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128963, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896300'),
(-128963, 0, 13, 0, 109, 0, 100, 0, 0, 12896300, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896300 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128962);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128962, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896200'),
(-128962, 0, 13, 0, 109, 0, 100, 0, 0, 12896200, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896200 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128914);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128914, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896200'),
(-128914, 0, 13, 0, 109, 0, 100, 0, 0, 12896200, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896200 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128913);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128913, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896100'),
(-128913, 0, 13, 0, 109, 0, 100, 0, 0, 12896100, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896100 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128961);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128961, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896100'),
(-128961, 0, 13, 0, 109, 0, 100, 0, 0, 12896100, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896100 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128960);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128960, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896000'),
(-128960, 0, 13, 0, 109, 0, 100, 0, 0, 12896000, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896000 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128912);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128912, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896000'),
(-128912, 0, 13, 0, 109, 0, 100, 0, 0, 12896000, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896000 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128911);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128911, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12895900, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12895900'),
(-128911, 0, 13, 0, 109, 0, 100, 0, 0, 12895900, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12895900 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128959);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128959, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12895900, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12895900'),
(-128959, 0, 13, 0, 109, 0, 100, 0, 0, 12895900, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12895900 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128922);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128922, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12892200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12892200'),
(-128922, 0, 13, 0, 109, 0, 100, 0, 0, 12892200, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12892200 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128979);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128979, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12892200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12892200'),
(-128979, 0, 13, 0, 109, 0, 100, 0, 0, 12892200, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12892200 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128927);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128927, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12892700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12892700'),
(-128927, 0, 13, 0, 109, 0, 100, 0, 0, 12892700, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12892700 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128986);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128986, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12892700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12892700'),
(-128986, 0, 13, 0, 109, 0, 100, 0, 0, 12892700, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12892700 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128928);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128928, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12892800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12892800'),
(-128928, 0, 13, 0, 109, 0, 100, 0, 0, 12892800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12892800 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128970);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128970, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12892800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12892800'),
(-128970, 0, 13, 0, 109, 0, 100, 0, 0, 12892800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12892800 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128930);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128930, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12893000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12893000'),
(-128930, 0, 13, 0, 109, 0, 100, 0, 0, 12893000, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12893000 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128966);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128966, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12893000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12893000'),
(-128966, 0, 13, 0, 109, 0, 100, 0, 0, 12893000, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12893000 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128973);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128973, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12897300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12897300'),
(-128973, 0, 13, 0, 109, 0, 100, 0, 0, 12897300, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12897300 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128924);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128924, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12897300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12897300'),
(-128924, 0, 13, 0, 109, 0, 100, 0, 0, 12897300, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12897300 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128976);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128976, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12897600, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12897600'),
(-128976, 0, 13, 0, 109, 0, 100, 0, 0, 12897600, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12897600 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128954);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128954, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12897600, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12897600'),
(-128954, 0, 13, 0, 109, 0, 100, 0, 0, 12897600, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12897600 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128978);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128978, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12897800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12897800'),
(-128978, 0, 13, 0, 109, 0, 100, 0, 0, 12897800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12897800 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128929);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128929, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12897800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12897800'),
(-128929, 0, 13, 0, 109, 0, 100, 0, 0, 12897800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12897800 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128980);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128980, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12898000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12898000'),
(-128980, 0, 13, 0, 109, 0, 100, 0, 0, 12898000, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12898000 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128934);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128934, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12898000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12898000'),
(-128934, 0, 13, 0, 109, 0, 100, 0, 0, 12898000, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12898000 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128981);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128981, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12898100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12898100'),
(-128981, 0, 13, 0, 109, 0, 100, 0, 0, 12898100, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12898100 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128926);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128926, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12898100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12898100'),
(-128926, 0, 13, 0, 109, 0, 100, 0, 0, 12898100, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12898100 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128968);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128968, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896800'),
(-128968, 0, 13, 0, 109, 0, 100, 0, 0, 12896800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896800 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128920);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128920, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896800'),
(-128920, 0, 13, 0, 109, 0, 100, 0, 0, 12896800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896800 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128993);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128993, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12899300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12899300'),
(-128993, 0, 13, 0, 109, 0, 100, 0, 0, 12899300, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12899300 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128916);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128916, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12899300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12899300'),
(-128916, 0, 13, 0, 109, 0, 100, 0, 0, 12899300, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12899300 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128991);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128991, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12899100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12899100'),
(-128991, 0, 13, 0, 109, 0, 100, 0, 0, 12899100, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12899100 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128935);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128935, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12899100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12899100'),
(-128935, 0, 13, 0, 109, 0, 100, 0, 0, 12899100, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12899100 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128992);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128992, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12899200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12899200'),
(-128992, 0, 13, 0, 109, 0, 100, 0, 0, 12899200, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12899200 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128948);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128948, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12899200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12899200'),
(-128948, 0, 13, 0, 109, 0, 100, 0, 0, 12899200, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12899200 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128958);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128958, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12895800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12895800'),
(-128958, 0, 13, 0, 109, 0, 100, 0, 0, 12895800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12895800 Finished - Despawn In 2000 ms');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128910);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(-128910, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12895800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12895800'),
(-128910, 0, 13, 0, 109, 0, 100, 0, 0, 12895800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12895800 Finished - Despawn In 2000 ms');
-- Set Groups
DELETE FROM `pool_template` WHERE (`entry` IN (22386, 22387, 22388, 22389, 22390, 22391, 22392, 22393, 22394, 22395, 22396, 22397, 22398, 22399, 22400, 22401, 22402, 22403, 22404, 22405, 22406, 22407));
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
(22386, 1, 'Citizen of Havenshire random spawn 1'),
(22387, 1, 'Citizen of Havenshire random spawn 2'),
(22388, 1, 'Citizen of Havenshire random spawn 3'),
(22389, 1, 'Citizen of Havenshire random spawn 4'),
(22390, 1, 'Citizen of Havenshire random spawn 5'),
(22391, 1, 'Citizen of Havenshire random spawn 6'),
(22392, 1, 'Citizen of Havenshire random spawn 7'),
(22393, 1, 'Citizen of Havenshire random spawn 8'),
(22394, 1, 'Citizen of Havenshire random spawn 9'),
(22395, 1, 'Citizen of Havenshire random spawn 10'),
(22396, 1, 'Citizen of Havenshire random spawn 11'),
(22397, 1, 'Citizen of Havenshire random spawn 12'),
(22398, 1, 'Citizen of Havenshire random spawn 13'),
(22399, 1, 'Citizen of Havenshire random spawn 14'),
(22400, 1, 'Citizen of Havenshire random spawn 15'),
(22401, 1, 'Citizen of Havenshire random spawn 16'),
(22402, 1, 'Citizen of Havenshire random spawn 17'),
(22403, 1, 'Citizen of Havenshire random spawn 18'),
(22404, 1, 'Citizen of Havenshire random spawn 19'),
(22405, 1, 'Citizen of Havenshire random spawn 20'),
(22406, 1, 'Citizen of Havenshire random spawn 21'),
(22407, 1, 'Citizen of Havenshire random spawn 22');
DELETE FROM `pool_creature` WHERE (`pool_entry` IN (22386, 22387, 22388, 22389, 22390, 22391, 22392, 22393, 22394, 22395, 22396, 22397, 22398, 22399, 22400, 22401, 22402, 22403, 22404, 22405, 22406, 22407)) AND (`guid` IN (128922, 128979, 128927, 128986, 128928, 128970, 128930, 128966, 128973, 128924, 128976, 128954, 128978, 128929, 128980, 128934, 128981, 128926, 128968, 128920, 128993, 128916, 128991, 128935, 128992, 128948, 128958, 128910, 128959, 128911, 128960, 128912, 128961, 128913, 128962, 128914, 128963, 128915, 128964, 128917, 128965, 128918, 128967, 128919));
INSERT INTO `pool_creature` (`guid`, `pool_entry`, `chance`, `description`) VALUES
(128922, 22386, 0, 'Citizen of Havenshire (1/2)'),
(128979, 22386, 0, 'Citizen of Havenshire (2/2)'),
(128927, 22387, 0, 'Citizen of Havenshire (1/2)'),
(128986, 22387, 0, 'Citizen of Havenshire (2/2)'),
(128928, 22388, 0, 'Citizen of Havenshire (1/2)'),
(128970, 22388, 0, 'Citizen of Havenshire (2/2)'),
(128930, 22389, 0, 'Citizen of Havenshire (1/2)'),
(128966, 22389, 0, 'Citizen of Havenshire (2/2)'),
(128973, 22390, 0, 'Citizen of Havenshire (1/2)'),
(128924, 22390, 0, 'Citizen of Havenshire (2/2)'),
(128976, 22391, 0, 'Citizen of Havenshire (1/2)'),
(128954, 22391, 0, 'Citizen of Havenshire (2/2)'),
(128978, 22392, 0, 'Citizen of Havenshire (1/2)'),
(128929, 22392, 0, 'Citizen of Havenshire (2/2)'),
(128980, 22393, 0, 'Citizen of Havenshire (1/2)'),
(128934, 22393, 0, 'Citizen of Havenshire (2/2)'),
(128981, 22394, 0, 'Citizen of Havenshire (1/2)'),
(128926, 22394, 0, 'Citizen of Havenshire (2/2)'),
(128968, 22395, 0, 'Citizen of Havenshire (1/2)'),
(128920, 22395, 0, 'Citizen of Havenshire (2/2)'),
(128993, 22396, 0, 'Citizen of Havenshire (1/2)'),
(128916, 22396, 0, 'Citizen of Havenshire (2/2)'),
(128991, 22397, 0, 'Citizen of Havenshire (1/2)'),
(128935, 22397, 0, 'Citizen of Havenshire (2/2)'),
(128992, 22398, 0, 'Citizen of Havenshire (1/2)'),
(128948, 22398, 0, 'Citizen of Havenshire (2/2)'),
(128958, 22399, 0, 'Citizen of Havenshire (1/2)'),
(128910, 22399, 0, 'Citizen of Havenshire (2/2)'),
(128959, 22400, 0, 'Citizen of Havenshire (1/2)'),
(128911, 22400, 0, 'Citizen of Havenshire (2/2)'),
(128960, 22401, 0, 'Citizen of Havenshire (1/2)'),
(128912, 22401, 0, 'Citizen of Havenshire (2/2)'),
(128961, 22402, 0, 'Citizen of Havenshire (1/2)'),
(128913, 22402, 0, 'Citizen of Havenshire (2/2)'),
(128962, 22403, 0, 'Citizen of Havenshire (1/2)'),
(128914, 22403, 0, 'Citizen of Havenshire (2/2)'),
(128963, 22404, 0, 'Citizen of Havenshire (1/2)'),
(128915, 22404, 0, 'Citizen of Havenshire (2/2)'),
(128964, 22405, 0, 'Citizen of Havenshire (1/2)'),
(128917, 22405, 0, 'Citizen of Havenshire (2/2)'),
(128965, 22406, 0, 'Citizen of Havenshire (1/2)'),
(128918, 22406, 0, 'Citizen of Havenshire (2/2)'),
(128967, 22407, 0, 'Citizen of Havenshire (1/2)'),
(128919, 22407, 0, 'Citizen of Havenshire (2/2)');
-- FOR FUTURE FIXES
-- Set Disable Gravity for Sky Darkener Target (Sniffed Flag)
DELETE FROM `creature_template_movement` WHERE (`CreatureId` = 28655);
INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES
(28655, 0, 0, 1, 0, 0, 0, 0);
-- Change Wander Distance and Movement Type
UPDATE `creature` SET `wander_distance` = 0, `MovementType` = 0 WHERE `guid` IN (129464, 129465, 129466, 129467, 129468, 129469, 129470, 129471, 129472) AND `id1` = 28655;
@@ -0,0 +1,13 @@
-- DB update 2024_12_31_00 -> 2024_12_31_01
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 28557;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 28557);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(28557, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Peasant - On Reset - Set Reactstate Passive'),
(28557, 0, 1, 2, 101, 0, 100, 0, 1, 3, 3000, 0, 0, 0, 11, 51604, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Peasant - On 1 or More Players in Range - Cast \'Serverside - Stun Self\''),
(28557, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 4, 14561, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Peasant - On 1 or More Players in Range - Play Sound 14561'),
(28557, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 17, 431, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Peasant - On 1 or More Players in Range - Set Emote State 431'),
(28557, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 21, 3, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Peasant - On 1 or More Players in Range - Set Orientation Closest Player'),
(28557, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 21, 3, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Peasant - On 1 or More Players in Range - Say Line 0'),
(28557, 0, 6, 0, 102, 0, 100, 0, 1, 3, 30000, 30000, 30000, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Peasant - On Less Than 1 Players in Range - Evade');
-7
View File
@@ -56,10 +56,3 @@ http://www.azerothcore.org/wiki/How-to-test-a-PR
**REMEMBER**: when testing a PR that changes something **generic** (i.e. a part of code that handles more than one specific thing), the tester should not only check that the PR does its job (e.g. fixing spell XXX) but **especially** check that the PR does not cause any regression (i.e. introducing new bugs).
**For example**: if a PR fixes spell X by changing a part of code that handles spells X, Y, and Z, we should not only test X, but **we should test Y and Z as well**.
## Licence consent:
In the spirit of collaboration with other projects in the emulation scene, we encourage all new PRs to authorize sharing on GPLv2- based projects.
- [X] I agree with sharing my contributions with GPLv2-based projects.
Further information, here: https://github.com/azerothcore/azerothcore-wotlk/discussions/19868
+31
View File
@@ -0,0 +1,31 @@
/*
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as published by the
* Free Software Foundation; either version 3 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _STEADYTIMER_H
#define _STEADYTIMER_H
#include <chrono>
namespace Acore::Asio::SteadyTimer
{
inline auto GetExpirationTime(int32 seconds)
{
return std::chrono::steady_clock::now() + std::chrono::seconds(seconds);
}
}
#endif // _STEADYTIMER_H
+1 -1
View File
@@ -66,7 +66,7 @@ void Appender::write(LogMessage* message)
if (flags & APPENDER_FLAGS_PREFIX_LOGLEVEL)
{
ss << Acore::StringFormat("%-5s ", Appender::getLogLevelString(message->level));
ss << Acore::StringFormat("{} ", Appender::getLogLevelString(message->level));
}
if (flags & APPENDER_FLAGS_PREFIX_LOGFILTERTYPE)
+3 -6
View File
@@ -18,6 +18,7 @@
#include "Metric.h"
#include "Config.h"
#include "Log.h"
#include "SteadyTimer.h"
#include "Strand.h"
#include "Tokenize.h"
#include <boost/algorithm/string/replace.hpp>
@@ -246,9 +247,7 @@ void Metric::ScheduleSend()
{
if (_enabled)
{
// Calculate the expiration time
auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(_updateInterval);
_batchTimer->expires_at(expirationTime);
_batchTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(_updateInterval));
_batchTimer->async_wait(std::bind(&Metric::SendBatch, this));
}
else
@@ -281,9 +280,7 @@ void Metric::ScheduleOverallStatusLog()
{
if (_enabled)
{
// Calculate the expiration time _overallStatusTimerInterval from now
auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(_overallStatusTimerInterval);
_overallStatusTimer->expires_at(expirationTime);
_overallStatusTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(_overallStatusTimerInterval));
_overallStatusTimer->async_wait([this](const boost::system::error_code&)
{
_overallStatusTimerTriggered = true;
+5 -12
View File
@@ -38,6 +38,7 @@
#include "RealmList.h"
#include "SecretMgr.h"
#include "SharedDefines.h"
#include "SteadyTimer.h"
#include "Util.h"
#include <boost/asio/signal_set.hpp>
#include <boost/program_options.hpp>
@@ -179,17 +180,13 @@ int main(int argc, char** argv)
int32 dbPingInterval = sConfigMgr->GetOption<int32>("MaxPingTime", 30);
std::shared_ptr<boost::asio::steady_timer> dbPingTimer = std::make_shared<boost::asio::steady_timer>(*ioContext);
// Calculate the expiration time
auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(dbPingInterval);
dbPingTimer->expires_at(expirationTime);
dbPingTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(dbPingInterval * MINUTE));
dbPingTimer->async_wait(std::bind(&KeepDatabaseAliveHandler, std::weak_ptr<boost::asio::steady_timer>(dbPingTimer), dbPingInterval, std::placeholders::_1));
int32 banExpiryCheckInterval = sConfigMgr->GetOption<int32>("BanExpiryCheckInterval", 60);
std::shared_ptr<boost::asio::steady_timer> banExpiryCheckTimer = std::make_shared<boost::asio::steady_timer>(*ioContext);
// Calculate the expiration time
auto expirationTimeBanExpiry = std::chrono::steady_clock::now() + std::chrono::seconds(banExpiryCheckInterval);
banExpiryCheckTimer->expires_at(expirationTimeBanExpiry);
banExpiryCheckTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(banExpiryCheckInterval));
banExpiryCheckTimer->async_wait(std::bind(&BanExpiryHandler, std::weak_ptr<boost::asio::steady_timer>(banExpiryCheckTimer), banExpiryCheckInterval, std::placeholders::_1));
// Start the io service worker loop
@@ -252,9 +249,7 @@ void KeepDatabaseAliveHandler(std::weak_ptr<boost::asio::steady_timer> dbPingTim
LOG_INFO("server.authserver", "Ping MySQL to keep connection alive");
LoginDatabase.KeepAlive();
// Calculate the expiration time
auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(dbPingInterval);
dbPingTimer->expires_at(expirationTime);
dbPingTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(dbPingInterval));
dbPingTimer->async_wait(std::bind(&KeepDatabaseAliveHandler, dbPingTimerRef, dbPingInterval, std::placeholders::_1));
}
}
@@ -269,9 +264,7 @@ void BanExpiryHandler(std::weak_ptr<boost::asio::steady_timer> banExpiryCheckTim
LoginDatabase.Execute(LoginDatabase.GetPreparedStatement(LOGIN_DEL_EXPIRED_IP_BANS));
LoginDatabase.Execute(LoginDatabase.GetPreparedStatement(LOGIN_UPD_EXPIRED_ACCOUNT_BANS));
// Calculate the expiration time
auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(banExpiryCheckInterval);
banExpiryCheckTimer->expires_at(expirationTime);
banExpiryCheckTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(banExpiryCheckInterval));
banExpiryCheckTimer->async_wait(std::bind(&BanExpiryHandler, banExpiryCheckTimerRef, banExpiryCheckInterval, std::placeholders::_1));
}
}
+3 -6
View File
@@ -47,6 +47,7 @@
#include "ScriptMgr.h"
#include "SecretMgr.h"
#include "SharedDefines.h"
#include "SteadyTimer.h"
#include "World.h"
#include "WorldSocket.h"
#include "WorldSocketMgr.h"
@@ -90,9 +91,7 @@ public:
static void Start(std::shared_ptr<FreezeDetector> const& freezeDetector)
{
// Calculate the expiration time 5seconds from now
auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(5);
freezeDetector->_timer.expires_at(expirationTime);
freezeDetector->_timer.expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(5));
freezeDetector->_timer.async_wait(std::bind(&FreezeDetector::Handler, std::weak_ptr<FreezeDetector>(freezeDetector), std::placeholders::_1));
}
@@ -644,9 +643,7 @@ void FreezeDetector::Handler(std::weak_ptr<FreezeDetector> freezeDetectorRef, bo
}
}
// Calculate the expiration time
auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(1);
freezeDetector->_timer.expires_at(expirationTime);
freezeDetector->_timer.expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(1));
freezeDetector->_timer.async_wait(std::bind(&FreezeDetector::Handler, freezeDetectorRef, std::placeholders::_1));
}
}
@@ -2047,11 +2047,18 @@ WaterBreath.Timer = 180000
EnableLowLevelRegenBoost = 1
#
# Rate.MoveSpeed
# Description: Movement speed rate.
# Rate.MoveSpeed.Player
# Description: Movement speed rate for players.
# Default: 1
Rate.MoveSpeed = 1
Rate.MoveSpeed.Player = 1
#
# Rate.MoveSpeed.NPC
# Description: Movement speed rate for NPCs.
# Default: 1
Rate.MoveSpeed.NPC = 1
#
# Rate.Damage.Fall
@@ -86,6 +86,7 @@ void WorldDatabaseConnection::DoPrepareStatements()
PrepareStatement(WORLD_INS_CREATURE, "INSERT INTO creature (guid, id1, id2, id3, map, spawnMask, phaseMask, equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, wander_distance, currentwaypoint, curhealth, curmana, MovementType, npcflag, unit_flags, dynamicflags) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(WORLD_DEL_GAME_EVENT_CREATURE, "DELETE FROM game_event_creature WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(WORLD_DEL_GAME_EVENT_MODEL_EQUIP, "DELETE FROM game_event_model_equip WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(WORLD_SEL_GAME_EVENT_NPC_VENDOR, "SELECT eventEntry, guid, item, maxcount, incrtime, ExtendedCost FROM game_event_npc_vendor ORDER BY guid, slot ASC", CONNECTION_SYNCH);
PrepareStatement(WORLD_INS_GAMEOBJECT, "INSERT INTO gameobject (guid, id, map, spawnMask, phaseMask, position_x, position_y, position_z, orientation, rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(WORLD_INS_DISABLES, "INSERT INTO disables (entry, sourceType, flags, comment) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(WORLD_SEL_DISABLES, "SELECT entry FROM disables WHERE entry = ? AND sourceType = ?", CONNECTION_SYNCH);
@@ -92,6 +92,7 @@ enum WorldDatabaseStatements : uint32
WORLD_INS_CREATURE,
WORLD_DEL_GAME_EVENT_CREATURE,
WORLD_DEL_GAME_EVENT_MODEL_EQUIP,
WORLD_SEL_GAME_EVENT_NPC_VENDOR,
WORLD_INS_GAMEOBJECT,
WORLD_SEL_DISABLES,
WORLD_INS_DISABLES,
@@ -156,7 +156,7 @@ void AuctionHouseWorkerThread::SearchListRequest(AuctionSearchListRequest const&
if (!searchListRequest.searchInfo.sorting.empty() && auctionEntries.size() > MAX_AUCTIONS_PER_PAGE)
{
AuctionSorter sorter(&searchListRequest.searchInfo.sorting, searchListRequest.playerInfo.locdbc_idx);
AuctionSorter sorter(&searchListRequest.searchInfo.sorting, searchListRequest.playerInfo.loc_idx);
std::sort(auctionEntries.begin(), auctionEntries.end(), sorter);
}
@@ -326,7 +326,7 @@ void AuctionHouseWorkerThread::BuildListAuctionItems(AuctionSearchListRequest co
// No need to do any of this if no search term was entered
if (!searchRequest.searchInfo.wsearchedname.empty())
{
if (Aitem.itemName[searchRequest.playerInfo.locdbc_idx].find(searchRequest.searchInfo.wsearchedname) == std::wstring::npos)
if (Aitem.itemName[searchRequest.playerInfo.loc_idx].find(searchRequest.searchInfo.wsearchedname) == std::wstring::npos)
continue;
}
@@ -274,6 +274,11 @@ void TempSummon::InitSummon()
}
}
void TempSummon::UpdateObjectVisibilityOnCreate()
{
WorldObject::UpdateObjectVisibility(true);
}
void TempSummon::SetTempSummonType(TempSummonType type)
{
m_type = type;
@@ -45,6 +45,7 @@ public:
virtual void InitStats(uint32 lifetime);
virtual void InitSummon();
virtual void UnSummon(uint32 msTime = 0);
void UpdateObjectVisibilityOnCreate() override;
void RemoveFromWorld() override;
void SetTempSummonType(TempSummonType type);
void SaveToDB(uint32 /*mapid*/, uint8 /*spawnMask*/, uint32 /*phaseMask*/) override {}
+3 -1
View File
@@ -2274,7 +2274,9 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
summon->InitSummon();
//ObjectAccessor::UpdateObjectVisibility(summon);
// call MoveInLineOfSight for nearby creatures
Acore::AIRelocationNotifier notifier(*summon);
Cell::VisitAllObjects(summon, notifier, GetVisibilityRange());
return summon;
}
+1
View File
@@ -558,6 +558,7 @@ public:
void DestroyForNearbyPlayers();
virtual void UpdateObjectVisibility(bool forced = true, bool fromUpdate = false);
virtual void UpdateObjectVisibilityOnCreate() { UpdateObjectVisibility(true); }
void BuildUpdate(UpdateDataMapType& data_map, UpdatePlayerSet& player_set) override;
void GetCreaturesWithEntryInRange(std::list<Creature*>& creatureList, float radius, uint32 entry);
+3 -3
View File
@@ -1362,11 +1362,11 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
}
case NPC_ARMY_OF_THE_DEAD:
{
AddAura(SPELL_HUNTER_PET_SCALING_04, this);
AddAura(SPELL_DK_PET_SCALING_01, this);
AddAura(SPELL_DK_ARMY_OF_THE_DEAD_PASSIVE, this);
AddAura(SPELL_DK_PET_SCALING_02, this);
AddAura(SPELL_DK_PET_SCALING_03, this);
AddAura(SPELL_PET_AVOIDANCE, this);
AddAura(SPELL_DK_AVOIDANCE, this);
AddAura(SPELL_PET_SCALING_MASTER_06, this);
SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4)));
SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4)));
+7 -3
View File
@@ -134,7 +134,9 @@ enum NPCEntries
enum PetScalingSpells
{
SPELL_PET_AVOIDANCE = 32233,
SPELL_PET_SCALING_MASTER_06 = 67561, // Serverside - Pet Scaling - Master Spell 06 - Spell Hit, Expertise, Spell Penetration
// Hunter
SPELL_HUNTER_PET_SCALING_01 = 34902,
SPELL_HUNTER_PET_SCALING_02 = 34903,
SPELL_HUNTER_PET_SCALING_03 = 34904,
@@ -190,9 +192,11 @@ enum PetScalingSpells
// Death Knight
SPELL_ORC_RACIAL_COMMAND_DK = 65221,
SPELL_NIGHT_OF_THE_DEAD_AVOIDANCE = 62137,
SPELL_DK_PET_SCALING_01 = 51996,
SPELL_DK_PET_SCALING_02 = 54566,
SPELL_DK_PET_SCALING_03 = 61697
SPELL_DK_PET_SCALING_01 = 54566,
SPELL_DK_PET_SCALING_02 = 51996,
SPELL_DK_PET_SCALING_03 = 61697,
SPELL_DK_AVOIDANCE = 65220,
SPELL_DK_ARMY_OF_THE_DEAD_PASSIVE = 49040,
};
#define PET_FOLLOW_DIST 1.0f
+1 -1
View File
@@ -2419,7 +2419,7 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate, bool isLFGReward)
// Favored experience increase START
uint32 zone = GetZoneId();
float favored_exp_mult = 0;
if ((zone == 3483 || zone == 3562 || zone == 3836 || zone == 3713 || zone == 3714) && (HasAura(32096) || HasAura(32098)))
if ((zone == 3483 || zone == 3562 || zone == 3836 || zone == 3713 || zone == 3714) && HasAnyAuras(32096 /*Thrallmar's Favor*/, 32098 /*Honor Hold's Favor*/))
favored_exp_mult = 0.05f; // Thrallmar's Favor and Honor Hold's Favor
xp = uint32(xp * (1 + favored_exp_mult));
+1 -1
View File
@@ -444,7 +444,7 @@ struct Runes
struct EnchantDuration
{
EnchantDuration() = default;;
EnchantDuration() = default;
EnchantDuration(Item* _item, EnchantmentSlot _slot, uint32 _leftduration) : item(_item), slot(_slot),
leftduration(_leftduration) { ASSERT(item); };
@@ -38,7 +38,7 @@ void Player::_LoadCharacterSettings(PreparedQueryResult result)
{
Field* fields = result->Fetch();
std::string source = fields[0].Get<std::string>();;
std::string source = fields[0].Get<std::string>();
std::string data = fields[1].Get<std::string>();
std::vector<std::string_view> tokens = Acore::Tokenize(data, ' ', false);
@@ -6723,7 +6723,7 @@ bool Player::Satisfy(DungeonProgressionRequirements const* ar, uint32 target_map
if (DisableMgr::IsDisabledFor(DISABLE_TYPE_MAP, target_map, this))
{
GetSession()->SendAreaTriggerMessage("%s", GetSession()->GetAcoreString(LANG_INSTANCE_CLOSED));
GetSession()->SendAreaTriggerMessage("{}", GetSession()->GetAcoreString(LANG_INSTANCE_CLOSED));
return false;
}
+24 -1
View File
@@ -5695,6 +5695,29 @@ uint32 Unit::GetAuraCount(uint32 spellId) const
return count;
}
bool Unit::HasAuras(SearchMethod sm, std::vector<uint32>& spellIds) const
{
if (sm == SearchMethod::MatchAll)
{
for (auto const& spellId : spellIds)
if (!HasAura(spellId))
return false;
return true;
}
else if (sm == SearchMethod::MatchAny)
{
for (auto const& spellId : spellIds)
if (HasAura(spellId))
return true;
return false;
}
else
{
LOG_ERROR("entities.unit", "Unit::HasAuras using non-supported SearchMethod {}", sm);
return false;
}
}
bool Unit::HasAura(uint32 spellId, ObjectGuid casterGUID, ObjectGuid itemCasterGUID, uint8 reqEffMask) const
{
if (GetAuraApplication(spellId, casterGUID, itemCasterGUID, reqEffMask))
@@ -21307,7 +21330,7 @@ bool Unit::IsInDisallowedMountForm() const
return true;
}
if (!(shapeshift->flags1 & 0x1))
if (!(shapeshift->flags1 & SHAPESHIFT_FLAG_STANCE))
{
return true;
}
+50
View File
@@ -558,6 +558,12 @@ enum CommandStates : uint8
COMMAND_ABANDON = 3
};
enum class SearchMethod
{
MatchAll,
MatchAny
};
typedef std::list<Player*> SharedVisionList;
struct AttackPosition {
@@ -1367,6 +1373,50 @@ public:
[[nodiscard]] bool HasAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid caster = ObjectGuid::Empty) const;
[[nodiscard]] uint32 GetAuraCount(uint32 spellId) const;
/**
* @brief Check if unit has ANY or ALL specified auras.
*
* @param sm The search method to use
* - SearchMethod::MatchAll : The function checks for all of the spell id's on the unit.
* - SearchMethod::MatchAny : The function checks for any of the spell id's on the unit.
*
* @param spellIds List of spell id's to check for on the unit.
*
* @return Returns true if the search method condition is met. Otherwise false.
*/
bool HasAuras(SearchMethod sm, std::vector<uint32>& spellIds) const;
/**
* @brief Checks if the unit has ANY specified auras.
*
* @tparam Auras Can be any type convertible to uint32.
* @param spellIds List of spell id's to check for on the unit.
*
* @return Returns true if the unit has ANY of the specified auras. Otherwise false.
*/
template <typename... Auras>
bool HasAnyAuras(Auras... spellIds) const
{
std::vector<uint32> spellList = { static_cast<uint32>(spellIds)... };
return HasAuras(SearchMethod::MatchAny, spellList);
}
/**
* @brief Checks if the unit has ALL specified auras.
*
* @tparam Auras Can be any type convertible to uint32.
* @param spellIds List of spell id's to check for on the unit.
*
* @return Returns true if the unit has ALL of the specified auras. Otherwise false.
*/
template <typename... Auras>
bool HasAllAuras(Auras... spellIds) const
{
std::vector<uint32> spellList = { static_cast<uint32>(spellIds)... };
return HasAuras(SearchMethod::MatchAll, spellList);
}
[[nodiscard]] bool HasAura(uint32 spellId, ObjectGuid casterGUID = ObjectGuid::Empty, ObjectGuid itemCasterGUID = ObjectGuid::Empty, uint8 reqEffMask = 0) const;
[[nodiscard]] bool HasAuraType(AuraType auraType) const;
[[nodiscard]] bool HasAuraTypeWithCaster(AuraType auratype, ObjectGuid caster) const;
@@ -99,6 +99,27 @@ enum ShapeshiftForm
FORM_SPIRITOFREDEMPTION = 0x20
};
enum ShapeshiftFlags
{
SHAPESHIFT_FLAG_STANCE = 0x00000001, // Form allows various player activities, which normally cause "You can't X while shapeshifted." errors (npc/go interaction, item use, etc)
SHAPESHIFT_FLAG_NOT_TOGGLEABLE = 0x00000002, // NYI
SHAPESHIFT_FLAG_PERSIST_ON_DEATH = 0x00000004, // NYI
SHAPESHIFT_FLAG_CAN_NPC_INTERACT = 0x00000008, // Form unconditionally allows talking to NPCs while shapeshifted (even if other activities are disabled)
SHAPESHIFT_FLAG_DONT_USE_WEAPON = 0x00000010, // NYI
SHAPESHIFT_FLAG_AGILITY_ATTACK_BONUS = 0x00000020, // Druid Cat form
SHAPESHIFT_FLAG_CAN_USE_EQUIPPED_ITEMS = 0x00000040, // NYI
SHAPESHIFT_FLAG_CAN_USE_ITEMS = 0x00000080, // NYI
SHAPESHIFT_FLAG_DONT_AUTO_UNSHIFT = 0x00000100, // Handled at client side
SHAPESHIFT_FLAG_CONSIDERED_DEAD = 0x00000200, // NYI
SHAPESHIFT_FLAG_CAN_ONLY_CAST_SHAPESHIFT_SPELLS = 0x00000400, // NYI
SHAPESHIFT_FLAG_STANCE_CANCEL_AT_FLIGHTMASTER = 0x00000800, // NYI
SHAPESHIFT_FLAG_NO_EMOTE_SOUNDS = 0x00001000, // NYI
SHAPESHIFT_FLAG_NO_TRIGGER_TELEPORT = 0x00002000, // NYI
SHAPESHIFT_FLAG_CANNOT_CHANGE_EQUIPPED_ITEMS = 0x00004000, // NYI
SHAPESHIFT_FLAG_RESUMMON_PETS_ON_UNSHIFT = 0x00008000, // NYI
SHAPESHIFT_FLAG_CANNOT_USE_GAME_OBJECTS = 0x00010000, // NYI
};
// low byte (0 from 0..3) of UNIT_FIELD_BYTES_2
enum SheathState
{
+87 -63
View File
@@ -236,6 +236,92 @@ void GameEventMgr::StopEvent(uint16 event_id, bool overwrite)
sScriptMgr->OnGameEventStop(event_id);
}
void GameEventMgr::LoadEventVendors()
{
uint32 oldMSTime = getMSTime();
WorldDatabasePreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_GAME_EVENT_NPC_VENDOR);
PreparedQueryResult result = WorldDatabase.Query(stmt);
if (!result)
{
LOG_WARN("server.loading", ">> Loaded 0 Vendor Additions In Game Events. DB Table `game_event_npc_vendor` Is Empty.");
LOG_INFO("server.loading", " ");
return;
}
uint32 count = 0;
std::unordered_set<uint8> processedEvents;
do
{
Field* fields = result->Fetch();
uint8 eventId = fields[0].Get<uint8>();
ObjectGuid::LowType guid = fields[1].Get<uint32>();
if (eventId >= mGameEventVendors.size())
{
LOG_ERROR("sql.sql", "Table `game_event_npc_vendor` has invalid eventEntry ({}) for GUID ({}), skipped.", eventId, guid);
continue;
}
// Clear existing vendors for this event only once
if (processedEvents.find(eventId) == processedEvents.end())
{
// Remove vendor items from in-memory data
for (auto& entry : mGameEventVendors[eventId])
{
sObjectMgr->RemoveVendorItem(entry.entry, entry.item, false);
}
mGameEventVendors[eventId].clear();
processedEvents.insert(eventId);
}
NPCVendorList& vendors = mGameEventVendors[eventId];
NPCVendorEntry newEntry;
newEntry.item = fields[2].Get<uint32>();
newEntry.maxcount = fields[3].Get<uint32>();
newEntry.incrtime = fields[4].Get<uint32>();
newEntry.ExtendedCost = fields[5].Get<uint32>();
// Get the event NPC flag for validity check
uint32 event_npc_flag = 0;
NPCFlagList& flist = mGameEventNPCFlags[eventId];
for (NPCFlagList::const_iterator itr = flist.begin(); itr != flist.end(); ++itr)
{
if (itr->first == guid)
{
event_npc_flag = itr->second;
break;
}
}
// Get creature entry
newEntry.entry = 0;
if (CreatureData const* data = sObjectMgr->GetCreatureData(guid))
newEntry.entry = data->id1;
// Validate vendor item
if (!sObjectMgr->IsVendorItemValid(newEntry.entry, newEntry.item, newEntry.maxcount, newEntry.incrtime, newEntry.ExtendedCost, nullptr, nullptr, event_npc_flag))
{
LOG_ERROR("sql.sql", "Table `game_event_npc_vendor` has invalid item ({}) for guid ({}) for event ({}), skipped.",
newEntry.item, newEntry.entry, eventId);
continue;
}
// Add the item to the vendor if event is active
if (IsEventActive(eventId))
sObjectMgr->AddVendorItem(newEntry.entry, newEntry.item, newEntry.maxcount, newEntry.incrtime, newEntry.ExtendedCost, false);
vendors.push_back(newEntry);
++count;
} while (result->NextRow());
LOG_INFO("server.loading", ">> Loaded {} Vendor Additions In Game Events in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
LOG_INFO("server.loading", " ");
}
void GameEventMgr::LoadFromDB()
{
{
@@ -852,69 +938,7 @@ void GameEventMgr::LoadFromDB()
}
LOG_INFO("server.loading", "Loading Game Event Vendor Additions Data...");
{
uint32 oldMSTime = getMSTime();
// 0 1 2 3 4 5
QueryResult result = WorldDatabase.Query("SELECT eventEntry, guid, item, maxcount, incrtime, ExtendedCost FROM game_event_npc_vendor ORDER BY guid, slot ASC");
if (!result)
{
LOG_WARN("server.loading", ">> Loaded 0 Vendor Additions In Game Events. DB Table `game_event_npc_vendor` Is Empty.");
LOG_INFO("server.loading", " ");
}
else
{
uint32 count = 0;
do
{
Field* fields = result->Fetch();
uint8 event_id = fields[0].Get<uint8>();
if (event_id >= mGameEventVendors.size())
{
LOG_ERROR("sql.sql", "`game_event_npc_vendor` game event id ({}) is out of range compared to max event id in `game_event`", event_id);
continue;
}
NPCVendorList& vendors = mGameEventVendors[event_id];
NPCVendorEntry newEntry;
ObjectGuid::LowType guid = fields[1].Get<uint32>();
newEntry.item = fields[2].Get<uint32>();
newEntry.maxcount = fields[3].Get<uint32>();
newEntry.incrtime = fields[4].Get<uint32>();
newEntry.ExtendedCost = fields[5].Get<uint32>();
// get the event npc flag for checking if the npc will be vendor during the event or not
uint32 event_npc_flag = 0;
NPCFlagList& flist = mGameEventNPCFlags[event_id];
for (NPCFlagList::const_iterator itr = flist.begin(); itr != flist.end(); ++itr)
{
if (itr->first == guid)
{
event_npc_flag = itr->second;
break;
}
}
// get creature entry
newEntry.entry = 0;
if (CreatureData const* data = sObjectMgr->GetCreatureData(guid))
newEntry.entry = data->id1;
// check validity with event's npcflag
if (!sObjectMgr->IsVendorItemValid(newEntry.entry, newEntry.item, newEntry.maxcount, newEntry.incrtime, newEntry.ExtendedCost, nullptr, nullptr, event_npc_flag))
continue;
vendors.push_back(newEntry);
++count;
} while (result->NextRow());
LOG_INFO("server.loading", ">> Loaded {} Vendor Additions In Game Events in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
LOG_INFO("server.loading", " ");
}
}
LoadEventVendors();
LOG_INFO("server.loading", "Loading Game Event Battleground Data...");
{
+2
View File
@@ -121,6 +121,8 @@ public:
void StopEvent(uint16 event_id, bool overwrite = false);
void HandleQuestComplete(uint32 quest_id); // called on world event type quest completions
uint32 GetNPCFlag(Creature* cr);
// Load the game event npc vendor table from the DB
void LoadEventVendors();
[[nodiscard]] uint32 GetHolidayEventId(uint32 holidayId) const;
private:
void SendWorldStateUpdate(Player* player, uint16 event_id);
+1 -1
View File
@@ -268,7 +268,7 @@ void WorldSession::HandleWhoOpcode(WorldPacket& recvData)
return;
wstrToLower(wpacketPlayerName);
wstrToLower(wpacketGuildName);;
wstrToLower(wpacketGuildName);
// client send in case not set max level value 100 but Acore supports 255 max level,
// update it to show GMs with characters after 100 level
+1 -1
View File
@@ -108,7 +108,7 @@ class InstanceSaveMgr
friend class InstanceSave;
private:
InstanceSaveMgr() = default;;
InstanceSaveMgr() = default;
~InstanceSaveMgr();
public:
+1 -1
View File
@@ -561,7 +561,7 @@ bool Map::AddToMap(T* obj, bool checkTransport)
if (obj->IsInWorld())
{
ASSERT(obj->IsInGrid());
obj->UpdateObjectVisibility(true);
obj->UpdateObjectVisibilityOnCreate();
return true;
}
+1 -1
View File
@@ -5832,7 +5832,7 @@ SpellCastResult Spell::CheckCast(bool strict)
if (effInfo->ApplyAuraName == SPELL_AURA_MOD_SHAPESHIFT)
{
SpellShapeshiftFormEntry const* shapeShiftEntry = sSpellShapeshiftFormStore.LookupEntry(effInfo->MiscValue);
if (shapeShiftEntry && (shapeShiftEntry->flags1 & 1) == 0) // unk flag
if (shapeShiftEntry && (shapeShiftEntry->flags1 & SHAPESHIFT_FLAG_STANCE) == 0)
checkMask |= VEHICLE_SEAT_FLAG_UNCONTROLLED;
break;
}
+2 -2
View File
@@ -1457,7 +1457,7 @@ SpellCastResult SpellInfo::CheckShapeshift(uint32 form) const
LOG_ERROR("spells", "GetErrorAtShapeshiftedCast: unknown shapeshift {}", form);
return SPELL_CAST_OK;
}
actAsShifted = !(shapeInfo->flags1 & 1); // shapeshift acts as normal form for spells
actAsShifted = !(shapeInfo->flags1 & SHAPESHIFT_FLAG_STANCE); // shapeshift acts as normal form for spells
}
if (actAsShifted)
@@ -1477,7 +1477,7 @@ SpellCastResult SpellInfo::CheckShapeshift(uint32 form) const
// Check if stance disables cast of not-stance spells
// Example: cannot cast any other spells in zombie or ghoul form
/// @todo: Find a way to disable use of these spells clientside
if (shapeInfo && shapeInfo->flags1 & 0x400)
if (shapeInfo && (shapeInfo->flags1 & SHAPESHIFT_FLAG_CAN_ONLY_CAST_SHAPESHIFT_SPELLS))
{
if (!(stanceMask & Stances))
return SPELL_FAILED_ONLY_SHAPESHIFT;
-10
View File
@@ -2913,16 +2913,6 @@ void SpellMgr::LoadSpellInfoCustomAttributes()
}
}
break;
case SPELL_AURA_PERIODIC_HEAL:
case SPELL_AURA_PERIODIC_DAMAGE:
case SPELL_AURA_PERIODIC_DAMAGE_PERCENT:
case SPELL_AURA_PERIODIC_LEECH:
case SPELL_AURA_PERIODIC_MANA_LEECH:
case SPELL_AURA_PERIODIC_HEALTH_FUNNEL:
case SPELL_AURA_PERIODIC_ENERGIZE:
case SPELL_AURA_OBS_MOD_HEALTH:
case SPELL_AURA_OBS_MOD_POWER:
case SPELL_AURA_POWER_BURN:
case SPELL_AURA_TRACK_CREATURES:
case SPELL_AURA_MOD_RANGED_HASTE:
case SPELL_AURA_MOD_POSSESS_PET:
+2 -1
View File
@@ -518,7 +518,8 @@ enum Rates
RATE_DURABILITY_LOSS_PARRY,
RATE_DURABILITY_LOSS_ABSORB,
RATE_DURABILITY_LOSS_BLOCK,
RATE_MOVESPEED,
RATE_MOVESPEED_PLAYER,
RATE_MOVESPEED_NPC,
RATE_MISS_CHANCE_MULTIPLIER_TARGET_CREATURE,
RATE_MISS_CHANCE_MULTIPLIER_TARGET_PLAYER,
MAX_RATES
+16 -5
View File
@@ -576,13 +576,24 @@ void World::LoadConfigSettings(bool reload)
LOG_ERROR("server.loading", "Rate.Talent.Pet ({}) must be > 0. Using 1 instead.", _rate_values[RATE_TALENT_PET]);
_rate_values[RATE_TALENT_PET] = 1.0f;
}
_rate_values[RATE_MOVESPEED] = sConfigMgr->GetOption<float>("Rate.MoveSpeed", 1.0f);
if (_rate_values[RATE_MOVESPEED] < 0)
// Controls Player movespeed rate.
_rate_values[RATE_MOVESPEED_PLAYER] = sConfigMgr->GetOption<float>("Rate.MoveSpeed.Player", 1.0f);
if (_rate_values[RATE_MOVESPEED_PLAYER] < 0)
{
LOG_ERROR("server.loading", "Rate.MoveSpeed ({}) must be > 0. Using 1 instead.", _rate_values[RATE_MOVESPEED]);
_rate_values[RATE_MOVESPEED] = 1.0f;
LOG_ERROR("server.loading", "Rate.MoveSpeed.Player ({}) must be > 0. Using 1 instead.", _rate_values[RATE_MOVESPEED_PLAYER]);
_rate_values[RATE_MOVESPEED_PLAYER] = 1.0f;
}
for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) playerBaseMoveSpeed[i] = baseMoveSpeed[i] * _rate_values[RATE_MOVESPEED];
for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) playerBaseMoveSpeed[i] = baseMoveSpeed[i] * _rate_values[RATE_MOVESPEED_PLAYER];
// Controls all npc movespeed rate.
_rate_values[RATE_MOVESPEED_NPC] = sConfigMgr->GetOption<float>("Rate.MoveSpeed.NPC", 1.0f);
if (_rate_values[RATE_MOVESPEED_NPC] < 0)
{
LOG_ERROR("server.loading", "Rate.MoveSpeed.NPC ({}) must be > 0. Using 1 instead.", _rate_values[RATE_MOVESPEED_NPC]);
_rate_values[RATE_MOVESPEED_NPC] = 1.0f;
}
for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) baseMoveSpeed[i] *= _rate_values[RATE_MOVESPEED_NPC];
_rate_values[RATE_CORPSE_DECAY_LOOTED] = sConfigMgr->GetOption<float>("Rate.Corpse.Decay.Looted", 0.5f);
_rate_values[RATE_DURABILITY_LOSS_ON_DEATH] = sConfigMgr->GetOption<float>("DurabilityLoss.OnDeath", 10.0f);
+25 -13
View File
@@ -374,20 +374,24 @@ public:
return true;
}
static bool HandleNpcDeleteCommand(ChatHandler* handler)
static bool HandleNpcDeleteCommand(ChatHandler* handler, Optional<ObjectGuid::LowType> lowGuid)
{
Creature* unit = handler->getSelectedCreature();
Creature* creature;
if (lowGuid.has_value())
creature = handler->GetCreatureFromPlayerMapByDbGuid(*lowGuid);
else
creature = handler->getSelectedCreature();
if (!unit || unit->IsPet() || unit->IsTotem())
if (!creature || creature->IsPet() || creature->IsTotem())
{
handler->SendErrorMessage(LANG_SELECT_CREATURE);
return false;
}
// Delete the creature
unit->CombatStop();
unit->DeleteFromDB();
unit->AddObjectToRemoveList();
creature->CombatStop();
creature->DeleteFromDB();
creature->AddObjectToRemoveList();
handler->SendSysMessage(LANG_COMMAND_DELCREATMESSAGE);
@@ -712,25 +716,33 @@ public:
}
//move selected creature
static bool HandleNpcMoveCommand(ChatHandler* handler)
static bool HandleNpcMoveCommand(ChatHandler* handler, Optional<ObjectGuid::LowType> guid)
{
Creature* creature = handler->getSelectedCreature();
Creature* creature;
if (guid.has_value())
creature = handler->GetCreatureFromPlayerMapByDbGuid(*guid);
else
creature = handler->getSelectedCreature();
if (!creature)
return false;
ObjectGuid::LowType lowguid = creature->GetSpawnId();
ObjectGuid::LowType lowGuid;
if (guid.has_value())
lowGuid = *guid;
else
lowGuid = creature->GetSpawnId();
CreatureData const* data = sObjectMgr->GetCreatureData(lowguid);
CreatureData const* data = sObjectMgr->GetCreatureData(lowGuid);
if (!data)
{
handler->SendErrorMessage(LANG_COMMAND_CREATGUIDNOTFOUND, lowguid);
handler->SendErrorMessage(LANG_COMMAND_CREATGUIDNOTFOUND, lowGuid);
return false;
}
if (handler->GetSession()->GetPlayer()->GetMapId() != data->mapid)
{
handler->SendErrorMessage(LANG_COMMAND_CREATUREATSAMEMAP, lowguid);
handler->SendErrorMessage(LANG_COMMAND_CREATUREATSAMEMAP, lowGuid);
return false;
}
@@ -764,7 +776,7 @@ public:
stmt->SetData(1, y);
stmt->SetData(2, z);
stmt->SetData(3, o);
stmt->SetData(4, lowguid);
stmt->SetData(4, lowGuid);
WorldDatabase.Execute(stmt);
@@ -135,6 +135,7 @@ public:
{ "npc_spellclick_spells", HandleReloadSpellClickSpellsCommand, SEC_ADMINISTRATOR, Console::Yes },
{ "npc_trainer", HandleReloadNpcTrainerCommand, SEC_ADMINISTRATOR, Console::Yes },
{ "npc_vendor", HandleReloadNpcVendorCommand, SEC_ADMINISTRATOR, Console::Yes },
{ "game_event_npc_vendor", HandleReloadGameEventNPCVendorCommand, SEC_ADMINISTRATOR, Console::Yes },
{ "page_text", HandleReloadPageTextsCommand, SEC_ADMINISTRATOR, Console::Yes },
{ "pickpocketing_loot_template", HandleReloadLootTemplatesPickpocketingCommand, SEC_ADMINISTRATOR, Console::Yes },
{ "points_of_interest", HandleReloadPointsOfInterestCommand, SEC_ADMINISTRATOR, Console::Yes },
@@ -765,6 +766,14 @@ public:
return true;
}
static bool HandleReloadGameEventNPCVendorCommand(ChatHandler* handler)
{
LOG_INFO("server.loading", "Reloading `game_event_npc_vendor` Table!");
sGameEventMgr->LoadEventVendors();
handler->SendGlobalGMSysMessage("DB table `game_event_npc_vendor` reloaded.");
return true;
}
static bool HandleReloadPointsOfInterestCommand(ChatHandler* handler)
{
LOG_INFO("server.loading", "Reloading `points_of_interest` Table!");
@@ -188,13 +188,10 @@ public:
{
DoCast(player, afflictionSpellID, true);
if (player->HasAura(SPELL_BROODAF_BLUE) && player->HasAura(SPELL_BROODAF_BLACK) && player->HasAura(SPELL_BROODAF_RED) &&
player->HasAura(SPELL_BROODAF_BRONZE) && player->HasAura(SPELL_BROODAF_GREEN))
{
if (player->HasAllAuras(SPELL_BROODAF_BLUE, SPELL_BROODAF_BLACK, SPELL_BROODAF_RED, SPELL_BROODAF_BRONZE, SPELL_BROODAF_GREEN))
DoCast(player, SPELL_CHROMATIC_MUT_1);
}
}
}
events.ScheduleEvent(EVENT_AFFLICTION, 10s);
break;
case EVENT_FRENZY:
@@ -1424,6 +1424,7 @@ struct npc_chesspiece : public ScriptedAI
_instance = creature->GetInstanceScript();
_currentOrientation = GetDefaultOrientationForTeam();
_homePosition = creature->GetPosition();
_nextMoveTimer = urand(8 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
@@ -1457,6 +1458,8 @@ struct npc_chesspiece : public ScriptedAI
{
me->SetResistance(SpellSchools(i), 0);
}
me->NearTeleportTo(_homePosition);
}
void EnterEvadeMode(EvadeReason /*why*/) override
@@ -2044,6 +2047,7 @@ private:
KarazhanChessOrientationType _currentOrientation;
bool _teamControlledByRaid;
Position _homePosition;
};
struct npc_chess_move_trigger : public ScriptedAI
@@ -271,9 +271,6 @@ public:
piece->RemoveAllAuras();
piece->setDeathState(DeathState::JustRespawned);
piece->SetHealth(piece->GetMaxHealth());
float x, y, z, o;
piece->GetHomePosition(x, y, z, o);
piece->NearTeleportTo(x, y, z, o);
piece->AI()->DoAction(ACTION_CHESS_PIECE_RESET_ORIENTATION);
piece->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
piece->AI()->Reset();
@@ -161,13 +161,13 @@ struct boss_zuljin : public BossAI
Talk(SAY_AGGRO, 37s);
// Phase 1: Default (troll)
ScheduleTimedEvent(7s, [&] {
ScheduleTimedEvent(12s, 29s, [&] {
DoCastAOE(SPELL_WHIRLWIND);
}, 15s, 20s);
}, 12s, 29s);
ScheduleTimedEvent(8s, [&] {
ScheduleTimedEvent(7s, 23s, [&] {
DoCastRandomTarget(SPELL_GRIEVOUS_THROW, 0, 100.0f);
}, 10s);
}, 7s, 23s);
me->m_Events.AddEventAtOffset([&]() {
DoCastSelf(SPELL_BERSERK, true);
@@ -177,9 +177,9 @@ struct boss_zuljin : public BossAI
// Phase 2: Bear Form.
ScheduleHealthCheckEvent({ 80 }, [&] {
EnterPhase(PHASE_BEAR);
ScheduleTimedEvent(7s, [&] {
ScheduleTimedEvent(8s, [&] {
DoCastAOE(SPELL_CREEPING_PARALYSIS);
}, 20s);
}, 26s, 30s);
ScheduleTimedEvent(1s, [&] {
if (!me->HasSpellCooldown(SPELL_OVERPOWER) && me->GetVictim() && me->GetComboPoints())
@@ -229,17 +229,17 @@ struct boss_zuljin : public BossAI
me->m_Events.CancelEventGroup(GROUP_LYNX);
EnterPhase(PHASE_DRAGONHAWK);
ScheduleTimedEvent(5s, [&] {
ScheduleTimedEvent(12s, 26s, [&] {
DoCastSelf(SPELL_FLAME_WHIRL);
}, 12s);
}, 12s, 26s);
ScheduleTimedEvent(6s, [&] {
ScheduleTimedEvent(11s, 42s, [&] {
DoCastRandomTarget(SPELL_SUMMON_PILLAR);
}, 10s);
}, 5s, 25s);
ScheduleTimedEvent(7s, [&] {
ScheduleTimedEvent(16s, 26s, [&] {
DoCastAOE(SPELL_FLAME_BREATH);
}, 10s);
}, 6s, 25s);
});
}
@@ -53,6 +53,10 @@ DoorData const doorData[] =
{ GO_DOOR_HALAZZI, DATA_HALAZZI, DOOR_TYPE_PASSAGE },
{ GO_LYNX_TEMPLE_ENTRANCE, DATA_HALAZZI, DOOR_TYPE_ROOM },
{ GO_DOOR_AKILZON, DATA_AKILZON, DOOR_TYPE_ROOM },
{ GO_ALTAR_TORCH_EAGLE_GOD, DATA_AKILZON, DOOR_TYPE_PASSAGE },
{ GO_ALTAR_TORCH_DRAGONHAWK_GOD, DATA_JANALAI, DOOR_TYPE_PASSAGE },
{ GO_ALTAR_TORCH_LYNX_GOD, DATA_HALAZZI, DOOR_TYPE_PASSAGE },
{ GO_ALTAR_TORCH_BEAR_GOD, DATA_NALORAKK, DOOR_TYPE_PASSAGE },
{ 0, 0, DOOR_TYPE_ROOM } // END
};
@@ -82,7 +86,12 @@ ObjectData const summonData[] =
BossBoundaryData const boundaries =
{
{ DATA_HEXLORD, new RectangleBoundary(80.50557f, 920.9858f, 155.88986f, 1015.27563f)}
{ DATA_AKILZON, new ZRangeBoundary(72.0f, 100.0f)},
{ DATA_HALAZZI, new RectangleBoundary(304.0f, 432.0f, 1052.0f, 1156.0f)},
{ DATA_HEXLORD, new RectangleBoundary(80.50557f, 920.9858f, 155.88986f, 1015.27563f)},
{ DATA_JANALAI, new ZRangeBoundary(16.0f, 46.0f)},
{ DATA_NALORAKK, new ZRangeBoundary(38.0f, 68.0f)},
{ DATA_ZULJIN, new ZRangeBoundary(43.0f, 73.0f)}
};
class instance_zulaman : public InstanceMapScript
@@ -103,6 +112,7 @@ public:
LoadBossBoundaries(boundaries);
LoadDoorData(doorData);
LoadSummonData(summonData);
_chestLooted = 0;
for (uint8 i = 0; i < RAND_VENDOR; ++i)
RandVendor[i] = NOT_STARTED;
@@ -200,6 +210,8 @@ public:
else if (data == DONE)
_akilzonGauntlet = DONE;
}
else if (type == DATA_CHEST_LOOTED)
++_chestLooted;
}
void StartAkilzonGauntlet()
@@ -226,8 +238,12 @@ public:
_akilzonGauntlet = NOT_STARTED;
for (ObjectGuid guid : AkilzonTrash)
if (Creature* creature = instance->GetCreature(guid))
{
if (!creature->IsAlive())
creature->Respawn();
else if (creature->GetEntry() == NPC_AMINISHI_TEMPEST)
creature->AI()->DoAction(ACTION_RESET_AKILZON_GAUNTLET);
}
if (Creature* creature = GetCreature(DATA_LOOKOUT))
if (creature->isMoving())
creature->Respawn(true);
@@ -320,6 +336,8 @@ public:
return RandVendor[1];
else if (type == TYPE_AKILZON_GAUNTLET)
return _akilzonGauntlet;
else if (type == DATA_CHEST_LOOTED)
return _chestLooted;
return 0;
}
@@ -330,6 +348,7 @@ public:
}
private:
uint16 _chestLooted;
uint32 RandVendor[RAND_VENDOR];
GuidSet AkilzonTrash;
EncounterState _akilzonGauntlet = NOT_STARTED;
@@ -290,13 +290,17 @@ public:
creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
creature->GetInstanceScript()->SetData(DATA_CHEST_LOOTED, 0);
float x, y, z;
creature->GetPosition(x, y, z);
for (uint8 i = 0; i < 4; ++i)
{
if (HostageEntry[i] == creature->GetEntry())
{
creature->SummonGameObject(ChestEntry[i], x - 2, y, z, 0, 0, 0, 0, 0, 0);
GameObject* obj = creature->SummonGameObject(ChestEntry[i], x - 2, y, z, 0, 0, 0, 0, 0, 0);
if (obj)
obj->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
break;
}
}
@@ -586,7 +590,6 @@ private:
enum AmanishiTempest
{
ACTION_START_GAUNTLET = 1,
GROUP_AKILZON_GAUNTLET = 1,
SPELL_SUMMON_EAGLE = 43487,
SPELL_SUMMON_WARRIOR = 43486,
@@ -601,6 +604,11 @@ struct npc_amanishi_tempest : public ScriptedAI
{
_summons.DespawnAll();
scheduler.CancelAll();
}
void JustEngagedWith(Unit* /*who*/) override
{
scheduler.CancelGroup(GROUP_AKILZON_GAUNTLET);
scheduler.Schedule(9s, 11s, [this](TaskContext context)
{
DoCastVictim(SPELL_THUNDERCLAP);
@@ -623,8 +631,15 @@ struct npc_amanishi_tempest : public ScriptedAI
void DoAction(int32 action) override
{
if (action == ACTION_START_GAUNTLET)
if (action == ACTION_START_AKILZON_GAUNTLET)
ScheduleEvents();
else if (action == ACTION_RESET_AKILZON_GAUNTLET)
Reset();
}
void SummonedCreatureEvade(Creature* /*summon*/) override
{
EnterEvadeMode(EVADE_REASON_OTHER);
}
void EnterEvadeMode(EvadeReason why) override
@@ -635,7 +650,6 @@ struct npc_amanishi_tempest : public ScriptedAI
void ScheduleEvents()
{
me->SetInCombatWithZone();
scheduler.Schedule(29s, 53s, GROUP_AKILZON_GAUNTLET, [this](TaskContext context)
{
for (uint8 i = 0; i < 5; ++i)
@@ -652,11 +666,6 @@ struct npc_amanishi_tempest : public ScriptedAI
void UpdateAI(uint32 diff) override
{
scheduler.Update(diff);
if (!me->IsEngaged())
return;
Unit* victim = me->SelectVictim();
if (!victim || me->GetExactDist(victim) > me->GetAggroRange(victim))
return;
ScriptedAI::UpdateAI(diff);
}
@@ -665,26 +674,6 @@ private:
SummonList _summons;
};
struct npc_eagle_trash_aggro_trigger : public ScriptedAI
{
npc_eagle_trash_aggro_trigger(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) {}
void MoveInLineOfSight(Unit* who) override
{
if (!me->IsWithinDist(who, 10.0f, false)) // distance not confirmed
return;
Player* player = who->GetCharmerOrOwnerPlayerOrPlayerItself();
if (!player || player->IsGameMaster())
return;
if (_instance->GetData(TYPE_AKILZON_GAUNTLET) == NOT_STARTED)
_instance->SetData(TYPE_AKILZON_GAUNTLET, IN_PROGRESS);
}
private:
InstanceScript* _instance;
};
void AddSC_zulaman()
{
RegisterZulAmanCreatureAI(npc_forest_frog);
@@ -693,5 +682,4 @@ void AddSC_zulaman()
RegisterSpellScript(spell_ritual_of_power);
RegisterZulAmanCreatureAI(npc_amanishi_lookout);
RegisterZulAmanCreatureAI(npc_amanishi_tempest);
RegisterZulAmanCreatureAI(npc_eagle_trash_aggro_trigger);
}
@@ -41,7 +41,8 @@ enum DataTypes
DATA_HARRISON_JONES = 13,
TYPE_AKILZON_GAUNTLET = 14,
DATA_LOOKOUT = 15,
DATA_ZULJIN_GATE = 16
DATA_ZULJIN_GATE = 16,
DATA_CHEST_LOOTED = 17 // Used for hostage loot DB conditions
};
enum CreatureIds
@@ -79,7 +80,11 @@ enum GameobjectIds
GO_TANZARS_TRUNK = 186648,
GO_ASHLIS_BAG = 186672,
GO_KRAZS_PACKAGE = 186667,
GO_STRANGE_GONG = 187359
GO_STRANGE_GONG = 187359,
GO_ALTAR_TORCH_EAGLE_GOD = 187035,
GO_ALTAR_TORCH_DRAGONHAWK_GOD = 187036,
GO_ALTAR_TORCH_LYNX_GOD = 187037,
GO_ALTAR_TORCH_BEAR_GOD = 186860
};
enum MiscIds
@@ -87,6 +92,7 @@ enum MiscIds
DATA_TIMED_RUN = 0,
ACTION_START_TIMED_RUN = 0,
ACTION_START_AKILZON_GAUNTLET = 1,
ACTION_RESET_AKILZON_GAUNTLET = 2,
GROUP_TIMED_RUN = 1
};
@@ -190,6 +190,8 @@ public:
if (creature->IsSummon() && _bossWave != TO_BE_DECIDED)
{
if (_currentWave == 0)
creature->SetDisableReputationGain(true);
DoUpdateWorldState(WORLD_STATE_ENEMYCOUNT, ++trash); // Update the instance wave count on new trash spawn
_encounterNPCs.insert(creature->GetGUID()); // Used for despawning on wipe
}
@@ -447,7 +447,7 @@ class spell_mutate_explode_bug : public SpellScript
if (target->GetEntry() != NPC_QIRAJI_SCARAB && target->GetEntry() != NPC_QIRAJI_SCORPION)
return true;
if (Creature const* creature = target->ToCreature())
if (creature->HasAura(SPELL_EXPLODE_BUG) || creature->HasAura(SPELL_MUTATE_BUG))
if (creature->HasAnyAuras(SPELL_EXPLODE_BUG, SPELL_MUTATE_BUG))
return true;
return false;
@@ -473,7 +473,7 @@ public:
{
if (spell->Id == SPELL_KODO_KOMBO_ITEM)
{
if (!(caster->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) || me->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF))
if (!caster->HasAnyAuras(SPELL_KODO_KOMBO_PLAYER_BUFF, SPELL_KODO_KOMBO_DESPAWN_BUFF)
&& (me->GetEntry() == NPC_AGED_KODO || me->GetEntry() == NPC_DYING_KODO || me->GetEntry() == NPC_ANCIENT_KODO))
{
me->UpdateEntry(NPC_TAMED_KODO, nullptr, false);
@@ -494,7 +494,7 @@ public:
bool OnGossipHello(Player* player, Creature* creature) override
{
if (player->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) && creature->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF))
if (player->HasAllAuras(SPELL_KODO_KOMBO_PLAYER_BUFF, SPELL_KODO_KOMBO_DESPAWN_BUFF))
{
player->TalkedToCreature(creature->GetEntry(), ObjectGuid::Empty);
player->RemoveAurasDueToSpell(SPELL_KODO_KOMBO_PLAYER_BUFF);
@@ -63,9 +63,9 @@ public:
{
pInstance = me->GetInstanceScript();
me->SetReactState(REACT_PASSIVE);
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_RIMEFANG_GUID)))
if (Creature* rimefang = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_RIMEFANG_GUID)))
{
c->SetCanFly(true);
rimefang->SetCanFly(true);
}
}
@@ -76,28 +76,27 @@ public:
{
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
events.Reset();
if (me->HasReactState(REACT_AGGRESSIVE)) // Reset() called by EnterEvadeMode()
pInstance->SetData(DATA_TYRANNUS, NOT_STARTED);
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
if (!pInstance)
return;
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_MARTIN_OR_GORKUN_GUID)))
if (Creature* creature = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_MARTIN_OR_GORKUN_GUID)))
{
c->AI()->DoAction(1);
c->DespawnOrUnsummon();
creature->AI()->DoAction(1);
creature->DespawnOrUnsummon();
pInstance->SetGuidData(DATA_MARTIN_OR_GORKUN_GUID, ObjectGuid::Empty);
}
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_RIMEFANG_GUID)))
{
c->GetMotionMaster()->Clear();
c->GetMotionMaster()->MoveIdle();
c->RemoveAllAuras();
c->UpdatePosition(1017.3f, 168.974f, 642.926f, 5.2709f, true);
c->StopMovingOnCurrentPos();
if (Vehicle* v = c->GetVehicleKit())
v->InstallAllAccessories(false);
}
}
// Tyrannus is temporarily spawned as Rimefang's rider. If he evades, despawn Rimefang.
// Tyrannus will be respawned once Rimefang respawns.
if (Creature* rimefang = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_RIMEFANG_GUID)))
rimefang->DespawnOnEvade();
me->DespawnOrUnsummon();
}
void DoAction(int32 param) override
@@ -140,7 +139,7 @@ public:
if (TSDistCheckPos.GetExactDist(x, y, z) > 100.0f || z > TSDistCheckPos.GetPositionZ() + 20.0f || z < TSDistCheckPos.GetPositionZ() - 20.0f)
{
me->SetHealth(me->GetMaxHealth());
EnterEvadeMode();
EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
}
@@ -48,6 +48,7 @@ enum Spells
SPELL_FRENZIED_BLOODTHIRST_VISUAL = 71949,
SPELL_VAMPIRIC_BITE = 71726,
SPELL_VAMPIRIC_BITE_DUMMY = 71837,
SPELL_ESSENCE_OF_BLOOD_QUEEN = 70867,
SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_PLR = 70879,
SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL = 70872,
SPELL_FRENZIED_BLOODTHIRST = 70877,
@@ -79,24 +80,9 @@ enum Shadowmourne
SPELL_THIRST_QUENCHED = 72154,
};
#define ESSENCE_OF_BLOOD_QUEEN RAID_MODE<uint32>(70867, 71473, 71532, 71533)
#define ESSENCE_OF_BLOOD_QUEEN_PLR RAID_MODE<uint32>(70879, 71525, 71530, 71531)
#define FRENZIED_BLOODTHIRST RAID_MODE<uint32>(70877, 71474, 70877, 71474)
#define DELIRIOUS_SLASH RAID_MODE<uint32>(71623, 71624, 71625, 71626)
#define PRESENCE_OF_THE_DARKFALLEN RAID_MODE<uint32>(70994, 71962, 71963, 71964)
uint32 const vampireAuras[3][MAX_DIFFICULTY] =
{
{70867, 71473, 71532, 71533},
{70879, 71525, 71530, 71531},
{70877, 71474, 70877, 71474},
};
bool IsVampire(Unit const* unit)
{
uint8 spawnMode = unit->GetMap()->GetSpawnMode();
for (uint8 i = 0; i < 3; ++i)
if (unit->HasAura(vampireAuras[i][spawnMode]))
if (unit->HasAnyAuras(SPELL_ESSENCE_OF_BLOOD_QUEEN, SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_PLR, SPELL_FRENZIED_BLOODTHIRST))
return true;
return false;
}
@@ -134,6 +120,31 @@ Position const centerPos = {4595.7090f, 2769.4190f, 400.6368f, 0.000000f};
Position const airPos = {4595.7090f, 2769.4190f, 422.3893f, 0.000000f};
Position const mincharPos = {4629.3711f, 2782.6089f, 424.6390f, 0.000000f};
struct VampiricBiteTargetSelector
{
public:
VampiricBiteTargetSelector(Creature* source) : _source(source) { }
bool operator()(Unit const* target) const
{
if (!target)
return false;
if (!target->IsPlayer())
return false;
if (target->HasAura(SPELL_BLOOD_MIRROR_DAMAGE))
return false;
if (IsVampire(target))
return false;
return target != _source->GetVictim();
}
private:
Creature const* _source;
};
class boss_blood_queen_lana_thel : public CreatureScript
{
public:
@@ -327,22 +338,7 @@ public:
break;
case EVENT_VAMPIRIC_BITE:
{
Player* target = nullptr;
float maxThreat = 0.0f;
const Map::PlayerList& pl = me->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr)
if (Player* p = itr->GetSource())
if (p->IsAlive() && p != me->GetVictim() && p->GetGUID() != _offtankGUID && !p->IsGameMaster() && p->GetDistance(me) < 70.0f)
{
float th = me->GetThreatMgr().getThreatWithoutTemp(p);
if (!target || th > maxThreat)
{
target = p;
maxThreat = th;
}
}
if (target)
if (Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 0, VampiricBiteTargetSelector(me)))
{
me->CastSpell(target, SPELL_VAMPIRIC_BITE, false);
me->CastSpell((Unit*)nullptr, SPELL_VAMPIRIC_BITE_DUMMY, true);
@@ -513,17 +509,17 @@ public:
void CleanAuras()
{
instance->DoRemoveAurasDueToSpellOnPlayers(ESSENCE_OF_BLOOD_QUEEN);
instance->DoRemoveAurasDueToSpellOnPlayers(ESSENCE_OF_BLOOD_QUEEN_PLR);
instance->DoRemoveAurasDueToSpellOnPlayers(FRENZIED_BLOODTHIRST);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ESSENCE_OF_BLOOD_QUEEN);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_PLR);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_FRENZIED_BLOODTHIRST);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_FRENZIED_BLOODTHIRST_VISUAL);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_UNCONTROLLABLE_FRENZY);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BLOOD_MIRROR_DAMAGE);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BLOOD_MIRROR_VISUAL);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BLOOD_MIRROR_DUMMY);
instance->DoRemoveAurasDueToSpellOnPlayers(DELIRIOUS_SLASH);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_DELIRIOUS_SLASH);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_PACT_OF_THE_DARKFALLEN);
instance->DoRemoveAurasDueToSpellOnPlayers(PRESENCE_OF_THE_DARKFALLEN);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_PRESENCE_OF_THE_DARKFALLEN_DUMMY);
}
bool WasVampire(ObjectGuid guid)
@@ -260,7 +260,7 @@ public:
if (target->HasAura(SPELL_FROST_IMBUED_BLADE))
return false;
if (target->IsImmunedToDamageOrSchool(SPELL_SCHOOL_MASK_ALL) || target->HasAura(SPELL_ICE_TOMB_UNTARGETABLE) || target->HasAura(SPELL_ICE_TOMB_DAMAGE) || target->HasAura(SPELL_TANK_MARKER_AURA) || target->HasSpiritOfRedemptionAura())
if (target->IsImmunedToDamageOrSchool(SPELL_SCHOOL_MASK_ALL) || target->HasAnyAuras(SPELL_ICE_TOMB_UNTARGETABLE, SPELL_ICE_TOMB_DAMAGE, SPELL_TANK_MARKER_AURA) || target->HasSpiritOfRedemptionAura())
return false;
return target != _source->GetVictim();
@@ -451,7 +451,7 @@ public:
return false;
if (_source->GetExactDist(target) > 100.0f)
return false;
if (target->HasAura(SPELL_HARVEST_SOUL_VALKYR) || target->HasAura(SPELL_VALKYR_TARGET_SEARCH))
if (target->HasAnyAuras(SPELL_HARVEST_SOUL_VALKYR, SPELL_VALKYR_TARGET_SEARCH))
return false;
if (!_source->IsWithinLOSInMap(target))
return false;
@@ -603,7 +603,7 @@ public:
{
if (!unit || !unit->IsPlayer() || unit == _sourceObj || _sourceObj->GetVictim() == unit || !unit->isTargetableForAttack())
return false;
if (unit->HasAura(SPELL_PLAGUE_AVOIDANCE) || unit->HasAura(SPELL_BOSS_HITTIN_YA_AURA) || unit->HasAura(_notAura1) || unit->HasAura(_notAura2))
if (unit->HasAnyAuras(SPELL_PLAGUE_AVOIDANCE, SPELL_BOSS_HITTIN_YA_AURA, _notAura1, _notAura2))
return false;
if (!_sourceObj->IsWithinLOSInMap(unit))
return false;
@@ -1835,7 +1835,7 @@ public:
{
if (InstanceScript* instance = creature->GetInstanceScript())
if (instance->GetBossState(DATA_ROTFACE) == DONE && instance->GetBossState(DATA_FESTERGUT) == DONE && !creature->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN) && !creature->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN25))
if (player->HasAura(SPELL_ORANGE_BLIGHT_RESIDUE) && player->HasAura(SPELL_GREEN_BLIGHT_RESIDUE))
if (player->HasAllAuras(SPELL_ORANGE_BLIGHT_RESIDUE, SPELL_GREEN_BLIGHT_RESIDUE))
creature->CastSpell(creature, SPELL_HARVEST_BLIGHT_SPECIMEN, false);
return false;
}
@@ -178,7 +178,7 @@ public:
if (!UpdateVictim())
return;
if (me->HasAura(SPELL_PLANAR_SHIFT) || me->HasAura(SPELL_DRAKE_STOP_TIME))
if (me->HasAnyAuras(SPELL_PLANAR_SHIFT, SPELL_DRAKE_STOP_TIME))
return;
events.Update(diff);
@@ -1527,7 +1527,7 @@ public:
bool OnCheck(Player* player, Unit* /*target*/, uint32 /*criteria_id*/) override
{
return player && player->HasAura(SPELL_MAGE_TOASTY_FIRE_AURA) && player->HasAura(SPELL_DRUID_STARLIGHT_AREA_AURA) && player->HasAura(SPELL_SHAMAN_STORM_POWER_10);
return player && player->HasAllAuras(SPELL_MAGE_TOASTY_FIRE_AURA, SPELL_DRUID_STARLIGHT_AREA_AURA, SPELL_SHAMAN_STORM_POWER_10);
}
};
@@ -1538,7 +1538,7 @@ public:
bool OnCheck(Player* player, Unit* /*target*/, uint32 /*criteria_id*/) override
{
return player && player->HasAura(SPELL_MAGE_TOASTY_FIRE_AURA) && player->HasAura(SPELL_DRUID_STARLIGHT_AREA_AURA) && player->HasAura(SPELL_SHAMAN_STORM_POWER_25);
return player && player->HasAllAuras(SPELL_MAGE_TOASTY_FIRE_AURA, SPELL_DRUID_STARLIGHT_AREA_AURA, SPELL_SHAMAN_STORM_POWER_25);
}
};
@@ -454,8 +454,7 @@ public:
if (!player || player->IsGameMaster() || player->IsBeingTeleported() || (player->GetPositionZ() > 670 && player->GetVehicle()) ||
// If player has Disguise aura for quest A Meeting With The Magister or An Audience With The Arcanist, do not teleport it away but let it pass
player->HasAura(SPELL_SUNREAVER_DISGUISE_FEMALE) || player->HasAura(SPELL_SUNREAVER_DISGUISE_MALE) ||
player->HasAura(SPELL_SILVER_COVENANT_DISGUISE_FEMALE) || player->HasAura(SPELL_SILVER_COVENANT_DISGUISE_MALE))
player->HasAnyAuras(SPELL_SUNREAVER_DISGUISE_FEMALE, SPELL_SUNREAVER_DISGUISE_MALE, SPELL_SILVER_COVENANT_DISGUISE_FEMALE, SPELL_SILVER_COVENANT_DISGUISE_MALE))
return;
switch (me->GetEntry())
@@ -1496,7 +1496,7 @@ public:
if (!who || !who->IsPlayer() || !me->IsHostileTo(who) || !me->isInBackInMap(who, 5.0f))
return;
if (who->HasAura(SPELL_TRESPASSER_H) || who->HasAura(SPELL_TRESPASSER_A))
if (who->HasAnyAuras(SPELL_TRESPASSER_H, SPELL_TRESPASSER_A))
return;
if (who->ToPlayer()->GetTeamId() == TEAM_ALLIANCE)
@@ -26,14 +26,6 @@
#include "SpellAuraEffects.h"
#include "SpellScript.h"
DoorData const doorData[] =
{
{ GO_LADY_VASHJ_BRIDGE_CONSOLE, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE },
{ GO_COILFANG_BRIDGE1, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE },
{ GO_COILFANG_BRIDGE2, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE },
{ GO_COILFANG_BRIDGE3, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE }
};
ObjectData const creatureData[] =
{
{ NPC_LEOTHERAS_THE_BLIND, DATA_LEOTHERAS_THE_BLIND },
@@ -46,6 +38,10 @@ ObjectData const creatureData[] =
ObjectData const gameObjectData[] =
{
{ GO_STRANGE_POOL, DATA_STRANGE_POOL },
{ GO_LADY_VASHJ_BRIDGE_CONSOLE, DATA_CONSOLE },
{ GO_COILFANG_BRIDGE1, DATA_BRIDGE_PART1 },
{ GO_COILFANG_BRIDGE2, DATA_BRIDGE_PART2 },
{ GO_COILFANG_BRIDGE3, DATA_BRIDGE_PART3 },
{ 0, 0 }
};
@@ -64,6 +60,15 @@ BossBoundaryData const boundaries =
{ DATA_LADY_VASHJ, new CircleBoundary(Position(29.99f, -922.409f), 83.65f) }
};
ObjectData const summonData[] =
{
{ NPC_ENCHANTED_ELEMENTAL, DATA_LADY_VASHJ },
{ NPC_COILFANG_ELITE, DATA_LADY_VASHJ },
{ NPC_COILFANG_STRIDER, DATA_LADY_VASHJ },
{ NPC_TAINTED_ELEMENTAL, DATA_LADY_VASHJ },
{ 0, 0 }
};
class instance_serpent_shrine : public InstanceMapScript
{
public:
@@ -77,10 +82,10 @@ public:
{
SetHeaders(DataHeader);
SetBossNumber(MAX_ENCOUNTERS);
LoadDoorData(doorData);
LoadObjectData(creatureData, gameObjectData);
LoadMinionData(minionData);
LoadBossBoundaries(boundaries);
LoadSummonData(summonData);
_aliveKeepersCount = 0;
}
@@ -108,6 +113,12 @@ public:
case GO_SHIELD_GENERATOR4:
_shieldGeneratorGUID[go->GetEntry() - GO_SHIELD_GENERATOR1] = go->GetGUID();
break;
case GO_LADY_VASHJ_BRIDGE_CONSOLE:
case GO_COILFANG_BRIDGE1:
case GO_COILFANG_BRIDGE2:
case GO_COILFANG_BRIDGE3:
go->AllowSaveToDB(true);
break;
}
InstanceScript::OnGameObjectCreate(go);
@@ -125,13 +136,6 @@ public:
case NPC_CYCLONE_KARATHRESS:
creature->GetMotionMaster()->MoveRandom(50.0f);
break;
case NPC_ENCHANTED_ELEMENTAL:
case NPC_COILFANG_ELITE:
case NPC_COILFANG_STRIDER:
case NPC_TAINTED_ELEMENTAL:
if (Creature* vashj = GetCreature(DATA_LADY_VASHJ))
vashj->AI()->JustSummoned(creature);
break;
case NPC_SEER_OLUM:
creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
creature->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
@@ -148,19 +152,11 @@ public:
{
case DATA_PLATFORM_KEEPER_RESPAWNED:
if (_aliveKeepersCount < MAX_KEEPER_COUNT)
{
++_aliveKeepersCount;
}
break;
case DATA_PLATFORM_KEEPER_DIED:
if (_aliveKeepersCount > MIN_KEEPER_COUNT)
{
--_aliveKeepersCount;
}
break;
case DATA_BRIDGE_ACTIVATED:
SetBossState(DATA_BRIDGE_EMERGED, NOT_STARTED);
SetBossState(DATA_BRIDGE_EMERGED, DONE);
break;
case DATA_ACTIVATE_SHIELD:
if (Creature* vashj = GetCreature(DATA_LADY_VASHJ))
@@ -31,17 +31,19 @@ enum DataTypes
DATA_LEOTHERAS_THE_BLIND = 2,
DATA_FATHOM_LORD_KARATHRESS = 3,
DATA_MOROGRIM_TIDEWALKER = 4,
DATA_BRIDGE_EMERGED = 5,
DATA_LADY_VASHJ = 6,
MAX_ENCOUNTERS = 7,
DATA_LADY_VASHJ = 5,
MAX_ENCOUNTERS = 6,
DATA_PLATFORM_KEEPER_RESPAWNED = 20,
DATA_PLATFORM_KEEPER_DIED = 21,
DATA_ALIVE_KEEPERS = 22,
DATA_BRIDGE_ACTIVATED = 23,
DATA_ACTIVATE_SHIELD = 24,
DATA_STRANGE_POOL = 25,
DATA_SEER_OLUM = 26
DATA_ACTIVATE_SHIELD = 23,
DATA_STRANGE_POOL = 24,
DATA_SEER_OLUM = 25,
DATA_CONSOLE = 26, // Used by the console SAI.
DATA_BRIDGE_PART1 = 27, // Used by the console SAI.
DATA_BRIDGE_PART2 = 28, // Used by the console SAI.
DATA_BRIDGE_PART3 = 29 // Used by the console SAI.
};
enum SSNPCs
@@ -416,7 +416,7 @@ public:
bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
if (player->HasAura(SPELL_MIND_EXHAUSTION) || player->HasAura(SPELL_SHADOW_GRASP))
if (player->HasAnyAuras(SPELL_MIND_EXHAUSTION, SPELL_SHADOW_GRASP))
return true;
if (Creature* trigger = player->FindNearestCreature(NPC_HELLFIRE_RAID_TRIGGER, 10.0f))
-4
View File
@@ -303,10 +303,6 @@ public:
{
CombatAI::InitializeAI();
((Minion*)me)->SetFollowAngle(rand_norm() * 2 * M_PI);
// Heroism / Bloodlust immunity
me->ApplySpellImmune(0, IMMUNITY_ID, 32182, true);
me->ApplySpellImmune(0, IMMUNITY_ID, 2825, true);
}
};
+70 -3
View File
@@ -1618,7 +1618,7 @@ class spell_dk_improved_blood_presence : public AuraScript
void HandleEffectApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
Unit* target = GetTarget();
if ((target->HasAura(SPELL_DK_FROST_PRESENCE) || target->HasAura(SPELL_DK_UNHOLY_PRESENCE)) && !target->HasAura(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED))
if (target->HasAnyAuras(SPELL_DK_FROST_PRESENCE, SPELL_DK_UNHOLY_PRESENCE) && !target->HasAura(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED))
target->CastCustomSpell(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT1, aurEff->GetAmount(), target, true, nullptr, aurEff);
}
@@ -1655,7 +1655,7 @@ class spell_dk_improved_frost_presence : public AuraScript
void HandleEffectApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
Unit* target = GetTarget();
if ((target->HasAura(SPELL_DK_BLOOD_PRESENCE) || target->HasAura(SPELL_DK_UNHOLY_PRESENCE)) && !target->HasAura(SPELL_DK_FROST_PRESENCE_TRIGGERED))
if (target->HasAnyAuras(SPELL_DK_BLOOD_PRESENCE, SPELL_DK_UNHOLY_PRESENCE) && !target->HasAura(SPELL_DK_FROST_PRESENCE_TRIGGERED))
target->CastCustomSpell(SPELL_DK_FROST_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true, nullptr, aurEff);
}
@@ -1700,7 +1700,7 @@ class spell_dk_improved_unholy_presence : public AuraScript
target->CastCustomSpell(target, SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED, &basePoints, &basePoints, &basePoints, true, nullptr, aurEff);
}
if ((target->HasAura(SPELL_DK_BLOOD_PRESENCE) || target->HasAura(SPELL_DK_FROST_PRESENCE)) && !target->HasAura(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED))
if (target->HasAnyAuras(SPELL_DK_BLOOD_PRESENCE, SPELL_DK_FROST_PRESENCE) && !target->HasAura(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED))
target->CastCustomSpell(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true, nullptr, aurEff);
}
@@ -2203,6 +2203,72 @@ class spell_dk_will_of_the_necropolis : public AuraScript
}
};
// 49040 - Army of the Dead Passive
class spell_dk_army_of_the_dead_passive : public AuraScript
{
PrepareAuraScript(spell_dk_army_of_the_dead_passive);
void CalculateAPAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
// army ghoul inherits 6.5% of AP
if (Unit* owner = GetUnitOwner()->GetOwner())
amount = CalculatePct(std::max<int32>(0, owner->GetTotalAttackPowerValue(BASE_ATTACK)), 6.5f);
}
void CalculateHealthAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
// army ghoul inherits 20% of health
if (Unit* owner = GetUnitOwner()->GetOwner())
amount = owner->CountPctFromMaxHealth(20);
}
void CalculateSPAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
// army ghoul inherits 6.5% of AP
if (Unit* owner = GetUnitOwner()->GetOwner())
amount = CalculatePct(std::max<int32>(0, owner->GetTotalAttackPowerValue(BASE_ATTACK)), 6.5f);
}
void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (GetUnitOwner()->IsPet())
return;
GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_STAT, true, SPELL_BLOCK_TYPE_POSITIVE);
GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, true, SPELL_BLOCK_TYPE_POSITIVE);
GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_ATTACK_POWER, true, SPELL_BLOCK_TYPE_POSITIVE);
GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_ATTACK_POWER_PCT, true, SPELL_BLOCK_TYPE_POSITIVE);
// Heroism / Bloodlust immunity
GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_ID, 32182, true);
GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_ID, 2825, true);
}
void CalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
{
if (!GetUnitOwner()->IsPet())
return;
isPeriodic = true;
amplitude = 2 * IN_MILLISECONDS;
}
void HandlePeriodic(AuraEffect const* aurEff)
{
PreventDefaultAction();
GetEffect(aurEff->GetEffIndex())->RecalculateAmount();
}
void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_army_of_the_dead_passive::CalculateAPAmount, EFFECT_0, SPELL_AURA_MOD_ATTACK_POWER);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_army_of_the_dead_passive::CalculateHealthAmount, EFFECT_1, SPELL_AURA_MOD_INCREASE_HEALTH);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_army_of_the_dead_passive::CalculateSPAmount, EFFECT_2, SPELL_AURA_MOD_DAMAGE_DONE);
OnEffectApply += AuraEffectApplyFn(spell_dk_army_of_the_dead_passive::HandleEffectApply, EFFECT_ALL, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_dk_army_of_the_dead_passive::CalcPeriodic, EFFECT_ALL, SPELL_AURA_ANY);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_dk_army_of_the_dead_passive::HandlePeriodic, EFFECT_ALL, SPELL_AURA_ANY);
}
};
void AddSC_deathknight_spell_scripts()
{
RegisterSpellScript(spell_dk_wandering_plague);
@@ -2250,4 +2316,5 @@ void AddSC_deathknight_spell_scripts()
RegisterSpellScript(spell_dk_vampiric_blood);
RegisterSpellScript(spell_dk_will_of_the_necropolis);
RegisterSpellScript(spell_dk_ghoul_thrash);
RegisterSpellScript(spell_dk_army_of_the_dead_passive);
}
@@ -5320,6 +5320,65 @@ class spell_gen_set_health : public SpellScript
}
};
// 67561 - Serverside - Pet Scaling - Master Spell 06 - Spell Hit, Expertise, Spell Penetration
class spell_pet_spellhit_expertise_spellpen_scaling : public AuraScript
{
PrepareAuraScript(spell_pet_spellhit_expertise_spellpen_scaling)
int32 CalculatePercent(float hitChance, float cap, float maxChance)
{
return (hitChance / cap) * maxChance;
}
void CalculateSpellHitAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
if (Player* modOwner = GetUnitOwner()->GetSpellModOwner())
amount = CalculatePercent(modOwner->m_modMeleeHitChance, 8.0f, 17.0f);
}
void CalculateExpertiseAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
if (Player* modOwner = GetUnitOwner()->GetSpellModOwner())
amount = CalculatePercent(modOwner->m_modMeleeHitChance, 8.0f, 26.0f);
}
void CalculateSpellPenAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
if (Player* modOwner = GetUnitOwner()->GetSpellModOwner())
amount = modOwner->GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_TARGET_RESISTANCE, SPELL_SCHOOL_MASK_SPELL);
}
void HandleEffectApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
GetUnitOwner()->ApplySpellImmune(GetId(), IMMUNITY_STATE, aurEff->GetAuraType(), true, SPELL_BLOCK_TYPE_POSITIVE);
}
void CalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
{
if (!GetUnitOwner()->IsPet())
return;
isPeriodic = true;
amplitude = 3 * IN_MILLISECONDS;
}
void HandlePeriodic(AuraEffect const* aurEff)
{
PreventDefaultAction();
GetEffect(aurEff->GetEffIndex())->RecalculateAmount();
}
void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pet_spellhit_expertise_spellpen_scaling::CalculateSpellHitAmount, EFFECT_0, SPELL_AURA_MOD_SPELL_HIT_CHANCE);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pet_spellhit_expertise_spellpen_scaling::CalculateExpertiseAmount, EFFECT_1, SPELL_AURA_MOD_EXPERTISE);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pet_spellhit_expertise_spellpen_scaling::CalculateSpellPenAmount, EFFECT_2, SPELL_AURA_MOD_TARGET_RESISTANCE);
OnEffectApply += AuraEffectApplyFn(spell_pet_spellhit_expertise_spellpen_scaling::HandleEffectApply, EFFECT_ALL, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_pet_spellhit_expertise_spellpen_scaling::CalcPeriodic, EFFECT_ALL, SPELL_AURA_ANY);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_pet_spellhit_expertise_spellpen_scaling::HandlePeriodic, EFFECT_ALL, SPELL_AURA_ANY);
}
};
void AddSC_generic_spell_scripts()
{
RegisterSpellScript(spell_silithyst);
@@ -5478,4 +5537,5 @@ void AddSC_generic_spell_scripts()
RegisterSpellScript(spell_gen_sober_up);
RegisterSpellScript(spell_gen_steal_weapon);
RegisterSpellScript(spell_gen_set_health);
RegisterSpellScript(spell_pet_spellhit_expertise_spellpen_scaling);
}
+1 -1
View File
@@ -969,7 +969,7 @@ class spell_pal_lay_on_hands : public SpellScript
Unit* caster = GetCaster();
if (Unit* target = GetExplTargetUnit())
if (caster == target)
if (target->HasAura(SPELL_PALADIN_FORBEARANCE) || target->HasAura(SPELL_PALADIN_AVENGING_WRATH_MARKER) || target->HasAura(SPELL_PALADIN_IMMUNE_SHIELD_MARKER))
if (target->HasAnyAuras(SPELL_PALADIN_FORBEARANCE, SPELL_PALADIN_AVENGING_WRATH_MARKER, SPELL_PALADIN_IMMUNE_SHIELD_MARKER))
return SPELL_FAILED_TARGET_AURASTATE;
// Xinef: Glyph of Divinity
@@ -267,7 +267,7 @@ class achievement_flirt_with_disaster_perf_check : public AchievementCriteriaScr
if (!player)
return false;
if (player->HasAura(AURA_PERFUME_FOREVER) || player->HasAura(AURA_PERFUME_ENCHANTRESS) || player->HasAura(AURA_PERFUME_VICTORY))
if (player->HasAnyAuras(AURA_PERFUME_FOREVER, AURA_PERFUME_ENCHANTRESS, AURA_PERFUME_VICTORY))
return true;
return false;
@@ -774,7 +774,7 @@ public:
{
// return those not tagged or already under the influence of Aura of Nature
if (Unit* unit = object->ToUnit())
return !(unit->HasAura(SPELL_MARK_OF_NATURE) && !unit->HasAura(SPELL_AURA_OF_NATURE));
return !unit->HasAllAuras(SPELL_MARK_OF_NATURE, SPELL_AURA_OF_NATURE);
return true;
}
};
@@ -999,14 +999,10 @@ public:
void SpellHit(Unit* /*Caster*/, SpellInfo const* Spell) override
{
if (InNormalForm())
{
return;
}
if (me->HasAura(NELSON_SPELL_SOUL_FLAME) && me->HasAura(NELSON_WEAKNESS_FROST_TRAP))
{
if (me->HasAllAuras(NELSON_SPELL_SOUL_FLAME, NELSON_WEAKNESS_FROST_TRAP))
me->RemoveAura(NELSON_SPELL_SOUL_FLAME);
}
if (!me->HasAura(NELSON_SPELL_CRIPPLING_CLIP) && Spell->Id == NELSON_WEAKNESS_WING_CLIP)
{
+2 -2
View File
@@ -179,7 +179,7 @@ protected:
{
LOG_DEBUG("misc", "Network Thread Starting");
_updateTimer.expires_at(std::chrono::steady_clock::now());
_updateTimer.expires_at(std::chrono::steady_clock::now() + std::chrono::milliseconds(1));
_updateTimer.async_wait([this](boost::system::error_code const&) { Update(); });
_ioContext.run();
@@ -193,7 +193,7 @@ protected:
if (_stopped)
return;
_updateTimer.expires_at(std::chrono::steady_clock::now());
_updateTimer.expires_at(std::chrono::steady_clock::now() + std::chrono::milliseconds(1));
_updateTimer.async_wait([this](boost::system::error_code const&) { Update(); });
AddNewSockets();

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