diff --git a/.github/actions/docker-tag-and-build/action.yml b/.github/actions/docker-tag-and-build/action.yml new file mode 100644 index 00000000000000..af988bed6894b7 --- /dev/null +++ b/.github/actions/docker-tag-and-build/action.yml @@ -0,0 +1,39 @@ +name: docker tag and build +description: a helper action to shorten generating docker tags and building +inputs: + component-name: + description: name of the component/docker image (eg worldserver, authserver) + type: string + required: true + push: + description: whether to push the image or not + type: boolean + required: true + version: + description: version tag to use for docker image + required: true + type: string +runs: + using: composite + steps: + - name: Get Docker Metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: acore/ac-wotlk-${{ inputs.component-name }} + tags: | + type=raw,value=${{ inputs.version }} + type=ref,event=branch + + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: ${{ github.workspace }} + file: apps/docker/Dockerfile + push: ${{ inputs.push }} + tags: ${{ steps.meta.outputs.tags }} + target: ${{ inputs.component-name }} + build-args: | + USER_ID=1000 + GROUP_ID=1000 + DOCKER_USER=acore diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index 2dfc535eba3d4e..ffc3104a7e9077 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -4,7 +4,11 @@ on: branches: - 'master' pull_request: - types: ['labeled', 'opened', 'synchronize', 'reopened'] + types: + - labeled + - opened + - synchronize + - reopened concurrency: group: ${{ github.head_ref }} || concat(${{ github.ref }}, ${{ github.workflow }}) @@ -12,166 +16,154 @@ concurrency: jobs: docker-build-n-deploy-dev: - strategy: - fail-fast: true - matrix: - os: [ubuntu-20.04] - runs-on: ${{ matrix.os }} + runs-on: "ubuntu-latest" if: | github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft - && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build') + && (github.ref_name == 'master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build') env: COMPOSE_DOCKER_CLI_BUILD: 1 DOCKER_BUILDKIT: 1 steps: - - name: Extract branch name - shell: bash - run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - id: extract_branch - - - name: Configure + - name: Free up disk space run: | sudo rm -rf /usr/local/lib/android sudo rm -rf /usr/share/dotnet sudo rm -rf /opt/ghc sudo rm -rf "$AGENT_TOOLSDIRECTORY" - docker --version - docker compose version - uses: actions/checkout@v4 - # we need the entire history for the ac-dev-server - # with: - # fetch-depth: 2 - - # - name: Set up Docker Buildx - # uses: docker/setup-buildx-action@v1 - name: Login to Docker Hub - if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master' + if: github.repository == 'azerothcore/azerothcore-wotlk' && github.ref_name == 'master' uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build Dev - if: github.repository == 'azerothcore/azerothcore-wotlk' - env: - #DOCKER_IMAGE_TAG: ${{ steps.extract_branch.outputs.branch }} - DOCKER_CLIENT_TIMEOUT: 400 - COMPOSE_HTTP_TIMEOUT: 400 - run: | - export DOCKER_USER_ID=$(id -u) - export DOCKER_GROUP_ID=$(id -u) - # pull the images first to load the docker cache layers - #./acore.sh docker pull - ./acore.sh docker build - output=$(./acore.sh version | grep "AzerothCore Rev. ") && version=${output#"AzerothCore Rev. "} - DOCKER_IMAGE_TAG=$version docker compose --profile dev --profile local build - - - name: Deploy Dev - #env: - # DOCKER_IMAGE_TAG: ${{ steps.extract_branch.outputs.branch }} - if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master' + - name: Get version + id: version run: | - docker compose --profile dev --profile local push - output=$(./acore.sh version | grep "AzerothCore Rev. ") && version=${output#"AzerothCore Rev. "} - DOCKER_IMAGE_TAG=$version docker compose --profile dev --profile local push + output=$(./acore.sh version | grep "AzerothCore Rev. ") + version=${output#"AzerothCore Rev. "} + echo "version=$version" >> $GITHUB_OUTPUT + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: acore/ac-wotlk-dev-server + tags: | + type=raw,value=${{ steps.version.outputs.version }} + type=ref,event=branch + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: ${{ github.workspace }} + file: apps/docker/Dockerfile.dev-server + push: ${{ github.repository == 'azerothcore/azerothcore-wotlk' && github.ref_name == 'master' }} + tags: ${{ steps.meta.outputs.tags }} + build-args: | + USER_ID=1000 + GROUP_ID=1000 + DOCKER_USER=acore + + # TODO: rename this job docker-build-n-deploy-prod: - strategy: - fail-fast: true - matrix: - os: [ubuntu-20.04] - runs-on: ${{ matrix.os }} + runs-on: "ubuntu-latest" if: | github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft - && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build') + && (github.ref_name == 'master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build') env: COMPOSE_DOCKER_CLI_BUILD: 1 DOCKER_BUILDKIT: 1 steps: - - name: Extract branch name - shell: bash - run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - id: extract_branch - - - name: Configure + - name: Free up disk space run: | sudo rm -rf /usr/local/lib/android sudo rm -rf /usr/share/dotnet sudo rm -rf /opt/ghc sudo rm -rf "$AGENT_TOOLSDIRECTORY" - docker --version - docker compose version - uses: actions/checkout@v4 - # we need the entire history for the ac-dev-server - # with: - # fetch-depth: 2 - # - name: Set up Docker Buildx - # uses: docker/setup-buildx-action@v1 + # The containers created in this workflow are used by + # acore-docker, which has a dependency on mod-eluna. + # + # If you're wanting containers without mod-eluna, the best solution is to + # build them locally (such as with `docker compose build`) + - name: Download Eluna + if: github.repository == 'azerothcore/azerothcore-wotlk' && github.ref_name == 'master' + uses: actions/checkout@v4 + with: + repository: azerothcore/mod-eluna + path: modules/mod-eluna - name: Login to Docker Hub - if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master' + if: github.repository == 'azerothcore/azerothcore-wotlk' && github.ref_name == 'master' uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Cache - uses: actions/cache@v3 - with: - path: var/docker/ccache - key: ccache:${{ matrix.os }}:clang:without-modules:${{ github.ref }}:${{ github.sha }} - restore-keys: | - ccache:${{ matrix.os }}:clang:without-modules:${{ github.ref }} - ccache:${{ matrix.os }}:clang:without-modules - - - name: Build Production images - if: github.repository == 'azerothcore/azerothcore-wotlk' - env: - #DOCKER_IMAGE_TAG: ${{ steps.extract_branch.outputs.branch }} - DOCKER_CLIENT_TIMEOUT: 220 - COMPOSE_HTTP_TIMEOUT: 220 - run: | - export DOCKER_USER_ID=$(id -u) - export DOCKER_GROUP_ID=$(id -u) - # pull the images first to load the docker cache layers - #./acore.sh docker prod:pull - ./acore.sh docker prod:build - output=$(./acore.sh version | grep "AzerothCore Rev. ") && version=${output#"AzerothCore Rev. "} - DOCKER_IMAGE_TAG=$version ./acore.sh docker prod:build - # create the container to allow the copy right after - docker compose create ac-build-prod - docker compose cp ac-build-prod:/azerothcore/var/ccache var/docker/ - echo "ccache exported" - - - name: Deploy Production images - #env: - # DOCKER_IMAGE_TAG: ${{ steps.extract_branch.outputs.branch }} - if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master' + - name: Get version + id: version run: | - docker compose --profile prod push - output=$(./acore.sh version | grep "AzerothCore Rev. ") && version=${output#"AzerothCore Rev. "} - DOCKER_IMAGE_TAG=$version docker compose --profile prod push + output=$(./acore.sh version | grep "AzerothCore Rev. ") + version=${output#"AzerothCore Rev. "} + echo "version=$version" >> $GITHUB_OUTPUT + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: build worldserver + uses: ./.github/actions/docker-tag-and-build + with: + component-name: worldserver + version: ${{ steps.version.outputs.version }} + push: ${{ github.repository == 'azerothcore/azerothcore-wotlk' && github.ref_name == 'master' }} + + - name: build authserver + uses: ./.github/actions/docker-tag-and-build + with: + component-name: authserver + version: ${{ steps.version.outputs.version }} + push: ${{ github.repository == 'azerothcore/azerothcore-wotlk' && github.ref_name == 'master' }} + + - name: build db-import + uses: ./.github/actions/docker-tag-and-build + with: + component-name: db-import + version: ${{ steps.version.outputs.version }} + push: ${{ github.repository == 'azerothcore/azerothcore-wotlk' && github.ref_name == 'master' }} + + - name: build client-data + uses: ./.github/actions/docker-tag-and-build + with: + component-name: client-data + version: ${{ steps.version.outputs.version }} + push: ${{ github.repository == 'azerothcore/azerothcore-wotlk' && github.ref_name == 'master' }} + + - name: build tools + uses: ./.github/actions/docker-tag-and-build + with: + component-name: tools + version: ${{ steps.version.outputs.version }} + push: ${{ github.repository == 'azerothcore/azerothcore-wotlk' && github.ref_name == 'master' }} dispatch-acore-docker: needs: [ docker-build-n-deploy-prod , docker-build-n-deploy-dev] runs-on: ubuntu-latest steps: - - name: Extract branch name - shell: bash - run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - id: extract_branch - - name: Repository Dispatch - if: github.repository == 'azerothcore/azerothcore-wotlk' && steps.extract_branch.outputs.branch == 'master' + if: github.repository == 'azerothcore/azerothcore-wotlk' && github.ref_name == 'master' uses: peter-evans/repository-dispatch@v2 with: token: ${{ secrets.ACORE_DOCKER_REPO_ACCESS_TOKEN }} diff --git a/.gitignore b/.gitignore index 7ec76050346a3d..adf648243f301a 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,8 @@ /src/server/scripts/Custom/* !/src/server/scripts/Custom/README.md -/docker-compose.override.yml +/*.override.yml +/*.override.yaml !.gitkeep diff --git a/apps/docker/Dockerfile b/apps/docker/Dockerfile index 358a7b2a9f5514..d500efe438d0a6 100644 --- a/apps/docker/Dockerfile +++ b/apps/docker/Dockerfile @@ -1,344 +1,255 @@ -#syntax=docker/dockerfile:1.2 - -#================================================================ -# -# DEV: Stage used for the development environment -# and the locally built services -# -#================================================================= - -FROM ubuntu:20.04 as base -ARG USER_ID=1000 -ARG GROUP_ID=1000 -ARG DOCKER_USER=acore - -LABEL description="AC base image for dev containers" - -# List of timezones: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones - -ENV DOCKER=1 - -# Ensure ac-dev-server can properly pull versions -ENV GIT_DISCOVERY_ACROSS_FILESYSTEM=1 - -# set timezone environment variable -ENV TZ=Etc/UTC - -# set noninteractive mode so tzdata doesn't ask to set timezone on install -ENV DEBIAN_FRONTEND=noninteractive - -# Do not use acore dashboard to install -# since it's not cacheable by docker -RUN apt-get update && apt-get install -y gdb gdbserver git dos2unix lsb-core sudo curl unzip \ - make cmake clang libmysqlclient-dev \ - libboost-system1.7*-dev libboost-filesystem1.7*-dev libboost-program-options1.7*-dev libboost-iostreams1.7*-dev \ - build-essential libtool cmake-data openssl libgoogle-perftools-dev google-perftools \ - libssl-dev libmysql++-dev libreadline6-dev zlib1g-dev libbz2-dev mysql-client \ - libncurses5-dev ccache \ - && rm -rf /var/lib/apt/lists/* - -# Ensure git will work with the AzerothCore source directory -RUN git config --global --add safe.directory /azerothcore - -# change timezone in container -RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata - -# Create a non-root user -RUN addgroup --gid "$GROUP_ID" "$DOCKER_USER" && \ - adduser --disabled-password --gecos '' --uid "$USER_ID" --gid "$GROUP_ID" "$DOCKER_USER" && \ - passwd -d "$DOCKER_USER" && \ - echo "$DOCKER_USER ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers - -# must be created to set the correct permissions on them -RUN mkdir -p /azerothcore/env/dist/bin -RUN mkdir -p /azerothcore/env/dist/data/Cameras -RUN mkdir -p /azerothcore/env/dist/data/dbc -RUN mkdir -p /azerothcore/env/dist/data/maps -RUN mkdir -p /azerothcore/env/dist/data/mmaps -RUN mkdir -p /azerothcore/env/dist/data/vmaps -RUN mkdir -p /azerothcore/env/dist/logs -RUN mkdir -p /azerothcore/env/dist/temp -RUN mkdir -p /azerothcore/env/dist/etc -RUN mkdir -p /azerothcore/var/build/obj - -# Correct permissions for non-root operations -RUN chown -R $DOCKER_USER:$DOCKER_USER /home/acore -RUN chown -R $DOCKER_USER:$DOCKER_USER /run -RUN chown -R $DOCKER_USER:$DOCKER_USER /opt -RUN chown -R $DOCKER_USER:$DOCKER_USER /azerothcore - -USER $DOCKER_USER - -# copy only necessary files for the acore dashboard -COPY --chown=$DOCKER_USER:$DOCKER_USER apps /azerothcore/apps -COPY --chown=$DOCKER_USER:$DOCKER_USER bin /azerothcore/bin -COPY --chown=$DOCKER_USER:$DOCKER_USER conf /azerothcore/conf -COPY --chown=$DOCKER_USER:$DOCKER_USER data /azerothcore/data -COPY --chown=$DOCKER_USER:$DOCKER_USER deps /azerothcore/deps -COPY --chown=$DOCKER_USER:$DOCKER_USER acore.json /azerothcore/acore.json -COPY --chown=$DOCKER_USER:$DOCKER_USER acore.sh /azerothcore/acore.sh - -# Download deno and make sure the dashboard works -RUN bash /azerothcore/acore.sh quit +ARG UBUNTU_VERSION=22.04 # lts +ARG TZ=Etc/UTC + +# This target lays out the general directory skeleton for AzerothCore, +# This target isn't intended to be directly used +FROM ubuntu:$UBUNTU_VERSION as skeleton + +ARG DOCKER=1 +ARG DEBIAN_FRONTEND=noninteractive + +ENV TZ=$TZ +ENV AC_FORCE_CREATE_DB=1 + +RUN mkdir -pv \ + /azerothcore/bin \ + /azerothcore/data \ + /azerothcore/deps \ + /azerothcore/env/dist/bin \ + /azerothcore/env/dist/data/Cameras \ + /azerothcore/env/dist/data/dbc \ + /azerothcore/env/dist/data/maps \ + /azerothcore/env/dist/data/mmaps \ + /azerothcore/env/dist/data/vmaps \ + /azerothcore/env/dist/logs \ + /azerothcore/env/dist/temp \ + /azerothcore/env/dist/etc \ + /azerothcore/modules \ + /azerothcore/src \ + /azerothcore/build + +# Configure Timezone +RUN apt-get update \ + && apt-get install -y tzdata ca-certificates \ + && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \ + && echo $TZ > /etc/timezone \ + && dpkg-reconfigure --frontend noninteractive tzdata WORKDIR /azerothcore -#================================================================ -# -# Dev: create dev server image -# -#================================================================= - -FROM base as dev +# This target builds the docker image +# This target can be useful to inspect the explicit outputs from the build, +FROM skeleton as build + +ARG CTOOLS_BUILD="all" +ARG CTYPE="RelWithDebInfo" +ARG CCACHE_CPP2="true" +ARG CSCRIPTPCH="OFF" +ARG CSCRIPTS="static" +ARG CMODULES="static" +ARG CSCRIPTS_DEFAULT_LINKAGE="static" +ARG CWITH_WARNINGS="ON" +ARG CMAKE_EXTRA_OPTIONS="" +ARG GIT_DISCOVERY_ACROSS_FILESYSTEM=1 + +ARG CCACHE_DIR="/ccache" +ARG CCACHE_MAXSIZE="1000MB" +ARG CCACHE_SLOPPINESS="pch_defines,time_macros,include_file_mtime" +ARG CCACHE_COMPRESS="" +ARG CCACHE_COMPRESSLEVEL="9" +ARG CCACHE_COMPILERCHECK="content" +ARG CCACHE_LOGFILE="" + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + build-essential ccache libtool cmake-data make cmake clang \ + git lsb-base curl unzip default-mysql-client openssl \ + default-libmysqlclient-dev libboost-all-dev libssl-dev libmysql++-dev \ + libreadline-dev zlib1g-dev libbz2-dev libncurses5-dev \ + && rm -rf /var/lib/apt/lists/* + +COPY CMakeLists.txt /azerothcore/CMakeLists.txt +COPY conf /azerothcore/conf +COPY deps /azerothcore/deps +COPY src /azerothcore/src +COPY modules /azerothcore/modules -LABEL description="AC dev image for dev containers" - -USER $DOCKER_USER - -# copy everything so we can work directly within the container -# using tools such as vscode dev-container -# NOTE: this folder is different by the /azerothcore (which is binded instead) -COPY --chown=$DOCKER_USER:$DOCKER_USER . /azerothcore - -#================================================================ -# -# SERVICE BASE: prepare the OS for the production-ready services -# -#================================================================= +ARG CACHEBUST=1 -FROM ubuntu:20.04 as servicebase +WORKDIR /azerothcore/build + +RUN --mount=type=cache,target=/ccache,sharing=locked \ + # This may seem silly (and it is), but AzerothCore wants the git repo at + # build time. The git repo is _huge_ and it's not something that really + # makes sense to mount into the container, but this way we can let the build + # have the information it needs without including the hundreds of megabytes + # of git repo into the container. + --mount=type=bind,target=/azerothcore/.git,source=.git \ + git config --global --add safe.directory /azerothcore \ + && cmake /azerothcore \ + -DCMAKE_INSTALL_PREFIX="/azerothcore/env/dist" \ + -DAPPS_BUILD="all" \ + -DTOOLS_BUILD="$CTOOLS_BUILD" \ + -DSCRIPTS="$CSCRIPTS" \ + -DMODULES="$CMODULES" \ + -DWITH_WARNINGS="$CWITH_WARNINGS" \ + -DCMAKE_BUILD_TYPE="$CTYPE" \ + -DCMAKE_CXX_COMPILER="clang++" \ + -DCMAKE_C_COMPILER="clang" \ + -DCMAKE_CXX_COMPILER_LAUNCHER="ccache" \ + -DCMAKE_C_COMPILER_LAUNCHER="ccache" \ + -DBoost_USE_STATIC_LIBS="ON" \ + && cmake --build . --config "$CTYPE" -j $(($(nproc) + 1)) \ + && cmake --install . --config "$CTYPE" + +############################# +# Base runtime for services # +############################# + +FROM skeleton as runtime ARG USER_ID=1000 ARG GROUP_ID=1000 ARG DOCKER_USER=acore -LABEL description="AC service image for server applications" - -# List of timezones: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones +ENV ACORE_COMPONENT=undefined -# set timezone environment variable -ENV TZ=Etc/UTC +# Install base dependencies for azerothcore +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + libmysqlclient21 libreadline8 \ + gettext-base default-mysql-client && \ + rm -rf /var/lib/apt/lists/* -# set noninteractive mode so tzdata doesn't ask to set timezone on install -ENV DEBIAN_FRONTEND=noninteractive +COPY --from=build /azerothcore/env/dist/etc/ /azerothcore/env/ref/etc -# Create a non-root user -RUN addgroup --gid "$GROUP_ID" "$DOCKER_USER" && \ - adduser --disabled-password --gecos '' --uid "$USER_ID" --gid "$GROUP_ID" "$DOCKER_USER" && \ - passwd -d "$DOCKER_USER" && \ - echo "$DOCKER_USER ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers - -# install the required dependencies to run the server -RUN apt-get update && apt-get install -y dos2unix gdb gdbserver google-perftools libgoogle-perftools-dev net-tools \ - libboost-system1.7*-dev libboost-filesystem1.7*-dev libboost-program-options1.7*-dev libboost-iostreams1.7*-dev \ - tzdata libmysqlclient-dev mysql-client curl unzip && rm -rf /var/lib/apt/lists/* ; +VOLUME /azerothcore/env/dist/etc -# change timezone in container -RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata +ENV PATH="/azerothcore/env/dist/bin:$PATH" -# Correct permissions for non-root operations -RUN chown -R $DOCKER_USER:$DOCKER_USER /home/acore -RUN chown -R $DOCKER_USER:$DOCKER_USER /run -RUN chown -R $DOCKER_USER:$DOCKER_USER /opt +RUN groupadd --gid "$GROUP_ID" "$DOCKER_USER" && \ + useradd -d /azerothcore --uid "$USER_ID" --gid "$GROUP_ID" "$DOCKER_USER" && \ + passwd -d "$DOCKER_USER" && \ + chown -R "$DOCKER_USER:$DOCKER_USER" /azerothcore -COPY --chown=$DOCKER_USER:$DOCKER_USER --from=base /azerothcore /azerothcore +COPY apps/docker/entrypoint.sh /entrypoint.sh +RUN chmod -v +x /entrypoint.sh USER $DOCKER_USER -# must be created to avoid permissions errors -RUN mkdir -p /azerothcore/env/dist/data/Cameras -RUN mkdir -p /azerothcore/env/dist/data/dbc -RUN mkdir -p /azerothcore/env/dist/data/maps -RUN mkdir -p /azerothcore/env/dist/data/mmaps -RUN mkdir -p /azerothcore/env/dist/data/vmaps -RUN mkdir -p /azerothcore/env/dist/logs -RUN mkdir -p /azerothcore/env/dist/etc -RUN mkdir -p /azerothcore/env/dist/bin +ENTRYPOINT ["/entrypoint.sh"] -# Download deno and make sure the dashboard works -RUN bash /azerothcore/acore.sh quit +############### +# Auth Server # +############### -WORKDIR /azerothcore/ +FROM runtime as authserver +LABEL description "AzerothCore Auth Server" -#================================================================ -# -# AUTH & WORLD local: images used for local services -# These images don't include binaries by default -# -#================================================================= +ENV ACORE_COMPONENT=authserver +# Don't run database migrations. We can leave that up to the db-import container +ENV AC_UPDATES_ENABLE_DATABASES=0 +# This disables user prompts. The console is still active, however +ENV AC_DISABLE_INTERACTIVE=1 +ENV AC_CLOSE_IDLE_CONNECTIONS=0 -FROM servicebase as authserver-local +COPY --chown=$DOCKER_USER:$DOCKER_USER \ + --from=build \ + /azerothcore/env/dist/bin/authserver /azerothcore/env/dist/bin/authserver -LABEL description="AC authserver image for local environment" -CMD ./acore.sh run-authserver +CMD ["authserver"] -USER $DOCKER_USER +################ +# World Server # +################ -FROM servicebase as worldserver-local +FROM runtime as worldserver -LABEL description="AC worldserver image for local environment" - -CMD ./acore.sh run-worldserver - -USER $DOCKER_USER +LABEL description "AzerothCore World Server" -#================================================================ -# -# BUILD: compile sources -# -#================================================================= -FROM base as build +ENV ACORE_COMPONENT=worldserver +# Don't run database migrations. We can leave that up to the db-import container +ENV AC_UPDATES_ENABLE_DATABASES=0 +# This disables user prompts. The console is still active, however +ENV AC_DISABLE_INTERACTIVE=1 +ENV AC_CLOSE_IDLE_CONNECTIONS=0 -ARG DOCKER_USER=acore -USER $DOCKER_USER +COPY --chown=$DOCKER_USER:$DOCKER_USER \ + --from=build \ + /azerothcore/env/dist/bin/worldserver /azerothcore/env/dist/bin/worldserver -LABEL description="AC Image used by the build stage to generate production images" - -RUN mkdir -p /azerothcore/env/etc/ - -# .git is needed by the compiler -COPY --chown=$DOCKER_USER:$DOCKER_USER ./.git /azerothcore/.git -COPY --chown=$DOCKER_USER:$DOCKER_USER ./CMakeLists.txt /azerothcore/CMakeLists.txt -COPY --chown=$DOCKER_USER:$DOCKER_USER ./deps /azerothcore/deps -COPY --chown=$DOCKER_USER:$DOCKER_USER ./src /azerothcore/src -COPY --chown=$DOCKER_USER:$DOCKER_USER ./modules /azerothcore/modules -# check if we have ccache files available outside -RUN rm -rf /azerothcore/var/ccache/* -COPY --chown=$DOCKER_USER:$DOCKER_USER var/docker/ccache /azerothcore/var/ccache - -# install eluna -RUN git clone --depth=1 --branch=master https://github.com/azerothcore/mod-eluna.git /azerothcore/modules/mod-eluna - -ENV USER_CONF_PATH=/azerothcore/apps/docker/config-docker.sh -ENV CTYPE=RelWithDebInfo -ENV AC_CCACHE=true -ENV CCACHE_CPP2=true -ENV CSCRIPTPCH=OFF -ENV CCOREPCH=OFF -ENV CTOOLS_BUILD=all -# ENV CTOOLS_BUILD=maps-only -ENV CSCRIPTS=static -RUN bash apps/docker/docker-build-prod.sh - -#================================================================ -# -# AUTH SERVICE: create a ready-to-use authserver image -# with binaries included -# -#================================================================= -FROM authserver-local as authserver - -LABEL description="AC Production: authserver" +VOLUME /azerothcore/env/dist/etc -ARG DOCKER_USER=acore -USER $DOCKER_USER +CMD ["worldserver"] -COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/etc /azerothcore/env/dist/etc -COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/authserver /azerothcore/env/dist/bin/authserver +############# +# DB Import # +############# -#================================================================ -# -# WORLD SERVICE: create a ready-to-use worldserver image -# with binaries and data included -# -#================================================================= -FROM worldserver-local as worldserver +FROM runtime as db-import -LABEL description="AC Production: worldserver" +LABEL description "AzerothCore Database Import tool" -ARG DOCKER_USER=acore USER $DOCKER_USER -RUN mkdir -p /azerothcore/env/dist/bin/lua_scripts -COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/etc /azerothcore/env/dist/etc -COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/worldserver /azerothcore/env/dist/bin/worldserver -COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/lua_scripts /azerothcore/env/dist/bin/lua_scripts -COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/dbimport /azerothcore/env/dist/bin/dbimport +ENV ACORE_COMPONENT=dbimport -#================================================================ -# -# CLIENT DATA -# -#================================================================= +COPY --chown=$DOCKER_USER:$DOCKER_USER \ + data data -FROM ubuntu:20.04 as client-data -ARG USER_ID=1000 -ARG GROUP_ID=1000 -ARG DOCKER_USER=acore - -LABEL description="AC Production: client-data" +COPY --chown=$DOCKER_USER:$DOCKER_USER\ + --from=build \ + /azerothcore/env/dist/bin/dbimport /azerothcore/env/dist/bin/dbimport -RUN apt-get update && apt-get install -y tzdata curl unzip && rm -rf /var/lib/apt/lists/* ; +CMD /azerothcore/env/dist/bin/dbimport -# set timezone environment variable -ENV TZ=Etc/UTC +############### +# Client Data # +############### -# set noninteractive mode so tzdata doesn't ask to set timezone on install -ENV DEBIAN_FRONTEND=noninteractive +FROM skeleton as client-data -RUN addgroup --gid "$GROUP_ID" "$DOCKER_USER" && \ - adduser --disabled-password --gecos '' --uid "$USER_ID" --gid "$GROUP_ID" "$DOCKER_USER" && \ - passwd -d "$DOCKER_USER" && \ - echo "$DOCKER_USER ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers +LABEL description="AzerothCore client-data" -# ENV DATAPATH=/azerothcore/env/dist/data-temp ENV DATAPATH=/azerothcore/env/dist/data -ENV DATAPATH_ZIP=/tmp/data.zip -RUN mkdir -p "$DATAPATH" -ARG CACHEBUST=1 -# RUN --mount=type=bind,target=/azerothcore-temp,readwrite --mount=type=cache,target=/azerothcore/env/dist/data-temp /azerothcore-temp/acore.sh client-data && cp -rT /azerothcore/env/dist/data-temp/ /azerothcore/env/dist/data && chown -R $DOCKER_USER:$DOCKER_USER /azerothcore -RUN --mount=type=bind,target=/azerothcore-temp,readwrite /azerothcore-temp/acore.sh client-data && chown -R $DOCKER_USER:$DOCKER_USER /azerothcore +RUN apt-get update && \ + apt-get install -y curl unzip && \ + rm -rf /var/lib/apt/lists/* -USER $DOCKER_USER +COPY --chown=$DOCKER_USER:$DOCKER_USER apps apps -#================================================================ -# -# TOOLS -# -#================================================================= +VOLUME /azerothcore/env/dist/data -FROM ubuntu:20.04 as tools -ARG USER_ID=1000 -ARG GROUP_ID=1000 -ARG DOCKER_USER=acore - -LABEL description="AC Production: tools" - -# List of timezones: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones +USER $DOCKER_USER -# set timezone environment variable -ENV TZ=Etc/UTC +CMD bash -c "source /azerothcore/apps/installer/includes/functions.sh && inst_download_client_data" -# set noninteractive mode so tzdata doesn't ask to set timezone on install -ENV DEBIAN_FRONTEND=noninteractive +################## +# Map Extractors # +################## -RUN apt-get update && apt-get install -y libmysqlclient-dev libssl-dev libbz2-dev \ - libboost-system1.7*-dev libboost-filesystem1.7*-dev libboost-program-options1.7*-dev libboost-iostreams1.7*-dev \ - sudo && rm -rf /var/lib/apt/lists/* ; +FROM runtime as tools -# Create a non-root user -RUN addgroup --gid "$GROUP_ID" "$DOCKER_USER" && \ - adduser --disabled-password --gecos '' --uid "$USER_ID" --gid "$GROUP_ID" "$DOCKER_USER" && \ - passwd -d "$DOCKER_USER" && \ - echo "$DOCKER_USER ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers +LABEL description "AzerothCore Tools" -RUN mkdir -p /azerothcore/env/client/ -RUN chown -R $DOCKER_USER:$DOCKER_USER /azerothcore +WORKDIR /azerothcore/env/dist/ -USER $DOCKER_USER +RUN mkdir -pv /azerothcore/env/dist/Cameras \ + /azerothcore/env/dist/dbc \ + /azerothcore/env/dist/maps \ + /azerothcore/env/dist/mmaps \ + /azerothcore/env/dist/vmaps -WORKDIR /azerothcore/env/client/ +COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build \ + /azerothcore/env/dist/bin/map_extractor /azerothcore/env/dist/bin/map_extractor -RUN mkdir -p /azerothcore/env/client/Cameras -RUN mkdir -p /azerothcore/env/client/dbc -RUN mkdir -p /azerothcore/env/client/maps -RUN mkdir -p /azerothcore/env/client/mmaps -RUN mkdir -p /azerothcore/env/client/vmaps +COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build \ + /azerothcore/env/dist/bin/mmaps_generator /azerothcore/env/dist/bin/mmaps_generator -COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/map_extractor /azerothcore/env/client/map_extractor -COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/mmaps_generator /azerothcore/env/client/mmaps_generator -COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/vmap4_assembler /azerothcore/env/client/vmap4_assembler -COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/vmap4_extractor /azerothcore/env/client/vmap4_extractor +COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build \ + /azerothcore/env/dist/bin/vmap4_assembler /azerothcore/env/dist/bin/vmap4_assembler +COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build \ + /azerothcore/env/dist/bin/vmap4_extractor /azerothcore/env/dist/bin/vmap4_extractor diff --git a/apps/docker/Dockerfile.dev-server b/apps/docker/Dockerfile.dev-server new file mode 100644 index 00000000000000..8924c4688dad55 --- /dev/null +++ b/apps/docker/Dockerfile.dev-server @@ -0,0 +1,83 @@ +#syntax=docker/dockerfile:1.2 + +#================================================================ +# +# DEV: Stage used for the development environment +# and the locally built services +# +#================================================================= + +FROM ubuntu:22.04 as dev +ARG USER_ID=1000 +ARG GROUP_ID=1000 +ARG DOCKER_USER=acore +ARG TZ=Etc/UTC + +LABEL description="AC base image for dev containers" + +# List of timezones: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones + +ENV DOCKER=1 + +# Ensure ac-dev-server can properly pull versions +ENV GIT_DISCOVERY_ACROSS_FILESYSTEM=1 + +# set timezone environment variable +ENV TZ=$TZ + +# set noninteractive mode so tzdata doesn't ask to set timezone on install +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update \ + && apt-get install -y \ + gdb gdbserver git dos2unix lsb-core sudo curl unzip \ + make cmake clang libmysqlclient-dev libboost-all-dev \ + build-essential libtool cmake-data openssl libgoogle-perftools-dev google-perftools \ + libssl-dev libmysql++-dev libreadline6-dev zlib1g-dev libbz2-dev mysql-client \ + libncurses5-dev ccache tzdata \ + && rm -rf /var/lib/apt/lists/* + +# Ensure git will work with the AzerothCore source directory +RUN git config --global --add safe.directory /azerothcore + +# change timezone in container +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \ + && echo $TZ > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata + +# Create a non-root user +RUN addgroup --gid "$GROUP_ID" "$DOCKER_USER" && \ + adduser --disabled-password --gecos '' --uid "$USER_ID" --gid "$GROUP_ID" "$DOCKER_USER" && \ + passwd -d "$DOCKER_USER" && \ + echo "$DOCKER_USER ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers + +# must be created to set the correct permissions on them +RUN mkdir -p \ + /azerothcore/env/dist/bin \ + /azerothcore/env/dist/data/Cameras \ + /azerothcore/env/dist/data/dbc \ + /azerothcore/env/dist/data/maps \ + /azerothcore/env/dist/data/mmaps \ + /azerothcore/env/dist/data/vmaps \ + /azerothcore/env/dist/logs \ + /azerothcore/env/dist/temp \ + /azerothcore/env/dist/etc \ + /azerothcore/var/build/obj + +# Correct permissions for non-root operations +RUN chown -R $DOCKER_USER:$DOCKER_USER /home/acore /run /opt /azerothcore + +USER $DOCKER_USER + +# copy only necessary files for the acore dashboard +COPY --chown=$DOCKER_USER:$DOCKER_USER apps /azerothcore/apps +COPY --chown=$DOCKER_USER:$DOCKER_USER bin /azerothcore/bin +COPY --chown=$DOCKER_USER:$DOCKER_USER conf /azerothcore/conf +COPY --chown=$DOCKER_USER:$DOCKER_USER data /azerothcore/data +COPY --chown=$DOCKER_USER:$DOCKER_USER deps /azerothcore/deps +COPY --chown=$DOCKER_USER:$DOCKER_USER acore.json /azerothcore/acore.json +COPY --chown=$DOCKER_USER:$DOCKER_USER acore.sh /azerothcore/acore.sh + +# Download deno and make sure the dashboard works +RUN bash /azerothcore/acore.sh quit + +WORKDIR /azerothcore diff --git a/apps/docker/README.md b/apps/docker/README.md index 80cd4fa10022e9..546cbbfaa6d726 100644 --- a/apps/docker/README.md +++ b/apps/docker/README.md @@ -1,27 +1,41 @@ -# Run AzerothCore with Docker +# Docker -*This readme it's a summary of the AzerothCore docker features.* +Full documentation is [on our wiki](https://www.azerothcore.org/wiki/install-with-docker#installation) -Docker. is a software that performs operating-system-level virtualization, allowing to wrap and launch applications inside containers. +## Building -Thanks to Docker, you can quickly setup and run AzerothCore in any operating system. +### Prerequisites -The **only** requirement is having [Docker](https://docs.docker.com/install/) installed into your system. Forget about installing mysql, visual studio, cmake, etc... +Ensure that you have docker, docker compose (v2), and the docker buildx command +installed. -### Installation instructions +It's all bundled with [Docker Desktop](https://docs.docker.com/get-docker/), +though if you're using Linux you can install them through your distribution's +package manage or by using the [documentation from docker](https://docs.docker.com/engine/install/) -Check the [Install with Docker](https://www.azerothcore.org/wiki/Install-with-Docker) guide. +### Running the Build -### Memory usage +1. Build containers with command -The total amount of RAM when running all AzerothCore docker containers is **less than 2 GB**. +```console +$ docker compose build +``` -![AzerothCore containers memory](https://user-images.githubusercontent.com/75517/51078287-10e65b80-16b3-11e9-807f-f59a5844dae5.png) + 1. Note that the initial build will take a long time, though subsequent builds should be faster +2. Start containers with command -### Docker containers vs Virtual machines +```console +$ docker compose up -d +# Skip the build step +$ docker compose up -d --build +``` -Using Docker will have the same benefits as using virtual machines, but with much less overhead: + 1. Note that this command may take a while the first time, for the database import -![Docker containers vs Virtual machines](https://user-images.githubusercontent.com/75517/51078179-d4fec680-16b1-11e9-8ce6-87b5053f55dd.png) +3. (on first install) You'll need to attach to the worldserver and create an Admin account +```console +$ docker compose attach ac-worldserver +AC> account create admin password 3 -1 +``` diff --git a/apps/docker/config-docker.sh b/apps/docker/config-docker.sh deleted file mode 100644 index 7f5482480d581e..00000000000000 --- a/apps/docker/config-docker.sh +++ /dev/null @@ -1,8 +0,0 @@ -CUR_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -CTOOLS_BUILD=all - -# allow the user to override configs -if [ -f "$AC_PATH_CONF/config.sh" ]; then - source "$AC_PATH_CONF/config.sh" # should overwrite previous -fi diff --git a/apps/docker/docker-build-dev.sh b/apps/docker/docker-build-dev.sh deleted file mode 100644 index ced35c437d1912..00000000000000 --- a/apps/docker/docker-build-dev.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -CUR_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -source "$CUR_PATH/docker-build-prod.sh" - -echo "Fixing EOL..." -# using -n (new file mode) should also fix the issue -# when the file is created with the default acore user but you -# set a different user into the docker configurations -for file in "env/dist/etc/"* -do - dos2unix -n $file $file -done diff --git a/apps/docker/docker-build-prod.sh b/apps/docker/docker-build-prod.sh deleted file mode 100755 index 07a42474b4eda5..00000000000000 --- a/apps/docker/docker-build-prod.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -cd /azerothcore - -bash acore.sh compiler build diff --git a/apps/docker/docker-cmd.sh b/apps/docker/docker-cmd.sh index 3a75174adc9e62..c3b61a067e8e56 100644 --- a/apps/docker/docker-cmd.sh +++ b/apps/docker/docker-cmd.sh @@ -54,7 +54,7 @@ while [[ $# -gt 0 ]]; do case "$1" in start:app) set -x - docker compose --profile app up + docker compose up set +x # pop the head off of the queue of args # After this, the value of $1 is the value of $2 @@ -63,102 +63,138 @@ while [[ $# -gt 0 ]]; do start:app:d) set -x - docker compose --profile app up -d + docker compose up -d set +x shift ;; build) set -x - docker compose --profile local --profile dev --profile dev-build build - docker compose --profile dev-build run --rm --no-deps ac-dev-build /bin/bash /azerothcore/apps/docker/docker-build-dev.sh + docker compose build set +x shift ;; pull) set -x - docker compose --profile local --profile dev --profile dev-build pull + docker compose pull set +x shift ;; build:nocache) set -x - docker compose --profile local --profile dev --profile dev-build build --no-cache - docker compose run --rm --no-deps ac-dev-build /bin/bash /azerothcore/apps/docker/docker-build-dev.sh + docker compose build --no-cache set +x shift ;; clean:build) set -x - docker compose run --rm --no-deps ac-dev-server bash acore.sh compiler clean - docker compose run --rm --no-deps ac-dev-server bash acore.sh compiler ccacheClean + # Don't run 'docker buildx prune' since it may "escape" our bubble + # and affect other projects on the user's workstation/server + cat < https://docs.docker.com/engine/reference/commandline/buildx_prune/ +EOF set +x shift ;; client-data) set -x - docker compose run --rm --no-deps ac-dev-server bash acore.sh client-data + docker compose up ac-client-data-init set +x shift ;; dev:up) set -x - docker compose up -d ac-dev-server + docker compose --profile dev up ac-dev-server -d set +x shift ;; dev:build) set -x - docker compose run --rm ac-dev-server bash acore.sh compiler build + docker compose --profile dev run --rm ac-dev-server bash /azerothcore/acore.sh compiler build set +x shift ;; dev:dash) set -x - docker compose run --rm ac-dev-server bash /azerothcore/acore.sh ${@:2} + docker compose --profile dev run --rm ac-dev-server bash /azerothcore/acore.sh ${@:2} set +x shift ;; dev:shell) set -x - docker compose up -d ac-dev-server - docker compose exec ac-dev-server bash ${@:2} + docker compose --profile dev up -d ac-dev-server + docker compose --profile dev exec ac-dev-server bash ${@:2} set +x shift ;; build:prod|prod:build) + cat < 2023_10_15_00 +-- Paelarin +DELETE FROM `gossip_menu` WHERE (`MenuID` = 7311) AND (`TextID` IN (8679)); +INSERT INTO `gossip_menu` (`MenuID`, `TextID`) VALUES +(7311, 8679); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 15) AND (`SourceGroup` = 7311) AND (`SourceEntry` = 0); +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 14) AND (`SourceGroup` = 7311) AND (`SourceEntry` = 8679); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 7311, 0, 0, 0, 16, 0, 128, 0, 0, 1, 0, 0, '', 'Show gossip menu 7311 option 0 only if player is not a troll.'), +(14, 7311, 8679, 0, 0, 16, 0, 128, 0, 0, 0, 0, 0, '', 'Show gossip menu 7311, npc text 8679 only if player race is a troll.'); diff --git a/data/sql/updates/db_world/2023_10_16_00.sql b/data/sql/updates/db_world/2023_10_16_00.sql new file mode 100644 index 00000000000000..a1dbb5c375396a --- /dev/null +++ b/data/sql/updates/db_world/2023_10_16_00.sql @@ -0,0 +1,3 @@ +-- DB update 2023_10_15_00 -> 2023_10_16_00 +-- +UPDATE `creature_template` SET `flags_extra` = `flags_extra`|256 WHERE `entry` = 21216; diff --git a/data/sql/updates/db_world/2023_10_16_01.sql b/data/sql/updates/db_world/2023_10_16_01.sql new file mode 100644 index 00000000000000..4d38e9401f0e89 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_16_01.sql @@ -0,0 +1,4 @@ +-- DB update 2023_10_16_00 -> 2023_10_16_01 +-- Scourge Banner +DELETE FROM `spell_script_names` WHERE `spell_id`=16989 AND `ScriptName`='spell_gen_planting_scourge_banner'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (16989, 'spell_gen_planting_scourge_banner'); diff --git a/data/sql/updates/db_world/2023_10_16_02.sql b/data/sql/updates/db_world/2023_10_16_02.sql new file mode 100644 index 00000000000000..23bcc6ae5b1199 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_16_02.sql @@ -0,0 +1,6 @@ +-- DB update 2023_10_16_01 -> 2023_10_16_02 +-- Elder Cloud Serpent +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 4119); +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 +(4119, 0, 0, 0, 0, 0, 100, 0, 0, 0, 3400, 4800, 0, 0, 11, 8246, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Elder Cloud Serpent - In Combat - Cast \'Lightning Bolt\''), +(4119, 0, 1, 0, 0, 0, 100, 0, 0, 0, 7000, 11000, 0, 0, 11, 421, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Elder Cloud Serpent - In Combat - Cast \'Chain Lightning\''); diff --git a/data/sql/updates/db_world/2023_10_16_03.sql b/data/sql/updates/db_world/2023_10_16_03.sql new file mode 100644 index 00000000000000..8e27ac3a99042d --- /dev/null +++ b/data/sql/updates/db_world/2023_10_16_03.sql @@ -0,0 +1,5 @@ +-- DB update 2023_10_16_02 -> 2023_10_16_03 +-- +DELETE FROM `spell_proc_event` WHERE `entry`=35399; +INSERT INTO `spell_proc_event` (`entry`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `procFlags`, `procEx`, `procPhase`, `ppmRate`, `CustomChance`, `Cooldown`) VALUES +(35399, 0, 0, 0, 0, 0, 131072, 2048, 0, 0, 0, 0); diff --git a/data/sql/updates/db_world/2023_10_16_04.sql b/data/sql/updates/db_world/2023_10_16_04.sql new file mode 100644 index 00000000000000..e1979fa67eb175 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_16_04.sql @@ -0,0 +1,3 @@ +-- DB update 2023_10_16_03 -> 2023_10_16_04 +-- Shamanistic Rage PPM 10 -> 18 +UPDATE `spell_proc_event` SET `ppmRate` = 18 WHERE `entry` = 30823; diff --git a/data/sql/updates/db_world/2023_10_17_00.sql b/data/sql/updates/db_world/2023_10_17_00.sql new file mode 100644 index 00000000000000..0e6e9794d428a2 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_17_00.sql @@ -0,0 +1,43 @@ +-- DB update 2023_10_16_04 -> 2023_10_17_00 +-- Move Mindless Skeletons (11197) created by Baron Rivendare (10440) +-- to more accurate locations based on sniffed data. +DELETE FROM `spell_target_position` WHERE `ID`=17475 AND `EffectIndex`=0; +INSERT INTO `spell_target_position` (`ID`, `EffectIndex`, `MapID`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `VerifiedBuild`) VALUES (17475, 0, 329, 4012.92, -3365.70, 116.251, 0.745, 50664); +DELETE FROM `spell_target_position` WHERE `ID`=17476 AND `EffectIndex`=0; +INSERT INTO `spell_target_position` (`ID`, `EffectIndex`, `MapID`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `VerifiedBuild`) VALUES (17476, 0, 329, 4009.10, -3352.31, 116.712, 0.299, 50664); +DELETE FROM `spell_target_position` WHERE `ID`=17477 AND `EffectIndex`=0; +INSERT INTO `spell_target_position` (`ID`, `EffectIndex`, `MapID`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `VerifiedBuild`) VALUES (17477, 0, 329, 4013.96, -3338.65, 116.242, 6.094, 50664); +DELETE FROM `spell_target_position` WHERE `ID`=17478 AND `EffectIndex`=0; +INSERT INTO `spell_target_position` (`ID`, `EffectIndex`, `MapID`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `VerifiedBuild`) VALUES (17478, 0, 329, 4051.75, -3339.05, 116.241, 3.340, 50664); +DELETE FROM `spell_target_position` WHERE `ID`=17479 AND `EffectIndex`=0; +INSERT INTO `spell_target_position` (`ID`, `EffectIndex`, `MapID`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `VerifiedBuild`) VALUES (17479, 0, 329, 4055.96, -3351.46, 116.586, 2.870, 50664); +DELETE FROM `spell_target_position` WHERE `ID`=17480 AND `EffectIndex`=0; +INSERT INTO `spell_target_position` (`ID`, `EffectIndex`, `MapID`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `VerifiedBuild`) VALUES (17480, 0, 329, 4053.11, -3364.98, 116.402, 2.287, 50664); + +-- Additionally, cause the Baron to despawn his summoned Mindless Skeletons +-- when he is reset. +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 10440; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 10440); +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 +(10440, 0, 0, 0, 0, 0, 100, 0, 4000, 9000, 7000, 11000, 0, 0, 11, 15284, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - In Combat - Cast \'Cleave\''), +(10440, 0, 1, 0, 0, 0, 100, 0, 1000, 6000, 6000, 9000, 0, 0, 11, 17393, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - In Combat - Cast \'Shadow Bolt\''), +(10440, 0, 2, 0, 0, 0, 100, 0, 7000, 11000, 9000, 15000, 0, 0, 11, 15708, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - In Combat - Cast \'Mortal Strike\''), +(10440, 0, 3, 0, 0, 0, 100, 513, 0, 0, 0, 0, 0, 0, 11, 17467, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - In Combat - Cast \'Unholy Aura\' (No Repeat)'), +(10440, 0, 4, 5, 0, 0, 100, 0, 10000, 10000, 20000, 20000, 0, 0, 11, 17473, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - In Combat - Cast \'Raise Dead\''), +(10440, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - In Combat - Say Line 7'), +(10440, 0, 6, 0, 0, 0, 100, 0, 22000, 22000, 20000, 20000, 0, 0, 1, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - In Combat - Say Line 8'), +(10440, 0, 7, 8, 0, 0, 100, 512, 11000, 11000, 20000, 20000, 0, 0, 11, 17475, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - In Combat - Cast \'Raise Dead\''), +(10440, 0, 8, 9, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 11, 17476, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - In Combat - Cast \'Raise Dead\''), +(10440, 0, 9, 10, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 11, 17477, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - In Combat - Cast \'Raise Dead\''), +(10440, 0, 10, 11, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 11, 17478, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - In Combat - Cast \'Raise Dead\''), +(10440, 0, 11, 12, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 11, 17479, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - In Combat - Cast \'Raise Dead\''), +(10440, 0, 12, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 11, 17480, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - In Combat - Cast \'Raise Dead\''), +(10440, 0, 13, 0, 6, 0, 100, 512, 0, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 16031, 100, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - On Just Died - Free Prisoner'), +(10440, 0, 14, 0, 4, 0, 100, 512, 0, 0, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 0, 14, 35848, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - On Aggro - Set GO State To 1'), +(10440, 0, 15, 0, 6, 0, 100, 512, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 14, 35848, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - On Just Died - Set GO State To 0'), +(10440, 0, 16, 0, 25, 0, 100, 512, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 14, 35848, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - On Reset - Set GO State To 0'), +(10440, 0, 17, 18, 0, 0, 100, 512, 1000, 1000, 100, 100, 0, 0, 118, 0, 0, 0, 0, 0, 0, 14, 35848, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - In Combat - Set GO State To 0'), +(10440, 0, 18, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - In Combat - Evade'), +(10440, 0, 19, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 204, 11197, 0, 0, 0, 0, 0, 0, 0, 'Baron Rivendare - On Reset - Kill Summoned Creatures'); + diff --git a/data/sql/updates/db_world/2023_10_17_01.sql b/data/sql/updates/db_world/2023_10_17_01.sql new file mode 100644 index 00000000000000..902b068f0c6429 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_17_01.sql @@ -0,0 +1,6 @@ +-- DB update 2023_10_17_00 -> 2023_10_17_01 +-- Minor Manifestation of Earth +UPDATE `creature_template` SET `AIName` = '' WHERE `entry` = 5891; +UPDATE `creature_template_addon` SET `auras` = '8203' WHERE (`entry` = 5891); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 5891) AND (`source_type` = 0); diff --git a/data/sql/updates/db_world/2023_10_17_02.sql b/data/sql/updates/db_world/2023_10_17_02.sql new file mode 100644 index 00000000000000..05fdf6a150d2cb --- /dev/null +++ b/data/sql/updates/db_world/2023_10_17_02.sql @@ -0,0 +1,14 @@ +-- DB update 2023_10_17_01 -> 2023_10_17_02 +-- Midsummer Celebrants - Applause/Cheer +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 16781; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 16781); +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 +(16781, 0, 0, 1, 8, 0, 100, 0, 45407, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Midsummer Celebrant - On Spellhit \'Reveler - Applause/Cheer\' - Set Orientation Invoker'), +(16781, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 80, 1678100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Midsummer Celebrant - On Spellhit \'Reveler - Applause/Cheer\' - Run Script'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 1678100); +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 +(1678100, 9, 0, 0, 0, 0, 100, 0, 100, 100, 0, 0, 0, 0, 10, 4, 21, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Midsummer Celebrant - Actionlist - Play Random Emote (4, 21)'), +(1678100, 9, 1, 0, 0, 0, 100, 0, 4200, 4200, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Midsummer Celebrant - Actionlist - Set Orientation Home Position'); + diff --git a/data/sql/updates/db_world/2023_10_17_03.sql b/data/sql/updates/db_world/2023_10_17_03.sql new file mode 100644 index 00000000000000..c9dbafdc9a830a --- /dev/null +++ b/data/sql/updates/db_world/2023_10_17_03.sql @@ -0,0 +1,12 @@ +-- DB update 2023_10_17_02 -> 2023_10_17_03 +-- Eridan Bluewind +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 911600); +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 +(911600, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 83, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eridan Bluewind - On Script - Remove Npc Flags Gossip & Questgiver'), +(911600, 9, 1, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eridan Bluewind - On Script - Say Line 0'), +(911600, 9, 2, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2.59669, 'Eridan Bluewind - On Script - Set Orientation 2,59669'), +(911600, 9, 3, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 0, 0, 11, 28892, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eridan Bluewind - On Script - Cast \'Nature Channeling\''), +(911600, 9, 4, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2.72271, 'Eridan Bluewind - On Script - Set Orientation 2,72271'), +(911600, 9, 5, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eridan Bluewind - On Script - Say Line 1'), +(911600, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 28, 28892, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eridan Bluewind - On Script - Remove Aura \'Nature Channeling\''), +(911600, 9, 7, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 0, 0, 82, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eridan Bluewind - On Script - Add Npc Flags Gossip & Questgiver'); diff --git a/data/sql/updates/db_world/2023_10_17_04.sql b/data/sql/updates/db_world/2023_10_17_04.sql new file mode 100644 index 00000000000000..d04d2056151b35 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_17_04.sql @@ -0,0 +1,7 @@ +-- DB update 2023_10_17_03 -> 2023_10_17_04 +-- +DELETE FROM `creature` WHERE `guid` IN (93763, 93764, 93765); +INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES +(93763, 21964, 0, 0, 548, 0, 0, 1, 1, 0, 463.83, -540.23, -7.54, 3.15, 604800, 0, 0, 603120, 161550, 0, 0, 0, 0, '', 0, 0, NULL), +(93764, 21965, 0, 0, 548, 0, 0, 1, 1, 1, 459.61, -534.81, -7.54, 3.82, 604800, 0, 0, 603120, 161550, 0, 0, 0, 0, '', 0, 0, NULL), +(93765, 21966, 0, 0, 548, 0, 0, 1, 1, 1, 459.94, -547.28, -7.54, 2.42, 604800, 0, 0, 603120, 161550, 0, 0, 0, 0, '', 0, 0, NULL); diff --git a/data/sql/updates/db_world/2023_10_17_05.sql b/data/sql/updates/db_world/2023_10_17_05.sql new file mode 100644 index 00000000000000..1c76ed537a7b19 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_17_05.sql @@ -0,0 +1,4 @@ +-- DB update 2023_10_17_04 -> 2023_10_17_05 +-- +UPDATE `creature_template_addon` SET `auras` = '35777 43905' WHERE `entry` = 23698; +UPDATE `creature_addon` SET `auras` = '35777 43905 44096' WHERE `guid` = 88960; diff --git a/data/sql/updates/db_world/2023_10_17_06.sql b/data/sql/updates/db_world/2023_10_17_06.sql new file mode 100644 index 00000000000000..aa21f2f400c1f4 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_17_06.sql @@ -0,0 +1,6 @@ +-- DB update 2023_10_17_05 -> 2023_10_17_06 +-- Ravenous Windroc +UPDATE `smart_scripts` SET `action_param2` = 0 WHERE `entryorguid` = 18220 AND `source_type` = 0 AND `id` = 0; + +DELETE FROM `spell_custom_attr` WHERE `spell_id`=30285; +INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES (30285, 4194304); diff --git a/data/sql/updates/db_world/2023_10_17_07.sql b/data/sql/updates/db_world/2023_10_17_07.sql new file mode 100644 index 00000000000000..6438a8a53af6ed --- /dev/null +++ b/data/sql/updates/db_world/2023_10_17_07.sql @@ -0,0 +1,3 @@ +-- DB update 2023_10_17_06 -> 2023_10_17_07 +-- Moroes guests +UPDATE `creature_template` SET `minlevel` = 70, `maxlevel` = 70 WHERE (`entry` = 19874); diff --git a/data/sql/updates/db_world/2023_10_18_00.sql b/data/sql/updates/db_world/2023_10_18_00.sql new file mode 100644 index 00000000000000..27ab6a99c85d93 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_18_00.sql @@ -0,0 +1,15 @@ +-- DB update 2023_10_17_07 -> 2023_10_18_00 +-- midsummer creatureAI npc_midsummer_ribbon_pole_target +UPDATE `creature_template` SET `ScriptName` = 'npc_midsummer_ribbon_pole_target' WHERE `entry` = 17066; + +-- midsummer NPC Big Dancing Flame - SmartAI - fire dance spell +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 26267; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 26267); +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 +(26267, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 45418, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Big Dancing Flames - On Just Summoned - Cast Spell \'Fire Dancing\''); + +-- midsummer add spell script spell_midsummer_ribbon_pole_firework +DELETE FROM `spell_script_names` WHERE `spell_id` = 46847; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(46847, 'spell_midsummer_ribbon_pole_firework'); diff --git a/data/sql/updates/db_world/2023_10_18_01.sql b/data/sql/updates/db_world/2023_10_18_01.sql new file mode 100644 index 00000000000000..1ecbaf70280cdc --- /dev/null +++ b/data/sql/updates/db_world/2023_10_18_01.sql @@ -0,0 +1,23 @@ +-- DB update 2023_10_18_00 -> 2023_10_18_01 +-- Use sniffed values for Midsummer Music Doodad spawns +DELETE FROM `gameobject` WHERE `id` = 188174 AND `guid` IN (50573, 50571, 50557, 50556, 50555, 50554, 50553, 50552); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES +(50573, 188174, 0, 0, 0, 1, 1, -4695.85888671875, -1218.7857666015625, 501.659393310546875, 5.93412017822265625, 0, 0, -0.17364788055419921, 0.984807789325714111, 120, 255, 1, 50063), +(50571, 188174, 0, 0, 0, 1, 1, 1817.0294189453125, 223.62457275390625, 59.57859420776367187, 3.089183330535888671, 0, 0, 0.99965667724609375, 0.026201646775007247, 120, 255, 1, 50063), +(50557, 188174, 530, 0, 0, 1, 1, -1748.7203369140625, 5333.59619140625, -12.4281425476074218, 4.398232460021972656, 0, 0, -0.80901622772216796, 0.587786316871643066, 120, 255, 1, 50063), +(50556, 188174, 1, 0, 0, 1, 1, -1023.13018798828125, 298.5625, 135.745941162109375, 1.640606880187988281, 0, 0, 0.731352806091308593, 0.6819993257522583, 120, 255, 1, 50063), +(50555, 188174, 1, 0, 0, 1, 1, 8703.021484375, 947.47265625, 13.45331859588623046, 3.857182979583740234, 0, 0, -0.93667125701904296, 0.350209832191467285, 120, 255, 1, 50063), +(50554, 188174, 0, 0, 0, 1, 1, -8836.6044921875, 866.36004638671875, 98.71681976318359375, 2.094393253326416015, 0, 0, 0.866024971008300781, 0.50000077486038208, 120, 255, 1, 50063), +(50553, 188174, 530, 0, 0, 1, 1, 9794.822265625, -7248.7412109375, 26.09736061096191406, 3.682650327682495117, 0, 0, -0.96362972259521484, 0.26724100112915039, 120, 255, 1, 50063), +(50552, 188174, 530, 0, 0, 1, 1, -3798.689208984375, -11508.978515625, -134.82122802734375, 5.061456203460693359, 0, 0, -0.57357597351074218, 0.819152355194091796, 120, 255, 1, 50063); + +DELETE FROM `game_event_gameobject` WHERE `eventEntry` = 1 AND `guid` IN (50573, 50571, 50557, 50556, 50555, 50554, 50553, 50552); +INSERT INTO `game_event_gameobject` (`eventEntry`,`guid`) VALUES +(1, 50573), +(1, 50571), +(1, 50557), +(1, 50556), +(1, 50555), +(1, 50554), +(1, 50553), +(1, 50552); diff --git a/data/sql/updates/db_world/2023_10_18_02.sql b/data/sql/updates/db_world/2023_10_18_02.sql new file mode 100644 index 00000000000000..039a3cee41e492 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_18_02.sql @@ -0,0 +1,9 @@ +-- DB update 2023_10_18_01 -> 2023_10_18_02 +-- Strange Engine Part +DELETE FROM `gameobject_loot_template` WHERE `Entry` = 19605 AND `Item` = 34469; +INSERT INTO `gameobject_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES +(19605, 34469, 0, 0.5, 0, 1, 1, 1, 1, 'Strange Engine Part'); + +-- Make it repeatable + correct gold reward +UPDATE `quest_template_addon` SET `SpecialFlags` = `SpecialFlags`|1 WHERE (`ID` = 11531); +UPDATE `quest_template` SET `RewardBonusMoney` = 75900 WHERE (`ID` = 11531); diff --git a/data/sql/updates/db_world/2023_10_20_00.sql b/data/sql/updates/db_world/2023_10_20_00.sql new file mode 100644 index 00000000000000..77fa00ad0b2f35 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_20_00.sql @@ -0,0 +1,6 @@ +-- DB update 2023_10_18_02 -> 2023_10_20_00 +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 19 AND `SourceGroup` = 0 AND `SourceEntry` IN (10024,10017); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(19, 0, 10024, 0, 0, 5, 0, 934, 7, 0, 0, 0, 0, '', 'Show quest \'Voren\'thal\'s Visions\' only if the player is unfriendly or lower towards The Scryers.'), +(19, 0, 10017, 0, 0, 5, 0, 932, 7, 0, 0, 0, 0, '', 'Show quest \'Strained Supplies\' only if the player is unfriendly or lower towards The Aldor.'); diff --git a/data/sql/updates/db_world/2023_10_20_01.sql b/data/sql/updates/db_world/2023_10_20_01.sql new file mode 100644 index 00000000000000..8c9e8cc0e2c7be --- /dev/null +++ b/data/sql/updates/db_world/2023_10_20_01.sql @@ -0,0 +1,3 @@ +-- DB update 2023_10_20_00 -> 2023_10_20_01 +-- Adyen the Lightwarden +UPDATE `creature_template` SET `unit_flags` = `unit_flags`&~256 WHERE `entry` = 18537; diff --git a/data/sql/updates/db_world/2023_10_20_02.sql b/data/sql/updates/db_world/2023_10_20_02.sql new file mode 100644 index 00000000000000..589f57d5833f3c --- /dev/null +++ b/data/sql/updates/db_world/2023_10_20_02.sql @@ -0,0 +1,20 @@ +-- DB update 2023_10_20_01 -> 2023_10_20_02 +-- +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_calling_korkron_or_wildhammer'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(38249, 'spell_calling_korkron_or_wildhammer'), +(38119, 'spell_calling_korkron_or_wildhammer'); + +UPDATE `creature_template` SET `ScriptName`='npc_korkron_or_wildhammer' WHERE `entry` IN (22059, 21998); + +UPDATE `creature_template` SET `speed_run` = 2.28571 WHERE `entry` IN (22059, 21998); + +SET @NPC_WILDHAMMER_GRYPHON_RIDER := 22059; +DELETE FROM `creature_text` WHERE `CreatureID`=@NPC_WILDHAMMER_GRYPHON_RIDER; +INSERT INTO `creature_text` (`CreatureID`,`GroupID`,`ID`,`Text`,`Type`,`Language`,`Probability`,`Emote`,`Duration`,`Sound`,`BroadcastTextId`, `TextRange`, `comment`) VALUES +(@NPC_WILDHAMMER_GRYPHON_RIDER, 0, 0, 'What is it, $r? Have you gathered some new information?', 12, 0, 100, 0, 0, 0, 19742, 0, 'SAY_LAND'); + +SET @NPC_KORKRON_WIND_RIDER := 21998; +DELETE FROM `creature_text` WHERE `CreatureID`=@NPC_KORKRON_WIND_RIDER; +INSERT INTO `creature_text` (`CreatureID`,`GroupID`,`ID`,`Text`,`Type`,`Language`,`Probability`,`Emote`,`Duration`,`Sound`,`BroadcastTextId`, `TextRange`, `comment`) VALUES +(@NPC_KORKRON_WIND_RIDER, 0, 0, 'Speak quickly, $n. We haven\'t much time!', 12, 0, 100, 0, 0, 0, 19675, 0, 'SAY_LAND'); diff --git a/data/sql/updates/db_world/2023_10_20_03.sql b/data/sql/updates/db_world/2023_10_20_03.sql new file mode 100644 index 00000000000000..ea8448b82e5e74 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_20_03.sql @@ -0,0 +1,5 @@ +-- DB update 2023_10_20_02 -> 2023_10_20_03 +-- +DELETE FROM `creature_template_addon` WHERE `entry` = 21229; +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(21229, 0, 0, 0, 1, 0, 0, '38620'); diff --git a/data/sql/updates/db_world/2023_10_20_04.sql b/data/sql/updates/db_world/2023_10_20_04.sql new file mode 100644 index 00000000000000..12ba3f71b61a68 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_20_04.sql @@ -0,0 +1,6 @@ +-- DB update 2023_10_20_03 -> 2023_10_20_04 +-- Bloodlust/Heroism - Karazhan chest event +DELETE FROM `spell_cooldown_overrides` WHERE `Id` IN (37472,37471); +INSERT INTO `spell_cooldown_overrides` (`Id`, `RecoveryTime`, `CategoryRecoveryTime`, `StartRecoveryTime`, `StartRecoveryCategory`) VALUES +(37472, 15000, 15000, 0, 0), +(37471, 15000, 15000, 0, 0); diff --git a/data/sql/updates/db_world/2023_10_20_05.sql b/data/sql/updates/db_world/2023_10_20_05.sql new file mode 100644 index 00000000000000..e1c094bf44ea36 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_20_05.sql @@ -0,0 +1,39 @@ +-- DB update 2023_10_20_04 -> 2023_10_20_05 +-- Morja +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 14) AND (`SourceGroup` = 6227) AND (`SourceEntry` = 7401); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(14, 6227, 7401, 0, 0, 8, 0, 7946, 0, 0, 0, 0, 0, '', 'Show gossip menu only if quest \'Spawn of Jubjub\' has been completed.'); + +DELETE FROM `npc_text` WHERE `ID`=7401; +INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`) VALUES +(7401, '', 'I\'m so happy that Jubjub returned! I only hope that I don\'t run out of Dark Iron ale soon, or I fear my pet frog might once again escape!', 10169); + +DELETE FROM `creature_text` WHERE `CreatureID`=14871; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(14871, 0, 0, 'Hi Jubjub. I missed you!', 12, 0, 100, 0, 0, 0, 10170, 0, 'Morja - Jubjub Summon'), +(14871, 1, 0, 'Jubjub? Where are you, Jubjub? Oh no! Where did you go this time!', 12, 0, 100, 0, 0, 0, 10171, 0, 'Morja - Jubjub Despawn'); + +DELETE FROM `gossip_menu` WHERE (`MenuID` = 6227) AND (`TextID` = 7401); +INSERT INTO `gossip_menu` (`MenuID`, `TextID`) VALUES +(6227, 7401); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 14871; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 14871); +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 1487100); +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 +(14871, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Morja - On Respawn - Remove Npc Flags Questgiver'), +(14871, 0, 1, 0, 38, 0, 100, 0, 1, 1, 60000, 60000, 0, 0, 80, 1487100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Morja - On Data Set 1 1 - Run Script'), +(1487100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Morja - Actionlist - Say Line 0'), +(1487100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 82, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Morja - Actionlist - Add Npc Flags Questgiver'), +(1487100, 9, 2, 0, 0, 0, 100, 0, 60000, 60000, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Morja - Actionlist - Say Line 1'), +(1487100, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Morja - Actionlist - Remove Npc Flags Questgiver'); + +-- Dark Iron Ale +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 165578) AND (`source_type` = 1) AND (`id` IN (3)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `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 +(165578, 1, 3, 0, 63, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 14871, 5, 0, 0, 0, 0, 0, 0, 'Dark Iron Ale Mug - On Just Created - Set Data to Morja'); + +DELETE FROM `spell_script_names` WHERE `spell_id`=23853 AND `ScriptName`='spell_gen_jubling_cooldown'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(23853, 'spell_gen_jubling_cooldown'); diff --git a/data/sql/updates/db_world/2023_10_21_00.sql b/data/sql/updates/db_world/2023_10_21_00.sql new file mode 100644 index 00000000000000..c1d5352fe1a18e --- /dev/null +++ b/data/sql/updates/db_world/2023_10_21_00.sql @@ -0,0 +1,6 @@ +-- DB update 2023_10_20_05 -> 2023_10_21_00 +-- Yehkinya Bramble +DELETE FROM `spell_script_names` WHERE `spell_id`=12699 AND `ScriptName`='spell_gen_yehkinya_bramble'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (12699, 'spell_gen_yehkinya_bramble'); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 1) AND (`SourceEntry` = 12699) AND (`SourceId` = 0); diff --git a/data/sql/updates/db_world/2023_10_21_01.sql b/data/sql/updates/db_world/2023_10_21_01.sql new file mode 100644 index 00000000000000..376d10dd6a8595 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_21_01.sql @@ -0,0 +1,7 @@ +-- DB update 2023_10_21_00 -> 2023_10_21_01 +-- Duplicated gossip option +DELETE FROM `gossip_menu_option` WHERE (`MenuID` = 10316) AND (`OptionID` = 1); + +DELETE FROM `spell_script_names` WHERE `spell_id`=62536 AND `ScriptName`='spell_frog_kiss'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(62536, 'spell_frog_kiss'); diff --git a/data/sql/updates/db_world/2023_10_21_02.sql b/data/sql/updates/db_world/2023_10_21_02.sql new file mode 100644 index 00000000000000..be03e4f3423b1b --- /dev/null +++ b/data/sql/updates/db_world/2023_10_21_02.sql @@ -0,0 +1,6 @@ +-- DB update 2023_10_21_01 -> 2023_10_21_02 +-- Shadow Mend/Healing - Karazhan chest event +DELETE FROM `spell_cooldown_overrides` WHERE `Id` IN (37456,37455); +INSERT INTO `spell_cooldown_overrides` (`Id`, `RecoveryTime`, `CategoryRecoveryTime`, `StartRecoveryTime`, `StartRecoveryCategory`) VALUES +(37456, 20000, 20000, 0, 0), +(37455, 20000, 20000, 0, 0); diff --git a/data/sql/updates/db_world/2023_10_21_03.sql b/data/sql/updates/db_world/2023_10_21_03.sql new file mode 100644 index 00000000000000..b0ff3b18473e72 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_21_03.sql @@ -0,0 +1,6 @@ +-- DB update 2023_10_21_02 -> 2023_10_21_03 +-- Quest: Grim Message +DELETE FROM `gameobject` WHERE `id` = 142698; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`) VALUES +(99872, 142698, 0, 0, 0, 1, 1, -21.77, -2802.7, 121.85, 0, 0, 0, 0, 0, 180, 0, 1, '', 0), +(99873, 142698, 0, 0, 0, 1, 1, -24.2883, -2468.25, 122.442, 0, 0, 0, 0, 0, 180, 0, 1, '', 0); diff --git a/data/sql/updates/db_world/2023_10_21_04.sql b/data/sql/updates/db_world/2023_10_21_04.sql new file mode 100644 index 00000000000000..4b6a276458188e --- /dev/null +++ b/data/sql/updates/db_world/2023_10_21_04.sql @@ -0,0 +1,32 @@ +-- DB update 2023_10_21_03 -> 2023_10_21_04 +-- Quest: Corrupted Sabers +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 15) AND (`SourceGroup` = 55002) AND (`SourceEntry` = 1); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 55002, 1, 0, 0, 47, 0, 4506, 8, 0, 0, 0, 0, '', 'Show Corrupted Saber gossip menu option only if player is on the quest "Corrupted Sabers".'); + +DELETE FROM `creature_text` WHERE `CreatureID` IN (9936,10042); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(10042, 0, 0, '%s follows $n obediently.', 16, 0, 100, 0, 0, 0, 5940, 0, 'Corrupted Saber'); + +UPDATE `creature_template` SET `AIName` = 'SmartAI', `gossip_menu_id` = 55002, `npcflag` = `npcflag`|1 WHERE (`entry` = 10042); +UPDATE `creature_template` SET `AIName` = '', `gossip_menu_id` = 0, `npcflag` = `npcflag`&~1 WHERE (`entry` = 9936); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 9937); +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 993700); +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 +(9937, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 80, 993700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Common Kitten - On Just Summoned - Run Script'), +(9937, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Common Kitten - On Just Summoned - Remove Npc Flags Gossip'), +(9937, 0, 2, 3, 75, 0, 100, 0, 0, 9996, 5, 2000, 0, 0, 103, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Common Kitten - On Distance 5y To Creature - Set Rooted On'), +(9937, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Common Kitten - On Distance 5y To Creature - Add Npc Flags Gossip'), +(9937, 0, 4, 5, 62, 0, 100, 0, 55002, 1, 0, 0, 0, 0, 26, 4506, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Common Kitten - On Gossip Option 1 Selected - Quest Credit \'Corrupted Sabers\' to Owner or Summoner'), +(9937, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Common Kitten - On Gossip Option 1 Selected - Close Gossip'), +(9937, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 10000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Common Kitten - On Gossip Option 1 Selected - Despawn In 10000 ms'), +(993700, 9, 0, 0, 0, 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, 'Common Kitten - Actionlist - Say Line 0'), +(993700, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 136, 1, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Common Kitten - Actionlist - Set Run Speed to 0.5'), +(993700, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 4582.23, -216.14, 300.23, 0, 'Common Kitten - Actionlist - Move To Position'), +(993700, 9, 3, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 0, 36, 10042, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Common Kitten - Actionlist - Update Template To \'Corrupted Saber\''), +(993700, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 16510, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Common Kitten - Actionlist - Cast \'Corrupted Saber Visual (DND)\''), +(993700, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Common Kitten - Actionlist - Remove Npc Flags Gossip'), +(993700, 9, 6, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Common Kitten - Actionlist - Say Line 0'), +(993700, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 29, 2, 90, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Common Kitten - Actionlist - Start Follow Owner Or Summoner'), +(993700, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 136, 1, 1, 42, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Common Kitten - Actionlist - Set Run Speed to 1.42'); diff --git a/data/sql/updates/db_world/2023_10_21_05.sql b/data/sql/updates/db_world/2023_10_21_05.sql new file mode 100644 index 00000000000000..522eefeae6d3cf --- /dev/null +++ b/data/sql/updates/db_world/2023_10_21_05.sql @@ -0,0 +1,11 @@ +-- DB update 2023_10_21_04 -> 2023_10_21_05 +-- +ALTER TABLE `spell_cooldown_overrides` + ADD COLUMN `Comment` TEXT; + +UPDATE `spell_cooldown_overrides` SET `Comment`='Karazhan Chest - Heroism' WHERE `Id`=37471; +UPDATE `spell_cooldown_overrides` SET `Comment`='Karazhan Chest - Bloodlust' WHERE `Id`=37472; +UPDATE `spell_cooldown_overrides` SET `Comment`='Fel Reaver Sentinel - Turbo Boost' WHERE `Id`=37920; +UPDATE `spell_cooldown_overrides` SET `Comment`='Fel Reaver Sentinel - World Breaker' WHERE `Id`=38006; +UPDATE `spell_cooldown_overrides` SET `Comment`='Fel Reaver Sentinel - Sonic Boom' WHERE `Id`=38052; +UPDATE `spell_cooldown_overrides` SET `Comment`='Fel Reaver Sentinel - Destroy Deathforged Infernal' WHERE `Id`=38055; diff --git a/data/sql/updates/db_world/2023_10_21_06.sql b/data/sql/updates/db_world/2023_10_21_06.sql new file mode 100644 index 00000000000000..9b3a02f60b385a --- /dev/null +++ b/data/sql/updates/db_world/2023_10_21_06.sql @@ -0,0 +1,5 @@ +-- DB update 2023_10_21_05 -> 2023_10_21_06 +-- +DELETE FROM `creature_addon` WHERE `guid` = 135692; +DELETE FROM `waypoint_data` WHERE `id` = 1356920; +UPDATE `creature` SET `MovementType` = 1 WHERE `guid` = 135692; diff --git a/data/sql/updates/db_world/2023_10_22_00.sql b/data/sql/updates/db_world/2023_10_22_00.sql new file mode 100644 index 00000000000000..3d79379b9f711d --- /dev/null +++ b/data/sql/updates/db_world/2023_10_22_00.sql @@ -0,0 +1,279 @@ +-- DB update 2023_10_21_06 -> 2023_10_22_00 +SET @As_Probability=100; +SET @AE_Probability=50; +-- ------------------------------Scarlet Sorcerer----------------------------- +-- Scarlet Sorcerer say +DELETE FROM `creature_text` WHERE `CreatureID`=4294; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +-- AshbringerEvent Talk + (4294, 0, 0, 'I am unworthy, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12380, 0, 'Scarlet Sorcerer'), + (4294, 0, 1, 'Have you come to save this world? To cleanse it?', 12, 0, @As_Probability, 0, 0, 0, 12381, 0, 'Scarlet Sorcerer'), + (4294, 0, 2, 'My $g Lord:Lady;, please allow me to live long enough to see you purge this world of the infidels.', 12, 0, @As_Probability, 0, 0, 0, 12382, 0, 'Scarlet Sorcerer'), + (4294, 0, 3, 'And so it begins...', 12, 0, @As_Probability, 0, 0, 0, 12383, 0, 'Scarlet Sorcerer'), + (4294, 0, 4, 'Take me with you, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12384, 0, 'Scarlet Sorcerer'), + (4294, 0, 5, 'Ashbringer...', 12, 0, @As_Probability, 0, 0, 0, 12378, 0, 'Scarlet Sorcerer'), + (4294, 0, 6, 'Kneel! Kneel before the Ashbringer!', 12, 0, @As_Probability, 0, 0, 0, 12379, 0, 'Scarlet Sorcerer'), +-- On Aggro Talk + (4294, 1, 0, 'You carry the taint of the Scourge. Prepare to enter the Twisting Nether.', 12, 7, 25, 0, 0, 0, 2625, 0, 'Scarlet Sorcerer'), + (4294, 1, 1, 'There is no escape for you. The Crusade shall destroy all who carry the Scourge\'s taint.', 12, 7, 25, 0, 0, 0, 2626, 0, 'Scarlet Sorcerer'), + (4294, 1, 2, 'The Light condemns all who harbor evil. Now you will die!', 12, 7, 25, 0, 0, 0, 2627, 0, 'Scarlet Sorcerer'), + (4294, 1, 3, 'The Scarlet Crusade shall smite the wicked and drive evil from these lands!', 12, 7, 25, 0, 0, 0, 2628, 0, 'Scarlet Sorcerer'); + +-- Scarlet Sorcerer SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 4294; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 4294); +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 +(4294, 0, 0, 0, 4, 0, 20, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Sorcerer - On Aggro - Say Line 1'), +(4294, 0, 1, 0, 0, 0, 100, 0, 4000, 8000, 15000, 25000, 0, 0, 11, 6146, 0, 0, 0, 0, 0, 5, 30, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Sorcerer - In Combat - Cast Slow'), +(4294, 0, 2, 0, 0, 0, 100, 0, 0, 1000, 3000, 3500, 0, 0, 11, 9672, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Sorcerer - In Combat - Cast Frostbolt'), +(4294, 0, 3, 0, 0, 0, 100, 0, 14000, 29000, 19000, 28000, 0, 0, 11, 9672, 0, 0, 0, 0, 0, 5, 30, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Sorcerer - In Combat - Cast Blizzard'), +(4294, 0, 4, 0, 2, 0, 100, 1, 0, 15, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Sorcerer - Between 0-15% Health - Flee For Assist'), +-- AshbringerEvent +(4294, 0, 5, 0, 8, 0, 100, 769, 28441, 0, 0, 0, 0, 0, 80, 429400, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Sorcerer - spellhit_target - AshbringerEvent'); + +-- AshbringerEvent Timed Actionlis +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 429400); +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 +(429400, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 2, 35, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Monaster AshbringerEvent - On Script - Set_Faction Friend'), +(429400, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Monaster AshbringerEvent - On Script - stop movement'), +(429400, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Monaster AshbringerEvent - On Script - Set Facing player'), +(429400, 9, 3, 0, 0, 0, 100, 0, 500, 500, 0, 0, 0, 0, 91, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Monaster AshbringerEvent - On Script - SetStandState UNIT_STAND_STATE_STAND'), +(429400, 9, 4, 0, 0, 0, 100, 0, 500, 2500, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Monaster AshbringerEvent - On Script - SetSheath SHEATH_STATE_UNARMED'), +(429400, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 90, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Monaster AshbringerEvent - On Script - SetSheath UNIT_STAND_STATE_KNEEL'), +(429400, 9, 6, 0, 0, 0, @AE_Probability, 0, 1000, 2000, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Monaster AshbringerEvent - On Script - Talk 0'); + +-- ------------------------------Scarlet Myrmidon----------------------------- +-- Scarlet Myrmidon say +DELETE FROM `creature_text` WHERE `CreatureID`=4295; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +-- AshbringerEvent Talk + (4295, 0, 0, 'I am unworthy, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12380, 0, 'Scarlet Myrmidon'), + (4295, 0, 1, 'Have you come to save this world? To cleanse it?', 12, 0, @As_Probability, 0, 0, 0, 12381, 0, 'Scarlet Myrmidon'), + (4295, 0, 2, 'My $g Lord:Lady;, please allow me to live long enough to see you purge this world of the infidels.', 12, 0, @As_Probability, 0, 0, 0, 12382, 0, 'Scarlet Myrmidon'), + (4295, 0, 3, 'And so it begins...', 12, 0, @As_Probability, 0, 0, 0, 12383, 0, 'Scarlet Myrmidon'), + (4295, 0, 4, 'Take me with you, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12384, 0, 'Scarlet Myrmidon'), + (4295, 0, 5, 'Ashbringer...', 12, 0, @As_Probability, 0, 0, 0, 12378, 0, 'Scarlet Myrmidon'), + (4295, 0, 6, 'Kneel! Kneel before the Ashbringer!', 12, 0, @As_Probability, 0, 0, 0, 12379, 0, 'Scarlet Myrmidon'), +-- On Aggro Talk + (4295, 1, 0, 'You carry the taint of the Scourge. Prepare to enter the Twisting Nether.', 12, 7, 25, 0, 0, 0, 2625, 0, 'Scarlet Myrmidon'), + (4295, 1, 1, 'There is no escape for you. The Crusade shall destroy all who carry the Scourge\'s taint.', 12, 7, 25, 0, 0, 0, 2626, 0, 'Scarlet Myrmidon'), + (4295, 1, 2, 'The Light condemns all who harbor evil. Now you will die!', 12, 7, 25, 0, 0, 0, 2627, 0, 'Scarlet Myrmidon'), + (4295, 1, 3, 'The Scarlet Crusade shall smite the wicked and drive evil from these lands!', 12, 7, 25, 0, 0, 0, 2628, 0, 'Scarlet Myrmidon'), + (4295, 2, 0, '%s goes into a frenzy!', 16, 0, 100, 0, 0, 0, 1191, 0, 'Scarlet Myrmidon'); + +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 4295; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 4295); +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 +(4295, 0, 0, 0, 4, 0, 20, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Myrmidon - On Aggro - Say Line 1'), +(4295, 0, 1, 2, 2, 0, 100, 1, 0, 40, 0, 0, 0, 0, 11, 8269, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Myrmidon - Between 0-40% Health - Cast Frenzy'), +(4295, 0, 2, 0, 61, 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, 'Scarlet Myrmidon - Between 0-40% Health - Say Line 2'), +-- AshbringerEvent +(4295, 0, 3, 0, 8, 0, 100, 769, 28441, 0, 0, 0, 0, 0, 80, 429400, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Myrmidon - spellhit_target - AshbringerEvent'); + + +-- ------------------------------Scarlet Defender ----------------------------- +-- Scarlet Defender say +DELETE FROM `creature_text` WHERE `CreatureID`=4298; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +-- AshbringerEvent Talk + (4298, 0, 0, 'I am unworthy, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12380, 0, 'Scarlet Defender'), + (4298, 0, 1, 'Have you come to save this world? To cleanse it?', 12, 0, @As_Probability, 0, 0, 0, 12381, 0, 'Scarlet Defender'), + (4298, 0, 2, 'My $g Lord:Lady;, please allow me to live long enough to see you purge this world of the infidels.', 12, 0, @As_Probability, 0, 0, 0, 12382, 0, 'Scarlet Defender'), + (4298, 0, 3, 'And so it begins...', 12, 0, @As_Probability, 0, 0, 0, 12383, 0, 'Scarlet Defender'), + (4298, 0, 4, 'Take me with you, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12384, 0, 'Scarlet Defender'), + (4298, 0, 5, 'Ashbringer...', 12, 0, @As_Probability, 0, 0, 0, 12378, 0, 'Scarlet Defender'), + (4298, 0, 6, 'Kneel! Kneel before the Ashbringer!', 12, 0, @As_Probability, 0, 0, 0, 12379, 0, 'Scarlet Defender'), +-- On Aggro Talk + (4298, 1, 0, 'You carry the taint of the Scourge. Prepare to enter the Twisting Nether.', 12, 7, 25, 0, 0, 0, 2625, 0, 'Scarlet Defender'), + (4298, 1, 1, 'There is no escape for you. The Crusade shall destroy all who carry the Scourge\'s taint.', 12, 7, 25, 0, 0, 0, 2626, 0, 'Scarlet Defender'), + (4298, 1, 2, 'The Light condemns all who harbor evil. Now you will die!', 12, 7, 25, 0, 0, 0, 2627, 0, 'Scarlet Defender'), + (4298, 1, 3, 'The Scarlet Crusade shall smite the wicked and drive evil from these lands!', 12, 7, 25, 0, 0, 0, 2628, 0, 'Scarlet Defender'); + +-- Scarlet Defender SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 4298; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 4298); +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 +(4298, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 3637, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Defender - On Reset - Cast Improved Blocking III'), +(4298, 0, 1, 0, 4, 0, 20, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Defender - On Aggro - Say Line 1'), +(4298, 0, 2, 0, 0, 0, 100, 0, 0, 2000, 180000, 180000, 0, 0, 11, 7164, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Defender - In Combat - Cast Defensive Stance'), +(4298, 0, 3, 0, 13, 0, 100, 0, 8000, 11000, 0, 0, 0, 0, 11, 11972, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Defender - Victim Casting - Cast Shield Bash'), +(4298, 0, 4, 0, 2, 0, 100, 1, 0, 15, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Defender - Between 0-15% Health - Flee For Assist'), +-- AshbringerEvent +(4298, 0, 5, 0, 8, 0, 100, 769, 28441, 0, 0, 0, 0, 0, 80, 429400, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Defender - spellhit_target - AshbringerEvent'); + +-- ------------------------------Scarlet Chaplain ----------------------------- +-- Scarlet Chaplain say-- +DELETE FROM `creature_text` WHERE `CreatureID`=4299; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +-- AshbringerEvent Talk + (4299, 0, 0, 'I am unworthy, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12380, 0, 'Ashbringer Event'), + (4299, 0, 1, 'Have you come to save this world? To cleanse it?', 12, 0, @As_Probability, 0, 0, 0, 12381, 0, 'Ashbringer Event'), + (4299, 0, 2, 'My $g Lord:Lady;, please allow me to live long enough to see you purge this world of the infidels.', 12, 0, @As_Probability, 0, 0, 0, 12382, 0, 'Scarlet Chaplain'), + (4299, 0, 3, 'And so it begins...', 12, 0, @As_Probability, 0, 0, 0, 12383, 0, 'Scarlet Chaplain'), + (4299, 0, 4, 'Take me with you, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12384, 0, 'Scarlet Chaplain'), + (4299, 0, 5, 'Ashbringer...', 12, 0, @As_Probability, 0, 0, 0, 12378, 0, 'Scarlet Chaplain'), + (4299, 0, 6, 'Kneel! Kneel before the Ashbringer!', 12, 0, @As_Probability, 0, 0, 0, 12379, 0, 'Scarlet Chaplain'), +-- On Aggro Talk + (4299, 1, 0, 'You carry the taint of the Scourge. Prepare to enter the Twisting Nether.', 12, 7, 25, 0, 0, 0, 2625, 0, 'Scarlet Chaplain'), + (4299, 1, 1, 'There is no escape for you. The Crusade shall destroy all who carry the Scourge\'s taint.', 12, 7, 25, 0, 0, 0, 2626, 0, 'Scarlet Chaplain'), + (4299, 1, 2, 'The Light condemns all who harbor evil. Now you will die!', 12, 7, 25, 0, 0, 0, 2627, 0, 'Scarlet Chaplain'), + (4299, 1, 3, 'The Scarlet Crusade shall smite the wicked and drive evil from these lands!', 12, 7, 25, 0, 0, 0, 2628, 0, 'Scarlet Chaplain'); + +-- Scarlet Chaplain SmartAI-- +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 4299; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 4299); +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 +(4299, 0, 0, 0, 1, 0, 100, 0, 1000, 1000, 1200000, 1200000, 0, 0, 11, 1006, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Chaplain - Out of Combat - Cast Inner Fire'), +(4299, 0, 1, 0, 4, 0, 20, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Chaplain - On Aggro - Say Line 1'), +(4299, 0, 2, 0, 4, 0, 100, 512, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Chaplain - On Aggro - Set Event Phase'), +(4299, 0, 3, 0, 16, 1, 100, 0, 6066, 40, 8000, 8000, 0, 0, 11, 6066, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Chaplain - Friendly Missing Buff - Cast Power Word: Shield'), +(4299, 0, 4, 0, 14, 0, 100, 0, 400, 40, 8000, 8000, 0, 0, 11, 8362, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Chaplain - Friendly Missing Health - Cast Renew'), +(4299, 0, 5, 0, 2, 0, 100, 1, 0, 15, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Chaplain - Between 0-15% Health - Flee For Assist'), + +-- AshbringerEvent +(4299, 0, 6, 0, 8, 0, 100, 769, 28441, 0, 0, 0, 0, 0, 80, 429400, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Chaplain - spellhit_target - AshbringerEvent'); + +-- ------------------------------Scarlet Wizard ----------------------------- +-- Scarlet Wizard say--- +DELETE FROM `creature_text` WHERE `CreatureID`=4300; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +-- AshbringerEvent Talk + (4300, 0, 0, 'I am unworthy, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12380, 0, 'Scarlet Wizard'), + (4300, 0, 1, 'Have you come to save this world? To cleanse it?', 12, 0, @As_Probability, 0, 0, 0, 12381, 0, 'Scarlet Wizard'), + (4300, 0, 2, 'My $g Lord:Lady;, please allow me to live long enough to see you purge this world of the infidels.', 12, 0, @As_Probability, 0, 0, 0, 12382, 0, 'Scarlet Wizard'), + (4300, 0, 3, 'And so it begins...', 12, 0, @As_Probability, 0, 0, 0, 12383, 0, 'Scarlet Wizard'), + (4300, 0, 4, 'Take me with you, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12384, 0, 'Scarlet Wizard'), + (4300, 0, 5, 'Ashbringer...', 12, 0, @As_Probability, 0, 0, 0, 12378, 0, 'Scarlet Wizard'), + (4300, 0, 6, 'Kneel! Kneel before the Ashbringer!', 12, 0, @As_Probability, 0, 0, 0, 12379, 0, 'Scarlet Wizard'), +-- On Aggro Talk + (4300, 1, 1, 'There is no escape for you. The Crusade shall destroy all who carry the Scourge\'s taint.', 12, 7, 25, 0, 0, 0, 2626, 0, 'Scarlet Wizard'), + (4300, 1, 2, 'The Light condemns all who harbor evil. Now you will die!', 12, 7, 25, 0, 0, 0, 2627, 0, 'Scarlet Wizard'), + (4300, 1, 3, 'The Scarlet Crusade shall smite the wicked and drive evil from these lands!', 12, 7, 25, 0, 0, 0, 2628, 0, 'Scarlet Wizard'); + +-- Scarlet Wizard SmartAI--- +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 4300; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 4300); +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 +(4300, 0, 0, 0, 4, 0, 20, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Wizard - On Aggro - Say Line 1'), +(4300, 0, 1, 0, 106, 0, 100, 0, 2000, 6000, 7000, 11000, 0, 10, 11, 8439, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Wizard - In Combat - Cast Arcane Explosion'), +(4300, 0, 2, 0, 0, 0, 100, 0, 1000, 5000, 30000, 30000, 0, 0, 11, 2601, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Wizard - In Combat - Cast Fire Shield III'), +(4300, 0, 3, 0, 2, 0, 100, 1, 0, 15, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Wizard - Between 0-15% Health - Flee For Assist'), +-- AshbringerEvent +(4300, 0, 4, 0, 8, 0, 100, 769, 28441, 0, 0, 0, 0, 0, 80, 429400, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Wizard - spellhit_target - AshbringerEvent'); + +-- ------------------------------Scarlet Centurion ----------------------------- +-- Scarlet Centurion say-- +DELETE FROM `creature_text` WHERE `CreatureID`=4301; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +-- AshbringerEvent Talk + (4301, 0, 0, 'I am unworthy, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12380, 0, 'Scarlet Centurion'), + (4301, 0, 1, 'Have you come to save this world? To cleanse it?', 12, 0, @As_Probability, 0, 0, 0, 12381, 0, 'Scarlet Centurion'), + (4301, 0, 2, 'My $g Lord:Lady;, please allow me to live long enough to see you purge this world of the infidels.', 12, 0, @As_Probability, 0, 0, 0, 12382, 0, 'Scarlet Centurion'), + (4301, 0, 3, 'And so it begins...', 12, 0, @As_Probability, 0, 0, 0, 12383, 0, 'Scarlet Centurion'), + (4301, 0, 4, 'Take me with you, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12384, 0, 'Scarlet Centurion'), + (4301, 0, 5, 'Ashbringer...', 12, 0, @As_Probability, 0, 0, 0, 12378, 0, 'Scarlet Centurion'), + (4301, 0, 6, 'Kneel! Kneel before the Ashbringer!', 12, 0, @As_Probability, 0, 0, 0, 12379, 0, 'Scarlet Centurion'), +-- On Aggro Talk + (4301, 1, 0, 'You carry the taint of the Scourge. Prepare to enter the Twisting Nether.', 12, 7, 25, 0, 0, 0, 2625, 0, 'Scarlet Centurion'), + (4301, 1, 1, 'There is no escape for you. The Crusade shall destroy all who carry the Scourge\'s taint.', 12, 7, 25, 0, 0, 0, 2626, 0, 'Scarlet Centurion'), + (4301, 1, 2, 'The Light condemns all who harbor evil. Now you will die!', 12, 7, 25, 0, 0, 0, 2627, 0, 'Scarlet Centurion'), + (4301, 1, 3, 'The Scarlet Crusade shall smite the wicked and drive evil from these lands!', 12, 7, 25, 0, 0, 0, 2628, 0, 'Scarlet Centurion'); + +-- Scarlet Centurion SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 4301; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 4301); +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 +(4301, 0, 0, 0, 4, 0, 20, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Centurion - On Aggro - Say Line 1'), +(4301, 0, 1, 0, 0, 0, 100, 0, 2000, 6000, 50000, 70000, 0, 0, 11, 31403, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Centurion - In Combat - Cast Battle Shout'), +(4301, 0, 2, 0, 2, 0, 100, 1, 0, 15, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Centurion - Between 0-15% Health - Flee For Assist'), +-- AshbringerEvent +(4301, 0, 3, 0, 8, 0, 100, 769, 28441, 0, 0, 0, 0, 0, 80, 429400, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Centurion - spellhit_target - AshbringerEvent'); + +-- ------------------------------Scarlet Champion-- ------------------------------ +-- Scarlet Champion say-- +DELETE FROM `creature_text` WHERE `CreatureID`=4302; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +-- AshbringerEvent Talk + (4302, 0, 0, 'I am unworthy, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12380, 0, 'Scarlet Champion'), + (4302, 0, 1, 'Have you come to save this world? To cleanse it?', 12, 0, @As_Probability, 0, 0, 0, 12381, 0, 'Scarlet Champion'), + (4302, 0, 2, 'My $g Lord:Lady;, please allow me to live long enough to see you purge this world of the infidels.', 12, 0, @As_Probability, 0, 0, 0, 12382, 0, 'Scarlet Champion'), + (4302, 0, 3, 'And so it begins...', 12, 0, @As_Probability, 0, 0, 0, 12383, 0, 'Scarlet Champion'), + (4302, 0, 4, 'Take me with you, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12384, 0, 'Scarlet Champion'), + (4302, 0, 5, 'Ashbringer...', 12, 0, @As_Probability, 0, 0, 0, 12378, 0, 'Scarlet Champion'), + (4302, 0, 6, 'Kneel! Kneel before the Ashbringer!', 12, 0, @As_Probability, 0, 0, 0, 12379, 0, 'Scarlet Champion'), +-- On Aggro Talk + (4302, 1, 0, 'You carry the taint of the Scourge. Prepare to enter the Twisting Nether.', 12, 7, 25, 0, 0, 0, 2625, 0, 'Scarlet Champion'), + (4302, 1, 1, 'There is no escape for you. The Crusade shall destroy all who carry the Scourge\'s taint.', 12, 7, 25, 0, 0, 0, 2626, 0, 'Scarlet Champion'), + (4302, 1, 2, 'The Light condemns all who harbor evil. Now you will die!', 12, 7, 25, 0, 0, 0, 2627, 0, 'Scarlet Champion'), + (4302, 1, 3, 'The Scarlet Crusade shall smite the wicked and drive evil from these lands!', 12, 7, 25, 0, 0, 0, 2628, 0, 'Scarlet Champion'); +-- Scarlet Champion SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 4302; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 4302); +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 +(4302, 0, 0, 0, 4, 0, 20, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Champion - On Aggro - Say Line 1'), +(4302, 0, 1, 0, 0, 0, 100, 0, 1000, 5000, 6000, 9000, 0, 0, 11, 17143, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Champion - In Combat - Cast Holy Strike'), +(4302, 0, 2, 0, 2, 0, 100, 1, 0, 15, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Champion - Between 0-15% Health - Flee For Assist'), +-- AshbringerEvent +(4302, 0, 3, 0, 8, 0, 100, 769, 28441, 0, 0, 0, 0, 0, 80, 429400, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Champion - spellhit_target - AshbringerEvent'); + +-- ------------------------------Scarlet Abbot ------- +-- Scarlet Abbot say-- +DELETE FROM `creature_text` WHERE `CreatureID`=4303; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +-- AshbringerEvent Talk + (4303, 0, 0, 'I am unworthy, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12380, 0, 'Scarlet Abbot'), + (4303, 0, 1, 'Have you come to save this world? To cleanse it?', 12, 0, @As_Probability, 0, 0, 0, 12381, 0, 'Scarlet Abbot'), + (4303, 0, 2, 'My $g Lord:Lady;, please allow me to live long enough to see you purge this world of the infidels.', 12, 0, @As_Probability, 0, 0, 0, 12382, 0, 'Scarlet Abbot'), + (4303, 0, 3, 'And so it begins...', 12, 0, @As_Probability, 0, 0, 0, 12383, 0, 'Scarlet Abbot'), + (4303, 0, 4, 'Take me with you, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12384, 0, 'Scarlet Abbot'), + (4303, 0, 5, 'Ashbringer...', 12, 0, @As_Probability, 0, 0, 0, 12378, 0, 'Scarlet Abbot'), + (4303, 0, 6, 'Kneel! Kneel before the Ashbringer!', 12, 0, @As_Probability, 0, 0, 0, 12379, 0, 'Scarlet Abbot'), +-- On Aggro Talk + (4303, 1, 0, 'You carry the taint of the Scourge. Prepare to enter the Twisting Nether.', 12, 7, 25, 0, 0, 0, 2625, 0, 'Scarlet Abbot'), + (4303, 1, 1, 'There is no escape for you. The Crusade shall destroy all who carry the Scourge\'s taint.', 12, 7, 25, 0, 0, 0, 2626, 0, 'Scarlet Abbot'), + (4303, 1, 2, 'The Light condemns all who harbor evil. Now you will die!', 12, 7, 25, 0, 0, 0, 2627, 0, 'Scarlet Abbot'), + (4303, 1, 3, 'The Scarlet Crusade shall smite the wicked and drive evil from these lands!', 12, 7, 25, 0, 0, 0, 2628, 0, 'Scarlet Abbot'), + (4303, 2, 0, '%s becomes enraged!', 16, 0, 100, 0, 0, 0, 24144, 0, 'Scarlet Abbot'); + +-- Scarlet Abbot SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 4303; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 4303); +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 +(4303, 0, 0, 0, 4, 0, 20, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Abbot - On Aggro - Say Line 1'), +(4303, 0, 1, 0, 14, 0, 100, 0, 400, 40, 8000, 8000, 0, 0, 11, 8362, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Abbot - Friendly Missing Health - Cast Renew'), +(4303, 0, 2, 0, 14, 0, 100, 0, 600, 40, 4000, 8000, 0, 0, 11, 6064, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Abbot - Friendly Missing Health - Cast Heal'), +(4303, 0, 3, 4, 2, 0, 100, 1, 0, 40, 0, 0, 0, 0, 11, 8269, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Abbot - Between 0-40% Health - Cast Frenzy'), +(4303, 0, 4, 0, 61, 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, 'Scarlet Abbot - Between 0-40% Health - Say Line 2'), +-- AshbringerEvent +(4303, 0, 5, 0, 8, 0, 100, 769, 28441, 0, 0, 0, 0, 0, 80, 429400, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Abbot - spellhit_target - AshbringerEvent'); + + +-- ------------------------------Scarlet Monk ------- +-- Scarlet Monk say -- +DELETE FROM `creature_text` WHERE `CreatureID`=4540; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +-- AshbringerEvent TALK + (4540, 0, 0, 'I am unworthy, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12380, 0, 'Scarlet Monk'), + (4540, 0, 1, 'Have you come to save this world? To cleanse it?', 12, 0, @As_Probability, 0, 0, 0, 12381, 0, 'Scarlet Monk'), + (4540, 0, 2, 'My $g Lord:Lady;, please allow me to live long enough to see you purge this world of the infidels.', 12, 0, @As_Probability, 0, 0, 0, 12382, 0, 'Scarlet Monk'), + (4540, 0, 3, 'And so it begins...', 12, 0, @As_Probability, 0, 0, 0, 12383, 0, 'Scarlet Monk'), + (4540, 0, 4, 'Take me with you, $g sir:ma\'am;.', 12, 0, @As_Probability, 0, 0, 0, 12384, 0, 'Scarlet Monk'), + (4540, 0, 5, 'Ashbringer...', 12, 0, @As_Probability, 0, 0, 0, 12378, 0, 'Scarlet Monk'), + (4540, 0, 6, 'Kneel! Kneel before the Ashbringer!', 12, 0, @As_Probability, 0, 0, 0, 12379, 0, 'Scarlet Monk'), +-- On Aggro TALK + (4540, 1, 0, 'You carry the taint of the Scourge. Prepare to enter the Twisting Nether.', 12, 7, 25, 0, 0, 0, 2625, 0, 'Scarlet Monk'), + (4540, 1, 1, 'There is no escape for you. The Crusade shall destroy all who carry the Scourge\'s taint.', 12, 7, 25, 0, 0, 0, 2626, 0, 'Scarlet Monk'), + (4540, 1, 2, 'The Light condemns all who harbor evil. Now you will die!', 12, 7, 25, 0, 0, 0, 2627, 0, 'Scarlet Monk'), + (4540, 1, 3, 'The Scarlet Crusade shall smite the wicked and drive evil from these lands!', 12, 7, 25, 0, 0, 0, 2628, 0, 'Scarlet Monk'); + +-- Scarlet Monk SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE (`entry` = 4540); +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 4540); +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 +(4540, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 3417, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Monk - On Reset - Cast Thrash'), +(4540, 0, 1, 0, 4, 0, 20, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Monk - On Aggro - Say Line 1'), +(4540, 0, 2, 0, 13, 0, 100, 0, 7000, 7000, 0, 0, 0, 0, 11, 11978, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Monk - Victim Casting - Cast Kick'), +(4540, 0, 3, 0, 2, 0, 100, 1, 0, 15, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Monk - Between 0-15% Health - Flee For Assist'), +-- AshbringerEvent +(4540, 0, 4, 0, 8, 0, 100, 769, 28441, 0, 0, 0, 0, 0, 80, 429400, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Monk - spellhit_target - AshbringerEvent'); diff --git a/data/sql/updates/db_world/2023_10_22_01.sql b/data/sql/updates/db_world/2023_10_22_01.sql new file mode 100644 index 00000000000000..e818f16c210cd2 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_22_01.sql @@ -0,0 +1,6 @@ +-- DB update 2023_10_22_00 -> 2023_10_22_01 +-- +DELETE FROM `spell_script_names` WHERE `spell_id` IN (30004, 29946); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(30004, 'spell_flamewreath'), +(29946, 'spell_flamewreath_aura'); diff --git a/data/sql/updates/db_world/2023_10_22_02.sql b/data/sql/updates/db_world/2023_10_22_02.sql new file mode 100644 index 00000000000000..66bb1694b982fc --- /dev/null +++ b/data/sql/updates/db_world/2023_10_22_02.sql @@ -0,0 +1,340 @@ +-- DB update 2023_10_22_01 -> 2023_10_22_02 +-- +-- Emotes for Quest "For Love Eternal" +DELETE FROM `quest_details` WHERE `ID`=963; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(963,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=1 WHERE `ID`=963; +UPDATE `quest_offer_reward` SET `Emote1`=2 WHERE `ID`=963; + +-- Emotes for Quest "Cave Mushrooms" +DELETE FROM `quest_details` WHERE `ID`=947; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(947,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=6, `EmoteOnComplete`=6 WHERE `ID`=947; +UPDATE `quest_offer_reward` SET `Emote1`=5 WHERE `ID`=947; + +-- Emotes for Quest "Onu" +DELETE FROM `quest_details` WHERE `ID`=948; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(948,1,0,0,0,0,0,0,0,0); + +-- Emotes for Quest "Buzzbox 827" +DELETE FROM `quest_details` WHERE `ID`=983; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(983,5,0,0,0,0,0,0,0,0); + +-- Emotes for Quest "Washed Ashore" +DELETE FROM `quest_details` WHERE `ID`=3524; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(3524,1,0,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=1 WHERE `ID`=3524; + +-- Emotes for Quest "Washed Ashore (Part 2)" +DELETE FROM `quest_details` WHERE `ID`=4681; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(4681,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=1 WHERE `ID`=4681; +UPDATE `quest_offer_reward` SET `Emote1`=4 WHERE `ID`=4681; + +-- Emotes for Quest "The Family and the Fishing Pole" +DELETE FROM `quest_details` WHERE `ID`=1141; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(1141,4,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=1 WHERE `ID`=1141; +UPDATE `quest_offer_reward` SET `Emote1`=4 WHERE `ID`=1141; + +-- Emotes for Quest "Fruit of the Sea" +DELETE FROM `quest_details` WHERE `ID`=1138; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(1138,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnComplete`=0 WHERE `ID`=1138; +UPDATE `quest_offer_reward` SET `Emote1`=273 WHERE `ID`=1138; + +-- Emotes for Quest "The Red Crystal" +DELETE FROM `quest_details` WHERE `ID`=4811; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(4811,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=6 WHERE `ID`=4811; +UPDATE `quest_offer_reward` SET `Emote1`=4 WHERE `ID`=4811; + +-- Emotes for Quest "As Water Cascades" +DELETE FROM `quest_details` WHERE `ID`=4812; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(4812,1,0,0,0,0,0,0,0,0); + +-- Emotes for Quest "The Fragments Within" +UPDATE `quest_offer_reward` SET `Emote1`=6, `Emote2`=1 WHERE `ID`=4813; + +-- Emotes for Quest "Tools of the Highborne" +DELETE FROM `quest_details` WHERE `ID`=958; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(958,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnComplete`=0 WHERE `ID`=958; +UPDATE `quest_offer_reward` SET `Emote1`=1 WHERE `ID`=958; + +-- Emotes for Quest "BashalAran" +DELETE FROM `quest_details` WHERE `ID`=954; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(954,1,0,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=6 WHERE `ID`=954; + +-- Emotes for Quest "BashalAran (Part 2)" +DELETE FROM `quest_details` WHERE `ID`=955; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(955,1,0,0,0,0,0,0,0,0); + +-- Emotes for Quest "BashalAran (Part 3)" +DELETE FROM `quest_details` WHERE `ID`=956; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(956,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnComplete`=0 WHERE `ID`=956; + +-- Emotes for Quest "BashalAran (Part 4)" +DELETE FROM `quest_details` WHERE `ID`=957; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(957,1,0,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=15 WHERE `ID`=957; + +-- Emotes for Quest "Beached Sea Creature" +UPDATE `quest_request_items` SET `EmoteOnComplete`=3 WHERE `ID`=4723; + +-- Emotes for Quest "Beached Sea Creature" +UPDATE `quest_request_items` SET `EmoteOnComplete`=3 WHERE `ID`=4728; + +-- Emotes for Quest "Beached Sea Creature" +UPDATE `quest_request_items` SET `EmoteOnComplete`=3 WHERE `ID`=4730; + +-- Emotes for Quest "Beached Sea Turtle" +UPDATE `quest_request_items` SET `EmoteOnComplete`=3 WHERE `ID`=4722; +UPDATE `quest_offer_reward` SET `Emote1`=4 WHERE `ID`=4722; + +-- Emotes for Quest "Beached Sea Turtle" +UPDATE `quest_request_items` SET `EmoteOnComplete`=3 WHERE `ID`=4727; + +-- Emotes for Quest "Beached Sea Turtle" +UPDATE `quest_request_items` SET `EmoteOnComplete`=3 WHERE `ID`=4731; + +-- Emotes for Quest "WANTED: Murkdeep!" +UPDATE `quest_request_items` SET `EmoteOnComplete`=1 WHERE `ID`=4740; +UPDATE `quest_offer_reward` SET `Emote1`=4 WHERE `ID`=4740; + +-- Emotes for Quest "Gaffer Jacks" +DELETE FROM `quest_details` WHERE `ID`=1579; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(1579,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=6, `EmoteOnComplete`=6 WHERE `ID`=1579; +UPDATE `quest_offer_reward` SET `Emote1`=5 WHERE `ID`=1579; + +-- Emotes for Quest "Electropellers" +DELETE FROM `quest_details` WHERE `ID`=1580; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(1580,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=6, `EmoteOnComplete`=6 WHERE `ID`=1580; +UPDATE `quest_offer_reward` SET `Emote1`=4 WHERE `ID`=1580; + +-- Emotes for Quest "Trouble In Darkshore?" +DELETE FROM `quest_details` WHERE `ID`=730; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(730,1,0,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=1 WHERE `ID`=730; + +-- Emotes for Quest "The Absent Minded Prospector" +DELETE FROM `quest_details` WHERE `ID`=729; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(729,1,1,20,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=6 WHERE `ID`=729; + +-- Emotes for Quest "The Absent Minded Prospector (Part 2)" +DELETE FROM `quest_details` WHERE `ID`=731; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(731,1,0,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=4 WHERE `ID`=731; + +-- Emotes for Quest "The Absent Minded Prospector (Part 3)" +DELETE FROM `quest_details` WHERE `ID`=741; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(741,6,0,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=5 WHERE `ID`=741; + +-- Emotes for Quest "The Absent Minded Prospector (Part 4)" +DELETE FROM `quest_details` WHERE `ID`=942; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(942,1,0,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=6, `Emote2`=5 WHERE `ID`=942; + +-- Emotes for Quest "The Absent Minded Prospector (Part 5)" +DELETE FROM `quest_details` WHERE `ID`=943; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(943,1,0,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=4 WHERE `ID`=943; + +-- Emotes for Quest "Deep Ocean, Vast Sea" +DELETE FROM `quest_details` WHERE `ID`=982; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(982,1,1,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=1 WHERE `ID`=982; +UPDATE `quest_offer_reward` SET `Emote1`=4 WHERE `ID`=982; + +-- Emotes for Quest "Plagued Lands" +DELETE FROM `quest_details` WHERE `ID`=2118; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(2118,2,1,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=6 WHERE `ID`=2118; +UPDATE `quest_offer_reward` SET `Emote1`=1 WHERE `ID`=2118; + +-- Emotes for Quest "Cleansing of the Infected" +DELETE FROM `quest_details` WHERE `ID`=2138; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(2138,274,0,0,0,0,0,0,0,0); + +-- Emotes for Quest "Tharnariun's Hope" +DELETE FROM `quest_details` WHERE `ID`=2139; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(2139,1,0,0,0,0,0,0,0,0); + +-- Emotes for Quest "How Big a Threat?" +DELETE FROM `quest_details` WHERE `ID`=984; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(984,1,0,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=18 WHERE `ID`=984; + +-- Emotes for Quest "How Big a Threat? (Part 2)" +DELETE FROM `quest_details` WHERE `ID`=985; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(985,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=1 WHERE `ID`=985; +UPDATE `quest_offer_reward` SET `Emote1`=2 WHERE `ID`=985; + +-- Emotes for Quest "A Lost Master (Part 2)" +DELETE FROM `quest_details` WHERE `ID`=993; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(993,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnComplete`=0 WHERE `ID`=993; + +-- Emotes for Quest "Escape Through Force" +UPDATE `quest_offer_reward` SET `Emote1`=2 WHERE `ID`=994; + +-- Emotes for Quest "Escape Through Stealth" +UPDATE `quest_offer_reward` SET `Emote1`=2 WHERE `ID`=995; + +-- Emotes for Quest "Thundris Windweaver" +DELETE FROM `quest_details` WHERE `ID`=4761; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(4761,1,0,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=2 WHERE `ID`=4761; + +-- Emotes for Quest "The Cliffspring River" +DELETE FROM `quest_details` WHERE `ID`=4762; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(4762,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=1 WHERE `ID`=4762; +UPDATE `quest_offer_reward` SET `Emote1`=5 WHERE `ID`=4762; + +-- Emotes for Quest "The Blackwood Corrupted" +DELETE FROM `quest_details` WHERE `ID`=4763; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(4763,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnComplete`=0 WHERE `ID`=4763; +UPDATE `quest_offer_reward` SET `Emote1`=4 WHERE `ID`=4763; + +-- Emotes for Quest "Easy Strider Living" +DELETE FROM `quest_details` WHERE `ID`=2178; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(2178,273,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=5, `EmoteOnComplete`=5 WHERE `ID`=2178; +UPDATE `quest_offer_reward` SET `Emote1`=4 WHERE `ID`=2178; + +-- Emotes for Quest "The Tower of Althalaxx" +DELETE FROM `quest_details` WHERE `ID`=965; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(965,2,1,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=6 WHERE `ID`=965; + +-- Emotes for Quest "The Tower of Althalaxx (Part 2)" +DELETE FROM `quest_details` WHERE `ID`=966; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(966,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=6, `EmoteOnComplete`=6 WHERE `ID`=966; +UPDATE `quest_offer_reward` SET `Emote1`=2 WHERE `ID`=966; + +-- Emotes for Quest "The Tower of Althalaxx (Part 3)" +DELETE FROM `quest_details` WHERE `ID`=967; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(967,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnComplete`=6 WHERE `ID`=967; +UPDATE `quest_offer_reward` SET `Emote1`=1 WHERE `ID`=967; + +-- Emotes for Quest "The Tower of Althalaxx (Part 4)" +DELETE FROM `quest_details` WHERE `ID`=970; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(970,1,1,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=6 WHERE `ID`=970; + +-- Emotes for Quest "The Tower of Althalaxx (Part 5)" +DELETE FROM `quest_details` WHERE `ID`=973; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(973,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=6 WHERE `ID`=973; +UPDATE `quest_offer_reward` SET `Emote1`=4 WHERE `ID`=973; + +-- Emotes for Quest "The Tower of Althalaxx (Part 6)" +DELETE FROM `quest_details` WHERE `ID`=1140; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(1140,1,0,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=1 WHERE `ID`=1140; + +-- Emotes for Quest "The Tower of Althalaxx (Part 7)" +UPDATE `quest_offer_reward` SET `Emote1`=5 WHERE `ID`=1167; + +-- Emotes for Quest "The Tower of Althalaxx (Part 8)" +DELETE FROM `quest_details` WHERE `ID`=1143; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(1143,273,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnIncomplete`=1 WHERE `ID`=1143; +UPDATE `quest_offer_reward` SET `Emote1`=4 WHERE `ID`=1143; + +-- Emotes for Quest "The Tower of Althalaxx (Part 9)" +UPDATE `quest_offer_reward` SET `Emote1`=273 WHERE `ID`=981; + +-- Emotes for Quest "Gyromast's Retrieval" +DELETE FROM `quest_details` WHERE `ID`=2098; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(2098,1,0,0,0,0,0,0,0,0); +UPDATE `quest_request_items` SET `EmoteOnComplete`=0 WHERE `ID`=2098; +UPDATE `quest_offer_reward` SET `Emote1`=4 WHERE `ID`=2098; + +-- Emotes for Quest "Gyromast's Revenge" +DELETE FROM `quest_details` WHERE `ID`=2078; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(2078,5,0,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=397 WHERE `ID`=2078; + +-- Emotes for Quest "The Fall of Ameth'Aran" +DELETE FROM `quest_details` WHERE `ID`=953; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(953,1,0,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=1, `Emote2`=2 WHERE `ID`=953; + +-- Emotes for Quest "One Shot. One Kill" +UPDATE `quest_offer_reward` SET `Emote1`=2 WHERE `ID`=5713; + +-- Emotes for Quest "The Powers Below" +UPDATE `quest_request_items` SET `EmoteOnComplete`=3 WHERE `ID`=968; +UPDATE `quest_offer_reward` SET `Emote1`=1 WHERE `ID`=968; + +-- Emotes for Quest "The Sleeper Has Awakened" +UPDATE `quest_request_items` SET `EmoteOnComplete`=0 WHERE `ID`=5321; +UPDATE `quest_offer_reward` SET `Emote1`=4 WHERE `ID`=5321; + +-- Emotes for Quest "Onward to Ashenvale" +DELETE FROM `quest_details` WHERE `ID`=10752; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(10752,1,0,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=6 WHERE `ID`=10752; + +-- Emotes for Quest "Trek to Ashenvale" +DELETE FROM `quest_details` WHERE `ID`=990; +INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES +(990,1,0,0,0,0,0,0,0,0); +UPDATE `quest_offer_reward` SET `Emote1`=1 WHERE `ID`=990; diff --git a/data/sql/updates/db_world/2023_10_22_03.sql b/data/sql/updates/db_world/2023_10_22_03.sql new file mode 100644 index 00000000000000..34cd2ecb389858 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_22_03.sql @@ -0,0 +1,19 @@ +-- DB update 2023_10_22_02 -> 2023_10_22_03 +-- AB_Effect_000 28441 spell effect only works on NPCs related to Ashbringers in "Scarlet Monastery" +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=28441 AND `SourceId`=0 AND `ConditionTypeOrReference`=31 AND `ConditionTarget`=0 AND `ConditionValue1`=3 AND `ConditionValue3`=0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 28441, 0, 0, 31, 0, 3, 3976, 0, 0, 0, 0, '', 'AB_Effect_000 target Scarlet Commander Mograine'), +(13, 1, 28441, 0, 1, 31, 0, 3, 4294, 0, 0, 0, 0, '', 'AB_Effect_000 target Scarlet Sorcerer'), +(13, 1, 28441, 0, 2, 31, 0, 3, 4295, 0, 0, 0, 0, '', 'AB_Effect_000 target Scarlet Myrmidon'), +(13, 1, 28441, 0, 3, 31, 0, 3, 4298, 0, 0, 0, 0, '', 'AB_Effect_000 target Scarlet Defender'), +(13, 1, 28441, 0, 4, 31, 0, 3, 4299, 0, 0, 0, 0, '', 'AB_Effect_000 target Scarlet Chaplain'), +(13, 1, 28441, 0, 5, 31, 0, 3, 4300, 0, 0, 0, 0, '', 'AB_Effect_000 target Scarlet Wizard'), +(13, 1, 28441, 0, 6, 31, 0, 3, 4301, 0, 0, 0, 0, '', 'AB_Effect_000 target Scarlet Centurion'), +(13, 1, 28441, 0, 7, 31, 0, 3, 4302, 0, 0, 0, 0, '', 'AB_Effect_000 target Scarlet Champion'), +(13, 1, 28441, 0, 8, 31, 0, 3, 4303, 0, 0, 0, 0, '', 'AB_Effect_000 target Scarlet Abbot'), +(13, 1, 28441, 0, 9, 31, 0, 3, 4540, 0, 0, 0, 0, '', 'AB_Effect_000 target Scarlet Monk'), +(13, 1, 28441, 0, 10, 31, 0, 3, 4542, 0, 0, 0, 0, '', 'AB_Effect_000 target High Inquisitor Fairbanks'); + +-- Forgiveness 28697 adds comments +UPDATE `conditions` SET `Comment`='Forgiveness target Scarlet Commander Mograine' WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=28697 AND `SourceId`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=31 AND `ConditionTarget`=0 AND `ConditionValue1`=3 AND `ConditionValue2`=3976 AND `ConditionValue3`=0; + diff --git a/data/sql/updates/db_world/2023_10_22_04.sql b/data/sql/updates/db_world/2023_10_22_04.sql new file mode 100644 index 00000000000000..8dffed9a74f3d7 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_22_04.sql @@ -0,0 +1,6 @@ +-- DB update 2023_10_22_03 -> 2023_10_22_04 +UPDATE `gameobject` SET `position_x` = 634.220, `position_y` = 359.989 WHERE `guid` = 47468 AND `id` = 19569; + +UPDATE `gameobject` SET `position_x` = 634.065, `position_y` = 360.295 WHERE `guid` = 47480 AND `id` = 19570; + +UPDATE `gameobject` SET `position_x` = 633.923, `position_y` = 359.858, `position_z` = 50.713 WHERE `guid` = 47481 AND `id` = 19571; diff --git a/data/sql/updates/db_world/2023_10_22_05.sql b/data/sql/updates/db_world/2023_10_22_05.sql new file mode 100644 index 00000000000000..bb6519c55241d0 --- /dev/null +++ b/data/sql/updates/db_world/2023_10_22_05.sql @@ -0,0 +1,725 @@ +-- DB update 2023_10_22_04 -> 2023_10_22_05 +-- Use sniffed values for 16781 Midsummer Celebrant spawns +-- updated spawns +DELETE FROM `creature` WHERE `id1` = 16781 AND `guid` IN (202714, 202715, 202716, 202717, 202741, 202742, 202743, 202744, 202746, 202747, 202748, 202749, 202752, 202753, 202754, 202755, 202759, 202760, 202761, 202762, 202764, 202765, 202766, 202767, 94529, 94530, 94532, 94533, 94534, 94535, 94536, 94537, 94538, 94539, 94540, 94541, 94542, 94543, 94544, 94545, 94546, 94548, 94549, 94550, 94551, 94552, 94554, 94556, 94557, 94558, 94559, 94560, 94561, 94562, 94563, 94564, 94565, 94566, 94567, 94568, 94569, 94570, 94571, 94572, 94573, 94574, 94575, 94576, 94577, 94578, 94579, 94580, 94581, 94582, 94583, 94584, 94585, 94587, 94588, 94589, 94590, 94591, 94592, 94593, 94594, 94595, 94596, 94597, 94598, 94599, 94600, 94601, 94602, 94605, 94606, 94607, 94608, 94609, 94610, 94611, 94612, 94613, 94614, 94615, 94616, 94617, 94618, 94619, 94620, 94621, 94622, 94623, 94624, 94625, 94626, 94627, 94628, 94629, 94630, 94631, 94632, 94633, 94636, 94638, 94639, 94640, 94641, 94642, 94643, 94644, 94645, 94646, 94647, 94648, 94650, 94651, 94652, 94653, 94654, 94655, 94656, 94657, 94658, 94659, 94660, 94661, 94662, 94663, 94664, 94665, 94666, 94667, 94668, 94669, 94670, 94671, 94672, 94673, 94674, 94675, 94676, 94677, 94678, 94679, 94680, 94681, 94682, 94683, 94684, 94685, 94686, 94687, 94688, 94689, 94690, 94691, 94692, 94695, 94697, 94698, 94701, 94702, 94703, 94705, 94706, 94707, 94708, 94709, 94712, 94713, 94714, 94718, 94719, 94720, 94721, 94722, 94723, 94725, 94727, 94728, 94729, 94730, 94731, 94732, 94734, 94735, 94736, 94737, 94739, 94740, 94741, 94742, 94743, 94744, 94745, 94746); +INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES +(202714, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 127.0819168090820312, -4722.9560546875, 18.60128211975097656, 5.515240192413330078, 120, 0, 0, 2215, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(202715, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 131.1795806884765625, -4725.8388671875, 17.80640029907226562, 2.705260276794433593, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(202716, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 131.3594818115234375, -4731.74853515625, 16.76935005187988281, 0.122173048555850982, 120, 0, 0, 1848, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(202717, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 136.675994873046875, -4729.85205078125, 16.67755126953125, 3.543018341064453125, 120, 0, 0, 1919, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(202741, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 9371.484375, -6786.65087890625, 14.43894767761230468, 5.8817596435546875, 120, 0, 0, 1919, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(202742, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 9374.86328125, -6787.50732421875, 14.52208423614501953, 3.019419670104980468, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(202743, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 9384.71875, -6786.87109375, 14.20661067962646484, 6.0737457275390625, 120, 0, 0, 1990, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(202744, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 9388.751953125, -6787.9951171875, 14.10687828063964843, 2.792526721954345703, 120, 0, 0, 2453, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(202746, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 9793.185546875, -7259.97412109375, 26.3159332275390625, 5.8817596435546875, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(202747, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 9796.865234375, -7261.2578125, 26.35243606567382812, 3.019419670104980468, 120, 0, 0, 2371, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(202748, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 9797.412109375, -7244.806640625, 26.14875984191894531, 5.480333805084228515, 120, 0, 0, 2614, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(202749, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 9800.8662109375, -7248.796875, 26.21503257751464843, 2.234021425247192382, 120, 0, 0, 1990, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(202752, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 7670.49658203125, -6830.04296875, 78.69478607177734375, 5.8817596435546875, 120, 0, 0, 1716, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(202753, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 7674.27685546875, -6840.67578125, 79.92003631591796875, 6.0737457275390625, 120, 0, 0, 2533, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(202754, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 7674.87841796875, -6831.93115234375, 78.88452911376953125, 3.019419670104980468, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(202755, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 7678.85498046875, -6843.01416015625, 79.78014373779296875, 2.792526721954345703, 120, 0, 0, 3728, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(202759, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 2278.226318359375, 439.366607666015625, 34.14168548583984375, 4.97418832778930664, 120, 0, 0, 2533, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(202760, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 2279.183837890625, 435.570220947265625, 34.17606353759765625, 1.797689080238342285, 120, 0, 0, 3331, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(202761, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 2289.63525390625, 428.393829345703125, 34.87903594970703125, 1.047197580337524414, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(202762, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 2291.09521484375, 432.0240478515625, 35.47864532470703125, 4.590215682983398437, 120, 0, 0, 3144, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(202764, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -3790.318603515625, -11510.521484375, -134.645401000976562, 3.281219005584716796, 120, 0, 0, 3052, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(202765, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -3795.79345703125, -11510.4296875, -134.709365844726562, 0.174532920122146606, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(202766, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -3814.237548828125, -11505.810546875, -138.451461791992187, 4.433136463165283203, 120, 0, 0, 1848, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(202767, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -3815.921875, -11510.287109375, -138.488174438476562, 1.117010712623596191, 120, 0, 0, 1782, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94529, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 8709.51953125, 953.97393798828125, 13.64090156555175781, 4.258603572845458984, 120, 0, 0, 2138, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94530, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 1895.0660400390625, -4344.84912109375, 21.20777511596679687, 5.672319889068603515, 120, 0, 0, 2961, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +-- 94531 not sniffed +(94532, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -3103.629150390625, -2740.179443359375, 35.01421737670898437, 2.914699792861938476, 120, 0, 0, 2533, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94533, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -3107.486328125, -2738.833251953125, 35.2755889892578125, 5.829399585723876953, 120, 0, 0, 1848, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94534, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -3114.165283203125, -2737.15478515625, 34.85781478881835937, 4.293509960174560546, 120, 0, 0, 3624, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94535, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -3116.45751953125, -2741.033935546875, 34.89273452758789062, 0.907571196556091308, 120, 0, 0, 2292, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94536, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 9773.2451171875, 1007.27520751953125, 1299.075439453125, 4.258603572845458984, 120, 0, 0, 3941, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94537, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 6837.92919921875, -4560.8798828125, 710.037353515625, 1.2042771577835083, 120, 0, 0, 2371, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94538, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 6830.61279296875, -4564.916015625, 710.4595947265625, 5.573488235473632812, 120, 0, 0, 3728, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94539, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 6850.12939453125, -4748.908203125, 697.37890625, 6.2657318115234375, 120, 0, 0, 3728, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94540, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -50.4992942810058593, 1243.124755859375, 90.835296630859375, 2.216568231582641601, 120, 0, 0, 2699, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94541, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 2001.78955078125, -2350.227783203125, 90.30035400390625, 3.822271108627319335, 120, 0, 0, 2961, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94542, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 1987.349853515625, -2335.2705078125, 90.3668365478515625, 0.331612557172775268, 120, 0, 0, 2292, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94543, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 6312.31494140625, 527.88427734375, 16.63825225830078125, 5.235987663269042968, 120, 0, 0, 1919, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94544, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 6309.24658203125, 509.717681884765625, 17.81841850280761718, 2.059488534927368164, 120, 0, 0, 3728, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94545, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -1846.579833984375, 3044.63427734375, 1.992398381233215332, 3.543018341064453125, 120, 0, 0, 1919, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94546, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -1842.068603515625, 3054.227783203125, 0.818315327167510986, 2.705260276794433593, 120, 0, 0, 2961, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +-- 94547 not sniffed +(94548, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -9449.1767578125, -2123.471435546875, 69.1136474609375, 1.431169986724853515, 120, 0, 0, 3624, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94549, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -3433.665283203125, -959.2987060546875, 9.565944671630859375, 2.216568231582641601, 120, 0, 0, 1716, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94550, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -14277.845703125, 54.59401702880859375, 0.903981447219848632, 2.879793167114257812, 120, 0, 0, 3624, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94551, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -14289.595703125, 46.96712112426757812, 0.852089285850524902, 6.021385669708251953, 120, 0, 0, 3052, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94552, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -14285.2275390625, 45.27360153198242187, 0.565200328826904296, 2.687807083129882812, 120, 0, 0, 3524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94554, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -14282.404296875, 55.37071609497070312, 0.4672013521194458, 6.213372230529785156, 120, 0, 0, 3052, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94556, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -1197.2857666015625, -2680.873291015625, 46.3772430419921875, 6.126105785369873046, 120, 0, 0, 3237, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94557, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -1202.4639892578125, -2657.933349609375, 45.80363845825195312, 5.235987663269042968, 120, 0, 0, 2453, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94558, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10968.0048828125, -3234.336669921875, 41.47556686401367187, 2.216568231582641601, 120, 0, 0, 2871, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94559, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -9375.13671875, 26.34857940673828125, 61.71401596069335937, 4.834561824798583984, 120, 0, 0, 2614, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94560, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -9383.171875, 11.5457916259765625, 61.1361541748046875, 1.448623299598693847, 120, 0, 0, 1524, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94561, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -9373.3623046875, 22.89648056030273437, 62.09075927734375, 2.216568231582641601, 120, 0, 0, 3425, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94562, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -5428.44970703125, -486.615234375, 396.645751953125, 4.258603572845458984, 120, 0, 0, 1919, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94563, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -5250.07177734375, -2891.317626953125, 339.26678466796875, 4.258603572845458984, 120, 0, 0, 1585, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94564, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -6686.6455078125, -2194.682861328125, 248.433074951171875, 2.338741064071655273, 120, 0, 0, 1990, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94565, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -6685.30419921875, -2199.441650390625, 249.0545501708984375, 3.211405754089355468, 120, 0, 0, 1651, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94566, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -474.94091796875, -4528.29833984375, 12.83812427520751953, 4.660028934478759765, 120, 0, 0, 2453, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94567, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -463.081878662109375, -4537.73388671875, 9.435498237609863281, 3.071779489517211914, 120, 0, 0, 1651, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94568, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -468.08880615234375, -4537.65478515625, 10.32885360717773437, 0.03490658476948738, 120, 0, 0, 2138, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94569, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 1792.443603515625, 219.5408477783203125, 60.01215744018554687, 1.570796370506286621, 120, 0, 0, 2699, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94570, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 1793.1646728515625, 224.844451904296875, 59.71418380737304687, 4.468042850494384765, 120, 0, 0, 2453, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94571, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 1816.4825439453125, 217.62310791015625, 59.92689132690429687, 2.042035102844238281, 120, 0, 0, 1716, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94572, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 216.6368560791015625, 7684.775390625, 23.00917816162109375, 0.907571196556091308, 120, 0, 0, 3941, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94573, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 219.3437042236328125, 7688.07666015625, 23.05628585815429687, 4.118977069854736328, 120, 0, 0, 3728, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94574, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 940.41290283203125, 789.0902099609375, 104.0225296020507812, 1.692969322204589843, 120, 0, 0, 2453, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94575, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -6786.50537109375, 544.6658935546875, 1.599180340766906738, 0.366519153118133544, 120, 0, 0, 2533, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94576, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 9773.314453125, 1033.0955810546875, 1299.56298828125, 3.839724302291870117, 120, 0, 0, 1524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94577, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 9769.7119140625, 1030.63427734375, 1300.171875, 0.453785598278045654, 120, 0, 0, 2215, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94578, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 9772.8662109375, 1004.4332275390625, 1298.8970947265625, 1.448623299598693847, 120, 0, 0, 2371, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94579, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -6774.9521484375, 553.74176025390625, 3.734848260879516601, 4.258603572845458984, 120, 0, 0, 3624, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94580, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -6775.8408203125, 550.70379638671875, 3.138088226318359375, 1.274090290069580078, 120, 0, 0, 1782, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94581, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 6834.138671875, -4568.12451171875, 709.71368408203125, 2.757620096206665039, 120, 0, 0, 2614, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94582, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -7229.51513671875, -3843.727783203125, 12.14379501342773437, 4.258603572845458984, 120, 0, 0, 2138, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94583, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 6854.1123046875, -4749.861328125, 697.02130126953125, 3.001966238021850585, 120, 0, 0, 1848, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94584, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 6845.67724609375, -4757.61181640625, 697.64105224609375, 1.518436431884765625, 120, 0, 0, 2453, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94585, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 6846.1201171875, -4752.99462890625, 697.61151123046875, 4.537856101989746093, 120, 0, 0, 2453, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94587, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 1998.3646240234375, -2352.390380859375, 90.135009765625, 0.506145477294921875, 120, 0, 0, 3237, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94588, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 1990.5501708984375, -2333.865234375, 91.22491455078125, 3.630284786224365234, 120, 0, 0, 1990, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94589, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -62.8863945007324218, 1247.8487548828125, 90.82196044921875, 4.258603572845458984, 120, 0, 0, 2961, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94590, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -63.0911445617675781, 1244.8236083984375, 91.153228759765625, 1.448623299598693847, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94591, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -52.60400390625, 1246.91796875, 90.813232421875, 5.235987663269042968, 120, 0, 0, 4050, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94592, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -3472.85205078125, -4218.52978515625, 9.612421035766601562, 0.78539818525314331, 120, 0, 0, 1782, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94593, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -1845.1126708984375, 3056.318359375, 0.594067335128784179, 5.515240192413330078, 120, 0, 0, 4050, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94594, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -1851.7235107421875, 3043.050537109375, 2.750925302505493164, 0.122173048555850982, 120, 0, 0, 2614, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94595, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -5511.3203125, -2279.45947265625, -58.929840087890625, 3.612831592559814453, 120, 0, 0, 1848, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94596, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -5514.57470703125, -2283.4931640625, -58.7320175170898437, 1.256637096405029296, 120, 0, 0, 1848, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94597, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 1898.49658203125, -4346.82470703125, 21.24923324584960937, 2.705260276794433593, 120, 0, 0, 3237, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94598, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10351.283203125, -3292.098876953125, 23.25424385070800781, 4.520402908325195312, 120, 0, 0, 3834, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94599, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -9437.4248046875, -2137.572509765625, 66.7628173828125, 0.471238881349563598, 120, 0, 0, 2453, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94600, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -9434.021484375, -2135.5712890625, 66.296875, 3.752457857131958007, 120, 0, 0, 2371, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94601, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 178.85015869140625, -2118.315673828125, 105.0109481811523437, 2.216568231582641601, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94602, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -3427.63671875, -949.9451904296875, 9.669668197631835937, 4.258603572845458984, 120, 0, 0, 2215, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94605, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -1201.2806396484375, -2660.020751953125, 45.40309524536132812, 2.216568231582641601, 120, 0, 0, 2614, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94606, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10936.1943359375, -3219.516357421875, 41.4308319091796875, 1.448623299598693847, 120, 0, 0, 1919, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94607, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10968.8740234375, -3230.70703125, 41.53336334228515625, 5.235987663269042968, 120, 0, 0, 2062, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94608, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10935.7001953125, -3215.9775390625, 41.4308319091796875, 4.258603572845458984, 120, 0, 0, 2371, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94609, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -5430.01806640625, -489.223052978515625, 396.78741455078125, 1.448623299598693847, 120, 0, 0, 2961, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94610, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -5243.39599609375, -2868.24951171875, 337.046142578125, 5.235987663269042968, 120, 0, 0, 1651, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94611, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -6688.79443359375, -2191.264892578125, 247.8145599365234375, 5.113814830780029296, 120, 0, 0, 2699, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94612, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -475.42340087890625, -4532.37255859375, 12.32702064514160156, 1.570796370506286621, 120, 0, 0, 2453, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94613, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -1740.6671142578125, 5351.794921875, -12.3448028564453125, 6.0737457275390625, 120, 0, 0, 2062, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94614, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -1735.1473388671875, 5351.087890625, -12.3448066711425781, 2.967059612274169921, 120, 0, 0, 2292, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94615, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 1814.1285400390625, 220.9268646240234375, 59.59687423706054687, 5.218534469604492187, 120, 0, 0, 3624, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94616, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 6313.17822265625, 525.60357666015625, 17.21449089050292968, 2.216568231582641601, 120, 0, 0, 2871, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94617, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 6307.56103515625, 512.287109375, 17.76943397521972656, 5.375614166259765625, 120, 0, 0, 2215, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94618, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -9449.2509765625, -2120.39404296875, 69.13653564453125, 4.572762489318847656, 120, 0, 0, 2062, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94619, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -9382.33203125, 14.481719970703125, 61.61740875244140625, 4.258603572845458984, 120, 0, 0, 2371, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94620, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -5431.736328125, -502.4267578125, 397.757720947265625, 2.216568231582641601, 120, 0, 0, 2533, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94621, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -5433.92822265625, -500.603302001953125, 397.292236328125, 5.235987663269042968, 120, 0, 0, 2699, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94622, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -5242.91943359375, -2871.70458984375, 338.06793212890625, 2.216568231582641601, 120, 0, 0, 1919, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94623, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -5250.7705078125, -2895.20458984375, 338.6141357421875, 1.448623299598693847, 120, 0, 0, 3524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94624, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 34.11257553100585937, 2604.561767578125, 71.0569000244140625, 5.8817596435546875, 120, 0, 0, 1919, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94625, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 214.86187744140625, 7681.31591796875, 22.78777694702148437, 2.792526721954345703, 120, 0, 0, 2614, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94626, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 209.9723052978515625, 7682.06884765625, 22.66131210327148437, 0.05235987901687622, 120, 0, 0, 3144, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94627, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -1026.5867919921875, 304.890625, 135.8292694091796875, 0.715584993362426757, 120, 0, 0, 2215, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94628, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -1023.05902099609375, 307.598968505859375, 135.807464599609375, 3.88965606689453125, 120, 0, 0, 1524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94629, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 1918.671875, -4348.6474609375, 20.8673858642578125, 5.026548385620117187, 120, 0, 0, 1585, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94630, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 1919.467041015625, -4353.54541015625, 20.84742355346679687, 1.623156189918518066, 120, 0, 0, 3144, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94631, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -1764.56298828125, 5311.56982421875, -12.3448047637939453, 3.019419670104980468, 120, 0, 0, 3728, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94632, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -1769.8411865234375, 5313.84912109375, -12.3448028564453125, 5.8817596435546875, 120, 0, 0, 3331, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94633, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -515.7862548828125, 2339.665771484375, 37.94459152221679687, 2.216568231582641601, 120, 0, 0, 3941, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94636, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -1195.37109375, -2682.076416015625, 47.0075531005859375, 2.530727386474609375, 120, 0, 0, 3728, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94638, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 186.3649139404296875, -2115.523193359375, 105.463714599609375, 1.448623299598693847, 120, 0, 0, 3144, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94639, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 187.436737060546875, -2112.564697265625, 106.0841522216796875, 4.258603572845458984, 120, 0, 0, 3425, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94640, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 177.1781768798828125, -2115.2431640625, 105.3067855834960937, 5.235987663269042968, 120, 0, 0, 2614, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94641, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -1143.935546875, -3549.910888671875, 52.43030929565429687, 5.235987663269042968, 120, 0, 0, 3237, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94642, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -1142.06201171875, -3553.01171875, 52.26158523559570312, 2.216568231582641601, 120, 0, 0, 2062, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94643, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -1115.127197265625, -3547.663330078125, 50.0686492919921875, 2.530727386474609375, 120, 0, 0, 2961, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94644, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -1117.8231201171875, -3543.859619140625, 50.28672409057617187, 4.547890186309814453, 120, 0, 0, 1919, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94645, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10684.3466796875, -1148.5767822265625, 25.8847808837890625, 0.01745329238474369, 120, 0, 0, 3425, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94646, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10682.5556640625, -1168.065673828125, 24.84414100646972656, 1.448623299598693847, 120, 0, 0, 1524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94647, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10681.478515625, -1164.2542724609375, 25.25356101989746093, 4.258603572845458984, 120, 0, 0, 2961, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94648, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10680.306640625, -1147.926513671875, 25.908477783203125, 3.385938644409179687, 120, 0, 0, 3834, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94650, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10351.9716796875, -3296.738037109375, 23.66120338439941406, 1.48352980613708496, 120, 0, 0, 2292, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94651, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10350.076171875, -3307.586181640625, 23.21487236022949218, 0.191986218094825744, 120, 0, 0, 3144, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94652, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10344.3994140625, -3306.411376953125, 23.19609832763671875, 3.368485450744628906, 120, 0, 0, 3524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94653, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -14371.4580078125, 132.8599700927734375, 1.042927384376525878, 1.780235767364501953, 120, 0, 0, 2453, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94654, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -14388.7724609375, 125.6664810180664062, 1.14530336856842041, 5.567600250244140625, 120, 0, 0, 3524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94655, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -14385.0595703125, 122.5594100952148437, 1.325597405433654785, 2.408554315567016601, 120, 0, 0, 1585, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94656, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -14374.603515625, 137.5897674560546875, 0.442370355129241943, 5.270894527435302734, 120, 0, 0, 3237, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94657, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -122.378196716308593, -813.28106689453125, 55.64160919189453125, 3.019419670104980468, 120, 0, 0, 1585, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94658, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -125.859756469726562, -811.30780029296875, 55.3297119140625, 5.8817596435546875, 120, 0, 0, 2138, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94659, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -129.013504028320312, -823.60845947265625, 55.25949478149414062, 0.593411922454833984, 120, 0, 0, 2961, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94660, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -125.360298156738281, -821.475830078125, 55.401031494140625, 3.560471534729003906, 120, 0, 0, 3331, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94661, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -4708.4287109375, -1236.9578857421875, 501.74273681640625, 1.117010712623596191, 120, 0, 0, 1585, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94662, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -4692.7177734375, -1218.0670166015625, 501.74267578125, 0.750491559505462646, 120, 0, 0, 3941, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94663, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -4706.34130859375, -1233.2301025390625, 501.74273681640625, 4.258603572845458984, 120, 0, 0, 1782, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94664, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -4688.58056640625, -1213.5035400390625, 501.74267578125, 4.258603572845458984, 120, 0, 0, 1990, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94665, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -1203.7896728515625, 7487.376953125, 22.23898696899414062, 3.543018341064453125, 120, 0, 0, 2215, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94666, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -1207.9310302734375, 7487.22119140625, 22.329345703125, 6.021385669708251953, 120, 0, 0, 2614, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94667, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -1214.888916015625, 7493.080078125, 20.783966064453125, 1.274090290069580078, 120, 0, 0, 2699, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94668, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -1213.771240234375, 7498.375, 20.59492683410644531, 4.555309295654296875, 120, 0, 0, 2138, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94669, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10646.9736328125, 1072.1695556640625, 34.08964157104492187, 1.518436431884765625, 120, 0, 0, 2062, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94670, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10640.6201171875, 1080.9749755859375, 34.885528564453125, 2.216568231582641601, 120, 0, 0, 2699, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94671, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10646.326171875, 1075.0521240234375, 34.66873931884765625, 4.258603572845458984, 120, 0, 0, 3052, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94672, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10642.1982421875, 1083.531005859375, 35.00516510009765625, 5.235987663269042968, 120, 0, 0, 2292, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94673, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -614.224365234375, -535.79620361328125, 36.18006515502929687, 2.216568231582641601, 120, 0, 0, 2533, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94674, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -615.83917236328125, -532.4276123046875, 35.78181838989257812, 5.235987663269042968, 120, 0, 0, 2614, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94675, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -8840.865234375, 851.16375732421875, 98.97126007080078125, 1.919862151145935058, 120, 0, 0, 1919, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94676, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -8842.8212890625, 856.1844482421875, 98.68222808837890625, 4.991641521453857421, 120, 0, 0, 3834, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94677, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 593.82080078125, 1350.0206298828125, 90.39966583251953125, 5.131268024444580078, 120, 0, 0, 3834, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94678, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 595.3646240234375, 1345.8031005859375, 90.15616607666015625, 1.867502331733703613, 120, 0, 0, 1919, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94679, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 602.08380126953125, 1351.74072265625, 88.17452239990234375, 3.050934076309204101, 120, 0, 0, 2215, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94680, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 600.0303955078125, 1355.1802978515625, 88.827880859375, 5.218534469604492187, 120, 0, 0, 2871, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94681, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -4585.1943359375, 428.713714599609375, 42.22011184692382812, 5.8817596435546875, 120, 0, 0, 2533, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94682, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -4593.39990234375, 421.33831787109375, 43.28391265869140625, 6.0737457275390625, 120, 0, 0, 3524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94683, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -7603.89404296875, -2066.003662109375, 129.67547607421875, 6.248278617858886718, 120, 0, 0, 3728, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94684, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -7595.41064453125, -2060.6318359375, 131.6774139404296875, 5.131268024444580078, 120, 0, 0, 2371, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94685, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -7592.49462890625, -2065.334228515625, 131.0778045654296875, 2.356194496154785156, 120, 0, 0, 1524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94686, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -7599.01806640625, -2067.004638671875, 129.61773681640625, 2.844886541366577148, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94687, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -4589.1201171875, 420.20013427734375, 42.82030868530273437, 2.792526721954345703, 120, 0, 0, 1990, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94688, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -4580.62890625, 427.090667724609375, 41.96175765991210937, 3.019419670104980468, 120, 0, 0, 3425, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94689, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -6988.54638671875, 908.5411376953125, 9.156393051147460937, 5.06145477294921875, 120, 0, 0, 2699, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94690, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -6979.45166015625, 913.84600830078125, 10.17988014221191406, 2.757620096206665039, 120, 0, 0, 1848, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94691, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -6984.421875, 914.66644287109375, 10.25777626037597656, 6.2657318115234375, 120, 0, 0, 1524, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94692, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -6988.51025390625, 905.155517578125, 8.611766815185546875, 1.361356854438781738, 120, 0, 0, 2453, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94695, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -7106.0185546875, -3664.1640625, 10.67626762390136718, 5.567600250244140625, 120, 0, 0, 2614, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94697, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -6783.3271484375, 546.26434326171875, 2.062355279922485351, 3.124139308929443359, 120, 0, 0, 3052, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94698, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -7110.3818359375, -3667.189208984375, 9.933405876159667968, 5.270894527435302734, 120, 0, 0, 3331, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94701, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -7230.20166015625, -3847.15673828125, 12.04393196105957031, 1.274090290069580078, 120, 0, 0, 1585, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94702, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -623.30419921875, -530.146484375, 34.34803009033203125, 4.717217445373535156, 120, 0, 0, 3237, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94703, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -623.67034912109375, -533.0115966796875, 34.46847915649414062, 1.448623299598693847, 120, 0, 0, 3052, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94705, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -3434.67236328125, -956.68206787109375, 9.655954360961914062, 5.235987663269042968, 120, 0, 0, 2699, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94706, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -3428.97119140625, -953.84014892578125, 10.22418594360351562, 1.448623299598693847, 120, 0, 0, 1651, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94707, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 947.502197265625, 793.03857421875, 104.3484954833984375, 4.852015495300292968, 120, 0, 0, 1716, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94708, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 948.3798828125, 787.4296875, 104.1169052124023437, 1.762782573699951171, 120, 0, 0, 1848, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94709, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 939.41058349609375, 794.42889404296875, 104.0962142944335937, 4.956735134124755859, 120, 0, 0, 3834, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94712, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -516.27880859375, 2343.693115234375, 37.8050994873046875, 4.834561824798583984, 120, 0, 0, 3941, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94713, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -508.935272216796875, 2331.935791015625, 38.67222976684570312, 1.082104086875915527, 120, 0, 0, 2533, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94714, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -505.305999755859375, 2335.1953125, 38.78377532958984375, 3.926990747451782226, 120, 0, 0, 1651, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94718, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -2535.738037109375, 4272.06982421875, 16.9969635009765625, 5.8817596435546875, 120, 0, 0, 3331, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94719, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -2532.480224609375, 4270.6025390625, 16.28694725036621093, 3.019419670104980468, 120, 0, 0, 3237, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94720, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 38.45231246948242187, 2603.812255859375, 70.8330841064453125, 3.019419670104980468, 120, 0, 0, 3425, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94721, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 27.40256118774414062, 2596.1513671875, 70.34127044677734375, 3.368485450744628906, 120, 0, 0, 3728, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94722, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 23.92898178100585937, 2595.87548828125, 70.45648193359375, 6.0737457275390625, 120, 0, 0, 2371, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94723, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -7102.43212890625, -3666.719970703125, 11.12041664123535156, 2.757620096206665039, 120, 0, 0, 1651, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94725, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -7109.0185546875, -3670.7197265625, 10.04127311706542968, 1.780235767364501953, 120, 0, 0, 3425, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94727, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 8708.4892578125, 949.18243408203125, 13.74794769287109375, 1.448623299598693847, 120, 0, 0, 3331, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94728, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 8723.4521484375, 968.93621826171875, 11.25754356384277343, 3.490658521652221679, 120, 0, 0, 1990, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94729, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -290.37841796875, -2665.664794921875, 93.42819976806640625, 3.40339207649230957, 120, 0, 0, 2961, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94730, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -294.148712158203125, -2665.89111328125, 93.49237823486328125, 0.575958669185638427, 120, 0, 0, 2871, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94731, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -293.684417724609375, -2659.167236328125, 94.075286865234375, 6.056292533874511718, 120, 0, 0, 3624, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94732, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -288.67620849609375, -2660.697509765625, 93.6977386474609375, 2.740166902542114257, 120, 0, 0, 3052, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94734, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -7234.59375, -3851.161865234375, 11.25800991058349609, 2.687807083129882812, 120, 0, 0, 3237, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94735, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -7237.943359375, -3850.227783203125, 10.85197639465332031, 6.17846536636352539, 120, 0, 0, 3425, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94736, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -2541.39013671875, 4261.50537109375, 16.38279533386230468, 3.368485450744628906, 120, 0, 0, 1919, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94737, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -2545.98828125, 4260.8525390625, 18.70516014099121093, 6.0737457275390625, 120, 0, 0, 3237, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94739, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 8718.390625, 966.43621826171875, 11.33300685882568359, 0.244346097111701965, 120, 0, 0, 3624, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94740, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -3472.674072265625, -4204.02001953125, 11.57154464721679687, 1.518436431884765625, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94741, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -3471.389892578125, -4198.935546875, 11.40192699432373046, 4.293509960174560546, 120, 0, 0, 2062, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94742, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -3469.436279296875, -4215.04345703125, 9.689471244812011718, 3.944444179534912109, 120, 0, 0, 2292, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94743, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 2554.700439453125, -468.442230224609375, 109.6515350341796875, 2.216568231582641601, 120, 0, 0, 2614, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94744, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 2553.02099609375, -466.177581787109375, 109.6237945556640625, 5.235987663269042968, 120, 0, 0, 2961, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(94745, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 2570.2333984375, -459.8243408203125, 108.06475830078125, 2.530727386474609375, 120, 0, 0, 2062, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(94746, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 2567.436767578125, -458.459625244140625, 108.470672607421875, 6.126105785369873046, 120, 0, 0, 3052, 0, 0, 0, 0, 0, "", 50063, 0, NULL); + +UPDATE `creature` SET `CreateObject` = 1 WHERE `id1` = 16781 AND `guid` IN (202714, 202715, 202716, 202717, 202741, 202742, 202743, 202744, 202746, 202747, 202748, 202749, 202752, 202753, 202754, 202755, 202759, 202760, 202761, 202762, 202764, 202765, 202766, 202767, 94529, 94530, 94532, 94533, 94534, 94535, 94536, 94537, 94538, 94539, 94540, 94541, 94542, 94543, 94544, 94545, 94546, 94548, 94549, 94550, 94551, 94552, 94554, 94556, 94557, 94558, 94559, 94560, 94561, 94562, 94563, 94564, 94565, 94566, 94567, 94568, 94569, 94570, 94571, 94572, 94573, 94574, 94575, 94576, 94577, 94578, 94579, 94580, 94581, 94582, 94583, 94584, 94585, 94587, 94588, 94589, 94590, 94591, 94592, 94593, 94594, 94595, 94596, 94597, 94598, 94599, 94600, 94601, 94602, 94605, 94606, 94607, 94608, 94609, 94610, 94611, 94612, 94613, 94614, 94615, 94616, 94617, 94618, 94619, 94620, 94621, 94622, 94623, 94624, 94625, 94626, 94627, 94628, 94629, 94630, 94631, 94632, 94633, 94636, 94638, 94639, 94640, 94641, 94642, 94643, 94644, 94645, 94646, 94647, 94648, 94650, 94651, 94652, 94653, 94654, 94655, 94656, 94657, 94658, 94659, 94660, 94661, 94662, 94663, 94664, 94665, 94666, 94667, 94668, 94669, 94670, 94671, 94672, 94673, 94674, 94675, 94676, 94677, 94678, 94679, 94680, 94681, 94682, 94683, 94684, 94685, 94686, 94687, 94688, 94689, 94690, 94691, 94692, 94695, 94697, 94698, 94701, 94702, 94703, 94705, 94706, 94707, 94708, 94709, 94712, 94713, 94714, 94718, 94719, 94720, 94721, 94722, 94723, 94725, 94727, 94728, 94729, 94730, 94731, 94732, 94734, 94735, 94736, 94737, 94739, 94740, 94741, 94742, 94743, 94744, 94745, 94746); + +DELETE FROM `game_event_creature` WHERE `eventEntry` = 1 AND `guid` IN (202714, 202715, 202716, 202717, 202741, 202742, 202743, 202744, 202746, 202747, 202748, 202749, 202752, 202753, 202754, 202755, 202759, 202760, 202761, 202762, 202764, 202765, 202766, 202767, 94529, 94530, 94532, 94533, 94534, 94535, 94536, 94537, 94538, 94539, 94540, 94541, 94542, 94543, 94544, 94545, 94546, 94548, 94549, 94550, 94551, 94552, 94554, 94556, 94557, 94558, 94559, 94560, 94561, 94562, 94563, 94564, 94565, 94566, 94567, 94568, 94569, 94570, 94571, 94572, 94573, 94574, 94575, 94576, 94577, 94578, 94579, 94580, 94581, 94582, 94583, 94584, 94585, 94587, 94588, 94589, 94590, 94591, 94592, 94593, 94594, 94595, 94596, 94597, 94598, 94599, 94600, 94601, 94602, 94605, 94606, 94607, 94608, 94609, 94610, 94611, 94612, 94613, 94614, 94615, 94616, 94617, 94618, 94619, 94620, 94621, 94622, 94623, 94624, 94625, 94626, 94627, 94628, 94629, 94630, 94631, 94632, 94633, 94636, 94638, 94639, 94640, 94641, 94642, 94643, 94644, 94645, 94646, 94647, 94648, 94650, 94651, 94652, 94653, 94654, 94655, 94656, 94657, 94658, 94659, 94660, 94661, 94662, 94663, 94664, 94665, 94666, 94667, 94668, 94669, 94670, 94671, 94672, 94673, 94674, 94675, 94676, 94677, 94678, 94679, 94680, 94681, 94682, 94683, 94684, 94685, 94686, 94687, 94688, 94689, 94690, 94691, 94692, 94695, 94697, 94698, 94701, 94702, 94703, 94705, 94706, 94707, 94708, 94709, 94712, 94713, 94714, 94718, 94719, 94720, 94721, 94722, 94723, 94725, 94727, 94728, 94729, 94730, 94731, 94732, 94734, 94735, 94736, 94737, 94739, 94740, 94741, 94742, 94743, 94744, 94745, 94746); +INSERT INTO `game_event_creature` (`eventEntry`,`guid`) VALUES +(1, 202714), +(1, 202715), +(1, 202716), +(1, 202717), +(1, 202741), +(1, 202742), +(1, 202743), +(1, 202744), +(1, 202746), +(1, 202747), +(1, 202748), +(1, 202749), +(1, 202752), +(1, 202753), +(1, 202754), +(1, 202755), +(1, 202759), +(1, 202760), +(1, 202761), +(1, 202762), +(1, 202764), +(1, 202765), +(1, 202766), +(1, 202767), +(1, 94529), +(1, 94530), +(1, 94532), +(1, 94533), +(1, 94534), +(1, 94535), +(1, 94536), +(1, 94537), +(1, 94538), +(1, 94539), +(1, 94540), +(1, 94541), +(1, 94542), +(1, 94543), +(1, 94544), +(1, 94545), +(1, 94546), +(1, 94548), +(1, 94549), +(1, 94550), +(1, 94551), +(1, 94552), +(1, 94554), +(1, 94556), +(1, 94557), +(1, 94558), +(1, 94559), +(1, 94560), +(1, 94561), +(1, 94562), +(1, 94563), +(1, 94564), +(1, 94565), +(1, 94566), +(1, 94567), +(1, 94568), +(1, 94569), +(1, 94570), +(1, 94571), +(1, 94572), +(1, 94573), +(1, 94574), +(1, 94575), +(1, 94576), +(1, 94577), +(1, 94578), +(1, 94579), +(1, 94580), +(1, 94581), +(1, 94582), +(1, 94583), +(1, 94584), +(1, 94585), +(1, 94587), +(1, 94588), +(1, 94589), +(1, 94590), +(1, 94591), +(1, 94592), +(1, 94593), +(1, 94594), +(1, 94595), +(1, 94596), +(1, 94597), +(1, 94598), +(1, 94599), +(1, 94600), +(1, 94601), +(1, 94602), +(1, 94605), +(1, 94606), +(1, 94607), +(1, 94608), +(1, 94609), +(1, 94610), +(1, 94611), +(1, 94612), +(1, 94613), +(1, 94614), +(1, 94615), +(1, 94616), +(1, 94617), +(1, 94618), +(1, 94619), +(1, 94620), +(1, 94621), +(1, 94622), +(1, 94623), +(1, 94624), +(1, 94625), +(1, 94626), +(1, 94627), +(1, 94628), +(1, 94629), +(1, 94630), +(1, 94631), +(1, 94632), +(1, 94633), +(1, 94636), +(1, 94638), +(1, 94639), +(1, 94640), +(1, 94641), +(1, 94642), +(1, 94643), +(1, 94644), +(1, 94645), +(1, 94646), +(1, 94647), +(1, 94648), +(1, 94650), +(1, 94651), +(1, 94652), +(1, 94653), +(1, 94654), +(1, 94655), +(1, 94656), +(1, 94657), +(1, 94658), +(1, 94659), +(1, 94660), +(1, 94661), +(1, 94662), +(1, 94663), +(1, 94664), +(1, 94665), +(1, 94666), +(1, 94667), +(1, 94668), +(1, 94669), +(1, 94670), +(1, 94671), +(1, 94672), +(1, 94673), +(1, 94674), +(1, 94675), +(1, 94676), +(1, 94677), +(1, 94678), +(1, 94679), +(1, 94680), +(1, 94681), +(1, 94682), +(1, 94683), +(1, 94684), +(1, 94685), +(1, 94686), +(1, 94687), +(1, 94688), +(1, 94689), +(1, 94690), +(1, 94691), +(1, 94692), +(1, 94695), +(1, 94697), +(1, 94698), +(1, 94701), +(1, 94702), +(1, 94703), +(1, 94705), +(1, 94706), +(1, 94707), +(1, 94708), +(1, 94709), +(1, 94712), +(1, 94713), +(1, 94714), +(1, 94718), +(1, 94719), +(1, 94720), +(1, 94721), +(1, 94722), +(1, 94723), +(1, 94725), +(1, 94727), +(1, 94728), +(1, 94729), +(1, 94730), +(1, 94731), +(1, 94732), +(1, 94734), +(1, 94735), +(1, 94736), +(1, 94737), +(1, 94739), +(1, 94740), +(1, 94741), +(1, 94742), +(1, 94743), +(1, 94744), +(1, 94745), +(1, 94746); + +-- new spawns +DELETE FROM `creature` WHERE `id1` = 16781 AND `guid` BETWEEN 139127 AND 139262; +INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES +(139127, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10701.2314453125, -1157.10107421875, 24.87251091003417968, 2.351024627685546875, 120, 0, 0, 2062, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(139128, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -10703.4609375, -1151.9708251953125, 25.09306907653808593, 2.971575021743774414, 120, 0, 0, 1782, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(139129, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -4692.6484375, -1228.8831787109375, 501.659271240234375, 4.224524497985839843, 120, 0, 0, 4050, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(139130, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -4694.72509765625, -1228.233154296875, 501.6593017578125, 5.137562274932861328, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(139131, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -6689.6044921875, -2199.64013671875, 249.043731689453125, 0.174532920122146606, 120, 0, 0, 3524, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(139132, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -8256.31640625, -2605.284423828125, 133.235626220703125, 4.258603572845458984, 120, 0, 0, 1585, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139133, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -8257.9580078125, -2609.8115234375, 133.249481201171875, 1.448623299598693847, 120, 0, 0, 3052, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139134, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -8264.7490234375, -2641.7578125, 133.6263885498046875, 2.216568231582641601, 120, 0, 0, 3834, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139135, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -8266.9189453125, -2639.165283203125, 134.0574493408203125, 5.235987663269042968, 120, 0, 0, 2961, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139136, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -8821.6669921875, 881.41400146484375, 98.79027557373046875, 3.996803998947143554, 120, 0, 0, 3941, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139137, 16781, 0, 0, 0, 0, 0, 1, 1, 0, -8825.2900390625, 876.76513671875, 98.821807861328125, 1.029744267463684082, 120, 0, 0, 3624, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139138, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 1006.48651123046875, -1442.0902099609375, 62.62816619873046875, 1.448623299598693847, 120, 0, 0, 2215, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139139, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 1007.09637451171875, -1435.5517578125, 63.42873764038085937, 4.642575740814208984, 120, 0, 0, 3524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139140, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 988.69769287109375, -1444.1343994140625, 63.6132659912109375, 1.29154360294342041, 120, 0, 0, 2062, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139141, 16781, 0, 0, 0, 0, 0, 1, 1, 0, 990.811767578125, -1439.3695068359375, 64.5729827880859375, 4.15388345718383789, 120, 0, 0, 2614, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139142, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -1000.00872802734375, 312.12152099609375, 135.8292694091796875, 3.385938644409179687, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139143, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -1005.61981201171875, 310.899322509765625, 135.8292694091796875, 0.191986218094825744, 120, 0, 0, 3524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139144, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -2333.6328125, -606.24383544921875, -8.55437660217285156, 3.543018341064453125, 120, 0, 0, 3331, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139145, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -2337.065185546875, -607.47906494140625, -8.18629264831542968, 0.122173048555850982, 120, 0, 0, 3624, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139146, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -2337.664794921875, -617.125244140625, -7.4183053970336914, 2.705260276794433593, 120, 0, 0, 1651, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139147, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -2341.706298828125, -614.60626220703125, -7.27002334594726562, 5.515240192413330078, 120, 0, 0, 3941, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139148, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -4397.759765625, 3463.2197265625, 11.22617053985595703, 4.834561824798583984, 120, 0, 0, 2215, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139149, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -4398.2509765625, 3458.70947265625, 11.29399967193603515, 2.216568231582641601, 120, 0, 0, 3624, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(139150, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -4412.48974609375, 3464.407470703125, 13.15926170349121093, 4.258603572845458984, 120, 0, 0, 1782, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139151, 16781, 0, 0, 1, 0, 0, 1, 1, 0, -4414.69677734375, 3461.673095703125, 13.22854804992675781, 1.448623299598693847, 120, 0, 0, 3728, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139152, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 6840.31201171875, -4555.98095703125, 710.2003173828125, 4.206243515014648437, 120, 0, 0, 2453, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139153, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 8696.9345703125, 937.32525634765625, 14.55591869354248046, 2.631667137145996093, 120, 0, 0, 2292, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139154, 16781, 0, 0, 1, 0, 0, 1, 1, 0, 8704.1767578125, 944.35198974609375, 13.64527416229248046, 3.877047538757324218, 120, 0, 0, 2292, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139155, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -2222.540283203125, -11890.4208984375, 27.97060394287109375, 4.258603572845458984, 120, 0, 0, 2533, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139156, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -2222.741455078125, -11892.71875, 27.48875808715820312, 1.448623299598693847, 120, 0, 0, 1585, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139157, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -2232.90185546875, -11917.44921875, 26.92511177062988281, 2.216568231582641601, 120, 0, 0, 1524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139158, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -2235.29931640625, -11914.263671875, 26.05220794677734375, 5.235987663269042968, 120, 0, 0, 1919, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139159, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -2506.72509765625, 7556.00244140625, -1.40493464469909667, 4.834561824798583984, 120, 0, 0, 3052, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139160, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -2507.036865234375, 7551.8447265625, -1.13188362121582031, 1.570796370506286621, 120, 0, 0, 2961, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139161, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -2507.24169921875, 7532.45166015625, 0.469488352537155151, 3.926990747451782226, 120, 0, 0, 1782, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139162, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -2510.171142578125, 7530.70751953125, 0.631805300712585449, 0.693436861038208007, 120, 0, 0, 3052, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139163, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -2989.25244140625, 4142.83447265625, 5.049828529357910156, 1.675516128540039062, 120, 0, 0, 4050, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139164, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -2989.418701171875, 4146.6103515625, 5.539825439453125, 4.694935798645019531, 120, 0, 0, 3524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139165, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -2997.968017578125, 4144.9990234375, 2.975908279418945312, 3.926990747451782226, 120, 0, 0, 3144, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139166, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -3001.250244140625, 4140.32958984375, 2.030464410781860351, 1.082104086875915527, 120, 0, 0, 4050, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139167, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -3049.09716796875, 2392.4052734375, 61.67646026611328125, 4.555309295654296875, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139168, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -3050.47119140625, 2388.159423828125, 62.44898223876953125, 1.274090290069580078, 120, 0, 0, 1848, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139169, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -3060.248046875, 2398.67724609375, 61.3582000732421875, 4.625122547149658203, 120, 0, 0, 2699, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139170, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -3060.8466796875, 2395.11376953125, 61.72652053833007812, 1.413716673851013183, 120, 0, 0, 2371, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139171, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -3793.38671875, -11495.5478515625, -134.705001831054687, 2.668026924133300781, 120, 0, 0, 1716, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(139172, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -3961.43408203125, 2055.026611328125, 95.148040771484375, 3.926990747451782226, 120, 0, 0, 2871, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139173, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -3963.264892578125, 2052.794677734375, 95.148040771484375, 1.082104086875915527, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139174, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -3969.27685546875, 2043.572021484375, 95.1483154296875, 2.216568231582641601, 120, 0, 0, 3941, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(139175, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -3970.262939453125, 2046.131103515625, 95.148162841796875, 4.834561824798583984, 120, 0, 0, 1651, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(139176, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -4210.650390625, -12301.302734375, 1.654789328575134277, 2.216568231582641601, 120, 0, 0, 3524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139177, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -4211.76025390625, -12330.4970703125, 3.183884143829345703, 4.258603572845458984, 120, 0, 0, 1585, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139178, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -4211.90673828125, -12297.8056640625, 1.91208040714263916, 5.235987663269042968, 120, 0, 0, 3425, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139179, 16781, 0, 0, 530, 0, 0, 1, 1, 0, -4212.716796875, -12333.73828125, 3.594502210617065429, 1.448623299598693847, 120, 0, 0, 2699, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139180, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 190.33062744140625, 5998.0126953125, 24.39078330993652343, 1.082104086875915527, 120, 0, 0, 2292, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139181, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 190.4051971435546875, 6007.1650390625, 24.1693115234375, 4.834561824798583984, 120, 0, 0, 1848, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139182, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 190.8719329833984375, 6004.16748046875, 24.28223800659179687, 2.216568231582641601, 120, 0, 0, 3624, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139183, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 191.632354736328125, 6000.23779296875, 24.4112701416015625, 3.926990747451782226, 120, 0, 0, 2138, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139184, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 2031.359375, 6601.51025390625, 136.8399200439453125, 1.448623299598693847, 120, 0, 0, 1919, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139185, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 2033.853759765625, 6604.1318359375, 137.4528961181640625, 4.258603572845458984, 120, 0, 0, 3425, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(139186, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 2041.9774169921875, 6575.76220703125, 134.592193603515625, 5.235987663269042968, 120, 0, 0, 1990, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139187, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 2044.85546875, 6572.400390625, 134.8233184814453125, 2.216568231582641601, 120, 0, 0, 1990, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139188, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 2263.68310546875, 6136.705078125, 137.2147064208984375, 4.258603572845458984, 120, 0, 0, 3052, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139189, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 2263.91064453125, 6132.2109375, 137.5455780029296875, 1.448623299598693847, 120, 0, 0, 2961, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139190, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 2293.89794921875, 6160.11328125, 135.8495330810546875, 5.235987663269042968, 120, 0, 0, 2453, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139191, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 2296.048828125, 6156.392578125, 135.0826263427734375, 2.216568231582641601, 120, 0, 0, 2871, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139192, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 2922.30517578125, 3666.272216796875, 145.1943511962890625, 1.448623299598693847, 120, 0, 0, 3052, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(139193, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 2923.46435546875, 3669.0126953125, 144.9244384765625, 4.258603572845458984, 120, 0, 0, 1716, 0, 0, 0, 0, 0, "", 50063, 0, NULL), +(139194, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 2926.392333984375, 3701.306396484375, 143.7755584716796875, 5.235987663269042968, 120, 0, 0, 3834, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139195, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 2928.210205078125, 3698.048095703125, 143.8076171875, 2.216568231582641601, 120, 0, 0, 2871, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139196, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 3109.265625, 3720.612060546875, 145.1728515625, 2.216568231582641601, 120, 0, 0, 1651, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139197, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 3109.507080078125, 3725.17578125, 145.2384033203125, 4.834561824798583984, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139198, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 3125.484375, 3725.59326171875, 142.5902862548828125, 1.082104086875915527, 120, 0, 0, 3524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139199, 16781, 0, 0, 530, 0, 0, 1, 1, 0, 3126.439453125, 3729.56982421875, 142.483184814453125, 3.926990747451782226, 120, 0, 0, 2961, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139200, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 2457.836669921875, -4903.42529296875, 263.61767578125, 1.082104086875915527, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139201, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 2459.67724609375, -4900.81787109375, 263.543304443359375, 3.926990747451782226, 120, 0, 0, 3237, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139202, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 2466.2978515625, -4906.74755859375, 264.084075927734375, 4.642575740814208984, 120, 0, 0, 2533, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139203, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 2466.573486328125, -4910.02197265625, 264.16815185546875, 1.754963874816894531, 120, 0, 0, 1585, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139204, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 2590.704345703125, -4352.7197265625, 275.87060546875, 5.672319889068603515, 120, 0, 0, 3728, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139205, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 2593.116455078125, -4354.75927734375, 275.85491943359375, 2.356194496154785156, 120, 0, 0, 3144, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139206, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 2604.65283203125, -4349.236328125, 275.7276611328125, 5.916666030883789062, 120, 0, 0, 2699, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139207, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 2607.03564453125, -4350.83544921875, 275.838623046875, 2.286381244659423828, 120, 0, 0, 2533, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139208, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 3363.32177734375, -2133.1533203125, 123.9278182983398437, 5.619960308074951171, 120, 0, 0, 2871, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139209, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 3366.183837890625, -2135.861083984375, 124.3294448852539062, 2.268928050994873046, 120, 0, 0, 1848, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139210, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 3378.244140625, -2139.7666015625, 124.9742355346679687, 5.026548385620117187, 120, 0, 0, 3834, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139211, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 3378.42333984375, -2144.294677734375, 124.8458480834960937, 1.326450228691101074, 120, 0, 0, 1848, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139212, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 3408.40185546875, -2885.163818359375, 201.1352081298828125, 1.082104086875915527, 120, 0, 0, 1990, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139213, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 3410.669677734375, -2882.25341796875, 201.108062744140625, 3.926990747451782226, 120, 0, 0, 3331, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139214, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 3420.4033203125, -2884.866455078125, 202.0738525390625, 1.780235767364501953, 120, 0, 0, 4050, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139215, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 3420.75830078125, -2881.11767578125, 202.3721466064453125, 4.642575740814208984, 120, 0, 0, 3728, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139216, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 3757.033447265625, 1491.1285400390625, 91.73284912109375, 5.8817596435546875, 120, 0, 0, 2138, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139217, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 3760.4296875, 1507.6015625, 89.87375640869140625, 6.0737457275390625, 120, 0, 0, 3728, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139218, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 3763.28955078125, 1506.70556640625, 89.33295440673828125, 3.368485450744628906, 120, 0, 0, 3728, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139219, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 3939.974853515625, -607.47686767578125, 241.8284759521484375, 4.834561824798583984, 120, 0, 0, 3834, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139220, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 3940.39892578125, -610.2362060546875, 242.02777099609375, 2.216568231582641601, 120, 0, 0, 3237, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139221, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 3946.244873046875, -625.32342529296875, 242.421844482421875, 0.715584993362426757, 120, 0, 0, 4050, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139222, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 3948.481689453125, -623.30615234375, 241.8450164794921875, 3.892084121704101562, 120, 0, 0, 2292, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139223, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 4146.4248046875, 5392.51806640625, 26.23081016540527343, 1.082104086875915527, 120, 0, 0, 3331, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139224, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 4147.98876953125, 5394.76806640625, 26.03989982604980468, 3.926990747451782226, 120, 0, 0, 2699, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139225, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 4152.33544921875, 5403.42138671875, 27.38189315795898437, 4.834561824798583984, 120, 0, 0, 1716, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139226, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 4152.42578125, 5400.58935546875, 26.6825408935546875, 2.216568231582641601, 120, 0, 0, 2699, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139227, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 4466.49462890625, 5615.1318359375, 57.21674728393554687, 5.8817596435546875, 120, 0, 0, 3834, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139228, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 4468.97412109375, 5614.6904296875, 57.5550384521484375, 3.019419670104980468, 120, 0, 0, 1782, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139229, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 4470.0087890625, 5623.4189453125, 58.90815353393554687, 6.0737457275390625, 120, 0, 0, 3524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139230, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 4472.21435546875, 5622.79443359375, 59.23351287841796875, 3.168313026428222656, 120, 0, 0, 2961, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139231, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5131.25927734375, -680.6533203125, 171.677764892578125, 4.932596206665039062, 120, 0, 0, 4050, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139232, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5131.77197265625, -683.32135009765625, 171.4430389404296875, 1.797689080238342285, 120, 0, 0, 2062, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139233, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5137.96728515625, -695.96380615234375, 172.0256195068359375, 0.663225114345550537, 120, 0, 0, 3052, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139234, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5139.6884765625, -694.12042236328125, 171.7145843505859375, 3.909537553787231445, 120, 0, 0, 2215, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139235, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5271.1572265625, -2791.30517578125, 292.501861572265625, 1.535889744758605957, 120, 0, 0, 3425, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139236, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5272.021484375, -2787.055908203125, 292.501861572265625, 4.328416347503662109, 120, 0, 0, 2614, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139237, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5285.443359375, -2773.591064453125, 292.501861572265625, 0.506145477294921875, 120, 0, 0, 3144, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139238, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5288.8515625, -2771.415283203125, 292.501861572265625, 3.592701911926269531, 120, 0, 0, 3941, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139239, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5353.1650390625, 4852.46630859375, -192.568603515625, 1.082104086875915527, 120, 0, 0, 1585, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139240, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5353.3818359375, 4867.77978515625, -189.798294067382812, 5.270894527435302734, 120, 0, 0, 1990, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139241, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5355.0615234375, 4864.12255859375, -190.967422485351562, 1.902408838272094726, 120, 0, 0, 2371, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139242, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5355.73486328125, 4854.8544921875, -193.244140625, 3.926990747451782226, 120, 0, 0, 2699, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139243, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5500.1689453125, 4885.63330078125, -198.4190673828125, 6.0737457275390625, 120, 0, 0, 3624, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139244, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5503.37353515625, 4884.96142578125, -198.343353271484375, 3.368485450744628906, 120, 0, 0, 3941, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139245, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5506.169921875, 4888.8203125, -197.933181762695312, 5.323254108428955078, 120, 0, 0, 2292, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139246, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5507.82861328125, 4886.794921875, -197.88641357421875, 2.356194496154785156, 120, 0, 0, 3524, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139247, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5523.92822265625, -717.83514404296875, 148.5211029052734375, 5.550356864929199218, 120, 0, 0, 2614, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139248, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5526.07470703125, -721.347412109375, 148.4966278076171875, 2.268928050994873046, 120, 0, 0, 2784, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139249, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5541.05859375, -729.351806640625, 150.0355682373046875, 4.921828269958496093, 120, 0, 0, 2699, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139250, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5541.20751953125, -732.760986328125, 149.995849609375, 1.500983119010925292, 120, 0, 0, 3728, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139251, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5611.73876953125, -2618.024658203125, 292.297149658203125, 1.082104086875915527, 120, 0, 0, 2215, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139252, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5613.908203125, -2616.232177734375, 292.2694091796875, 3.926990747451782226, 120, 0, 0, 1848, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139253, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5624.13525390625, -2621.2490234375, 292.501861572265625, 4.642575740814208984, 120, 0, 0, 3941, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139254, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 5624.1552734375, -2624.92578125, 292.501861572265625, 1.780235767364501953, 120, 0, 0, 1990, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139255, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 6074.1826171875, -1115.936279296875, 420.4525146484375, 0.139626339077949523, 120, 0, 0, 1782, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139256, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 6078.80322265625, -1115.361083984375, 420.3092041015625, 3.246312379837036132, 120, 0, 0, 1782, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139257, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 6089.47705078125, -1116.2974853515625, 419.81597900390625, 0.663225114345550537, 120, 0, 0, 3237, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139258, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 6092.06591796875, -1114.0496826171875, 419.058319091796875, 3.909537553787231445, 120, 0, 0, 1848, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139259, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 6151.4912109375, -1032.8651123046875, 409.3367919921875, 4.921828269958496093, 120, 0, 0, 3834, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139260, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 6151.6396484375, -1035.900634765625, 409.4896240234375, 1.500983119010925292, 120, 0, 0, 3237, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139261, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 6157.4091796875, -1023.6146240234375, 408.467071533203125, 5.619960308074951171, 120, 0, 0, 2138, 0, 0, 0, 0, 0, "", 50172, 0, NULL), +(139262, 16781, 0, 0, 571, 0, 0, 1, 1, 0, 6159.4375, -1025.43212890625, 408.73101806640625, 2.268928050994873046, 120, 0, 0, 3941, 0, 0, 0, 0, 0, "", 50172, 0, NULL); + +UPDATE `creature` SET `CreateObject` = 1 WHERE `id1` = 16781 AND `guid` BETWEEN 139127 AND 139262; + +DELETE FROM `game_event_creature` WHERE `eventEntry` = 1 AND `guid` BETWEEN 139127 AND 139262; +INSERT INTO `game_event_creature` (`eventEntry`,`guid`) VALUES +(1, 139127), +(1, 139128), +(1, 139129), +(1, 139130), +(1, 139131), +(1, 139132), +(1, 139133), +(1, 139134), +(1, 139135), +(1, 139136), +(1, 139137), +(1, 139138), +(1, 139139), +(1, 139140), +(1, 139141), +(1, 139142), +(1, 139143), +(1, 139144), +(1, 139145), +(1, 139146), +(1, 139147), +(1, 139148), +(1, 139149), +(1, 139150), +(1, 139151), +(1, 139152), +(1, 139153), +(1, 139154), +(1, 139155), +(1, 139156), +(1, 139157), +(1, 139158), +(1, 139159), +(1, 139160), +(1, 139161), +(1, 139162), +(1, 139163), +(1, 139164), +(1, 139165), +(1, 139166), +(1, 139167), +(1, 139168), +(1, 139169), +(1, 139170), +(1, 139171), +(1, 139172), +(1, 139173), +(1, 139174), +(1, 139175), +(1, 139176), +(1, 139177), +(1, 139178), +(1, 139179), +(1, 139180), +(1, 139181), +(1, 139182), +(1, 139183), +(1, 139184), +(1, 139185), +(1, 139186), +(1, 139187), +(1, 139188), +(1, 139189), +(1, 139190), +(1, 139191), +(1, 139192), +(1, 139193), +(1, 139194), +(1, 139195), +(1, 139196), +(1, 139197), +(1, 139198), +(1, 139199), +(1, 139200), +(1, 139201), +(1, 139202), +(1, 139203), +(1, 139204), +(1, 139205), +(1, 139206), +(1, 139207), +(1, 139208), +(1, 139209), +(1, 139210), +(1, 139211), +(1, 139212), +(1, 139213), +(1, 139214), +(1, 139215), +(1, 139216), +(1, 139217), +(1, 139218), +(1, 139219), +(1, 139220), +(1, 139221), +(1, 139222), +(1, 139223), +(1, 139224), +(1, 139225), +(1, 139226), +(1, 139227), +(1, 139228), +(1, 139229), +(1, 139230), +(1, 139231), +(1, 139232), +(1, 139233), +(1, 139234), +(1, 139235), +(1, 139236), +(1, 139237), +(1, 139238), +(1, 139239), +(1, 139240), +(1, 139241), +(1, 139242), +(1, 139243), +(1, 139244), +(1, 139245), +(1, 139246), +(1, 139247), +(1, 139248), +(1, 139249), +(1, 139250), +(1, 139251), +(1, 139252), +(1, 139253), +(1, 139254), +(1, 139255), +(1, 139256), +(1, 139257), +(1, 139258), +(1, 139259), +(1, 139260), +(1, 139261), +(1, 139262); diff --git a/docker-compose.yml b/docker-compose.yml index 4624cb2c88c190..6e6d59cbddab4b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,57 +1,17 @@ -version: '3.9' - -# extension field: https://docs.docker.com/compose/compose-file/compose-file-v3/#extension-fields -x-networks: &networks - networks: - - ac-network - -x-build-params: &build-params - context: . - dockerfile: ./apps/docker/Dockerfile - args: - USER_ID: ${DOCKER_USER_ID:-1000} - GROUP_ID: ${DOCKER_GROUP_ID:-1000} - DOCKER_USER: ${DOCKER_USER:-acore} - # BUILDKIT_INLINE_CACHE: 1 - cache_from: - - acore/ac-wotlk-authserver:${DOCKER_IMAGE_TAG:-master} - - acore/ac-wotlk-authserver-local:${DOCKER_IMAGE_TAG:-master} - - acore/ac-wotlk-worldserver:${DOCKER_IMAGE_TAG:-master} - - acore/ac-wotlk-worldserver-local:${DOCKER_IMAGE_TAG:-master} - - acore/ac-wotlk-dev-server:${DOCKER_IMAGE_TAG:-master} - - acore/ac-wotlk-tools:${DOCKER_IMAGE_TAG:-master} - # Need to fix reduced space on GH actions first - # - acore/ac-wotlk-client-data:${DOCKER_IMAGE_TAG:-master} - -x-ac-shared-conf: &ac-shared-conf - <<: *networks - working_dir: /azerothcore - environment: - AC_DISABLE_INTERACTIVE: "1" - -x-ac-service-conf: &ac-service-conf - <<: *ac-shared-conf - # List can't be merged. See: https://forums.docker.com/t/how-to-merge-a-list-of-volumes-from-an-extension-field-into-the-service-definition/77454 - # volumes: - # - ${DOCKER_VOL_ETC:-./env/dist/etc}:/azerothcore/env/dist/etc - # # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 - # - ${DOCKER_VOL_LOGS:-./env/dist/logs}:/azerothcore/env/dist/logs:delegated - - -services: -#======================= +# docker-compose.yml for AzerothCore. # -# DATABASE +# Start the server with `docker compose up -d --build` # -#======================= - +# Don't make changes this file! make a `docker-compose.override.yml` and make your +# changes there instead. +version: '3' +services: ac-database: - <<: *networks + container_name: ac-database image: mysql:8.0 - restart: unless-stopped - cap_add: - - SYS_NICE # CAP_SYS_NICE + networks: + - ac-network ports: - ${DOCKER_DB_EXTERNAL_PORT:-3306}:3306 environment: @@ -60,123 +20,47 @@ services: - type: volume source: ac-database target: /var/lib/mysql + restart: unless-stopped healthcheck: test: "/usr/bin/mysql --user=root --password=$$MYSQL_ROOT_PASSWORD --execute \"SHOW DATABASES;\"" interval: 5s timeout: 10s retries: 40 -#====================== -# -# Dev services -# -#====================== - - # - # Used for the build process to avoid the host binding of the /azerothcore - # and speedup the compilation by avoiding the host-container filesystem conversion issue - # on non-ext filesystems. Reference https://stackoverflow.com/a/63437557/1964544 - # - ac-dev-build: - <<: [ *ac-shared-conf ] # merge with - image: acore/ac-wotlk-dev-server:${DOCKER_IMAGE_TAG:-master} - user: ${DOCKER_USER:-root} - cap_add: - - SYS_NICE # CAP_SYS_NICE - build: - target: dev - <<: *build-params - security_opt: - - seccomp:unconfined - env_file: - ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - volumes: - # expose some dist folder outside allowing the host to use them - - ${DOCKER_VOL_CONF:-./conf}:/azerothcore/conf - - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin - - ${DOCKER_VOL_ETC:-./env/dist/etc}:/azerothcore/env/dist/etc - - ac-build-dev:/azerothcore/var/build - - ac-ccache-dev:/azerothcore/var/ccache - profiles: [dev-build] - - # - # Dev server with the ./azerothcore folder binded from the host - # Please use Linux, WSL2 or any ext-compatible filesystem - # to avoid performance issues - # - ac-dev-server: - <<: [ *ac-shared-conf ] # merge with - tty: true - image: acore/ac-wotlk-dev-server:${DOCKER_IMAGE_TAG:-master} - user: ${DOCKER_USER:-root} - cap_add: - - SYS_NICE # CAP_SYS_NICE - build: - target: dev - <<: *build-params - security_opt: - - seccomp:unconfined - env_file: - ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - environment: - AC_DATA_DIR: "/azerothcore/env/dist/data" - AC_LOGS_DIR: "/azerothcore/env/dist/logs" - AC_LOGIN_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_auth" - AC_WORLD_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_world" - AC_CHARACTER_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_characters" - AC_CLOSE_IDLE_CONNECTIONS: "0" - ports: - - ${DOCKER_AUTH_EXTERNAL_PORT:-3724}:3724 - - ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085 - - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878 - volumes: - - ${DOCKER_VOL_ROOT:-.}:/azerothcore:cached - # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 - - ac-build-dev:/azerothcore/var/build - - ac-ccache-dev:/azerothcore/var/ccache - # this is not the directory of the extracted data! It's the client folder used by the extractors - - ${DOCKER_AC_CLIENT_FOLDER:-./var/client}:/azerothcore/env/dist/bin/Data - profiles: [dev] - depends_on: - ac-database: - condition: service_healthy - ac-db-import: - <<: *ac-shared-conf - image: acore/ac-wotlk-worldserver-local:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally - command: ./env/dist/bin/dbimport + container_name: ac-db-import + image: acore/ac-wotlk-db-import:${DOCKER_IMAGE_TAG:-master} + networks: + - ac-network + build: + context: . + target: db-import + dockerfile: apps/docker/Dockerfile environment: AC_DATA_DIR: "/azerothcore/env/dist/data" AC_LOGS_DIR: "/azerothcore/env/dist/logs" AC_LOGIN_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_auth" AC_WORLD_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_world" AC_CHARACTER_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_characters" - AC_CLOSE_IDLE_CONNECTIONS: "0" volumes: - # read-only binaries compiled by ac-dev-server - - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin:ro - - ${DOCKER_VOL_ETC:-./env/dist/etc}:/azerothcore/env/dist/etc:ro + - ${DOCKER_VOL_ETC:-./env/dist/etc}:/azerothcore/env/dist/etc # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 - ${DOCKER_VOL_LOGS:-./env/dist/logs}:/azerothcore/env/dist/logs:delegated - profiles: [local, app, db-import-local] depends_on: ac-database: condition: service_healthy -#======================= -# -# APP Services -# -#======================= - ac-worldserver: - <<: *ac-service-conf # merge with ac-service-conf + container_name: ac-worldserver + image: acore/ac-wotlk-worldserver:${DOCKER_IMAGE_TAG:-master} + build: + context: . + target: worldserver + dockerfile: apps/docker/Dockerfile + networks: + - ac-network stdin_open: true tty: true - cap_add: - - SYS_NICE # CAP_SYS_NICE - command: ./acore.sh run-worldserver - image: acore/ac-wotlk-worldserver-local:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally restart: unless-stopped env_file: ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} @@ -186,35 +70,33 @@ services: AC_LOGIN_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_auth" AC_WORLD_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_world" AC_CHARACTER_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_characters" - AC_CLOSE_IDLE_CONNECTIONS: "0" - user: ${DOCKER_USER:-root} - privileged: true - build: - target: worldserver-local - <<: *build-params ports: - ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085 - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878 volumes: - # read-only binaries compiled by ac-dev-server - - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin:ro - - ${DOCKER_VOL_ETC:-./env/dist/etc}:/azerothcore/env/dist/etc:ro + - ${DOCKER_VOL_ETC:-./env/dist/etc}:/azerothcore/env/dist/etc # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 - ${DOCKER_VOL_LOGS:-./env/dist/logs}:/azerothcore/env/dist/logs:delegated # client data - - ${DOCKER_VOL_DATA:-./env/dist/data/}:/azerothcore/env/dist/data/ - profiles: [local, app, worldserver] + - ${DOCKER_VOL_DATA:-ac-client-data}:/azerothcore/env/dist/data/:ro depends_on: ac-database: condition: service_healthy ac-db-import: condition: service_completed_successfully + ac-client-data-init: + condition: service_completed_successfully ac-authserver: - <<: *ac-service-conf # merge with ac-service-conf + container_name: ac-authserver + image: acore/ac-wotlk-authserver:${DOCKER_IMAGE_TAG:-master} + build: + context: . + target: authserver + dockerfile: apps/docker/Dockerfile + networks: + - ac-network tty: true - command: ./acore.sh run-authserver - image: acore/ac-wotlk-authserver-local:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally restart: unless-stopped env_file: ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} @@ -222,199 +104,101 @@ services: AC_LOGS_DIR: "/azerothcore/env/dist/logs" AC_TEMP_DIR: "/azerothcore/env/dist/temp" AC_LOGIN_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_auth" - AC_SQLDRIVER_LOG_FILE: "SQLDriver.log" - AC_SQLDRIVER_QUERY_LOGGING: "1" - user: ${DOCKER_USER:-root} - build: - target: authserver-local - <<: *build-params volumes: - # read-only binaries compiled by ac-dev-server - - ${DOCKER_VOL_BIN:-ac-bin-dev}:/azerothcore/env/dist/bin:ro - ${DOCKER_VOL_ETC:-./env/dist/etc}:/azerothcore/env/dist/etc # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 - ${DOCKER_VOL_LOGS:-./env/dist/logs}:/azerothcore/env/dist/logs:delegated ports: - ${DOCKER_AUTH_EXTERNAL_PORT:-3724}:3724 - profiles: [local, app, authserver] depends_on: ac-database: condition: service_healthy ac-db-import: condition: service_completed_successfully -#====================== -# -# Production services -# -# The following services are used to test the production images -# Do not use them unless you know what you're doing! -# We do not offer support for them -# -# For a production-ready docker-compose, please check the official repo: https://github.com/azerothcore/acore-docker -# -#====================== - - ac-database-prod: - <<: *networks - image: mysql:8.0 - restart: unless-stopped - cap_add: - - SYS_NICE # CAP_SYS_NICE - ports: - - ${DOCKER_DB_EXTERNAL_PORT:-3306}:3306 - environment: - - MYSQL_ROOT_PASSWORD=${DOCKER_DB_ROOT_PASSWORD:-password} - volumes: - - type: volume - source: ac-database-prod - target: /var/lib/mysql - healthcheck: - test: "/usr/bin/mysql --user=root --password=$$MYSQL_ROOT_PASSWORD --execute \"SHOW DATABASES;\"" - interval: 5s - timeout: 10s - retries: 40 - profiles: [prod] - - ac-worldserver-prod: - <<: *ac-service-conf # merge with ac-service-conf - stdin_open: true - tty: true - cap_add: - - SYS_NICE # CAP_SYS_NICE - command: ./acore.sh run-worldserver - image: acore/ac-wotlk-worldserver:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally - restart: unless-stopped - env_file: - ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - environment: - AC_DATA_DIR: "/azerothcore/env/dist/data" - AC_LOGS_DIR: "/azerothcore/env/dist/logs" - AC_LOGIN_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_auth" - AC_WORLD_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_world" - AC_CHARACTER_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_characters" - AC_CLOSE_IDLE_CONNECTIONS: "0" - user: ${DOCKER_USER:-root} - privileged: true - build: - target: worldserver - <<: *build-params - ports: - - ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085 - - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878 - volumes: - - ${DOCKER_VOL_LOGS:-./env/dist/logs}:/azerothcore/env/dist/logs:delegated - - ${DOCKER_VOL_CLIENT_DATA_PROD:-ac-client-data-prod}:/azerothcore/env/dist/data:ro - profiles: [prod, prod-app, prod-worldserver] - depends_on: - ac-database-prod: - condition: service_healthy - ac-db-import-prod: - condition: service_completed_successfully - ac-client-data-init: - condition: service_started - - ac-authserver-prod: - <<: *ac-service-conf # merge with ac-service-conf - tty: true - command: ./acore.sh run-authserver - image: acore/ac-wotlk-authserver:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally - restart: unless-stopped - env_file: - ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - environment: - AC_LOGS_DIR: "/azerothcore/env/dist/logs" - AC_TEMP_DIR: "/azerothcore/env/dist/temp" - AC_LOGIN_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_auth" - AC_SQLDRIVER_LOG_FILE: "SQLDriver.log" - AC_SQLDRIVER_QUERY_LOGGING: "1" - user: ${DOCKER_USER:-root} - build: - target: authserver - <<: *build-params - volumes: - - ${DOCKER_VOL_LOGS:-./env/dist/logs}:/azerothcore/env/dist/logs:delegated - ports: - - ${DOCKER_AUTH_EXTERNAL_PORT:-3724}:3724 - profiles: [prod, prod-app, prod-authserver] - depends_on: - ac-database-prod: - condition: service_healthy - ac-db-import-prod: - condition: service_completed_successfully - ac-client-data-init: - image: acore/ac-wotlk-client-data:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally + container_name: ac-client-data-init + image: acore/ac-wotlk-client-data:${DOCKER_IMAGE_TAG:-master} user: ${DOCKER_USER:-root} build: + context: . target: client-data - <<: *build-params + dockerfile: apps/docker/Dockerfile args: USER_ID: ${DOCKER_USER_ID:-1000} GROUP_ID: ${DOCKER_GROUP_ID:-1000} DOCKER_USER: ${DOCKER_USER:-acore} - # BUILDKIT_INLINE_CACHE: 1 volumes: - - ${DOCKER_VOL_CLIENT_DATA_PROD:-ac-client-data-prod}:/azerothcore/env/dist/data:ro - profiles: [prod, prod-app, clientdata] + - ${DOCKER_VOL_CLIENT_DATA:-ac-client-data}:/azerothcore/env/dist/data + # used for extracting maps from files shipped with game client + # Most of the time this shouldn't be needed ac-tools: - image: acore/ac-wotlk-tools:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally + container_name: ac-tools + image: acore/ac-wotlk-tools:${DOCKER_IMAGE_TAG:-master} user: ${DOCKER_USER:-root} build: + context: . target: tools - <<: *build-params + dockerfile: apps/docker/Dockerfile working_dir: /azerothcore/env/client/ volumes: # this is not the directory of the extracted data! It's the client folder used by the extractors - ${DOCKER_AC_CLIENT_FOLDER:-./var/client}:/azerothcore/env/dist/bin/Data - profiles: [prod, tools] + # Activate with `docker compose --profile tools ...` + profiles: [tools] - ac-db-import-prod: - <<: *ac-shared-conf - image: acore/ac-wotlk-worldserver:${DOCKER_IMAGE_TAG:-master} # name of the generated image after built locally - command: ./env/dist/bin/dbimport + # Dev server with the ./azerothcore folder binded from the host + # Please use Linux, WSL2 or any ext-compatible filesystem + # to avoid performance issues + # + # This is primarily intended for use with the "devcontainer" project + # + # This is provided primarily for development, though it doesn't receive + # first-class support + ac-dev-server: + tty: true + image: acore/ac-wotlk-dev-server:${DOCKER_IMAGE_TAG:-master} + user: ${DOCKER_USER:-root} + build: + context: . + dockerfile: ./apps/docker/Dockerfile.dev-server + args: + USER_ID: ${DOCKER_USER_ID:-1000} + GROUP_ID: ${DOCKER_GROUP_ID:-1000} + DOCKER_USER: ${DOCKER_USER:-acore} + target: dev + env_file: + ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} environment: AC_DATA_DIR: "/azerothcore/env/dist/data" AC_LOGS_DIR: "/azerothcore/env/dist/logs" AC_LOGIN_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_auth" AC_WORLD_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_world" AC_CHARACTER_DATABASE_INFO: "ac-database;3306;root;${DOCKER_DB_ROOT_PASSWORD:-password};acore_characters" - AC_CLOSE_IDLE_CONNECTIONS: "0" - profiles: [prod, prod-app, db-import-prod] - - # - # Only for internal tests - # - ac-build-prod: - <<: *ac-shared-conf - build: - target: build - <<: *build-params - env_file: - ${DOCKER_AC_ENV_FILE:-conf/dist/env.ac} - working_dir: /azerothcore/ - profiles: [prod-build] + ports: + - ${DOCKER_AUTH_EXTERNAL_PORT:-3724}:3724 + - ${DOCKER_WORLD_EXTERNAL_PORT:-8085}:8085 + - ${DOCKER_SOAP_EXTERNAL_PORT:-7878}:7878 + volumes: + - ${DOCKER_VOL_ROOT:-.}:/azerothcore:cached + # [osxfs optimization]: https://stackoverflow.com/a/63437557/1964544 + - ac-build-dev:/azerothcore/var/build + - ac-ccache-dev:/azerothcore/var/ccache + # this is not the directory of the extracted data! It's the client folder used by the extractors + - ${DOCKER_AC_CLIENT_FOLDER:-./var/client}:/azerothcore/env/dist/bin/Data + # Activate with `docker compose --profile dev ...` + profiles: [dev] + depends_on: + ac-database: + condition: service_healthy volumes: ac-database: - ac-database-prod: - ac-bin-dev: + ac-client-data: + # Used for dev server ac-build-dev: ac-ccache-dev: - ac-proj: - ac-client-data-prod: - # not used, but you can use them by setting - # the DOCKER_VOL_* env variabiles - ac-root: - ac-conf: - ac-etc: - ac-logs: - ac-client-data-cameras: - ac-client-data-dbc: - ac-client-data-maps: - ac-client-data-vmaps: - ac-client-data-mmaps: networks: ac-network: diff --git a/src/server/apps/worldserver/worldserver.conf.dist b/src/server/apps/worldserver/worldserver.conf.dist index 83bad2454e7ff0..12d00d866ac567 100644 --- a/src/server/apps/worldserver/worldserver.conf.dist +++ b/src/server/apps/worldserver/worldserver.conf.dist @@ -1374,17 +1374,6 @@ DetectPosCollision = 1 CheckGameObjectLoS = 1 -# -# TargetPosRecalculateRange -# Description: Max distance from movement target point (+moving unit size) and targeted -# object (+size) after that new target movement point calculated. -# Range: 0.5-5.0 -# Default: 1.5 -# 0.5 - (Minimum, Contact Range, More sensitive reaction to target movement) -# 5.0 - (Maximum, Melee attack range, Less CPU usage) - -TargetPosRecalculateRange = 1.5 - # # PreloadAllNonInstancedMapGrids # Description: Preload all grids on all non-instanced maps. This will take a great amount diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp index fc8212b0cd22ea..7369277d59319e 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp @@ -200,7 +200,6 @@ void npc_escortAI::ReturnToLastPoint() void npc_escortAI::EnterEvadeMode(EvadeReason /*why*/) { - me->RemoveAllAuras(); me->GetThreatMgr().ClearAllThreat(); me->CombatStop(true); me->SetLootRecipient(nullptr); diff --git a/src/server/game/Battlegrounds/Arena.cpp b/src/server/game/Battlegrounds/Arena.cpp index bfc27f00d19783..1c4a873d583baf 100644 --- a/src/server/game/Battlegrounds/Arena.cpp +++ b/src/server/game/Battlegrounds/Arena.cpp @@ -242,6 +242,7 @@ void Arena::EndBattleground(TeamId winnerTeamId) uint8 memberId = 0; for (auto const& [playerGuid, arenaLogEntryData] : ArenaLogEntries) { + auto const& score = PlayerScores.find(playerGuid.GetCounter()); stmt2 = CharacterDatabase.GetPreparedStatement(CHAR_INS_ARENA_LOG_MEMBERSTATS); stmt2->SetData(0, fightId); stmt2->SetData(1, ++memberId); @@ -250,9 +251,18 @@ void Arena::EndBattleground(TeamId winnerTeamId) stmt2->SetData(4, arenaLogEntryData.ArenaTeamId); stmt2->SetData(5, arenaLogEntryData.Acc); stmt2->SetData(6, arenaLogEntryData.IP); - stmt2->SetData(7, arenaLogEntryData.DamageDone); - stmt2->SetData(8, arenaLogEntryData.HealingDone); - stmt2->SetData(9, arenaLogEntryData.KillingBlows); + if (score != PlayerScores.end()) + { + stmt2->SetData(7, score->second->GetDamageDone()); + stmt2->SetData(8, score->second->GetHealingDone()); + stmt2->SetData(9, score->second->GetKillingBlows()); + } + else + { + stmt2->SetData(7, 0); + stmt2->SetData(8, 0); + stmt2->SetData(9, 0); + } trans->Append(stmt2); } diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h index 8c541f60561386..c221244c64b764 100644 --- a/src/server/game/Battlegrounds/Battleground.h +++ b/src/server/game/Battlegrounds/Battleground.h @@ -274,9 +274,6 @@ class ArenaLogEntryData uint32 Acc{0}; uint32 ArenaTeamId{0}; std::string IP{}; - uint32 DamageDone{0}; - uint32 HealingDone{0}; - uint32 KillingBlows{0}; }; enum BGHonorMode diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 18c282ce8cd89d..4d5cfed2e6a2d6 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -336,8 +336,22 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) } case CONDITION_NEAR_GAMEOBJECT: { - condMeets = static_cast(GetClosestGameObjectWithEntry(object, ConditionValue1, static_cast(ConditionValue2))); - break; + if (!ConditionValue3) + { + condMeets = static_cast(GetClosestGameObjectWithEntry(object, ConditionValue1, static_cast(ConditionValue2))); + break; + } + else + { + if (GameObject* go = GetClosestGameObjectWithEntry(object, ConditionValue1, static_cast(ConditionValue2))) + { + if ((go->GetGoState() == GO_STATE_READY && ConditionValue3 == 1) || (go->GetGoState() != GO_STATE_READY && ConditionValue3 == 2)) + condMeets = true; + else + condMeets = false; + } + break; + } } case CONDITION_OBJECT_ENTRY_GUID: { @@ -2171,8 +2185,8 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) LOG_ERROR("sql.sql", "NearGameObject condition has non existing gameobject template entry ({}), skipped", cond->ConditionValue1); return false; } - if (cond->ConditionValue3) - LOG_ERROR("sql.sql", "NearGameObject condition has useless data in value3 ({})!", cond->ConditionValue3); + if (cond->ConditionValue3 > 2) + LOG_ERROR("sql.sql", "NearGameObject condition for gameobject ID ({}) has data over 2 for value3 ({})!", cond->ConditionValue1, cond->ConditionValue3); break; } case CONDITION_OBJECT_ENTRY_GUID: diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 185a5e1bdafcda..9f963a96fddd2c 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -62,7 +62,7 @@ enum ConditionTypes CONDITION_LEVEL = 27, // level ComparisonType 0 true if unit's level is equal to param1 (param2 can modify the statement) CONDITION_QUEST_COMPLETE = 28, // quest_id 0 0 true if player has quest_id with all objectives complete, but not yet rewarded CONDITION_NEAR_CREATURE = 29, // creature entry distance dead true if there is a creature of entry in range - CONDITION_NEAR_GAMEOBJECT = 30, // gameobject entry distance 0 true if there is a gameobject of entry in range + CONDITION_NEAR_GAMEOBJECT = 30, // gameobject entry distance GoState true if there is a gameobject of entry in range (param3 can check for GoState, 0 = dont't check, 1 = Ready , 2 = Not Ready) CONDITION_OBJECT_ENTRY_GUID = 31, // TypeID entry guid/Attackable true if object is type TypeID and the entry is 0 or matches entry of the object or matches guid of the object CONDITION_TYPE_MASK = 32, // TypeMask 0 0 true if object is type object's TypeMask matches provided TypeMask CONDITION_RELATION_TO = 33, // ConditionTarget RelationType 0 true if object is in given relation with object specified by ConditionTarget diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index f62d0aaa91f380..c525c30ad57c0d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4754,7 +4754,7 @@ void Player::DurabilityLossAll(double percent, bool inventory) void Player::DurabilityLoss(Item* item, double percent) { - if(!item) + if(!item || percent == 0.0) return; uint32 pMaxDurability = item ->GetUInt32Value(ITEM_FIELD_MAXDURABILITY); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index cc8d21746fa2bc..d667402629804e 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -381,8 +381,8 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS] = AuraEffect::AuraEffect(Aura* base, uint8 effIndex, int32* baseAmount, Unit* caster): m_base(base), m_spellInfo(base->GetSpellInfo()), - m_baseAmount(baseAmount ? * baseAmount : m_spellInfo->Effects[effIndex].BasePoints), m_critChance(0), - m_oldAmount(0), m_isAuraEnabled(true), m_channelData(nullptr), m_spellmod(nullptr), m_periodicTimer(0), m_tickNumber(0), m_effIndex(effIndex), + m_baseAmount(baseAmount ? * baseAmount : m_spellInfo->Effects[effIndex].BasePoints), m_dieSides(m_spellInfo->Effects[effIndex].DieSides), + m_critChance(0), m_oldAmount(0), m_isAuraEnabled(true), m_channelData(nullptr), m_spellmod(nullptr), m_periodicTimer(0), m_tickNumber(0), m_effIndex(effIndex), m_canBeRecalculated(true), m_isPeriodic(false) { CalculatePeriodic(caster, true, false); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index b85984341aa104..6f0c05a27c3be1 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -55,6 +55,7 @@ class AuraEffect uint32 GetId() const; uint32 GetEffIndex() const { return m_effIndex; } int32 GetBaseAmount() const { return m_baseAmount; } + int32 GetDieSides() const { return m_dieSides; } int32 GetAmplitude() const { return m_amplitude; } int32 GetMiscValueB() const; @@ -121,6 +122,7 @@ class AuraEffect SpellInfo const* const m_spellInfo; int32 const m_baseAmount; + int32 const m_dieSides; bool m_applyResilience; uint8 m_casterLevel; diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 6aad283ceb4a1f..5ac2b0ec967d7b 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -6288,8 +6288,11 @@ void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const* Position pos; // xinef: do not use precalculated position for effect summon pet in this function - // it means it was cast by NPC and should have its position overridden - if (totalNumGuardians == 1 && GetSpellInfo()->Effects[i].Effect != SPELL_EFFECT_SUMMON_PET) + // it means it was cast by NPC and should have its position overridden unless the + // target position is specified in the DB AND the effect has no or zero radius + if ((totalNumGuardians == 1 && GetSpellInfo()->Effects[i].Effect != SPELL_EFFECT_SUMMON_PET) || + (GetSpellInfo()->Effects[i].TargetA.GetTarget() == TARGET_DEST_DB && + (!GetSpellInfo()->Effects[i].HasRadius() || GetSpellInfo()->Effects[i].RadiusEntry->RadiusMax == 0))) { pos = *destTarget; } diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp index 406314fb485973..be1fd36945228b 100644 --- a/src/server/game/Spells/SpellInfoCorrections.cpp +++ b/src/server/game/Spells/SpellInfoCorrections.cpp @@ -478,7 +478,7 @@ void SpellMgr::LoadSpellInfoCorrections() // Marked for Death ApplySpellFix({ 53241, 53243, 53244, 53245, 53246 }, [](SpellInfo* spellInfo) { - spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(423937, 276955137, 2049); + spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(399361, 276955137, 1); }); ApplySpellFix({ @@ -4640,6 +4640,12 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->ChannelInterruptFlags |= AURA_INTERRUPT_FLAG_MOVE; }); + // Holiday - Midsummer, Ribbon Pole Periodic Visual + ApplySpellFix({ 45406 }, [](SpellInfo* spellInfo) + { + spellInfo->AuraInterruptFlags |= ( AURA_INTERRUPT_FLAG_MOUNT | AURA_INTERRUPT_FLAG_CAST ); + }); + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { SpellInfo* spellInfo = mSpellInfoMap[i]; diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index addd4069f0c6ce..f2ed3289b5e45b 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -506,7 +506,6 @@ enum Rates RATE_TALENT, RATE_CORPSE_DECAY_LOOTED, RATE_INSTANCE_RESET_TIME, - RATE_TARGET_POS_RECALCULATION_RANGE, RATE_DURABILITY_LOSS_ON_DEATH, RATE_DURABILITY_LOSS_DAMAGE, RATE_DURABILITY_LOSS_PARRY, diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index dff5f5a9155ee2..f41e523b890614 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -586,18 +586,6 @@ void World::LoadConfigSettings(bool reload) for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) playerBaseMoveSpeed[i] = baseMoveSpeed[i] * _rate_values[RATE_MOVESPEED]; _rate_values[RATE_CORPSE_DECAY_LOOTED] = sConfigMgr->GetOption("Rate.Corpse.Decay.Looted", 0.5f); - _rate_values[RATE_TARGET_POS_RECALCULATION_RANGE] = sConfigMgr->GetOption("TargetPosRecalculateRange", 1.5f); - if (_rate_values[RATE_TARGET_POS_RECALCULATION_RANGE] < CONTACT_DISTANCE) - { - LOG_ERROR("server.loading", "TargetPosRecalculateRange ({}) must be >= {}. Using {} instead.", _rate_values[RATE_TARGET_POS_RECALCULATION_RANGE], CONTACT_DISTANCE, CONTACT_DISTANCE); - _rate_values[RATE_TARGET_POS_RECALCULATION_RANGE] = CONTACT_DISTANCE; - } - else if (_rate_values[RATE_TARGET_POS_RECALCULATION_RANGE] > NOMINAL_MELEE_RANGE) - { - LOG_ERROR("server.loading", "TargetPosRecalculateRange ({}) must be <= {}. Using {} instead.", _rate_values[RATE_TARGET_POS_RECALCULATION_RANGE], NOMINAL_MELEE_RANGE, NOMINAL_MELEE_RANGE); - _rate_values[RATE_TARGET_POS_RECALCULATION_RANGE] = NOMINAL_MELEE_RANGE; - } - _rate_values[RATE_DURABILITY_LOSS_ON_DEATH] = sConfigMgr->GetOption("DurabilityLoss.OnDeath", 10.0f); if (_rate_values[RATE_DURABILITY_LOSS_ON_DEATH] < 0.0f) { diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp index b5f40ba1001ea8..0eb15e7d16544e 100644 --- a/src/server/scripts/Commands/cs_guild.cpp +++ b/src/server/scripts/Commands/cs_guild.cpp @@ -25,13 +25,8 @@ EndScriptData */ #include "Chat.h" #include "Guild.h" #include "GuildMgr.h" -#include "Language.h" #include "ScriptMgr.h" -#if AC_COMPILER == AC_COMPILER_GNU -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - using namespace Acore::ChatCommands; class guild_commandscript : public CommandScript @@ -43,50 +38,38 @@ class guild_commandscript : public CommandScript { static ChatCommandTable guildCommandTable = { - { "create", SEC_GAMEMASTER, true, &HandleGuildCreateCommand, "" }, - { "delete", SEC_GAMEMASTER, true, &HandleGuildDeleteCommand, "" }, - { "invite", SEC_GAMEMASTER, true, &HandleGuildInviteCommand, "" }, - { "uninvite", SEC_GAMEMASTER, true, &HandleGuildUninviteCommand, "" }, - { "rank", SEC_GAMEMASTER, true, &HandleGuildRankCommand, "" }, - { "rename", SEC_GAMEMASTER, true, &HandleGuildRenameCommand, "" }, - { "info", SEC_GAMEMASTER, true, &HandleGuildInfoCommand, "" } + { "create", HandleGuildCreateCommand, SEC_GAMEMASTER, Console::Yes }, + { "delete", HandleGuildDeleteCommand, SEC_GAMEMASTER, Console::Yes }, + { "invite", HandleGuildInviteCommand, SEC_GAMEMASTER, Console::Yes }, + { "uninvite", HandleGuildUninviteCommand, SEC_GAMEMASTER, Console::Yes }, + { "rank", HandleGuildRankCommand, SEC_GAMEMASTER, Console::Yes }, + { "rename", HandleGuildRenameCommand, SEC_GAMEMASTER, Console::Yes }, + { "info", HandleGuildInfoCommand, SEC_GAMEMASTER, Console::Yes } }; static ChatCommandTable commandTable = { - { "guild", SEC_GAMEMASTER, true, nullptr, "", guildCommandTable } + { "guild", guildCommandTable } }; return commandTable; } - /** \brief GM command level 3 - Create a guild. - * - * This command allows a GM (level 3) to create a guild. - * - * The "args" parameter contains the name of the guild leader - * and then the name of the guild. - * - */ - static bool HandleGuildCreateCommand(ChatHandler* handler, char const* args) + static bool HandleGuildCreateCommand(ChatHandler* handler, Optional target, std::string_view guildName) { - if (!*args) - return false; - - // if not guild name only (in "") then player name - Player* target; - if (!handler->extractPlayerTarget(*args != '"' ? (char*)args : nullptr, &target)) - return false; - - char* tailStr = *args != '"' ? strtok(nullptr, "") : (char*)args; - if (!tailStr) - return false; + if (!target) + { + target = PlayerIdentifier::FromTargetOrSelf(handler); + } - char* guildStr = handler->extractQuotedArg(tailStr); - if (!guildStr) + if (!target || !target->IsConnected()) + { + handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); + handler->SetSentErrorMessage(true); return false; + } - std::string guildName = guildStr; + Player* playerTarget = target->GetConnectedPlayer(); - if (target->GetGuildId()) + if (playerTarget->GetGuildId()) { handler->SendSysMessage(LANG_PLAYER_IN_GUILD); handler->SetSentErrorMessage(true); @@ -108,7 +91,7 @@ class guild_commandscript : public CommandScript } Guild* guild = new Guild; - if (!guild->Create(target, guildName)) + if (!guild->Create(playerTarget, guildName)) { delete guild; handler->SendSysMessage(LANG_GUILD_NOT_CREATED); @@ -121,16 +104,12 @@ class guild_commandscript : public CommandScript return true; } - static bool HandleGuildDeleteCommand(ChatHandler* handler, char const* args) + static bool HandleGuildDeleteCommand(ChatHandler*, std::string_view guildName) { - if (!*args) - return false; - - char* guildStr = handler->extractQuotedArg((char*)args); - if (!guildStr) + if (guildName.empty()) + { return false; - - std::string guildName = guildStr; + } Guild* targetGuild = sGuildMgr->GetGuildByName(guildName); if (!targetGuild) @@ -142,41 +121,41 @@ class guild_commandscript : public CommandScript return true; } - static bool HandleGuildInviteCommand(ChatHandler* handler, char const* args) + static bool HandleGuildInviteCommand(ChatHandler* handler, Optional target, std::string_view guildName) { - if (!*args) - return false; - - // if not guild name only (in "") then player name - ObjectGuid targetGuid; - if (!handler->extractPlayerTarget(*args != '"' ? (char*)args : nullptr, nullptr, &targetGuid)) - return false; - - char* tailStr = *args != '"' ? strtok(nullptr, "") : (char*)args; - if (!tailStr) - return false; + if (!target) + { + target = PlayerIdentifier::FromTargetOrSelf(handler); + } - char* guildStr = handler->extractQuotedArg(tailStr); - if (!guildStr) + if (!target) + { return false; + } - std::string guildName = guildStr; Guild* targetGuild = sGuildMgr->GetGuildByName(guildName); if (!targetGuild) return false; // player's guild membership checked in AddMember before add - return targetGuild->AddMember(targetGuid); + return targetGuild->AddMember(target->GetGUID()); } - static bool HandleGuildUninviteCommand(ChatHandler* handler, char const* args) + static bool HandleGuildUninviteCommand(ChatHandler* handler, Optional target) { - Player* target; - ObjectGuid targetGuid; - if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid)) + if (!target) + { + target = PlayerIdentifier::FromTargetOrSelf(handler); + } + + if (!target) + { return false; + } + + Player* playerTarget = target->GetConnectedPlayer(); - uint32 guildId = target ? target->GetGuildId() : sCharacterCache->GetCharacterGuildIdByGuid(targetGuid); + uint32 guildId = playerTarget ? playerTarget->GetGuildId() : sCharacterCache->GetCharacterGuildIdByGuid(target->GetGUID()); if (!guildId) return false; @@ -184,7 +163,7 @@ class guild_commandscript : public CommandScript if (!targetGuild) return false; - targetGuild->DeleteMember(targetGuid, false, true, true); + targetGuild->DeleteMember(target->GetGUID(), false, true, true); return true; } @@ -207,26 +186,15 @@ class guild_commandscript : public CommandScript return targetGuild->ChangeMemberRank(player->GetGUID(), rank); } - static bool HandleGuildRenameCommand(ChatHandler* handler, char const* _args) + static bool HandleGuildRenameCommand(ChatHandler* handler, std::string_view oldGuildStr, std::string_view newGuildStr) { - if (!*_args) - return false; - - char *args = (char *)_args; - - char const* oldGuildStr = handler->extractQuotedArg(args); - if (!oldGuildStr) + if (!oldGuildStr.empty()) { - handler->SendSysMessage(LANG_BAD_VALUE); - handler->SetSentErrorMessage(true); return false; } - char const* newGuildStr = handler->extractQuotedArg(strtok(nullptr, "")); - if (!newGuildStr) + if (newGuildStr.empty()) { - handler->SendSysMessage(LANG_INSERT_GUILD_NAME); - handler->SetSentErrorMessage(true); return false; } @@ -256,35 +224,40 @@ class guild_commandscript : public CommandScript return true; } - static bool HandleGuildInfoCommand(ChatHandler* handler, char const* args) + static bool HandleGuildInfoCommand(ChatHandler* handler, Optional> const& guildIdentifier) { Guild* guild = nullptr; - if (args && args[0] != '\0') + if (guildIdentifier) { - if (isNumeric(args)) - guild = sGuildMgr->GetGuildById(strtoull(args, nullptr, 10)); + if (ObjectGuid::LowType const* guid = std::get_if(&*guildIdentifier)) + guild = sGuildMgr->GetGuildById(*guid); else - guild = sGuildMgr->GetGuildByName(args); + guild = sGuildMgr->GetGuildByName(guildIdentifier->get()); } - else if (Player* target = handler->getSelectedPlayerOrSelf()) - guild = target->GetGuild(); + else if (Optional target = PlayerIdentifier::FromTargetOrSelf(handler); target && target->IsConnected()) + guild = target->GetConnectedPlayer()->GetGuild(); if (!guild) return false; // Display Guild Information handler->PSendSysMessage(LANG_GUILD_INFO_NAME, guild->GetName().c_str(), guild->GetId()); // Guild Id + Name + std::string guildMasterName; if (sCharacterCache->GetCharacterNameByGuid(guild->GetLeaderGUID(), guildMasterName)) - { handler->PSendSysMessage(LANG_GUILD_INFO_GUILD_MASTER, guildMasterName.c_str(), guild->GetLeaderGUID().GetCounter()); // Guild Master - } - handler->PSendSysMessage(LANG_GUILD_INFO_CREATION_DATE, Acore::Time::TimeToHumanReadable(Seconds(guild->GetCreatedDate())).c_str()); // Creation Date + // Format creation date + char createdDateStr[20]; + time_t createdDate = guild->GetCreatedDate(); + tm localTm; + strftime(createdDateStr, 20, "%Y-%m-%d %H:%M:%S", localtime_r(&createdDate, &localTm)); + + handler->PSendSysMessage(LANG_GUILD_INFO_CREATION_DATE, createdDateStr); // Creation Date handler->PSendSysMessage(LANG_GUILD_INFO_MEMBER_COUNT, guild->GetMemberCount()); // Number of Members handler->PSendSysMessage(LANG_GUILD_INFO_BANK_GOLD, guild->GetTotalBankMoney() / 100 / 100); // Bank Gold (in gold coins) - handler->PSendSysMessage(LANG_GUILD_INFO_MOTD, guild->GetMOTD().c_str()); // Message of the day + handler->PSendSysMessage(LANG_GUILD_INFO_MOTD, guild->GetMOTD().c_str()); // Message of the Day handler->PSendSysMessage(LANG_GUILD_INFO_EXTRA_INFO, guild->GetInfo().c_str()); // Extra Information return true; } diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp index fc2f78ddcf7312..1f637315811132 100644 --- a/src/server/scripts/Commands/cs_reset.cpp +++ b/src/server/scripts/Commands/cs_reset.cpp @@ -30,10 +30,6 @@ EndScriptData */ #include "Player.h" #include "ScriptMgr.h" -#if AC_COMPILER == AC_COMPILER_GNU -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - using namespace Acore::ChatCommands; class reset_commandscript : public CommandScript @@ -45,48 +41,53 @@ class reset_commandscript : public CommandScript { static ChatCommandTable resetCommandTable = { - { "achievements", SEC_CONSOLE, true, &HandleResetAchievementsCommand, "" }, - { "honor", SEC_ADMINISTRATOR, true, &HandleResetHonorCommand, "" }, - { "level", SEC_ADMINISTRATOR, true, &HandleResetLevelCommand, "" }, - { "spells", SEC_ADMINISTRATOR, true, &HandleResetSpellsCommand, "" }, - { "stats", SEC_ADMINISTRATOR, true, &HandleResetStatsCommand, "" }, - { "talents", SEC_ADMINISTRATOR, true, &HandleResetTalentsCommand, "" }, - { "all", SEC_CONSOLE, true, &HandleResetAllCommand, "" } + { "achievements", HandleResetAchievementsCommand, SEC_CONSOLE, Console::Yes }, + { "honor", HandleResetHonorCommand, SEC_ADMINISTRATOR, Console::Yes }, + { "level", HandleResetLevelCommand, SEC_ADMINISTRATOR, Console::Yes }, + { "spells", HandleResetSpellsCommand, SEC_ADMINISTRATOR, Console::Yes }, + { "stats", HandleResetStatsCommand, SEC_ADMINISTRATOR, Console::Yes }, + { "talents", HandleResetTalentsCommand, SEC_ADMINISTRATOR, Console::Yes }, + { "all", HandleResetAllCommand, SEC_CONSOLE, Console::Yes } }; static ChatCommandTable commandTable = { - { "reset", SEC_ADMINISTRATOR, true, nullptr, "", resetCommandTable } + { "reset", resetCommandTable } }; return commandTable; } - static bool HandleResetAchievementsCommand(ChatHandler* handler, char const* args) + static bool HandleResetAchievementsCommand(ChatHandler*, Optional target) { - Player* target; - ObjectGuid targetGuid; - if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid)) + if (!target) + { return false; + } - if (target) - target->ResetAchievements(); + Player* playerTarget = target->GetConnectedPlayer(); + + if (playerTarget) + playerTarget->ResetAchievements(); else - AchievementMgr::DeleteFromDB(targetGuid.GetCounter()); + AchievementMgr::DeleteFromDB(target->GetGUID().GetCounter()); return true; } - static bool HandleResetHonorCommand(ChatHandler* handler, char const* args) + static bool HandleResetHonorCommand(ChatHandler*, Optional target) { - Player* target; - if (!handler->extractPlayerTarget((char*)args, &target)) + if (!target) + { return false; + } + + Player* playerTarget = target->GetConnectedPlayer(); - target->SetHonorPoints(0); - target->SetUInt32Value(PLAYER_FIELD_KILLS, 0); - target->SetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, 0); - target->SetUInt32Value(PLAYER_FIELD_TODAY_CONTRIBUTION, 0); - target->SetUInt32Value(PLAYER_FIELD_YESTERDAY_CONTRIBUTION, 0); - target->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL); + playerTarget->SetHonorPoints(0); + playerTarget->SetUInt32Value(PLAYER_FIELD_KILLS, 0); + playerTarget->SetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, 0); + playerTarget->SetUInt32Value(PLAYER_FIELD_TODAY_CONTRIBUTION, 0); + playerTarget->SetUInt32Value(PLAYER_FIELD_YESTERDAY_CONTRIBUTION, 0); + playerTarget->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL); return true; } @@ -123,156 +124,145 @@ class reset_commandscript : public CommandScript return true; } - static bool HandleResetLevelCommand(ChatHandler* handler, char const* args) + static bool HandleResetLevelCommand(ChatHandler*, Optional target) { - Player* target; - if (!handler->extractPlayerTarget((char*)args, &target)) + if (!target) + { return false; + } - if (!HandleResetStatsOrLevelHelper(target)) + Player* playerTarget = target->GetConnectedPlayer(); + + if (!HandleResetStatsOrLevelHelper(playerTarget)) return false; - uint8 oldLevel = target->GetLevel(); + uint8 oldLevel = playerTarget->GetLevel(); // set starting level - uint32 startLevel = target->getClass() != CLASS_DEATH_KNIGHT + uint32 startLevel = playerTarget->getClass() != CLASS_DEATH_KNIGHT ? sWorld->getIntConfig(CONFIG_START_PLAYER_LEVEL) : sWorld->getIntConfig(CONFIG_START_HEROIC_PLAYER_LEVEL); - target->_ApplyAllLevelScaleItemMods(false); - target->SetLevel(startLevel); - target->InitRunes(); - target->InitStatsForLevel(true); - target->InitTaxiNodesForLevel(); - target->InitGlyphsForLevel(); - target->InitTalentForLevel(); - target->SetUInt32Value(PLAYER_XP, 0); + playerTarget->_ApplyAllLevelScaleItemMods(false); + playerTarget->SetLevel(startLevel); + playerTarget->InitRunes(); + playerTarget->InitStatsForLevel(true); + playerTarget->InitTaxiNodesForLevel(); + playerTarget->InitGlyphsForLevel(); + playerTarget->InitTalentForLevel(); + playerTarget->SetUInt32Value(PLAYER_XP, 0); - target->_ApplyAllLevelScaleItemMods(true); + playerTarget->_ApplyAllLevelScaleItemMods(true); // reset level for pet - if (Pet* pet = target->GetPet()) + if (Pet* pet = playerTarget->GetPet()) pet->SynchronizeLevelWithOwner(); - sScriptMgr->OnPlayerLevelChanged(target, oldLevel); + sScriptMgr->OnPlayerLevelChanged(playerTarget, oldLevel); return true; } - static bool HandleResetSpellsCommand(ChatHandler* handler, char const* args) + static bool HandleResetSpellsCommand(ChatHandler* handler, Optional target) { - Player* target; - ObjectGuid targetGuid; - std::string targetName; - if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid, &targetName)) + if (!target) + { + target = PlayerIdentifier::FromTargetOrSelf(handler); + } + + if (!target) + { return false; + } + + Player* playerTarget = target->GetConnectedPlayer(); if (target) { - target->resetSpells(/* bool myClassOnly */); + playerTarget->resetSpells(/* bool myClassOnly */); - ChatHandler(target->GetSession()).SendSysMessage(LANG_RESET_SPELLS); - if (!handler->GetSession() || handler->GetSession()->GetPlayer() != target) - handler->PSendSysMessage(LANG_RESET_SPELLS_ONLINE, handler->GetNameLink(target).c_str()); + ChatHandler(playerTarget->GetSession()).SendSysMessage(LANG_RESET_SPELLS); + if (!handler->GetSession() || handler->GetSession()->GetPlayer() != playerTarget) + handler->PSendSysMessage(LANG_RESET_SPELLS_ONLINE, handler->GetNameLink(playerTarget).c_str()); } else { CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG); stmt->SetData(0, uint16(AT_LOGIN_RESET_SPELLS)); - stmt->SetData(1, targetGuid.GetCounter()); + stmt->SetData(1, playerTarget->GetGUID().GetCounter()); CharacterDatabase.Execute(stmt); - handler->PSendSysMessage(LANG_RESET_SPELLS_OFFLINE, targetName.c_str()); + handler->PSendSysMessage(LANG_RESET_SPELLS_OFFLINE, target->GetName()); } return true; } - static bool HandleResetStatsCommand(ChatHandler* handler, char const* args) + static bool HandleResetStatsCommand(ChatHandler*, Optional target) { - Player* target; - if (!handler->extractPlayerTarget((char*)args, &target)) + if (!target) + { return false; + } + + Player* playerTarget = target->GetConnectedPlayer(); - if (!HandleResetStatsOrLevelHelper(target)) + if (!HandleResetStatsOrLevelHelper(playerTarget)) return false; - target->InitRunes(); - target->InitStatsForLevel(true); - target->InitTaxiNodesForLevel(); - target->InitGlyphsForLevel(); - target->InitTalentForLevel(); + playerTarget->InitRunes(); + playerTarget->InitStatsForLevel(true); + playerTarget->InitTaxiNodesForLevel(); + playerTarget->InitGlyphsForLevel(); + playerTarget->InitTalentForLevel(); return true; } - static bool HandleResetTalentsCommand(ChatHandler* handler, char const* args) + static bool HandleResetTalentsCommand(ChatHandler* handler, Optional target) { - Player* target; - ObjectGuid targetGuid; - std::string targetName; - if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid, &targetName)) - { - // Try reset talents as Hunter Pet - Creature* creature = handler->getSelectedCreature(); - if (!*args && creature && creature->IsPet()) - { - Unit* owner = creature->GetOwner(); - if (owner && owner->GetTypeId() == TYPEID_PLAYER && creature->ToPet()->IsPermanentPetFor(owner->ToPlayer())) - { - creature->ToPet()->resetTalents(); - owner->ToPlayer()->SendTalentsInfoData(true); - - ChatHandler(owner->ToPlayer()->GetSession()).SendSysMessage(LANG_RESET_PET_TALENTS); - if (!handler->GetSession() || handler->GetSession()->GetPlayer() != owner->ToPlayer()) - handler->PSendSysMessage(LANG_RESET_PET_TALENTS_ONLINE, handler->GetNameLink(owner->ToPlayer()).c_str()); - } - return true; - } + Player* targetPlayer = nullptr; + if (target) + { + targetPlayer = target->GetConnectedPlayer(); + } + else + { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); handler->SetSentErrorMessage(true); return false; } - if (target) + if (targetPlayer) { - target->resetTalents(true); - target->SendTalentsInfoData(false); - ChatHandler(target->GetSession()).SendSysMessage(LANG_RESET_TALENTS); - if (!handler->GetSession() || handler->GetSession()->GetPlayer() != target) - handler->PSendSysMessage(LANG_RESET_TALENTS_ONLINE, handler->GetNameLink(target).c_str()); - - Pet* pet = target->GetPet(); - Pet::resetTalentsForAllPetsOf(target, pet); + targetPlayer->resetTalents(true); + targetPlayer->SendTalentsInfoData(false); + ChatHandler(targetPlayer->GetSession()).SendSysMessage(LANG_RESET_TALENTS); + if (!handler->GetSession() || handler->GetSession()->GetPlayer() != targetPlayer) + handler->PSendSysMessage(LANG_RESET_TALENTS_ONLINE, handler->GetNameLink(targetPlayer).c_str()); + + Pet* pet = targetPlayer->GetPet(); + Pet::resetTalentsForAllPetsOf(targetPlayer, pet); if (pet) - target->SendTalentsInfoData(true); + targetPlayer->SendTalentsInfoData(true); return true; } - else if (targetGuid) + else { CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG); stmt->SetData(0, uint16(AT_LOGIN_RESET_TALENTS | AT_LOGIN_RESET_PET_TALENTS)); - stmt->SetData(1, targetGuid.GetCounter()); + stmt->SetData(1, target->GetGUID().GetCounter()); CharacterDatabase.Execute(stmt); - std::string nameLink = handler->playerLink(targetName); + std::string nameLink = handler->playerLink(target->GetName()); handler->PSendSysMessage(LANG_RESET_TALENTS_OFFLINE, nameLink.c_str()); return true; } - - handler->SendSysMessage(LANG_NO_CHAR_SELECTED); - handler->SetSentErrorMessage(true); - return false; } - static bool HandleResetAllCommand(ChatHandler* handler, char const* args) + static bool HandleResetAllCommand(ChatHandler* handler, std::string_view caseName) { - if (!*args) - return false; - - std::string caseName = args; - AtLoginFlags atLogin; // Command specially created as single command to prevent using short case names @@ -292,7 +282,7 @@ class reset_commandscript : public CommandScript } else { - handler->PSendSysMessage(LANG_RESETALL_UNKNOWN_CASE, args); + handler->PSendSysMessage(LANG_RESETALL_UNKNOWN_CASE, caseName); handler->SetSentErrorMessage(true); return false; } @@ -303,7 +293,7 @@ class reset_commandscript : public CommandScript std::shared_lock lock(*HashMapHolder::GetLock()); HashMapHolder::MapType const& plist = ObjectAccessor::GetPlayers(); - for (HashMapHolder::MapType::const_iterator itr = plist.begin(); itr != plist.end(); ++itr) + for (auto itr = plist.begin(); itr != plist.end(); ++itr) itr->second->SetAtLoginFlag(atLogin); return true; diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp index 39b7c3780e933c..8e29933bccad88 100644 --- a/src/server/scripts/Commands/cs_ticket.cpp +++ b/src/server/scripts/Commands/cs_ticket.cpp @@ -24,7 +24,6 @@ EndScriptData */ #include "AccountMgr.h" #include "Chat.h" -#include "Language.h" #include "ObjectMgr.h" #include "Opcodes.h" #include "Player.h" @@ -32,10 +31,6 @@ EndScriptData */ #include "ScriptMgr.h" #include "TicketMgr.h" -#if AC_COMPILER == AC_COMPILER_GNU -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - using namespace Acore::ChatCommands; class ticket_commandscript : public CommandScript @@ -47,48 +42,38 @@ class ticket_commandscript : public CommandScript { static ChatCommandTable ticketResponseCommandTable = { - { "append", SEC_GAMEMASTER, true, &HandleGMTicketResponseAppendCommand, "" }, - { "appendln", SEC_GAMEMASTER, true, &HandleGMTicketResponseAppendLnCommand, "" } + { "append", HandleGMTicketResponseAppendCommand, SEC_GAMEMASTER, Console::Yes }, + { "appendln", HandleGMTicketResponseAppendLnCommand, SEC_GAMEMASTER, Console::Yes } }; static ChatCommandTable ticketCommandTable = { - { "assign", SEC_GAMEMASTER, true, &HandleGMTicketAssignToCommand, "" }, - { "close", SEC_GAMEMASTER, true, &HandleGMTicketCloseByIdCommand, "" }, - { "closedlist", SEC_GAMEMASTER, true, &HandleGMTicketListClosedCommand, "" }, - { "comment", SEC_GAMEMASTER, true, &HandleGMTicketCommentCommand, "" }, - { "complete", SEC_GAMEMASTER, true, &HandleGMTicketCompleteCommand, "" }, - { "delete", SEC_ADMINISTRATOR, true, &HandleGMTicketDeleteByIdCommand, "" }, - { "escalate", SEC_GAMEMASTER, true, &HandleGMTicketEscalateCommand, "" }, - { "escalatedlist", SEC_GAMEMASTER, true, &HandleGMTicketListEscalatedCommand, "" }, - { "list", SEC_GAMEMASTER, true, &HandleGMTicketListCommand, "" }, - { "onlinelist", SEC_GAMEMASTER, true, &HandleGMTicketListOnlineCommand, "" }, - { "reset", SEC_CONSOLE, true, &HandleGMTicketResetCommand, "" }, - { "response", SEC_GAMEMASTER, true, nullptr, "", ticketResponseCommandTable }, - { "togglesystem", SEC_ADMINISTRATOR, true, &HandleToggleGMTicketSystem, "" }, - { "unassign", SEC_GAMEMASTER, true, &HandleGMTicketUnAssignCommand, "" }, - { "viewid", SEC_GAMEMASTER, true, &HandleGMTicketGetByIdCommand, "" }, - { "viewname", SEC_GAMEMASTER, true, &HandleGMTicketGetByNameCommand, "" } + { "assign", HandleGMTicketAssignToCommand, SEC_GAMEMASTER, Console::Yes }, + { "close", HandleGMTicketCloseByIdCommand, SEC_GAMEMASTER, Console::Yes }, + { "closedlist", HandleGMTicketListClosedCommand, SEC_GAMEMASTER, Console::Yes }, + { "comment", HandleGMTicketCommentCommand, SEC_GAMEMASTER, Console::Yes }, + { "complete", HandleGMTicketCompleteCommand, SEC_GAMEMASTER, Console::Yes }, + { "delete", HandleGMTicketDeleteByIdCommand, SEC_ADMINISTRATOR, Console::Yes }, + { "escalate", HandleGMTicketEscalateCommand, SEC_GAMEMASTER, Console::Yes }, + { "escalatedlist", HandleGMTicketListEscalatedCommand, SEC_GAMEMASTER, Console::Yes }, + { "list", HandleGMTicketListCommand, SEC_GAMEMASTER, Console::Yes }, + { "onlinelist", HandleGMTicketListOnlineCommand, SEC_GAMEMASTER, Console::Yes }, + { "reset", HandleGMTicketResetCommand, SEC_CONSOLE, Console::Yes }, + + { "response", ticketResponseCommandTable }, + { "togglesystem", HandleToggleGMTicketSystem, SEC_ADMINISTRATOR, Console::Yes }, + { "unassign", HandleGMTicketUnAssignCommand, SEC_GAMEMASTER, Console::Yes }, + { "viewid", HandleGMTicketGetByIdCommand, SEC_GAMEMASTER, Console::Yes }, + { "viewname", HandleGMTicketGetByNameCommand, SEC_GAMEMASTER, Console::Yes } }; static ChatCommandTable commandTable = { - { "ticket", SEC_GAMEMASTER, false, nullptr, "", ticketCommandTable } + { "ticket", ticketCommandTable } }; return commandTable; } - static bool HandleGMTicketAssignToCommand(ChatHandler* handler, char const* args) + static bool HandleGMTicketAssignToCommand(ChatHandler* handler, uint32 ticketId, std::string target) { - if (!*args) - return false; - - char* ticketIdStr = strtok((char*)args, " "); - uint32 ticketId = atoi(ticketIdStr); - - char* targetStr = strtok(nullptr, " "); - if (!targetStr) - return false; - - std::string target(targetStr); if (!normalizePlayerName(target)) return false; @@ -138,12 +123,8 @@ class ticket_commandscript : public CommandScript return true; } - static bool HandleGMTicketCloseByIdCommand(ChatHandler* handler, char const* args) + static bool HandleGMTicketCloseByIdCommand(ChatHandler* handler, uint32 ticketId) { - if (!*args) - return false; - - uint32 ticketId = atoi(args); GmTicket* ticket = sTicketMgr->GetTicket(ticketId); if (!ticket || ticket->IsClosed() || ticket->IsCompleted()) { @@ -177,14 +158,8 @@ class ticket_commandscript : public CommandScript return true; } - static bool HandleGMTicketCommentCommand(ChatHandler* handler, char const* args) + static bool HandleGMTicketCommentCommand(ChatHandler* handler, uint32 ticketId) { - if (!*args) - return false; - - char* ticketIdStr = strtok((char*)args, " "); - uint32 ticketId = atoi(ticketIdStr); - char* comment = strtok(nullptr, "\n"); if (!comment) return false; @@ -218,20 +193,14 @@ class ticket_commandscript : public CommandScript return true; } - static bool HandleGMTicketListClosedCommand(ChatHandler* handler, char const* /*args*/) + static bool HandleGMTicketListClosedCommand(ChatHandler* handler) { sTicketMgr->ShowClosedList(*handler); return true; } - static bool HandleGMTicketCompleteCommand(ChatHandler* handler, char const* args) + static bool HandleGMTicketCompleteCommand(ChatHandler* handler, uint32 ticketId) { - if (!*args) - return false; - - char* ticketIdStr = strtok((char*)args, " "); - uint32 ticketId = atoi(ticketIdStr); - GmTicket* ticket = sTicketMgr->GetTicket(ticketId); if (!ticket || ticket->IsClosed() || ticket->IsCompleted()) { @@ -272,12 +241,8 @@ class ticket_commandscript : public CommandScript return true; } - static bool HandleGMTicketDeleteByIdCommand(ChatHandler* handler, char const* args) + static bool HandleGMTicketDeleteByIdCommand(ChatHandler* handler, uint32 ticketId) { - if (!*args) - return false; - - uint32 ticketId = atoi(args); GmTicket* ticket = sTicketMgr->GetTicket(ticketId); if (!ticket) { @@ -308,12 +273,8 @@ class ticket_commandscript : public CommandScript return true; } - static bool HandleGMTicketEscalateCommand(ChatHandler* handler, char const* args) + static bool HandleGMTicketEscalateCommand(ChatHandler* handler, uint32 ticketId) { - if (!*args) - return false; - - uint32 ticketId = atoi(args); GmTicket* ticket = sTicketMgr->GetTicket(ticketId); if (!ticket || ticket->IsClosed() || ticket->IsCompleted() || ticket->GetEscalatedStatus() != TICKET_UNASSIGNED) { @@ -330,25 +291,25 @@ class ticket_commandscript : public CommandScript return true; } - static bool HandleGMTicketListEscalatedCommand(ChatHandler* handler, char const* /*args*/) + static bool HandleGMTicketListEscalatedCommand(ChatHandler* handler) { sTicketMgr->ShowEscalatedList(*handler); return true; } - static bool HandleGMTicketListCommand(ChatHandler* handler, char const* /*args*/) + static bool HandleGMTicketListCommand(ChatHandler* handler) { sTicketMgr->ShowList(*handler, false); return true; } - static bool HandleGMTicketListOnlineCommand(ChatHandler* handler, char const* /*args*/) + static bool HandleGMTicketListOnlineCommand(ChatHandler* handler) { sTicketMgr->ShowList(*handler, true); return true; } - static bool HandleGMTicketResetCommand(ChatHandler* handler, char const* /*args*/) + static bool HandleGMTicketResetCommand(ChatHandler* handler) { if (sTicketMgr->GetOpenTicketCount()) { @@ -364,7 +325,7 @@ class ticket_commandscript : public CommandScript return true; } - static bool HandleToggleGMTicketSystem(ChatHandler* handler, char const* /*args*/) + static bool HandleToggleGMTicketSystem(ChatHandler* handler) { bool status = !sTicketMgr->GetStatus(); sTicketMgr->SetStatus(status); @@ -372,12 +333,8 @@ class ticket_commandscript : public CommandScript return true; } - static bool HandleGMTicketUnAssignCommand(ChatHandler* handler, char const* args) + static bool HandleGMTicketUnAssignCommand(ChatHandler* handler, uint32 ticketId) { - if (!*args) - return false; - - uint32 ticketId = atoi(args); GmTicket* ticket = sTicketMgr->GetTicket(ticketId); if (!ticket || ticket->IsClosed()) { @@ -425,12 +382,8 @@ class ticket_commandscript : public CommandScript return true; } - static bool HandleGMTicketGetByIdCommand(ChatHandler* handler, char const* args) + static bool HandleGMTicketGetByIdCommand(ChatHandler* handler, uint32 ticketId) { - if (!*args) - return false; - - uint32 ticketId = atoi(args); GmTicket* ticket = sTicketMgr->GetTicket(ticketId); if (!ticket || ticket->IsClosed() || ticket->IsCompleted()) { @@ -442,16 +395,12 @@ class ticket_commandscript : public CommandScript ticket->SetViewed(); ticket->SaveToDB(trans); - handler->SendSysMessage(ticket->FormatMessageString(*handler, true).c_str()); + handler->SendSysMessage(ticket->FormatMessageString(*handler, true)); return true; } - static bool HandleGMTicketGetByNameCommand(ChatHandler* handler, char const* args) + static bool HandleGMTicketGetByNameCommand(ChatHandler* handler, std::string name) { - if (!*args) - return false; - - std::string name(args); if (!normalizePlayerName(name)) return false; @@ -485,18 +434,12 @@ class ticket_commandscript : public CommandScript ticket->SetViewed(); ticket->SaveToDB(trans); - handler->SendSysMessage(ticket->FormatMessageString(*handler, true).c_str()); + handler->SendSysMessage(ticket->FormatMessageString(*handler, true)); return true; } - static bool _HandleGMTicketResponseAppendCommand(char const* args, bool newLine, ChatHandler* handler) + static bool _HandleGMTicketResponseAppendCommand(uint32 ticketId, bool newLine, ChatHandler* handler) { - if (!*args) - return false; - - char* ticketIdStr = strtok((char*)args, " "); - uint32 ticketId = atoi(ticketIdStr); - char* response = strtok(nullptr, "\n"); if (!response) return false; @@ -526,14 +469,14 @@ class ticket_commandscript : public CommandScript return true; } - static bool HandleGMTicketResponseAppendCommand(ChatHandler* handler, char const* args) + static bool HandleGMTicketResponseAppendCommand(ChatHandler* handler, uint32 ticketId) { - return _HandleGMTicketResponseAppendCommand(args, false, handler); + return _HandleGMTicketResponseAppendCommand(ticketId, false, handler); } - static bool HandleGMTicketResponseAppendLnCommand(ChatHandler* handler, char const* args) + static bool HandleGMTicketResponseAppendLnCommand(ChatHandler* handler, uint32 ticketId) { - return _HandleGMTicketResponseAppendCommand(args, true, handler); + return _HandleGMTicketResponseAppendCommand(ticketId, true, handler); } }; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp index 01a3c39b56461f..b8ca05175a2f5e 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp @@ -18,7 +18,9 @@ #include "GameObject.h" #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellAuras.h" #include "SpellInfo.h" +#include "SpellScript.h" #include "karazhan.h" #include "TaskScheduler.h" @@ -40,31 +42,34 @@ enum Texts enum Spells { //Spells - SPELL_FROSTBOLT = 29954, - SPELL_FIREBALL = 29953, - SPELL_ARCMISSLE = 29955, - SPELL_CHAINSOFICE = 29991, - SPELL_DRAGONSBREATH = 29964, - SPELL_MASSSLOW = 30035, - SPELL_FLAME_WREATH = 29946, - SPELL_AOE_CS = 29961, - SPELL_PLAYERPULL = 32265, - SPELL_AEXPLOSION = 29973, - SPELL_MASS_POLY = 29963, - SPELL_BLINK_CENTER = 29967, - SPELL_CONJURE = 29975, - SPELL_DRINK = 30024, - SPELL_POTION = 32453, - SPELL_AOE_PYROBLAST = 29978, - - SPELL_SUMMON_WELEMENTAL_1 = 29962, - SPELL_SUMMON_WELEMENTAL_2 = 37051, - SPELL_SUMMON_WELEMENTAL_3 = 37052, - SPELL_SUMMON_WELEMENTAL_4 = 37053, - - SPELL_SUMMON_BLIZZARD = 29969, // Activates the Blizzard NPC - - SPELL_SHADOW_PYRO = 29978 + SPELL_FROSTBOLT = 29954, + SPELL_FIREBALL = 29953, + SPELL_ARCMISSLE = 29955, + SPELL_CHAINSOFICE = 29991, + SPELL_DRAGONSBREATH = 29964, + SPELL_MASSSLOW = 30035, + SPELL_FLAME_WREATH = 30004, + SPELL_FLAME_WREATH_RING = 29946, + SPELL_FLAME_WREATH_RAN_THRU = 29947, // You ran through the flames! + SPELL_FLAME_WREATH_EXPLOSION = 29949, + SPELL_AOE_CS = 29961, + SPELL_PLAYERPULL = 32265, + SPELL_AEXPLOSION = 29973, + SPELL_MASS_POLY = 29963, + SPELL_BLINK_CENTER = 29967, + SPELL_CONJURE = 29975, + SPELL_DRINK = 30024, + SPELL_POTION = 32453, + SPELL_AOE_PYROBLAST = 29978, + + SPELL_SUMMON_WELEMENTAL_1 = 29962, + SPELL_SUMMON_WELEMENTAL_2 = 37051, + SPELL_SUMMON_WELEMENTAL_3 = 37052, + SPELL_SUMMON_WELEMENTAL_4 = 37053, + + SPELL_SUMMON_BLIZZARD = 29969, // Activates the Blizzard NPC + + SPELL_SHADOW_PYRO = 29978 }; enum Creatures @@ -81,20 +86,11 @@ enum SuperSpell enum Groups { - GROUP_FLAMEWREATH = 0, - GROUP_DRINKING = 1 + GROUP_DRINKING = 0 }; Position const roomCenter = {-11158.f, -1920.f}; -Position const elementalPos[4] = -{ - {-11168.1f, -1939.29f, 232.092f, 1.46f}, - {-11138.2f, -1915.38f, 232.092f, 3.00f}, - {-11161.7f, -1885.36f, 232.092f, 4.59f}, - {-11192.4f, -1909.36f, 232.092f, 6.19f} -}; - struct boss_shade_of_aran : public BossAI { boss_shade_of_aran(Creature* creature) : BossAI(creature, DATA_ARAN) @@ -111,9 +107,6 @@ struct boss_shade_of_aran : public BossAI _drinkScheduler.CancelAll(); _lastSuperSpell = rand() % 3; - for (uint8 i = 0; i < 3; ++i) - FlameWreathTarget[i].Clear(); - CurrentNormalSpell = 0; _arcaneCooledDown = true; @@ -329,15 +322,7 @@ struct boss_shade_of_aran : public BossAI { if (!_drinking) { - switch (urand(0, 1)) - { - case 0: - DoCastSelf(SPELL_AOE_CS); - break; - case 1: - DoCastRandomTarget(SPELL_CHAINSOFICE); - break; - } + urand(0, 1) ? DoCastSelf(SPELL_AOE_CS) : DoCastRandomTarget(SPELL_CHAINSOFICE); } context.Repeat(5s, 20s); }).Schedule(6s, [this](TaskContext context) @@ -377,37 +362,10 @@ struct boss_shade_of_aran : public BossAI DoCastSelf(SPELL_MASSSLOW, true); DoCastSelf(SPELL_AEXPLOSION, false); break; - case SUPER_FLAME: Talk(SAY_FLAMEWREATH); - - scheduler.Schedule(20s, GROUP_FLAMEWREATH, [this](TaskContext) - { - scheduler.CancelGroup(GROUP_FLAMEWREATH); - }).Schedule(500ms, GROUP_FLAMEWREATH, [this](TaskContext context) - { - for (uint8 i = 0; i < 3; ++i) - { - if (!FlameWreathTarget[i]) - continue; - - Unit* unit = ObjectAccessor::GetUnit(*me, FlameWreathTarget[i]); - if (unit && !unit->IsWithinDist2d(FWTargPosX[i], FWTargPosY[i], 3)) - { - unit->CastSpell(unit, 20476, true, 0, 0, me->GetGUID()); - FlameWreathTarget[i].Clear(); - } - } - context.Repeat(500ms); - }); - - FlameWreathTarget[0].Clear(); - FlameWreathTarget[1].Clear(); - FlameWreathTarget[2].Clear(); - - FlameWreathEffect(); + DoCastAOE(SPELL_FLAME_WREATH); break; - case SUPER_BLIZZARD: Talk(SAY_BLIZZARD); DoCastAOE(SPELL_SUMMON_BLIZZARD); @@ -432,41 +390,6 @@ struct boss_shade_of_aran : public BossAI }); } - void FlameWreathEffect() - { - std::vector targets; - ThreatContainer::StorageType const& t_list = me->GetThreatMgr().GetThreatList(); - - if (t_list.empty()) - return; - - //store the threat list in a different container - for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr != t_list.end(); ++itr) - { - Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); - //only on alive players - if (target && target->IsAlive() && target->GetTypeId() == TYPEID_PLAYER) - targets.push_back(target); - } - - //cut down to size if we have more than 3 targets - while (targets.size() > 3) - targets.erase(targets.begin() + rand() % targets.size()); - - uint32 i = 0; - for (std::vector::const_iterator itr = targets.begin(); itr != targets.end(); ++itr) - { - if (*itr) - { - FlameWreathTarget[i] = (*itr)->GetGUID(); - FWTargPosX[i] = (*itr)->GetPositionX(); - FWTargPosY[i] = (*itr)->GetPositionY(); - DoCast((*itr), SPELL_FLAME_WREATH, true); - ++i; - } - } - } - void UpdateAI(uint32 diff) override { scheduler.Update(diff); @@ -514,10 +437,6 @@ struct boss_shade_of_aran : public BossAI uint32 _lastSuperSpell; - ObjectGuid FlameWreathTarget[3]; - float FWTargPosX[3]; - float FWTargPosY[3]; - uint32 CurrentNormalSpell; bool _arcaneCooledDown; @@ -527,7 +446,84 @@ struct boss_shade_of_aran : public BossAI bool _hasDrunk; }; +// 30004 - Flame Wreath +class spell_flamewreath : public SpellScript +{ + PrepareSpellScript(spell_flamewreath); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_FLAME_WREATH_RING }); + } + + void FilterTargets(std::list& targets) + { + uint8 maxSize = 3; + + if (targets.size() > maxSize) + { + Acore::Containers::RandomResize(targets, maxSize); + } + + _targets = targets; + } + + void HandleFinish() + { + for (auto const& target : _targets) + { + if (Unit* targetUnit = target->ToUnit()) + { + GetCaster()->CastSpell(targetUnit, SPELL_FLAME_WREATH_RING, true); + } + } + } + +private: + std::list _targets; + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_flamewreath::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ENEMY); + AfterCast += SpellCastFn(spell_flamewreath::HandleFinish); + } +}; + +// 29946 - Flame Wreath (visual effect) +class spell_flamewreath_aura : public AuraScript +{ + PrepareAuraScript(spell_flamewreath_aura); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_FLAME_WREATH_RAN_THRU, SPELL_FLAME_WREATH_EXPLOSION }); + } + + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_DEFAULT && GetDuration()) + { + if (Unit* target = GetTarget()) + { + target->CastSpell(target, SPELL_FLAME_WREATH_RAN_THRU, true); + + target->m_Events.AddEventAtOffset([target] { + target->RemoveAurasDueToSpell(SPELL_FLAME_WREATH_RAN_THRU); + target->CastSpell(target, SPELL_FLAME_WREATH_EXPLOSION, true); + }, 1s); + } + } + } + + void Register() override + { + OnEffectRemove += AuraEffectRemoveFn(spell_flamewreath_aura::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); + } +}; + void AddSC_boss_shade_of_aran() { RegisterKarazhanCreatureAI(boss_shade_of_aran); + RegisterSpellScript(spell_flamewreath); + RegisterSpellScript(spell_flamewreath_aura); } diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp index 65b8c64f16cb81..edfa3fb6e7ed3c 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp @@ -203,52 +203,6 @@ enum ScarletMonasteryTrashMisc SPELL_FORGIVENESS = 28697, }; -class npc_scarlet_guard : public CreatureScript -{ -public: - npc_scarlet_guard() : CreatureScript("npc_scarlet_guard") { } - - struct npc_scarlet_guardAI : public SmartAI - { - npc_scarlet_guardAI(Creature* creature) : SmartAI(creature) { } - - void Reset() override - { - SayAshbringer = false; - } - - void MoveInLineOfSight(Unit* who) override - { - if (who && who->GetDistance2d(me) < 12.0f) - { - if (Player* player = who->ToPlayer()) - { - if (player->HasAura(AURA_ASHBRINGER) && !SayAshbringer) - { - Talk(SAY_WELCOME); - me->SetFaction(FACTION_FRIENDLY); - me->SetSheath(SHEATH_STATE_UNARMED); - me->SetFacingToObject(player); - me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->AddAura(SPELL_AURA_MOD_ROOT, me); - me->CastSpell(me, SPELL_AURA_MOD_ROOT, true); - SayAshbringer = true; - } - } - } - - SmartAI::MoveInLineOfSight(who); - } - private: - bool SayAshbringer = false; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetScarletMonasteryAI(creature); - } -}; - enum MograineEvents { EVENT_SPELL_CRUSADER_STRIKE = 1, @@ -733,7 +687,6 @@ class npc_fairbanks : public CreatureScript void AddSC_instance_scarlet_monastery() { new instance_scarlet_monastery(); - new npc_scarlet_guard(); new npc_fairbanks(); new npc_mograine(); new boss_high_inquisitor_whitemane(); diff --git a/src/server/scripts/Events/brewfest.cpp b/src/server/scripts/Events/brewfest.cpp index b202673cd96b12..53c5ddded3b9ee 100644 --- a/src/server/scripts/Events/brewfest.cpp +++ b/src/server/scripts/Events/brewfest.cpp @@ -1367,13 +1367,15 @@ enum BrewfestRevelerEnum FACTION_ALLIANCE = 1934, FACTION_HORDE = 1935, - SPELL_BREWFEST_REVELER_TRANSFORM_GOBLIN_MALE = 44003, - SPELL_BREWFEST_REVELER_TRANSFORM_GOBLIN_FEMALE = 44004, - SPELL_BREWFEST_REVELER_TRANSFORM_BE = 43907, - SPELL_BREWFEST_REVELER_TRANSFORM_ORC = 43914, - SPELL_BREWFEST_REVELER_TRANSFORM_TAUREN = 43915, - SPELL_BREWFEST_REVELER_TRANSFORM_TROLL = 43916, - SPELL_BREWFEST_REVELER_TRANSFORM_UNDEAD = 43917 + SPELL_BREWFEST_REVELER_TRANSFORM_GOBLIN_MALE = 44003, + SPELL_BREWFEST_REVELER_TRANSFORM_GOBLIN_FEMALE = 44004, + SPELL_BREWFEST_REVELER_TRANSFORM_BE = 43907, + SPELL_BREWFEST_REVELER_TRANSFORM_ORC = 43914, + SPELL_BREWFEST_REVELER_TRANSFORM_TAUREN = 43915, + SPELL_BREWFEST_REVELER_TRANSFORM_TROLL = 43916, + SPELL_BREWFEST_REVELER_TRANSFORM_UNDEAD = 43917, + + SPELL_DRUNKEN_BREWFEST_REVELER_TRANSFORM_GOBLIN_MALE = 44096 }; class spell_brewfest_reveler_transform : public AuraScript @@ -1394,6 +1396,7 @@ class spell_brewfest_reveler_transform : public AuraScript break; case SPELL_BREWFEST_REVELER_TRANSFORM_GOBLIN_MALE: case SPELL_BREWFEST_REVELER_TRANSFORM_GOBLIN_FEMALE: + case SPELL_DRUNKEN_BREWFEST_REVELER_TRANSFORM_GOBLIN_MALE: factionId = FACTION_FRIENDLY; break; default: diff --git a/src/server/scripts/Events/midsummer.cpp b/src/server/scripts/Events/midsummer.cpp index 998a6211b17b9d..d82b54d99693af 100644 --- a/src/server/scripts/Events/midsummer.cpp +++ b/src/server/scripts/Events/midsummer.cpp @@ -23,6 +23,7 @@ #include "Spell.h" #include "SpellAuras.h" #include "SpellScript.h" +#include enum eBonfire { @@ -210,15 +211,276 @@ class spell_gen_crab_disguise : public AuraScript enum RibbonPole { + GO_RIBBON_POLE = 181605, + SPELL_RIBBON_POLE_CHANNEL_VISUAL = 29172, SPELL_RIBBON_POLE_CHANNEL_VISUAL_2 = 29531, SPELL_TEST_RIBBON_POLE_CHANNEL_BLUE = 29705, SPELL_TEST_RIBBON_POLE_CHANNEL_RED = 29726, SPELL_TEST_RIBBON_POLE_CHANNEL_PINK = 29727, + // player spinning/rorating around himself + SPELL_RIBBON_POLE_PERIODIC_VISUAL = 45406, + // spew lava trails + SPELL_RIBBON_POLE_FIRE_SPIRAL_VISUAL= 45421, + // blue fire ring, duration 5s + SPELL_FLAME_RING = 46842, + // red fire ring, duration 5s + SPELL_FLAME_PATCH = 46836, + // single firework explosion + SPELL_RIBBON_POLE_FIREWORK = 46847, + SPELL_RIBBON_POLE_GROUND_FLOWER = 46969, SPELL_RIBBON_POLE_XP = 29175, - SPELL_RIBBON_POLE_FIREWORKS = 46971, NPC_RIBBON_POLE_DEBUG_TARGET = 17066, + NPC_GROUND_FLOWER = 25518, + NPC_BIG_DANCING_FLAMES = 26267, + NPC_RIBBON_POLE_FIRE_SPIRAL_BUNNY = 25303, + + // dancing players count + THRESHOLD_FLAME_CIRCLE = 1, + THRESHOLD_FIREWORK = 2, + THRESHOLD_FIREWORK_3 = 3, + THRESHOLD_FIREWORK_5 = 5, + THRESHOLD_GROUND_FLOWERS = 3, + THRESHOLD_SPEW_LAVA = 6, + THRESHOLD_DANCING_FLAMES = 7, + + MAX_COUNT_GROUND_FLOWERS = 3, + MAX_COUNT_SPEW_LAVA_TARGETS = 2, + MAX_COUNT_DANCING_FLAMES = 4, +}; + +struct npc_midsummer_ribbon_pole_target : public ScriptedAI +{ + npc_midsummer_ribbon_pole_target(Creature* creature) : ScriptedAI(creature) + { + // ribbonPole trap also spawns this NPC (currently unwanted) + if (me->ToTempSummon()) + me->DespawnOrUnsummon(); + + _ribbonPole = nullptr; + _bunny = nullptr; + _dancerList.clear(); + + LocateRibbonPole(); + SpawnFireSpiralBunny(); + + _scheduler.Schedule(1s, [this](TaskContext context) + { + DoCleanupChecks(); + context.Repeat(); + }) + .Schedule(5s, [this](TaskContext context) + { + DoFlameCircleChecks(); + context.Repeat(); + }) + .Schedule(15s, [this](TaskContext context) + { + DoFireworkChecks(); + context.Repeat(); + }) + .Schedule(10s, [this](TaskContext context) + { + DoGroundFlowerChecks(); + context.Repeat(); + }) + .Schedule(10s, [this](TaskContext context) + { + DoSpewLavaChecks(); + context.Repeat(); + }) + .Schedule(15s, [this](TaskContext context) + { + DoDancingFLameChecks(); + context.Repeat(); + }); + } + + void SpellHit(Unit* caster, SpellInfo const* spell) override + { + Player* dancer = caster->ToPlayer(); + if (!dancer) + return; + + switch (spell->Id) + { + case SPELL_TEST_RIBBON_POLE_CHANNEL_BLUE: + case SPELL_TEST_RIBBON_POLE_CHANNEL_RED: + case SPELL_TEST_RIBBON_POLE_CHANNEL_PINK: + break; + default: + return; + } + + // prevent duplicates + if (std::find(_dancerList.begin(), _dancerList.end(), dancer) != _dancerList.end()) + return; + + _dancerList.push_back(dancer); + } + + void LocateRibbonPole() + { + _scheduler.Schedule(420ms, [this](TaskContext context) + { + _ribbonPole = me->FindNearestGameObject(GO_RIBBON_POLE, 10.0f); + + if (!_ribbonPole) + context.Repeat(420ms); + }); + } + + void SpawnFireSpiralBunny() + { + _bunny = me->FindNearestCreature(NPC_RIBBON_POLE_FIRE_SPIRAL_BUNNY, 10.0f); + + if (!_bunny) + _bunny = DoSpawnCreature(NPC_RIBBON_POLE_FIRE_SPIRAL_BUNNY, 0, 0, 0, 0, TEMPSUMMON_MANUAL_DESPAWN, 0); + } + + void DoCleanupChecks() + { + if (_dancerList.empty()) + return; + + // remove non-dancing players from list + std::erase_if(_dancerList, [](Player* dancer) + { + return !dancer->HasAura(SPELL_RIBBON_POLE_PERIODIC_VISUAL); + }); + } + + void DoFlameCircleChecks() + { + if (!_ribbonPole) + return; + if (_dancerList.size() >= THRESHOLD_FLAME_CIRCLE) + { + // random blue / red circle + if (urand(0, 1)) + _ribbonPole->CastSpell(me, SPELL_FLAME_RING); + else + _ribbonPole->CastSpell(me, SPELL_FLAME_PATCH); + } + } + + void DoFireworkChecks() + { + if (!_bunny) + return; + + if (_dancerList.size() >= THRESHOLD_FIREWORK) + { + _bunny->CastSpell(nullptr, SPELL_RIBBON_POLE_FIREWORK); + } + if (_dancerList.size() >= THRESHOLD_FIREWORK_3) + { + _scheduler.Schedule(500ms, [this](TaskContext /*context*/) + { + _bunny->CastSpell(nullptr, SPELL_RIBBON_POLE_FIREWORK); + }) + .Schedule(1s, [this](TaskContext /*context*/) + { + _bunny->CastSpell(nullptr, SPELL_RIBBON_POLE_FIREWORK); + }); + } + if (_dancerList.size() >= THRESHOLD_FIREWORK_5) + { + _scheduler.Schedule(1500ms, [this](TaskContext /*context*/) + { + _bunny->CastSpell(nullptr, SPELL_RIBBON_POLE_FIREWORK); + }) + .Schedule(2s, [this](TaskContext /*context*/) + { + _bunny->CastSpell(nullptr, SPELL_RIBBON_POLE_FIREWORK); + }); + } + } + + void DoGroundFlowerChecks() + { + if (!_bunny) + return; + + if (_dancerList.size() >= THRESHOLD_GROUND_FLOWERS) + { + std::list crList; + me->GetCreaturesWithEntryInRange(crList, 20.0f, NPC_GROUND_FLOWER); + + if (crList.size() < MAX_COUNT_GROUND_FLOWERS) + _bunny->CastSpell(nullptr, SPELL_RIBBON_POLE_GROUND_FLOWER); + } + } + + void DoSpewLavaChecks() + { + if (!_bunny) + return; + + if (_dancerList.size() >= THRESHOLD_SPEW_LAVA) + { + if (!_dancerList.empty()) + { + Acore::Containers::RandomShuffle(_dancerList); + + for (uint8 i = 0; (i < MAX_COUNT_SPEW_LAVA_TARGETS) && (i < _dancerList.size()); i++) + { + Player* dancerTarget = _dancerList[i]; + + if (dancerTarget) + { + Creature* fireSpiralBunny = dancerTarget->SummonCreature(NPC_RIBBON_POLE_FIRE_SPIRAL_BUNNY, dancerTarget->GetPositionX(), dancerTarget->GetPositionY(), dancerTarget->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000); + if (fireSpiralBunny) + fireSpiralBunny->CastSpell(_bunny, SPELL_RIBBON_POLE_FIRE_SPIRAL_VISUAL, true); + } + } + } + } + } + + void DoDancingFLameChecks() + { + if (_dancerList.size() >= THRESHOLD_DANCING_FLAMES) + { + std::list crList; + me->GetCreaturesWithEntryInRange(crList, 20.0f, NPC_BIG_DANCING_FLAMES); + + if (crList.size() < MAX_COUNT_DANCING_FLAMES) + { + float spawnDist = 12.0f; + float angle = rand_norm() * 2 * M_PI; + DoSpawnCreature(NPC_BIG_DANCING_FLAMES, spawnDist * cos(angle), spawnDist * std::sin(angle), 0, angle + M_PI, TEMPSUMMON_TIMED_DESPAWN, 60000); + } + } + } + + void UpdateAI(uint32 diff) override + { + _scheduler.Update(diff); + } + +private: + TaskScheduler _scheduler; + std::vector _dancerList; + GameObject* _ribbonPole; + Creature* _bunny; +}; + +class spell_midsummer_ribbon_pole_firework : public SpellScript +{ + PrepareSpellScript(spell_midsummer_ribbon_pole_firework) + + void ModDestHeight(SpellDestination& dest) + { + Position const offset = { 0.0f, 0.0f, 20.0f , 0.0f }; + dest.RelocateOffset(offset); + } + + void Register() override + { + OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_midsummer_ribbon_pole_firework::ModDestHeight, EFFECT_0, TARGET_DEST_CASTER_RANDOM); + } }; class spell_midsummer_ribbon_pole : public AuraScript @@ -617,9 +879,11 @@ void AddSC_event_midsummer_scripts() // NPCs new go_midsummer_bonfire(); RegisterCreatureAI(npc_midsummer_torch_target); + RegisterCreatureAI(npc_midsummer_ribbon_pole_target); // Spells RegisterSpellScript(spell_gen_crab_disguise); + RegisterSpellScript(spell_midsummer_ribbon_pole_firework); RegisterSpellScript(spell_midsummer_ribbon_pole); RegisterSpellScript(spell_midsummer_ribbon_pole_visual); RegisterSpellScript(spell_midsummer_torch_quest); diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index e5cd77c38f60b7..255c4a4d5a59de 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -918,7 +918,8 @@ class npc_lake_frog : public CreatureScript player->AddAura(SPELL_WARTS, player); else { - DoCast(player, SPELL_FROG_KISS); // Removes SPELL_WARTSBGONE_LIP_BALM + // Removes SPELL_WARTSBGONE_LIP_BALM + player->CastSpell(player, SPELL_FROG_KISS, true); if (me->GetEntry() == NPC_LAKE_FROG) { @@ -1298,6 +1299,30 @@ class spell_warhead_fuse : public SpellScriptLoader } }; +// 62536 - Frog Kiss +class spell_frog_kiss : public SpellScript +{ + PrepareSpellScript(spell_frog_kiss); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_WARTSBGONE_LIP_BALM }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Player* target = GetHitPlayer()) + { + target->RemoveAurasDueToSpell(SPELL_WARTSBGONE_LIP_BALM); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_frog_kiss::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_grizzly_hills() { // Theirs @@ -1319,4 +1344,5 @@ void AddSC_grizzly_hills() new spell_warhead_fuse(); RegisterSpellScript(spell_q12227_outhouse_groans); RegisterSpellScript(spell_q12227_camera_shake); + RegisterSpellScript(spell_frog_kiss); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp index 832a11dcf6419e..edd836dd40aeeb 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp @@ -65,16 +65,13 @@ enum Spells enum Misc { - MAX_ADVISORS = 3, + MAX_ADVISORS = 2, NPC_SEER_OLUM = 22820, GO_CAGE = 185952, }; -const Position advisorsPosition[MAX_ADVISORS + 2] = +const Position advisorsPosition[MAX_ADVISORS] = { - {459.61f, -534.81f, -7.54f, 3.82f}, - {463.83f, -540.23f, -7.54f, 3.15f}, - {459.94f, -547.28f, -7.54f, 2.42f}, {448.37f, -544.71f, -7.54f, 0.00f}, {457.37f, -544.71f, -7.54f, 0.00f} }; @@ -94,21 +91,13 @@ struct boss_fathomlord_karathress : public BossAI BossAI::Reset(); _recentlySpoken = false; - me->SummonCreature(NPC_FATHOM_GUARD_TIDALVESS, advisorsPosition[0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 600000); - me->SummonCreature(NPC_FATHOM_GUARD_SHARKKIS, advisorsPosition[1], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 600000); - me->SummonCreature(NPC_FATHOM_GUARD_CARIBDIS, advisorsPosition[2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 600000); - ScheduleHealthCheckEvent(75, [&]{ - for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) - { - if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr)) + instance->DoForAllMinions(DATA_FATHOM_LORD_KARATHRESS, [&](Creature* fathomguard) { + if (fathomguard->IsAlive()) { - if (summon->GetMaxHealth() > 500000) - { - summon->CastSpell(me, SPELL_BLESSING_OF_THE_TIDES, true); - } + fathomguard->CastSpell(me, SPELL_BLESSING_OF_THE_TIDES, true); } - } + }); if (me->HasAura(SPELL_BLESSING_OF_THE_TIDES)) { Talk(SAY_GAIN_BLESSING); @@ -122,19 +111,22 @@ struct boss_fathomlord_karathress : public BossAI if (summon->GetEntry() == NPC_SEER_OLUM) { summon->SetWalk(true); - summon->GetMotionMaster()->MovePoint(0, advisorsPosition[MAX_ADVISORS + 1], false); + summon->GetMotionMaster()->MovePoint(0, advisorsPosition[MAX_ADVISORS - 1], false); } } void SummonedCreatureDies(Creature* summon, Unit*) override { - summons.Despawn(summon); if (summon->GetEntry() == NPC_FATHOM_GUARD_TIDALVESS) Talk(SAY_GAIN_ABILITY1); if (summon->GetEntry() == NPC_FATHOM_GUARD_SHARKKIS) Talk(SAY_GAIN_ABILITY2); if (summon->GetEntry() == NPC_FATHOM_GUARD_CARIBDIS) Talk(SAY_GAIN_ABILITY3); + scheduler.Schedule(1s, [this, summon](TaskContext) + { + summons.Despawn(summon); + }); } void KilledUnit(Unit* /*victim*/) override @@ -154,7 +146,7 @@ struct boss_fathomlord_karathress : public BossAI { Talk(SAY_DEATH); BossAI::JustDied(killer); - me->SummonCreature(NPC_SEER_OLUM, advisorsPosition[MAX_ADVISORS], TEMPSUMMON_TIMED_DESPAWN, 3600000); + me->SummonCreature(NPC_SEER_OLUM, advisorsPosition[MAX_ADVISORS-2], TEMPSUMMON_TIMED_DESPAWN, 3600000); if (GameObject* gobject = me->FindNearestGameObject(GO_CAGE, 100.0f)) { gobject->SetGoState(GO_STATE_ACTIVE); @@ -207,8 +199,6 @@ struct boss_fathomguard_sharkkis : public ScriptedAI { boss_fathomguard_sharkkis(Creature* creature) : ScriptedAI(creature), summons(creature) { - summons.clear(); - _instance = creature->GetInstanceScript(); _scheduler.SetValidator([this] @@ -224,6 +214,7 @@ struct boss_fathomguard_sharkkis : public ScriptedAI _scheduler.CancelAll(); summons.DespawnAll(); + summons.clear(); } void JustSummoned(Creature* summon) override @@ -232,8 +223,12 @@ struct boss_fathomguard_sharkkis : public ScriptedAI summons.Summon(summon); } - void JustEngagedWith(Unit* /*who*/) override + void JustEngagedWith(Unit* who) override { + if (Creature* karathress = _instance->GetCreature(DATA_FATHOM_LORD_KARATHRESS)) + { + karathress->Attack(who, false); + } _scheduler.Schedule(2500ms, [this](TaskContext context) { DoCastRandomTarget(SPELL_HURL_TRIDENT); @@ -268,7 +263,7 @@ struct boss_fathomguard_sharkkis : public ScriptedAI { if (Creature* karathress = _instance->GetCreature(DATA_FATHOM_LORD_KARATHRESS)) { - me->CastSpell(karathress, SPELL_POWER_OF_SHARKKIS); + me->CastSpell(karathress, SPELL_POWER_OF_SHARKKIS, true); } } @@ -416,8 +411,12 @@ struct boss_fathomguard_tidalvess : public ScriptedAI } } - void JustEngagedWith(Unit* /*who*/) override + void JustEngagedWith(Unit* who) override { + if (Creature* karathress = _instance->GetCreature(DATA_FATHOM_LORD_KARATHRESS)) + { + karathress->Attack(who, false); + } _scheduler.Schedule(10900ms, [this](TaskContext context) { DoCastVictim(SPELL_FROST_SHOCK); @@ -439,7 +438,7 @@ struct boss_fathomguard_tidalvess : public ScriptedAI { if (Creature* karathress = _instance->GetCreature(DATA_FATHOM_LORD_KARATHRESS)) { - me->CastSpell(karathress, SPELL_POWER_OF_TIDALVESS); + me->CastSpell(karathress, SPELL_POWER_OF_TIDALVESS, true); } } @@ -489,8 +488,12 @@ struct boss_fathomguard_caribdis : public ScriptedAI summons.Summon(summon); } - void JustEngagedWith(Unit* /*who*/) override + void JustEngagedWith(Unit* who) override { + if (Creature* karathress = _instance->GetCreature(DATA_FATHOM_LORD_KARATHRESS)) + { + karathress->Attack(who, false); + } _scheduler.Schedule(27900ms, [this](TaskContext context) { DoCastSelf(SPELL_WATER_BOLT_VOLLEY); @@ -517,7 +520,7 @@ struct boss_fathomguard_caribdis : public ScriptedAI { if (Creature* karathress = _instance->GetCreature(DATA_FATHOM_LORD_KARATHRESS)) { - me->CastSpell(karathress, SPELL_POWER_OF_CARIBDIS); + me->CastSpell(karathress, SPELL_POWER_OF_CARIBDIS, true); } } 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 90d4c5e6c3d11b..fdedecd3f1c35e 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp @@ -138,7 +138,10 @@ class instance_serpent_shrine : public InstanceMapScript if (Creature* vashj = instance->GetCreature(LadyVashjGUID)) vashj->AI()->JustSummoned(creature); break; + default: + break; } + InstanceScript::OnCreatureCreate(creature); } ObjectGuid GetGuidData(uint32 identifier) const override diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp index 79568a64b154bd..d83619f0cc9448 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp @@ -208,7 +208,11 @@ class spell_capacitus_polarity_shift : public SpellScript void HandleDummy(SpellEffIndex /*effIndex*/) { if (Unit* target = GetHitUnit()) + { + target->RemoveAurasDueToSpell(SPELL_POSITIVE_CHARGE_STACK); + target->RemoveAurasDueToSpell(SPELL_NEGATIVE_CHARGE_STACK); target->CastSpell(target, roll_chance_i(50) ? SPELL_POSITIVE_POLARITY : SPELL_NEGATIVE_POLARITY, true, nullptr, nullptr, GetCaster()->GetGUID()); + } } void Register() override diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index 021600e94e500f..00e2b6619f7aef 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -1734,6 +1734,71 @@ class npc_shadowmoon_tuber_node : public CreatureScript } }; +enum KorWild +{ + SAY_LAND = 0, + POINT_LAND = 1 +}; + +class npc_korkron_or_wildhammer : public ScriptedAI +{ +public: + npc_korkron_or_wildhammer(Creature* creature) : ScriptedAI(creature) + { + creature->SetDisableGravity(true); + creature->SetHover(true); + } + + void Reset() override + { + me->SetReactState(REACT_PASSIVE); + me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); + } + + void JustDied(Unit* /*killer*/) override + { + me->DespawnOrUnsummon(3s, 0s); + } + + void IsSummonedBy(WorldObject* summoner) override + { + _playerGUID = summoner->GetGUID(); + me->SetFacingToObject(summoner); + Position pos = summoner->GetPosition(); + me->GetMotionMaster()->MovePoint(POINT_LAND, pos); + } + + void MovementInform(uint32 type, uint32 id) override + { + if (type == POINT_MOTION_TYPE && id == POINT_LAND) + { + if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID)) + Talk(SAY_LAND, player); + + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + } + } +private: + ObjectGuid _playerGUID; +}; + +class spell_calling_korkron_or_wildhammer : public SpellScript +{ + PrepareSpellScript(spell_calling_korkron_or_wildhammer); + + void SetDest(SpellDestination& dest) + { + // Adjust effect summon position + Position const offset = { -14.0f, -14.0f, 16.0f, 0.0f }; + dest.RelocateOffset(offset); + } + + void Register() override + { + OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_calling_korkron_or_wildhammer::SetDest, EFFECT_0, TARGET_DEST_CASTER); + } +}; + void AddSC_shadowmoon_valley() { // Ours @@ -1755,4 +1820,6 @@ void AddSC_shadowmoon_valley() new npc_torloth_the_magnificent(); new npc_enraged_spirit(); new npc_shadowmoon_tuber_node(); + RegisterCreatureAI(npc_korkron_or_wildhammer); + RegisterSpellScript(spell_calling_korkron_or_wildhammer); } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 51fe69ea2fdaeb..e39caa92e4911d 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -5044,6 +5044,85 @@ class spell_gen_valthalak_amulet : public SpellScript } }; +enum ScourgeBanner +{ + GO_COMMAND_TENT = 176210, +}; + +class spell_gen_planting_scourge_banner : public SpellScript +{ + PrepareSpellScript(spell_gen_planting_scourge_banner) + + SpellCastResult CheckCast() + { + if (GameObject* tent = GetCaster()->FindNearestGameObject(GO_COMMAND_TENT, 20.0f)) + if (tent->GetGoState() != GO_STATE_READY) // If tent is burned down + return SPELL_CAST_OK; + + return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW; + } + + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_gen_planting_scourge_banner::CheckCast); + } +}; + +enum Jubling +{ + SPELL_JUBLING_COOLDOWN_1_WEEK = 23852 +}; + +// 23853 - Jubling Cooldown +class spell_gen_jubling_cooldown : public SpellScript +{ + PrepareSpellScript(spell_gen_jubling_cooldown); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_JUBLING_COOLDOWN_1_WEEK }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Player* target = GetHitPlayer()) + { + target->CastSpell(target, SPELL_JUBLING_COOLDOWN_1_WEEK); // 1 week + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_gen_jubling_cooldown::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 12699 - Yeh'kinya's Bramble +enum YehkinyaBramble +{ + NPC_VALE_SCREECHER = 5307, + NPC_ROGUE_VALE_SCREECHER = 5308 +}; + +class spell_gen_yehkinya_bramble : public SpellScript +{ + PrepareSpellScript(spell_gen_yehkinya_bramble) + + SpellCastResult CheckCast() + { + if (Unit* target = GetExplTargetUnit()) + if ((target->GetEntry() == NPC_VALE_SCREECHER || target->GetEntry() == NPC_ROGUE_VALE_SCREECHER) && target->isDead()) + return SPELL_CAST_OK; + + return SPELL_FAILED_BAD_TARGETS; + } + + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_gen_yehkinya_bramble::CheckCast); + } +}; + void AddSC_generic_spell_scripts() { RegisterSpellScript(spell_silithyst); @@ -5193,4 +5272,7 @@ void AddSC_generic_spell_scripts() RegisterSpellScript(spell_gen_spirit_of_competition_participant); RegisterSpellScript(spell_gen_spirit_of_competition_winner); RegisterSpellScript(spell_gen_valthalak_amulet); + RegisterSpellScript(spell_gen_planting_scourge_banner); + RegisterSpellScript(spell_gen_jubling_cooldown); + RegisterSpellScript(spell_gen_yehkinya_bramble); } diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index ee02c8d305a4dc..f62519df2f0ea8 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -69,7 +69,8 @@ enum HunterSpells SPELL_DRAENEI_GIFT_OF_THE_NAARU = 59543, SPELL_HUNTER_GLYPH_OF_ARCANE_SHOT = 61389, SPELL_LOCK_AND_LOAD_TRIGGER = 56453, - SPELL_LOCK_AND_LOAD_MARKER = 67544 + SPELL_LOCK_AND_LOAD_MARKER = 67544, + SPELL_HUNTER_PET_LEGGINGS_OF_BEAST_MASTERY = 38297, // Leggings of Beast Mastery }; class spell_hun_check_pet_los : public SpellScript @@ -165,6 +166,10 @@ class spell_hun_generic_scaling : public AuraScript SpellSchoolMask schoolMask = SpellSchoolMask(aurEff->GetSpellInfo()->Effects[aurEff->GetEffIndex()].MiscValue); int32 modifier = schoolMask == SPELL_SCHOOL_MASK_NORMAL ? 35 : 40; amount = CalculatePct(std::max(0, owner->GetResistance(schoolMask)), modifier); + if (owner->HasAura(SPELL_HUNTER_PET_LEGGINGS_OF_BEAST_MASTERY) && schoolMask == SPELL_SCHOOL_MASK_NORMAL) + { + amount += 490; + } } } @@ -180,6 +185,10 @@ class spell_hun_generic_scaling : public AuraScript AddPct(modifier, wildHuntEff->GetAmount()); amount = CalculatePct(std::max(0, owner->GetStat(Stats(aurEff->GetSpellInfo()->Effects[aurEff->GetEffIndex()].MiscValue))), modifier); + if (owner->HasAura(SPELL_HUNTER_PET_LEGGINGS_OF_BEAST_MASTERY)) + { + amount += 52; + } } } @@ -201,6 +210,10 @@ class spell_hun_generic_scaling : public AuraScript ownerAP += CalculatePct(owner->GetStat(STAT_STAMINA), HvWEff->GetAmount()); amount = CalculatePct(std::max(0, ownerAP), modifier); + if (owner->HasAura(SPELL_HUNTER_PET_LEGGINGS_OF_BEAST_MASTERY)) + { + amount += 70; + } } } diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index a95ea665b3a818..aa756c563241bc 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -84,6 +84,12 @@ enum PaladinSpells SPELL_PALADIN_SANCTIFIED_RETRIBUTION_AURA = 63531, SPELL_PALADIN_AURA_MASTERY_IMMUNE = 64364, + SPELL_JUDGEMENTS_OF_THE_JUST = 68055, + SPELL_JUDGEMENT_OF_VENGEANCE_EFFECT = 31804, + SPELL_HOLY_VENGEANCE = 31803, + SPELL_JUDGEMENT_OF_CORRUPTION_EFFECT = 53733, + SPELL_BLOOD_CORRUPTION = 53742, + SPELL_GENERIC_ARENA_DAMPENING = 74410, SPELL_GENERIC_BATTLEGROUND_DAMPENING = 74411 }; @@ -934,7 +940,26 @@ class spell_pal_judgement : public SpellScript // Judgement of the Just if (GetCaster()->GetAuraEffect(SPELL_AURA_ADD_FLAT_MODIFIER, SPELLFAMILY_PALADIN, 3015, 0)) - GetCaster()->CastSpell(GetHitUnit(), 68055, true); + { + if (GetCaster()->CastSpell(GetHitUnit(), SPELL_JUDGEMENTS_OF_THE_JUST, true) && (spellId2 == SPELL_JUDGEMENT_OF_VENGEANCE_EFFECT || spellId2 == SPELL_JUDGEMENT_OF_CORRUPTION_EFFECT)) + { + //hidden effect only cast when spellcast of judgements of the just is succesful + GetCaster()->CastSpell(GetHitUnit(), SealApplication(spellId2), true); //add hidden seal apply effect for vengeance and corruption + } + } + } + + uint32 SealApplication(uint32 correspondingSpellId) + { + switch (correspondingSpellId) + { + case SPELL_JUDGEMENT_OF_VENGEANCE_EFFECT: + return SPELL_HOLY_VENGEANCE; + case SPELL_JUDGEMENT_OF_CORRUPTION_EFFECT: + return SPELL_BLOOD_CORRUPTION; + default: + return 0; + } } void Register() override diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index a41ae5ba5a425c..b32ddc3608bd45 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -243,6 +243,7 @@ class spell_warl_demonic_aegis : public AuraScript } }; +// -35696 - Demonic Knowledge class spell_warl_demonic_knowledge : public AuraScript { PrepareAuraScript(spell_warl_demonic_knowledge); @@ -250,7 +251,10 @@ class spell_warl_demonic_knowledge : public AuraScript void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/) { if (Unit* caster = GetCaster()) - amount = CalculatePct(caster->GetStat(STAT_STAMINA) + caster->GetStat(STAT_INTELLECT), aurEff->GetBaseAmount()); + { + uint8 pct = aurEff->GetBaseAmount() + aurEff->GetDieSides(); + amount = CalculatePct(caster->GetStat(STAT_STAMINA) + caster->GetStat(STAT_INTELLECT), pct); + } } void CalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)