diff --git a/.github/actions/linux-build/action.yml b/.github/actions/linux-build/action.yml index 132cfc9fa..caf3c6047 100644 --- a/.github/actions/linux-build/action.yml +++ b/.github/actions/linux-build/action.yml @@ -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' || '' }} \ diff --git a/.github/workflows/codestyle.yml b/.github/workflows/codestyle.yml index 486b3a952..97859a5f8 100644 --- a/.github/workflows/codestyle.yml +++ b/.github/workflows/codestyle.yml @@ -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 diff --git a/.github/workflows/core-build-nopch.yml b/.github/workflows/core-build-nopch.yml index 23611a122..69e0b51db 100644 --- a/.github/workflows/core-build-nopch.yml +++ b/.github/workflows/core-build-nopch.yml @@ -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 diff --git a/.github/workflows/core-build-pch.yml b/.github/workflows/core-build-pch.yml index 2f71753ce..58411a599 100644 --- a/.github/workflows/core-build-pch.yml +++ b/.github/workflows/core-build-pch.yml @@ -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 }}) diff --git a/.github/workflows/core_modules_build.yml b/.github/workflows/core_modules_build.yml index a5ef03cd5..6857c26f0 100644 --- a/.github/workflows/core_modules_build.yml +++ b/.github/workflows/core_modules_build.yml @@ -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 diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index 9d2d0192e..1442ffb86 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -6,9 +6,7 @@ on: pull_request: types: - labeled - - opened - synchronize - - reopened concurrency: group: ${{ github.head_ref }} || concat(${{ github.ref }}, ${{ github.workflow }}) diff --git a/.github/workflows/pr_labeler.yml b/.github/workflows/pr_labeler.yml index 21b73fc84..1c3632972 100644 --- a/.github/workflows/pr_labeler.yml +++ b/.github/workflows/pr_labeler.yml @@ -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: diff --git a/.github/workflows/sql-codestyle.yml b/.github/workflows/sql-codestyle.yml index cfd83fe07..f60b95cd7 100644 --- a/.github/workflows/sql-codestyle.yml +++ b/.github/workflows/sql-codestyle.yml @@ -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 diff --git a/.github/workflows/tools_build.yml b/.github/workflows/tools_build.yml index 12122e183..22c212c6b 100644 --- a/.github/workflows/tools_build.yml +++ b/.github/workflows/tools_build.yml @@ -6,8 +6,6 @@ on: pull_request: types: - labeled - - opened - - reopened - synchronize concurrency: diff --git a/apps/ci/ci-pending.sh b/apps/ci/ci-pending.sh deleted file mode 100644 index 87858b33c..000000000 --- a/apps/ci/ci-pending.sh +++ /dev/null @@ -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" diff --git a/apps/codestyle/codestyle.py b/apps/codestyle/codestyle-cpp.py similarity index 95% rename from apps/codestyle/codestyle.py rename to apps/codestyle/codestyle-cpp.py index 5cbf1691a..77ff3f376 100644 --- a/apps/codestyle/codestyle.py +++ b/apps/codestyle/codestyle-cpp.py @@ -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 diff --git a/apps/codestyle/codestyle-sql.py b/apps/codestyle/codestyle-sql.py new file mode 100644 index 000000000..d93646d09 --- /dev/null +++ b/apps/codestyle/codestyle-sql.py @@ -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) diff --git a/data/sql/updates/db_world/2024_12_20_01.sql b/data/sql/updates/db_world/2024_12_20_01.sql new file mode 100644 index 000000000..5a6f0b6dc --- /dev/null +++ b/data/sql/updates/db_world/2024_12_20_01.sql @@ -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'); \ No newline at end of file diff --git a/data/sql/updates/db_world/2024_12_20_02.sql b/data/sql/updates/db_world/2024_12_20_02.sql new file mode 100644 index 000000000..42d9af501 --- /dev/null +++ b/data/sql/updates/db_world/2024_12_20_02.sql @@ -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)'); diff --git a/data/sql/updates/db_world/2024_12_22_00.sql b/data/sql/updates/db_world/2024_12_22_00.sql new file mode 100644 index 000000000..4d1c8d5f1 --- /dev/null +++ b/data/sql/updates/db_world/2024_12_22_00.sql @@ -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)); diff --git a/data/sql/updates/db_world/2024_12_22_01.sql b/data/sql/updates/db_world/2024_12_22_01.sql new file mode 100644 index 000000000..236f140ad --- /dev/null +++ b/data/sql/updates/db_world/2024_12_22_01.sql @@ -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.'); diff --git a/data/sql/updates/db_world/2024_12_22_02.sql b/data/sql/updates/db_world/2024_12_22_02.sql new file mode 100644 index 000000000..34c109f5a --- /dev/null +++ b/data/sql/updates/db_world/2024_12_22_02.sql @@ -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; diff --git a/data/sql/updates/db_world/2024_12_24_00.sql b/data/sql/updates/db_world/2024_12_24_00.sql new file mode 100644 index 000000000..2cfcbb92c --- /dev/null +++ b/data/sql/updates/db_world/2024_12_24_00.sql @@ -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)'); diff --git a/data/sql/updates/db_world/2024_12_25_00.sql b/data/sql/updates/db_world/2024_12_25_00.sql new file mode 100644 index 000000000..df24829f2 --- /dev/null +++ b/data/sql/updates/db_world/2024_12_25_00.sql @@ -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); diff --git a/data/sql/updates/db_world/2024_12_26_00.sql b/data/sql/updates/db_world/2024_12_26_00.sql new file mode 100644 index 000000000..3183d558a --- /dev/null +++ b/data/sql/updates/db_world/2024_12_26_00.sql @@ -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); diff --git a/data/sql/updates/db_world/2024_12_26_01.sql b/data/sql/updates/db_world/2024_12_26_01.sql new file mode 100644 index 000000000..a1deba22b --- /dev/null +++ b/data/sql/updates/db_world/2024_12_26_01.sql @@ -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); diff --git a/data/sql/updates/db_world/2024_12_26_02.sql b/data/sql/updates/db_world/2024_12_26_02.sql new file mode 100644 index 000000000..34cf182dd --- /dev/null +++ b/data/sql/updates/db_world/2024_12_26_02.sql @@ -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)'); diff --git a/data/sql/updates/db_world/2024_12_28_00.sql b/data/sql/updates/db_world/2024_12_28_00.sql new file mode 100644 index 000000000..0b03983e5 --- /dev/null +++ b/data/sql/updates/db_world/2024_12_28_00.sql @@ -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); diff --git a/data/sql/updates/db_world/2024_12_28_01.sql b/data/sql/updates/db_world/2024_12_28_01.sql new file mode 100644 index 000000000..d4aa9b48c --- /dev/null +++ b/data/sql/updates/db_world/2024_12_28_01.sql @@ -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'); diff --git a/data/sql/updates/db_world/2024_12_28_02.sql b/data/sql/updates/db_world/2024_12_28_02.sql new file mode 100644 index 000000000..d7310d7ab --- /dev/null +++ b/data/sql/updates/db_world/2024_12_28_02.sql @@ -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\''); diff --git a/data/sql/updates/db_world/2024_12_29_00.sql b/data/sql/updates/db_world/2024_12_29_00.sql new file mode 100644 index 000000000..32323a5c4 --- /dev/null +++ b/data/sql/updates/db_world/2024_12_29_00.sql @@ -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; diff --git a/data/sql/updates/db_world/2024_12_29_01.sql b/data/sql/updates/db_world/2024_12_29_01.sql new file mode 100644 index 000000000..b87fbf99c --- /dev/null +++ b/data/sql/updates/db_world/2024_12_29_01.sql @@ -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; diff --git a/data/sql/updates/db_world/2024_12_29_02.sql b/data/sql/updates/db_world/2024_12_29_02.sql new file mode 100644 index 000000000..c537bf630 --- /dev/null +++ b/data/sql/updates/db_world/2024_12_29_02.sql @@ -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); diff --git a/data/sql/updates/db_world/2024_12_29_03.sql b/data/sql/updates/db_world/2024_12_29_03.sql new file mode 100644 index 000000000..d7e6016be --- /dev/null +++ b/data/sql/updates/db_world/2024_12_29_03.sql @@ -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); diff --git a/data/sql/updates/db_world/2024_12_29_04.sql b/data/sql/updates/db_world/2024_12_29_04.sql new file mode 100644 index 000000000..a1d7ffa75 --- /dev/null +++ b/data/sql/updates/db_world/2024_12_29_04.sql @@ -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); diff --git a/data/sql/updates/db_world/2024_12_30_00.sql b/data/sql/updates/db_world/2024_12_30_00.sql new file mode 100644 index 000000000..ba0d7cce1 --- /dev/null +++ b/data/sql/updates/db_world/2024_12_30_00.sql @@ -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; diff --git a/data/sql/updates/db_world/2024_12_30_01.sql b/data/sql/updates/db_world/2024_12_30_01.sql new file mode 100644 index 000000000..c4c677ea6 --- /dev/null +++ b/data/sql/updates/db_world/2024_12_30_01.sql @@ -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$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); diff --git a/data/sql/updates/db_world/2024_12_30_02.sql b/data/sql/updates/db_world/2024_12_30_02.sql new file mode 100644 index 000000000..1bd2cd5f2 --- /dev/null +++ b/data/sql/updates/db_world/2024_12_30_02.sql @@ -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); diff --git a/data/sql/updates/db_world/2024_12_31_00.sql b/data/sql/updates/db_world/2024_12_31_00.sql new file mode 100644 index 000000000..92e9c5ed5 --- /dev/null +++ b/data/sql/updates/db_world/2024_12_31_00.sql @@ -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; diff --git a/data/sql/updates/db_world/2024_12_31_01.sql b/data/sql/updates/db_world/2024_12_31_01.sql new file mode 100644 index 000000000..904684fa1 --- /dev/null +++ b/data/sql/updates/db_world/2024_12_31_01.sql @@ -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'); diff --git a/pull_request_template.md b/pull_request_template.md index 2465f0e7a..b62291ba4 100644 --- a/pull_request_template.md +++ b/pull_request_template.md @@ -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 diff --git a/src/cmake/macros/FindMySQL.cmake b/src/cmake/macros/FindMySQL.cmake index b78dfc2d8..2a8de7e7a 100644 --- a/src/cmake/macros/FindMySQL.cmake +++ b/src/cmake/macros/FindMySQL.cmake @@ -161,7 +161,7 @@ if(WIN32) set(_MYSQL_ROOT_PATHS ${_MYSQL_ROOT_PATHS} - ${_MYSQL_ROOT_PATHS_VERSION_SUBDIRECTORIES} + ${_MYSQL_ROOT_PATHS_VERSION_SUBDIRECTORIES} "${PROGRAM_FILES_64}/MySQL" "${PROGRAM_FILES_32}/MySQL" "$ENV{SystemDrive}/MySQL" @@ -180,7 +180,7 @@ find_path(MYSQL_INCLUDE_DIR /usr/local/include /usr/local/include/mysql /usr/local/mysql/include - ${_MYSQL_ROOT_PATHS} + ${_MYSQL_ROOT_PATHS} PATH_SUFFIXES include include/mysql @@ -270,10 +270,10 @@ set(MYSQL_REQUIRED_VARS "") foreach(_comp IN LISTS MySQL_FIND_COMPONENTS) if(_comp STREQUAL "lib") set(MySQL_${_comp}_WANTED TRUE) - if(MySQL_FIND_REQUIRED_${_comp}) - list(APPEND MYSQL_REQUIRED_VARS "MYSQL_LIBRARY") - list(APPEND MYSQL_REQUIRED_VARS "MYSQL_INCLUDE_DIR") - endif() + if(MySQL_FIND_REQUIRED_${_comp}) + list(APPEND MYSQL_REQUIRED_VARS "MYSQL_LIBRARY") + list(APPEND MYSQL_REQUIRED_VARS "MYSQL_INCLUDE_DIR") + endif() if(EXISTS "${MYSQL_LIBRARY}" AND EXISTS "${MYSQL_INCLUDE_DIR}") set(MySQL_${_comp}_FOUND TRUE) else() @@ -281,9 +281,9 @@ foreach(_comp IN LISTS MySQL_FIND_COMPONENTS) endif() elseif(_comp STREQUAL "binary") set(MySQL_${_comp}_WANTED TRUE) - if(MySQL_FIND_REQUIRED_${_comp}) - list(APPEND MYSQL_REQUIRED_VARS "MYSQL_EXECUTABLE") - endif() + if(MySQL_FIND_REQUIRED_${_comp}) + list(APPEND MYSQL_REQUIRED_VARS "MYSQL_EXECUTABLE") + endif() if(EXISTS "${MYSQL_EXECUTABLE}" ) set(MySQL_${_comp}_FOUND TRUE) else() diff --git a/src/common/Asio/SteadyTimer.h b/src/common/Asio/SteadyTimer.h new file mode 100644 index 000000000..2c5a6fd7f --- /dev/null +++ b/src/common/Asio/SteadyTimer.h @@ -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 . + */ + +#ifndef _STEADYTIMER_H +#define _STEADYTIMER_H + +#include + +namespace Acore::Asio::SteadyTimer +{ + inline auto GetExpirationTime(int32 seconds) + { + return std::chrono::steady_clock::now() + std::chrono::seconds(seconds); + } +} + +#endif // _STEADYTIMER_H diff --git a/src/common/Logging/Appender.cpp b/src/common/Logging/Appender.cpp index a16951374..cf9d9df2b 100644 --- a/src/common/Logging/Appender.cpp +++ b/src/common/Logging/Appender.cpp @@ -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) diff --git a/src/common/Metric/Metric.cpp b/src/common/Metric/Metric.cpp index a6cd4b1f2..7c4771dca 100644 --- a/src/common/Metric/Metric.cpp +++ b/src/common/Metric/Metric.cpp @@ -18,6 +18,7 @@ #include "Metric.h" #include "Config.h" #include "Log.h" +#include "SteadyTimer.h" #include "Strand.h" #include "Tokenize.h" #include @@ -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; diff --git a/src/server/apps/authserver/Main.cpp b/src/server/apps/authserver/Main.cpp index 6030d9114..903a12134 100644 --- a/src/server/apps/authserver/Main.cpp +++ b/src/server/apps/authserver/Main.cpp @@ -38,6 +38,7 @@ #include "RealmList.h" #include "SecretMgr.h" #include "SharedDefines.h" +#include "SteadyTimer.h" #include "Util.h" #include #include @@ -179,17 +180,13 @@ int main(int argc, char** argv) int32 dbPingInterval = sConfigMgr->GetOption("MaxPingTime", 30); std::shared_ptr dbPingTimer = std::make_shared(*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(dbPingTimer), dbPingInterval, std::placeholders::_1)); int32 banExpiryCheckInterval = sConfigMgr->GetOption("BanExpiryCheckInterval", 60); std::shared_ptr banExpiryCheckTimer = std::make_shared(*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(banExpiryCheckTimer), banExpiryCheckInterval, std::placeholders::_1)); // Start the io service worker loop @@ -252,9 +249,7 @@ void KeepDatabaseAliveHandler(std::weak_ptr 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 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)); } } diff --git a/src/server/apps/worldserver/Main.cpp b/src/server/apps/worldserver/Main.cpp index 6f4dc6d4d..1a3842d07 100644 --- a/src/server/apps/worldserver/Main.cpp +++ b/src/server/apps/worldserver/Main.cpp @@ -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 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), std::placeholders::_1)); } @@ -644,9 +643,7 @@ void FreezeDetector::Handler(std::weak_ptr 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)); } } diff --git a/src/server/apps/worldserver/worldserver.conf.dist b/src/server/apps/worldserver/worldserver.conf.dist index a88c6deae..a6dd8742d 100644 --- a/src/server/apps/worldserver/worldserver.conf.dist +++ b/src/server/apps/worldserver/worldserver.conf.dist @@ -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 diff --git a/src/server/database/Database/Implementation/WorldDatabase.cpp b/src/server/database/Database/Implementation/WorldDatabase.cpp index 323f4ccbd..d6081c983 100644 --- a/src/server/database/Database/Implementation/WorldDatabase.cpp +++ b/src/server/database/Database/Implementation/WorldDatabase.cpp @@ -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); diff --git a/src/server/database/Database/Implementation/WorldDatabase.h b/src/server/database/Database/Implementation/WorldDatabase.h index ebfdcfe07..049766725 100644 --- a/src/server/database/Database/Implementation/WorldDatabase.h +++ b/src/server/database/Database/Implementation/WorldDatabase.h @@ -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, diff --git a/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp b/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp index f1cda1fb1..0d50d7eaf 100644 --- a/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp @@ -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; } diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp index 9513d1fc9..28b923d1e 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.cpp +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp @@ -274,6 +274,11 @@ void TempSummon::InitSummon() } } +void TempSummon::UpdateObjectVisibilityOnCreate() +{ + WorldObject::UpdateObjectVisibility(true); +} + void TempSummon::SetTempSummonType(TempSummonType type) { m_type = type; diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h index e5bc369bd..18cc72979 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.h +++ b/src/server/game/Entities/Creature/TemporarySummon.h @@ -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 {} diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 317b3441c..fe37ea46c 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -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; } diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 2fe73c1ae..043a34d6d 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -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& creatureList, float radius, uint32 entry); diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index 5f4d3057a..58d7be70e 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -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))); diff --git a/src/server/game/Entities/Pet/PetDefines.h b/src/server/game/Entities/Pet/PetDefines.h index 65de91faa..b0bbe57ac 100644 --- a/src/server/game/Entities/Pet/PetDefines.h +++ b/src/server/game/Entities/Pet/PetDefines.h @@ -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 diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 0b4d13aad..e1a274afe 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -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)); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index e4d46d1a2..cca7f3fb2 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -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); }; diff --git a/src/server/game/Entities/Player/PlayerSettings.cpp b/src/server/game/Entities/Player/PlayerSettings.cpp index 7e45d03db..0c25361dd 100644 --- a/src/server/game/Entities/Player/PlayerSettings.cpp +++ b/src/server/game/Entities/Player/PlayerSettings.cpp @@ -38,7 +38,7 @@ void Player::_LoadCharacterSettings(PreparedQueryResult result) { Field* fields = result->Fetch(); - std::string source = fields[0].Get();; + std::string source = fields[0].Get(); std::string data = fields[1].Get(); std::vector tokens = Acore::Tokenize(data, ' ', false); diff --git a/src/server/game/Entities/Player/PlayerStorage.cpp b/src/server/game/Entities/Player/PlayerStorage.cpp index 8c7b9da6f..3e878976d 100644 --- a/src/server/game/Entities/Player/PlayerStorage.cpp +++ b/src/server/game/Entities/Player/PlayerStorage.cpp @@ -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; } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index c9ee07985..63bd5e2ae 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -5695,6 +5695,29 @@ uint32 Unit::GetAuraCount(uint32 spellId) const return count; } +bool Unit::HasAuras(SearchMethod sm, std::vector& 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; } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 8a6ac2296..b6d4179f3 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -558,6 +558,12 @@ enum CommandStates : uint8 COMMAND_ABANDON = 3 }; +enum class SearchMethod +{ + MatchAll, + MatchAny +}; + typedef std::list 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& 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 + bool HasAnyAuras(Auras... spellIds) const + { + std::vector spellList = { static_cast(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 + bool HasAllAuras(Auras... spellIds) const + { + std::vector spellList = { static_cast(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; diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h index b694bbcd9..040e2c89f 100644 --- a/src/server/game/Entities/Unit/UnitDefines.h +++ b/src/server/game/Entities/Unit/UnitDefines.h @@ -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 { diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index a914182c8..0909ae7db 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -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 processedEvents; + + do + { + Field* fields = result->Fetch(); + uint8 eventId = fields[0].Get(); + ObjectGuid::LowType guid = fields[1].Get(); + + 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(); + newEntry.maxcount = fields[3].Get(); + newEntry.incrtime = fields[4].Get(); + newEntry.ExtendedCost = fields[5].Get(); + + // 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(); - - 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(); - newEntry.item = fields[2].Get(); - newEntry.maxcount = fields[3].Get(); - newEntry.incrtime = fields[4].Get(); - newEntry.ExtendedCost = fields[5].Get(); - // 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..."); { diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h index c251cf803..b997efe06 100644 --- a/src/server/game/Events/GameEventMgr.h +++ b/src/server/game/Events/GameEventMgr.h @@ -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); diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index e248575a6..6fe94f321 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -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 diff --git a/src/server/game/Instances/InstanceSaveMgr.h b/src/server/game/Instances/InstanceSaveMgr.h index 7c6f18371..686a6fe72 100644 --- a/src/server/game/Instances/InstanceSaveMgr.h +++ b/src/server/game/Instances/InstanceSaveMgr.h @@ -108,7 +108,7 @@ class InstanceSaveMgr friend class InstanceSave; private: - InstanceSaveMgr() = default;; + InstanceSaveMgr() = default; ~InstanceSaveMgr(); public: diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index ab9df20b0..87ca2d8d5 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -561,7 +561,7 @@ bool Map::AddToMap(T* obj, bool checkTransport) if (obj->IsInWorld()) { ASSERT(obj->IsInGrid()); - obj->UpdateObjectVisibility(true); + obj->UpdateObjectVisibilityOnCreate(); return true; } diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 5f2141b91..7f05148cc 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -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; } diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 9716102a5..421f96a5d 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -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; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 781976ccf..3c5a4ccf6 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -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: diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index e32eadda6..393db767e 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -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 diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 692c465dc..846e1b180 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -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("Rate.MoveSpeed", 1.0f); - if (_rate_values[RATE_MOVESPEED] < 0) + // Controls Player movespeed rate. + _rate_values[RATE_MOVESPEED_PLAYER] = sConfigMgr->GetOption("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("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("Rate.Corpse.Decay.Looted", 0.5f); _rate_values[RATE_DURABILITY_LOSS_ON_DEATH] = sConfigMgr->GetOption("DurabilityLoss.OnDeath", 10.0f); diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 19ed065e8..7a5005e5d 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -374,20 +374,24 @@ public: return true; } - static bool HandleNpcDeleteCommand(ChatHandler* handler) + static bool HandleNpcDeleteCommand(ChatHandler* handler, Optional 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 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); diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index a8544c218..b11eb2c1e 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -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!"); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp index 9b69b0e7a..cf39b53a1 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp @@ -188,11 +188,8 @@ 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); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_chess_event.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_chess_event.cpp index 8a6869d64..84d51f7d0 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_chess_event.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_chess_event.cpp @@ -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 diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp index ddc653f32..76758c950 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp @@ -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(); diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp index dc7e686d8..95de6bc40 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp @@ -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); }); } diff --git a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp index f86186b40..802fb0fdd 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp @@ -49,11 +49,15 @@ Position const HarrisonJonesLoc = {120.687f, 1674.0f, 42.0217f, 1.59044f}; DoorData const doorData[] = { - { GO_ZULJIN_FIREWALL, DATA_ZULJIN, DOOR_TYPE_ROOM }, - { 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 }, - { 0, 0, DOOR_TYPE_ROOM } // END + { GO_ZULJIN_FIREWALL, DATA_ZULJIN, DOOR_TYPE_ROOM }, + { 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 }; ObjectData const creatureData[] = @@ -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; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index ddb9bc6fd..97dde689d 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -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); } diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h index 8ed6eb131..66e3b079a 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h @@ -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 }; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp index 4a11a8d13..c0c95f6c7 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp @@ -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 } diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp index 091bb2837..eab24db58 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp @@ -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; diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index 8f1af105d..3abed38b9 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -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); diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index 675ff39f1..1ea12a831 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -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() - { - if (!pInstance) - return; - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_MARTIN_OR_GORKUN_GUID))) - { - c->AI()->DoAction(1); - c->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(); + pInstance->SetData(DATA_TYRANNUS, NOT_STARTED); + } - c->RemoveAllAuras(); - c->UpdatePosition(1017.3f, 168.974f, 642.926f, 5.2709f, true); - c->StopMovingOnCurrentPos(); - if (Vehicle* v = c->GetVehicleKit()) - v->InstallAllAccessories(false); - } + void EnterEvadeMode(EvadeReason /*why*/) override + { + if (!pInstance) + return; + + if (Creature* creature = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_MARTIN_OR_GORKUN_GUID))) + { + creature->AI()->DoAction(1); + creature->DespawnOrUnsummon(); + pInstance->SetGuidData(DATA_MARTIN_OR_GORKUN_GUID, ObjectGuid::Empty); } + + // 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; } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index 57239edd3..7b47377a2 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -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,25 +80,10 @@ enum Shadowmourne SPELL_THIRST_QUENCHED = 72154, }; -#define ESSENCE_OF_BLOOD_QUEEN RAID_MODE(70867, 71473, 71532, 71533) -#define ESSENCE_OF_BLOOD_QUEEN_PLR RAID_MODE(70879, 71525, 71530, 71531) -#define FRENZIED_BLOODTHIRST RAID_MODE(70877, 71474, 70877, 71474) -#define DELIRIOUS_SLASH RAID_MODE(71623, 71624, 71625, 71626) -#define PRESENCE_OF_THE_DARKFALLEN RAID_MODE(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])) - return true; + 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) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index d5107bdbc..263b636d4 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -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(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index 21e13a37a..5616b0e2d 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -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; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index fbc510668..3d7970ead 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -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; } diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp index 2a26a8492..4b491b156 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp @@ -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); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index 956763df8..fd974f452 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -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); } }; diff --git a/src/server/scripts/Northrend/zone_dalaran.cpp b/src/server/scripts/Northrend/zone_dalaran.cpp index 3c23fe2a9..6d2d5aeac 100644 --- a/src/server/scripts/Northrend/zone_dalaran.cpp +++ b/src/server/scripts/Northrend/zone_dalaran.cpp @@ -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()) diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index 43ca3c21b..c253a499b 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -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) diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp index 5df41e6fa..7a4d7ab93 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp @@ -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 }, @@ -45,8 +37,12 @@ ObjectData const creatureData[] = ObjectData const gameObjectData[] = { - { GO_STRANGE_POOL, DATA_STRANGE_POOL }, - { 0, 0 } + { 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 } }; MinionData const minionData[] = @@ -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)) diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h index 4a1d5e276..e25aea198 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h @@ -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 @@ -91,8 +93,8 @@ enum SSSpells enum KeeperCount { - MIN_KEEPER_COUNT = 0, - MAX_KEEPER_COUNT = 24 + MIN_KEEPER_COUNT = 0, + MAX_KEEPER_COUNT = 24 }; template diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp index 897d01c1b..e37234663 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp @@ -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)) diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp index 959649e0f..a0a79b949 100644 --- a/src/server/scripts/Pet/pet_dk.cpp +++ b/src/server/scripts/Pet/pet_dk.cpp @@ -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); } }; diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 0ec9a5fcd..3222df8df 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -751,8 +751,8 @@ class spell_dk_pet_scaling : public AuraScript // Check just if owner has Ravenous Dead since it's effect is not an aura if (AuraEffect const* rdEff = owner->GetAuraEffect(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, SPELLFAMILY_DEATHKNIGHT, 3010, 0)) { - SpellInfo const* spellInfo = rdEff->GetSpellInfo(); // Then get the SpellProto and add the dummy effect value - AddPct(modifier, spellInfo->Effects[EFFECT_1].CalcValue()); // Ravenous Dead edits the original scale + SpellInfo const* spellInfo = rdEff->GetSpellInfo(); // Then get the SpellProto and add the dummy effect value + AddPct(modifier, spellInfo->Effects[EFFECT_1].CalcValue()); // Ravenous Dead edits the original scale } // xinef: Glyph of the Ghoul @@ -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(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(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); } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index b29818522..f672ad8b6 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -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); } diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index 5345782ac..04a596c61 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -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 diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp index bdcba3df3..e365afdf5 100644 --- a/src/server/scripts/World/achievement_scripts.cpp +++ b/src/server/scripts/World/achievement_scripts.cpp @@ -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; diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp index 4a1a28325..814871ee1 100644 --- a/src/server/scripts/World/boss_emerald_dragons.cpp +++ b/src/server/scripts/World/boss_emerald_dragons.cpp @@ -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; } }; diff --git a/src/server/scripts/World/npc_stave_of_ancients.cpp b/src/server/scripts/World/npc_stave_of_ancients.cpp index fede7e6fa..20c64c492 100644 --- a/src/server/scripts/World/npc_stave_of_ancients.cpp +++ b/src/server/scripts/World/npc_stave_of_ancients.cpp @@ -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) { diff --git a/src/server/shared/Network/NetworkThread.h b/src/server/shared/Network/NetworkThread.h index b280c16d4..0f65a97b6 100644 --- a/src/server/shared/Network/NetworkThread.h +++ b/src/server/shared/Network/NetworkThread.h @@ -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(); diff --git a/src/server/shared/Realms/RealmList.cpp b/src/server/shared/Realms/RealmList.cpp index a1c258edd..b3b3f7656 100644 --- a/src/server/shared/Realms/RealmList.cpp +++ b/src/server/shared/Realms/RealmList.cpp @@ -18,8 +18,9 @@ #include "RealmList.h" #include "DatabaseEnv.h" #include "Log.h" -#include "Resolver.h" #include "QueryResult.h" +#include "Resolver.h" +#include "SteadyTimer.h" #include "Util.h" #include #include @@ -227,9 +228,7 @@ void RealmList::UpdateRealms(boost::system::error_code const& error) if (_updateInterval) { - // Calculate the expiration time _updateInterval from now - auto expiration_time = std::chrono::steady_clock::now() + std::chrono::seconds(_updateInterval); - _updateTimer->expires_at(expiration_time); + _updateTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(_updateInterval)); _updateTimer->async_wait([this](boost::system::error_code const& errorCode){ UpdateRealms(errorCode); }); } }